PageSourceSearch

https://lib.heron-mc.org/heron/1.0.7/script/Heron.js

js heron-mc.org collected 2026-10-04 07:54:23 UTC 381,776 bytes, 1,028 lines download raw bytes

1/*
2 * This program is free software: you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation, either version 3 of the License, or
5 * (at your option) any later version.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
14 */
15
16Ext.namespace("Heron.i18n");function __(string){var dict=Heron.i18n.dict;if(typeof(dict)!='undefined'&&dict[string]){return dict[string];}
17return string;}
18Ext.namespace("gxp");if(!gxp.QueryPanel){gxp.QueryPanel=function(){};}else{Ext.namespace("gxp.data");gxp.data.WFSProtocolProxy=Ext.extend(GeoExt.data.ProtocolProxy,{setFilter:function(filter){this.protocol.filter=filter;this.protocol.options.filter=filter;},constructor:function(config){Ext.applyIf(config,{version:"1.1.0"});if(!(this.protocol&&this.protocol instanceof OpenLayers.Protocol)){config.protocol=new OpenLayers.Protocol.WFS(Ext.apply({version:config.version,srsName:config.srsName,url:config.url,featureType:config.featureType,featureNS:config.featureNS,geometryName:config.geometryName,schema:config.schema,filter:config.filter,maxFeatures:config.maxFeatures,outputFormat:(config.url.indexOf('nationaalgeoregister')>0||config.url.indexOf('sensors.geonovum.nl')>0)?'GML2':config.outputFormat,multi:config.multi},config.protocol));}
19gxp.data.WFSProtocolProxy.superclass.constructor.apply(this,arguments);},doRequest:function(action,records,params,reader,callback,scope,arg){delete params.xaction;if(action===Ext.data.Api.actions.read){this.load(params,reader,callback,scope,arg);}else{if(!(records instanceof Array)){records=[records];}
20var features=new Array(records.length),feature;Ext.each(records,function(r,i){features[i]=r.getFeature();feature=features[i];feature.modified=Ext.apply(feature.modified||{},{attributes:Ext.apply((feature.modified&&feature.modified.attributes)||{},r.modified)});},this);var o={action:action,records:records,callback:callback,scope:scope};var options={callback:function(response){this.onProtocolCommit(response,o);},scope:this};Ext.applyIf(options,params);this.protocol.commit(features,options);}},onProtocolCommit:function(response,o){if(response.success()){var features=response.reqFeatures;var state,feature;var destroys=[];var insertIds=response.insertIds||[];var i,len,j=0;for(i=0,len=features.length;i<len;++i){feature=features[i];state=feature.state;if(state){if(state==OpenLayers.State.DELETE){destroys.push(feature);}else if(state==OpenLayers.State.INSERT){feature.fid=insertIds[j];++j;}else if(feature.modified){feature.modified={};}
21feature.state=null;}}
22for(i=0,len=destroys.length;i<len;++i){feature=destroys[i];feature.layer&&feature.layer.destroyFeatures([feature]);}
23len=features.length;var data=new Array(len);var f;for(i=0;i<len;++i){f=features[i];data[i]={id:f.id,feature:f,state:null};var fields=o.records[i].fields;for(var a in f.attributes){if(fields.containsKey(a)){data[i][a]=f.attributes[a];}}}
24o.callback.call(o.scope,data,response.priv,true);}else{var request=response.priv;if(request.status>=200&&request.status<300){this.fireEvent("exception",this,"remote",o.action,o,response.error,o.records);}else{this.fireEvent("exception",this,"response",o.action,o,request);}
25o.callback.call(o.scope,[],request,false);}}});Ext.namespace("gxp.plugins");Ext.override(gxp.plugins.CSWCatalogueSource,{filter:function(options){var filter=undefined;if(options.queryString!==""){filter=new OpenLayers.Filter.Comparison({type:OpenLayers.Filter.Comparison.LIKE,matchCase:undefined,property:'csw:AnyText',value:'*'+options.queryString+'*'});}
26var data={"resultType":"results","maxRecords":options.limit,"outputSchema":this.outputSchema,"Query":{"typeNames":"gmd:MD_Metadata","ElementSetName":{"value":"full"}}};var fullFilter=this.getFullFilter(filter,options.filters);if(fullFilter!==undefined){Ext.apply(data.Query,{"Constraint":{version:"1.1.0",Filter:fullFilter}});}
27Ext.apply(this.store.baseParams,data);this.store.load();}});}
28if(gxp.ColorManager){Ext.override(gxp.ColorManager,{fieldFocus:function(field){if(!gxp.ColorManager.pickerWin){gxp.ColorManager.picker=new Ext.ColorPalette
28();gxp.ColorManager.pickerWin=new Ext.Window({title:"Color Picker",closeAction:"hide",autoWidth:Ext.isIE?false:true,autoHeight:Ext.isIE?false:true});}else{gxp.ColorManager.picker.purgeListeners();}
29var listenerCfg={select:this.setFieldValue,scope:this};var value=this.getPickerValue();if(value){var colors=[].concat(gxp.ColorManager.picker.colors);if(!~colors.indexOf(value)){if(gxp.ColorManager.picker.ownerCt){gxp.ColorManager.pickerWin.remove(gxp.ColorManager.picker);gxp.ColorManager.picker=new Ext.ColorPalette();}
30colors.push(value);gxp.ColorManager.picker.colors=colors;}
31gxp.ColorManager.pickerWin.add(gxp.ColorManager.picker);if(Ext.isIE){gxp.ColorManager.pickerWin.setSize(456+10,248+36);}
32gxp.ColorManager.pickerWin.doLayout();if(gxp.ColorManager.picker.rendered){gxp.ColorManager.picker.select(value);}else{listenerCfg.afterrender=function(){gxp.ColorManager.picker.select(value);};}}
33gxp.ColorManager.picker.on(listenerCfg);gxp.ColorManager.pickerWin.show();}});}
34if(!Ext.grid.GridView.prototype.templates){Ext.grid.GridView.prototype.templates={};}
35Ext.grid.GridView.prototype.templates.cell=new Ext.Template('<td class="x-grid3-col x-grid3-cell x-grid3-td-{id} x-selectable {css}" style="{style}" tabIndex="0" {cellAttr}>','<div class="x-grid3-cell-inner x-grid3-col-{id}" {attr}>{value}</div>','</td>');(function(){var createComplete=function(fn,cb){return function(request){if(cb&&cb[fn]){cb[fn].call(cb.scope||window,Ext.applyIf({argument:cb.argument},request));}};};Ext.apply(Ext.lib.Ajax,{request:function(method,uri,cb,data,options){options=options||{};method=method||options.method;var hs=options.headers;if(options.xmlData){if(!hs||!hs["Content-Type"]){hs=hs||{};hs["Content-Type"]="text/xml";}
36method=method||"POST";data=options.xmlData;}else if(options.jsonData){if(!hs||!hs["Content-Type"]){hs=hs||{};hs["Content-Type"]="application/json";}
37method=method||"POST";data=typeof options.jsonData=="object"?Ext.encode(options.jsonData):options.jsonData;}
38if((method&&method.toLowerCase()=="post")&&(options.form||options.params)&&(!hs||!hs["Content-Type"])){hs=hs||{};hs["Content-Type"]="application/x-www-form-urlencoded";}
39return OpenLayers.Request.issue({success:createComplete("success",cb),failure:createComplete("failure",cb),method:method,headers:hs,data:data,url:uri});},isCallInProgress:function(request){return true;},abort:function(request){request.abort();}});})();Ext.override(Ext.ColorPalette,{colors:['FBEFEF','FBF2EF','FBF5EF','FBF8EF','FBFBEF','F8FBEF','F5FBEF','F2FBEF','EFFBEF','EFFBF2','EFFBF5','EFFBF8','EFFBFB','EFF8FB','EFF5FB','EFF2FB','EFEFFB','F2EFFB','F5EFFB','F8EFFB','FBEFFB','FBEFF8','FBEFF5','FBEFF2','FFFFFF','F8E0E0','F8E6E0','F8ECE0','F7F2E0','F7F8E0','F1F8E0','ECF8E0','E6F8E0','E0F8E0','E0F8E6','E0F8EC','E0F8F1','E0F8F7','E0F2F7','E0ECF8','E0E6F8','E0E0F8','E6E0F8','ECE0F8','F2E0F7','F8E0F7','F8E0F1','F8E0EC','F8E0E6','FAFAFA','F6CECE','F6D8CE','F6E3CE','F5ECCE','F5F6CE','ECF6CE','E3F6CE','D8F6CE','CEF6CE','CEF6D8','CEF6E3','CEF6EC','CEF6F5','CEECF5','CEE3F6','CED8F6','CECEF6','D8CEF6','E3CEF6','ECCEF5','F6CEF5','F6CEEC','F6CEE3','F6CED8','F2F2F2','F5A9A9','F5BCA9','F5D0A9','F3E2A9','F2F5A9','E1F5A9','D0F5A9','BCF5A9','A9F5A9','A9F5BC','A9F5D0','A9F5E1','A9F5F2','A9E2F3','A9D0F5','A9BCF5','A9A9F5','BCA9F5','D0A9F5','E2A9F3','F5A9F2','F5A9E1','F5A9D0','F5A9BC','E6E6E6','F78181','F79F81','F7BE81','F5DA81','F3F781','D8F781','BEF781','9FF781','81F781','81F79F','81F7BE','81F7D8','81F7F3','81DAF5','81BEF7','819FF7','8181F7','9F81F7','BE81F7','DA81F5','F781F3','F781D8','F781BE','F7819F','D8D8D8','FA5858','FA8258','FAAC58','F7D358','F4FA58','D0FA58','ACFA58','82FA58','58FA58','58FA82','58FAAC','58FAD0','58FAF4','58D3F7','58ACFA','5882FA','5858FA','8258FA','AC58FA','D358F7','FA58F4','FA58D0','FA58AC','FA5882','BDBDBD','FE2E2E','FE642E','FE9A2E','FACC2E','F7FE2E','C8FE2E','9AFE2E','64FE2E','2EFE2E','2EFE64','2EFE9A','2EFEC8','2EFEF7','2ECCFA','2E9AFE','2E64FE','2E2EFE','642EFE','9A2EFE','CC2EFA','FE2EF7','FE2EC8','FE2E9A','FE2E64','A4A4A4','FF0000','FF4000','FF8000','FFBF00','FFFF00','BFFF00','80FF00','40FF00','00FF00','00FF40','00FF80','00FFBF','00FFFF','00BFFF','0080FF','0040FF','0000FF','4000FF','8000FF','BF00FF','FF00FF','FF00BF','FF0080','FF0040','848484','DF0101','DF3A01','DF7401','DBA901','D7DF01','A5DF00','74DF00','3ADF00','01DF01','01DF3A','01DF74','01DFA5','01DFD7','01A9DB','0174DF','013ADF','0101DF','3A01DF','7401DF','A901DB','DF01D7','DF01A5','DF0174','DF013A','6E6E6E','B40404','B43104','B45F04','B18904','AEB404','86B404','5FB404','31B404','04B404','04B431','04B45F','04B486','04B4AE','0489B1','045FB4','0431B4','0404B4','3104B4','5F04B4','8904B1','B404AE','B40486','B4045F','B40431','585858','8A0808','8A2908','8A4B08','886A08','868A08','688A08','4B8A08','298A08','088A08','088A29','088A4B','088A68','088A85','086A87','084B8A','08298A','08088A','29088A','4B088A','6A0888','8A0886','8A0868','8A084B','8A0829','424242','610B0B','61210B','61380B','5F4C0B','5E610B','4B610B','38610B','21610B','0B610B','0B6121','0B6138','0B614B','0B615E','0B4C5F','0B3861','0B2161','0B0B61','210B61','380B61','4C0B5F','610B5E','610B4B','610B38','610B21','2E2E2E','190707','190B07','191007','181407','181907','141907','101907','0B1907','071907','07190B','071910','071914','071918','071418','071019','070B19','070719','0B0719','100719','140718','190718','190714','190710','19070B','000000']});Ext.override(Ext.grid.PropertyColumnModel,{renderCell:function(val,meta,rec){var renderer=this.grid.customRenderers[rec.get('name')];if(renderer){return renderer.apply(this,arguments);}
40var rv=val;if(Ext.isDate(val)){rv=this.renderDate(val);}else if(typeof val=='boolean'){rv=this.renderBool(val);}
41if(val&&(val.indexOf("<")>=0)&&((val.lastIndexOf("<")<val.lastIndexOf("\>")))){return rv;}else{return Ext.util.Format.htmlEncode(rv);}}});OpenLayers.Format.Atom.prototype.parseLocations=function(node){var georssns=this.namespaces.georss;var locations={components:[]};var where=this.getElementsByTagNameNS(node,georssns,"where");if(where&&where.length>0){if(!this.gmlParser){this.initGmlParser();}
42for(var i=0,ii=where.length;i<ii;i++){this.gmlParser.readChildNodes(where[i],locations);}}
43var components=locations.components;var point=this.getElementsByTagNameNS(node,georssns,"point");if(point&&point.length>0){for(var i=0,ii=point.length;i<ii;i++){var xy=OpenLayers.String.trim(point[i].firstChild.nodeValue).split(/\s+/);if(xy.length!=2){xy=OpenLayers.String.trim(point[i].firstChild.nodeValue).split(/\s*,\s*/);}
44components.push(new OpenLayers.Geometry.Point(xy[1],xy[0]));}}
45var line=this.getElementsByTagNameNS(node,georssns,"line");if(line&&line.length>0){var coords;var p;var points;for(var i=0,ii=line.length;i<ii;i++){coords=OpenLayers.String.trim(line[i].firstChild.nodeValue).split(/\s+/);points=[];for(var j=0,jj=coords.length;j<jj;
45j+=2){p=new OpenLayers.Geometry.Point(coords[j+1],coords[j]);points.push(p);}
46components.push(new OpenLayers.Geometry.LineString(points));}}
47var polygon=this.getElementsByTagNameNS(node,georssns,"polygon");if(polygon&&polygon.length>0){var coords;var p;var points;for(var i=0,ii=polygon.length;i<ii;i++){coords=OpenLayers.String.trim(polygon[i].firstChild.nodeValue).split(/\s+/);points=[];for(var j=0,jj=coords.length;j<jj;j+=2){p=new OpenLayers.Geometry.Point(coords[j+1],coords[j]);points.push(p);}
48components.push(new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(points)]));}}
49if(this.internalProjection&&this.externalProjection){for(var i=0,ii=components.length;i<ii;i++){if(components[i]){components[i].transform(this.externalProjection,this.internalProjection);}}}
50return components;};OpenLayers.Util.modifyDOMElement=function(element,id,px,sz,position,border,overflow,opacity){if(id){element.id=id;}
51if(px){if(!px.x){px.x=0;}
52if(!px.y){px.y=0;}
53element.style.left=px.x+"px";element.style.top=px.y+"px";}
54if(sz){element.style.width=sz.w+"px";element.style.height=sz.h+"px";}
55if(position){element.style.position=position;}
56if(border){element.style.border=border;}
57if(overflow){element.style.overflow=overflow;}
58if(parseFloat(opacity)>=0.0&&parseFloat(opacity)<1.0){element.style.filter='alpha(opacity='+(opacity*100)+')';element.style.opacity=opacity;}else if(parseFloat(opacity)==1.0){element.style.filter='';element.style.opacity='';}};OpenLayers.Layer.Vector.prototype.setOpacity=function(opacity){if(opacity!=this.opacity){this.opacity=opacity;var element=this.renderer.root;OpenLayers.Util.modifyDOMElement(element,null,null,null,null,null,null,opacity);if(this.map!=null){this.map.events.triggerEvent("changelayer",{layer:this,property:"opacity"});}}};OpenLayers.Feature.Vector.prototype.clone=function(){var clone=new OpenLayers.Feature.Vector(this.geometry?this.geometry.clone():null,this.attributes,this.style);clone.renderIntent=this.renderIntent;return clone;};OpenLayers.Layer.Vector.prototype.clone=function(obj){if(obj==null){obj=new OpenLayers.Layer.Vector(this.name,this.getOptions());}
59obj=OpenLayers.Layer.prototype.clone.apply(this,[obj]);if(this.strategies){obj.strategies=[];for(var i=0,len=this.strategies.length;i<len;i++){obj.strategies.push(Heron.Utils.createOLObject([this.strategies[i].CLASS_NAME,this.strategies[i]]));obj.strategies[i].setLayer(obj);}}
60var features=this.features;var len=features.length;var clonedFeatures=new Array(len);for(var i=0;i<len;++i){clonedFeatures[i]=features[i].clone();if(features[i].layer){clonedFeatures[i].layer=obj;}}
61obj.features=clonedFeatures;if(this.styleMap&&this.styleMap.styles){var clonedStyles={};for(var key in this.styleMap.styles){clonedStyles[key]=this.styleMap.styles[key].clone();}
62obj.styleMap=new OpenLayers.StyleMap(clonedStyles);}
63return obj;};OpenLayers.Map.prototype.destroy=function(){if(!this.unloadDestroy){return false;}
64if(this.panTween){this.panTween.stop();this.panTween=null;}
65OpenLayers.Event.stopObserving(window,'unload',this.unloadDestroy);this.unloadDestroy=null;if(this.updateSizeDestroy){OpenLayers.Event.stopObserving(window,'resize',this.updateSizeDestroy);}else{this.events.unregister("resize",this,this.updateSize);}
66this.paddingForPopups=null;if(this.controls!=null){for(var i=this.controls.length-1;i>=0;--i){if(this.controls[i]!=undefined){this.controls[i].destroy();}}
67this.controls=null;}
68if(this.layers!=null){for(var i=this.layers.length-1;i>=0;--i){this.layers[i].destroy(false);}
69this.layers=null;}
70if(this.viewPortDiv){this.div.removeChild(this.viewPortDiv);}
71this.viewPortDiv=null;if(this.eventListeners){this.events.un(this.eventListeners);this.eventListeners=null;}
72this.events.destroy();this.events=null;this.options=null;};OpenLayers.Rule.prototype.clone=function(){var options=OpenLayers.Util.extend({},this);if(this.symbolizers){var len=this.symbolizers.length;options.symbolizers=new Array(len);for(var i=0;i<len;++i){options.symbolizers[i]=this.symbolizers[i].clone();}}else{options.symbolizer={};var value,type;for(var key in this.symbolizer){value=this.symbolizer[key];type=typeof value;if(type==="object"){options.symbolizer[key]=OpenLayers.Util.extend({},value);}else{options.symbolizer[key]=value;}}}
73options.filter=this.filter&&this.filter.clone();options.context=this.context&&OpenLayers.Util.extend({},this.context);return new OpenLayers.Rule(options);};OpenLayers.Control.SelectFeature.prototype.highlight=function(feature){var layer=feature.layer;var cont=this.events.triggerEvent("beforefeaturehighlighted",{feature:feature});if(cont!==false){feature._prevHighlighter=feature._lastHighlighter;feature._lastHighlighter=this.id;if(feature.style&&!this.selectStyle&&layer.styleMap){var styleMap=layer.styleMap;var selectStyle=styleMap.styles['select'];if(selectStyle){var defaultStyle=styleMap.styles['default'].clone();this.selectStyle=OpenLayers.Util.extend(defaultStyle.defaultStyle,selectStyle.defaultStyle);}}
74var style=this.selectStyle||this.renderIntent;layer.drawFeature(feature,style);this.events.triggerEvent("featurehighlighted",{feature:feature});}};OpenLayers.Control.WMSGetFeatureInfo.prototype.buildWMSOptions=function(url,layers,clickPosition,format){var layerNames=[],styleNames=[];var time;for(var i=0,len=layers.length;i<len;i++){if(layers[i].params.LAYERS!=null){layerNames=layerNames.concat(layers[i].params.LAYERS);
74styleNames=styleNames.concat(this.getStyleNames(layers[i]));}
75if(layers[i].params.TIME!=null){this.vendorParams.time=layers[i].params.TIME;}}
76var firstLayer=layers[0];var projection=this.map.getProjection();var layerProj=firstLayer.projection;if(layerProj&&layerProj.equals(this.map.getProjectionObject())){projection=layerProj.getCode();}
77var params=OpenLayers.Util.extend({service:"WMS",version:firstLayer.params.VERSION,request:"GetFeatureInfo",exceptions:firstLayer.params.EXCEPTIONS,bbox:this.map.getExtent().toBBOX(null,firstLayer.reverseAxisOrder()),feature_count:this.maxFeatures,height:this.map.getSize().h,width:this.map.getSize().w,format:format,info_format:firstLayer.params.INFO_FORMAT||this.infoFormat},(parseFloat(firstLayer.params.VERSION)>=1.3)?{crs:projection,i:parseInt(clickPosition.x),j:parseInt(clickPosition.y)}:{srs:projection,x:parseInt(clickPosition.x),y:parseInt(clickPosition.y)});if(layerNames.length!=0){params=OpenLayers.Util.extend({layers:layerNames,query_layers:layerNames,styles:styleNames},params);}
78OpenLayers.Util.applyDefaults(params,firstLayer.params.vendorParams);OpenLayers.Util.applyDefaults(params,this.vendorParams);return{url:url,params:OpenLayers.Util.upperCaseObject(params),callback:function(request){this.handleResponse(clickPosition,request,url);},scope:this};};OpenLayers.Control.WMSGetFeatureInfo.prototype.request=function(clickPosition,options){var layers=this.findLayers();if(layers.length==0){this.events.triggerEvent("nogetfeatureinfo");OpenLayers.Element.removeClass(this.map.viewPortDiv,"olCursorWait");return;}
79options=options||{};if(this.drillDown===false){var wmsOptions=this.buildWMSOptions(this.url,layers,clickPosition,layers[0].params.FORMAT);var request=OpenLayers.Request.GET(wmsOptions);if(options.hover===true){this.hoverRequest=request;}}else{this._requestCount=0;this._numRequests=0;this.features=[];var services={},url;for(var i=0,len=layers.length;i<len;i++){var layer=layers[i];var service,found=false;url=OpenLayers.Util.isArray(layer.url)?layer.url[0]:layer.url;if(url in services){services[url].push(layer);}else{this._numRequests++;services[url]=[layer];}}
80var layers;for(var url in services){layers=services[url];if(this.requestPerLayer){for(var l=0,len=layers.length;l<len;l++){var wmsOptions=this.buildWMSOptions(url,[layers[l]],clickPosition,layers[0].params.FORMAT);var req=OpenLayers.Request.GET(wmsOptions);req.layer=layers[l];}
81this._numRequests+=layers.length-1;}else{var wmsOptions=this.buildWMSOptions(url,layers,clickPosition,layers[0].params.FORMAT);OpenLayers.Request.GET(wmsOptions);}}}};OpenLayers.Control.WMSGetFeatureInfo.prototype.handleResponse=function(xy,request,url){var doc=request.responseXML;if(!doc||!doc.documentElement){doc=request.responseText;}
82var features=this.format.read(doc);if(request.layer&&features){for(var f=0;f<features.length;f++){features[f].layer=request.layer;}}
83if(this.drillDown===false){this.triggerGetFeatureInfo(request,xy,features);}else{this._requestCount++;if(this.output==="object"){this._features=(this._features||[]).concat({url:url,features:features});}else{this._features=(this._features||[]).concat(features);}
84if(this._requestCount===this._numRequests){this.triggerGetFeatureInfo(request,xy,this._features.concat());delete this._features;delete this._requestCount;delete this._numRequests;}}};OpenLayers.Format.XML.prototype.read=function(text){var index=text.indexOf('<');if(index>0){text=text.substring(index);}
85var node=OpenLayers.Util.Try(OpenLayers.Function.bind((function(){var xmldom;if(window.ActiveXObject&&!this.xmldom){xmldom=new ActiveXObject("Microsoft.XMLDOM");}else{xmldom=this.xmldom;}
86xmldom.validateOnParse=false;xmldom.loadXML(text);return xmldom;}),this),function(){return new DOMParser().parseFromString(text,'text/xml');},function(){var req=new XMLHttpRequest();req.open("GET","data:"+"text/xml"+";charset=utf-8,"+encodeURIComponent(text),false);if(req.overrideMimeType){req.overrideMimeType("text/xml");}
87req.send(null);return req.responseXML;});if(this.keepData){this.data=node;}
88return node;};OpenLayers.Format.TMSCapabilities=OpenLayers.Class(OpenLayers.Format.XML,{defaultPrefix:"tms",readers:{"tms":{"Services":function(node,obj){obj.services=[];this.readChildNodes(node,obj);},"TileMapService":function(node,obj){if(obj.services){obj.services.push({service:'TMS',version:node.getAttribute("version"),title:node.getAttribute("title"),href:node.getAttribute("href")});}else{this.readChildNodes(node,obj);}}
88,"TileMaps":function(node,obj){obj.tileMaps=[];this.readChildNodes(node,obj);},"TileMap":function(node,obj){if(obj.tileMaps){obj.tileMaps.push({href:node.getAttribute("href"),srs:node.getAttribute("srs"),title:node.getAttribute("title"),profile:node.getAttribute("profile")});}else{obj.version=node.getAttribute("version");obj.tileMapService=node.getAttribute("tilemapservice");this.readChildNodes(node,obj);}},"Title":function(node,obj){obj.title=this.getChildValue(node);},"Abstract":function(node,obj){obj['abstract']=this.getChildValue(node);},"SRS":function(node,obj){obj.srs=this.getChildValue(node);},"BoundingBox":function(node,obj){obj.bbox=new OpenLayers.Bounds(node.getAttribute("minx"),node.getAttribute("miny"),node.getAttribute("maxx"),node.getAttribute("maxy"));},"Origin":function(node,obj){obj.origin=new OpenLayers.LonLat(node.getAttribute("x"),node.getAttribute("y"));},"TileFormat":function(node,obj){obj.tileFormat={width:parseInt(node.getAttribute("width"),10),height:parseInt(node.getAttribute("height"),10),mimeType:node.getAttribute("mime-type"),extension:node.getAttribute("extension")};},"TileSets":function(node,obj){obj.tileSets=[];this.readChildNodes(node,obj);},"TileSet":function(node,obj){obj.tileSets.push({href:node.getAttribute("href"),unitsPerPixel:parseFloat(node.getAttribute("units-per-pixel")),order:parseInt(node.getAttribute("order"),10)});},"TileMapServerError":function(node,obj){obj.error=true;},"Message":function(node,obj){obj.message=this.getChildValue(node);}}}
88,read:function(data){if(typeof data=="string"){data=OpenLayers.Format.XML.prototype.read.apply(this,[data]);}
89var raw=data;if(data&&data.nodeType==9){data=data.documentElement;}
90var capabilities={};this.readNode(data,capabilities);return capabilities;},CLASS_NAME:"OpenLayers.Format.TMSCapabilities"});OpenLayers.Protocol.CSW.v2_0_2.prototype.read=function(options){options=OpenLayers.Util.extend({},options);OpenLayers.Util.applyDefaults(options,this.options||{});var response=new OpenLayers.Protocol.Response({requestType:"read"});var data=this.format.write(options.params||options);response.priv=OpenLayers.Request.POST({url:options.url,callback:this.createCallback(this.handleRead,response,options),params:options.params,headers:options.headers,data:data});return response;};OpenLayers.Util.extend(OpenLayers.Format.CSWGetRecords.v2_0_2.prototype.namespaces,{xmlns:"http://www.w3.org/2000/xmlns/"});OpenLayers.Format.CSWGetRecords.v2_0_2.prototype.write=function(options){var node=this.writeNode("csw:GetRecords",options);this.setAttributeNS(node,this.namespaces.xmlns,"xmlns:gmd",this.namespaces.gmd);return OpenLayers.Format.XML.prototype.write.apply(this,[node]);};OpenLayers.Util.extend(OpenLayers.Format.SOSGetObservation.prototype.namespaces,{xmlns:"http://www.w3.org/2000/xmlns/"});OpenLayers.Format.SOSGetObservation.prototype.write=function(options){var node=this.writeNode("sos:GetObservation",options);this.setAttributeNS(node,this.namespaces.xmlns,"xmlns:om",this.namespaces.om);this.setAttributeNS(node,this.namespaces.xmlns,"xmlns:ogc",this.namespaces.ogc);this.setAttributeNS(node,this.namespaces.xsi,"xsi:schemaLocation",this.schemaLocation);return OpenLayers.Format.XML.prototype.write.apply(this,[node]);};OpenLayers.Util.extend(OpenLayers.Format.WFST.v1.prototype.namespaces,{xmlns:"http://www.w3.org/2000/xmlns/",gml32:"http://www.opengis.net/gml/3.2"});OpenLayers.Format.WFST.v1.prototype.writers={"wfs":{"GetFeature":function(options){var node=this.createElementNSPlus("wfs:GetFeature",{attributes:{service:"WFS",version:this.version,handle:options&&options.handle,outputFormat:options&&options.outputFormat,maxFeatures:options&&options.maxFeatures,"xsi:schemaLocation":this.schemaLocationAttr(options)}});if(typeof this.featureType=="string"){this.writeNode("Query",options,node);}else{for(var i=0,len=this.featureType.length;i<len;i++){options.featureType=this.featureType[i];this.writeNode("Query",options,node);}}
91return node;},"Transaction":function(obj){obj=obj||{};var options=obj.options||{};var node=this.createElementNSPlus("wfs:Transaction",{attributes:{service:"WFS",version:this.version,handle:options.handle}});var i,len;var features=obj.features;if(features){if(options.multi===true){OpenLayers.Util.extend(this.geometryTypes,{"OpenLayers.Geometry.Point":"MultiPoint","OpenLayers.Geometry.LineString":(this.multiCurve===true)?"MultiCurve":"MultiLineString","OpenLayers.Geometry.Polygon":(this.multiSurface===true)?"MultiSurface":"MultiPolygon"});}
92var name,feature;for(i=0,len=features.length;i<len;++i){feature=features[i];name=this.stateName[feature.state];if(name){this.writeNode(name,{feature:feature,options:options},node);}}
93if(options.multi===true){this.setGeometryTypes();}}
94if(options.nativeElements){for(i=0,len=options.nativeElements.length;i<len;++i){this.writeNode("wfs:Native",options.nativeElements[i],node);}}
95return node;},"Native":function(nativeElement){var node=this.createElementNSPlus("wfs:Native",{attributes:{vendorId:nativeElement.vendorId,safeToIgnore:nativeElement.safeToIgnore},value:nativeElement.value});return node;},"Insert":function(obj){var feature=obj.feature;var options=obj.options;var node=this.createElementNSPlus("wfs:Insert",{attributes:{handle:options&&options.handle}});this.srsName=this.getSrsName(feature);this.writeNode("feature:_typeName",feature,node);return node;},"Update":function(obj){var feature=obj.feature;var options=obj.options;var node=this.createElementNSPlus("wfs:Update",{attributes:{handle:options&&options.handle,typeName:(this.featureNS?this.featurePrefix+":":"")+
96this.featureType}});if(this.featureNS){this.setAttributeNS(node,this.namespaces.xmlns,"xmlns:"+this.featurePrefix,this.featureNS);}
97var modified=feature.modified;if(this.geometryName!==null&&(!modified||modified.geometry!==undefined)){this.srsName=this.getSrsName(feature);this.writeNode("Property",{name:this.geometryName,value:feature.geometry},node);}
98for(var key in feature.attributes){if(feature.attributes[key]!==undefined&&(!modified||!modified.attributes||(modified.attributes&&(key in modified.attributes)))){this.writeNode("Property",{name:key,value:feature.attributes[key]},node);}}
99this.writeNode("ogc:Filter",new OpenLayers.Filter.FeatureId({fids:[feature.fid]}),node);return node;},"Property":function(obj){var node=this.createElementNSPlus("wfs:Property");this.writeNode("Name",obj.name,node);if(obj.value!==null){this.writeNode("Value",obj.value,node);}
100return node;},"Name":function(name){return this.createElementNSPlus("wfs:Name",{value:name});},"Value":function(obj){var node;if(obj instanceof OpenLayers.Geometry){node=this.createElementNSPlus("wfs:Value");var geom=this.writeNode("feature:_geometry",obj).firstChild;node.appendChild(geom);}else{node=this.createElementNSPlus("wfs:Value",{value:obj});}
101return node;},"Delete":function(obj){var feature=obj.feature;var options=obj.options;var node=this.createElementNSPlus("wfs:Delete",{attributes:{handle:options&&options.handle,typeName:(this.featureNS?this.featurePrefix+":":"")+
102this.featureType}});if(this.featureNS){this.setAttributeNS(node,this.namespaces.xmlns,"xmlns:"+this.featurePrefix,this.featureNS);}
103this.writeNode("ogc:Filter",new OpenLayers.Filter.FeatureId({fids:[feature.fid]}),node);return node;}}};OpenLayers.Format.WFST.v1_0_0.prototype.writers={"wfs":OpenLayers.Util.applyDefaults({"Query":function(options){options=OpenLayers.Util.extend({featureNS:this.featureNS,featurePrefix:this.featurePrefix,featureType:this.featureType,srsName:this.srsName,srsNameInQuery:this.srsNameInQuery},options);var prefix=options.featurePrefix;var node=this.createElementNSPlus("wfs:Query",{attributes:{typeName:(prefix?prefix+":":"")+
104options.featureType}});if(options.srsNameInQuery&&options.srsName){node.setAttribute("srsName",options.srsName);}
105if(options.featureNS){this.setAttributeNS(node,this.namespaces.xmlns,"xmlns:"+prefix,options.featureNS);}
106if(options.propertyNames){for(var i=0,len=options.propertyNames.length;i<len;i++){this.writeNode("ogc:PropertyName",{property:options.propertyNames[i]},node);}}
107if(options.filter){this.setFilterProperty(options.filter);this.writeNode("ogc:Filter",options.filter,node);}
108return node;}},OpenLayers.Format.WFST.v1.prototype.writers["wfs"]),"gml":OpenLayers.Format.GML.v2.prototype.writers["gml"],"feature":OpenLayers.Format.GML.v2.prototype.writers["feature"],"ogc":OpenLayers.Format.Filter.v1_0_0.prototype.writers["ogc"]};OpenLayers.Format.WFST.v1_1_0.prototype.writers={"wfs":OpenLayers.Util.applyDefaults({"GetFeature":function(options){var node=OpenLayers.Format.WFST.v1.prototype.writers["wfs"]["GetFeature"].apply(this,arguments);options&&this.setAttributes(node,{resultType:options.resultType,startIndex:options.startIndex,count:options.count});return node;},"Query":function(options){options=OpenLayers.Util.extend({featureNS:this.featureNS,featurePrefix:this.featurePrefix,featureType:this.featureType,srsName:this.srsName},options);var prefix=options.featurePrefix;var node=this.createElementNSPlus("wfs:Query",{attributes:{typeName:(prefix?prefix+":":"")+
109options.featureType,srsName:options.srsName}});if(options.featureNS){this.setAttributeNS(node,this.namespaces.xmlns,"xmlns:"+prefix,options.featureNS);}
110if(options.propertyNames){for(var i=0,len=options.propertyNames.length;i<len;i++){this.writeNode("wfs:PropertyName",{property:options.propertyNames[i]},node);}}
111if(options.filter){OpenLayers.Format.WFST.v1_1_0.prototype.setFilterProperty.call(this,options.filter);this.writeNode("ogc:Filter",options.filter,node);}
112return node;},"PropertyName":function(obj){return this.createElementNSPlus("wfs:PropertyName",{value:obj.property});}},OpenLayers.Format.WFST.v1.prototype.writers["wfs"]),"gml":OpenLayers.Format.GML.v3.prototype.writers["gml"],"feature":OpenLayers.Format.GML.v3.prototype.writers["feature"],"ogc":OpenLayers.Format.Filter.v1_1_0.prototype.writers["ogc"]};OpenLayers.Format.GPX.prototype.buildMetadataNode=function(metadata){var types=['name','desc','author'],node=this.createElementNS(this.namespaces.gpx,'metadata');for(var i=0;i<types.length;i++){var type=types[i];if(metadata[type]){var n=this.createElementNS(this.namespaces.gpx,type);n.appendChild(this.createTextNode(metadata[type]));node.appendChild(n);}}
113return node;};OpenLayers.Format.GPX.prototype.buildFeatureNode=function(feature){var geometry=feature.geometry;geometry=geometry.clone();if(this.internalProjection&&this.externalProjection){geometry.transform(this.internalProjection,this.externalProjection);}
114if(geometry.CLASS_NAME=="OpenLayers.Geometry.Point"){var wpt=this.buildWptNode(geometry);this.appendAttributesNode(wpt,feature);return wpt;}else{var trkNode=this.createElementNS(this.namespaces.gpx,"trk");this.appendAttributesNode(trkNode,feature);var trkSegNodes=this.buildTrkSegNode(geometry);trkSegNodes=OpenLayers.Util.isArray(trkSegNodes)?trkSegNodes:[trkSegNodes];for(var i=0,len=trkSegNodes.length;i<len;i++){trkNode.appendChild(trkSegNodes[i]);}
115return trkNode;}};OpenLayers.Format.GPX.prototype.buildTrkSegNode=function(geometry){var node,i,len,point,nodes;if(geometry.CLASS_NAME=="OpenLayers.Geometry.LineString"||geometry.CLASS_NAME=="OpenLayers.Geometry.LinearRing"){node=this.createElementNS(this.namespaces.gpx,"trkseg");for(i=0,len=geometry.components.length;i<len;i++){point=geometry.components[i];node.appendChild(this.buildTrkPtNode(point));}
116return node;}else{nodes=[];for(i=0,len=geometry.components.length;i<len;i++){nodes.push(this.buildTrkSegNode(geometry.components[i]));}
117return nodes;}};OpenLayers.Format.GPX.prototype.buildTrkPtNode=function(point){var node=this.createElementNS(this.namespaces.gpx,"trkpt");node.setAttribute("lon",point.x);node.setAttribute("lat",point.y);return node;};OpenLayers.Format.GPX.prototype.buildWptNode=function(geometry){var node=this.createElementNS(this.namespaces.gpx,"wpt");node.setAttribute("lon",geometry.x);node.setAttribute("lat",geometry.y);return node;};OpenLayers.Format.GPX.prototype.appendAttributesNode=function(node,feature){var name=this.createElementNS(this.namespaces.gpx,'name');name.appendChild(this.createTextNode(feature.attributes.name||feature.id));node.appendChild(name);var desc=this.createElementNS(this.namespaces.gpx,'desc');desc.appendChild(this.createTextNode(feature.attributes.description||this.defaultDesc));node.appendChild(desc);};Ext.override(GeoExt.WMSLegend,{getLegendUrl:function(layerName,layerNames){var rec=this.layerRecord;var url;var styles=rec&&rec.get("styles");var layer=rec.getLayer();layerNames=layerNames||[layer.params.LAYERS].join(",").split(",");var styleNames=layer.params.STYLES&&[layer.params.STYLES].join(",").split(",");var idx=layerNames.indexOf(layerName);var styleName=styleNames&&styleNames[idx];if(styles&&styles.length>0){if(styleName){Ext.each(styles,function(s){url=(s.name==styleName&&s.legend)&&s.legend.href;return!url;});}else if(this.defaultStyleIsFirst===true&&!styleNames&&!layer.params.SLD&&!layer.params.SLD_BODY){url=styles[0].legend&&styles[0].legend.href;}}
118if(!url){url=layer.getFullRequestString({REQUEST:"GetLegendGraphic",WIDTH:null,HEIGHT:null,EXCEPTIONS:"application/vnd.ogc.se_xml",LAYER:layerName,LAYERS:null,STYLE:(styleName!=='')?styleName:null,STYLES:null,SRS:null,FORMAT:null,TIME:null});}
119var params=Ext.apply({},this.baseParams);if(layer.params._OLSALT){params._OLSALT=layer.params._OLSALT;}
120url=Ext.urlAppend(url,Ext.urlEncode(params));if(url.toLowerCase().indexOf("request=getlegendgraphic")!=-1){if(url.toLowerCase().indexOf("format=")==-1){url=Ext.urlAppend(url,"FORMAT=image%2Fgif");}
121if(this.useScaleParameter===true){var scale=layer.map.getScale();url=Ext.urlAppend(url,"SCALE="+scale);}}
122return url;}});
122Ext.override(GeoExt.tree.LayerNodeUI,{enforceOneVisible:function(){var attributes=this.node.attributes;var group=attributes.checkedGroup;if(group&&group!=="gx_baselayer"){var layer=this.node.layer;if(attributes.checked){var checkedNodes=this.node.getOwnerTree().getChecked();var checkedCount=0;Ext.each(checkedNodes,function(n){var l=n.layer;if(!n.hidden&&n.attributes.checkedGroup===group){checkedCount++;if(l!=layer&&attributes.checked){l.setVisibility(false);}}});if(checkedCount===0&&attributes.checked==false){layer.setVisibility(true);}}}}});Ext.override(GeoExt.tree.LayerNode,{renderX:function(bulkRender){var layer=this.layer instanceof OpenLayers.Layer&&this.layer;if(!layer){if(!this.layerStore||this.layerStore=="auto"){this.layerStore=GeoExt.MapPanel.guess().layers;}
123var i=this.layerStore.findBy(function(o){return o.get("title")==this.layer;},this);if(i!=-1){layer=this.layerStore.getAt(i).getLayer();}}
124if(!this.rendered||!layer){var ui=this.getUI();if(layer){this.layer=layer;if(layer.isBaseLayer){this.draggable=false;this.disabled=true;}
125this.autoDisable=!(this.autoDisable===false||this.layer.isBaseLayer||this.layer.alwaysInRange);if(!this.text){this.text=layer.name;}
126ui.show();this.addVisibilityEventHandlers();}else{ui.hide();}
127if(this.layerStore instanceof GeoExt.data.LayerStore){this.addStoreEventHandlers(layer);}}
128GeoExt.tree.LayerNode.superclass.render.apply(this,arguments);}});Ext.override(GeoExt.form.SearchAction,{run:function(){var o=this.options;var f=GeoExt.form.toFilter(this.form,o);if(o.clientValidation===false||this.form.isValid()){if(o.abortPrevious&&this.form.prevResponse){o.protocol.abort(this.form.prevResponse);}
129this.form.prevResponse=o.protocol.read(Ext.applyIf({filter:f,callback:this.handleResponse,scope:this},o));}else if(o.clientValidation!==false){this.failureType=Ext.form.Action.CLIENT_INVALID;this.form.afterAction(this,false);}}});GeoExt.form.toFilter=function(form,options){var wildcard=options.wildcard;var logicalOp=options.logicalOp;var matchCase=options.matchCase;if(form instanceof Ext.form.FormPanel){form=form.getForm();}
130var filters=[],values=form.getValues(false);for(var prop in values){var s=prop.split("__");var value=values[prop],type;if(s.length>1&&(type=GeoExt.form.toFilter.FILTER_MAP[s[1]])!==undefined){prop=s[0];}else{type=OpenLayers.Filter.Comparison.EQUAL_TO;}
131if(type===OpenLayers.Filter.Comparison.LIKE){if(wildcard&&(!value||value.length==0)){continue;}
132switch(wildcard){case GeoExt.form.ENDS_WITH:value='.*'+value;break;case GeoExt.form.STARTS_WITH:value+='.*';break;case GeoExt.form.CONTAINS:value='.*'+value+'.*';break;default:break;}}
133filters.push(new OpenLayers.Filter.Comparison({type:type,value:value,property:prop,matchCase:matchCase}));}
134return filters.length==1&&logicalOp!=OpenLayers.Filter.Logical.NOT?filters[0]:new OpenLayers.Filter.Logical({type:logicalOp||OpenLayers.Filter.Logical.AND,filters:filters});};GeoExt.form.toFilter.FILTER_MAP={"eq":OpenLayers.Filter.Comparison.EQUAL_TO,"ne":OpenLayers.Filter.Comparison.NOT_EQUAL_TO,"lt":OpenLayers.Filter.Comparison.LESS_THAN,"le":OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO,"gt":OpenLayers.Filter.Comparison.GREATER_THAN,"ge":OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO,"like":OpenLayers.Filter.Comparison.LIKE};GeoExt.form.ENDS_WITH=1;GeoExt.form.STARTS_WITH=2;GeoExt.form.CONTAINS=3;Ext.override(GeoExt.PrintMapPanel,{initComponent:function(){if(this.sourceMap instanceof GeoExt.MapPanel){this.sourceMap=this.sourceMap.map;}
135if(!this.map){this.map={};}
136Ext.applyIf(this.map,{projection:this.sourceMap.getProjection(),maxExtent:this.sourceMap.getMaxExtent(),maxResolution:this.sourceMap.getMaxResolution(),resolutions:this.sourceMap.resolutions?this.sourceMap.resolutions.slice(0):this.map.resolutions,units:this.sourceMap.getUnits()});if(!(this.printProvider instanceof GeoExt.data.PrintProvider)){this.printProvider=new GeoExt.data.PrintProvider(this.printProvider);}
137this.printPage=new GeoExt.data.PrintPage({printProvider:this.printProvider});this.previewScales=new Ext.data.Store();this.previewScales.add(this.printProvider.scales.getRange());this.layers=[];var layer,clonedLayer;Ext.each(this.sourceMap.layers,function(layer){if(layer.getVisibility()===true){if(layer.protocol){layer.protocol.autoDestroy=false;}
138clonedLayer=layer.clone();this.layers.push(clonedLayer);}},this);this.extent=this.sourceMap.getExtent();GeoExt.PrintMapPanel.superclass.initComponent.call(this);}});Ext.namespace("GeoExt.data");GeoExt.data.PrintProvider=Ext.extend(Ext.util.Observable,{url:null,capabilities:null,method:"POST",encoding:document.charset||document.characterSet||"UTF-8",timeout:30000,customParams:null,
138scales:null,dpis:null,outputFormats:null,outputFormatsEnabled:false,layouts:null,dpi:null,layout:null,outputFormat:null,defaultOutputFormatName:'pdf',constructor:function(config){this.initialConfig=config;Ext.apply(this,config);if(!this.customParams){this.customParams={};}
139this.addEvents("loadcapabilities","layoutchange","dpichange","outputformatchange","beforeprint","print","printexception","beforeencodelayer","encodelayer","beforedownload","beforeencodelegend");GeoExt.data.PrintProvider.superclass.constructor.apply(this,arguments);this.scales=new Ext.data.JsonStore({root:"scales",sortInfo:{field:"value",direction:"DESC"},fields:["name",{name:"value",type:"float"}]});this.dpis=new Ext.data.JsonStore({root:"dpis",fields:["name",{name:"value",type:"float"}]});if(this.outputFormatsEnabled===true){this.outputFormats=new Ext.data.JsonStore({root:"outputFormats",sortInfo:{field:"name",direction:"ASC"},fields:["name"]});}
140this.layouts=new Ext.data.JsonStore({root:"layouts",fields:["name",{name:"size",mapping:"map"},{name:"rotation",type:"boolean"}]});if(config.capabilities){this.loadStores();}else{if(this.url.split("/").pop()){this.url+="/";}
141this.initialConfig.autoLoad&&this.loadCapabilities();}},setLayout:function(layout){this.layout=layout;this.fireEvent("layoutchange",this,layout);},setDpi:function(dpi){this.dpi=dpi;this.fireEvent("dpichange",this,dpi);},setOutputFormat:function(outputFormat){this.outputFormat=outputFormat;this.fireEvent("outputformatchange",this,outputFormat);},print:function(map,pages,options){if(map instanceof GeoExt.MapPanel){map=map.map;}
142pages=pages instanceof Array?pages:[pages];options=options||{};if(this.fireEvent("beforeprint",this,map,pages,options)===false){return;}
143var jsonData=Ext.apply({units:map.getUnits(),srs:map.baseLayer.projection.getCode(),layout:this.layout.get("name"),dpi:this.dpi.get("value"),outputFormat:this.outputFormat?this.outputFormat.get("name"):this.defaultOutputFormatName},this.customParams);var pagesLayer=pages[0].feature.layer;var encodedLayers=[];var layers=map.layers.concat();layers.remove(map.baseLayer);layers.unshift(map.baseLayer);Ext.each(layers,function(layer){if(layer!==pagesLayer&&layer.getVisibility()===true){var enc=this.encodeLayer(layer);enc&&encodedLayers.push(enc);}},this);jsonData.layers=encodedLayers;var encodedPages=[];Ext.each(pages,function(page){encodedPages.push(Ext.apply({center:[page.center.lon,page.center.lat],scale:page.scale.get("value"),rotation:page.rotation},page.customParams));},this);jsonData.pages=encodedPages;if(options.overview){var encodedOverviewLayers=[];Ext.each(options.overview.layers,function(layer){var enc=this.encodeLayer(layer);enc&&encodedOverviewLayers.push(enc);},this);jsonData.overviewLayers=encodedOverviewLayers;}
144if(options.legend&&!(this.fireEvent("beforeencodelegend",this,jsonData,options.legend)===false)){var legend=options.legend;var rendered=legend.rendered;if(!rendered){legend=legend.cloneConfig({renderTo:document.body,hidden:true});}
145var encodedLegends=[];legend.items&&legend.items.each(function(cmp){if(!cmp.hidden){var encFn=this.encoders.legends[cmp.getXType()];encodedLegends=encodedLegends.concat(encFn.call(this,cmp,jsonData.pages[0].scale));}},this);if(!rendered){legend.destroy();}
146jsonData.legends=encodedLegends;}
147if(this.method==="GET"){var url=Ext.urlAppend(this.capabilities.printURL,"spec="+encodeURIComponent(Ext.encode(jsonData)));this.download(url);}else{Ext.Ajax.request({url:this.capabilities.createURL,timeout:this.timeout,jsonData:jsonData,headers:{"Content-Type":"application/json; charset="+this.encoding},success:function(response){var url=Ext.decode(response.responseText).getURL;this.download(url);},failure:function(response){this.fireEvent("printexception",this,response);},params:this.initialConfig.baseParams,scope:this});}},download:function(url){if(this.fireEvent("beforedownload",this,url)!==false){if(Ext.isOpera){window.open(url);}else{window.location.href=url;}}
148this.fireEvent("print",this,url);},loadCapabilities:function(){if(!this.url){return;}
149var url=this.url+"info.json";Ext.Ajax.request({url:url,method:"GET",disableCaching:false,success:function(response){this.capabilities=Ext.decode(response.responseText);this.loadStores();},params:this.initialConfig.baseParams,scope:this});},loadStores:function(){this.scales.loadData(this.capabilities);this.dpis.loadData(this.capabilities);
149this.layouts.loadData(this.capabilities);this.setLayout(this.layouts.getAt(0));this.setDpi(this.dpis.getAt(0));if(this.outputFormatsEnabled&&this.capabilities.outputFormats){this.outputFormats.loadData(this.capabilities);var defaultOutputIndex=this.outputFormats.find('name',this.defaultOutputFormatName);this.setOutputFormat(defaultOutputIndex>-1?this.outputFormats.getAt(defaultOutputIndex):this.outputFormats.getAt(0));}
150this.fireEvent("loadcapabilities",this,this.capabilities);},encodeLayer:function(layer){var encLayer;for(var c in this.encoders.layers){if(OpenLayers.Layer[c]&&layer instanceof OpenLayers.Layer[c]){if(this.fireEvent("beforeencodelayer",this,layer)===false){return;}
151encLayer=this.encoders.layers[c].call(this,layer);this.fireEvent("encodelayer",this,layer,encLayer);break;}}
152return(encLayer&&encLayer.type)?encLayer:null;},getAbsoluteUrl:function(url){if(Ext.isSafari){url=url.replace(/{/g,'%7B');url=url.replace(/}/g,'%7D');}
153var a;if(Ext.isIE6||Ext.isIE7||Ext.isIE8){a=document.createElement("<a href='"+url+"'/>");a.style.display="none";document.body.appendChild(a);a.href=a.href;document.body.removeChild(a);}else{a=document.createElement("a");a.href=url;}
154return a.href;},encoders:{"layers":{"Layer":function(layer){var enc={};if(layer.options&&layer.options.maxScale){enc.minScaleDenominator=layer.options.maxScale;}
155if(layer.options&&layer.options.minScale){enc.maxScaleDenominator=layer.options.minScale;}
156return enc;},"WMS":function(layer){var enc=this.encoders.layers.HTTPRequest.call(this,layer);enc.singleTile=layer.singleTile;Ext.apply(enc,{type:'WMS',layers:[layer.params.LAYERS].join(",").split(","),format:layer.params.FORMAT,styles:[layer.params.STYLES].join(",").split(","),singleTile:layer.singleTile});var param;for(var p in layer.params){param=p.toLowerCase();if(layer.params[p]!=null&&!layer.DEFAULT_PARAMS[param]&&"layers,styles,width,height,srs".indexOf(param)==-1){if(!enc.customParams){enc.customParams={};}
157enc.customParams[p]=layer.params[p];}}
158return enc;},"OSM":function(layer){var enc=this.encoders.layers.TileCache.call(this,layer);return Ext.apply(enc,{type:'OSM',baseURL:enc.baseURL.substr(0,enc.baseURL.indexOf("$")),extension:"png"});},"XYZ":function(layer){var enc=this.encoders.layers.TileCache.call(this,layer);return Ext.apply(enc,{type:'XYZ',baseURL:enc.baseURL.substr(0,enc.baseURL.indexOf("$")),extension:enc.baseURL.substr(enc.baseURL.lastIndexOf("$")).split(".").pop(),tileOriginCorner:layer.tileOriginCorner});},"TMS":function(layer){var enc=this.encoders.layers.TileCache.call(this,layer);return Ext.apply(enc,{type:'TMS',format:layer.type});},"TileCache":function(layer){var enc=this.encoders.layers.HTTPRequest.call(this,layer);var maxExtent=layer.maxExtent.toArray();var tileOriginX=layer.tileOrigin?layer.tileOrigin.lon:maxExtent[0];var tileOriginY=layer.tileOrigin?layer.tileOrigin.lat:maxExtent[1];return Ext.apply(enc,{type:'TileCache',layer:layer.layername,maxExtent:maxExtent,tileOrigin:{x:tileOriginX,y:tileOriginY},tileSize:[layer.tileSize.w,layer.tileSize.h],extension:layer.extension,resolutions:layer.serverResolutions||layer.resolutions});},"WMTS":function(layer){var enc=this.encoders.layers.HTTPRequest.call(this,layer);enc=Ext.apply(enc,{type:'WMTS',layer:layer.layer,version:layer.version,requestEncoding:layer.requestEncoding,style:layer.style,dimensions:layer.dimensions,params:layer.params,matrixSet:layer.matrixSet});if(layer.matrixIds){if(layer.requestEncoding=="KVP"){enc.format=layer.format;}
159enc.matrixIds=[]
160Ext.each(layer.matrixIds,function(matrixId){enc.matrixIds.push({identifier:matrixId.identifier,matrixSize:[matrixId.matrixWidth,matrixId.matrixHeight],resolution:matrixId.scaleDenominator*0.28E-3/OpenLayers.METERS_PER_INCH/OpenLayers.INCHES_PER_UNIT[layer.units],tileSize:[matrixId.tileWidth,matrixId.tileHeight],topLeftCorner:[matrixId.topLeftCorner.lon,matrixId.topLeftCorner.lat]});})
161return enc;}
162else{return Ext.apply(enc,{formatSuffix:layer.formatSuffix,tileOrigin:[layer.tileOrigin.lon,layer.tileOrigin.lat],tileSize:[layer.tileSize.w,layer.tileSize.h],maxExtent:(layer.tileFullExtent!=null)?layer.tileFullExtent.toArray():layer.maxExtent.toArray(),zoomOffset:layer.zoomOffset,resolutions:layer.serverResolutions||layer.resolutions});}},"KaMapCache":function(layer){var enc=this.encoders.layers.KaMap.call(this,layer);return Ext.apply(enc,{type:'KaMapCache',group:layer.params['g'],metaTileWidth:layer.params['metaTileSize']['w'],metaTileHeight:layer.params['metaTileSize']['h']});},"KaMap":function(layer){var enc=this.encoders.layers.HTTPRequest.call(this,layer);return Ext.apply(enc,{type:'KaMap',map:layer.params['map'],extension:layer.params['i'],group:layer.params['g']||"",maxExtent:layer.maxExtent.toArray(),tileSize:[layer.tileSize.w,layer.tileSize.h],resolutions:layer.serverResolutions||layer.resolutions});},"HTTPRequest":function(layer){var enc=this.encoders.layers.Layer.call(this,layer);return Ext.apply(enc,{baseURL:this.getAbsoluteUrl(layer.url instanceof Array?layer.url[0]:layer.url),opacity:(layer.opacity!=null)?layer.opacity:1.0});},"Image":function(layer){var enc=this.encoders.layers.Layer.call(this,layer);return Ext.apply(enc,{type:'Image',baseURL:this.getAbsoluteUrl(layer.getURL(layer.extent)),opacity:(layer.opacity!=null)?layer.opacity:1.0,extent:layer.extent.toArray(),pixelSize:[layer.size.w,layer.size.h],name:layer.name});},"Vector":function(layer){if(!layer.features.length){return;}
163var encFeatures=[];var encStyles={};var features=layer.features;var featureFormat=new OpenLayers.Format.GeoJSON();var styleFormat=new OpenLayers.Format.JSON();var nextId=1;var styleDict={};var feature,style,dictKey,dictItem,styleName;for(var i=0,len=features.length;i<len;++i){feature=features[i];style=feature.style||layer.style||layer.styleMap.createSymbolizer(feature,feature.renderIntent);if(style.display=='none'){continue;}
164if(style.strokeDashstyle){if(style.strokeDashstyle=='4 4'){style.strokeDashstyle='dash';}else if(style.strokeDashstyle=='2 4'){style.strokeDashstyle='dot';}}
165dictKey=styleFormat.write(style);dictItem=styleDict[dictKey];if(dictItem){styleName=dictItem;}else{styleDict[dictKey]=styleName=nextId++;if(style.externalGraphic){encStyles[styleName]=Ext.applyIf({externalGraphic:this.getAbsoluteUrl(style.externalGraphic)},style);}else{encStyles[styleName]=style;}}
166var featureGeoJson=featureFormat.extract.feature.call(featureFormat,feature);featureGeoJson.properties=OpenLayers.Util.extend({_gx_style:styleName},featureGeoJson.properties);encFeatures.push(featureGeoJson);}
167var enc=this.encoders.layers.Layer.call(this,layer);return Ext.apply(enc,{type:'Vector',styles:encStyles,styleProperty:'_gx_style',geoJ
167son:{type:"FeatureCollection",features:encFeatures},name:layer.name,opacity:(layer.opacity!=null)?layer.opacity:1.0});},"Markers":function(layer){var features=[];for(var i=0,len=layer.markers.length;i<len;i++){var marker=layer.markers[i];var geometry=new OpenLayers.Geometry.Point(marker.lonlat.lon,marker.lonlat.lat);var style={externalGraphic:marker.icon.url,graphicWidth:marker.icon.size.w,graphicHeight:marker.icon.size.h,graphicXOffset:marker.icon.offset.x,graphicYOffset:marker.icon.offset.y};var feature=new OpenLayers.Feature.Vector(geometry,{},style);features.push(feature);}
168var vector=new OpenLayers.Layer.Vector(layer.name);vector.addFeatures(features);var output=this.encoders.layers.Vector.call(this,vector);vector.destroy();return output;}},"legends":{"gx_wmslegend":function(legend,scale){var enc=this.encoders.legends.base.call(this,legend);var icons=[];for(var i=1,len=legend.items.getCount();i<len;++i){var url=legend.items.get(i).url;if(legend.useScaleParameter===true&&url.toLowerCase().indexOf('request=getlegendgraphic')!=-1){var split=url.split("?");var params=Ext.urlDecode(split[1]);params['SCALE']=scale;url=split[0]+"?"+Ext.urlEncode(params);}
169icons.push(this.getAbsoluteUrl(url));}
170enc[0].classes[0]={name:"",icons:icons};return enc;},"gx_wmtslegend":function(legend,scale){return this.encoders.legends.gx_urllegend.call(this,legend);},"gx_urllegend":function(legend){var enc=this.encoders.legends.base.call(this,legend);enc[0].classes.push({name:"",icon:this.getAbsoluteUrl(legend.items.get(1).url)});return enc;},"base":function(legend){return[{name:legend.getLabel(),classes:[]}];}}}});Ext.namespace("GeoExt.plugins");GeoExt.plugins.PrintProviderField=Ext.extend(Ext.util.Observable,{target:null,constructor:function(config){this.initialConfig=config;Ext.apply(this,config);GeoExt.plugins.PrintProviderField.superclass.constructor.apply(this,arguments);},init:function(target){this.target=target;var onCfg={scope:this,"render":this.onRender,"beforedestroy":this.onBeforeDestroy};onCfg[target instanceof Ext.form.ComboBox?"select":"valid"]=this.onFieldChange;target.on(onCfg);},onRender:function(field){var printProvider=this.printProvider||field.ownerCt.printProvider;if(field.store===printProvider.layouts){field.setValue(printProvider.layout.get(field.displayField));printProvider.on({"layoutchange":this.onProviderChange,scope:this});}else if(field.store===printProvider.dpis){field.setValue(printProvider.dpi.get(field.displayField));printProvider.on({"dpichange":this.onProviderChange,scope:this});}else if(field.store===printProvider.outputFormats){if(printProvider.outputFormat){field.setValue(printProvider.outputFormat.get(field.displayField));printProvider.on({"outputformatchange":this.onProviderChange,scope:this});}else{field.setValue(printProvider.defaultOutputFormatName);field.disable();}}else if(field.initialConfig.value===undefined){field.setValue(printProvider.customParams[field.name]);}},onFieldChange:function(field,record){var printProvider=this.printProvider||field.ownerCt.printProvider;var value=field.getValue();this._updating=true;if(record){switch(field.store){case printProvider.layouts:printProvider.setLayout(record);break;case printProvider.dpis:printProvider.setDpi(record);break;case printProvider.outputFormats:printProvider.setOutputFormat(record);}}else{printProvider.customParams[field.name]=value;}
171delete this._updating;},onProviderChange:function(printProvider,rec){if(!this._updating){this.target.setValue(rec.get(this.target.displayField));}},onBeforeDestroy:function(){var target=this.target;target.un("beforedestroy",this.onBeforeDestroy,this);target.un("render",this.onRender,this);target.un("select",this.onFieldChange,this);target.un("valid",this.onFieldChange,this);var printProvider=this.printProvider||target.ownerCt.printProvider;printProvider.un("layoutchange",this.onProviderChange,this);printProvider.un("dpichange",this.onProviderChange,this);printProvider.un("outputformatchange",this.onProviderChange,this);}});Ext.override(GeoExt.VectorLegend,{styleChanged:function(){var layer=this.layer;if(!layer||!layer.features||layer.features.length==0){return;}
172var feature=layer.features[0].clone();feature.attributes={};this.feature=feature;this.symbolType=this.symbolTypeFromFeature(this.feature);this.setRules();this.update();},update:function(){if(this.layer&&!this.layer.events.listeners['stylechanged']){this.layer.events.on({stylechanged:this.styleChanged,scope:this});}
173GeoExt.VectorLegend.superclass.update.apply(this,arguments);if(this.symbolType&&this.rules){if(this.rulesContainer.items){var comp;for(var i=this.rulesContainer.items.length-1;i>=0;--i){comp=this.rulesContainer.getComponent(i);this.rulesContainer.remove(comp,true);}}
174for(var i=0,ii=this.rules.length;i<ii;++i){this.addRuleEntry(this.rules[i],true);}
175this.doLayout();if(this.selectedRule){this.getRuleEntry(this.selectedRule).body.addClass("x-grid3-row-selected");}}}});Ext.extend(GeoExt.data.WFSCapabilitiesReader,Ext.data.DataReader,{read:function(request){var data=request.responseXML;if(!data||!data.documentElement){data=request.responseText;if(Ext.isIE){data=data.replace('xmlns:xml','xmlns:noxml');}}
176return this.readRecords(data);},readRecords:function(data){if(typeof data==="string"||data.nodeType){data=this.meta.format.read(data);}
177var featureTypes=data.featureTypeList.featureTypes;var fields=this.recordType.prototype.fields;var featureType,values,field,v,parts,layer;var layerOptions,protocolOptions;var url=(parseFloat(data.version)>=1.1)?data.operationsMetadata&&data.operationsMetadata["GetFeature"].dcp.http.post[0].url:data.capability.request.getfeature.href.post;var protocolDefaults={url:url,version:data.version};var records=[];for(var i=0,lenI=featureTypes.length;i<lenI;i++){featureType=featureTypes[i];if(featureType.name){values={};for(var j=0,lenJ=fields.length;j<lenJ;j++){field=fields.items[j];v=featureType[field.mapping||field.name]||field.defaultValue;v=field.convert(v);values[field.name]=v;}
178protocolOptions={featureType:featureType.name,featureNS:featureType.featureNS};if(this.meta.protocolOptions){Ext.apply(protocolOptions,this.meta.protocolOptions,protocolDefaults);}else{Ext.apply(protocolOptions,{},protocolDefaults);}
179layerOptions={protocol:new OpenLayers.Protocol.WFS(protocolOptions),strategies:[new OpenLayers.Strategy.Fixed()]};if(featureType.bounds){layerOptions.maxExtent=featureType.bounds.clone();values.bounds=featureType.bounds.clone();}
180if(featureType.srs){values.srs=featureType.srs;}
181var metaLayerOptions=this.meta.layerOptions;if(metaLayerOptions){Ext.apply(layerOptions,Ext.isFunction(metaLayerOptions)?metaLayerOptions():metaLayerOptions);}
182values.layer=new OpenLayers.Layer.Vector(featureType.title||featureType.name,layerOptions);records.push(new this.recordType(values,values.layer.id));}}
183return{totalRecords:records.length,success:true,records:records};}}
183);(function(){function keepRawWFS(data){var format=this.meta.format;if(typeof data==="string"||data.nodeType){data=format.read(data);var origRead=format.read;format.read=function(){format.read=origRead;return data;};}
184this.raw=data;}
185Ext.intercept(GeoExt.data.WFSCapabilitiesReader.prototype,"readRecords",keepRawWFS);GeoExt.data.AttributeReader&&Ext.intercept(GeoExt.data.AttributeReader.prototype,"readRecords",keepRawWFS);})();GeoExt.data.CSWRecordsReader=function(meta,recordType){meta=meta||{};if(!meta.format){meta.format=new OpenLayers.Format.CSWGetRecords();}
186if(!meta.root){meta.root='records';}
187GeoExt.data.CSWRecordsReader.superclass.constructor.call(this,meta,recordType);};Ext.extend(GeoExt.data.CSWRecordsReader,Ext.data.JsonReader,{read:function(data){var o=data.data;if(!o){o=data.responseXML;if(!o||!o.documentElement){o=data.responseText;}}
188return this.readRecords(o);},readRecords:function(data){if(typeof data==="string"||data.nodeType){data=this.meta.format.read(data);}
189if(data.success===false){throw new Ext.data.DataReader.Error("invalid-response",data);}
190var result=GeoExt.data.CSWRecordsReader.superclass.readRecords.call(this,data);Ext.each(result.records,function(record){for(var key in record.data){var value=record.data[key];if(value instanceof Array){for(var i=0,ii=value.length;i<ii;++i){if(value[i]instanceof Object){var size=0;for(var property in value[i]){if(value[i].hasOwnProperty(property)){size++;}}
191if(size===1&&value[i].value){value[i]=value[i].value;}}}}}});if(data.SearchResults){result.totalRecords=data.SearchResults.numberOfRecordsMatched;}
192return result;}});Ext.namespace("GeoExt");GeoExt.Popup=Ext.extend(Ext.Window,{anchored:true,map:null,panIn:true,unpinnable:true,location:null,insideViewport:null,animCollapse:false,draggable:false,shadow:false,popupCls:"gx-popup",ancCls:null,anchorPosition:"auto",initComponent:function(){if(this.map instanceof GeoExt.MapPanel){this.map=this.map.map;}
193if(!this.map&&this.location instanceof OpenLayers.Feature.Vector&&this.location.layer){this.map=this.location.layer.map;}
194if(this.location instanceof OpenLayers.Feature.Vector){this.location=this.location.geometry;}
195if(this.location instanceof OpenLayers.Geometry){if(typeof this.location.getCentroid=="function"){this.location=this.location.getCentroid();}
196this.location=this.location.getBounds().getCenterLonLat();}else if(this.location instanceof OpenLayers.Pixel){this.location=this.map.getLonLatFromViewPortPx(this.location);}
197if(!(this.location instanceof OpenLayers.LonLat)){this.anchored=false;}
198var mapExtent=this.map.getExtent();if(mapExtent&&this.location){this.insideViewport=mapExtent.containsLonLat(this.location);}
199if(this.anchored){this.addAnchorEvents();this.elements+=',anc';}else{this.unpinnable=false;}
200this.baseCls=this.popupCls+" "+this.baseCls;GeoExt.Popup.superclass.initComponent.call(this);},onRender:function(ct,position){GeoExt.Popup.superclass.onRender.call(this,ct,position);if(this.anchored){this.ancCls=this.popupCls+"-anc";this.createElement("anc",this.el.dom);}else{this.makeDraggable();}},initTools:function(){if(this.unpinnable){this.addTool({id:'unpin',handler:this.unanchorPopup.createDelegate(this,[])});}
201GeoExt.Popup.superclass.initTools.call(this);},show:function(){GeoExt.Popup.superclass.show.apply(this,arguments);if(this.anchored){this.position();if(this.panIn&&!this._mapMove){this.panIntoView();}}},maximize:function(){if(!this.maximized&&this.anc){this.unanchorPopup();}
202GeoExt.Popup.superclass.maximize.apply(this,arguments);},setSize:function(w,h){if(this.anc){var ancSize=this.anc.getSize();if(typeof w=='object'){h=w.height-ancSize.height;w=w.width;}else if(!isNaN(h)){h=h-ancSize.height;}}
203GeoExt.Popup.superclass.setSize.call(this,w,h);},position:function(){var me=this;if(me._mapMove===true){me.insideViewport=me.map.getExtent().containsLonLat(me.location);if(me.insideViewport!==me.isVisible()){me.setVisible(me.insideViewport);}}
204if(me.isVisible()){var locationPx=me.map.getPixelFromLonLat(me.location),mapBox=Ext.fly(me.map.div).getBox(true),y=locationPx.y+mapBox.y,x=locationPx.x+mapBox.x,elSize=me.el.getSize(),ancSize=me.anc.getSize(),ancPos=me.anchorPosition;if(ancPos.indexOf("right")>-1||locationPx.x>mapBox.width/2){me.anc.addClass("right");var ancRight=me.el.getX(true)+elSize.width-
205me.anc.getX(true)-ancSize.width;x-=elSize.width-ancRight-ancSize.width/2;}else{me.anc.removeClass("right");var ancX=me.anc.getLeft(true);x-=ancX+ancSize.width/2;}
206if(ancPos.indexOf("bottom")>-1||locationPx.y>mapBox.height/2){me.anc.removeClass("top");y-=elSize.height+ancSize.height;}else{me.anc.addClass("top");y+=ancSize.height;}
207me.setPagePosition(x,y);window.setTimeout(function(){if(me.el.dom){me.setPagePosition(x,y);}},0);}},makeDraggable:function(){this.draggable=true;this.header.addClass("x-window-draggable");this.dd=new Ext.Window.DD(this);},unanchorPopup:function(){this.removeAnchorEvents();this.makeDraggable();this.anc.remove();this.anc=null;this.tools.unpin.hide();},panIntoView:function(){var mapBox=Ext.fly(this.map.div).getBox(true);var popupPos=this.getPosition(true);popupPos[0]-=mapBox.x;popupPos[1]-=mapBox.y;var panelSize=[mapBox.width,mapBox.height];var popupSize=this.getSize();var newPos=[popupPos[0],popupPos[1]];var padding=this.map.paddingForPopups;
207if(popupPos[0]<padding.left){newPos[0]=padding.left;}else if(popupPos[0]+popupSize.width>panelSize[0]-padding.right){newPos[0]=panelSize[0]-padding.right-popupSize.width;}
208if(popupPos[1]<padding.top){newPos[1]=padding.top;}else if(popupPos[1]+popupSize.height>panelSize[1]-padding.bottom){newPos[1]=panelSize[1]-padding.bottom-popupSize.height;}
209var dx=popupPos[0]-newPos[0];var dy=popupPos[1]-newPos[1];this.map.pan(dx,dy);},onMapMove:function(){if(!(this.hidden&&this.insideViewport)){this._mapMove=true;this.position();delete this._mapMove;}},addAnchorEvents:function(){this.map.events.on({"move":this.onMapMove,scope:this});this.on({"resize":this.position,"collapse":this.position,"expand":this.position,scope:this});},removeAnchorEvents:function(){this.map.events.un({"move":this.onMapMove,scope:this});this.un("resize",this.position,this);this.un("collapse",this.position,this);this.un("expand",this.position,this);},beforeDestroy:function(){if(this.anchored){this.removeAnchorEvents();}
210GeoExt.Popup.superclass.beforeDestroy.call(this);}});Ext.reg('gx_popup',GeoExt.Popup);Ext.namespace("Heron");Heron.singleFile=true;Ext.namespace("Heron");Ext.namespace("Heron.globals");Heron.globals={serviceUrl:'/cgi-bin/heron.cgi',version:'1.0.7',imagePath:undefined};Ext.BLANK_IMAGE_URL='data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';try{Proj4js.defs["EPSG:28992"]="+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.999908 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +towgs84=565.2369,50.0087,465.658,-0.406857330322398,0.350732676542563,-1.8703473836068,4.0812 +no_defs";Proj4js.defs["EPSG:25831"]="+proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs";}catch(err){}
211try{Ext.reg('gxp_viewer',gxp.Viewer);}catch(err){}
212Ext.namespace("Heron.App");Heron.App=function(){return{create:function(){Ext.QuickTips.init();if(Heron.app){Heron.App.createApp();}else if(Heron.layout){if(Heron.layout.mapContextUrl){var mgr=Heron.App.contextManager=new Heron.data.HeronMapContext({name:Heron.layout.mapContextUrl,options:Heron.layout.mapContextOptions});mgr.on('loaded',Heron.App.onContextLoaded);mgr.on('failure',Heron.App.onContextFailure);mgr.load();return;}
213Heron.App.createLayout();}else{alert('need Heron.layout or Heron.app configuration!')}},createApp:function(){console.log('Creating Heron App from xtype = '+Heron.app.xtype);Heron.App.app=Ext.create(Heron.app);},onContextFailure:function(msg){console.log('Error loading context: '+msg);},onContextLoaded:function(context){Heron.App.context=context;Heron.App.createLayout();},createLayout:function(){console.log('Creating Heron App from layout = '+Heron.layout.xtype);if(Heron.layout.renderTo||Heron.layout.xtype=='window'){Heron.App.topComponent=Ext.create(Heron.layout);}else{Heron.App.topComponent=new Ext.Viewport({id:"hr-topComponent",layout:"fit",hideBorders:true,items:[Heron.layout]});}
214if(Heron.App.topComponent.isVisible()===false){Heron.App.topComponent.show();}},init:function(){Heron.App.create();},show:function(){if(Heron.App.topComponent&&Heron.App.topComponent.isVisible()===false){Heron.App.topComponent.show();}},getMapContext:function(contextName){return Heron.App.context;},getMap:function(){return Heron.App.map;},setMap:function(aMap){Heron.App.map=aMap;},getMapPanel:function(){return Heron.App.mapPanel;},setMapPanel:function(aMapPanel){Heron.App.mapPanel=aMapPanel;}};}();Ext.namespace("Heron");Ext.onReady(function(){if(typeof console==='undefined'){console={log:function(s){}}}
215console.log('Starting Heron v'+Heron.globals.version+' - Proxy URL="'+OpenLayers.ProxyHost+'" - Service URL="'+Heron.globals.serviceUrl+'"');if(!Heron.noAutoLaunch){Heron.App.init();}},Heron.App);Ext.namespace("Heron.Utils");Ext.namespace("Heron.globals");Heron.Utils=(function(){var browserWindows=new Array();var openMsgURL='http://extjs.cachefly.net/ext-3.4.0/resources/images/default/s.gif';var instance={createOLObject:function(argArr){var clazz=eval(argArr[0]);var args=[].slice.call(argArr,1);function F(){}
216F.prototype=clazz.prototype;var instance=new F();instance.initialize.apply(instance,args);return instance;},getScriptLocation:function(){if(!Heron.globals.scriptLoc){Heron.globals.scriptLoc='';var scriptName=(!Heron.singleFile)?"lib/DynLoader.js":"script/Heron.js";var r=new RegExp("(^|(.*?\\/))("+scriptName+")(\\?|$)"),scripts=document.getElementsByTagName('script'),src="";for(var i=0,len=scripts.length;i<len;i++){src=scripts[i].getAttribute('src');if(src){var m=src.match(r);if(m){Heron.globals.scriptLoc=m[1];break;}}}}
217return Heron.globals.scriptLoc;},getImagesLocation:function(){return Heron.globals.imagePath||(Heron.Utils.getScriptLocation()+"resources/images/");},getImageLocation:function(image){return Heron.Utils.getImagesLocation()+image;},rand:function(min,max){return Math.floor(Math.random()*((max-min)+1)+min);},randArrayElm:function(arr){return arr[Heron.Utils.rand(0,arr.length-1)];},formatXml:function(xml,htmlEscape){var reg=/(>)(<)(\/*)/g;var wsexp=/ *(.*) +\n/g;var contexp=/(<.+>)(.+\n)/g;xml=xml.replace(reg,'$1\n$2$3').replace(wsexp,'$1\n').replace(contexp,'$1\n$2');var pad=0;var formatted='';var lines=xml.split('\n');var indent=0;var lastType='other';var transitions={'single->single':0,'single->closing':-1,'single->opening':0,'single->other':0,'closing->single':0,'closing->closing':-1,'closing->opening':0,'closing->other':0,'opening->single':1,'opening->closing':0,'opening->opening':1,'opening->other':1,'other->single':0,'other->closing':-1,'other->opening':0,'other->other':0};for(var i=0;i<lines.length;i++){var ln=lines[i];var single=Boolean(ln.match(/<.+\/>/));var closing=Boolean(ln.match(/<\/.+>/));var opening=Boolean(ln.match(/<[^!].*>/));var type=single?'single':closing?'closing':opening?'opening':'other';var fromTo=lastType+'->'+type;lastType=type;var padding='';indent+=transitions[fromTo];for(var j=0;j<indent;j++){padding+='    ';}
218if(htmlEscape){ln=ln.replace('<','&lt;');ln=ln.replace('>','&gt;');}
219formatted+=padding+ln+'\n';}
220return formatted;},openBrowserWindow:function(winName,bReopen,theURL,hasMenubar,hasToolbar,hasAddressbar,hasStatusbar,hasScrollbars,isResizable,hasPos,xPos,yPos,hasSize,wSize,hSize){var x,y;var options="";var pwin=null;if(hasMenubar){options+="menubar=yes";}else{options+="menubar=no";}
221if(hasToolbar){options+=",toolbar=yes";}else{options+=",toolbar=no";}
222if(hasAddressbar){options+=",location=yes";}else{options+=",location=no";}
223if(hasStatusbar){options+=",status=yes";}else{options+=",status=no";}
224if(hasScrollbars){options+=",scrollbars=yes";}else{options+=",scrollbars=no";}
225if(isResizable){options+=",resizable=yes";}else{options+=",resizable=no";}
226if(!hasSize){wSize=640;hSize=480;}
227options+=",width="+wSize+",innerWidth="+wSize;
227options+=",height="+hSize+",innerHeight="+hSize;if(!hasPos){xPos=(screen.width-700)/2;yPos=75;}
228options+=",left="+xPos+",top="+yPos;if(bReopen){browserWindows[winName]=window.open(theURL,winName,options);}else{if(!browserWindows[winName]||browserWindows[winName].closed){browserWindows[winName]=window.open(theURL,winName,options);}else{browserWindows[winName].location.href=theURL;}}
229browserWindows[winName].focus();}};return(instance);})();Ext.ns('Ext.ux.form');Ext.ux.form.Spacer=Ext.extend(Ext.BoxComponent,{height:12,autoEl:'div'});Ext.reg('spacer',Ext.ux.form.Spacer);Ext.namespace("Heron.data");Heron.data.OpenLS_XLSReader=function(meta,recordType){meta=meta||{};Ext.applyIf(meta,{idProperty:meta.idProperty||meta.idPath||meta.id,successProperty:meta.successProperty||meta.success});Heron.data.OpenLS_XLSReader.superclass.constructor.call(this,meta,recordType||meta.fields);};Ext.extend(Heron.data.OpenLS_XLSReader,Ext.data.XmlReader,{addOptXlsText:function(format,text,node,tagname,sep){var elms=format.getElementsByTagNameNS(node,"http://www.opengis.net/xls",tagname);if(elms){Ext.each(elms,function(elm,index){var str=format.getChildValue(elm);if(str){text=text+sep+str;}});}
230return text;},readRecords:function(doc){this.xmlData=doc;var root=doc.documentElement||doc;var records=this.extractData(root);return{success:true,records:records,totalRecords:records.length};},extractData:function(root){var opts={namespaces:{gml:"http://www.opengis.net/gml",xls:"http://www.opengis.net/xls"}};var records=[];var format=new OpenLayers.Format.XML(opts);var addresses=format.getElementsByTagNameNS(root,"http://www.opengis.net/xls",'GeocodedAddress');var recordType=Ext.data.Record.create([{name:"lon",type:"number"},{name:"lat",type:"number"},"text"]);var reader=this;Ext.each(addresses,function(address,index){var pos=format.getElementsByTagNameNS(address,"http://www.opengis.net/gml",'pos');var xy='';if(pos&&pos[0]){xy=format.getChildValue(pos[0]);}
231var xyArr=xy.split(' ');var text='';text=reader.addOptXlsText(format,text,address,'Street','');text=reader.addOptXlsText(format,text,address,'Place',',');var values={lon:parseFloat(xyArr[0]),lat:parseFloat(xyArr[1]),text:text};var record=new recordType(values,index);records.push(record);});return records;}});Ext.namespace("Heron.data");Heron.data.DataExporter={formatStore:function(store,config){var formatter=new Ext.ux.Exporter[config.formatter]();var data=formatter.format(store,config);if(config.encoding&&config.encoding=='base64'){data=Base64.encode(data);}
232return data;},download:function(data,config){try{Ext.destroy(Ext.get('hr_uploadForm'));}
233catch(e){}
234var formFields=[{tag:'input',type:'hidden',name:'data',value:data},{tag:'input',type:'hidden',name:'filename',value:config.fileName},{tag:'input',type:'hidden',name:'mime',value:config.mimeType}];if(config.format){var format=config.format instanceof OpenLayers.Format?config.format.CLASS_NAME.split("."):config.format.split(".");format=format.length==4?format[2]:format.pop();formFields.push({tag:'input',type:'hidden',name:'source_format',value:format});}
235if(config.encoding){formFields.push({tag:'input',type:'hidden',name:'encoding',value:config.encoding});}
236if(config.targetFormat){formFields.push({tag:'input',type:'hidden',name:'target_format',value:config.targetFormat});}
237if(config.assignSrs){formFields.push({tag:'input',type:'hidden',name:'assign_srs',value:config.assignSrs});formFields.push({tag:'input',type:'hidden',name:'source_srs',value:config.assignSrs});}
238if(config.sourceSrs){formFields.push({tag:'input',type:'hidden',name:'source_srs',value:config.sourceSrs});}
239if(config.targetSrs){formFields.push({tag:'input',type:'hidden',name:'target_srs',value:config.targetSrs});}
240var form=Ext.DomHelper.append(document.body,{tag:'form',id:'hr_uploadForm',method:'post',action:Heron.globals.serviceUrl,children:formFields});document.body.appendChild(form);form.submit();},directDownload:function(url){try{Ext.destroy(Ext.get('hr_directdownload'));}
241catch(e){}
242var iframe=Ext.DomHelper.append(document.body,{tag:'iframe',id:'hr_directdownload',name:'hr_directdownload',width:'0px',height:'0px',border:'0px',style:'width: 0; height: 0; border: none;',src:url});document.body.appendChild(iframe);}};Ext.namespace("Heron.data");Heron.data.MapContext={prefix:"heron:",xmlns:'xmlns:heron="http://heron-mc.org/context"',oldNodes:null,initComponent:function(){Heron.data.MapContext.superclass.initComponent.call(this);},saveContext:function(mapPanel,options){var self=this;var data=self.writeContext(mapPanel);data=this.formatXml(data);
242data=Base64.encode(data);try{Ext.destroy(Ext.get('hr_downloadForm'));}
243catch(e){}
244var formFields=[{tag:'input',type:'hidden',name:'data',value:data},{tag:'input',type:'hidden',name:'filename',value:options.fileName+options.fileExt},{tag:'input',type:'hidden',name:'mime',value:'text/xml'},{tag:'input',type:'hidden',name:'encoding',value:'base64'},{tag:'input',type:'hidden',name:'action',value:'download'}];var form=Ext.DomHelper.append(document.body,{tag:'form',id:'hr_downloadForm',method:'post',action:Heron.globals.serviceUrl,children:formFields});document.body.appendChild(form);form.submit();},openContext:function(mapPanel,options){var self=this;var data=null;try{Ext.destroy(Ext.get('hr_uploadForm'));}
245catch(e){}
246var uploadForm=new Ext.form.FormPanel({id:'hr_uploadForm',fileUpload:true,width:300,autoHeight:true,bodyStyle:'padding: 10px 10px 10px 10px;',labelWidth:5,defaults:{anchor:'95%',allowBlank:false,msgTarget:'side'},items:[{xtype:'field',id:'mapfile',name:'file',inputType:'file'}],buttons:[{text:__('Upload'),handler:function(){if(uploadForm.getForm().isValid()){var fileField=uploadForm.getForm().findField('mapfile');var selectedFile=fileField.getValue();if(!selectedFile){Ext.Msg.alert(__('Warning'),__('No file specified.'));return;}
247uploadForm.getForm().submit({url:Heron.globals.serviceUrl,mime:'text/html',params:{action:'upload',mime:'text/html',encoding:'base64'},waitMsg:__('Uploading file...'),success:function(form,action){data=Base64.decode(action.response.responseText);self.loadContext(mapPanel,data);uploadWindow.close();},failure:function(form,action){data=Base64.decode(action.response.responseText);self.loadContext(mapPanel,data);uploadWindow.close();}});}}},{text:__('Cancel'),handler:function(){uploadWindow.close();}}]});var uploadWindow=new Ext.Window({id:'hr_uploadWindow',title:'Upload',closable:true,width:400,height:120,plain:true,layout:'fit',items:uploadForm,listeners:{show:function(){var form=this.items.get(0);form.getForm().load();}}});uploadWindow.show();},writeContext:function(mapPanel){var map=mapPanel.getMap();var format=new OpenLayers.Format.WMC();var data=format.write(map);var objMap={units:map.units,xy_precision:map.xy_precision,projection:map.projection,zoom:map.zoom,resolutions:map.resolutions,resolution:map.resolution,maxExtent:{bottom:map.maxExtent.bottom,left:map.maxExtent.left,right:map.maxExtent.right,top:map.maxExtent.top}};var jsonMap=(Ext.encode(objMap));jsonMap=this.formatJson(jsonMap);var mapOptions="<Extension><"+this.prefix+"mapOptions "+this.xmlns+">\n"+
248jsonMap+"</"+this.prefix+"mapOptions></Extension>";data=data.replace("</LayerList>","</LayerList>"+mapOptions);var treePanel=Heron.App.topComponent.findByType('hr_layertreepanel')[0];if(treePanel&&treePanel.jsonTreeConfig!=null){var jsonTree=treePanel.jsonTreeConfig;var tree="<Extension><"+this.prefix+"treeConfig "+this.xmlns+">"+
249jsonTree+"</"+this.prefix+"treeConfig></Extension>";data=data.replace("</LayerList>","</LayerList>"+tree);}
250var arrTmsLayers=new Array();arrTmsLayers=map.getLayersBy("id",/OpenLayers.Layer.TMS/);var jsonTmsLayers='';for(var i=0;i<arrTmsLayers.length;i++){var tmsLayer=arrTmsLayers[i];var objTmsOptions={layername:tmsLayer.layername,type:tmsLayer.type,isBaseLayer:tmsLayer.isBaseLayer,transparent:tmsLayer.transparent,bgcolor:tmsLayer.bgcolor,visibility:tmsLayer.visibility,singleTile:tmsLayer.singleTile,alpha:tmsLayer.alpha,opacity:tmsLayer.opacity,minResolution:tmsLayer.minResolution,maxResolution:tmsLayer.maxResolution,resolutions:tmsLayer.resolutions,projection:tmsLayer.projection.projCode,units:tmsLayer.units,transitionEffect:tmsLayer.transitionEffect}
251var objTms={name:tmsLayer.name,url:tmsLayer.url,options:objTmsOptions};var jsonTms=(Ext.encode(objTms));if(jsonTmsLayers=='')
252jsonTmsLayers+=jsonTms
253else
254jsonTmsLayers=jsonTmsLayers+','+jsonTms;}
255if(jsonTmsLayers!=''){jsonTmsLayers=this.formatJson(jsonTmsLayers);var tms="<Extension><"+this.prefix+"tmsLayers "+this.xmlns+">\n["+
256jsonTmsLayers+"]\n</"+this.prefix+"tmsLayers></Extension>";data=data.replace("</LayerList>","</LayerList>"+tms);}
257var arrImgLayers=new Array();arrImgLayers=map.getLayersBy("id",/OpenLayers.Layer.Image/);var jsonImgLayers='';for(i=0;i<arrImgLayers.length;i++){var imgLayer=arrImgLayers[i];
257var objImgOptions={layername:imgLayer.layername,type:imgLayer.type,isBaseLayer:imgLayer.isBaseLayer,transparent:imgLayer.transparent,bgcolor:imgLayer.bgcolor,visibility:imgLayer.visibility,alpha:imgLayer.alpha,opacity:imgLayer.opacity,minResolution:imgLayer.minResolution,maxResolution:imgLayer.maxResolution,resolutions:imgLayer.resolutions,projection:imgLayer.projection.projCode,units:imgLayer.units,transitionEffect:imgLayer.transitionEffect,size:imgLayer.size,extent:imgLayer.extent}
258var objImg={name:imgLayer.name,url:imgLayer.url,options:objImgOptions};var jsonImg=(Ext.encode(objImg));if(jsonImgLayers=='')
259jsonImgLayers+=jsonImg
260else
261jsonImgLayers=jsonImgLayers+','+jsonImg;}
262if(jsonImgLayers!=''){jsonImgLayers=this.formatJson(jsonImgLayers);var img="<Extension><"+this.prefix+"imageLayers "+this.xmlns+">\n["+
263jsonImgLayers+"]\n</"+this.prefix+"imageLayers></Extension>";data=data.replace("</LayerList>","</LayerList>"+img);}
264return data;},loadContext:function(mapPanel,data){var map=mapPanel.getMap();var format=new OpenLayers.Format.WMC();var num;var objLayer;var newLayer;var isBaseLayerInFile=false;var oldNodes=new Array();var treePanel=Heron.App.topComponent.findByType('hr_layertreepanel')[0];if(treePanel){var treeRoot=treePanel.getRootNode();}
265var strTagStart="<"+this.prefix+'treeConfig '+this.xmlns+">"
266var strTagEnd="</"+this.prefix+'treeConfig'+">"
267var posStart=data.indexOf(strTagStart);var posEnd=data.indexOf(strTagEnd);var newTreeConfig=null;if(posStart>0){posStart=data.indexOf(strTagStart)+strTagStart.length;newTreeConfig=data.substring(posStart,posEnd);}
268strTagStart="<"+this.prefix+'mapOptions '+this.xmlns+">"
269strTagEnd="</"+this.prefix+'mapOptions'+">"
270posStart=data.indexOf(strTagStart);posEnd=data.indexOf(strTagEnd);var newMapOptions=null;if(posStart>0){posStart=data.indexOf(strTagStart)+strTagStart.length;newMapOptions=data.substring(posStart,posEnd);}
271strTagStart="<"+this.prefix+'tmsLayers '+this.xmlns+">"
272strTagEnd="</"+this.prefix+'tmsLayers'+">"
273posStart=data.indexOf(strTagStart);posEnd=data.indexOf(strTagEnd);var tmsLayers=null;if(posStart>0){posStart=data.indexOf(strTagStart)+strTagStart.length;tmsLayers=data.substring(posStart,posEnd);}
274strTagStart="<"+this.prefix+'imageLayers '+this.xmlns+">"
275strTagEnd="</"+this.prefix+'imageLayers'+">"
276posStart=data.indexOf(strTagStart);posEnd=data.indexOf(strTagEnd);var imgLayers=null;if(posStart>0){posStart=data.indexOf(strTagStart)+strTagStart.length;imgLayers=data.substring(posStart,posEnd);}
277try{var testMap=new OpenLayers.Map();testMap=format.read(data,{map:testMap});num=testMap.getNumLayers();var i=0;do{isBaseLayerInFile=testMap.layers[i].isBaseLayer;i++;}while(!isBaseLayerInFile&&i<num)
278testMap.destroy();}catch(err){Ext.Msg.alert(__('Warning'),__('Error reading map file, map has not been loaded.'));console.log("Error while testing WMC file: "+err.message);testMap.destroy();return;}
279if(treePanel){treePanel.getLoader().doPreload(treeRoot);for(i=0;i<treeRoot.childNodes.length;i++){oldNodes.push(treeRoot.childNodes[i]);treeRoot.childNodes[i].cascade(function(node){oldNodes.push(node);},null,null);}}
280num=map.getNumLayers();for(i=num-1;i>=0;i--){var strLayer=null;try{strLayer=map.layers[i].name;map.removeLayer(map.layers[i],false);}catch(err){Ext.Msg.alert(__('Warning'),__('Error on removing layers.'));console.log("Problem with removing layers before loading map: "+err.message);console.log("Layer["+i+"]: "+strLayer);}}
281if(treePanel){while(oldNodes.length>0){var oldNode=oldNodes.pop()
282if(oldNode){this.removeTreeNode(oldNode);}}}
283var mapOptions=Ext.decode(newMapOptions);var maxExtent=mapOptions.maxExtent;var bounds=new OpenLayers.Bounds(maxExtent.left,maxExtent.bottom,maxExtent.right,maxExtent.top);delete mapOptions.maxExtent;map.setOptions(mapOptions);map.setOptions({maxExtent:bounds});map.allOverlays=!isBaseLayerInFile
284if(tmsLayers!=null){tmsLayers=Ext.decode(tmsLayers);for(i=0;i<tmsLayers.length;i++){objLayer=tmsLayers[i];newLayer=new OpenLayers.Layer.TMS(objLayer.name,objLayer.url,objLayer.options);if(newLayer.isBaseLayer&&!isBaseLayerInFile){isBaseLayerInFile=true;map.allOverlays=false;}
285map.addLayer(newLayer);
285if(objLayer.options.isBaseLayer&&objLayer.options.visibility){map.setBaseLayer(newLayer);}}}
286if(imgLayers!=null){imgLayers=Ext.decode(imgLayers);for(i=0;i<imgLayers.length;i++){objLayer=imgLayers[i];var imgExtent=objLayer.options.extent;delete objLayer.options.extent;var objExtent=new OpenLayers.Bounds(imgExtent.left,imgExtent.bottom,imgExtent.right,imgExtent.top);newLayer=new OpenLayers.Layer.Image(objLayer.name,objLayer.url,objExtent,objLayer.options.size,objLayer.options);if(newLayer.isBaseLayer&&!isBaseLayerInFile){isBaseLayerInFile=true;map.allOverlays=false;}
287map.addLayer(newLayer);if(objLayer.options.isBaseLayer&&objLayer.options.visibility){map.setBaseLayer(newLayer);}}}
288try{map=format.read(data,{map:map});}catch(err){Ext.Msg.alert(__('Warning'),__('Error loading map file.'));console.log("Error loading map file: "+err.message);}
289if(treePanel&&newTreeConfig){treeRoot.attributes.children=Ext.decode(newTreeConfig);try{treePanel.getLoader().load(treeRoot);treePanel.jsonTreeConfig=newTreeConfig;}catch(err){Ext.Msg.alert(__('Warning'),__('Error reading layer tree.'));console.log("Error on loading tree: "+err.message);}}
290var epsgTxt=map.getProjection();if(epsgTxt){var epsg=Ext.getCmp("map-panel-epsg");if(epsg){epsg.setText(epsgTxt);}}
291num=format.context.layersContext.length;for(i=num-1;i>=0;i--){if((format.context.layersContext[i].isBaseLayer==true)&&(format.context.layersContext[i].visibility==true)){var strActiveBaseLayer=format.context.layersContext[i].title;var newBaseLayer=map.getLayersByName(strActiveBaseLayer)[0];if(newBaseLayer){try{map.setBaseLayer(newBaseLayer);}catch(err){console.log("Error on setting Baselayer: "+err.message);}}}}
292map.zoomToExtent(format.context.bounds);},removeTreeNode:function(node){if(node.childNodes&&node.childNodes.length>0){for(var i=0;i<node.childNodes.length;i++){this.removeTreeNode(node.childNodes[i]);}}else{node.remove(true);}},formatXml:function(xml){var formatted='';var reg=/(>)(<)(\/*)/g;xml=xml.replace(reg,'$1\n$2$3');var arrSplit=xml.split('\n');var pad=0;for(var intNode=0;intNode<arrSplit.length;intNode++){var node=arrSplit[intNode];var indent=0;if(node.match(/.+<\/\w[^>]*>$/)){indent=0;}else if(node.match(/^<\/\w/)){if(pad!=0){pad-=1;}}else if(node.match(/^<\w[^>]*[^\/]>.*$/)){indent=1;}else{indent=0;}
293var padding='';for(var i=0;i<pad;i++){padding+='    ';}
294formatted+=padding+node+'\n';pad+=indent;}
295return formatted;},formatJson:function(json){var formatted='';json=json.replace(/({)/g,'$1\n');json=json.replace(/(})({)/g,'$1\n$2');json=json.replace(/(:)({)/g,'$1\n$2');json=json.replace(/(,)/g,'$1\n');json=json.replace(/(})/g,'\n$1');var arrSplit=json.split('\n');var pad=0;for(var intNode=0;intNode<arrSplit.length;intNode++){var node=arrSplit[intNode];var indent=0;if(node.match(/}/)){if(pad!=0){pad-=1;}}else if(node.match(/{/)){indent=1;}else{indent=0;}
296var padding='';for(var i=0;i<pad;i++){padding+='    ';}
297formatted+=padding+node+'\n';pad+=indent;}
298return formatted;}};Ext.namespace("Heron.data");Heron.data.HeronMapContext=Ext.extend(Ext.util.Observable,{name:'default',baseUrl:'',async:true,showLoadMask:true,constructor:function(config){Ext.apply(this,config);Ext.apply(this,config.options);this.setName(this.name);this.addEvents("loaded","failure");Heron.data.HeronMapContext.superclass.constructor.apply(this,arguments);},getQueryString:function(key,defaultVal){key=key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");var regex=new RegExp("[\\?&]"+key+"=([^&#]*)");var qs=regex.exec(window.location.href);if(qs==null){return defaultVal;}
299else{return qs[1];}},setName:function(name){if(!name){name='default';}
300if(this.getQueryString('config',null)||this.getQueryString('context',null)){name=this.getQueryString('config',null);if(!name){name=this.getQueryString('context',null);}}
301this.name=name;this.setUrl(this.name);this.setBaseUrl(this.url);},setBaseUrl:function(url){this.baseUrl=url.slice(0,url.lastIndexOf("/")+1);},setUrl:function(name){var url;if(name.indexOf('http://')==0){url=name;}else{url=this.baseUrl+name;if(name.search(/\.xml/i)<0){url+='.xml';}}
302this.url=url;},handleResponse:function(request){var responseXML=null;
302if(request.status==200){if(request.responseXML){responseXML=request.responseXML;}
303else{var parser;try{request.responseType='msxml-document';parser=new DOMParser();responseXML=parser.parseFromString(request.responseText,'text/xml');}catch(e){parser=new DOMParser();responseXML=parser.parseFromString(request.responseText,'text/xml');}}
304if(!responseXML){this.errorText='Configuration at ('+this.url+') does not contain XML data';Ext.Msg.alert('Load Context',this.errorText);}}else{this.errorText="Configuration at ("+this.url+") could not be loaded ("+request.status+")";Ext.Msg.alert('Load Context',this.errorText);}
305return responseXML;},load:function(config){if(config){Ext.apply(this,config);this.setUrl(this.name);}
306console.log('Loading (OL) map configuration '+this.name+' from url: '+this.url);if(this.showLoadMask){var msg=__('Loading map context from:')+'<br> '+this.url;if(!this.loadMask){this.loadMask=new Ext.LoadMask(Ext.getBody(),{msg:msg});}else{this.loadMask.msg=msg;}
307this.loadMask.show();}
308var self=this;self.request=null;var responseXML;OpenLayers.Request.GET({url:this.url,async:this.async,callback:function(request){self.request=request;if(self.loadMask){self.loadMask.hide();}
309responseXML=self.handleResponse(self.request);if(self.async===true){if(!responseXML){self.fireEvent('failure',this.errorText);return;}
310self.context=Heron.data.MapContextParser.parse(responseXML,self);self.fireEvent('loaded',self.context);}}});return responseXML;}});Heron.data.MapContextParser={includedLayers:[],context:{map:{settings:{},layers:[]},layerTree:{}},parse:function(xml,loader){this.loader=loader;this.context.map.settings=this.parseMap(xml);this.context.layerTree=this.parseTree(xml);this.context.map.layers=this.context.map.layers.concat(this.parseTMS(xml),this.parseImage(xml),this.parseWMTS(xml),this.parseWMS(xml),this.parseWFS(xml,this.context.map.settings.projection),this.parseAtom(xml),this.includedLayers);return this.context;},blankLayer:function(){var result=[];var blank=new OpenLayers.Layer.Image("Blank","data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==",OpenLayers.Bounds.fromString(this.context.map.settings.maxExtent),new OpenLayers.Size(10,10),{resolutions:this.context.map.settings.resolutions,isBaseLayer:true,visibility:true,displayInLayerSwitcher:true});result.push(blank);return result;},parseMap:function(xml){var title=this.getTextContent('contextCollection > title',xml);var baseUrl=this.getTextContent('contextCollection > baseUrl',xml);var projection=this.getTextContent('projection',xml);var units=this.getTextContent('units',xml);var resolutions=this.getNumberArrayContent('resolutions',xml);var maxExtent=this.getTextContent('maxExtent',xml);var center=this.getTextContent('center',xml);var xyPrecision=this.getNumberContent('xyPrecision',xml);var zoom=this.getNumberContent('zoom',xml);var allOverlays=this.getBooleanContent('allOverlays',xml,true);var result={title:title,baseUrl:baseUrl,projection:projection,units:units,resolutions:resolutions,maxExtent:maxExtent,center:center,xy_precision:xyPrecision,zoom:zoom,theme:null,allOverlays:allOverlays};return result;},parseImage:function(xml){var result=[];var nodes=Ext.DomQuery.jsSelect('imageLayer',xml);for(var i=nodes.length-1;i>=0;i--){var title=this.getTextContent('title',nodes[i]);var url=this.getLayerUrlContent('url',nodes[i]);var isBaseLayer=this.getBooleanContent('isBaseLayer',nodes[i]);var isVisible=this.getBooleanContent('isVisible',nodes[i]);var isTransparent=this.getBooleanContent('isTransparent',nodes[i]);var size=this.getNumberArrayContent('size',nodes[i]);var config={isBaseLayer:isBaseLayer,visibility:isVisible,transparent:isTransparent,displayInLayerSwitcher:true};var imageLayer=new OpenLayers.Layer.Image(title,url,OpenLayers.Bounds.fromString(this.context.map.settings.maxExtent),new OpenLayers.Size(size[0],size[1]),config);result.push(imageLayer);}
311return result;},parseWMTS:function(xml){var result=[];var nodes=Ext.DomQuery.jsSelect('wmtsLayer',xml);for(var i=nodes.length-1;i>=0;i--){var title=this.getTextContent('title',nodes[i]);var url=this.getLayerUrlContent('url',nodes[i]);var isBaseLayer=this.getBooleanContent('isBaseLayer',nodes[i]);var opacity=this.getNumberContent('opacity',nodes[i]);var isTransparent=this.getBooleanContent('isTransparent',nodes[i]);var isVisible=this.getBooleanContent('isVisible',nodes[i]);
311var attribution=this.getTextContent('attribution',nodes[i]);var serverResolutions=this.getNumberArrayContent('serverResolutions',nodes[i]);var metadata=this.parseMetadata(nodes[i]);var layer=this.getTextContent('layer',nodes[i]);var style=this.getTextContent('style',nodes[i]);var matrixSet=this.getTextContent('matrixSet',nodes[i]);var matrixIds=this.getTextArrayContent('matrixIds',nodes[i]);var format=this.getTextContent('format',nodes[i]);var queryable=this.getBooleanContent('queryable',nodes[i]);var featureInfoFormat=this.getTextContent('featureInfoFormat',nodes[i]);var config={name:title,url:url,isBaseLayer:isBaseLayer,opacity:opacity,transparent:isTransparent,visibility:isVisible,layer:layer,style:style,matrixSet:matrixSet,matrixIds:matrixIds,attribution:attribution,format:format,serverResolutions:serverResolutions.length>0?serverResolutions:undefined,queryable:queryable,featureInfoFormat:featureInfoFormat,metadata:metadata};this.addResolutions(config,nodes[i]);var wmtsLayer=new OpenLayers.Layer.WMTS(config);result.push(wmtsLayer);}
312return result;},parseTMS:function(xml){var result=[];var nodes=Ext.DomQuery.jsSelect('tmsLayer',xml);for(var i=nodes.length-1;i>=0;i--){var title=this.getTextContent('title',nodes[i]);var url=this.getLayerUrlContent('url',nodes[i]);var isBaseLayer=this.getBooleanContent('isBaseLayer',nodes[i]);var opacity=this.getNumberContent('opacity',nodes[i]);var isTransparent=this.getBooleanContent('isTransparent',nodes[i]);var isVisible=this.getBooleanContent('isVisible',nodes[i]);var metadata=this.parseMetadata(nodes[i]);var layername=this.getTextContent('layername',nodes[i]);var type=this.getTextContent('type',nodes[i]);var bgColor=this.getTextContent('bgColor',nodes[i]);var isSingleTile=this.getBooleanContent('isSingleTile',nodes[i]);var attribution=this.getTextContent('attribution',nodes[i]);var isAlpha=this.getBooleanContent('isAlpha',nodes[i]);var serverResolutions=this.getNumberArrayContent('serverResolutions',nodes[i]);var config={isBaseLayer:isBaseLayer,opacity:opacity,transparent:isTransparent,visibility:isVisible,layername:layername,type:type,bgcolor:bgColor,singleTile:isSingleTile,attribution:attribution,alpha:isAlpha,serverResolutions:serverResolutions.length>0?serverResolutions:undefined,metadata:metadata};this.addResolutions(config,nodes[i]);var tmsLayer=new OpenLayers.Layer.TMS(title,url,config);result.push(tmsLayer);}
313return result;},parseWMS:function(xml){var result=[];var nodes=Ext.DomQuery.jsSelect('wmsLayer',xml);for(var i=nodes.length-1;i>=0;i--){var title=this.getTextContent('title',nodes[i]);var url=this.getLayerUrlContent('url',nodes[i]);var isBaseLayer=this.getBooleanContent('isBaseLayer',nodes[i]);var opacity=this.getNumberContent('opacity',nodes[i]);var isTransparent=this.getBooleanContent('isTransparent',nodes[i]);var isVisible=this.getBooleanContent('isVisible',nodes[i]);var attribution=this.getTextContent('attribution',nodes[i]);var metadata=this.parseMetadata(nodes[i]);var layers=this.getTextContent('layers',nodes[i]);var format=this.getTextContent('format',nodes[i]);var featureInfoFormat=this.getTextContent('featureInfoFormat',nodes[i]);var isAlpha=this.getBooleanContent('isAlpha',nodes[i]);var isSingleTile=this.getBooleanContent('isSingleTile',nodes[i]);var config={isBaseLayer:isBaseLayer,singleTile:isSingleTile,visibility:isVisible,alpha:isAlpha,opacity:opacity,attribution:attribution,featureInfoFormat:featureInfoFormat,metadata:metadata};this.addResolutions(config,nodes[i]);var wmsLayer=new OpenLayers.Layer.WMS(title,url,{layers:layers,format:format,transparent:isTransparent},config);result.push(wmsLayer);}
314return result;},parseWFS:function(xml,srsName){var result=[];var nodes=Ext.DomQuery.jsSelect('wfsLayer',xml);for(var i=nodes.length-1;i>=0;i--){var title=this.getTextContent('title',nodes[i]);var url=this.getLayerUrlContent('url',nodes[i]);var isVisible=this.getBooleanContent('isVisible',nodes[i]);var attribution=this.getTextContent('attribution',nodes[i]);var wfsVersion=this.getTextContent('wfsVersion',nodes[i]);var wfsFeatureNamespace=this.getTextContent('wfsFeatureNamespace',nodes[i]);var wfsFeaturePrefix=this.getTextContent('wfsFeaturePrefix',nodes[i]);var wfsFeatureType=this.getTextContent('wfsFeatureType',nodes[i]);var wfsMaxFeatures=this.getNumberContent('wfsMaxFeatures',nodes[i]);var wfsGeometryElement=this.getTextContent('wfsGeometryElement',nodes[i]);var wfsOutputFormat=this.getTextContent('wfsOutputFormat',nodes[i]);var styleMap=this.getStyleContent('styleMap',nodes[i]);var readFormat=new OpenLayers.Format.GML.v3({featureType:this.featureType,featureNS:this.featureNS,geometryName:'wfsGeometryElement'});var config={strategies:[new OpenLayers.Strategy.BBOX({ratio:1,resFactor:1}
314)],projection:new OpenLayers.Projection(srsName),styleMap:styleMap,protocol:new OpenLayers.Protocol.WFS({version:wfsVersion,srsName:srsName,url:url,featureNS:wfsFeatureNamespace,featurePrefix:wfsFeaturePrefix,featureType:wfsFeatureType,maxFeatures:wfsMaxFeatures,geometryName:wfsGeometryElement,outputFormat:wfsOutputFormat}),attribution:attribution,visibility:isVisible};this.addResolutions(config,nodes[i]);var wfsLayer=new OpenLayers.Layer.Vector(title,config);result.push(wfsLayer);}
315return result;},parseAtom:function(xml){var result=[];var nodes=Ext.DomQuery.jsSelect('atomLayer',xml);var epsg4326=new OpenLayers.Projection("EPSG:4326");for(var i=nodes.length-1;i>=0;i--){var title=this.getTextContent('title',nodes[i]);var url=this.getLayerUrlContent('url',nodes[i]);var isBaseLayer=this.getBooleanContent('isBaseLayer',nodes[i]);var isVisible=this.getBooleanContent('isVisible',nodes[i]);var config={strategies:[new OpenLayers.Strategy.Fixed()],projection:epsg4326,protocol:new OpenLayers.Protocol.HTTP({url:url,format:new OpenLayers.Format.Atom()}),visibility:isVisible};this.addResolutions(config,nodes[i]);var atomLayer=new OpenLayers.Layer.Vector(title,config);result.push(atomLayer);}
316return result;},parseMetadata:function(node){var metadataXML=Ext.DomQuery.jsSelect('metadata',node);if(metadataXML.length===0){return undefined;}
317var legendUrl=this.getTextContent('legendUrl',metadataXML);var hideInLegend=this.getBooleanContent('hideInLegend',metadataXML);return{legend:{legendURL:legendUrl,hideInLegend:hideInLegend}}},parseTree:function(xml){var result=[];var rootNode=Ext.DomQuery.select('contextCollection',xml)[0];this.parseTreeNode(rootNode,result);return result;},parseTreeNode:function(node,tree){var children=node.childNodes;for(var i=0;i<children.length;i++){var node=children[i];if(node.tagName=='contextFolder'){var isExpanded=this.getBooleanContent('isExpanded',node);var folder={text:this.getTextContent("title",node),expanded:isExpanded,children:[]};tree.push(folder);this.parseTreeNode(node,folder.children);}else if(node.tagName=='context'){var url=Ext.DomQuery.jsSelect('>url',node);if(url.length){url=this.getText(url[0]);var result=this.loader.load({name:url,async:false});if(!result){Ext.Msg.alert('parseTreeNode','Cannot load: '+url);return;}
318var rootNode=Ext.DomQuery.select('contextCollection',result)[0];this.includedLayers=this.includedLayers.concat(this.parseImage(result),this.parseTMS(result),this.parseWMTS(result),this.parseWMS(result),this.parseWFS(result,this.context.map.settings.projection),this.parseAtom(result));this.parseTreeNode(rootNode,tree);}
319else{var titles=Ext.DomQuery.jsSelect('title',node);var layers=[];for(var j=1;j<titles.length;j++){var layerType=titles[j].parentNode.nodeName;var layer={nodeType:'gx_layer',layer:this.getText(titles[j]),disabled:false};layers.push(layer);}
320var isExpanded=this.getBooleanContent('isExpanded',node);var folder={text:this.getTextContent("title",node),expanded:isExpanded,children:layers};tree.push(folder);}}}},getText:function(node){var result;if(window.ActiveXObject){result=node.firstChild.nodeValue;}else{result=node.textContent;}
321return result;},getTextContent:function(elementName,node){var result;var child=Ext.DomQuery.selectNode(elementName,node);if(child){result=this.getText(child);}
322return result;},getTextArrayContent:function(elementName,node){var result=[];var text=this.getTextContent(elementName,node);if(text){result=text.split(",");}
323return result;},getBooleanContent:function(elementName,node,defaultValue){var result=this.getTextContent(elementName,node);if(!result&&defaultValue){result=defaultValue;}
324return result==='true';},getLayerUrlContent:function(elementName,node){var result=this.getTextContent(elementName,node);if(result&&result.indexOf("{baseUrl}")>-1){var baseUrl=this.getTextContent("baseUrl",node.parentNode);if(baseUrl){result=result.replace("{baseUrl}",baseUrl);}else if(this.context.map.settings&&this.context.map.settings.baseUrl){result=result.replace("{baseUrl}",this.context.map.settings.baseUrl);}else{Ext.Msg.alert('getLayerUrlContent',"No base URL found for layer "
325+this.getTextContent('title',node)+" in context "
326+this.getTextContent('title',node.parentNode));}}
327return result;},getNumberContent:function(elementName,node){var result;var text=this.getTextContent(elementName,node);
327if(!isNaN(text)){result=Number(text);}
328return result;},getNumberArrayContent:function(elementName,node){var result=[];var text=this.getTextContent(elementName,node);if(text){var array=text.split(",");for(var i=0;i<array.length;i++){result.push(Number(array[i]));}}
329return result;},getTextOrNumberContent:function(elementName,root){var result;var text=this.getTextContent(elementName,root);if(isNaN(text)){result=text;}else{result=Number(text);}
330return result;},getStyleContent:function(elementName,root){var styleMapOptions={};var node=Ext.DomQuery.selectNode(elementName,root);if(node){var styleNodes=Ext.DomQuery.jsSelect('style',node);for(var i=0;i<styleNodes.length;i++){var styleName=this.getTextContent('name',styleNodes[i]);var propertyNodes=Ext.DomQuery.jsSelect('property',styleNodes[i]);var styleOptions={};for(var j=0;j<propertyNodes.length;j++){var name=this.getTextContent('name',propertyNodes[j]);var value=this.getTextOrNumberContent('value',propertyNodes[j]);styleOptions[name]=value;}
331styleMapOptions[styleName]=new OpenLayers.Style(styleOptions);}}
332return new OpenLayers.StyleMap(styleMapOptions);},addResolutions:function(properties,node){if(properties['serverResolutions']){return;}
333var mapResolutions=this.context.map.settings.resolutions;var minResolution=this.getNumberContent('minResolution',node);if(!minResolution){minResolution=mapResolutions[mapResolutions.length-1];}else{properties['minResolution']=minResolution;}
334var maxResolution=this.getNumberContent('maxResolution',node);if(!maxResolution){maxResolution=mapResolutions[0];}else{properties['maxResolution']=maxResolution;}}};Ext.namespace("Heron.data");Heron.data.LocatieserverReader=function(meta,recordType){meta=meta||{};Ext.applyIf(meta,{idProperty:meta.idProperty||meta.idPath||meta.id,successProperty:meta.successProperty||meta.success});Heron.data.LocatieserverReader.superclass.constructor.call(this,meta,recordType||meta.fields);};Ext.extend(Heron.data.LocatieserverReader,Ext.data.XmlReader,{readRecords:function(doc){this.xmlData=doc;var root=doc.documentElement||doc;var records=this.extractData(root);return{success:true,records:records,totalRecords:records.length};},extractData:function(root){var opts={namespaces:{gml:"http://www.opengis.net/gml"}};var records=[];var format=new OpenLayers.Format.XML(opts);var addresses=format.getElementsByTagNameNS(root,'','doc');var recordType=Ext.data.Record.create(["id","type","baseText","text"]);var reader=this;Ext.each(addresses,function(address,index){var values={id:"",type:"",baseText:"",text:""};var elms=format.getElementsByTagNameNS(address,'',"str");if(elms){Ext.each(elms,function(elm,index){var str=format.getChildValue(elm);var name=format.getAttributeNS(elm,'',"name");if(str){switch(name){case"weergavenaam":values["baseText"]=str;break;default:if(name in values){values[name]=str;}
335break;}}});}
336var elms=format.getElementsByTagNameNS(root,'',"lst");if(elms){Ext.each(elms,function(elm,index){name=format.getAttributeNS(elm,'',"name");if(name==values["id"]){strElem=format.getElementsByTagNameNS(elm,'',"str")[0];values["text"]=format.getChildValue(strElem);}});}
337var record=new recordType(values,index);records.push(record);});return records;}});Ext.namespace("Heron.data");Heron.data.OWSCapabilitiesCache=Ext.extend(Ext.util.Observable,{defaultOWSVersions:{WMS:'1.1.1',WFS:'1.1.0'},cache:{wms:{},wfs:{}},constructor:function(options){Ext.apply(this,options);this.addEvents("loaded","failure");Heron.data.OWSCapabilitiesCache.superclass.constructor.apply(this,arguments);},getWMSCapabilities:function(url,options){options=options?options:{};options.type='WMS';options.request='GetCapabilities';options.format=new OpenLayers.Format.WMSCapabilities();return this.getCapabilities(url,options.type,options);},getWMSLayerCapability:function(url,layerName,options){var caps=this.getWMSCapabilities(url,options);var layers=caps.capability.layers;var result;for(var i=0;i<layers.length;i++){if(layerName==layers[i].name){result=layers[i];break;}}
338return result;},getCapabilities:function(url,type,options){var result=this.getCache(type,url);if(result){return result;}
339type=type.toUpperCase();var params={SERVICE:type,REQUEST:options.request?options.request:"GetCapabilities",VERSION:options.version?o
339ptions.version:this.defaultOWSVersions[type]};var self=this;OpenLayers.Request.GET({async:!!options.async===true,url:url,params:params,success:function(request){var doc=request.responseXML;if(!doc||!doc.documentElement){doc=request.responseText;}
340result=self.putCache(type,url,options.format.read(doc));},failure:function(){console.error("Failed to retrieve capabilities from: "+url);}});return result;},getCache:function(type,url){return this.cache[type.toLowerCase()][url.toLowerCase()];},putCache:function(type,url,doc){this.cache[type.toLowerCase()][url.toLowerCase()]=doc;return doc;}});Heron.data.OWSCapabilitiesCache.getInstance=function(){var instance=Heron.data.OWSCapabilitiesCacheInstance;if(!instance){instance=Heron.data.OWSCapabilitiesCacheInstance=new Heron.data.OWSCapabilitiesCache();}
341return instance;};var Base64=(function(){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function utf8Encode(string){string=string.replace(/\r\n/g,"\n");var utftext="";for(var n=0;n<string.length;n++){var c=string.charCodeAt(n);if(c<128){utftext+=String.fromCharCode(c);}
342else if((c>127)&&(c<2048)){utftext+=String.fromCharCode((c>>6)|192);utftext+=String.fromCharCode((c&63)|128);}
343else{utftext+=String.fromCharCode((c>>12)|224);utftext+=String.fromCharCode(((c>>6)&63)|128);
343utftext+=String.fromCharCode((c&63)|128);}}
344return utftext;}
345return{encode:function(input){var output="";var chr1,chr2,chr3,enc1,enc2,enc3,enc4;var i=0;input=utf8Encode(input);while(i<input.length){chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64;}else if(isNaN(chr3)){enc4=64;}
346output=output+
347keyStr.charAt(enc1)+keyStr.charAt(enc2)+
348keyStr.charAt(enc3)+keyStr.charAt(enc4);}
349return output;}};})();Ext.ux.Exporter=function(){return{exportGrid:function(grid,formatter,config){config=config||{};formatter=formatter||new Ext.ux.Exporter.CSVFormatter();Ext.applyIf(config,{title:grid.title});return formatter.format(grid.store,config);},exportStore:function(store,formatter,config){config=config||{};formatter=formatter||new Ext.ux.Exporter.ExcelFormatter();Ext.applyIf(config,{columns:config.store.fields.items});return Base64.encode(formatter.format(store,config));},exportTree:function(tree,formatter,config){config=config||{};formatter=formatter||new Ext.ux.Exporter.ExcelFormatter();var store=tree.store||config.store;Ext.applyIf(config,{title:tree.title});return Base64.encode(formatter.format(store,config));}};}();Ext.ux.Exporter.Button=Ext.extend(Ext.Button,{constructor:function(config){config=config||{};Ext.applyIf(config,{formatter:'CSVFormatter',fileName:'heron_export.csv',mimeType:'text/csv',exportFunction:'exportGrid',disabled:true,text:__('Export'),cls:'download'});if(config.store==undefined&&config.component!=undefined){Ext.applyIf(config,{store:config.component.store});}else{Ext.applyIf(config,{component:{store:config.store}});}
350Ext.ux.Exporter.Button.superclass.constructor.call(this,config);if(this.store&&Ext.isFunction(this.store.on)){var self=this;self.store=this.store;var setLink=function(){var link=this.getEl().child('a',true);var buttonFun=function(){var formatter=new Ext.ux.Exporter[config.formatter]();var data=formatter.format(self.store,config);data=Base64.encode(data);Heron.data.DataExporter.download(data,config.fileName,config.mimeType)};link.href='#';link.onclick=buttonFun;this.enable();}
351if(this.el){setLink.call(this);}else{this.on('render',setLink,this);}
352this.store.on('load',setLink,this);}},template:new Ext.Template('<table border="0" cellpadding="0" cellspacing="0" class="x-btn-wrap"><tbody><tr>','<td class="x-btn-left"><i> </i></td><td class="x-btn-center"><a class="x-btn-text" href="{1}" target="{2}">{0}</a></td><td class="x-btn-right"><i> </i></td>',"</tr></tbody></table>"),onRender:function(ct,position){var btn,targs=[this.text||' ',this.href,this.target||"_self"];if(position){btn=this.template.insertBefore(position,targs,true);}else{btn=this.template.append(ct,targs,true);}
353var btnEl=btn.child("a:first");this.btnEl=btnEl;btnEl.on('focus',this.onFocus,this);btnEl.on('blur',this.onBlur,this);this.initButtonEl(btn,btnEl);Ext.ButtonToggleMgr.register(this);},onClick:function(e){if(e.button!=0)return;if(!this.disabled){this.fireEvent("click",this,e);if(this.handler)this.handler.call(this.scope||this,this,e);}}});Ext.reg('exportbutton',Ext.ux.Exporter.Button);Ext.ux.Exporter.Formatter=function(config){config=config||{};Ext.applyIf(config,{});};Ext.ux.Exporter.Formatter.prototype={format:Ext.emptyFn};Ext.ux.Exporter.OpenLayersFormatter=Ext.extend(Ext.ux.Exporter.Formatter,{format:function(store,config){var formatter=config.format;if(typeof formatter=='string'){formatter=eval('new '+formatter+'()');}
354if(config.fileProjection){formatter.internalProjection=config.mapProjection;formatter.externalProjection=config.fileProjection;}
355formatter.srsName=formatter.externalProjection?formatter.externalProjection.getCode():config.assignSrs;var features=store.layer?store.layer.features:null;if(!features){features=[];store.each(function(record){features.push(record.getFeature());});}
356return formatter.write(features);}});Ext.ux.Exporter.ExcelFormatter=Ext.extend(Ext.ux.Exporter.Formatter,{format:function(store,config){var workbook=new Ext.ux.Exporter.ExcelFormatter.Workbook(config);workbook.addWorksheet(store,config||{});return workbook.render();}});Ext.ux.Exporter.CSVFormatter=Ext.extend(Ext.ux.Exporter.Formatter,{extend:"Ext.ux.exporter.Formatter",contentType:'data:text/csv;base64,',separator:";",extension:"csv",format:function(store,config){this.columns=config.columns||(store.fields?store.fields.items:store.model.prototype.fields.items);return this.getHeaders(store)+"\n"+this.getRows(store);},getHeaders:function(store){var columns=[];Ext.each(this.columns,function(col){var title;if(col.text!=undefined){title=col.text;}else if(col.name){title=col.name.replace(/_/g," ");}
357columns.push(title);},this);return columns.join(this.separator);},getRows:function(store){var rows=[];store.each(function(record,index){rows.push(this.getCell(record,index));},this);return rows.join("\n");},getCell:function(record,index){var cells=[];Ext.each(this.columns,function(col){var name=col.name||col.dataIndex;if(name){if(Ext.isFunction(col.renderer)){var value=col.renderer(record.get(name),null,record);}else{var value=record.get(name);}
358cells.push(value);}});return cells.join(this.separator);}});Ext.ux.Exporter.ExcelFormatter.Workbook=Ext.extend(Object,{constructor:function(config){config=config||{};Ext.apply(this,config,{title:"Workbook",worksheets:[],compiledWorksheets:[],cellBorderColor:"#e4e4e4",styles:[],compiledStyles:[],hasDefaultStyle:true,hasStripeStyles:true,windowHeight:9000,windowWidth:50000,protectStructure:false,protectWindows:false});if(this.hasDefaultStyle)this.addDefaultStyle();if(this.hasStripeStyles)this.addStripedStyles();this.addTitleStyle();this.addHeaderStyle();},render:function(){this.compileStyles();this.joinedCompiledStyles=this.compiledStyles.join("");this.compileWorksheets();this.joinedWorksheets=this.compiledWorksheets.join("");return this.tpl.apply(this);},addWorksheet:function(store,config){var worksheet=new Ext.ux.Exporter.ExcelFormatter.Worksheet(store,config);this.worksheets.push(worksheet);return worksheet;},addStyle:function(config){var style=new Ext.ux.Exporter.ExcelFormatter.Style(config||{});this.styles.push(style);return style;},compileStyles:function(){this.compiledStyles=[];Ext.each(this.styles,function(style){this.compiledStyles.push(style.render());},this);return this.compiledStyles;},compileWorksheets:function(){this.compiledWorksheets=[];Ext.each(this.worksheets,function(worksheet){this.compiledWorksheets.push(worksheet.render());},this);return this.compiledWorksheets;},tpl:new Ext.XTemplate('<?xml version="1.0" encoding="utf-8"?>','<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="ur
358n:schemas-microsoft-com:office:office">','<o:DocumentProperties>','<o:Title>{title}</o:Title>','</o:DocumentProperties>','<ss:ExcelWorkbook>','<ss:WindowHeight>{windowHeight}</ss:WindowHeight>','<ss:WindowWidth>{windowWidth}</ss:WindowWidth>','<ss:ProtectStructure>{protectStructure}</ss:ProtectStructure>','<ss:ProtectWindows>{protectWindows}</ss:ProtectWindows>','</ss:ExcelWorkbook>','<ss:Styles>','{joinedCompiledStyles}','</ss:Styles>','{joinedWorksheets}','</ss:Workbook>'),addDefaultStyle:function(){var borderProperties=[{name:"Color",value:this.cellBorderColor},{name:"Weight",value:"1"},{name:"LineStyle",value:"Continuous"}];this.addStyle({id:'Default',attributes:[{name:"Alignment",properties:[{name:"Vertical",value:"Top"},{name:"WrapText",value:"1"}]},{name:"Font",properties:[{name:"FontName",value:"arial"},{name:"Size",value:"10"}]},{name:"Interior"},{name:"NumberFormat"},{name:"Protection"},{name:"Borders",children:[{name:"Border",properties:[{name:"Position",value:"Top"}].concat(borderProperties)},{name:"Border",properties:[{name:"Position",value:"Bottom"}].concat(borderProperties)},{name:"Border",properties:[{name:"Position",value:"Left"}].concat(borderProperties)},{name:"Border",properties:[{name:"Position",value:"Right"}].concat(borderProperties)}]}]});},addTitleStyle:function(){this.addStyle({id:"title",attributes:[{name:"Borders"},{name:"Font"},{name:"NumberFormat",properties:[{name:"Format",value:"@"}]},{name:"Alignment",properties:[{name:"WrapText",value:"1"},{name:"Horizontal",value:"Center"},{name:"Vertical",value:"Center"}]}]});},addHeaderStyle:function(){this.addStyle({id:"headercell",attributes:[{name:"Font",properties:[{name:"Bold",value:"1"},{name:"Size",value:"10"}]},{name:"Interior",properties:[{name:"Pattern",value:"Solid"},{name:"Color",value:"#A3C9F1"}]},{name:"Alignment",properties:[{name:"WrapText",value:"1"},{name:"Horizontal",value:"Center"}]}]});},addStripedStyles:function(){this.addStyle({id:"even",attributes:[{name:"Interior",properties:[{name:"Pattern",value:"Solid"},{name:"Color",value:"#CCFFFF"}]}]});this.addStyle({id:"odd",attributes:[{name:"Interior",properties:[{name:"Pattern",value:"Solid"},{name:"Color",value:"#CCCCFF"}]}]});Ext.each(['even','odd'],function(parentStyle){this.addChildNumberFormatStyle(parentStyle,parentStyle+'date',"[ENG][$-409]dd\-mmm\-yyyy;@");this.addChildNumberFormatStyle(parentStyle,parentStyle+'int',"0");this.addChildNumberFormatStyle(parentStyle,parentStyle+'float',"0.00");},this);},addChildNumberFormatStyle:function(parentStyle,id,value){this.addStyle({id:id,parentStyle:"even",attributes:[{name:"NumberFormat",properties:[{name:"Format",value:value}]}]});}});Ext.ux.Exporter.ExcelFormatter.Worksheet=Ext.extend(Object,{constructor:function(store,config){config=config||{};this.store=store;Ext.applyIf(config,{hasTitle:true,hasHeadings:true,stripeRows:true,title:"Workbook",columns:store.fields==undefined?{}:store.fields.items});Ext.apply(this,config);Ext.ux.Exporter.ExcelFormatter.Worksheet.superclass.constructor.apply(this,arguments);},dateFormatString:"Y-m-d",worksheetTpl:new Ext.XTemplate('<ss:Worksheet ss:Name="{title}">','<ss:Names>','<ss:NamedRange ss:Name="Print_Titles" ss:RefersTo="=\'{title}\'!R1:R2" />','</ss:Names>','<ss:Table x:FullRows="1" x:FullColumns="1" ss:ExpandedColumnCount="{colCount}" ss:ExpandedRowCount="{rowCount}">','{columns}','<ss:Row ss:Height="38">','<ss:Cell ss:StyleID="title" ss:MergeAcross="{colCount - 1}">','<ss:Data xmlns:html="http://www.w3.org/TR/REC-html40" ss:Type="String">','<html:B><html:U><html:Font html:Size="15">{title}','</html:Font></html:U></html:B></ss:Data><ss:NamedCell ss:Name="Print_Titles" />','</ss:Cell>','</ss:Row>','<ss:Row ss:AutoFitHeight="1">','{header}','</ss:Row>','{rows}','</ss:Table>','<x:WorksheetOptions>','<x:PageSetup>','<x:Layout x:CenterHorizontal="1" x:Orientation="Landscape" />','<x:Footer x:Data="Page &amp;P of &amp;N" x:Margin="0.5" />','<x:PageMargins x:Top="0.5" x:Right="0.5" x:Left="0.5" x:Bottom="0.8" />','</x:PageSetup>','<x:FitToPage />','<x:Print>','<x:PrintErrors>Blank</x:PrintErrors>','<x:FitWidth>1</x:FitWidth>','<x:FitHeight>32767</x:FitHeight>','<x:ValidPrinterInfo />
358','<x:VerticalResolution>600</x:VerticalResolution>','</x:Print>','<x:Selected />','<x:DoNotDisplayGridlines />','<x:ProtectObjects>False</x:ProtectObjects>','<x:ProtectScenarios>False</x:ProtectScenarios>','</x:WorksheetOptions>','</ss:Worksheet>'),render:function(store){return this.worksheetTpl.apply({header:this.buildHeader(),columns:this.buildColumns().join(""),rows:this.buildRows().join(""),colCount:this.columns.length,rowCount:this.store.getCount()+2,title:this.title});},buildColumns:function(){var cols=[];Ext.each(this.columns,function(column){cols.push(this.buildColumn());},this);return cols;},buildColumn:function(width){return String.format('<ss:Column ss:AutoFitWidth="1" ss:Width="{0}" />',width||164);},buildRows:function(){var rows=[];this.store.each(function(record,index){rows.push(this.buildRow(record,index));},this);return rows;},buildHeader:function(){var cells=[];Ext.each(this.columns,function(col){var title;if(col.header!=undefined){title=col.header;}else{title=col.name.replace(/_/g," ");}
359cells.push(String.format('<ss:Cell ss:StyleID="headercell"><ss:Data ss:Type="String">{0}</ss:Data><ss:NamedCell ss:Name="Print_Titles" /></ss:Cell>',title));},this);return cells.join("");},buildRow:function(record,index){var style,cells=[];if(this.stripeRows===true)style=index%2==0?'even':'odd';Ext.each(this.columns,function(col){var name=col.name||col.dataIndex;if(Ext.isFunction(col.renderer)){var value=col.renderer(record.get(name),null,record),type="String";}
359else{var value=record.get(name),type=this.typeMappings[col.type||record.fields.item(name).type];}
360cells.push(this.buildCell(value,type,style).render());},this);return String.format("<ss:Row>{0}</ss:Row>",cells.join(""));},buildCell:function(value,type,style){if(type=="DateTime"&&Ext.isFunction(value.format))value=value.format(this.dateFormatString);return new Ext.ux.Exporter.ExcelFormatter.Cell({value:value,type:type,style:style});},typeMappings:{'int':"Number",'string':"String",'float':"Number",'date':"DateTime"}});Ext.ux.Exporter.ExcelFormatter.Cell=Ext.extend(Object,{constructor:function(config){Ext.applyIf(config,{type:"String"});Ext.apply(this,config);Ext.ux.Exporter.ExcelFormatter.Cell.superclass.constructor.apply(this,arguments);},render:function(){return this.tpl.apply(this);},tpl:new Ext.XTemplate('<ss:Cell ss:StyleID="{style}">','<ss:Data ss:Type="{type}"><![CDATA[{value}]]></ss:Data>','</ss:Cell>')});Ext.ux.Exporter.ExcelFormatter.Style=Ext.extend(Object,{constructor:function(config){config=config||{};Ext.apply(this,config,{parentStyle:'',attributes:[]});Ext.ux.Exporter.ExcelFormatter.Style.superclass.constructor.apply(this,arguments);if(this.id==undefined)throw new Error("An ID must be provided to Style");this.preparePropertyStrings();},preparePropertyStrings:function(){Ext.each(this.attributes,function(attr,index){this.attributes[index].propertiesString=this.buildPropertyString(attr);this.attributes[index].children=attr.children||[];Ext.each(attr.children,function(child,childIndex){this.attributes[index].children[childIndex].propertiesString=this.buildPropertyString(child);},this);},this);},buildPropertyString:function(attribute){var propertiesString="";Ext.each(attribute.properties||[],function(property){propertiesString+=String.format('ss:{0}="{1}" ',property.name,property.value);},this);return propertiesString;},render:function(){return this.tpl.apply(this);},tpl:new Ext.XTemplate('<tpl if="parentStyle.length == 0">','<ss:Style ss:ID="{id}">','</tpl>','<tpl if="parentStyle.length != 0">','<ss:Style ss:ID="{id}" ss:Parent="{parentStyle}">','</tpl>','<tpl for="attributes">','<tpl if="children.length == 0">','<ss:{name} {propertiesString} />','</tpl>','<tpl if="children.length > 0">','<ss:{name} {propertiesString}>','<tpl for="children">','<ss:{name} {propertiesString} />','</tpl>','</ss:{name}>','</tpl>','</tpl>','</ss:Style>')});var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(input){var output="";var chr1,chr2,chr3,enc1,enc2,enc3,enc4;var i=0;input=Base64._utf8_encode(input);while(i<input.length){chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64;}else if(isNaN(chr3)){enc4=64;}
361output=output+
362this._keyStr.charAt(enc1)+this._keyStr.charAt(enc2)+
363this._keyStr.charAt(enc3)+this._keyStr.charAt(enc4);}
364return output;},decode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i<input.length){enc1=this._keyStr.indexOf(input.charAt(i++));enc2=this._keyStr.indexOf(input.charAt(i++));enc3=this._keyStr.indexOf(input.charAt(i++));enc4=this._keyStr.indexOf(input.charAt(i++));chr1=(enc1<<2)|(enc2>>4);chr2=((enc2&15)<<4)|(enc3>>2);chr3=((enc3&3)<<6)|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2);}
365if(enc4!=64){output=output+String.fromCharCode(chr3);}}
366output=Base64._utf8_decode(output);return output;},_utf8_encode:function(string){string=string.replace(/\r\n/g,"\n");var utftext="";for(var n=0;n<string.length;n++){var c=string.charCodeAt(n);if(c<128){utftext+=String.fromCharCode(c);}
367else if((c>127)&&(c<2048)){utftext+=String.fromCharCode((c>>6)|192);utftext+=String.fromCharCode((c&63)|128);}
368else{utftext+=String.fromCharCode((c>>12)|224);utftext+=String.fromCharCode(((c>>6)&63)|128);
368utftext+=String.fromCharCode((c&63)|128);}}
369return utftext;},_utf8_decode:function(utftext){var string="";var i=0;var c=c1=c2=0;while(i<utftext.length){c=utftext.charCodeAt(i);if(c<128){string+=String.fromCharCode(c);i++;}
370else if((c>191)&&(c<224)){c2=utftext.charCodeAt(i+1);string+=String.fromCharCode(((c&31)<<6)|(c2&63));i+=2;}
371else{c2=utftext.charCodeAt(i+1);c3=utftext.charCodeAt(i+2);string+=String.fromCharCode(((c&15)<<12)|((c2&63)<<6)|(c3&63));i+=3;}}
372return string;}}
373Ext.grid.RowExpander=function(config){Ext.apply(this,config);this.addEvents({beforeexpand:true,expand:true,beforecollapse:true,collapse:true});Ext.grid.RowExpander.superclass.constructor.call(this);if(this.tpl){if(typeof this.tpl=='string'){this.tpl=new Ext.Template(this.tpl);}
374this.tpl.compile();}
375this.state={};this.bodyContent={};};Ext.extend(Ext.grid.RowExpander,Ext.util.Observable,{header:"",width:20,sortable:false,fixed:true,menuDisabled:true,dataIndex:'',id:'expander',lazyRender:true,enableCaching:true,getRowClass:function(record,rowIndex,p,ds){p.cols=p.cols-1;var content=this.bodyContent[record.id];if(!content&&!this.lazyRender){content=this.getBodyContent(record,rowIndex);}
376if(content){p.body=content;}
377return this.state[record.id]?'x-grid3-row-expanded':'x-grid3-row-collapsed';},init:function(grid){this.grid=grid;var view=grid.getView();view.getRowClass=this.getRowClass.createDelegate(this);view.enableRowBody=true;grid.on('render',function(){view.mainBody.on('mousedown',this.onMouseDown,this);},this);},getBodyContent:function(record,index){if(!this.enableCaching){return this.tpl.apply(record.data);}
378var content=this.bodyContent[record.id];if(!content){content=this.tpl.apply(record.data);this.bodyContent[record.id]=content;}
379return content;},onMouseDown:function(e,t){if(t.className=='x-grid3-row-expander'){e.stopEvent();var row=e.getTarget('.x-grid3-row');this.toggleRow(row);}},renderer:function(v,p,record){p.cellAttr='rowspan="2"';return'<div class="x-grid3-row-expander">&#160;</div>';},beforeExpand:function(record,body,rowIndex){if(this.fireEvent('beforeexpand',this,record,body,rowIndex)!==false){if(this.tpl&&this.lazyRender){body.innerHTML=this.getBodyContent(record,rowIndex);}
380return true;}else{return false;}},toggleRow:function(row){if(typeof row=='number'){row=this.grid.view.getRow(row);}
381this[Ext.fly(row).hasClass('x-grid3-row-collapsed')?'expandRow':'collapseRow'](row);},expandRow:function(row){if(typeof row=='number'){row=this.grid.view.getRow(row);}
382var record=this.grid.store.getAt(row.rowIndex);var body=Ext.DomQuery.selectNode('tr:nth(2) div.x-grid3-row-body',row);if(this.beforeExpand(record,body,row.rowIndex)){this.state[record.id]=true;Ext.fly(row).replaceClass('x-grid3-row-collapsed','x-grid3-row-expanded');this.fireEvent('expand',this,record,body,row.rowIndex);}},collapseRow:function(row){if(typeof row=='number'){row=this.grid.view.getRow(row);}
383var record=this.grid.store.getAt(row.rowIndex);var body=Ext.fly(row).child('tr:nth(1) div.x-grid3-row-body',true);if(this.fireEvent('beforecollapse',this,record,body,row.rowIndex)!==false){this.state[record.id]=false;Ext.fly(row).replaceClass('x-grid3-row-expanded','x-grid3-row-collapsed');this.fireEvent('collapse',this,record,body,row.rowIndex);}}});Ext.ux.SmallSpinner=Ext.extend(Ext.util.Observable,{incrementValue:1,alternateIncrementValue:5,triggerClass:'x-form-spinner-trigger',splitterClass:'x-form-spinner-splitter',alternateKey:Ext.EventObject.shiftKey,defaultValue:0,accelerate:false,constructor:function(config){Ext.ux.SmallSpinner.superclass.constructor.call(this,config);Ext.apply(this,config);this.mimicing=false;},init:function(field){this.field=field;field.afterMethod('onRender',this.doRender,this);field.afterMethod('onEnable',this.doEnable,this);field.afterMethod('onDisable',this.doDisable,this);field.afterMethod('afterRender',this.doAfterRender,this);field.afterMethod('onResize',this.doResize,this);field.afterMethod('onFocus',this.doFocus,this);field.beforeMethod('onDestroy',this.doDestroy,this);},doRender:function(ct,position){var el=this.el=this.field.getEl();var f=this.field;if(!f.wrap){f.wrap=this.wrap=el.wrap({cls:"x-form-field-wrap"});}
384else{this.wrap=f.wrap.addClass('x-form-field-wrap');}
385this.trigger=this.wrap.createChild({tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"smallspinner "+this.triggerClass});if(!f.width){this.wrap.setWidth(el.getWidth()+this.trigger.getWidth());}
386this.splitter=this.wrap.createChild({tag:'div',cls:this.splitterClass,style:'width:6px; height:2px;'});this.splitter.setRight((Ext.isIE)?1:2).setTop(10).show();this.proxy=this.trigger.createProxy('',this.splitter,true);this.proxy.addClass("x-form-spinner-proxy");this.proxy.setStyle('left','0px');this.proxy.setSize(7,1);this.proxy.hide();this.dd=new Ext.dd.DDProxy(this.splitter.dom.id,"SmallSpinnerDrag",{dragElId:this.proxy.id});this.initTrigger();this.initSmallSpinner();},doAfterRender:function(){var y;if(Ext.isIE&&this.el.getY()!=(y=this.trigger.getY())){this.el.position();this.el.setY(y);}},doEnable:function(){if(this.wrap){this.disabled=false;this.wrap.removeClass(this.field.disabledClass);}},doDisable:function(){if(this.wrap){this.disabled=true;this.wrap.addClass(this.field.disabledClass);this.el.removeClass(this.field.disabledClass);}},doResize:function(w,h){if(typeof w=='number'){this.el.setWidth(w-this.trigger.getWidth());}
387this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());},doFocus:function(){if(!this.mimicing){this.wrap.addClass('x-trigger-wrap-focus');this.mimicing=true;Ext.get(Ext.isIE?document.body:document).on("mousedown",this.mimicBlur,this,{delay:10});this.el.on('keydown',this.checkTab,this);}},checkTab:function(e){if(e.getKey()==e.TAB){this.triggerBlur();}},mimicBlur:function(e){if(!this.wrap.contains(e.target)&&this.field.validateBlur(e)){this.triggerBlur();}},triggerBlur:function(){this.mimicing=false;Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this);
387this.el.un("keydown",this.checkTab,this);this.field.beforeBlur();this.wrap.removeClass('x-trigger-wrap-focus');this.field.onBlur.call(this.field);},initTrigger:function(){this.trigger.addClassOnOver('x-form-trigger-over');this.trigger.addClassOnClick('x-form-trigger-click');},initSmallSpinner:function(){this.field.addEvents({'spin':true,'spinup':true,'spindown':true});this.keyNav=new Ext.KeyNav(this.el,{"up":function(e){e.preventDefault();this.onSpinUp();},"down":function(e){e.preventDefault();this.onSpinDown();},"pageUp":function(e){e.preventDefault();this.onSpinUpAlternate();},"pageDown":function(e){e.preventDefault();this.onSpinDownAlternate();},scope:this});this.repeater=new Ext.util.ClickRepeater(this.trigger,{accelerate:this.accelerate});this.field.mon(this.repeater,"click",this.onTriggerClick,this,{preventDefault:true});this.field.mon(this.trigger,{mouseover:this.onMouseOver,mouseout:this.onMouseOut,mousemove:this.onMouseMove,mousedown:this.onMouseDown,mouseup:this.onMouseUp,scope:this,preventDefault:true});this.field.mon(this.wrap,"mousewheel",this.handleMouseWheel,this);this.dd.setXConstraint(0,0,10)
388this.dd.setYConstraint(1500,1500,10);this.dd.endDrag=this.endDrag.createDelegate(this);this.dd.startDrag=this.startDrag.createDelegate(this);this.dd.onDrag=this.onDrag.createDelegate(this);},onMouseOver:function(){if(this.disabled){return;}
389var middle=this.getMiddle();this.tmpHoverClass=(Ext.EventObject.getPageY()<middle)?'x-form-spinner-overup':'x-form-spinner-overdown';this.trigger.addClass(this.tmpHoverClass);},onMouseOut:function(){this.trigger.removeClass(this.tmpHoverClass);},onMouseMove:function(){if(this.disabled){return;}
390var middle=this.getMiddle();if(((Ext.EventObject.getPageY()>middle)&&this.tmpHoverClass=="x-form-spinner-overup")||((Ext.EventObject.getPageY()<middle)&&this.tmpHoverClass=="x-form-spinner-overdown")){}},onMouseDown:function(){if(this.disabled){return;}
391var middle=this.getMiddle();this.tmpClickClass=(Ext.EventObject.getPageY()<middle)?'x-form-spinner-clickup':'x-form-spinner-clickdown';this.trigger.addClass(this.tmpClickClass);},onMouseUp:function(){this.trigger.removeClass(this.tmpClickClass);},onTriggerClick:function(){if(this.disabled||this.el.dom.readOnly){return;}
392var middle=this.getMiddle();var ud=(Ext.EventObject.getPageY()<middle)?'Up':'Down';this['onSpin'+ud]();},getMiddle:function(){var t=this.trigger.getTop();var h=this.trigger.getHeight();var middle=t+(h/2);return middle;},isSpinnable:function(){if(this.disabled||this.el.dom.readOnly){Ext.EventObject.preventDefault();return false;}
393return true;},handleMouseWheel:function(e){if(this.wrap.hasClass('x-trigger-wrap-focus')==false){return;}
394var delta=e.getWheelDelta();if(delta>0){this.onSpinUp();e.stopEvent();}
395else
396if(delta<0){this.onSpinDown();e.stopEvent();}},startDrag:function(){this.proxy.show();this._previousY=Ext.fly(this.dd.getDragEl()).getTop();},endDrag:function(){this.proxy.hide();},onDrag:function(){if(this.disabled){return;}
397var y=Ext.fly(this.dd.getDragEl()).getTop();var ud='';if(this._previousY>y){ud='Up';}
398if(this._previousY<y){ud='Down';}
399if(ud!=''){this['onSpin'+ud]();}
400this._previousY=y;},onSpinUp:function(){if(this.isSpinnable()==false){return;}
401if(Ext.EventObject.shiftKey==true){this.onSpinUpAlternate();return;}
402else{this.spin(false,false);}
403this.field.fireEvent("spin",this);this.field.fireEvent("spinup",this);},onSpinDown:function(){if(this.isSpinnable()==false){return;}
404if(Ext.EventObject.shiftKey==true){this.onSpinDownAlternate();return;}
405else{this.spin(true,false);}
406this.field.fireEvent("spin",this);this.field.fireEvent("spindown",this);},onSpinUpAlternate:function(){if(this.isSpinnable()==false){return;}
407this.spin(false,true);this.field.fireEvent("spin",this);this.field.fireEvent("spinup",this);},onSpinDownAlternate:function(){if(this.isSpinnable()==false){return;}
408this.spin(true,true);this.field.fireEvent("spin",this);this.field.fireEvent("spindown",this);},spin:function(down,alternate){var v=parseFloat(this.field.getValue());var incr=(alternate==true)?this.alternateIncrementValue:this.incrementValue;(down==true)?v-=incr:v+=incr;v=(isNaN(v))?this.defaultValue:v;v=this.fixBoundries(v);if(v<10){v="0"+v;if(this.field.validator(v)){this.field.setValue(v);}}else this.field.setValue(v);},fixBoundries:function(value){var v=value;if(this.field.minValue!=undefined&&v<this.field.minValue){v=this.field.minValue;}
409if(this.field.maxValue!=undefined&&v>this.field.maxValue){v=this.field.maxValue;}
410return this.fixPrecision(v);},fixPrecision:function(value){var nan=isNaN(value);if(!this.field.allowDecimals||this.field.decimalPrecision==-1||nan||!value){return nan?'':value;}
411return parseFloat(parseFloat(value).toFixed(this.field.decimalPrecision));},doDestroy:function(){if(this.trigger){this.trigger.remove();}
412if(this.wrap){this.wrap.remove();delete this.field.wrap;}
413if(this.splitter){this.splitter.remove();}
414if(this.dd){this.dd.unreg();this.dd=null;}
415if(this.proxy){this.proxy.remove();}
416if(this.repeater){this.repeater.purgeListeners();}
417if(this.mimicing){Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this);}}});Ext.form.SmallSpinner=Ext.ux.SmallSpinner;Ext.ns('Ext.ux.form');Ext.ux.form.SmallSpinnerField=Ext.extend(Ext.form.TextField,{actionMode:'wrap',deferHeight:true,autoSize:Ext.emptyFn,onBlur:Ext.emptyFn,adjustSize:Ext.BoxComponent.prototype.adjustSize,constructor:function(config){var spinnerConfig=Ext.copyTo({},config,'incrementValue,alternateIncrementValue,accelerate,defaultValue,triggerClass,splitterClass');var spl=this.spinner=new Ext.ux.SmallSpinner(spinnerConfig);var plugins=config.plugins?(Ext.isArray(config.plugins)?config.plugins.push(spl):[config.plugins,spl]):spl;Ext.ux.form.SmallSpinnerField.superclass.constructor.call(this,Ext.apply(config,{plugins:plugins}));},getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;},alignErrorIcon:function(){if(this.wrap){this.errorIcon.alignTo(this.wrap,'tl-tr',[2,0]);}}
417,validateBlur:function(){return true;}});Ext.reg('smallspinnerfield',Ext.ux.form.SmallSpinnerField);Ext.form.SmallSpinnerField=Ext.ux.form.SmallSpinnerField;Ext.namespace("Heron.widgets.LayerNodeMenuItem");Heron.widgets.LayerNodeMenuItem=Ext.extend(Ext.menu.Item,{isApplicable:function(node){return true;}});Heron.widgets.LayerNodeMenuItem.Style=Ext.extend(Heron.widgets.LayerNodeMenuItem,{text:__('Edit Layer Style'),iconCls:"icon-palette",disabled:false,listeners:{'activate':function(menuItem,event){var node=menuItem.ownerCt.contextNode;if(!node||!node.layer){}},scope:this},initComponent:function(){Heron.widgets.LayerNodeMenuItem.Style.superclass.initComponent.call(this);},handler:function(menuItem,event){var node=menuItem.ownerCt.contextNode;if(!node||!node.layer){return;}
418if(node.layer.CLASS_NAME!='OpenLayers.Layer.Vector'){Ext.Msg.alert(__('Warning'),__('Sorry, Layer style editing is only available for Vector Layers'));return;}
419if(!gxp.VectorStylesDialog){Ext.Msg.alert(__('Warning'),__('Vector Layer style editing requires GXP with VectorStylesDialog'));return;}
420var layerRecord=Heron.App.getMapPanel().layers.getByLayer(node.layer);new Ext.Window({layout:'auto',resizable:false,autoHeight:true,pageX:100,pageY:200,width:400,closeAction:'hide',title:__('Style Editor (Vector)'),items:[gxp.VectorStylesDialog.createVectorStylerConfig(layerRecord)]}).show();},isApplicable:function(node){return node.layer.CLASS_NAME=='OpenLayers.Layer.Vector';}});Ext.reg('hr_layernodemenustyle',Heron.widgets.LayerNodeMenuItem.Style);Heron.widgets.LayerNodeMenuItem.ZoomExtent=Ext.extend(Heron.widgets.LayerNodeMenuItem,{text:__('Zoom to Layer Extent'),iconCls:"icon-zoom-visible",initComponent:function(){Heron.widgets.LayerNodeMenuItem.ZoomExtent.superclass.initComponent.call(this);},handler:function(menuItem,event){var node=menuItem.ownerCt.contextNode;if(!node||!node.layer){return;}
421var layer=node.layer;var zoomExtent;if(this.hasMaxExtent){zoomExtent=layer.maxExtent;}else{zoomExtent=layer.getDataExtent();}
422if(!zoomExtent){Ext.Msg.alert(__('Warning'),__('Sorry, no data-extent is available for this Layer'));return;}
423layer.map.zoomToExtent(zoomExtent);},isApplicable:function(node){this.hasMaxExtent=node.layer.maxExtent&&!node.layer.maxExtent.equals(node.layer.map.maxExtent);return node.layer.getDataExtent()||this.hasMaxExtent;}});Ext.reg('hr_layernodemenuzoomextent',Heron.widgets.LayerNodeMenuItem.ZoomExtent);Heron.widgets.LayerNodeMenuItem.LayerInfo=Ext.extend(Heron.widgets.LayerNodeMenuItem,{text:__('Get Layer information'),iconCls:"icon-information",initComponent:function(){Heron.widgets.LayerNodeMenuItem.LayerInfo.superclass.initComponent.call(this);},handler:function(menuItem,event){var node=menuItem.ownerCt.contextNode;if(!node||!node.layer){return;}
424var layer=node.layer;var layerType=layer.CLASS_NAME.split(".").pop();var isVector=layerType=='Vector';var isWFS=layer.protocol&&layer.protocol.CLASS_NAME.indexOf('WFS')>0;layerType=isWFS?'Vector (WFS)':layerType;var tiled=layer.singleTile||isVector?'No':'Yes';var hasWFS=layer.metadata.wfs||isWFS?'Yes':'No';var hasFeatureInfo=isVector||layer.featureInfoFormat?'Yes':'No';Ext.MessageBox.show({title:String.format('Info for Layer "{0}"',layer.name),msg:String.format('Placeholder: should become more extensive with infos, metadata, etc.!<br>'+"<br>Name: {0}"+"<br>Type: {1}"+"<br>Tiled: {2}"+"<br>Has feature info: {3}"+"<br>Has WFS: {4}",layer.name,layerType,tiled,hasFeatureInfo,hasWFS),buttons:Ext.Msg.OK,fn:function(btn){if(btn=='ok'){}},icon:Ext.MessageBox.INFO,maxWidth:300});}});Ext.reg('hr_layernodemenulayerinfo',Heron.widgets.LayerNodeMenuItem.LayerInfo);Heron.widgets.LayerNodeMenuItem.OpacitySlider=Ext.extend(Heron.widgets.LayerNodeMenuItem,{text:__('Change Layer opacity'),iconCls:'icon-opacity',initComponent:function(){Heron.widgets.LayerNodeMenuItem.OpacitySlider.superclass.initComponent.call(this);},handler:function(menuItem,event){var node=menuItem.ownerCt.contextNode;if(!node||!node.layer){return;}
425var layer=node.layer;var cmp=Ext.getCmp('WinOpacity-'+layer.id);var xy=event.getXY();xy[0]=xy[0]+40;xy[1]=xy[1]+0;if(!cmp){cmp=new Ext.Window({title:__('Opacity'),id:'WinOpacity-'+layer.id,x:xy[0],y:xy[1],width:200,resizable:false,constrain:true,bodyStyle:'padding:2px 4px',closeAction:'hide',listeners:{hide:function(){cmp.x=xy[0];cmp.y=xy[1];},show:function(){cmp.show();cmp.focus();}},items:[{xtype:'label',text:layer.name,height:20},{xtype:"gx_opacityslider",showTitle:false,plugins:new GeoExt.LayerOpacitySliderTip(),vertical:false,inverse:false,aggressive:false,layer:layer}]});cmp.show();}else{if(cmp.isVisible()){cmp.hide();}else{cmp.setPosition(xy[0],xy[1]);cmp.show();cmp.focus();}}}});Ext.reg('hr_layernodemenuopacityslider',Heron.widgets.LayerNodeMe
425nuItem.OpacitySlider);Ext.namespace("Heron.widgets");Heron.widgets.LayerNodeContextMenu=Ext.extend(Ext.menu.Menu,{listeners:{beforeshow:function(cm){var node=cm.contextNode;cm.items.each(function(item){item.setDisabled(!item.isApplicable(node));})},scope:this},initComponent:function(){this.initialConfig=this.items?this.items:[{xtype:'hr_layernodemenulayerinfo'},{xtype:'hr_layernodemenuzoomextent'},{xtype:'hr_layernodemenuopacityslider'},{xtype:'hr_layernodemenustyle'}];this.items=undefined;Heron.widgets.LayerNodeContextMenu.superclass.initComponent.call(this);}});Ext.reg('hr_layernodecontextmenu',Heron.widgets.LayerNodeContextMenu);Ext.namespace("Heron.widgets");Heron.widgets.GridCellRenderer=(function(){var instance={substituteAttrValues:function(template,options,record){if(!options.attrNames){options.attrNames=new Array();var inAttrName=false;var attrName='';for(var i=0;i<template.length;i++){var s=template.charAt(i);if(s=='{'){inAttrName=true;attrName='';}else if(s=='}'){options.attrNames.push(attrName)
426inAttrName=false;}else if(inAttrName){attrName+=s;}}}
427var result=template;for(var j=0;j<options.attrNames.length;j++){var name=options.attrNames[j];var value=record.data[name];if(!value){value='';}
428var valueTemplate='{'+name+'}';result=result.replace(valueTemplate,value);}
429return result;},directLink:function(value,metaData,record,rowIndex,colIndex,store){if(!this.options){return value;}
430var options=this.options;var url=options.url;if(!url){return value;}
431url=Heron.widgets.GridCellRenderer.substituteAttrValues(url,options,record);var result='<a href="'+url+'" target="{target}">'+value+'</a>';var target=options.target?options.target:'_new';var targetTemplate='{target}';return result.replace(targetTemplate,target);},browserPopupLink:function(value,metaData,record,rowIndex,colIndex,store){if(!this.options){return value;}
432var options=this.options;var templateURL=options.url;if(!templateURL){return value;}
433var BrowserParam='\''+(options.winName?options.winName:'herongridcellpopup')+'\''
434+', '+(options.bReopen?options.bReopen:false)
435+', \''+(Heron.widgets.GridCellRenderer.substituteAttrValues(templateURL,options,record))+'\''
436+', '+(options.hasMenubar?options.hasMenubar:false)
437+', '+(options.hasToolbar?options.hasToolbar:false)
438+', '+(options.hasAddressbar?options.hasAddressbar:false)
439+', '+(options.hasStatusbar?options.hasStatusbar:false)
440+', '+(options.hasScrollbars?options.hasScrollbars:false)
441+', '+(options.isResizable?options.isResizable:false)
442+', '+(options.hasPos?options.hasPos:false)
443+', '+(options.xPos?options.xPos:0)
444+', '+(options.yPos?options.yPos:0)
445+', '+(options.hasSize?options.hasSize:false)
446+', '+(options.wSize?options.wSize:200)
447+', '+(options.hSize?options.hSize:100);return(options.attrPreTxt?options.attrPreTxt:"")+'<a href="#" onclick="'+'Heron.Utils.openBrowserWindow('+BrowserParam+'); return false">'+value+'</a>';},valueSubstitutor:function(value,metaData,record,rowIndex,colIndex,store){if(!this.options){return value;}
448var options=this.options;var template=options.template;if(!template){return value;}
449return Heron.widgets.GridCellRenderer.substituteAttrValues(template,options,record);}};return(instance);})();Ext.namespace("Heron.widgets");var ActiveLayerNodeUI=Ext.extend(GeoExt.tree.LayerNodeUI,new GeoExt.tree.TreeNodeUIEventMixin());Heron.widgets.ActiveLayerNode=Ext.extend(GeoExt.tree.LayerNode,{render:function(bulkRender){var layer=this.layer instanceof OpenLayers.Layer&&this.layer;if(layer&&this.attributes&&this.attributes.component&&this.attributes.component.xtype=="gx_opacityslider"){this.attributes.component.layer=layer;if(layer.opacity>=1.0){layer.setOpacity(1.0);}
450else if(layer.opacity<0.0){layer.setOpacity(0.0);}
451this.attributes.component.value=parseInt(layer.opacity*100);}
452Heron.widgets.ActiveLayerNode.superclass.renderX.call(this,bulkRender);if(layer&&this.attributes&&this.attributes.component&&this.attributes.component.xtype=="gx_opacityslider"){if(layer.opacity>=1.0){layer.setOpacity(0.999);layer.setOpacity(1.0);}
453else if(layer.opacity>=0.001){layer.setOpacity(layer.opacity-0.001);layer.setOpacity(layer.opacity+0.001);}else{layer.setOpacity(0.001);layer.setOpacity(0.0);}
454this.attributes.component.value=parseInt(layer.opacity*100);}}});Ext.tree.TreePanel.nodeTypes.hr_activelayer=Heron.widgets.ActiveLayerNode;Heron.widgets.ActiveLayersPanel=Ext.extend(Ext.tree.TreePanel,{title:__('Active Layers'),contextMenu:null,applyStandardNodeOpts:function(opts,layer){if(opts.component){opts.c
454omponent.layer=layer;}
455opts.layerId=layer.id;},initComponent:function(){var self=this;var options={title:this.title,autoScroll:true,enableDD:true,plugins:[{ptype:"gx_treenodecomponent"}],root:{nodeType:"gx_layercontainer",text:__('Layers'),loader:{applyLoader:false,baseAttrs:{uiProvider:ActiveLayerNodeUI,iconCls:'gx-activelayer-drag-icon'},createNode:function(attr){return self.createNode(self,{layer:attr.layer});},filter:function(record){var layer=record.getLayer();return layer.getVisibility()&&layer.displayInLayerSwitcher;}}},rootVisible:false,lines:false,listeners:{contextmenu:function(node,e){node.select();var cm=this.contextMenu;if(cm){cm.contextNode=node;cm.showAt(e.getXY());}},scope:this}};if(this.contextMenu){var cmArgs=this.contextMenu instanceof Array?{items:this.contextMenu}:{};this.contextMenu=new Heron.widgets.LayerNodeContextMenu(cmArgs);}
456Ext.apply(this,options);Heron.widgets.ActiveLayersPanel.superclass.initComponent.call(this);this.addListener("afterrender",this.onAfterRender);this.addListener("beforedblclick",this.onBeforeDblClick);this.addListener("beforenodedrop",this.onBeforeNodeDrop);},createNode:function(self,attr){if(self.hropts){Ext.apply(attr,self.hropts);}else{Ext.apply(attr,{});}
457self.applyStandardNodeOpts(attr,attr.layer);attr.uiProvider=ActiveLayerNodeUI;attr.nodeType="hr_activelayer";attr.iconCls='gx-activelayer-drag-icon';return GeoExt.tree.LayerLoader.prototype.createNode.call(self,attr);},onBeforeDblClick:function(node,evt){return false;},onBeforeNodeDrop:function(dropEvt){if(dropEvt){switch(dropEvt.point){case"above":return true;break;case"below":var layer=dropEvt.target.layer;if(!layer.isBaseLayer){return true;}
458break;}}
459return false;},onAfterRender:function(){var self=this;var map=Heron.App.getMap();map.events.register('changelayer',null,function(evt){var layer=evt.layer;var rootNode=self.getRootNode();var layerNode=rootNode.findChild('layerId',evt.layer.id);if(evt.property==="visibility"){if(evt.layer.getVisibility()&&!layerNode){var newNode=self.createNode(self,{layer:layer});var newLayerId=layer.map.getLayerIndex(layer);if(layer.isBaseLayer){var bottomLayer;var bottomLayerId;if(rootNode.lastChild){bottomLayer=rootNode.lastChild.layer;if(bottomLayer){bottomLayerId=bottomLayer.map.getLayerIndex(bottomLayer);}}
460rootNode.appendChild(newNode);if(bottomLayer){if(newLayerId>bottomLayerId){layer.map.raiseLayer(layer,bottomLayerId-newLayerId);}}}else{var topLayer;var topLayerId;if(rootNode.firstChild){topLayer=rootNode.firstChild.layer;if(topLayer){topLayerId=topLayer.map.getLayerIndex(topLayer);}}
461rootNode.insertBefore(newNode,rootNode.firstChild);if(topLayer){if(topLayerId>newLayerId){layer.map.raiseLayer(layer,topLayerId-newLayerId);}}}
462rootNode.reload();}else if(!evt.layer.getVisibility()&&layerNode){layerNode.un("move",self.onChildMove,self);layerNode.remove();}}});},onListenerDoLayout:function(node){if(node&&node.hropts&&node.hropts.component&&node.hropts.component.xtype=="gx_opacityslider"){var rootNode=node.getRootNode();rootNode.cascade(function(n){if(n.layer){n.component.setValue(parseInt(n.layer.opacity*100));n.component.syncThumb();}});rootNode.reload();node.doLayout();}},listeners:{activate:function(node){this.onListenerDoLayout(this);},expand:function(node){this.onListenerDoLayout(this);}}});Ext.reg('hr_activelayerspanel',Heron.widgets.ActiveLayersPanel);Ext.namespace("Heron.widgets");var ActiveThemeNodeUI=Ext.extend(GeoExt.tree.LayerNodeUI,new GeoExt.tree.TreeNodeUIEventMixin());Heron.widgets.ActiveThemeNode=Ext.extend(GeoExt.tree.LayerNode,{render:function(bulkRender){var layer=this.layer instanceof OpenLayers.Layer&&this.layer;Heron.widgets.ActiveThemeNode.superclass.renderX.call(this,bulkRender);}});Ext.tree.TreePanel.nodeTypes.hr_activetheme=Heron.widgets.ActiveThemeNode;Heron.widgets.ActiveThemesPanel=Ext.extend(Ext.tree.TreePanel,{title:__('Active Themes'),qtip_up:__('Move up'),qtip_down:__('Move down'),qtip_opacity:__('Opacity'),qtip_remove:__('Remove layer from list'),qtip_tools:__('Tools'),contextMenu:null,applyStandardNodeOpts:function(opts,layer){if(opts.component){opts.c
462omponent.layer=layer;}
463opts.layerId=layer.id;},initComponent:function(){var self=this;var options={title:this.title,autoScroll:true,enableDD:true,plugins:[{ptype:"gx_treenodeactions",listeners:{action:this.onAction}}],root:{nodeType:"gx_layercontainer",loader:{applyLoader:false,baseAttrs:{radioGroup:"radiogroup",uiProvider:ActiveThemeNodeUI},createNode:function(attr){return self.createNode(self,{layer:attr.layer});},filter:function(record){var layer=record.getLayer();return layer.getVisibility()&&layer.displayInLayerSwitcher;}}},rootVisible:false,lines:false,listeners:{contextmenu:function(node,e){node.select();var cm=this.contextMenu;if(cm){cm.contextNode=node;cm.showAt(e.getXY());}},scope:this}};if(this.contextMenu){var cmArgs=this.contextMenu instanceof Array?{items:this.contextMenu}:{};this.contextMenu=new Heron.widgets.LayerNodeContextMenu(cmArgs);}
464Ext.apply(this,options);Heron.widgets.ActiveThemesPanel.superclass.initComponent.call(this);this.addListener("afterrender",this.onAfterRender);this.addListener("beforedblclick",this.onBeforeDblClick);this.addListener("beforenodedrop",this.onBeforeNodeDrop);},createNode:function(self,attr){if(self.hropts){Ext.apply(attr,self.hropts);}else{Ext.apply(attr,{showOpacity:false,showTools:false,showRemove:false});}
465self.applyStandardNodeOpts(attr,attr.layer);attr.uiProvider=ActiveThemeNodeUI;attr.nodeType="hr_activetheme";attr.iconCls='gx-activethemes-drag-icon';attr.actions=[{action:"up",qtip:this.qtip_up,update:function(el){var layer=this.layer,map=layer.map;if(map.getLayerIndex(layer)==map.layers.length-1){el.addClass('disabled');}else{el.removeClass('disabled');}}},{action:"down",qtip:this.qtip_down,update:function(el){var layer=this.layer,map=layer.map;if(map.getLayerIndex(layer)==1){el.addClass('disabled');}else{el.removeClass('disabled');}}},{action:"opacity",qtip:this.qtip_opacity,update:function(el){var layer=this.layer,map=layer.map;}},{action:"tools",qtip:this.qtip_tools,update:function(el){var layer=this.layer,map=layer.map;}},{action:"remove",qtip:this.qtip_remove}];attr.actionsNum=attr.actions.length-1;if(!self.hropts.showRemove){attr.actions.remove(attr.actions[attr.actionsNum]);}
466attr.actionsNum=attr.actionsNum-1;if(!self.hropts.showTools){attr.actions.remove(attr.actions[attr.actionsNum]);}
467attr.actionsNum=attr.actionsNum-1;if(!self.hropts.showOpacity){attr.actions.remove(attr.actions[attr.actionsNum]);}
468attr.actionsNum=attr.actionsNum-1;return GeoExt.tree.LayerLoader.prototype.createNode.call(self,attr);},onBeforeDblClick:function(node,evt){return false;},onBeforeNodeDrop:function(dropEvt){if(dropEvt){switch(dropEvt.point){case"above":return true;break;case"below":var layer=dropEvt.target.layer;if(!layer.isBaseLayer){return true;}
469break;}}
470return false;},onAction:function(node,action,evt){var layer=node.layer;var actLayerId=layer.map.getLayerIndex(layer);switch(action){case"up":if(!layer.isBaseLayer){var prevNode=node.previousSibling;if(prevNode){var prevLayer=prevNode.layer;var prevLayerId=prevLayer.map.getLayerIndex(prevLayer);if(prevLayerId>actLayerId){layer.map.raiseLayer(layer,prevLayerId-actLayerId);}}}
471break;case"down":if(!layer.isBaseLayer){var nextNode=node.nextSibling;if(nextNode){var nextLayer=nextNode.layer;var nextLayerId=nextLayer.map.getLayerIndex(nextLayer);if(nextLayerId<actLayerId){if(!nextLayer.isBaseLayer){layer.map.raiseLayer(layer,nextLayerId-actLayerId);}}}}
472break;case"remove":if(!layer.isBaseLayer){Ext.MessageBox.getDialog().defaultButton=2;Ext.MessageBox.show({title:String.format(__('Removing')+' "{0}"',layer.name),msg:String.format(__('Are you sure you want to remove the layer from your list of layers?'),'<i><b>'+layer.name+'</b></i>'),buttons:Ext.Msg.YESNO,fn:function(btn){if(btn=='yes'){layer.setVisibility(false);layer.destroy();}},scope:this,icon:Ext.MessageBox.QUESTION,maxWidth:300});}else{Ext.MessageBox.show({title:String.format(__('Removing')+' "{0}"',layer.name),msg:String.format(__('You are not allowed to remove the baselayer from your list of layers!'),'<i><b>'+layer.name+'</b></i>'),buttons:Ext.Msg.OK,fn:function(btn){if(btn=='ok'){}}
472,icon:Ext.MessageBox.ERROR,maxWidth:300});}
473break;case"opacity":var cmp=Ext.getCmp('WinOpacity-'+layer.id);var xy=evt.getXY();xy[0]=xy[0]+40;xy[1]=xy[1]+0;if(!cmp){cmp=new Ext.Window({title:__('Opacity'),id:'WinOpacity-'+layer.id,x:xy[0],y:xy[1],width:200,resizable:false,constrain:true,bodyStyle:'padding:2px 4px',closeAction:'hide',listeners:{hide:function(){cmp.x=xy[0];cmp.y=xy[1];},show:function(){cmp.show();cmp.focus();}},items:[{xtype:'label',text:layer.name,height:20},{xtype:"gx_opacityslider",showTitle:false,plugins:new GeoExt.LayerOpacitySliderTip(),vertical:false,inverse:false,aggressive:false,layer:layer}]});cmp.show();}else{if(cmp.isVisible()){cmp.hide();}else{cmp.setPosition(xy[0],xy[1]);cmp.show();cmp.focus();}}
474break;case"tools":var id=layer.map.getLayerIndex(layer);var num_id=layer.map.getNumLayers();Ext.MessageBox.show({title:String.format('Tools "{0}"',layer.name),msg:String.format('Here should be a form for "{0}" containing'+' infos, etc.!<br>'+"<br>Layer: "+node+"<br>"+layer.name+"<br>"+layer.id+"<br>OL-LayerId: "+id+" ("+num_id+")",'<i><b>'+layer.name+'</b></i>'),buttons:Ext.Msg.OK,fn:function(btn){if(btn=='ok'){}},icon:Ext.MessageBox.INFO,maxWidth:300});break;}},onAfterRender:function(){var self=this;var map=Heron.App.getMap();map.events.register('changelayer',null,function(evt){var layer=evt.layer;var rootNode=self.getRootNode();var layerNode=rootNode.findChild('layerId',evt.layer.id);if(evt.property==="visibility"){if(evt.layer.getVisibility()&&!layerNode){var newNode=self.createNode(self,{layer:layer});var newLayerId=layer.map.getLayerIndex(layer);if(layer.isBaseLayer){var bottomLayer;var bottomLayerId;if(rootNode.lastChild){bottomLayer=rootNode.lastChild.layer;if(bottomLayer){bottomLayerId=bottomLayer.map.getLayerIndex(bottomLayer);}}
475rootNode.appendChild(newNode);if(bottomLayer){if(newLayerId>bottomLayerId){layer.map.raiseLayer(layer,bottomLayerId-newLayerId);}}}else{var topLayer;var topLayerId;if(rootNode.firstChild){topLayer=rootNode.firstChild.layer;if(topLayer){topLayerId=topLayer.map.getLayerIndex(topLayer);}}
476rootNode.insertBefore(newNode,rootNode.firstChild);if(topLayer){if(topLayerId>newLayerId){layer.map.raiseLayer(layer,topLayerId-newLayerId);}}}
477rootNode.reload();}else if(!evt.layer.getVisibility()&&layerNode){var opacityWin=Ext.getCmp('WinOpacity-'+layer.id);if(opacityWin){opacityWin.hide();}
478layerNode.un("move",self.onChildMove,self);layerNode.remove();}}});}});Ext.reg('hr_activethemespanel',Heron.widgets.ActiveThemesPanel);Ext.namespace("Heron.widgets");Heron.widgets.CapabilitiesTreePanel=Ext.extend(Ext.tree.TreePanel,{initComponent:function(){var layerOptions=Ext.apply({buffer:0,singleTile:true,ratio:1},this.hropts.layerOptions);var layerParams=Ext.apply({'TRANSPARENT':'TRUE'},this.hropts.layerParams);var root=new Ext.tree.AsyncTreeNode({text:this.hropts.text,expanded:this.hropts.preload,loader:new GeoExt.tree.WMSCapabilitiesLoader({url:this.hropts.url,layerOptions:layerOptions,layerParams:layerParams,createNode:function(attr){attr.checked=attr.leaf?false:undefined;return GeoExt.tree.WMSCapabilitiesLoader.prototype.createNode.apply(this,[attr]);}})});this.options={root:root,listeners:{'checkchange':function(node,checked){var map=Heron.App.getMap();if(!map){return;}
479var layer=node.attributes.layer;if(checked===true){map.addLayer(layer);}else{map.removeLayer(layer);}}}};Ext.apply(this,this.options);Heron.widgets.CapabilitiesTreePanel.superclass.initComponent.call(this);}});Ext.reg('hr_capabilitiestreepanel',Heron.widgets.CapabilitiesTreePanel);Ext.namespace("GeoExt.tree");GeoExt.tree.CapabilitiesViewLoader=function(config){Ext.apply(this,config);GeoExt.tree.CapabilitiesViewLoader.superclass.constructor.call(this);};Ext.extend(GeoExt.tree.CapabilitiesViewLoader,Ext.tree.TreeLoader,{url:null,requestMethod:'GET',getParams:function(node){return{'service':'WMS','request':'GetCapabilities','format':'text/XML'};},processResponse:function(response,node,callback,scope){var responseXML;if(!response.responseXML){if(window.ActiveXObject){var doc=new ActiveXObject('Microsoft.XMLDOM');doc.async='false';doc.loadXML(response.responseText);responseXML=doc;}else{responseXML=new DOMParser().parseFromString(response.responseText,'text/xml');}}else{responseXML=response.responseXML;}
480node.appendChild(this.processLayer(responseXML,false));
480if(typeof callback=="function"){callback.apply(scope||node,[node]);}},processLayer:function(XmlEl,prevLink){if(XmlEl==null){var result=new Ext.tree.TreeNode({text:"Error getting data."});return result;}
481var t=((XmlEl.nodeType==3)?XmlEl.nodeValue:XmlEl.tagName);var link=false;if(prevLink){t="<a onclick='window.open(\""+t+"\")'>"+t+"</a>";}
482if(XmlEl.tagName=="inspire_common:URL"||XmlEl.tagName=="xlink:href"||XmlEl.tagName=="href"){link=true;}
483if(t==undefined||t.replace(/\s/g,'').length==0){if(XmlEl.childNodes.length==0){return null;}
484t=this.url;}
485var result=new Ext.tree.TreeNode({text:t});var self=this;Ext.each(XmlEl.attributes,function(a){var text=a.nodeValue;if(a.nodeName=="inspire_common:URL"||a.nodeName=="xlink:href"||a.nodeName=="href"){text="<a onclick='window.open(\""+text+"\")'>"+text
486+"</a>";}
487var c=new Ext.tree.TreeNode({text:a.nodeName});c.appendChild(new Ext.tree.TreeNode({text:text}));result.appendChild(c);});Ext.each(XmlEl.childNodes,function(el){if((el.nodeType==1)||(el.nodeType==3)){var c=self.processLayer(el,link);if(c){result.appendChild(c);}}});return result;}});Ext.namespace("Heron.widgets");Heron.widgets.CapabilitiesViewPanel=Ext.extend(Ext.tree.TreePanel,{eventRegistered:false,autoScroll:true,containerScroll:true,initComponent:function(){this.initTree();Heron.widgets.CapabilitiesViewPanel.superclass.initComponent.call(this);this.addListener("afterrender",this.onAfterRender);},onAfterRender:function(){var map=Heron.App.getMap();if(map==undefined||map==null){return;}
488this.updateViewTree();map.events.register("changelayer",this,this.updateViewTree);},updateViewTree:function(){this.addLayers2Tree();if(this.doLayout){this.doLayout();}},addedUrl:[],initTree:function(){var root=new Ext.tree.TreeNode({text:"WMS Capabilities",expanded:true});this.options={root:root,listeners:{'checkchange':function(node,checked){}}};Ext.apply(this,this.options);},addLayers2Tree:function(){var map=Heron.App.getMap();if(map!==undefined){for(var i=0;i<map.layers.length;i++){var layer=map.layers[i];if(!(layer instanceof OpenLayers.Layer.WMS)||this.addedUrl.indexOf(layer.url)!=-1){continue;}
489this.addedUrl.push(layer.url);var url=layer.url;this.root.appendChild(new Ext.tree.AsyncTreeNode({text:this.getPath(layer.url),expanded:this.hropts.preload,loader:new GeoExt.tree.CapabilitiesViewLoader({url:url})}));}
490this.doLayout();}},getPath:function(url){var reg=/.+?\:\/\/.+?(\/.+?)(?:#|\?|$)/;return reg.exec(url)[1];}});Ext.reg('hr_capabilitiesviewpanel',Heron.widgets.CapabilitiesViewPanel);Ext.namespace("Heron.widgets");Heron.widgets.CascadingTreeNode=Ext.extend(Ext.tree.AsyncTreeNode,{checked:false,constructor:function(){if(arguments[0].checked===undefined){arguments[0].checked=this.checked;}
491Heron.widgets.CascadingTreeNode.superclass.constructor.apply(this,arguments);this.on({"append":this.onAppend,"remove":this.onRemove,"checkchange":this.onCheckChange,scope:this});},onAppend:function(panel,self,child){child.on({"checkchange":this.onChildCheckChange,scope:this});},onRemove:function(panel,self,child){child.un({"checkchange":this.onChildCheckChange,scope:this});},onChildCheckChange:function(child,checked){if(this.childCheckChange){return;}
492var childrenTotal=0,childrenChecked=0;var self=this;this.cascade(function(child){if(child==self||(child.hasChildNodes()&&!child.attributes.xtype=='hr_cascader')){return;}
493childrenTotal++;if(child.ui.isChecked()){childrenChecked++;}},null,null);this.childCheckChange=true;this.ui.toggleCheck(childrenTotal==childrenChecked);this.childCheckChange=false;},onCheckChange:function(node,checked){node.cascade(function(child){if(child==node||node.childCheckChange){return;}
494if(child.ui.rendered){child.ui.toggleCheck(checked);}else{child.attributes.checked=checked;}},null,null);}});Ext.tree.TreePanel.nodeTypes.hr_cascader=Heron.widgets.CascadingTreeNode;Ext.namespace("Heron.widgets.search");Heron.widgets.search.CoordSearchPanel=Ext.extend(Ext.form.FormPanel,{title:__('Go to coordinates'),titleDescription:null,titleDescriptionStyle:null,bodyBaseCls:'x-panel',bodyItemCls:null,bodyCls:null,fieldMaxWidth:150,fieldLabelWidth:'',fieldStyle:null,fieldLabelStyle:null,layerName:__('Location'),onProjectionIndex:0,onZoomLevel:-1,showProjection:false,showZoom:false,showAddMarkers:false,checkAddMarkers:false,showHideMarkers:false,checkHideMarkers:false,showResultMarker:false,fieldResultMarkerStyle:null,fieldResultMarkerText:__('Marker position: '),fieldResultMarkerSeparator:' , ',fieldResultMarkerPrecision:2,removeMarkersOnClose
494:false,showRemoveMarkersBtn:false,buttonAlign:'left',hropts:null,initComponent:function(){var self=this;var map=Heron.App.getMap();this.arrProj=new Ext.data.ArrayStore({fields:[{name:'id'},{name:'idLast'},{name:'idX'},{name:'idY'},{name:'idB'},{name:'projEpsg'},{name:'projDesc'},{name:'fieldLabelX'},{name:'fieldLabelY'},{name:'fieldEmptyTextX'},{name:'fieldEmptyTextY'},{name:'fieldMinX'},{name:'fieldMinY'},{name:'fieldMaxX'},{name:'fieldMaxY'},{name:'fieldDecPrecision'},{name:'iconWidth'},{name:'iconHeight'},{name:'localIconFile'},{name:'iconUrl'},{name:'iconOL'}]});var idX=Ext.id();var idY=Ext.id();var idB=Ext.id();var contexts=this.hropts;if(contexts&&typeof(contexts)!=="undefined"){for(var i=0;i<contexts.length;i++){var recArrPrj=this.arrProj.recordType;var recSrc=new recArrPrj({id:i,idLast:this.onProjectionIndex,idX:idX,idY:idY,idB:idB,projEpsg:contexts[i].projEpsg,projDesc:contexts[i].projDesc?contexts[i].projDesc:(contexts[i].projEpsg?contexts[i].projEpsg:__('Map system')),fieldLabelX:contexts[i].fieldLabelX?contexts[i].fieldLabelX:__('X'),fieldLabelY:contexts[i].fieldLabelY?contexts[i].fieldLabelY:__('Y'),fieldEmptyTextX:contexts[i].fieldEmptyTextX?contexts[i].fieldEmptyTextX:__('Enter X-coordinate...'),fieldEmptyTextY:contexts[i].fieldEmptyTextY?contexts[i].fieldEmptyTextY:__('Enter Y-coordinate...'),fieldMinX:contexts[i].fieldMinX?contexts[i].fieldMinX:null,fieldMinY:contexts[i].fieldMinY?contexts[i].fieldMinY:null,fieldMaxX:contexts[i].fieldMaxX?contexts[i].fieldMaxX:null,fieldMaxY:contexts[i].fieldMaxY?contexts[i].fieldMaxY:null,fieldDecPrecision:contexts[i].fieldDecPrecision?contexts[i].fieldDecPrecision:2,iconWidth:contexts[i].iconWidth?contexts[i].iconWidth:32,iconHeight:contexts[i].iconHeight?contexts[i].iconHeight:32,localIconFile:contexts[i].localIconFile?contexts[i].localIconFile:'redpin.png',iconUrl:contexts[i].iconUrl?contexts[i].iconUrl:null,iconOL:null});this.arrProj.add(recSrc);}}else{var recArrPrj=this.arrProj.recordType;var recSrc=new recArrPrj({id:0,idLast:0,idX:idX,idY:idY,idB:idB,projEpsg:null,projDesc:__('Map system'),fieldLabelX:__('X'),fieldLabelY:__('Y'),fieldEmptyTextX:__('Enter X-coordinate...'),fieldEmptyTextY:__('Enter Y-coordinate...'),fieldMinX:null,fieldMinY:null,fieldMaxX:null,fieldMaxY:null,fieldDecPrecision:2,iconWidth:32,iconHeight:32,localIconFile:'redpin.png',iconUrl:null,iconOL:null});this.arrProj.add(recSrc);}
495this.pCombo=new Ext.form.ComboBox({fieldLabel:__('Input system'),emptyText:__('Choose input system...'),tooltip:__('Input system'),anchor:'100%',boxMaxWidth:this.fieldMaxWidth,itemCls:this.bodyItemCls,cls:this.bodyCls,style:this.fieldStyle,labelStyle:this.fieldLabelStyle,editable:false,triggerAction:'all',mode:'local',store:this.arrProj,displayField:'projDesc',valueField:'id',value:this.onProjectionIndex,hidden:((!this.showProjection)||((this.arrProj.data.length<=1)&&(!this.arrProj.getAt(0).data.projEpsg)))?true:false,listeners:{render:function(c){c.el.set({qtip:this.tooltip});c.trigger.set({qtip:this.tooltip});},select:function(combo,record,index){var idLast=combo.store.data.items[index].data.idLast;if(idLast!=index){var p=combo.store.data.items[index].data;var pX=Ext.getCmp(p.idX);var pY=Ext.getCmp(p.idY);var pB=Ext.getCmp(p.idB);if(record.data.fieldLabelX){pX.label.update(record.data.fieldLabelX);}
496if(record.data.fieldEmptyTextX){Ext.getCmp(idX).emptyText=record.data.fieldEmptyTextX;}
497pX.decimalPrecision=record.data.fieldDecPrecision;pX.setValue('');pX.show();if(record.data.fieldLabelY){pY.label.update(record.data.fieldLabelY);}
498if(record.data.fieldEmptyTextY){Ext.getCmp(idY).emptyText=record.data.fieldEmptyTextY;}
499pY.decimalPrecision=record.data.fieldDecPrecision;pY.setValue('');pY.show();pB.disable();pB.show();this.rLabel.setText(this.fieldResultMarkerText);for(var i=0;i<combo.store.data.length;i++){combo.store.data.items[i].data.idLast=index;}}},scope:this}});this.tLabel=new Ext.form.Label({html:this.titleDescription,style:this.titleDescriptionStyle});this.xField=new Ext.form.NumberField({id:idX,fieldLabel:this.arrProj.getAt(this.onProjectionIndex).data.fieldLabelX,emptyText:this.arrProj.getAt(this.onProjectionIndex).data.fieldEmptyTextX,anchor:'100%',boxMaxWidth:this.fieldMaxWidth,itemCls:this.bodyItemCls,cls:this.bodyCls,style:this.fieldStyle,labelStyle:this.fieldLabelStyle,decimalPrecision:this.arrProj.getAt(this.onProjectionIndex).data.fieldDecPrecision,enableKeyEvents:true,listeners:{keyup:function(numberfield,ev){this.onNumberKeyUp(numberfield,ev);},keydown:function(numberfield,ev){this.rLabel.setText(this.fieldResultMarkerText);},scope:this}});this.yField=new Ext.form.NumberField({id:idY,fieldLabel:this.arrProj.getAt(this.onProjectionIndex).data.fieldLabelY,emptyText:this.arrProj.getAt(this.onProjectionIndex).data.fieldEmptyTextY,anchor:'100%',boxMaxWidth:this.fieldMaxWidth,itemCls:this.bodyItemCls,cls:this.bodyCls,style:this.fieldStyle,labelStyle:this.fieldLabelStyle,decimalPrecision:this.arrProj.getAt(this.onProjectionIndex).data.fieldDecPrecision,enableKeyEvents:true,listeners:{keyup:function(numberfield,ev){this.onNumberKeyUp(numberfield,ev);},keydown:function(numberfield,ev){this.rLabel.setText(this.fieldResultMarkerText);},scope:this}});this.storeZoom=new GeoExt.data.ScaleStore({map:map});this.arrZoom=new Ext.data.ArrayStore({fields:[{name:'zoom',type:'string'},{name:'scale',type:'string'}],data:[['-1',__('no zoom')]]});for(var i=0;i<this.storeZoom.getCount();i++){var recArrZoom=this.arrZoom.recordType;var rec=new recArrZoom({zoom:this.storeZoom.getAt(i).data.level,scale:'1 : '+parseInt(this.storeZoom.getAt(i).data.scale+0.5)});this.arrZoom.add(rec);}
500this.sCombo=new Ext.form.ComboBox({fieldLabel:__('Zoom'),emptyText:__('Cho
500ose scale...'),tooltip:__('Scale'),anchor:'100%',boxMaxWidth:this.fieldMaxWidth,itemCls:this.bodyItemCls,cls:this.bodyCls,style:this.fieldStyle,labelStyle:this.fieldLabelStyle,editable:false,hidden:this.showZoom?false:true,triggerAction:'all',mode:'local',store:this.arrZoom,displayField:'scale',valueField:'zoom',value:(this.onZoomLevel<0)?-1:this.onZoomLevel,listeners:{render:function(c){c.el.set({qtip:this.tooltip});c.trigger.set({qtip:this.tooltip});}}});this.mCheckbox=new Ext.form.Checkbox({fieldLabel:__('Mode'),boxLabel:__('Remember locations'),anchor:'100%',boxMaxWidth:this.arrProj.getAt(0).data.fieldMaxWidth,itemCls:this.bodyItemCls,cls:this.bodyCls,labelStyle:this.fieldLabelStyle,checked:this.checkAddMarkers?true:false,hidden:this.showAddMarkers?false:true});this.cCheckbox=new Ext.form.Checkbox({fieldLabel:this.mCheckbox.hidden?__('Mode'):'',boxLabel:this.removeMarkersOnClose?__('Remove markers on close'):__('Hide markers on close'),anchor:'100%',boxMaxWidth:this.arrProj.getAt(0).data.fieldMaxWidth,itemCls:this.bodyItemCls,cls:this.bodyCls,labelStyle:this.fieldLabelStyle,checked:this.checkHideMarkers?true:false,hidden:this.showHideMarkers?false:true});this.rLabel=new Ext.form.Label({anchor:'100%',html:this.fieldResultMarkerText,itemCls:this.bodyItemCls,cls:this.bodyCls,style:this.fieldResultMarkerStyle,hidden:this.showResultMarker?false:true});this.rButton=new Ext.Button({text:__('Remove markers'),minWidth:90,autoHeight:true,flex:1,hidden:this.showRemoveMarkersBtn?false:true,handler:function(){self.removeMarkers(self);self.rLabel.setText(self.fieldResultMarkerText);}});this.gButton=new Ext.Button({id:idB,text:__('Go!'),align:'right',tooltip:__('Pan and zoom to location'),minWidth:90,autoHeight:true,disabled:true,flex:1,handler:function(){self.panAndZoom(self);}});this.items=[{layout:'form',border:false,baseCls:this.bodyBaseCls,labelWidth:this.fieldLabelWidth,padding:5,items:[self.tLabel,self.pCombo,self.xField,self.yField,self.sCombo,self.mCheckbox,self.cCheckbox,self.rLabel],buttonAlign:this.buttonAlign,buttons:[this.rButton,this.gButton]}];this.keys=[{key:[Ext.EventObject.ENTER],handler:function(){if(!self.gButton.disabled){self.panAndZoom(self);}}}];Heron.widgets.search.CoordSearchPanel.superclass.initComponent.call(this);this.addListener("afterrender",this.onPanelRendered,this);},onPanelRendered:function(){if(this.ownerCt){this.ownerCt.addListener("hide",this.onParentHide,this);this.ownerCt.addListener("show",this.onParentShow,this);}},onParentShow:function(){var map=Heron.App.getMap();var markerLayer=map.getLayersByName(this.layerName);if(markerLayer[0]){markerLayer[0].setVisibility(true);}},onParentHide:function(){if(this.cCheckbox.checked){if(this.removeMarkersOnClose){this.removeMarkers(this);}
501var map=Heron.App.getMap();var markerLayer=map.getLayersByName(this.layerName);if(markerLayer[0]){markerLayer[0].setVisibility(false);}}},onNumberKeyUp:function(numberfield,ev){var valueX=parseFloat(this.xField.getValue());var valueY=parseFloat(this.yField.getValue());var fieldMinX=this.arrProj.getAt(this.pCombo.getValue()).data.fieldMinX;var fieldMinY=this.arrProj.getAt(this.pCombo.getValue()).data.fieldMinY;var fieldMaxX=this.arrProj.getAt(this.pCombo.getValue()).data.fieldMaxX;var fieldMaxY=this.arrProj.getAt(this.pCombo.getValue()).data.fieldMaxY;if((!isNaN(valueX))&&(!isNaN(valueY))){if(fieldMinX&&fieldMinY&&fieldMaxX&&fieldMaxY){if(((valueX>=parseFloat(fieldMinX))&&(valueX<=parseFloat(fieldMaxX)))&&((valueY>=parseFloat(fieldMinY))&&(valueY<=parseFloat(fieldMaxY)))){this.gButton.enable();}else{this.gButton.disable();}}else{this.gButton.enable();}}
502else{this.gButton.disable();}},removeMarkers:function(self){var map=Heron.App.getMap();var markerLayer=map.getLayersByName(this.layerName);if(markerLayer[0]){markerLayer[0].clearMarkers();map.removeLayer(markerLayer[0]);}},panAndZoom:function(self){var map=Heron.App.getMap();var markerLayer=map.getLayersByName(this.layerName);if(markerLayer[0]){if(!self.mCheckbox.checked){markerLayer[0].clearMarkers();}}
503var x=self.xField.getValue();var y=self.yField.getValue();var zoom=(self.sCombo.value>=0)?self.sCombo.value:map.getZoom();var position=new OpenLayers.LonLat(x,y);var selectedEpsg=this.arrProj.getAt(self.pCombo.value).data.projE
503psg;if(selectedEpsg&&(selectedEpsg!=map.getProjection())){this.olProjection=null;this.olProjection=new OpenLayers.Projection(selectedEpsg);if(this.olProjection){position.transform(this.olProjection,map.getProjectionObject());}}
504map.setCenter(position,zoom);this.rLabel.setText(this.fieldResultMarkerText+position.lon.toFixed(this.fieldResultMarkerPrecision)+this.fieldResultMarkerSeparator+position.lat.toFixed(this.fieldResultMarkerPrecision));if(!markerLayer[0]){this.layer=new OpenLayers.Layer.Markers(this.layerName);map.addLayer(this.layer);markerLayer=map.getLayersByName(this.layerName);}
505if(!this.arrProj.getAt(self.pCombo.value).data.iconOL){var iconUrl=Heron.Utils.getImageLocation(this.arrProj.getAt(self.pCombo.value).data.localIconFile);var iconWidth=this.arrProj.getAt(self.pCombo.value).data.iconWidth;var iconHeight=this.arrProj.getAt(self.pCombo.value).data.iconHeight;var size=new OpenLayers.Size(iconWidth,iconHeight);var offset=new OpenLayers.Pixel(-(size.w/2),-size.h);this.arrProj.getAt(self.pCombo.value).data.iconOL=new OpenLayers.Icon(iconUrl,size,offset);}
506var marker=new OpenLayers.Marker(position,this.arrProj.getAt(self.pCombo.value).data.iconOL.clone());markerLayer[0].addMarker(marker);markerLayer[0].setVisibility(true);}});Ext.reg("hr_coordsearchpanel",Heron.widgets.search.CoordSearchPanel);Ext.namespace("Heron.widgets.search");Ext.namespace("Heron.utils");Heron.widgets.search.FeatureInfoPanel=Ext.extend(Ext.Panel,{title:__('Feature Info'),maxFeatures:5,displayPanels:['Table'],exportFormats:['CSV','XLS','GMLv2','GeoJSON','WellKnownText'],infoFormat:'application/vnd.ogc.gml',hover:false,drillDown:true,layer:"",discardStylesForDups:false,showTopToolbar:true,showGeometries:true,featureSelection:true,columnCapitalize:true,gridCellRenderers:null,gridColumns:null,autoConfigMaxSniff:40,hideColumns:[],columnFixedWidth:100,autoMaxWidth:300,autoMinWidth:45,pop:null,map:null,displayPanel:null,lastEvt:null,olControl:null,olControlWMTS:null,tb:null,noWMSFeatures:null,noWMTSFeatures:null,initComponent:function(){var self=this;Ext.apply(this,{layout:"fit"});this.display=this.displayFeatureInfo;Heron.widgets.search.FeatureInfoPanel.superclass.initComponent.call(this);this.map=Heron.App.getMap();if(!this.olControl){var controls=this.map.getControlsByClass("OpenLayers.Control.WMSGetFeatureInfo");if(controls&&controls.length>0){for(var index=0;index<controls.length;index++){if(!controls[index].popup){this.olControl=controls[index];this.olControl.infoFormat=this.infoFormat;this.olControl.maxFeatures=this.maxFeatures;this.olControl.hover=this.hover;this.olControl.drillDown=this.drillDown;break;}}}
507if(!this.olControl){this.olControl=new OpenLayers.Control.WMSGetFeatureInfo({maxFeatures:this.maxFeatures,queryVisible:true,infoFormat:this.infoFormat,hover:this.hover,drillDown:this.drillDown});this.map.addControl(this.olControl);}}
508this.olControl.events.register("getfeatureinfo",this,this.handleGetFeatureInfo);this.olControl.events.register("beforegetfeatureinfo",this,this.handleBeforeGetFeatureInfo);this.olControl.events.register("nogetfeatureinfo",this,this.handleNoGetFeatureInfo);controls=this.map.getControlsByClass("OpenLayers.Control.WMTSGetFeatureInfo");if(controls&&controls.length>0){for(var index=0;index<controls.length;index++){this.olControlWMTS=controls[0];if(!controls[index].popup){this.olControlWMTS=controls[index];this.olControlWMTS.infoFormat=this.infoFormat;this.olControlWMTS.maxFeatures=this.maxFeatures;this.olControlWMTS.hover=this.hover;this.olControlWMTS.drillDown=this.drillDown;break;}}}
509if(!this.olControlWMTS){this.olControlWMTS=new OpenLayers.Control.WMTSGetFeatureInfo({maxFeatures:this.maxFeatures,queryVisible:true,infoFormat:this.infoFormat,hover:this.hover,drillDown:this.drillDown});this.map.addControl(this.olControlWMTS);}
510this.olControlWMTS.events.register("getfeatureinfo",this,this.handleGetFeatureInfo);this.olControlWMTS.events.register("exception",this,this.handleNoGetFeatureInfo);this.addListener("afterrender",this.onPanelRendered,this);this.addListener("render",this.onPanelRender,this);this.addListener("show",this.onPanelShow,this);this.addListener("hide",this.onPanelHide,this);},onPanelRender:function(){this.mask=new Ext.LoadMask(this.body,{msg:__('Loading...')});},onPanelRendered:function(){if(this.ownerCt){this.ownerCt.addListener("hide",this.onPanelHide,this);this.ownerCt.addListener("show",this.onPanelShow,this);}},onPanelShow:function(){if(this.tabPanel){this.tabPanel.items.each(function(item){return item.showLayer?item.showLayer():true;},this);}},onPanelHide:function(){if(this.tabPanel){this.tabPanel.items.each(function(item){return item.hideLayer?item.hideLayer():true;},this);}},initPanel:function(){this.lastEvt=null;this.expand();if(this.tabPanel){this.tabPanel.items.each(function(item){this.tabPanel.remove(item);return item.cleanup?item.cleanup():true;},this);}
511if(this.displayPanel){this.remove(this.displayPanel);this.displayPanel=null;}
512this.displayOn=false;},handleBeforeGetFeatureInfo:function(evt){this.noWMSFeatures=false;this.noWMTSFeatures=false;
512if(evt.object!==this.olControl&&evt.object!==this.olControlWMTS){return;}
513this.olControl.layers=[];this.olControlWMTS.layers=[];this.olControl.url=null;this.olControl.drillDown=this.drillDown;this.olControlWMTS.url=null;this.olControlWMTS.drillDown=this.drillDown;var layer;if(this.layer){var layers=this.map.getLayersByName(this.layer);if(layers){layer=layers[0];if(layer instanceof OpenLayers.Layer.WMTS){this.olControlWMTS.layers.push(layer);}else{this.olControl.layers.push(layer);}}}
514if(this.olControl.layers.length===0&&this.olControlWMTS.layers.length===0){this.layerDups={};for(var index=0;index<this.map.layers.length;index++){layer=this.map.layers[index];if((layer instanceof OpenLayers.Layer.WMS===false&&layer instanceof OpenLayers.Layer.WMTS===false)||!layer.params||layer.queryable===false){continue;}
515if(layer.visibility&&(layer.featureInfoFormat||layer.params.INFO_FORMAT||layer.queryable)){if(!layer.params.INFO_FORMAT&&layer.featureInfoFormat){layer.params.INFO_FORMAT=layer.featureInfoFormat;}
516if(layer.params.CQL_FILTER){this.olControl.requestPerLayer=true;layer.params.vendorParams={CQL_FILTER:layer.params.CQL_FILTER};}
517if(this.layerDups[layer.params.LAYERS]&&!this.olControl.requestPerLayer){if(this.discardStylesForDups){var dupLayer=this.layerDups[layer.params.LAYERS];dupLayer.savedStyles=dupLayer.params.STYLES;dupLayer.params.STYLES="";}
518continue;}
519if(layer instanceof OpenLayers.Layer.WMTS){this.olControlWMTS.layers.push(layer);}else{this.olControl.layers.push(layer);}
520this.layerDups[layer.params.LAYERS]=layer;}}}
521this.initPanel();if(this.mask){this.mask.show();}
522this.fireEvent('beforefeatureinfo',evt);this.handleVectorFeatureInfo(evt.object.handler.evt);if(this.olControl.layers.length===0){this.noWMSFeatures=true;}
523if(this.olControlWMTS.layers.length===0){this.noWMTSFeatures=true;}
524if(this.noWMSFeatures&&this.noWMTSFeatures&&(this.features==null||this.features.length===0)){this.handleNoGetFeatureInfo();}},handleGetFeatureInfo:function(evt){var layers=this.olControl.layers;if(layers){for(var i=0,len=layers.length;i<len;i++){layers[i].params.vendorParams=null;}}
525if(this.discardStylesForDups){for(var layerName in this.layerDups){var layerDup=this.layerDups[layerName];if(layerDup.savedStyles){layerDup.params.STYLES=layerDup.savedStyles;layerDup.savedStyles=null;}}}
526if(evt&&evt.object!==this.olControl&&evt.object!==this.olControlWMTS){return;}
527if(this.noWMSFeatures&&this.noWMTSFeatures){return;}
528if(this.mask){this.mask.hide();}
529if(evt){this.lastEvt=evt;}
530if(!this.lastEvt){return;}
531this.displayFeatures(this.lastEvt);},handleVectorFeatureInfo:function(evt){this.vectorFeaturesFound=false;var screenX=Ext.isIE?Ext.EventObject.xy[0]:evt.clientX;var screenY=Ext.isIE?Ext.EventObject.xy[1]:evt.clientY;this.features=this.getFeaturesByXY(screenX,screenY);if(this.mask){this.mask.hide();}
532evt.features=this.features;if(evt.features&&evt.features.length>0){this.vectorFeaturesFound=true;this.displayFeatures(evt);}},handleNoGetFeatureInfo:function(evt){if(evt&&evt.object===this.olControl){this.noWMSFeatures=true;}
533if(evt&&evt.object===this.olControlWMTS){this.noWMTSFeatures=true;}
534if(!this.visibleVectorLayers&&(!evt||(this.noWMSFeatures&&this.noWMTSFeatures))){Ext.Msg.alert(__('Warning'),__('Feature Info unavailable (you may need to make some layers visible)'));}},getFeaturesByXY:function(x,y){this.visibleVectorLayers=false;var features=[],targets=[],layers=[];var layer,target,feature,i,len;for(i=this.map.layers.length-1;i>=0;--i){layer=this.map.layers[i];if(layer.div.style.display!=="none"){if(layer instanceof OpenLayers.Layer.Vector){target=document.elementFromPoint(x,y);while(target&&target._featureId){feature=layer.getFeatureById(target._featureId);if(feature){var featureClone=feature.clone();featureClone.type=layer.name;featureClone.layer=layer;features.push(featureClone);target.style.display="none";targets.push(target);target=document.elementFromPoint(x,y);this.visibleVectorLayers=true;}else{target=false;}}}
535layers.push(layer);layer.div.style.display="none";}}
536for(i=0,len=targets.length;i<len;++i){targets[i].style.display="";}
537for(i=layers.length-1;i>=0;--i){layers[i].div.style.display="block";}
538return features;},getFeatureType:function(feature){if(feature.gml&&feature.gml.featureType){return feature.gml.featureType;}
539if(feature.fid&&feature.fid.indexOf('undefined')<0){var featureType=/[^\.]*/.exec(feature.fid);return(featureType[0]!="null")?featureType[0]:null;}
540if(feature.type){return feature.type;}
541if(feature.attributes['_LAYERID_']){return feature.attributes['_LAYERID_'];}
542if(feature.attributes['DINO_DBA.MAP_SDE_GWS_WELL_W_HEADS_VW.DINO_NR']){return'TNO_DINO_WELLS';}
543if(feature.attributes['DINO_DBA.MAP_SDE_BRH_BOREHOLE_RD_VW.DINO_NR']){return'TNO_DINO_BOREHOLES';}
544return __('Unknown');},getFeatureTitle:function(feature,featureType){if(feature.layer){return feature.layer.name;}
545var featureTitle=feature.layer?feature.layer.name:featureType;var layers=this.map.layers;for(var l=0;l<layers.length;l++){var nextLayer=layers[l];if(!nextLayer.params||!nextLayer.visibility){continue;}
546if(featureType.toLowerCase()==/([^:]*$)/.exec(nextLayer.params.LAYERS)[0].toLowerCase()){featureTitle=nextLayer.name;break;}}
547return featureTitle;},displayFeatures:function(evt){if(evt.features&&evt.features.length>0){this.displayPanel=this.display(evt);this.add(this.displayPanel);this.displayPanel.doLayout();this.displayOn=true;}else{if(evt.object===this.olControl){this.noWMSFeatures=true;}
548if(evt.object===this.olControlWMTS){this.noWMTSFeatures=true;}
549if(!this.vectorFeaturesFound&&this.noWMTSFeatures&&this.noWMSFeatures){this.displayPanel=this.displayInfo(__('No features found'));this.add(this.displayPanel);this.displayOn=true;}}
550if(this.getLayout()instanceof Object&&this.displayOn){this.getLayout().runLayout();}
551if(this.displayOn){this.fireEvent('featureinfo',evt);}},displayFeatureInfo:function(evt){var featureSets={},featureSet,featureType,featureTitle,featureSetKey;if(this.tabPanel!=null&&!this.displayOn){this.remove(this.tabPanel);this.tabPanel=null;}
552for(var index=0;index<evt.features.length;index++){var feature=evt.features[index];featureType=this.getFeatureType(feature);featureTitle=this.getFeatureTitle(feature,featureType);featureSetKey=featureType+featureTitle;if(!featureSets[featureSetKey]){featureSet={featureType:featureType,title:featureTitle,features:[]};featureSets[featureSetKey]=featureSet;}
553for(var attrName in feature.attributes){var attrValue=feature.attributes[attrName];if(attrValue&&typeof attrValue=='string'&&(attrValue.indexOf("http://")>=0||attrValue.indexOf("https://")>=0)){feature.attributes[attrName]='<a href="'+attrValue+'" target="_new">'+attrValue+'</a>';}
554if(attrName.indexOf(".")>=0){var newAttrName=attrName.replace(/\./g,"_");feature.attributes[newAttrName]=feature.attributes[attrName];if(attrName!=newAttrName){delete feature.attributes[attrName];}}}
555featureSet.features.push(feature);}
556for(featureSetKey in featureSets){featureSet=featureSets[featureSetKey];if(featureSet.features.length==0){continue;}
557var autoConfig=true;var columns=null;if(this.gridColumns){for(var c=0;c<this.gridColumns.length;c++){if(this.gridColumns[c].featureType==featureSet.featureType){autoConfig=false;columns=this.gridColumns[c].columns;break;}}}
558var panel=new Heron.widgets.search.FeaturePanel({title:featureSet.title,featureType:featureSet.featureType,featureSetKey:featureSetKey,header:false,features:featureSet.features,autoConfig:autoConfig,autoConfigMaxSniff:this.autoConfigMaxSniff,hideColumns:this.hideColumns,columnFixedWidth:this.columnFixedWidth,autoMaxWidth:this.autoMaxWidth,autoMinWidth:this.autoMinWidth,columnCapitalize:this.columnCapitalize,showGeometries:this.showGeometries,featureSelection:this.featureSelection,gridCellRenderers:this.gridCellRenderers,columns:columns,showTopToolbar:this.showTopToolbar,exportFormats:this.exportFormats,displayPanels:this.displayPanels,hropts:{zoomOnRowDoubleClick:true,zoomOnFeatureSelect:false,zoomLevelPointSelect:8}});if(!this.tabPanel){this.tabPanel=new Ext.TabPanel({border:false,autoDestroy:true,enableTabScroll:true,items:[panel],activeTab:0});}else{this.tabPanel.add(panel);this.tabPanel.setActiveTab(0);}
559panel.loadFeatures(featureSet.features,featureSet.featureType);}
560return this.tabPanel;},displayTree:function(evt){var panel=new Heron.widgets.XMLTreePanel();panel.xmlTreeFromText(panel,evt.text);return panel;},displayXML:function(evt){var opts={html:'<div class="hr-html-panel-body"><pre>'+Heron.Utils.formatXml(evt.text,true)+'</pre></div>',preventBodyReset:true,autoScroll:true};return new Ext.Panel(opts);},displayInfo:function(infoStr){var opts={html:'<div class="hr-html-panel-body"><pre>'+infoStr+'</pre></div>',preventBodyReset:true,autoScroll:true};return new Ext.Panel(opts);}});Ext.reg('hr_featureinfopanel',Heron.widgets.search.FeatureInfoPanel);Ext.namespace("Heron.widgets.search");Ext.namespace("Heron.utils");Heron.widgets.search.FeatureInfoPopup=Ext.extend(GeoExt.Popup,{title:__('FeatureInfo popup'),layout:'fit',resizable:true,width:320,height:200,anch
560orPosition:"auto",panIn:false,draggable:true,unpinnable:false,maximizable:false,collapsible:false,closeAction:'hide',olControl:null,olControlWMTS:null,anchored:true,hideonmove:false,layer:null,initComponent:function(){this.map=Heron.App.getMap();if(this.hideonmove){this.anchorPosition="bottom-left";}
561this.fiPanel=this.createFeatureInfoPanel();this.fiPanel.addListener('beforefeatureinfo',this.onBeforeFeatureInfo,this);this.fiPanel.addListener('featureinfo',this.onFeatureInfo,this);var self=this;this.olControl=this.fiPanel.olControl;if(this.hideonmove&&this.olControl.handler&&this.olControl.handler.callbacks.move){this.olControl.handler.callbacks.move=function(){self.olControl.cancelHover();self.hide();}}
562this.olControlWMTS=this.fiPanel.olControlWMTS;if(this.hideonmove&&this.olControlWMTS.handler&&this.olControlWMTS.handler.callbacks.move){this.olControlWMTS.handler.callbacks.move=function(){self.olControlWMTS.cancelHover();self.hide();}}
563this.items=[this.fiPanel];Heron.widgets.search.FeatureInfoPopup.superclass.initComponent.call(this);},createFeatureInfoPanel:function(){var defaultConfig={title:null,header:false,border:false,showTopToolbar:false,exportFormats:[],maxFeatures:8,hover:false,drillDown:true,infoFormat:'application/vnd.ogc.gml',layer:this.layer,olControl:this.olControl,olControlWMTS:this.olControlWMTS};var config=Ext.apply(defaultConfig,this.featureInfoPanel);return new Heron.widgets.search.FeatureInfoPanel(config);},onBeforeFeatureInfo:function(evt){this.hide();},onFeatureInfo:function(evt){if((!evt.features||evt.features.length==0)&&this.anchored&&this.olControl.hover){this.hide();return;}
564this.location=this.map.getLonLatFromPixel(evt.xy);this.show();},deactivate:function(){this.hide();}});Ext.reg('hr_featureinfopopup',Heron.widgets.search.FeatureInfoPopup);OpenLayers.Protocol.NGSI10=OpenLayers.Class(OpenLayers.Protocol.HTTP,{headers:{'Content-Type':'application/json','Accept':'application/json'},data:{"entities":[{"isPattern":"true","id":".*"}]},fiwareService:null,authToken:null,refreshMillis:-1,initialize:function(options){options=options||{};if(options.fiwareService){this.headers['Fiware-service']=options.fiwareService;}
565if(options.authToken){this.headers['X-FI-WARE-OAuth-Header-Name']='X-Auth-Token';this.headers['X-FI-WARE-OAuth-Token']='true';this.headers['X-Auth-Token']=options.authToken;}
566this.format=new OpenLayers.Format.JSON();OpenLayers.Protocol.prototype.initialize.apply(this,[options]);},read:function(options){if(this.timeoutId){return;}
567OpenLayers.Protocol.prototype.read.apply(this,arguments);OpenLayers.Util.applyDefaults(options,this.options);var resp=new OpenLayers.Protocol.Response({requestType:"read"});resp.priv=OpenLayers.Request.POST({url:options.url,callback:this.createCallback(this.handleRead,resp,options),data:new OpenLayers.Format.JSON().write(this.data),headers:this.headers});this.lastOptions=options;return resp;},onRefresh:function(){this.timeoutId=null;this.read(this.lastOptions);},parseFeatures:function(request){var features=[];var doc=request.responseXML;if(!doc||!doc.documentElement){doc=request.responseText;}
568if(!doc||doc.length<=0){return null;}
569var json=this.format.read(doc);var contextResponses=json['contextResponses'];if(!contextResponses){return null;}
570var feature_attrs={},feature_geom;for(var i=0;i<contextResponses.length;i++){var contextElement=contextResponses[i]['contextElement'];var attrs=contextElement.attributes;feature_geom=undefined;feature_attrs={id:contextElement['id'],label:contextElement['id']};for(var j=0;j<attrs.length;j++){var attr=attrs[j];if(attr['name']=='name'||attr['name']=='organization'){feature_attrs['label']=attr['value'];}
571if(attr['type']=='coords'){var geom_str=attr['value'];var coords=geom_str.split(',');feature_geom=new OpenLayers.Geometry.Point(parseFloat(coords[1]),parseFloat(coords[0]));}else{feature_attrs[attr['name']]=attr['value'];}}
572if(feature_geom){var feature=new OpenLayers.Feature.Vector(feature_geom,feature_attrs);features.push(feature);}}
573if(this.refreshMillis>0){this.timeoutId=setTimeout(OpenLayers.Function.bind(this.onRefresh,this),this.refreshMillis);}
574return features;},CLASS_NAME:"OpenLayers.Protocol.NGSI10"});function sthShowTimeseries(sthURL,entityType,id,attr){var pageSize=15;var pageNum=0;var urlBase=sthURL+'/STH/v1/contextEntities/type/'+entityType+'/id/'+id+'/attributes/'+attr;var urlFirstN=urlBase+'?hLimit='+pageSize+'&hOffset=0';var urlNextN=urlBase+'?hLimit='+pageSize+'&hOffset='+pageNum;var urlLastN=urlBase+'?lastN=15';var store=new Ext.data.JsonStore({autoDestroy:true,root:'contextResponses[0].contextElement.attributes[0].values',fields:[{name:'attrType',type:'string'},{name:'attrValue',type:'string'},{name:'recvTime',type:'string'}]});var grid=new Ext.grid.GridPanel({store:store,loadMask:true,columns:[{header:'Date',dataIndex:'recvTime'},{header:'Value',dataIndex:'attrValue'}],viewConfig:{forceFit:true}});var winBaseTitle=attr+' timeseries for '+id;var window=new Ext.Window({title:winBaseTitle+' - last '+pageSize,height:400,width:400,layout:"fit",items:[grid],bbar:[{text:'|&lt;
574',handler:function(btn){fetchData(false,urlFirstN);window.setTitle(winBaseTitle+' - first '+pageSize);}},{text:'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;',handler:function(btn){pageNum++;fetchData(false,urlNextN+pageNum);window.setTitle(winBaseTitle);}},'->',{text:'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;',handler:function(btn){pageNum--;if(pageNum<0){pageNum=0;}
575fetchData(false,urlNextN+pageNum);window.setTitle(winBaseTitle);}},{text:'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;|',handler:function(btn){fetchData(false,urlLastN);window.setTitle(winBaseTitle+' - last '+pageSize);}}]});function fetchData(winOpen,url){OpenLayers.Request.GET({async:true,url:url,headers:{"FIWARE-service":'fiwareiot',"FIWARE-servicepath":'/'},success:function(request){var jsonText=request.responseText;var format=new OpenLayers.Format.JSON();var result=format.read(jsonText);store.loadData(result);if(winOpen){window.show();}},failure:function(){console.error("Failed to retrieve timeseries from: "+url);}});}
576fetchData(true,urlLastN);}
577Ext.namespace("Heron.widgets");Heron.widgets.XMLTreePanel=Ext.extend(Ext.tree.TreePanel,{initComponent:function(){Ext.apply(this,{autoScroll:true,rootVisible:false,root:this.root?this.root:{nodeType:'async',text:'Ext JS',draggable:false,id:'source'}});Heron.widgets.XMLTreePanel.superclass.initComponent.apply(this,arguments);},xmlTreeFromUrl:function(url){var self=this;Ext.Ajax.request({url:url,method:'GET',params:null,success:function(result,request){self.xmlTreeFromDoc(self,result.responseXML);},failure:function(result,request){Ext.Msg.alert(__('Warning'),__('Error in ajax request'));}});},xmlTreeFromText:function(self,text){var doc=new OpenLayers.Format.XML().read(text);self.xmlTreeFromDoc(self,doc);return doc;},xmlTreeFromDoc:function(self,doc){self.setRootNode(self.treeNodeFromXml(self,doc.documentElement||doc));},treeNodeFromXml:function(self,XmlEl){var t=((XmlEl.nodeType==3)?XmlEl.nodeValue:XmlEl.tagName);if(t.replace(/\s/g,'').length==0){return null;}
578var result=new Ext.tree.TreeNode({text:t});var xmlns='xmlns',xsi='xsi';if(XmlEl.nodeType==1){Ext.each(XmlEl.attributes,function(a){var nodeName=a.nodeName;if(!(XmlEl.parentNode.nodeType==9&&(nodeName.substring(0,xmlns.length)===xmlns||nodeName.substring(0,xsi.length)===xsi))){var c=new Ext.tree.TreeNode({text:a.nodeName});c.appendChild(new Ext.tree.TreeNode({text:a.nodeValue}));result.appendChild(c);}});Ext.each(XmlEl.childNodes,function(el){if((el.nodeType==1)||(el.nodeType==3)){var c=self.treeNodeFromXml(self,el);if(c){result.appendChild(c);}}});}
579return result;}});Ext.reg('hr_xmltreepanel',Heron.widgets.XMLTreePanel);
579Ext.namespace("Heron.widgets");Heron.widgets.GXP_LayerPanel_Empty=Ext.extend(Ext.Container,{});GeoExt.data.LayerRecord.prototype.fields.addAll([new Ext.data.Field({name:"group",type:"string",mapping:"group"}),new Ext.data.Field({name:"queryable",type:"boolean",mapping:"queryable",defaultValue:true})]);Heron.widgets.GXP_LayerPanel=Ext.extend(Ext.Panel,{layerSortOrder:'ASC',header:true,initComponent:function(){if(OpenLayers.ProxyHost){this.proxy=OpenLayers.ProxyHost;}
580this.layerSources={};this.initTools();this.addListener("afterrender",this.onAfterRender);this.addEvents("ready","portalready","beforelayerselectionchange","layerselectionchange");this.createLayerRecordQueue=[];Heron.widgets.GXP_LayerPanel.superclass.initComponent.call(this);},onAfterRender:function(){this.map=Heron.App.getMap();this.mapPanel=Heron.App.getMapPanel();var config,queue=[];for(var key in this.sources){queue.push(this.createSourceLoader(key));}
581gxp.util.dispatch(queue,this.activate,this);var tool=this.tools['undefined'];if(tool){tool.hide();}
582var self=this;this.items.each(function(item){item.addListener("layerselectionchange",self.selectLayer,self);});this.fireEvent("portalready");},activate:function(){Ext.QuickTips.init();this.fireEvent("ready");},initTools:function(){if(this.tools&&this.tools.length>0){var tool;for(var i=0,len=this.tools.length;i<len;i++){try{tool=Ext.ComponentMgr.createPlugin(this.tools[i],this.defaultToolType);}catch(err){throw new Error("Could not create tool plugin with ptype: "+this.tools[i].ptype);}
583tool.init(this);}}},createLayerRecord:function(config,callback,scope){this.createLayerRecordQueue.push({config:config,callback:callback,scope:scope});this.checkLayerRecordQueue();},checkLayerRecordQueue:function(){var request,source,s,record,called;var remaining=[];for(var i=0,ii=this.createLayerRecordQueue.length;i<ii;++i){called=false;request=this.createLayerRecordQueue[i];s=request.config.source;if(s in this.layerSources){source=this.layerSources[s];record=source.createLayerRecord(request.config);if(record){(function(req,rec){window.setTimeout(function(){if(req.callback){req.callback.call(req.scope,rec);}},0);})(request,record);called=true;}else if(source.lazy){source.store.load({callback:this.checkLayerRecordQueue,scope:this});}}
584if(!called){remaining.push(request);}}
585this.createLayerRecordQueue=remaining;},createSourceLoader:function(key){return function(done){var config=this.sources[key];config.projection=this.map.projection;this.addLayerSource({id:key,config:config,callback:done,fallback:function(source,msg,details){done();},scope:this});};},isAuthorized:function(roles){var authorized=true;if(this.authorizedRoles){authorized=false;if(!roles){roles="ROLE_ADMINISTRATOR";}
586if(!Ext.isArray(roles)){roles=[roles];}
587for(var i=roles.length-1;i>=0;--i){if(~this.authorizedRoles.indexOf(roles[i])){authorized=true;break;}}}
588return authorized;},addLayerSource:function(options){var id=options.id||Ext.id(null,"gxp-source-");var source;var config=options.config;config.id=id;try{source=Ext.ComponentMgr.createPlugin(config,this.defaultSourceType);}catch(err){throw new Error("Could not create new source plugin with ptype: "+options.config.ptype);}
589source.on({ready:{fn:function(){var callback=options.callback||Ext.emptyFn;callback.call(options.scope||this,id);},scope:this,single:true},failure:{fn:function(){var fallback=options.fallback||Ext.emptyFn;delete this.layerSources[id];fallback.apply(options.scope||this,arguments);},scope:this,single:true}});this.layerSources[id]=source;source.init(this);return source;},getSource:function(layerRec){return layerRec&&this.layerSources[layerRec.get("source")];},selectLayer:function(record){record=record||null;var changed=false;var allow=this.fireEvent("beforelayerselectionchange",record);if(allow!==false){changed=true;
589if(this.selectedLayer){this.selectedLayer.set("selected",false);}
590this.selectedLayer=record;if(this.selectedLayer){this.selectedLayer.set("selected",true);}
591this.fireEvent("layerselectionchange",record);}
592return changed;}});Ext.reg('hr_gxplayerpanel',Heron.widgets.GXP_LayerPanel);Ext.namespace("Heron.widgets");Heron.widgets.HTMLPanel=Ext.extend(Ext.Panel,{initComponent:function(){Heron.widgets.HTMLPanel.superclass.initComponent.call(this);this.addListener('render',function(){this.loadMask=new Ext.LoadMask(this.body,{msg:__('Loading...')})});}});Ext.reg('hr_htmlpanel',Heron.widgets.HTMLPanel);Ext.namespace("Heron.widgets");Heron.widgets.Bookmarks=(function(){var contexts=undefined;var map=undefined;var bookmarksPanel=undefined;var instance={init:function(hroptions){},onSetMapContext:function(contextid,id){var map=Heron.App.getMap();if(map.editor&&map.editor.editLayer.features.length>0){Ext.Msg.confirm(__('Warning'),__('With loading this bookmark, former edits will be deleted. Do you wish to proceed?'),function(btnText){if(btnText==="yes"){this.setMapContext(contextid,id);}},this);}else{this.setMapContext(contextid,id);}},setMapContext:function(contextid,id){var elmm=Ext.getCmp(contextid);contexts=elmm.hropts;if(contexts){var map=Heron.App.getMap();for(var i=0;i<contexts.length;i++){if(contexts[i].id==id){if(contexts[i].x&&contexts[i].y&&contexts[i].zoom){map.setCenter(new OpenLayers.LonLat(contexts[i].x,contexts[i].y),contexts[i].zoom,false,true);}
593else if(contexts[i].x&&contexts[i].y&&!contexts[i].zoom){map.setCenter(new OpenLayers.LonLat(contexts[i].x,contexts[i].y),map.getZoom(),false,true);}
594else if(!(contexts[i].x&&contexts[i].y)&&contexts[i].zoom){map.setCenter(new OpenLayers.LonLat(map.center.lon,map.center.lat),contexts[i].zoom,false,true);}
595if(contexts[i].layers){var mapLayers=map.layers;var ctxLayers=contexts[i].layers;var ctxLayersOpacity=contexts[i].layersopacity;var ctxName=contexts[i].name;if((ctxLayers.length)||(!ctxLayers.length&&ctxName.length)){if(!contexts[i].addLayers){for(var n=0;n<mapLayers.length;n++){if(mapLayers[n].getVisibility()){if(!mapLayers[n].isBaseLayer){if(!map.editor||((map.editor&&map.editor.editLayer)&&(mapLayers[n]!==map.editor.editLayer))){mapLayers[n].setVisibility(false);}}}}}
596for(var m=0;m<ctxLayers.length;m++){for(n=0;n<mapLayers.length;n++){if(mapLayers[n].name==ctxLayers[m]){if(mapLayers[n].isBaseLayer){map.setBaseLayer(mapLayers[n]);}
597mapLayers[n].setVisibility(true);if(ctxLayersOpacity){mapLayers[n].setOpacity(ctxLayersOpacity[m]);}}}}
598if(map.baseLayer){map.setBaseLayer(map.baseLayer);}}}
599if(map.editor&&map.editor.editLayer){map.editor.editLayer.destroyFeatures();if(contexts[i].editlayer){editLayerJSON=contexts[i].editlayer;contextFeatures=new OpenLayers.Format.GeoJSON().read(editLayerJSON);map.editor.editLayer.addFeatures(contextFeatures);map.editor.editLayer.setVisibility(true);}}else if(contexts[i].editlayer){Ext.Msg.alert(__('Warning'),__('The bookmark contains edits, but the map does not have an edit layer. The edit features of the bookmark will not be displayed.'));}}}}},removeBookmark:function(contextid,id){var elmm=Ext.getCmp(contextid);elmm.removeBookmark(id);},setBookmarksPanel:function(abookmarksPanel){bookmarksPanel=abookmarksPanel;},getBookmarksPanel:function(){return bookmarksPanel;}};return(instance);})();Heron.widgets.BookmarksPanel=Ext.extend(Heron.widgets.HTMLPanel,{title:__('Bookmarks'),titleDescription:null,titleBookmarkProject:__("Project bookmarks"),titleBookmarkUser:__("Your bookmarks"),showProjectBookmarks:true,showUserBookmarks:true,autoProjectBookmarksTitle:true,autoUserBookmarksTitle:true,appBookmarkSign:null,autoScroll:true,bodyStyle:{overflow:'auto'},initComponent:function(){this.version=1;this.signature=this.appBookmarkSign;Heron.widgets.BookmarksPanel.superclass.initComponent.call(this);if(!this.titleDescription){this.titleDescription='';}
600if(!this.titleBookmarkProject){this.titleBookmarkProject='';}
601if(!this.titleBookmarkUser){this.titleBookmarkUser='';}
602var contexts=undefined;var localStorageBookmarks=this.getlocalStorageBookmarks();if(localStorageBookmarks){contexts=this.hropts.concat(localStorageBookmarks);}
603else{contexts=this.hropts;}
604this.hropts=contexts;Heron.widgets.Bookmarks.init(contexts);if(this.showUserBookmarks){Heron.widgets.Bookmarks.setBookmarksPanel(this);}
605this.createAddBookmarkWindow();this.addListener("afterrender",this.afterrender);},afterrender:function(){this.updateHtml(this.getHtml());},getHtml:function(){var firstProjectContext=true;var firstUserContext=true;var htmllines='<div class="hr-bookmark-panel-body">';var remove=__("Remove bookmark:");var restore=__("Restore map context:");var removeTooltip="";var restoreTooltip="";var divWidth=210;if(this.titleDescription.length){htmllines+='<div class="hr-bookmark-title-description">'+this.titleDescription+'</div>';}
606if(this.el!==undefined){divWidth=this.getInnerWidth()-60;}
607var contexts=this.hropts;if(typeof(contexts)!=="undefined"){for(var i=0;i<contexts.length;i++){if(contexts[i].id.substr(0,11)=="hr_bookmark"){if(this.showUserBookmarks){if(firstUserContext){if(!firstProjectContext){htmllines+='<div class="hr-bookmark-title-hr"><hr></div>';}
608htmllines+='<div class="hr-bookmark-title-header">'+this.titleBookmarkUser+'</div>';firstUserContext=false;removeTooltip=remove;}
609if(this.isValidBookmark(contexts[i])){restoreTooltip=restore+" '";if(contexts[i].desc+''!=''){restoreTooltip+=contexts[i].desc;}else{restoreTooltip+=contexts[i].name;}
610restoreTooltip+="'";htmllines+='<div class="hr-bookmark-link-user" style="width: 80%;"><a href="#" id="'+contexts[i].id+'" title="'+restoreTooltip+'" onclick="Heron.widgets.Bookmarks.onSetMapContext(\''+this.id+"','"+contexts[i].id+'\'); return false;">'+contexts[i].name+'</a></div>';}
611else{htmllines+='<div class="hr-bookmark-link-invalid" style="width: 80%;">'+contexts[i].name+'</div>';}
612htmllines+='<div class="x-tool hr-bookmark-close-icon" title="'+removeTooltip+' \''+contexts[i].name+'\'" onclick="Heron.widgets.Bookmarks.removeBookmark(\''+this.id+"','"+contexts[i].id+'\')">&nbsp;</div>';}}
613else{if(this.showProjectBookmarks){if(firstProjectContext){htmllines+='<div class="hr-bookmark-title-header">'+this.titleBookmarkProject+'</div>';firstProjectContext=false;}
614if(contexts[i].desc.length){htmllines+='<div class="hr-bookmark-link-project"><a href="#" id="'+contexts[i].id+'" title="'+contexts[i].desc+'" onclick="Heron.widgets.Bookmarks.onSetMapContext(\''+this.id+"','"+contexts[i].id+'\'); return false;">'+contexts[i].name+'</a></div>';}else{htmllines+='<div class="hr-bookmark-link-project">&nbsp;</div>';}}}}}
615if(this.showProjectBookmarks){if(firstProjectContext){if(!this.autoProjectBookmarksTitle){htmllines+='<div class="hr-bookmark-title-header">'+this.titleBookmarkProject+'</div>';firstProjectContext=false;}}}
616if(this.showUserBookmarks){if(firstUserContext){if(!this.autoUserBookmarksTitle){if(!firstProjectContext){htmllines+='<div class="hr-bookmark-title-hr"><hr></div>';}
617htmllines+='<div class="hr-bookmark-title-header">'+this.titleBookmarkUser+'</div>';}}}
618htmllines+='</div>';return htmllines;},updateHtml:function(){this.update(this.getHtml());},onAddBookmark:function(){if(this.supportsHtml5Storage()){this.AddBookmarkWindow.show();}
619else{Ext.Msg.alert(__('Warning'),__('Your browser does not support local storage for user-defined bookmarks'));}},addBookmark:function(){var strBookmarkMaxNr=localStorage.getItem("hr_bookmarkMax");if(strBookmarkMaxNr){var bookmarkmaxNr=Number(strBookmarkMaxNr);if(bookmarkmaxNr!==NaN){bookmarkmaxNr+=1;}
620else{bookmarkmaxNr=1;}}
621else{bookmarkmaxNr=1;}
622this.scId='hr_bookmark'+bookmarkmaxNr;this.scName=this.edName.getValue();this.scDesc=this.edDesc.getValue();if(!this.scName||this.scName.length==0){Ext.Msg.alert(__('Warning'),__('Bookmark name cannot be empty'));return false;}
623this.getMapContent();var newbookmark={id:this.scId,version:this.version,signature:this.signature,type:'bookmark',name:this.scName,desc:this.scDesc,layers:this.scvisibleLayers,layersopacity:this.scvisibleLayersOpacity,x:this.scX,y:this.scY,zoom:this.scZoom,units:this.scUnits,projection:this.scProjection,editlayer:this.editLayer};
623var newbookmarkJSON=Ext.encode(newbookmark);localStorage.setItem(this.scId,newbookmarkJSON);localStorage.setItem("hr_bookmarkMax",bookmarkmaxNr);this.hropts.push(newbookmark);this.updateHtml();return true;},removeBookmark:function(id){localStorage.removeItem(id);var strBookmarkMaxNr=localStorage.getItem("hr_bookmarkMax")
624var bookmarkmaxNr=Number(strBookmarkMaxNr)
625if(bookmarkmaxNr==Number(id.substr(4))){bookmarkmaxNr-=1
626localStorage.setItem("hr_bookmarkMax",bookmarkmaxNr)}
627var contexts=this.hropts;var newcontexts=new Array();for(var i=0;i<contexts.length;i++){if(contexts[i].id!==id){newcontexts.push(contexts[i]);}}
628this.hropts=newcontexts;this.updateHtml();},getlocalStorageBookmarks:function(){if(!this.supportsHtml5Storage()){return null;}
629var bookmarkmaxNr=localStorage.getItem("hr_bookmarkMax");if(bookmarkmaxNr){var bookmarks=new Array();for(var index=1;index<=bookmarkmaxNr;index++){var bookmarkJSON=localStorage.getItem("hr_bookmark"+index);if(bookmarkJSON){try{var bookmark=Ext.decode(bookmarkJSON)
630if(bookmark.signature){if(bookmark.signature==this.appBookmarkSign){bookmarks.push(bookmark);}}else{if(!this.appBookmarkSign){bookmarks.push(bookmark);}}}catch(err){}}}
631return bookmarks;}
632return null;},isValidBookmark:function(context){var excludeLayers=['OpenLayers.Handler.Polygon','OpenLayers.Handler.RegularPolygon','OpenLayers.Handler.Path','OpenLayers.Handler.Point'];var map=Heron.App.getMap();if(context.layers){var mapLayers=map.layers;var ctxLayers=context.layers;for(var m=0;m<ctxLayers.length;m++){if(excludeLayers.indexOf(ctxLayers[m])===-1){var layerPresent=false;for(var n=0;n<mapLayers.length;n++){if(mapLayers[n].name==ctxLayers[m]){layerPresent=true;break;}}
633if(!layerPresent){return false;}}}}
634if(context.projection!==map.getProjection()){return false;}
635if(context.units!==map.units){return false;}
636var maxExtent=map.maxExtent;if(context.x<maxExtent.left&&context.x>maxExtent.right){return false;}
637if(context.y<maxExtent.bottom&&context.y>maxExtent.top){return false;}
638if(context.zoom>map.numZoomLevels){return false;}
639return true;},getMapContent:function(){var map=Heron.App.getMap();var mapCenter=map.getCenter();this.scUnits=map.units;this.scProjection=map.getProjection();this.scX=mapCenter.lon;this.scY=mapCenter.lat;this.scZoom=map.getZoom();var mapLayers=map.layers;this.scvisibleLayers=new Array();this.scvisibleLayersOpacity=new Array();for(var n=0;n<mapLayers.length;n++){if(mapLayers[n].getVisibility()&&mapLayers[n].CLASS_NAME!='OpenLayers.Layer.Vector.RootContainer'){if(map.editor&&map.editor.editLayer&&(mapLayers[n]===map.editor.editLayer)){continue}else{this.scvisibleLayers.push(mapLayers[n].name);this.scvisibleLayersOpacity.push(mapLayers[n].opacity);}}}
640if(map.editor&&map.editor.editLayer){editLayerJSON=new OpenLayers.Format.GeoJSON().write(map.editor.editLayer.features);this.editLayer=editLayerJSON;}else{this.editLayer="";}},createAddBookmarkWindow:function(){var labelWidth=80;var fieldWidth=300;var formPanel=new Ext.form.FormPanel({title:"",baseCls:'x-plain',autoHeight:true,defaultType:"textfield",labelWidth:labelWidth,anchor:"100%",items:[{id:"ed_name",fieldLabel:__("Name"),displayField:"Name",width:fieldWidth,enableKeyEvents:true,listeners:{keyup:function(textfield,ev){this.onNameKeyUp(textfield,ev);},scope:this}},{id:"ed_desc",fieldLabel:__("Description"),displayField:"Decription",width:fieldWidth}]});this.AddBookmarkWindow=new Ext.Window({title:__("Add a bookmark"),width:420,autoHeight:true,plain:true,statefull:true,stateId:"ZoomToWindow",bodyStyle:"padding: 5px;",buttonAlign:"center",resizable:false,closeAction:"hide",items:[formPanel],listeners:{show:function(){this.onShowWindow();},scope:this},buttons:[{id:"btn_add",text:__("Add"),disabled:true,handler:function(){if(this.addBookmark()){this.AddBookmarkWindow.hide();}},scope:this},{name:"btn_cancel",text:__("Cancel"),handler:function(){this.AddBookmarkWindow.hide();},scope:this}]});this.edName=Ext.getCmp("ed_name");this.edDesc=Ext.getCmp("ed_desc");this.btnAdd=Ext.getCmp("btn_add");},onNameKeyUp:function(textfield,ev){var value=this.edName.getValue();if(value&&OpenLayers.String.trim(value).length>0){this.btnAdd.enable();}
641else{this.btnAdd.disable();}},onShowWindow:function(){this.edName.setValue('');this.edDesc.setValue('');this.edName.focus(false,200);},supportsHtml5Storage:function(){try{return'localStorage'in window&&window['localStorage']!==null;}catch(e){return false;}}});Ext.reg('hr_bookmarkspanel',Heron.widgets.BookmarksPanel);
641Ext.reg('hr_contextbrowserpanel',Heron.widgets.BookmarksPanel);Ext.namespace("Heron.tree");Heron.tree.UserLayerContainer=Ext.extend(GeoExt.tree.LayerContainer,{text:__('User-Added Layers'),initialLoad:false,constructor:function(config){config=Ext.applyIf(config||{},{text:this.text,loader:{}});var self=this;config.loader=Ext.applyIf(config.loader,{baseAttrs:Ext.applyIf(config.loader.baseAttrs||{},{iconCls:'hr-tree-node-icon-layer-raster'}),filter:function(record){if(this.initialLoad===false){self.ui.hide();}
642var hasSource=record.data.source;if(hasSource!==undefined){self.ui.show();this.initialLoad=true;return true;}
643return false;}});Heron.tree.UserLayerContainer.superclass.constructor.call(this,config);if(this.ui){this.ui.hide();}
644this.addListener("insert",this.onAddNode);this.addListener("append",this.onAddNode);},onAddNode:function(container0,container1,node){if(node&&node.layer){var timer;var f=function(){if(!node.loading){clearInterval(timer);node.select();}else{clearInterval(timer);timer=setInterval(f,100);}}.createDelegate(this);timer=setInterval(f,100);}
645return true;}});Ext.tree.TreePanel.nodeTypes.hr_userlayercontainer=Heron.tree.UserLayerContainer;Ext.namespace("Heron.widgets");Heron.widgets.LayerTreePanel=Ext.extend(Ext.tree.TreePanel,{title:__('Layers'),textbaselayers:__('Base Layers'),textoverlays:__('Overlays'),lines:false,ordering:'none',layerIcons:'bylayertype',useMapContext:false,layerResolutions:{},appliedResolution:0.0,autoScroll:true,enableDD:true,plugins:[{ptype:"gx_treenodecomponent"}],contextMenu:null,blnCustomLayerTree:false,jsonTreeConfig:null,initComponent:function(){var layerTreePanel=this;var treeConfig;if(this.useMapContext){var context=Heron.App.getMapContext();this.tree=context.layerTree;}
646Ext.apply(this,this.hropts);if(this.tree){this.blnCustomLayerTree=true;treeConfig=this.tree;}else{treeConfig=[{nodeType:"gx_baselayercontainer",text:this.textbaselayers,expanded:true},{nodeType:"gx_overlaylayercontainer",text:this.textoverlays}]}
647this.jsonTreeConfig=new OpenLayers.Format.JSON().write(treeConfig,true);var LayerNodeUI=Ext.extend(GeoExt.tree.LayerNodeUI,new GeoExt.tree.TreeNodeUIEventMixin());var options={title:this.title,autoScroll:true,containerScroll:true,loader:new Ext.tree.TreeLoader({applyLoader:false,uiProviders:{"custom_ui":LayerNodeUI},createNode:function(attr){return layerTreePanel.createNode(this,attr);}}),root:{nodeType:"async",baseAttrs:{uiProvider:"custom_ui"},children:Ext.decode(this.jsonTreeConfig)},rootVisible:false,enableDD:this.enableDD,lines:this.lines,listeners:{contextmenu:function(node,e){node.select();var cm=this.contextMenu;if(cm){cm.contextNode=node;cm.showAt(e.getXY());}},beforemovenode:function(tree,node,oldParent,newParent,index){this.oldNodeNr=this.getNodePosition(tree,node);},movenode:function(tree,node,oldParent,newParent,index){this.newNodeNr=this.getNodePosition(tree,node);if((this.blnCustomLayerTree==true)&&(this.ordering=='TopBottom')){if(node.layer!=undefined&&node.attributes.checked==true){this.setLayerOrder(node);}else{var direction=this.oldNodeNr<this.newNodeNr?'down':'up';this.setLayerOrderFolder(node,direction);}}},checkchange:function(node,checked){if((this.blnCustomLayerTree==true)&&(this.ordering=='TopBottom')){this.setLayerOrder(node);}},scope:this}};if(this.contextMenu){var cmArgs=this.contextMenu instanceof Array?{items:this.contextMenu}:{};this.contextMenu=new Heron.widgets.LayerNodeContextMenu(cmArgs);}
648Ext.apply(this,options);this.addEvents("beforelayerselectionchange","layerselectionchange");Heron.widgets.LayerTreePanel.superclass.initComponent.call(this);this.addListener("beforedblclick",this.onBeforeDblClick);this.addListener("click",this.onClick);this.addListener("afterrender",this.onAfterRender);this.addListener("expandnode",this.onExpandNode);},createNode:function(treeLoader,attr){var mapPanel=Heron.App.getMapPanel();if(!mapPanel||!attr.layer||(this.layerIcons=='default'&&!attr.legend)){return Ext.tree.TreeLoader.prototype.createNode.call(treeLoader,attr);}
649var layerRecord=this.getLayerRecord(attr.layer),layer;if(layerRecord){layer=layerRecord.getLayer();}
650if(this.layerIcons=='none'){attr.iconCls='hr-tree-node-icon-none';}
651if(layer){var layerType=layer.CLASS_NAME.split('.').slice(-1)[0];if(this.layerIcons=='bylayertype'&&!(attr.iconCls||attr.cls||attr.icon)){var layerKind='raster';
651if(layerType=='Vector'){layerKind='vector';if(layer.protocol&&layer.protocol.format&&layer.protocol.format.CLASS_NAME&&layer.protocol.format.CLASS_NAME.indexOf('Atom')>-1){layerKind='atom';}}
652attr.iconCls='hr-tree-node-icon-layer-'+layerKind;}
653if(attr.legend){attr.uiProvider="custom_ui";var xtype=layerType=='Vector'?'gx_vectorlegend':'gx_wmslegend';attr.component={xtype:xtype,layerRecord:layerRecord,showTitle:false,cls:"hr-treenode-legend",hidden:!layer.getVisibility()}}}
654return Ext.tree.TreeLoader.prototype.createNode.call(treeLoader,attr);},getLayerRecord:function(layer){var mapPanel=Heron.App.getMapPanel();if(!mapPanel){return undefined;}
655var layerRecord=undefined;if(mapPanel&&mapPanel.layers instanceof GeoExt.data.LayerStore){var layerStore=mapPanel.layers;var layerName=layer instanceof OpenLayers.Layer?layer.name:layer;var layerIndex=layerStore.findExact('title',layerName);if(layerIndex>=0){layerRecord=layerStore.getAt(layerIndex);}}
656return layerRecord;},onBeforeDblClick:function(node,evt){return false;},onClick:function(node,evt){if(node.layer){this.selectLayer(node.layer);return true;}else{return false;}},onExpandNode:function(node){for(var i=0;i<node.childNodes.length;i++){var child=node.childNodes[i];if(child.leaf){this.setNodeEnabling(child,Heron.App.getMap());}}},onAfterRender:function(){var self=this;var map=Heron.App.getMap();self.applyMapMoveEnd();map.events.register('moveend',null,function(evt){self.applyMapMoveEnd();});this.setInitialLayerOrder(this.root.attributes);},applyMapMoveEnd:function(){var map=Heron.App.getMap();if(map){if(map.resolution!=this.appliedResolution){this.setNodeEnabling(this.getRootNode(),map);this.appliedResolution=map.resolution;}}},setNodeEnabling:function(rootNode,map){rootNode.cascade(function(node){var layer=node.layer;if(!layer){return;}
657var layerMinResolution=layer.minResolution?layer.minResolution:map.resolutions[map.resolutions.length-1];var layerMaxResolution=layer.maxResolution?layer.maxResolution:map.resolutions[0];node.enable();if(map.resolution<layerMinResolution||map.resolution>layerMaxResolution){node.disable();}});},logMapLayers:function(action){console.log("Action: "+action);var map=Heron.App.getMap();for(var i=0;i<map.layers.length;i++){console.log(i+": "+map.layers[i].name);}},getBaseLayerCount:function(map){var intBaseLayers=0;for(var i=0;i<map.layers.length;i++){if(map.layers[i].isBaseLayer){intBaseLayers++;}}
658return intBaseLayers;},setInitialLayerOrder:function(){if((this.blnCustomLayerTree==true)&&(this.ordering=='TopBottom')){if(this.root!=null){this.intLayer=-1;this.setVisibleLayersOrder(this.root.attributes);}}},setVisibleLayersOrder:function(child){var map=Heron.App.getMap();if(child.layer!=undefined){if(child.checkedGroup!="gx_baselayer"){var intLayerNew=0;if(child.checked==true){this.intLayer++;intLayerNew=map.layers.length-this.intLayer-1;}else{intLayerNew=this.getBaseLayerCount(map);}
659map.setLayerIndex(map.getLayersByName(child.layer)[0],intLayerNew);}}else if(child.children.length>0){for(var i=0;i<child.children.length;i++){this.setVisibleLayersOrder(child.children[i]);}}},setLayerOrder:function(node){var map=Heron.App.getMap();var intLayerNr=0;if(node.attributes.checked==true){intLayerNr=this.getLayerNrInTree(node.layer.name);intLayerNr=map.layers.length-intLayerNr;}else{intLayerNr=this.getBaseLayerCount(map);}
660map.setLayerIndex(node.layer,intLayerNr);},setLayerOrderFolder:function(node,direction){if(node.layer!=undefined&&node.attributes.checked==true){this.setLayerOrder(node);}else{if(direction=='up'){for(var i=0;i<node.childNodes.length;i++){this.setLayerOrderFolder(node.childNodes[i]);}}else{for(var j=node.childNodes.length-1;j>=0;j--){this.setLayerOrderFolder(node.childNodes[j]);}}}},getLayerNrInTree:function(layerName){var treePanel=Heron.App.topComponent.findByType('hr_layertreepanel')[0];this.intLayer=-1;var blnFound=false;if(treePanel!=null){var treeRoot=treePanel.root;if(treeRoot.childNodes.length>0){for(var intTree=0;intTree<treeRoot.childNodes.length;intTree++){if(blnFound==false){blnFound=this.findLayerInNode(layerName,treeRoot.childNodes[intTree],blnFound)}}}}
661return blnFound?this.intLayer:-1;},findLayerInNode:function(layerName,node,blnFound){if(blnFound==false){if(node.layer!=undefined){if(node.attributes.checked){this.intLayer++;}
662if(node.layer==layerName||node.layer.name==layerName){blnFound=true;}}else{for(var i=0;i<node.childNodes.length;i++){blnFound=this.findLayerInNode(layerName,node.childNodes[i],blnFound);}}}
663return blnFound;},getNodePosition:function(tree,node){this.NodeNr=-1;this.findNodePosition(tree.root,node.id,false);return this.NodeNr;},findNodePosition:function(node,id,blnFound){if(blnFound==false){this.NodeNr++;if(node.id==id){blnFound=true;}else if(node.childNodes!='undefined'){for(var i=0;i<node.childNodes.length;i++){blnFound=this.findNodePosition(node.childNodes[i],id,blnFound);}}}
664return blnFound;},selectLayer:function(layer){var record=this.getLayerRecord(layer);if(record){var allow=this.fireEvent("beforelayerselectionchange",record);if(allow!==false){this.fireEvent("layerselectionchange",record);}}}});Ext.reg('hr_layertreepanel',Heron.widgets.LayerTreePanel);
664Ext.namespace("Heron.widgets");Heron.widgets.LayerCombo=Ext.extend(Ext.form.ComboBox,{map:null,store:null,emptyText:__('Choose a Layer'),tooltip:__('Choose a Layer'),sortOrder:'ASC',selectFirst:false,hideTrigger:false,layerFilter:function(map){return map.layers;},displayField:'name',forceSelection:true,triggerAction:'all',mode:'local',editable:false,initComponent:function(){if(!this.map){this.map=Heron.App.getMap();}
665this.store=this.createLayerStore(this.layerFilter(this.map));this.displayField=this.store.fields.keys[1];if(this.selectFirst){var record=this.store.getAt(0);if(record){this.selectedLayer=record.getLayer();this.value=record.get('title');}}
666if(!this.width){this.width=this.listWidth='auto';}
667if(Ext.isIE&&this.listWidth=='auto'){this.listWidth=160;}
668Heron.widgets.LayerCombo.superclass.initComponent.apply(this,arguments);this.addEvents({'selectlayer':true});if(this.initialValue){this.setValue(this.initialValue);}
669this.on('select',function(combo,record,idx){this.selectedLayer=record.getLayer(idx);this.fireEvent('selectlayer',this.selectedLayer);},this);},createLayerStore:function(layers){return new GeoExt.data.LayerStore({layers:layers,sortInfo:this.sortOrder?{field:'title',direction:this.sortOrder}:null});},setLayers:function(layers){var store=this.createLayerStore(layers);this.bindStore(store,false);},resizeToFitContent:function(){if(!this.elMetrics){this.elMetrics=Ext.util.TextMetrics.createInstance(this.getEl());}
670var m=this.elMetrics,width=0,el=this.el,s=this.getSize();this.store.each(function(r){var text=r.get(this.displayField);width=Math.max(width,m.getWidth(text));},this);if(el){width+=el.getBorderWidth('lr');width+=el.getPadding('lr');}
671if(this.trigger){width+=this.trigger.getWidth();}
672s.width=width;this.setSize(s);this.store.on({'datachange':this.resizeToFitContent,'add':this.resizeToFitContent,'remove':this.resizeToFitContent,'load':this.resizeToFitContent,'update':this.resizeToFitContent,buffer:10,scope:this});},listeners:{render:function(c){c.el.set({qtip:this.tooltip});c.trigger.set({qtip:this.tooltip});if(this.width=='auto'){c.resizeToFitContent();}}}});Ext.reg('hr_layercombo',Heron.widgets.LayerCombo);Ext.namespace("Heron.widgets");Heron.widgets.BaseLayerCombo=Ext.extend(Heron.widgets.LayerCombo,{emptyText:__('Choose a Base Layer'),tooltip:__('BaseMaps'),layerFilter:function(map){return map.getLayersBy('isBaseLayer',true);},initComponent:function(){if(this.initialConfig.map!==null&&this.initialConfig.map instanceof OpenLayers.Map&&this.initialConfig.map.allOverlays===false){this.map=this.initialConfig.map;this.on('selectlayer',function(layer){this.map.setBaseLayer(layer);},this);this.map.events.register('changebaselayer',this,function(obj){this.setValue(obj.layer.name);});this.initialValue=this.map.baseLayer.name;}
673Heron.widgets.BaseLayerCombo.superclass.initComponent.apply(this,arguments);}});Ext.reg('hr_baselayer_combobox',Heron.widgets.BaseLayerCombo);Ext.namespace("Heron.widgets");Heron.widgets.LayerLegendPanel=Ext.extend(GeoExt.LegendPanel,{title:__('Legend'),bodyStyle:'padding:5px',autoScroll:true,defaults:{useScaleParameter:true,baseParams:{FORMAT:'image/gif'}},dynamic:true,legendFromCapabilities:false,legendFromCapabilitiesPatterns:['dino'],initComponent:function(){if(this.hropts){this.prefetchLegends=this.hropts.prefetchLegends;}
674Heron.widgets.LayerLegendPanel.superclass.initComponent.call(this);},onRender:function(){Heron.widgets.LayerLegendPanel.superclass.onRender.apply(this,arguments);this.layerStore.addListener("update",this.onUpdateLayerStore,this);},onUpdateLayerStore:function(store,record,index){this.addLegend(record,index);},addLegend:function(record,index){record.store=this.layerStore;var layer=record.getLayer();if(!layer.metadata.legend){layer.metadata.legend={};}
675var layerLegendMD=layer.metadata.legend;if(layer.noLegend){layer.hideInLegend=layerLegendMD.hideInLegend=true;}
676if(layerLegendMD.hideInLegend&&!record.get('hideInLegend')){record.set('hideInLegend',true);}
677if(layer.legendURL){layerLegendMD.legendURL=layer.legendURL;}
678if(layerLegendMD.legendURL&&!record.get('legendURL')){record.set('legendURL',layerLegendMD.legendURL);}
679var legend=undefined;if(this.items){legend=this.getComponent(this.getIdForLayer(layer));}
680if((this.prefetchLegends&&!legend)||(((layer.map&&layer.visibility)||layer.getVisibility())&&!legend&&!layerLegendMD.hideInLegend)){if(layer.params&&layer.params.LAYERS&&this.hasLegendUrlFromCapabilities(layer)&&!record.get("legendURL"))
681{var legendURL=this.getLegendUrlFromCapabilities(layer.url,layer.params.LAYERS);record.data['legendURL']=legendURL;}
682Heron.widgets.LayerLegendPanel.superclass.addLegend.apply(this,arguments);this.doLayout();}
683this.doLayout();},onListenerDoLayout:function(node){node.doLayout();},hasLegendUrlFromCapabilities:function(layer){if(this.legendFromCapabilities){return true;}
684var result=false;if(this.legendFromCapabilitiesPatterns&&this.legendFromCapabilitiesPatterns.length>0){for(var i=0;i<this.legendFromCapabilitiesPatterns.length;i++){if(layer.url.indexOf(this.legendFromCapabilitiesPatterns[i].toLowerCase())>=0){result=true;break;}}}
685return result;},getLegendUrlFromCapabilities:function(serviceUrl,layerName,styleName){var layerCaps=Heron.data.OWSCapabilitiesCache.getInstance().getWMSLayerCapability(serviceUrl,layerName,{async:false});if(!layerCaps){console.log("No layerCaps found for url "+serviceUrl+" and layerName "+layer
685Name);return null;}
686var legendUrl;try{var styles=layerCaps.styles;var style;if(!styleName){style=styles[0];}else{for(var i=0;i<styles.length;i++){if(styleName==styles[i].name){style=styles[i];break;}}}
687legendUrl=style.legend.href;}
688catch(e){}
689if(!legendUrl){console.log("No legendURL found in capabilities for layer "+layerName+" and style "+styleName);}
690return legendUrl;},listeners:{activate:function(node){this.onListenerDoLayout(this);},expand:function(node){this.onListenerDoLayout(this);}}});Ext.reg('hr_layerlegendpanel',Heron.widgets.LayerLegendPanel);OpenLayers.Control.LoadingPanel=OpenLayers.Class(OpenLayers.Control,{counter:0,maximized:false,visible:true,initialize:function(options){OpenLayers.Control.prototype.initialize.apply(this,[options]);},setVisible:function(visible){this.visible=visible;if(visible){OpenLayers.Element.show(this.div);}else{OpenLayers.Element.hide(this.div);}},getVisible:function(){return this.visible;},hide:function(){this.setVisible(false);},show:function(){this.setVisible(true);},toggle:function(){this.setVisible(!this.getVisible());},addLayer:function(evt){if(evt.layer){evt.layer.events.register('loadstart',this,this.increaseCounter);evt.layer.events.register('loadend',this,this.decreaseCounter);}},removeLayer:function(evt){if(evt.layer){evt.layer.events.unregister('loadstart',this,this.increaseCounter);evt.layer.events.unregister('loadend',this,this.decreaseCounter);}},getWaitText:function(){return __("Waiting for")+' '+this.counter+' '+(this.counter<=1?__('service'):__('services'));},setMap:function(map){OpenLayers.Control.prototype.setMap.apply(this,arguments);this.map.events.register('preaddlayer',this,this.addLayer);this.map.events.register('removelayer',this,this.removeLayer);for(var i=0;i<this.map.layers.length;i++){var layer=this.map.layers[i];layer.events.register('loadstart',this,this.increaseCounter);layer.events.register('loadend',this,this.decreaseCounter);}},increaseCounter:function(){this.counter++;if(this.counter>0){this.div.innerHTML=this.getWaitText();if(!this.maximized&&this.visible){this.maximizeControl();}}},decreaseCounter:function(){if(this.counter>0){this.div.innerHTML=this.getWaitText();this.counter--;}
691if(this.counter==0){if(this.maximized&&this.visible){this.minimizeControl();}}},draw:function(){OpenLayers.Control.prototype.draw.apply(this,arguments);return this.div;},minimizeControl:function(evt){this.div.style.display="none";this.maximized=false;if(evt!=null){OpenLayers.Event.stop(evt);}},maximizeControl:function(evt){this.div.style.display="block";this.maximized=true;if(evt!=null){OpenLayers.Event.stop(evt);}},destroy:function(){if(this.map){this.map.events.unregister('preaddlayer',this,this.addLayer);if(this.map.layers){for(var i=0;i<this.map.layers.length;i++){var layer=this.map.layers[i];layer.events.unregister('loadstart',this,this.increaseCounter);layer.events.unregister('loadend',this,this.decreaseCounter);}}}
692OpenLayers.Control.prototype.destroy.apply(this,arguments);},CLASS_NAME:"OpenLayers.Control.LoadingPanel"});OpenLayers.Control.StyleFeature=OpenLayers.Class(OpenLayers.Control.Button,{layer:null,initialize:function(layer,options){this.layer=layer;this.options=options?options:{};this.title=__('Change feature styles');OpenLayers.Control.Button.prototype.initialize.apply(this,[options]);this.trigger=this.toggleStyleEditor;this.displayClass="oleControlEnabled "+this.displayClass;},toggleStyleEditor:function(){if(!gxp||!gxp.VectorStylesDialog){Ext.Msg.alert(__('Warning'),__('Vector Layer style editing requires GXP with VectorStylesDialog'));return;}
693var layerRecord=Heron.App.getMapPanel().layers.getByLayer(this.layer);if(!this.styleEditor){this.styleEditor=new Ext.Window({layout:'auto',resizable:false,autoHeight:true,pageX:this.options.pageX?this.options.pageX:100,pageY:this.options.pageY?this.options.pageY:200,width:this.options.width?this.options.width:400,height:this.options.height?this.options.height:undefined,closeAction:'hide',title:__('Style Editor (Vector)'),items:[gxp.VectorStylesDialog.createVectorStylerConfig(layerRecord)]});}
694if(!this.styleEditor.isVisible()){this.styleEditor.show();}else{this.styleEditor.hide();}},CLASS_NAME:"OpenLayers.Control.StyleFeature"});if(OpenLayers.Editor&&OpenLayers.Editor.Control){OpenLayers.Editor.Control.StyleFeature=OpenLayers.Class(OpenLayers.Control.StyleFeature,{initialize:function(layer,options){OpenLayers.Control.StyleFeature.prototype.initialize.apply(this,[layer,options]);},CLASS_NAME:"OpenLayers.Editor.Control.StyleFeature"});}
695Ext.namespace("Heron.widgets");Heron.widgets.GoogleStreetViewPanel=Ext.extend(Ext.Panel,{panorama:null,heading:0,pitch:0,zoom:0,location:null,initComponent:function(){var defConfig={plain:true,border:false};Ext.applyIf(this,defConfig);return Heron.widgets.GoogleStreetViewPanel.superclass.initComponent.call(this);},afterRender:function(){var owner=this.ownerCt;if(owner){var size=owner.getSize();Ext.applyIf(this,size);if(!this.location){if(GeoExt.Popup){this.bubble(function(cmp){if(cmp instanceof GeoExt.Popup){this.location=cmp.location.clone().transform(cmp.map.getProjectionObject(),new OpenLayers.Projection("EPSG:4326"));return false;}},this);}}
696owner.addListener("resize",this.onResize,this);}
697Heron.widgets.GoogleStreetViewPanel.superclass.afterRender.call(this);var options={position:new google.maps.LatLng(this.location.lat,this.location.lon),pov:{heading:this.heading,pitch:this.pitch,zoom:this.zoom}};var panorama=this.panorama=new google.maps.StreetViewPanorama(this.body.dom,options);google.maps.event.addListener(panorama,'position_changed',function(){var pos=panorama.getPosition();});google.maps.event.addListener(panorama,'pov_changed',function(){var pov=panorama.getPov();var heading=pov.heading;var pitch=pov.pitch;});},beforeDestroy:function(){var i=0;delete this.panorama;Heron.widgets.GoogleStreetViewPanel.superclass.beforeDestroy.apply(this,arguments);},onResize:function(w,h){Heron.widgets.GoogleStreetViewPanel.superclass.onResize.apply(this,arguments);if(this.panorama){if(typeof this.panorama=="object"){google.maps.event.trigger(this.panorama,"resize");}}},setSize:function(width,height,animate){Heron.widgets.GoogleStreetViewPanel.superclass.setSize.apply(this,arguments);if(this.panorama){if(typeof this.panorama=="object"){google.maps.event.trigger(this.panorama,"resize");}}}});Ext.reg("hr_googlestreetviewpanel",Heron.widgets.GoogleStreetViewPanel);Ext.namespace("Heron.widgets");
697Heron.widgets.MapPanelOptsDefaults={center:'0,0',map:{units:'degrees',maxExtent:'-180,-90,180,90',extent:'-180,-90,180,90',maxResolution:0.703125,numZoomLevels:20,zoom:1,allOverlays:false,fractionalZoom:false,permalinks:{paramPrefix:'map',encodeType:false,prettyLayerNames:true},controls:[new OpenLayers.Control.Attribution(),new OpenLayers.Control.ZoomBox(),new OpenLayers.Control.Navigation({dragPanOptions:{enableKinetic:true}}),new OpenLayers.Control.LoadingPanel(),new OpenLayers.Control.PanPanel(),new OpenLayers.Control.ZoomPanel()]}};Heron.widgets.MapPanel=Ext.extend(GeoExt.MapPanel,{useMapContext:false,initComponent:function(){var gxMapPanelOptions={id:"gx-map-panel",split:false,layers:this.hropts.layers,items:this.items?this.items:[{xtype:"gx_zoomslider",vertical:true,height:150,x:18,y:85,aggressive:false,plugins:new GeoExt.ZoomSliderTip({template:__("Scale")+": 1 : {scale}<br>"+
698__("Resolution")+": {resolution}<br>"+
699__("Zoom")+": {zoom}"})}],statusbar:[{type:"epsgpanel"},{type:"-"},{type:"xcoord"},{type:"ycoord"},{type:"-"},{type:"measurepanel"}],tbar:new Ext.Toolbar({enableOverflow:true,items:[]}),bbar:new Ext.Toolbar({enableOverflow:true,items:[]})};if(this.hropts.hasOwnProperty("statusbar")){if(this.hropts.statusbar){Ext.apply(gxMapPanelOptions.statusbar,this.hropts.statusbar);}else{gxMapPanelOptions.statusbar={};}}
700Ext.apply(gxMapPanelOptions,Heron.widgets.MapPanelOptsDefaults);if(this.useMapContext){var context=Heron.App.getMapContext(this.context);this.hropts.settings=context.map.settings;this.hropts.layers=context.map.layers;}
701if(this.hropts.settings){Ext.apply(gxMapPanelOptions.map,this.hropts.settings);}
702if(gxMapPanelOptions.map.controls&&typeof gxMapPanelOptions.map.controls=="string"){gxMapPanelOptions.map.controls=undefined;}
703if(typeof gxMapPanelOptions.map.maxExtent=="string"){gxMapPanelOptions.map.maxExtent=OpenLayers.Bounds.fromString(gxMapPanelOptions.map.maxExtent);gxMapPanelOptions.maxExtent=gxMapPanelOptions.map.maxExtent;}
704if(typeof gxMapPanelOptions.map.extent=="string"){gxMapPanelOptions.map.extent=OpenLayers.Bounds.fromString(gxMapPanelOptions.map.extent);gxMapPanelOptions.extent=gxMapPanelOptions.map.extent;}
705if(!gxMapPanelOptions.map.center){gxMapPanelOptions.map.center=OpenLayers.LonLat.fromString('0,0');}else if(typeof gxMapPanelOptions.map.center=="string"){gxMapPanelOptions.map.center=OpenLayers.LonLat.fromString(gxMapPanelOptions.map.center);}
706gxMapPanelOptions.center=gxMapPanelOptions.map.center;if(gxMapPanelOptions.map.zoom){gxMapPanelOptions.zoom=gxMapPanelOptions.map.zoom;}
707if(gxMapPanelOptions.map.controls){gxMapPanelOptions.controls=gxMapPanelOptions.map.controls;}
708gxMapPanelOptions.map.layers=this.hropts.layers;Ext.apply(this,gxMapPanelOptions);var layer,prependLayer;if(gxMapPanelOptions.map.allOverlays&&gxMapPanelOptions.map.layers&&(gxMapPanelOptions.map.layers[0].minResolution||gxMapPanelOptions.map.layers[0].maxResolution)){var j=0,layers=gxMapPanelOptions.map.layers;for(j=0;j<layers.length;j++){layer=layers[j];if(!layer.minResolution&&!layer.maxResolution){prependLayer=layer;break;}}
709if(prependLayer){layers.splice(j,1);layers.unshift(prependLayer);}}
710if(this.layers){for(var i=0;i<this.layers.length;i++){if(this.layers[i]instanceof Array){try{this.layers[i]=Heron.Utils.createOLObject(this.layers[i]);}catch(err){Ext.Msg.alert(__('Warning'),__('Error creating Layer')+" - num="+i+" msg="+err.message+" args="+this.layers[i]);}}}}
711if(this.map.permalinks){this.prettyStateKeys=this.map.permalinks.prettyLayerNames;this.stateId=this.map.permalinks.paramPrefix;this.permalinkProvider=new GeoExt.state.PermalinkProvider({encodeType:this.map.permalinks.encodeType});Ext.state.Manager.setProvider(this.permalinkProvider);}
712Heron.widgets.MapPanel.superclass.initComponent.call(this);if(this.hropts.settings&&this.hropts.settings.formatX){this.formatX=this.hropts.settings.formatX;}
713if(this.hropts.settings&&this.hropts.settings.formatY){this.formatY=this.hropts.settings.formatY;}
714Heron.App.setMap(this.getMap());Heron.App.setMapPanel(this);Heron.widgets.ToolbarBuilder.build(this,this.hropts.toolbar,this.getTopToolbar());Heron.widgets.ToolbarBuilder.build(this,gxMapPanelOptions.statusbar,this.getBottomToolbar());},formatX:function(lon,precision){return"X: "+lon.toFixed(precision);},formatY:function(lat,precision){return"Y: "+lat.toFixed(precision);},getPermalink:function(){return this.permalinkProvider.getLink();},getMap:function(){return this.map;},afterRender:function(){Heron.widgets.MapPanel.superclass.afterRender.apply(this,arguments);var xy_precision=3;if(this.hropts&&this.hropts.settings&&this.hropts.settings.hasOwnProperty('xy_precision')){xy_precision=this.hropts.settings.xy_precision;}
715var formatX=this.formatX;var formatY=this.formatY;var onMouseMove=function(e){var lonLat=this.getLonLatFromPixel(e.xy);if(!lonLat){return;}
716if(this.displayProjection){lonLat.transform(this.getProjectionObject(),this.displayProjection);}
717var xcoord=Ext.getCmp("x-coord");if(xcoord){xcoord.setText(formatX(lonLat.lon,xy_precision));}
718var ycoord=Ext.getCmp("y-coord");if(ycoord){ycoord.setText(formatY(lonLat.lat,xy_precision));}};var map=this.getMap();map.events.register("mousemove",map,onMouseMove);var epsgTxt=map.getProjection();if(epsgTxt){var epsg=Ext.getCmp("map-panel-epsg");if(epsg){epsg.setText(epsgTxt);}}}});Ext.reg('hr_mappanel',Heron.widgets.MapPanel);Ext.namespace("Heron.widgets");Heron.widgets.MenuHandler=(function(){var options=null;function getContainer(){return Ext.getCmp(options.pageContainer);}
719function loadPage(page){var container=Ext.getCmp(options.pageContainer);if(page&&container&&options.pageRoot){container.load(options.pageRoot+'/'+page+'.html?t='+new Date().getMilliseconds());}}
720function loadURL(url){var container=Ext.getCmp(options.pageContainer);if(url&&container){container.load({url:url,nocache:true,scripts:true});}}
721function setActiveCard(card){if(card&&options.cardContainer){Ext.getCmp(options.cardContainer).getLayout().setActiveItem(card);}}
722var instance={init:function(hroptions){if(hroptions&&!options){options=hroptions;setActiveCard(options.defaultCard);loadPage(options.defaultPage);}},onSelect:function(item){setActiveCard(item.card);if(item.page){loadPage(item.page);}else if(item.url){loadURL(item.url)}},onLinkSelect:function(card,page){if(card){setActiveCard(card);}
723if(page){loadPage(page);}}};return(instance);})();
723Heron.widgets.MenuPanel=Ext.extend(Ext.Panel,{initComponent:function(){this.addListener('afterrender',function(){if(this.hropts){Heron.widgets.MenuHandler.init(this.hropts);}});Heron.widgets.MenuPanel.superclass.initComponent.apply(this,arguments);}});Ext.reg('hr_menupanel',Heron.widgets.MenuPanel);Ext.namespace("Heron.widgets");Heron.widgets.MultiLayerNode=Ext.extend(GeoExt.tree.LayerNode,{layerNames:[],layers:[],constructor:function(config){if(config.layers){this.layerNames=config.layers.split(",");if(this.layerNames[0]){arguments[0].layer=this.layerNames[0];}}
724for(var i=0;i<this.layerNames.length;i++){if(!this.layerStore||this.layerStore=="auto"){this.layerStore=GeoExt.MapPanel.guess().layers;}
725var j=this.layerStore.findBy(function(o){return o.get("title")==this.layerNames[i];},this);if(j!=-1){this.layers[i]=this.layerStore.getAt(j).getLayer();}}
726Heron.widgets.MultiLayerNode.superclass.constructor.apply(this,arguments);},render:function(bulkRender){this.layer=this.layers[0];Heron.widgets.MultiLayerNode.superclass.render.apply(this,arguments);},onLayerVisibilityChanged:function(){this.layer=this.layers[0];Heron.widgets.MultiLayerNode.superclass.onLayerVisibilityChanged.apply(this,arguments);},onCheckChange:function(node,checked){for(var i=0;i<this.layers.length;i++){this.layer=this.layers[i];Heron.widgets.MultiLayerNode.superclass.onCheckChange.apply(this,arguments);}},onStoreAdd:function(store,records,index){for(var i=0;i<this.layers.length;i++){this.layer=this.layers[i];Heron.widgets.MultiLayerNode.superclass.onStoreAdd.apply(this,arguments);}},onStoreRemove:function(store,record,index){for(var i=0;i<this.layers.length;i++){this.layer=this.layers[i];Heron.widgets.MultiLayerNode.superclass.onStoreRemove.apply(this,arguments);}},onStoreUpdate:function(store,record,operation){for(var i=0;i<this.layers.length;i++){this.layer=this.layers[i];Heron.widgets.MultiLayerNode.superclass.onStoreUpdate.apply(this,arguments);}},destroy:function(){for(var i=0;i<this.layers.length;i++){this.layer=this.layers[i];Heron.widgets.MultiLayerNode.superclass.destroy.apply(this,arguments);}}});Ext.tree.TreePanel.nodeTypes.hr_multilayer=Heron.widgets.MultiLayerNode;Ext.namespace("Heron.widgets");if(!Date.prototype.toISOString){(function(){function pad(number){var r=String(number);if(r.length===1){r='0'+r;}
727return r;}
728Date.prototype.toISOString=function(){return this.getUTCFullYear()
729+'-'+pad(this.getUTCMonth()+1)
730+'-'+pad(this.getUTCDate())
731+'T'+pad(this.getUTCHours())
732+':'+pad(this.getUTCMinutes())
733+':'+pad(this.getUTCSeconds())
734+'.'+String((this.getUTCMilliseconds()/1000).toFixed(3)).slice(2,5)
735+'Z';};}());}
736Heron.widgets.SimpleTimeSliderPanel=Ext.extend(Ext.Panel,{title:__('Simple Time Slider'),layerNames:[],startDateTime:new Date().toISOString(),endDateTime:new Date().toISOString(),stepTime:'PT1H',dateTime:new Date().toISOString(),dimensionName:'time',dimensionUnits:'ISO8601',timeLayers:[],initComponent:function(){this.dimension={name:this.dimensionName,currentValue:this.dateTime,defaultValue:this.dateTime,units:this.dimensionUnits,values:this.startDateTime+'/'+this.endDateTime+'/'+this.stepTime};var _this=this;_this.isDateRefreshing=false;_this.getCurrentValue=function(){return _this.getDateString();};_this.panelType='Range';_this.prevPanel=new Ext.Panel({region:'west',width:30,layout:'form',border:false,items:[new Ext.Button({width:30,text:'&lt;',hideLabel:true,listeners:{'click':function(e){_this.slider.setValue(_this.slider.getValue()-1);}}})]});_this.nextPanel=new Ext.Panel({region:'east',width:30,layout:'form',border:false,items:[new Ext.Button({width:30,text:'&gt;',hideLabel:true,listeners:{'click':function(e){_this.slider.setValue(_this.slider.getValue()+1);}}})]});_this.slider=new Ext.Slider({value:50,increment:1,minValue:0,maxValue:100,listeners:{change:{fn:function(a){_this.animateCheckBox.setValue(false);_this.refreshCheckBox.setValue(false);_this.sliderChanged();}}}});_this.slider.mySetValue=function(v){_this.slider.suspendEvents();_this.slider.setValue(v);_this.sliderChanged();_this.slider.resumeEvents();};_this.sliderPanel=new Ext.Panel({layout:'form',region:'center',items:[_this.slider],border:false});_this.sliderPNPanel=new Ext.Panel({layout:'border',region:'center',items:[_this.prevPanel,_this.sliderPanel,_this.nextPanel],border:false,frame:true});_this.dateSetMinMaxWindow=new Ext.Window({modal:true,labelWidth:125,frame:true,layout:'form',title:'Date Range',closeAction:'hide',bodyStyle:'padding:5px 5px 0',width:350,defaults:{width:175},defaultType:'datefield',bbar:[{xtype:'button',text:'Reset start and end dates',handler:function(){var minValue=_this.timeRange.getDateAtTimeStep(0);var maxValue=_this.timeRange.getDateAtTimeStep(_this.timeRange.timeSteps);_this.slider.setMinValue(0);_this.slider.setMaxValue(_this.timeRange.timeSteps);_this.sliderChanged();var startdt=_this.dateSetMinMaxWindow.getComponent('startdt');var enddt=_this.dateSetMinMaxWindow.getComponent('enddt');startdt.setMinValue(minValue);enddt.setMaxValue(maxValue);}}],items:[{fieldLabel:'Start Date',name:'startdt',itemId:'startdt',vt
736ype:'daterange',format:'Y-m-d\\TH:i:s\\Z',listeners:{valid:{fn:function(a){if(a.getValue()){try{_this.slider.setMinValue(_this.timeRange.getTimeStepFromDate(a.getValue()));_this.sliderChanged();}catch(e){error(e);}}}}}},{fieldLabel:'End Date',name:'enddt',itemId:'enddt',vtype:'daterange',format:'Y-m-d\\TH:i:s\\Z',listeners:{valid:{fn:function(a){if(a.getValue()){try{_this.slider.setMaxValue(_this.timeRange.getTimeStepFromDate(a.getValue()));_this.sliderChanged();}catch(e){error(e);}}}}}}]});_this.dateMinMaxSelector=new Ext.Button({iconCls:'date-trigger',width:'24',region:'east',handler:function(b){var startdt=_this.dateSetMinMaxWindow.getComponent('startdt');var enddt=_this.dateSetMinMaxWindow.getComponent('enddt');startdt.endDateField=enddt;enddt.startDateField=startdt;var minValue=_this.timeRange.getDateAtTimeStep(0);var maxValue=_this.timeRange.getDateAtTimeStep(_this.timeRange.timeSteps);startdt.myMin=minValue;startdt.myMax=maxValue;enddt.myMin=minValue;enddt.myMax=maxValue;var pos=b.getPosition();_this.dateSetMinMaxWindow.setPosition(pos[0],pos[1]);_this.dateSetMinMaxWindow.show(b);if(!startdt.getValue()||!enddt.getValue()){startdt.setValue(minValue);enddt.setValue(maxValue);}else{var date=_this.timeRange.getDateAtTimeStep(_this.slider.getPosition());if(date>minValue)
737startdt.setMinValue(date);else
738startdt.setMinValue(minValue);if(date<maxValue)
739enddt.setMinValue(date);else
740enddt.setMaxValue(maxValue);}}});_this.getDateString=function(){return _this.dateFieldYear.getValue()+"-"+
741_this.dateFieldMonth.getValue()+"-"+
742_this.dateFieldDay.getValue()+"T"+
743_this.dateFieldHour.getValue()+":"+
744_this.dateFieldMinute.getValue()+":"+
745_this.dateFieldSecond.getValue()+"Z";};_this.setDateString=function(dateString){_this.skipEvents=true;_this.dateFieldYear.setValue(dateString.substring(0,4));_this.dateFieldMonth.setValue(dateString.substring(5,7));_this.dateFieldDay.setValue(dateString.substring(8,10));_this.dateFieldHour.setValue(dateString.substring(11,13));_this.dateFieldMinute.setValue(dateString.substring(14,16));_this.dateFieldSecond.setValue(dateString.substring(17,19));_this.skipEvents=false;};var NumberExpr2digits=/[\d]{2}/;var NumberExpr4digits=/[\d]{4}/;var DateFieldDialog=Ext.extend(Ext.form.TextField,{initComponent:function(){var d=this;Ext.apply(this,{height:12,listeners:{valid:{fn:function(a){if(_this.skipEvents)return;var timeStep=0;try{timeStep=_this.timeRange.getTimeStepFromISODate(_this.getDateString());}catch(e){error("Invalid date entered!");return;}
746_this.slider.setValue(timeStep);}},specialkey:{fn:function(t,e){if(e.getKey()==e.ENTER){var v=t.getValue();if(isNumber(v)){if(v<10){v="0"+v;if(t.validator(v)){t.setValue(v);}}}}}}}});DateFieldDialog.superclass.initComponent.apply(this,arguments);}});function isNumber(o){return!isNaN(o-0);}
747var DateFieldSpinnerDialog=Ext.extend(Ext.ux.form.SmallSpinnerField,{initComponent:function(){this._width=this.width;this.doLayout=function(){this.spinner.doResize(this._width,0);}
748Ext.apply(this,{height:22,margins:'0 0 0 0',listeners:{valid:{fn:function(a){if(_this.skipEvents)return;var timeStep=0;try{timeStep=_this.timeRange.getTimeStepFromISODate(_this.getDateString());}catch(e){error("Invalid date entered!");return;}
749_this.slider.setValue(timeStep);}},specialkey:{fn:function(t,e){if(e.getKey()==e.ENTER){var v=t.getValue();if(isNumber(v)){if(v<10){v="0"+v;if(t.validator(v)){t.setValue(v);}}}}}}}});DateFieldSpinnerDialog.superclass.initComponent.apply(this,arguments);}});_this.dateChooser=new Ext.Button({iconCls:'date-trigger',width:'24',region:'east',frame:false,border:false,handler:function(b){var d=new Ext.Window({items:[new Ext.DatePicker({listeners:{'select':function(m,date){d.hide();_this.skipEvents=true;_this.dateFieldYear.setValue(date.getUTCFullYear());_this.dateFieldMonth.setValue(date.getUTCMonth()+1);_this.skipEvents=false;_this.dateFieldDay.setValue(date.getUTCDate()+1);}}})]});d.show();}});_this.dateFieldYear=new DateFieldSpinnerDialog({fieldLabel:'Year',width:45,validator:function(value){return NumberExpr4digits.test(value);}});_this.dateFieldMonth=new DateFieldSpinnerDialog({fieldLabel:'Month',width:34,validator:function(value){return NumberExpr2digits.test(value);}});_this.dateFieldDay=new DateFieldSpinnerDialog({fieldLabel:'Day',width:34,validator:function(value){return NumberExpr2digits.test(value);}});_this.dateFieldHour=new DateFieldSpinnerDialog({fieldLabel:'Hour',width:34,validator:function(value){return NumberExpr2digits.test(value);}});
749_this.dateFieldMinute=new DateFieldSpinnerDialog({fieldLabel:'Minute',width:34,validator:function(value){return NumberExpr2digits.test(value);}});_this.dateFieldSecond=new DateFieldSpinnerDialog({fieldLabel:'Second',width:34,validator:function(value){return NumberExpr2digits.test(value);}});_this.leftDatePanel=new Ext.Panel({layout:'hbox',width:400,layoutConfig:{pack:'start'},ctCls:'x-toolbar',items:[{xtype:'label',text:'Date: ',margins:'5px 0px 5px 0px'},_this.dateFieldYear,{xtype:'label',text:' - ',margins:'5px 0px 5px 0px'},_this.dateFieldMonth,{xtype:'label',text:' - ',margins:'5px 0px 5px 0px'},_this.dateFieldDay,{xtype:'label',text:'  Time: ',margins:'5px 0px 5px 5px'},_this.dateFieldHour,{xtype:'label',text:' : ',margins:'5px 0px 5px 0px'},_this.dateFieldMinute,{xtype:'label',text:' : ',margins:'5px 0px 5px 0px'},_this.dateFieldSecond],border:false,frame:true});_this.isDateRefreshRunning=false;_this.refreshCheckBox=new Ext.form.Checkbox({checked:false,boxLabel:'auto update',tooltip:'',listeners:{check:{fn:function(a,checked){if(checked){_this.isDateRefreshing=true;if(!_this.refreshTimer){_this.refreshTimer=new Timer();}
750_this.refreshTFunc=function(){if(_this.refreshCheckBox.getValue()==false){_this.isDateRefreshRunning=false;return;}
751_this.refresh();_this.isDateRefreshRunning=true;_this.refreshTimer.InitializeTimer(60*60,_this.refreshTFunc);}
752if(_this.isDateRefreshRunning==false)
753_this.refreshTFunc();}else
754_this.isDateRefreshing=false;}}}});var numberOfAnimationFrames=12;_this.startAnimation=function(){if(!_this.animationTimer){_this.animationTimer=new Timer();}
755_this.loopDates=new Array();var endDate=_this.dimension.currentValue;var endStep;if(endDate=='current'){endStep=_this.timeRange.timeSteps;}else{endStep=_this.timeRange.getTimeStepFromISODate(endDate);}
756_this.animateCheckBox.origStepBeforeAnimation=endStep;var numSteps=numberOfAnimationFrames;if(numSteps>endStep)
757numSteps=endStep;if(numSteps<=1){alert("Cannot animate: there is only one timestep available.");_this.animateCheckBox.setValue(false);_this.refreshCheckBox.setValue(false);return;}
758var startStep=endStep-(numSteps-1);if(startStep<0)startStep=0;for(var j=0;j<numSteps;j++){_this.loopDates[j]=_this.timeRange.getDateAtTimeStep(startStep+j).toISO8601();}
759_this.currentAnimationStep=0;_this.busy=0;_this.drawNext=function(){var curStep=_this.currentAnimationStep;var curDate=_this.loopDates[curStep];_this.loop();}
760_this.loop=function(){if(_this.animateCheckBox.getValue()==false){return;}
761_this.isAnimating=true;var timeStep;try{timeStep=_this.timeRange.getTimeStepFromISODate(_this.loopDates[_this.currentAnimationStep]);}catch(e){error(e);error('_this.currentAnimationStep='+_this.currentAnimationStep+' numSteps='+numSteps);}
762if(_this.currentAnimationStep==0){_this.animationTimer.InitializeTimer(50,_this.drawNext);}else{if(_this.currentAnimationStep+1>=numberOfAnimationFrames||_this.currentAnimationStep+1>=numSteps){_this.currentAnimationStep=0;_this.animationTimer.InitializeTimer(200,_this.drawNext);}else
763_this.animationTimer.InitializeTimer(50,_this.drawNext);}
764_this.currentAnimationStep++;}
765_this.loop();}
766_this.animateCheckBox=new Ext.form.Checkbox({checked:false,boxLabel:'animate',tooltip:'Loops 12 steps: From '+numberOfAnimationFrames+' steps back in time until provided time',listeners:{check:{fn:function(a,checked){if(checked){_this.startAnimation();}else{_this.isAnimating=false;if(_this.animateCheckBox.origStepBeforeAnimation){_this.slider.setValue(_this.animateCheckBox.origStepBeforeAnimation);}
767_this.sliderChanged();}}}}});_this.datePanel=new Ext.Panel({height:36,layout:'fit',region:'north',items:[_this.leftDatePanel],border:false,frame:false});_this.sliderChanged=function(){if(_this.animateCheckBox.getValue()==false){_this.setNewStep(_this.slider.getValue());}else{_this.setNewStep(_this.slider.getValue());_this.startAnimation();}
768var dateString=_this.timeRange.getDateAtTimeStep(_this.slider.getValue()).toISO8601();_this.setLayersDimension(dateString);};_this.setLayersDimension=function(dateString){try{for(var i=0;i<this.timeLayers.length;i++){this.timeLayers[i].mergeNewParams({'time':dateString});this.timeLayers[i].redraw();}}
769catch(err){alert('Error: '+err.message);}};_this.setNewStep=function(step){if(isNaN(step)){return;}
770function setNewDimValue(){var dateToSet=_this.timeRange.getDateAtTimeStep(step).toISO8601();_this.setDateString(dateToSet);}
771setNewDimValue();}
772_this.setDimension=function(dim){_this.dimension=dim;function setSlider(isodate){_this.timeRange=new parseISOTimeRangeDuration(isodate);_this.slider.maxValue=_this.timeRange.timeSteps;}
773setSlider(_this.dimension.values);var timeStep=0;_this.isAnimating=_this.animateCheckBox.getValue();var isRefreshing=_this.refreshCheckBox.getValue();if(_this.isAnimating==false){var currentValue=_this.getDateString();_this.setDateString(currentValue);timeStep=0;try{timeStep=_this.timeRange.getTimeStepFromISODate(currentValue);}catch(e){error("Unable to find closest timestep, trying to set default value "+dim.defaultValue);try{timeStep=_this.timeRange.getTimeStepFromISODate(dim.defaultValue);}catch(e){error("Unable to set default value");}}
774_this.slider.mySetValue(timeStep);}
775if(isRefreshing){_this.refreshCheckBox.setValue(true);}
776if(_this.isAnimating){_this.animateCheckBox.setValue(true);}};_this.refresh=function(){_this.dim.parentLayer.jumpToDimEnd=true;var layers=mainMap.map.getLayers();for(var l=0;l<layers.length;l++){doGetCapabilities(layers[l].service,layers[l].title,true,layers[l]);}}
777_this.datePanel.setTitle("Dimension '"+_this.dimension.name+"' with units '"+_this.dimension.units+"'");Ext.apply(this,{height:95,layout:'border',items:[_this.datePanel,_this.sliderPNPanel],listeners:{activate:{fn:function(){var a=_this.slider.getValue();_this.slider.suspendEvents();_this.slider.setValue(0,false);_this.slider.setValue(a,false);_this.slider.resumeEvents();}},collapse:{fn:function(){}}}});this.setDimension(this.dimension);this.setDateString(this.dateTime);Heron.widgets.SimpleTimeSliderPanel.superclass.initComponent.apply(this,arguments);}
777,listeners:{afterrender:function(c){var map=Heron.App.getMap();for(var i=0;i<this.layerNames.length;i++){this.timeLayers[i]=map.getLayersByName(this.layerNames[i])[0];}
778this.setLayersDimension(this.dateTime);}}});function Timer(){var timerID=null;var timerRunning=false;var delay=10;var secs;var initsecs;var timehandler='';var self=this;this.InitializeTimer=function(secstime,functionhandler){secs=secstime;initsecs=secs;timehandler=functionhandler;StopTheClock();if(secs>0)StartTheTimer();}
779this.ResetTimer=function(){secs=initsecs;}
780this.StopTimer=function(){StopTheClock();}
781function StopTheClock(){if(timerRunning)clearTimeout(timerID);timerRunning=false;}
782function TimeEvent(){if(timehandler!='')timehandler();}
783function StartTheTimer(){if(secs==0){StopTheClock();TimeEvent();}
784else{secs=secs-1;timerRunning=true;timerID=setTimeout(function(){StartTheTimer();},delay);}}}
785Ext.reg('hr_simpletimesliderpanel',Heron.widgets.SimpleTimeSliderPanel);function DateInterval(year,month,day,hour,minute,second){this.year=parseInt(year);this.month=parseInt(month);this.day=parseInt(day);this.hour=parseInt(hour);this.minute=parseInt(minute);this.second=parseInt(second);this.isRegularInterval=false;if(this.month==0&&this.year==0)this.isRegularInterval=true;this.getTime=function(){var timeres=0;if(this.month!=0)throw"month != 0";if(this.year!=0)throw"year != 0";timeres+=this.day*60*60*24;timeres+=this.hour*60*60;timeres+=this.minute*60;timeres+=this.second;timeres*=1000;return timeres;}
786this.toISO8601=function(){var isoTime='P';if(this.year!=0)isoTime+=this.year+'Y';if(this.month!=0)isoTime+=this.month+'M';if(this.day!=0)isoTime+=this.day+'D';if(this.hour!=0&&this.minute!=0&&this.second!=0)
787isoTime+='T';if(this.hour!=0)isoTime+=this.hour+'H';if(this.minute!=0)isoTime+=this.minute+'M';if(this.second!=0)isoTime+=this.second+'S';return isoTime;}};function parseISO8601DateToDate(isotime){try{var splittedOnT=isotime.split('T');var left=splittedOnT[0].split('-');var right=splittedOnT[1].split(':');var date=new Date(Date.UTC(left[0],left[1]-1,left[2],right[0],right[1],right[2].split('Z')[0]));date.add=function(dateInterval){if(dateInterval.isRegularInterval==false){if(dateInterval.year!=0)this.setUTCFullYear(this.getUTCFullYear()+dateInterval.year);if(dateInterval.month!=0)this.setUTCMonth(this.getUTCMonth()+dateInterval.month);if(dateInterval.day!=0)this.setUTCDate(this.getUTCDate()+dateInterval.day);if(dateInterval.hour!=0)this.setUTCHours(this.getUTCHours()+dateInterval.hour);if(dateInterval.minute!=0)this.setUTCMinutes(this.getUTCMinutes()+dateInterval.minute);if(dateInterval.second!=0)this.setUTCSeconds(this.getUTCSeconds()+dateInterval.second);}else{this.setTime(this.getTime()+dateInterval.getTime());}};date.substract=function(dateInterval){if(dateInterval.isRegularInterval==false){if(dateInterval.year!=0)this.setUTCFullYear(this.getUTCFullYear()-dateInterval.year);if(dateInterval.month!=0)this.setUTCMonth(this.getUTCMonth()-dateInterval.month);if(dateInterval.day!=0)this.setUTCDate(this.getUTCDate()-dateInterval.day);if(dateInterval.hour!=0)this.setUTCHours(this.getUTCHours()-dateInterval.hour);if(dateInterval.minute!=0)this.setUTCMinutes(this.getUTCMinutes()-dateInterval.minute);if(dateInterval.second!=0)this.setUTCSeconds(this.getUTCSeconds()-dateInterval.second);}else{this.setTime(this.getTime()-dateInterval.getTime());}};date.addMultipleTimes=function(dateInterval,numberOfSteps){if(dateInterval.isRegularInterval==false){if(dateInterval.year!=0)this.setUTCFullYear(this.getUTCFullYear()+dateInterval.year*numberOfSteps);if(dateInterval.month!=0)this.setUTCMonth(this.getUTCMonth()+dateInterval.month*numberOfSteps);if(dateInterval.day!=0)this.setUTCDate(this.getUTCDate()+dateInterval.day*numberOfSteps);if(dateInterval.hour!=0)this.setUTCHours(this.getUTCHours()+dateInterval.hour*numberOfSteps);if(dateInterval.minute!=0)this.setUTCMinutes(this.getUTCMinutes()+dateInterval.minute*numberOfSteps);if(dateInterval.second!=0)this.setUTCSeconds(this.getUTCSeconds()+dateInterval.second*numberOfSteps);}else{this.setTime(this.getTime()+dateInterval.getTime()*numberOfSteps);}};date.substractMultipleTimes=function(dateInterval,numberOfSteps){if(dateInterval.isRegularInterval==false){if(dateInterval.year!=0)this.setUTCFullYear(this.getUTCFullYear()-dateInterval.year*numberOfSteps);if(dateInterval.month!=0)this.setUTCMonth(this.getUTCMonth()-dateInterval.month*numberOfSteps);if(dateInterval.day!=0)this.setUTCDate(this.getUTCDate()-dateInterval.day*numberOfSteps);if(dateInterval.hour!=0)this.setUTCHours(this.getUTCHours()-dateInterval.hour*numberOfSteps);if(dateInterval.minute!=0)this.setUTCMinutes(this.getUTCMinutes()-dateInterval.minute*numberOfSteps);if(dateInterval.second!=0)this.setUTCSeconds(this.getUTCSeconds()-dateInterval.second*numberOfSteps);}else{this.setTime(this.getTime()-dateInterval.getTime()*numberOfSteps);}};date.toISO8601=function(){function prf(input,width){var string=input+'';var len=width-string.length;var j,zeros='';for(j=0;j<len;j++)zeros+="0"+zeros;string=zeros+string;return string;}
788var iso=prf(this.getUTCFullYear(),4)+"-"+prf(this.getUTCMonth()+1,2)+"-"+prf(this.getUTCDate(),2)+"T"+prf(this.getUTCHours(),2)+":"+prf(this.getUTCMinutes(),2)+":"+prf(this.getUTCSeconds(),2)+'Z';return iso;}
789date.clone=function(){return parseISO8601DateToDate(date.toISO8601());}
790return date;}
791catch(e){throw("In parseISO8601DateToDate:"+e);}}
792function parseISO8601IntervalToDateInterval(isotime){if(isotime.charAt(0)=='P'){var splittedOnT=isotime.split('T');var years=0,months=0,days=0,hours=0,minutes,seconds;minutes=0;seconds=0;var YYYYMMDDPart=splittedOnT[0].split('P')[1];var HHMMSSPart=splittedOnT[1];if(YYYYMMDDPart){var yearIndex=YYYYMMDDPart.indexOf("Y");var monthIndex=YYYYMMDDPart.indexOf("M");var dayIndex=YYYYMMDDPart.indexOf("D");if(yearIndex!=-1){years=(YYYYMMDDPart.substring(0,yearIndex));}
793if(monthIndex!=-1){months=(YYYYMMDDPart.substring(yearIndex+1,monthIndex));}
794if(dayIndex!=-1){var start=yearIndex;if(monthIndex!=-1)start=monthIndex;days=(YYYYMMDDPart.substring(start+1,dayIndex));}}
795if(HHMMSSPart){var hourIndex=HHMMSSPart.indexOf("H");var minuteIndex=HHMMSSPart.indexOf("M");var secondIndex=HHMMSSPart.indexOf("S");if(hourIndex!=-1){hours=(HHMMSSPart.substring(0,hourIndex));}
796if(minuteIndex!=-1){minutes=(HHMMSSPart.substring(hourIndex+1,minuteIndex));}
797if(secondIndex!=-1){var start=hourIndex;if(minuteIndex!=-1)start=minuteIndex;seconds=(HHMMSSPart.substring(start+1,secondIndex));}}
798return new DateInterval(years,months,days,hours,minutes,seconds);}}
799function getNumberOfTimeSteps(starttime,stoptime,interval){var steps=0;
799if(interval.month!=0||interval.year!=0){var testtime=starttime.clone();var timestopms=stoptime.getTime();while(testtime.getTime()<timestopms){testtime.add(interval);steps++;}
800return steps;}else{steps=parseInt(((stoptime.getTime()-starttime.getTime())/interval.getTime())+0.5);return steps;}}
801function parseISOTimeRangeDuration(isoTimeRangeDuration){var times=isoTimeRangeDuration.split('/');var timeStepDateArray=new Array();if(times[2]==undefined){times[2]='PT1M';}
802if(times[1]==undefined){times[1]=times[0];times[2]='PT1M';}
803this.startTime=parseISO8601DateToDate(times[0]);this.stopTime=parseISO8601DateToDate(times[1]);this.timeInterval=parseISO8601IntervalToDateInterval(times[2]);this.timeSteps=getNumberOfTimeSteps(this.startTime,this.stopTime,this.timeInterval);this.getTimeSteps=function(){return this.timeSteps;};this.getDateAtTimeStep=function(currentStep){if(this.timeInterval.isRegularInterval==false){var temptime=this.startTime.clone();temptime.addMultipleTimes(this.timeInterval,currentStep);return temptime;}else{var temptime=this.startTime.clone();var dateIntervalTime=this.timeInterval.getTime();dateIntervalTime*=currentStep;temptime.setTime(temptime.getTime()+dateIntervalTime);return temptime;}};this.getTimeStepFromISODate=function(currentISODate){try{currentDate=parseISO8601DateToDate(currentISODate);}catch(e){throw("The date '"+currentISODate+"' is not a valid date");}
804return this.getTimeStepFromDate(currentDate);};this.getTimeStepFromDate=function(currentDate,throwIfOutsideRange){if(!throwIfOutsideRange)throwIfOutsideRange=false;var currentDateTime=currentDate.getTime();if(currentDateTime<this.startTime.getTime()){if(throwIfOutsideRange==true){throw"getTimeStepFromDate: requested date is earlier than this time range ";}
805return 0;}
806if(currentDateTime>this.stopTime.getTime()){if(throwIfOutsideRange==true){throw"getTimeStepFromDate: requested date is later than this time range ";}
807return this.timeSteps;}
808if(currentDateTime>=this.stopTime.getTime())return this.timeSteps;var timeStep=0;if(this.timeInterval.isRegularInterval==false){var temptime=this.startTime.clone();for(j=0;j<=this.timeSteps;j++){var temptimeTime=temptime.getTime();temptime.add(this.timeInterval);var temptimeTime_1stepfurther=temptime.getTime();if(currentDateTime>=temptimeTime&&currentDateTime<temptimeTime_1stepfurther)return j;}
809throw"Date "+currentDate.toISO8601()+" not found!";}else{timeStep=(currentDate.getTime()-this.startTime.getTime())/this.timeInterval.getTime();timeStep=parseInt(timeStep+0.5);return timeStep;}
810throw"Date "+currentDate.toISO8601()+" not found";return-1;};this.getTimeStepFromDate_WithinRange=function(currentDate){return this.getTimeStepFromDate(currentDate,true);};this.getTimeStepFromDate_Clipped=function(currentDate){return this.getTimeStepFromDate(currentDate,false);}}
811Ext.namespace("Heron.widgets.search");Heron.widgets.search.OpenLSSearchCombo=Ext.extend(Ext.form.ComboBox,{map:null,width:240,listWidth:400,loadingText:__('Searching...'),emptyText:__('Search with OpenLS'),zoom:8,minChars:4,queryDelay:200,maxRows:'10',url:'http://geodata.nationaalgeoregister.nl/geocoder/Geocoder?',hideTrigger:true,displayField:'text',forceSelection:false,autoSelect:false,queryParam:'zoekterm',initComponent:function(){Heron.widgets.search.OpenLSSearchCombo.superclass.initComponent.apply(this,arguments);this.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:this.url,method:'GET'}),fields:[{name:"lon",type:"number"},{name:"lat",type:"number"},"text"],reader:new Heron.data.OpenLS_XLSReader()});if(this.zoom>0){this.on("select",function(combo,record,index){this.setValue(record.data.text);var position=new OpenLayers.LonLat(record.data.lon,record.data.lat);position.transform(new OpenLayers.Projection("EPSG:28992"),this.map.getProjectionObject());this.map.setCenter(position,this.zoom);this.collapse();},this);}}});Ext.reg('hr_openlssearchcombo',Heron.widgets.search.OpenLSSearchCombo);Ext.namespace("Heron.widgets.search");Heron.widgets.search.LocatieserverSearchCombo=Ext.extend(Ext.form.ComboBox,{map:null,width:240,listWidth:400,loadingText:__('Searching...'),emptyText:__('Search with OpenLS'),zoom:8,minChars:2,queryDelay:200,maxRows:'10',url:'http://geodata.nationaalgeoregister.nl/locatieserver/suggest?wt=xml',lookupUrl:'http://geodata.nationaalgeoregister.nl/locatieserver/lookup?wt=xml',hideTrigger:true,displayField:'text',forceSelection:false,autoSelect:false,queryParam:'q',initComponent:function(){Heron.widgets.search.LocatieserverSearchCombo.superclass.initComponent.apply(this,arguments);this.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:this.url,method:'GET'}),fields:["id","type","baseText","text"],reader:new Heron.data.LocatieserverReader()});if(this.zoom>0){this.on("select",function(combo,record,index){this.setValue(record.data.baseText);lookupUrl=this.lookupUrl+"&id="+record.data.id;map=this.map;zoom=this.zoom;Ext.Ajax.request({url:lookupUrl,method:'GET',success:function(conn,response,options,eOpts){var doc=conn.responseXML;var root=doc.documentElement||doc;var opts={namespaces:{}};var format=new OpenLayers.Format.XML(opts);var elms=format.getElementsByTagNameNS(root,'','str');Ext.each(elms,function(elm,index){var name=format.getAttributeNS(elm,'',"name");if(name=="centroide_rd"){var str=format.getChildValue(elm);matches=str.match(/POINT\((.+) (.+)\)/);var position=new OpenLayers.LonLat(parseFloat(matches[1]),parseFloat(matches[2]));map.setCenter(position,zoom);}});},failure:function(conn,response,options,eOpts){console.log("Fout: "+conn.responseText);}});this.collapse();},this);}}});Ext.reg('hr_locatieserversearchcombo',Heron.widgets.search.LocatieserverSearchCombo);Ext.namespace("Heron.widgets.search");Heron.widgets.search.NominatimSearchCombo=Ext.extend(Ext.form.ComboBox,{map:null,width:240,listWidth:400,loadingText:__('Searching...'),emptyText:__('Search Nominatim'),zoom:8,minChars:4,queryDelay:50,maxRows:'10',extent:false,url:'http://open.mapquestapi.com/nominatim/v1/search?format=json&addressdetails=1',storeFields:["place_id","display_name",{name:"address",type:"Object"},"boundingbox",{name:"lat",type:"number"},{name:"lon",type:"number"}],tpl:'<tpl for="."><tpl for="address"><div class="x-combo-list-item">{road} {postcode} {city} {country}</div></tpl></tpl>',displayTpl:'<tpl for="."><tpl for="address">{road} {city} {country}</tpl></tpl>
811',lang:'en',charset:'UTF8',hideTrigger:true,displayField:'display_name',forceSelection:true,queryParam:'q',initComponent:function(){if(this.displayTpl){this.displayTplObj=new Ext.XTemplate(this.displayTpl);}
812Heron.widgets.search.NominatimSearchCombo.superclass.initComponent.apply(this,arguments);var url=this.url;if(this.extent){var maxExt=OpenLayers.Bounds.fromString(this.extent);maxExt.transform(this.map.getProjectionObject(),new OpenLayers.Projection("EPSG:4326"));url=url+"&viewbox="+maxExt.toString()+"&bounded=1";}
813this.store=new Ext.data.JsonStore({proxy:new Ext.data.HttpProxy({url:url,method:'GET'}),idProperty:'place_id',successProperty:null,totalProperty:null,fields:this.storeFields});if(this.zoom>0){this.on("select",function(combo,record,index){var result=record.data;var value=result[this.displayField];if(this.displayTplObj){value=this.displayTplObj.apply(result);}
814this.setValue(value);var lonlat1=new OpenLayers.LonLat(result.boundingbox[2],result.boundingbox[0]);var lonlat2=new OpenLayers.LonLat(result.boundingbox[3],result.boundingbox[1]);lonlat1.transform(new OpenLayers.Projection("EPSG:4326"),this.map.getProjectionObject());lonlat2.transform(new OpenLayers.Projection("EPSG:4326"),this.map.getProjectionObject());var bounds=new OpenLayers.Bounds();bounds.extend(lonlat1);bounds.extend(lonlat2);this.map.zoomToExtent(bounds);this.collapse();},this);}}});Ext.reg('hr_nominatimsearchcombo',Heron.widgets.search.NominatimSearchCombo);Ext.namespace("Heron.widgets");Heron.widgets.PrintPreviewWindow=Ext.extend(Ext.Window,{title:__('Print Preview'),printCapabilities:null,modal:true,border:false,resizable:false,width:400,autoHeight:true,layout:'fit',method:'POST',showTitle:true,mapTitle:null,mapTitleYAML:"mapTitle",showComment:true,mapComment:null,mapCommentYAML:"mapComment",showFooter:true,mapFooter:null,mapFooterYAML:"mapFooter",printAttribution:true,mapAttribution:null,mapAttributionYAML:"mapAttribution",showRotation:true,showOutputFormats:false,showLegend:true,mapLegend:null,showLegendChecked:false,mapLimitScales:true,mapPreviewAutoHeight:true,mapPreviewHeight:300,excludeLayers:['OpenLayers.Handler.Polygon','OpenLayers.Handler.RegularPolygon','OpenLayers.Handler.Path','OpenLayers.Handler.Point'],legendDefaults:{useScaleParameter:true,baseParams:{FORMAT:"image/png"}},initComponent:function(){if(this.hropts){Ext.apply(this,this.hropts);}
815if(!this.url){Ext.Msg.alert(__('Warning'),__('No print provider url property passed in hropts.'));return;}
816var busyMask=new Ext.LoadMask(Ext.getBody(),{msg:__('Loading print data...')});busyMask.show();var self=this;Ext.Ajax.request({url:this.url+'/info.json',method:'GET',params:null,success:function(result,request){self.printCapabilities=Ext.decode(result.responseText);self.addItems();busyMask.hide();},failure:function(result,request){busyMask.hide();Ext.Msg.alert(__('Warning'),__('Error getting Print options from server: ')+this.url);}});Heron.widgets.PrintPreviewWindow.superclass.initComponent.call(this);},addItems:function(){var legendPanel=new Heron.widgets.LayerLegendPanel({renderTo:document.body,hidden:true,defaults:this.legendDefaults});var self=this;var item=new GeoExt.ux.PrintPreview({autoHeight:true,printMapPanel:{limitScales:this.mapLimitScales,map:{controls:[new OpenLayers.Control.Navigation({zoomBoxEnabled:false,zoomWheelEnabled:(this.showRotation)?true:false}),new OpenLayers.Control.Zoom()]}},printProvider:{method:this.method,capabilities:this.printCapabilities,outputFormatsEnabled:this.showOutputFormats,listeners:{"print":function(){self.close();},"printexception":function(printProvider,result){Ext.Msg.alert(__('Warning'),__('Error from Print server: ')+result.statusText);},"beforeencodelayer":function(printProvider,layer){for(var i=0;i<self.excludeLayers.length;i++){if(layer.name==self.excludeLayers[i]){return false;}}
817return true;}}},sourceMap:this.mapPanel,showTitle:this.showTitle,mapTitle:this.mapTitle,mapTitleYAML:this.mapTitleYAML,showComment:this.showComment,mapComment:this.mapComment,mapCommentYAML:this.mapCommentYAML,showFooter:this.showFooter,mapFooter:this.mapFooter,mapFooterYAML:this.mapFooterYAML,printAttribution:this.printAttribution,mapAttribution:this.mapAttribution,mapAttributionYAML:this.mapAttributionYAML,showRotation:this.showRotation,showOutputFormats:this.showOutputFormats,showLegend:this.showLegend,mapLegend:(this.showLegend
817)?legendPanel:null,showLegendChecked:this.showLegendChecked,mapPreviewAutoHeight:this.mapPreviewAutoHeight,mapPreviewHeight:this.mapPreviewHeight});if(this.showRotation){var ctrlPanel=new OpenLayers.Control.Zoom();item.printMapPanel.map.addControl(ctrlPanel);}
818this.add(item);this.doLayout();this.show();this.center();},listeners:{show:function(node){}}});Ext.reg('hr_printpreviewwindow',Heron.widgets.PrintPreviewWindow);Ext.namespace("Heron.widgets.search");Heron.widgets.search.FeaturePanel=Ext.extend(Ext.Panel,{downloadable:true,displayPanels:['Table'],exportFormats:['CSV','XLS','GMLv2','GeoJSON','Shapefile','WellKnownText'],columnCapitalize:true,showTopToolbar:true,showGeometries:true,featureSelection:true,loadMask:true,exportConfigs:{CSV:{name:'Comma Separated Values (CSV)',formatter:'CSVFormatter',fileExt:'.csv',mimeType:'text/csv'},XLS:{name:'Excel (XLS)',formatter:'ExcelFormatter',fileExt:'.xls',mimeType:'application/vnd.ms-excel'},GMLv2:{name:'GML v2',formatter:'OpenLayersFormatter',format:new OpenLayers.Format.GML.v2({featureType:'heronfeat',featureNS:'http://heron-mc.org'}),fileExt:'.gml',mimeType:'text/xml'},GeoJSON:{name:'GeoJSON',formatter:'OpenLayersFormatter',format:'OpenLayers.Format.GeoJSON',fileExt:'.json',mimeType:'text/plain'},GeoPackage:{name:'GeoPackage',formatter:'OpenLayersFormatter',format:'OpenLayers.Format.GeoJSON',targetFormat:'GPKG',fileExt:'.gpkg',mimeType:'application/binary'},Shapefile:{name:'Esri Shapefile',formatter:'OpenLayersFormatter',format:'OpenLayers.Format.GeoJSON',targetFormat:'ESRI Shapefile',fileExt:'.zip',mimeType:'application/zip'},WellKnownText:{name:'Well-known Text (WKT)',formatter:'OpenLayersFormatter',format:'OpenLayers.Format.WKT',fileExt:'.wkt',mimeType:'text/plain'}},separateSelectionLayer:false,zoomOnFeatureSelect:false,zoomOnRowDoubleClick:true,zoomLevelPointSelect:10,zoomLevelPoint:10,zoomToDataExtent:false,autoConfig:true,autoConfigMaxSniff:40,hideColumns:[],columnFixedWidth:100,autoMaxWidth:300,autoMinWidth:45,vectorLayerOptions:{noLegend:true,displayInLayerSwitcher:false},tableGrid:null,propGrid:null,mainPanel:null,store:null,initComponent:function(){Ext.apply(this,{layout:"fit"});if(this.columns){this.autoConfig=false;}
819Ext.apply(this,this.hropts);if(this.featureSelection){this.showGeometries=true;}
820if(this.displayPanels.indexOf('Grid')>=0){this.displayPanels.splice(this.displayPanels.indexOf('Grid'),1);if(this.displayPanels.indexOf('Table')<0){this.displayPanels.push('Table');}}
821if(this.showGeometries){var layer=this.layer=new OpenLayers.Layer.Vector(this.title,this.vectorLayerOptions);this.map=Heron.App.getMap();this.map.addLayer(this.layer);var self=this;if(this.featureSelection&&this.zoomOnFeatureSelect){layer.events.on({"featureselected":function(e){self.zoomToFeature(self,e.feature.geometry);},"dblclick":function(e){self.zoomToFeature(self,e.feature.geometry);},"scope":layer});}
822if(this.separateSelectionLayer){this.selLayer=new OpenLayers.Layer.Vector(this.title+'_Sel',{noLegend:true,displayInLayerSwitcher:false});this.selLayer.styleMap.styles['default']=layer.styleMap.styles['select'];this.selLayer.style=this.selLayer.styleMap.styles['default'].defaultStyle;layer.styleMap.styles['select']=layer.styleMap.styles['default'].clone();layer.styleMap.styles['select'].defaultStyle.fillColor='white';layer.styleMap.styles['select'].defaultStyle.fillOpacity=0.0;this.map.addLayer(this.selLayer);this.map.setLayerIndex(this.selLayer,this.map.layers.length-1);this.layer.events.on({featureselected:this.updateSelectionLayer,featureunselected:this.updateSelectionLayer,scope:this});}}
823this.setupStore(this.features);if(this.featureSelection&&!this.sm){this.sm=new GeoExt.grid.FeatureSelectionModel();}
824if(this.showTopToolbar){this.tbar=this.createTopToolbar();}
825Heron.widgets.search.FeaturePanel.superclass.initComponent.call(this);this.tableGrid=new Ext.grid.GridPanel({id:'grd_Table'+'_'+this.featureSetKey,store:this.store,title:this.title,autoScroll:true,featureType:this.featureType,header:false,features:this.features,autoConfig:this.autoConfig,autoConfigMaxSniff:this.autoConfigMaxSniff,hideColumns:this.hideColumns,columnFixedWidth:this.columnFixedWidth,autoMaxWidth:this.autoMaxWidth,autoMinWidth:this.autoMinWidth,columnCapitalize:this.columnCapitalize,showGeometries:this.showGeometries,featureSelection:this.featureSelection,gridCellRenderers:this.gridCellRenderers,columns:this.columns,showTopToolbar:this.showTopToolbar,exportFormats:this.exportFormats,hropts:{zoomOnRowDoubleClick:true,zoomOnFeatureSelect:false,zoomLevelPointSelect:8},sm:this.sm});if(this.zoomOnRowDoubleClick){this.tableGrid.on('celldblclick',function(grid,rowIndex,columnIndex,e){var record=grid.getStore().getAt(rowIndex);var feature=record.getFeature();self.zoomToFeature(self,feature.geometry);});}
826if((this.displayPanels.indexOf('Table')>=0)&&(this.displayPanels.indexOf('Detail')>=0)){this.tableGrid.on('cellclick',function(grid,rowIndex,columnIndex,e){if(columnIndex==0){self.dis
826playVertical('goto',rowIndex);}});}
827if(this.displayPanels.indexOf('Detail')>=0){this.propGrid=new Ext.grid.PropertyGrid({id:'grd_Detail'+'_'+this.featureSetKey,listeners:{'beforeedit':function(e){return false;}},title:this.title,featureType:this.featureType,header:false,features:this.features,autoConfig:this.autoConfig,autoConfigMaxSniff:this.autoConfigMaxSniff,autoHeight:false,hideColumns:this.hideColumns,columnFixedWidth:this.columnFixedWidth,autoMaxWidth:this.autoMaxWidth,autoMinWidth:this.autoMinWidth,columnCapitalize:this.columnCapitalize,showGeometries:this.showGeometries,featureSelection:this.featureSelection,gridCellRenderers:this.gridCellRenderers,columns:this.columns,showTopToolbar:this.showTopToolbar,exportFormats:this.exportFormats,curRecordNr:0,hropts:{zoomOnRowDoubleClick:true,zoomOnFeatureSelect:false,zoomLevelPointSelect:8}});}
828this.cardPanels=[];if(this.tableGrid)
829this.cardPanels.push(this.tableGrid);if(this.propGrid)
830this.cardPanels.push(this.propGrid);var activeItem=0;if(this.displayPanels.length>0){activeItem='grd_'+this.displayPanels[0]+'_'+this.featureSetKey;}
831this.mainPanel=new Ext.Panel({border:false,activeItem:activeItem,layout:"card",items:this.cardPanels});this.add(this.mainPanel);if((this.showTopToolbar)&&(this.displayPanels.indexOf('Table')>=0)&&(this.displayPanels.indexOf('Detail')>=0)){this.tableGrid.addListener("activate",this.onActivateTable,this);this.propGrid.addListener("activate",this.onActivateDetail,this);this.tableGrid.addListener("afterlayout",this.onAfterlayoutTable,this);this.propGrid.addListener("afterlayout",this.onAfterlayoutDetail,this);this.topToolbar.addListener("afterlayout",this.onAfterlayoutTopToolbar,this);}
832this.addListener("afterrender",this.onPanelRendered,this);this.addListener("show",this.onPanelShow,this);this.addListener("hide",this.onPanelHide,this);},activateDisplayPanel:function(name){if(!this.mainPanel.getLayout().setActiveItem){return;}
833this.mainPanel.getLayout().setActiveItem("grd_"+name);},createTopToolbar:function(){var tbarItems=[this.tbarText=new Ext.Toolbar.TextItem({itemId:'result',text:__(' ')})];tbarItems.push('->');if(this.downloadable){var downloadMenuItems=[];var item;for(var j=0;j<this.exportFormats.length;j++){var exportFormat=this.exportFormats[j];var exportFormatConfig=exportFormat instanceof Object?exportFormat:this.exportConfigs[exportFormat];if(!exportFormatConfig){Ext.Msg.alert(__('Warning'),__('Invalid export format configured: '+exportFormat));continue;}
834item={text:__('as')+' '+exportFormatConfig.name,cls:'x-btn',iconCls:'icon-table-export',scope:this,exportFormatConfig:exportFormatConfig,handler:function(evt){this.exportData(evt.exportFormatConfig);}};downloadMenuItems.push(item);}
835if(this.downloadInfo&&this.downloadInfo.downloadFormats){var downloadFormats=this.downloadInfo.downloadFormats;for(var k=0;k<downloadFormats.length;k++){var downloadFormat=downloadFormats[k];item={text:__('as')+' '+downloadFormat.name,cls:'x-btn',iconCls:'icon-table-export',downloadFormat:downloadFormat.outputFormat,fileExt:downloadFormat.fileExt,scope:this,handler:function(evt){this.downloadData(evt.downloadFormat,evt.fileExt);}};downloadMenuItems.push(item);}}
836if(downloadMenuItems.length>0){tbarItems.push({itemId:'download',text:__('Download'),cls:'x-btn-text-icon',iconCls:'icon-table-save',tooltip:__('Choose a Download Format'),menu:new Ext.menu.Menu({style:{overflow:'visible'},items:downloadMenuItems})});}}
837if((this.showTopToolbar)&&(this.displayPanels.indexOf('Table')>=0)&&(this.displayPanels.indexOf('Detail')>=0)){var blnTable=(this.displayPanels.indexOf('Detail')==0);tbarItems.push('->');tbarItems.push({itemId:'table-detail',text:(blnTable)?__('Table'):__('Detail'),cls:'x-btn-text-icon',iconCls:(blnTable)?'icon-table':'icon-detail',tooltip:(blnTable)?__('Show record(s) in a table grid'):__('Show single record'),enableToggle:true,pressed:false,scope:this,handler:function(btn){if(btn.pressed){if(btn.iconCls=='icon-table'){this.displayGrid();}else{var selRecord=Ext.data.Record;selRecord=this.tableGrid.selModel.getSelected();if(selRecord){var selIndex=this.tableGrid.store.indexOf(selRecord);this.displayVertical('goto',selIndex);}
838else{this.displayVertical('first');}}
839btn.toggle(false,false);}}});}
840tbarItems.push('->');tbarItems.push({itemId:'clear',text:__('Clear'),cls:'x-btn-text-icon',iconCls:'icon-table-clear',tooltip:__('Remove all results'),scope:this,handler:function(){this.removeFeatures();}});if((this.showTopToolbar)&&(this.displayPanels.indexOf('Detail')>=0)){tbarItems.push('->');tbarItems.push({itemId:'nextrec',text:__(''),cls:'x-btn-text-icon',iconCls:'icon-arrow-right',tooltip:__('Show next record'),scope:this,visible:false,disabled:true,handler:function(){this.displayVertical('next');}});tbarItems.push('->');tbarItems.push({itemId:'prevrec',text:__(''),cls:'x-btn-text-icon',iconCls:'icon-arrow-left',tooltip:__('Show previous record'),scope:this,hidden:true,disabled:true,handler:function(){this.displayVertical('previous');}});}
841return new Ext.Toolbar({enableOverflow:true,items:tbarItems});},displayGrid:function(){this.activateDisplayPanel('Table'+'_'+this.featureSetKey);this.updateTbarText('table');},displayVertical:function(action,intRecNew){var column;var objCount=this.tableGrid.store?this.tableGrid.store.getCount():0;var value;if(objCount>0){switch(action){case'first':this.propGrid.curRecordNr=0;break;case'goto':this.propGrid.curRecordNr=intRecNew;break;case'previous':this.propGrid.curRecordNr--;break;case'next':this.propGrid.curRecordNr++;break;}
842var sourceStore=this.mainPanel.items.items[0].store.data.items[this.propGrid.curRecordNr].data.feature.attributes;this.propGrid.store.removeAll();for(var c=0;c<this.columns.length;c++){column=this.columns[c];if(column.id!='btn_detail'){if(column.renderer){value=column.renderer(sourceStore[column.dataIndex],null,this.mainPanel.items.items[0].store.data.items[this.propGrid.curRecordNr]);}else{value=sourceStore[column.dataIndex];}
843var rec=new Ext.grid.PropertyRecord({name:column.header,value:value});this.propGrid.store.add(rec);}}
844if(action!='first'){this.tableGrid.selModel.selectRow(this.propGrid.curRecordNr,false);}}
845if(objCount>1){this.topToolbar.items.get('prevrec').show();this.topToolbar.items.get('nextrec').show();if(this.propGrid.curRecordNr==objCount-1){this.topToolbar.items.get('prevrec').setDisabled(false);this.topToolbar.items.get('nextrec').setDisabled(true);}
846else if(this.propGrid.curRecordNr==0){this.topToolbar.items.get('prevrec').setDisabled(true);this.topToolbar.items.get('nextrec').setDisabled(false);}
847else{this.topToolbar.items.get('prevrec').setDisabled(false);this.topToolbar.items.get('nextrec').setDisabled(false);}}else{this.topToolbar.items.get('prevrec').hide();this.topToolbar.items.get('nextrec').hide();}
848this.activateDisplayPanel('Detail'+'_'+this.featureSetKey);this.updateTbarText('detail');},loadFeatures:function(features,featureType){this.removeFeatures();this.featureType=featureType;if(!features||features.length==0){return;}
849this.showLayer();this.store.loadData(features);if(this.zoomToDataExtent){if(features.length==1&&features[0].geometry.CLASS_NAME=="OpenLayers.Geometry.Point"){var point=features[0].geometry.getCentroid();this.map.setCenter(new OpenLayers.LonLat(point.x,point.y),this.zoomLevelPoint);}else if(this.layer){this.map.zoomToExtent(this.layer.getDataExtent());}}
850if(this.displayPanels.length>0){if(this.displayPanels[0]=='Table')
851this.displayGrid();else if(this.displayPanels[0]=='Detail'){this.displayVertical('first');}}},hasFeatures:function(){return this.store&&this.store.getCount()>0;},removeFeatures:function(){if(this.store){this.store.removeAll(false);}
852if((this.propGrid)&&(this.propGrid.store)){this.propGrid.store.removeAll();}
853if(this.selLayer){this.selLayer.removeAllFeatures({silent:true});}
854this.updateTbarText();if((this.topToolbar)&&(this.topToolbar.items.get('prevrec'))){this.topToolbar.items.get('prevrec').hide();this.topToolbar.items.get('nextrec').hide();}},showLayer:function(){if(this.layer){if(this.selLayer){this.map.set
854LayerIndex(this.selLayer,this.map.layers.length-1);this.map.setLayerIndex(this.layer,this.map.layers.length-2);}else{this.map.setLayerIndex(this.layer,this.map.layers.length-1);}
855if(!this.layer.getVisibility()){this.layer.setVisibility(true);}
856if(this.selLayer&&!this.selLayer.getVisibility()){this.selLayer.setVisibility(true);}}},hideLayer:function(){if(this.layer&&this.layer.getVisibility()){this.layer.setVisibility(false);}
857if(this.selLayer&&this.selLayer.getVisibility()){this.selLayer.setVisibility(false);}},zoomToFeature:function(self,geometry){if(!geometry){return;}
858if(geometry.getVertices().length==1){var point=geometry.getCentroid();self.map.setCenter(new OpenLayers.LonLat(point.x,point.y),self.zoomLevelPointSelect);}else{self.map.zoomToExtent(geometry.getBounds());}},zoomButtonRenderer:function(){var id=Ext.id();(function(){new Ext.Button({renderTo:id,text:'Zoom'});}).defer(25);return(String.format('<div id="{0}"></div>',id));},setupStore:function(features){if(this.store&&!this.autoConfig){return;}
859var storeFields=[];var column;this.columns=this.columns==null?[]:this.columns;var blnBtnExists=false;
859if((this.columns[0]!=null)&&(this.columns[0].id=='btn_detail'))
860blnBtnExists=true;if((this.showTopToolbar)&&(this.displayPanels.indexOf('Detail')>=0)&&(blnBtnExists==false)){var columnDetail=new Ext.grid.Column({id:'btn_detail',header:'',width:20,tooltip:__('Show single record'),renderer:function(value,metadata,record,rowindex){return('+');}});this.columns.splice(0,0,columnDetail);}
861if(this.autoConfig&&features){var columnsFound={};var columnsWidth={};var suppressColumns=this.hideColumns.toString().toLowerCase();var defaultColumnWidth=this.columnFixedWidth;var autoMaxWidth=this.autoMaxWidth;var autoMinWidth=this.autoMinWidth;var arrLen=features.length<=this.autoConfigMaxSniff?features.length:this.autoConfigMaxSniff;var pixelsPerCharacter=7;for(var i=0;i<arrLen;i++){var feature=features[i];var fieldName;var position=-1;for(fieldName in feature.attributes){if(i>0){position++;}
862if(columnsFound[fieldName]||suppressColumns.indexOf(fieldName.toLowerCase())!==-1){continue;}
863column={header:this.columnCapitalize?fieldName.substr(0,1).toUpperCase()+fieldName.substr(1).toLowerCase():fieldName,width:defaultColumnWidth,dataIndex:fieldName,sortable:true};if(this.gridCellRenderers&&this.featureType){var gridCellRenderer;for(var k=0;k<this.gridCellRenderers.length;k++){gridCellRenderer=this.gridCellRenderers[k];if(gridCellRenderer.attrName&&fieldName==gridCellRenderer.attrName){if(gridCellRenderer.featureType&&this.featureType==gridCellRenderer.featureType||!gridCellRenderer.featureType){column.options=gridCellRenderer.renderer.options;column.renderer=gridCellRenderer.renderer.fn;}}}}
864if(autoMaxWidth>0){if(!(fieldName in columnsWidth)){columnsWidth[fieldName]=fieldName.length*pixelsPerCharacter;if(columnsWidth[fieldName]<autoMinWidth){columnsWidth[fieldName]=autoMinWidth;}}
865if(feature.attributes[fieldName]){var columnWidth=feature.attributes[fieldName].length;if(typeof(column.options)!=="undefined"&&(typeof(column.options.attrPreTxt)!=="undefined")){columnWidth=columnWidth+column.options.attrPreTxt.length;}
866columnWidth=columnWidth*pixelsPerCharacter;if(columnWidth>columnsWidth[fieldName]&&columnWidth<=autoMaxWidth){columnsWidth[fieldName]=columnWidth;}}}
867if(position>=0&&position<this.columns.length){this.columns.splice(position,0,column);}else{this.columns.push(column);}
868storeFields.push({name:column.dataIndex});columnsFound[fieldName]=fieldName;}}
869if(autoMaxWidth>0){for(var key in this.columns){if(columnsWidth[this.columns[key].dataIndex])
870this.columns[key].width=columnsWidth[this.columns[key].dataIndex];}}}else{for(var c=0;c<this.columns.length;c++){column=this.columns[c];if(column.dataIndex){storeFields.push({name:column.dataIndex,type:column.type});}
871column.sortable=true;}}
872var storeConfig={layer:this.layer,fields:storeFields};Ext.apply(storeConfig,this.hropts.storeOpts);this.store=new GeoExt.data.FeatureStore(storeConfig);},updateSelectionLayer:function(evt){if(!this.showGeometries){return;}
873this.selLayer.removeAllFeatures({silent:true});var features=this.layer.selectedFeatures;for(var i=0;i<features.length;i++){var feature=features[i].clone();this.selLayer.addFeatures(feature);}},onActivateTable:function(){this.topToolbar.items.get('prevrec').hide();this.topToolbar.items.get('nextrec').hide();var btn=this.topToolbar.items.get('table-detail');btn.setText(__('Detail'));btn.setIconClass('icon-detail');btn.setTooltip(__('Show single record'));},onActivateDetail:function(){var btn=this.topToolbar.items.get('table-detail');btn.setText(__('Table'));btn.setIconClass('icon-table');btn.setTooltip(__('Show record(s) in a table grid'));this.tableGrid.selModel.selectRow(this.propGrid.curRecordNr,false);},onAfterlayoutTable:function(){this.activePanel='Table';},onAfterlayoutDetail:function(){this.activePanel='Detail';},onAfterlayoutTopToolbar:function(){var objCount=this.tableGrid.store?this.tableGrid.store.getCount():0;if((this.activePanel=='Table')||(objCount<=1)){this.topToolbar.items.get('prevrec').hide();this.topToolbar.items.get('nextrec').hide();}else{this.topToolbar.items.get('prevrec').show();this.topToolbar.items.get('nextrec').show();}},onPanelRendered:function(){if(this.ownerCt){this.ownerCt.addListener("parenthide",this.onParentHide,this);this.ownerCt.addListener("parentshow",this.onParentShow,this);}},onPanelShow:function(){if(this.selModel&&this.selModel.selectControl){this.selModel.selectControl.activate();}},onPanelHide:function(){if(this.selModel&&this.selModel.selectControl){this.selModel.selectControl.deactivate();}},onParentShow:function(){this.showLayer();},onParentHide:function(){this.removeFeatures();this.hideLayer();},cleanup:function(){this.removeFeatures();if(this.selModel&&this.selModel.selectControl){this.selModel.selectControl.deactivate();this.selModel=null;}
874if(this.layer){this.map.removeLayer(this.layer);}
875if(this.selLayer){this.map.removeLayer(this.selLayer);}
876return true;},updateTbarText:function(type){if(!this.tbarText){return;}
877var objCount=this.store?this.store.getCount():0;if((type)&&(type=='detail')&&(objCount>0))
878this.tbarText.setText(__('Result')+' '+(this.propGrid.curRecordNr+1)+' '+__('of')+' '+objCount);else
879this.tbarText.setText(objCount+' '+(objCount!=1?__('Results'):__('Result')));},exportData:function(config){var store=this.store;var featureType=this.featureType?this.featureType:'heron';config.fileName=featureType+config.fileExt;config.columns=(store.fields&&store.fields.items&&store.fields.items.length>3)?store.fields.items.slice(3):null;if(store.layer&&store.layer.projection){config.assignSrs=store.layer.projection.getCode();}
880var saveFeatures=null;var saveItems=null;var sel=this.sm.getSelections();if(sel.length>0){if(store.layer){saveFeatures=store.layer.features;store.layer.features=store.layer.selectedFeatures;}
881saveItems=store.data.items;store.data.items=sel;}
882config.encoding='base64';var data=Heron.data.DataExporter.formatStore(store,config);if(sel.length>0){if(store.layer){store.layer.features=saveFeatures;}
883store.data.items=saveItems;}
884Heron.data.DataExporter.download(data,config);},downloadData:function(downloadFormat,fileExt){var downloadInfo=this.downloadInfo;downloadInfo.params.outputFormat=downloadFormat;downloadInfo.params.filename=downloadInfo.params.typename+fileExt;var paramStr=OpenLayers.Util.getParameterString(downloadInfo.params);var url=OpenLayers.Util.urlAppend(downloadInfo.url,paramStr);if(url.length>2048){Ext.Msg.alert(__('Warning'),__('Download URL string too long (max 2048 chars): ')+url.length);return;}
885Heron.data.DataExporter.directDownload(url);}});Ext.reg('hr_featurepanel',Heron.widgets.search.FeaturePanel);
885Ext.reg('hr_featuregridpanel',Heron.widgets.search.FeaturePanel);Ext.reg('hr_featselgridpanel',Heron.widgets.search.FeaturePanel);Ext.namespace("Heron.widgets.search");Heron.widgets.search.SearchCenterPanel=Ext.extend(Ext.Panel,{initComponent:function(){var self=this;Ext.apply(this,{layout:'card',activeItem:0,bbar:[{text:__('< Search'),ref:'../prevButton',disabled:true,handler:function(){self.showSearchPanel(self);}},'->',{text:__('Result >'),ref:'../nextButton',disabled:true,handler:function(){self.showResultGridPanel(self);}}]});if(!this.items){this.items=[this.hropts.searchPanel];}
886if(this.ownerCt){this.ownerCt.addListener("hide",this.onParentHide,this);this.ownerCt.addListener("show",this.onParentShow,this);this.addEvents({"parenthide":true,"parentshow":true});}
887Heron.widgets.search.SearchCenterPanel.superclass.initComponent.call(this);this.addListener("afterrender",this.onRendered,this);},showSearchPanel:function(self){self.getLayout().setActiveItem(this.searchPanel);self.prevButton.disable();self.nextButton.disable();if(this.resultPanel&&this.resultPanel.hasFeatures()){self.nextButton.enable();}},showResultGridPanel:function(self){self.getLayout().setActiveItem(this.resultPanel);self.prevButton.enable();self.nextButton.disable();},onRendered:function(){this.searchPanel=this.getComponent(0);if(this.searchPanel){this.searchPanel.addListener('searchissued',this.onSearchIssued,this);this.searchPanel.addListener('searchsuccess',this.onSearchSuccess,this);this.searchPanel.addListener('searchcomplete',this.onSearchComplete,this);this.searchPanel.addListener('searchreset',this.onSearchReset,this);}},onSearchIssued:function(searchPanel){this.showSearchPanel(this);this.nextButton.disable();},onSearchComplete:function(searchPanel){},onSearchReset:function(searchPanel){if(this.resultPanel){this.resultPanel.removeFeatures();}},onSearchSuccess:function(searchPanel,result){if(this.hropts.resultPanel.autoConfig&&this.resultPanel){this.resultPanel.cleanup();this.remove(this.resultPanel);this.resultPanel=null;}
888var features=result.olResponse.features;if(!this.resultPanel){this.hropts.resultPanel.features=features;this.hropts.resultPanel.downloadInfo=result.downloadInfo;this.hropts.resultPanel.featureType=searchPanel.getFeatureType();this.resultPanel=new Heron.widgets.search.FeaturePanel(this.hropts.resultPanel);this.add(this.resultPanel);}
889this.resultPanel.loadFeatures(features,searchPanel.getFeatureType());if(features&&features.length>0){this.showResultGridPanel(this);}},onParentShow:function(){if(this.resultPanel){this.showSearchPanel(this);}
890this.fireEvent('parentshow');},onParentHide:function(){this.fireEvent('parenthide');}});Ext.reg('hr_searchcenterpanel',Heron.widgets.search.SearchCenterPanel);Ext.reg('hr_featselsearchpanel',Heron.widgets.search.SearchCenterPanel);Ext.namespace("Heron.widgets.search");Heron.widgets.search.MultiSearchCenterPanel=Ext.extend(Heron.widgets.search.SearchCenterPanel,{config:[],initComponent:function(){this.config=this.hropts;var searchNames=[];Ext.each(this.config,function(item){searchNames.push(item.searchPanel.name?item.searchPanel.name:__('Undefined (check your config)'));});this.combo=new Ext.form.ComboBox({store:searchNames,value:searchNames[0],editable:false,typeAhead:false,triggerAction:'all',emptyText:__('Select a search...'),selectOnFocus:true,width:250,listeners:{scope:this,'select':this.onSearchSelect}});this.tbar=[{'text':__('Search')+': '},this.combo];this.setPanels(this.config[0].searchPanel,this.config[0].resultPanel);Heron.widgets.search.MultiSearchCenterPanel.superclass.initComponent.call(this);},onSearchSelect:function(comboBox){var self=this;Ext.each(this.config,function(item){if(item.searchPanel.name==comboBox.value){self.switchPanels(item.searchPanel,item.resultPanel);}});this.showSearchPanel(this);},onSearchSuccess:function(searchPanel,result){Heron.widgets.search.MultiSearchCenterPanel.superclass.onSearchSuccess.call(this,searchPanel,result);this.lastResultFeatures=result.features;},setPanels:function(searchPanel,resultPanel){if(this.hropts.searchPanel&&this.hropts.searchPanel.name===searchPanel.name){return false;}
891this.hropts.searchPanel=searchPanel;this.hropts.resultPanel=resultPanel;return true;},switchPanels:function(searchPanel,resultPanel){if(!this.setPanels(searchPanel,resultPanel)){return;}
892if(this.searchPanel){this.lastSearchName=this.searchPanel.name;this.remove(this.searchPanel,true);}
893if(this.resultPanel){this.resultPanel.cleanup();this.remove(this.resultPanel,true);this.resultPanel=null;}
894if(this.hropts.searchPanel.hropts&&this.hropts.searchPanel.hropts.fromLastResult){this.hropts.searchPanel.hropts.filterFeatures=this.lastResultFeatures;this.hropts.searchPanel.hropts.lastSearchName=this.lastSearchName;}
895this.searchPanel=Ext.create(this.hropts.searchPanel);this.add(this.searchPanel);this.searchPanel.show();this.getLayout().setActiveItem(this.searchPanel);this.onRendered();}});Ext.reg('hr_multisearchcenterpanel',Heron.widgets.search.MultiSearchCenterPanel);Ext.namespace("Heron.widgets.search");Heron.widgets.search.FormSearchPanel=Ext.extend(GeoExt.form.FormPanel,{onSearchCompleteZoom:11,autoWildCardAttach:false,caseInsensitiveMatch:false,logicalOperator:OpenLayers.Filter.Logical.AND,layerOpts:undefined,statusPanelOpts:{html:'&nbsp;',height:132,preventBodyReset:true,bodyCfg:{style:{padding:'6px',border:'0px'}},style:{marginTop:'24px',paddingTop:'24px',fontFamily:'Verdana, Arial, Helvetica, sans-serif',fontSize:'11px',color:'#0000C0'}},progressMessages:[__('Working on it...'),__('Still searching, please be patient...')],header:true,bodyStyle:'padding: 6px',style:{fontFamily:'Verdana, Arial, Helvetica, sans-serif',fontSize:'12px'},downloadFormats:[],defaults:{enableKeyEvents:true,listeners:{specialKey:function(field,el){if(el.getKey()==Ext.EventObject.ENTER){var form=this.ownerCt;if(!form&&!form.search){return;}
896form.action=null;form.search();}}}},initComponent:function(){this.addEvents({"searchcomplete":true,"searchcanceled":true,"searchfailed":true,"searchsuccess":true});Ext.apply(this,this.hropts);Heron.widgets.search.FormSearchPanel.superclass.initComponent.call(this);if(this.protocol&&this.protocol.url instanceof Array){this.protocol.url=Heron.Utils.randArrayElm(this.protocol.url);this.protocol.options.url=this.protocol.url;}
897var items=[this.createStatusPanel(),this.createActionButtons()];this.add(items);this.addListener("beforeaction",this.onSearchIssued,this);this.addListener("searchcanceled",this.onSearchCanceled,this);this.addListener("actioncomplete",this.onSearchComplete,this);this.addListener("actionfailed",this.onSearchFailed,this);},createActionButtons:function(){this.searchButton=new Ext.Button({text:__('Search'),tooltip:__('Search'),disabled:false,handler:function(){this.search();},scope:this});this.cancelButton=new Ext.Button({text:__('Cancel'),tooltip:__('Cancel ongoing search'),disabled:true,handler:function(){this.fireEvent('searchcanceled',this);},scope:this});return this.actionButtons=new Ext.ButtonGroup({fieldLabel:null,labelSeparator:'',anchor:"-50",title:null,border:false,bodyBorder:false,items:[this.cancelButton,this.searchButton]});},createStatusPanel:function(){return this.statusPanel=new Heron.widgets.HTMLPanel(this.statusPanelOpts);},updateStatusPanel:function(text){if(!text){text='&nbsp;';}
898if(this.statusPanel.body){this.statusPanel.body.update(text);}else{this.statusPanel.html=text;}},getFeatureType:function(){return this.protocol?this.protocol.featureType:'heron';},onSearchIssued:function(form,action){this.protocol=action.form.protocol;this.searchState="searchissued";this.features=null;this.updateStatusPanel(__('Searching...'));this.cancelButton.enable();this.searchButton.disable();var self=this;var startTime=new Date().getTime()/1000;this.timer=setInterval(function(){if(self.searchState!='searchissued'){return;}
899self.updateStatusPanel(Math.floor(new Date().getTime()/1000-startTime)+' '+__('Seconds')+' - '+
900Heron.Utils.randArrayElm(self.progressMessages));},4000);},onSearchFailed:function(form,action){this.searchAbort();},onSearchCanceled:function(searchPanel){this.searchState='searchcanceled';this.searchAbort();this.updateStatusPanel(__('Search Canceled'));},onSearchComplete:function(form,action){if(this.timer){clearInterval(this.timer);this.timer=null;}
901this.cancelButton.disable();this.searchButton.enable();if(this.searchState=='searchcanceled'){this.searchState=null;return;}
902this.searchState="searchcomplete";var result={olResponse:action.response};this.fireEvent('searchcomplete',this,result);if(action&&action.response&&action.response.success()){var features=this.features=action.response.features;var featureCount=features?features.length:0;this.updateStatusPanel(__('Search Completed: ')+featureCount+' '+(featureCount!=1?__('Results'):__('Result')));var filter=GeoExt.form.toFilter(action.form,action.options);var filterFormat=new OpenLayers.Format.Filter.v1_1_0({srsName:this.protocol.srsName});var filterStr=OpenLayers.Format.XML.prototype.write.apply(filterFormat,[filterFormat.
902write(filter)]);result.downloadInfo={type:'wfs',url:this.protocol.options.url,downloadFormats:this.downloadFormats,params:{typename:this.protocol.featureType,maxFeatures:this.protocol.maxFeatures,"Content-Disposition":"attachment",filename:this.protocol.featureType,srsName:this.protocol.srsName,service:"WFS",version:"1.1.0",request:"GetFeature",filter:filterStr}};if(this.onSearchCompleteAction){var lropts=this.layerOpts;if(lropts){var map=Heron.App.getMap();for(var l=0;l<lropts.length;l++){if(lropts[l]['layerOn']){var mapLayers=map.getLayersByName(lropts[l]['layerOn']);for(var n=0;n<mapLayers.length;n++){if(mapLayers[n].isBaseLayer){map.setBaseLayer(mapLayers[n]);}else{mapLayers[n].setVisibility(true);}
903if(lropts[l]['layerOpacity']){mapLayers[n].setOpacity(lropts[l]['layerOpacity']);}}}}}
904this.onSearchCompleteAction(result);}
905this.fireEvent('searchsuccess',this,result);}else{this.fireEvent('searchfailed',this,action.response);this.updateStatusPanel(__('Search Failed')+' details: '+action.response.priv.responseText);}},onSearchCompleteAction:function(result){var features=result.olResponse.features;if(!features||features.length==0){return;}
906var map=Heron.App.getMap();if(features.length==1&&features[0].geometry.CLASS_NAME=="OpenLayers.Geometry.Point"&&this.onSearchCompleteZoom){var point=features[0].geometry.getCentroid();map.setCenter(new OpenLayers.LonLat(point.x,point.y),this.onSearchCompleteZoom);}else{var geometryCollection=new OpenLayers.Geometry.Collection();for(var i=0;i<features.length;i++){geometryCollection.addComponent(features[i].geometry);}
907geometryCollection.calculateBounds();map.zoomToExtent(geometryCollection.getBounds());}},search:function(){this.action=null;Heron.widgets.search.FormSearchPanel.superclass.search.call(this,{wildcard:this.autoWildCardAttach?GeoExt.form.CONTAINS:-1,matchCase:!this.caseInsensitiveMatch,logicalOp:this.logicalOperator});},searchAbort:function(){if(this.timer){clearInterval(this.timer);this.timer=null;}
908if(this.protocol){this.protocol.abort(this.response);}
909this.protocol=null;this.searchButton.enable();this.cancelButton.disable();this.updateStatusPanel(__('Search aborted'));}});Ext.reg('hr_formsearchpanel',Heron.widgets.search.FormSearchPanel);Ext.reg('hr_searchpanel',Heron.widgets.search.FormSearchPanel);Ext.namespace("Heron.widgets.search");Heron.widgets.search.SpatialSearchPanel=Ext.extend(Ext.Panel,{layout:'form',bodyStyle:'padding: 24px 12px 12px 12px',border:false,name:__('Spatial Search'),description:'',fromLastResult:false,lastSearchName:null,filterFeatures:null,showFilterFeatures:true,maxFilterGeometries:24,selectLayerStyle:{pointRadius:10,strokeColor:"#dd0000",strokeWidth:1,fillOpacity:0.4,fillColor:"#cc0000"},layerSortOrder:'ASC',downloadFormats:null,layerFilter:function(map){return map.getLayersBy('metadata',{test:function(metadata){return metadata&&metadata.wfs;}})},progressMessages:[__('Working on it...'),__('Still searching, please be patient...'),__('Still searching, have you selected an area with too many objects?')],initComponent:function(){this.addEvents(this.getEvents());Heron.widgets.search.SpatialSearchPanel.superclass.initComponent.call(this);this.map=Heron.App.getMap();this.addSelectionLayer();this.addListener("selectionlayerupdate",this.onSelectionLayerUpdate,this);this.addListener("targetlayerselected",this.onTargetLayerSelected,this);this.addListener("drawingcomplete",this.onDrawingComplete,this);this.addListener("searchissued",this.onSearchIssued,this);this.addListener("searchcomplete",this.onSearchComplete,this);this.addListener("searchcanceled",this.onSearchCanceled,this);this.addListener("beforehide",this.onBeforeHide,this);this.addListener("beforeshow",this.onBeforeShow,this);this.addListener("beforedestroy",this.onBeforeDestroy,this);this.addListener("afterrender",this.onPanelRendered,this);if(this.ownerCt){this.ownerCt.addListener("parenthide",this.onParentHide,this);this.ownerCt.addListener("parentshow",this.onParentShow,this);}},addSelectionLayer:function(){if(this.selectionLayer){return;}
910this.selectionLayer=new OpenLayers.Layer.Vector(__('Selection'),{style:this.selectLayerStyle,displayInLayerSwitcher:false,hideInLegend:false,isBaseLayer:false});this.map.addLayers([this.selectionLayer]);},getEvents:function(){return{"drawcontroladded":true,"selectionlayerupdate":true,"targetlayerselected":true,"drawingcomplete":true,"searchissued":true,"searchcomplete":true,"searchcanceled":true,"searchfailed":true,"searchsuccess":true,"searchreset":true};}
910,createStatusPanel:function(){var infoText=__('Select the Layer to query')+'<p>'+this.description+'</p>';if(this.lastSearchName){infoText+='<p>'+__('Using geometries from the result: ')+'<br/>'+this.lastSearchName;if(this.filterFeatures){infoText+='<br/>'+__('with')+' '+this.filterFeatures.length+' '+__('features');}
911infoText+='</p>';}
912this.statusPanel=new Heron.widgets.HTMLPanel({html:infoText,preventBodyReset:true,bodyCfg:{style:{padding:'6px',border:'1px'}},style:{marginTop:'10px',marginBottom:'10px',fontFamily:'Verdana, Arial, Helvetica, sans-serif',fontSize:'11px',color:'#0000C0'}});return this.statusPanel;},createDrawToolPanel:function(config){var defaultConfig={html:'<div class="olControlEditingToolbar olControlNoSelect">&nbsp;</div>',preventBodyReset:true,style:{marginTop:'32px',marginBottom:'24px'},activateControl:true,listeners:{afterrender:function(htmlPanel){var div=htmlPanel.body.dom.firstChild;if(!div){Ext.Msg.alert(__('Warning'),__('Cannot render draw controls'));return;}
913this.addDrawControls(div);if(this.activateControl){this.activateDrawControl();}},scope:this}};config=Ext.apply(defaultConfig,config);return this.drawToolPanel=new Heron.widgets.HTMLPanel(config);},addDrawControls:function(div){this.drawControl=new OpenLayers.Control.EditingToolbar(this.selectionLayer,{div:div});this.drawControl.controls[0].panel_div.title=__('Return to map navigation');this.drawControl.controls[1].panel_div.title=__('Draw point');this.drawControl.controls[2].panel_div.title=__('Draw line');this.drawControl.controls[3].panel_div.title=__('Draw polygon');var drawCircleControl=new OpenLayers.Control.DrawFeature(this.selectionLayer,OpenLayers.Handler.RegularPolygon,{title:__('Draw circle (click and drag)'),displayClass:'olControlDrawCircle',handlerOptions:{citeCompliant:this.drawControl.citeCompliant,sides:30,irregular:false}});this.drawControl.addControls([drawCircleControl]);var drawRectangleControl=new OpenLayers.Control.DrawFeature(this.selectionLayer,OpenLayers.Handler.RegularPolygon,{displayClass:'olControlDrawRectangle',title:__('Draw Rectangle (click and drag)'),handlerOptions:{citeCompliant:this.drawControl.citeCompliant,sides:4,irregular:true}});this.drawControl.addControls([drawRectangleControl]);this.map.addControl(this.drawControl);this.activeControl=drawRectangleControl;this.fireEvent('drawcontroladded');},removeDrawControls:function(){if(this.drawControl){var self=this;Ext.each(this.drawControl.controls,function(control){self.map.removeControl(control);});this.map.removeControl(this.drawControl);this.drawControl=null;}},activateDrawControl:function(){if(!this.drawControl||this.drawControlActive){return;}
914var self=this;Ext.each(this.drawControl.controls,function(control){control.events.register('featureadded',self,self.onFeatureDrawn);control.deactivate();if(self.activeControl&&control==self.activeControl){control.activate();}});this.drawControlActive=true;},deactivateDrawControl:function(){if(!this.drawControl){return;}
915var self=this;Ext.each(this.drawControl.controls,function(control){control.events.unregister('featureadded',self,self.onFeatureDrawn);if(control.active){self.activeControl=control;}
916control.deactivate();});this.updateStatusPanel();this.drawControlActive=false;},onFeatureDrawn:function(){},createTargetLayerCombo:function(config){var defaultConfig={fieldLabel:__('Search in'),sortOrder:this.layerSortOrder,layerFilter:this.layerFilter,selectFirst:true,listeners:{selectlayer:function(layer){this.targetLayer=layer;this.fireEvent('targetlayerselected');},scope:this}};config=Ext.apply(defaultConfig,config);return this.targetLayerCombo=new Heron.widgets.LayerCombo(config);},getFeatureType:function(){return this.lastFeatureType?this.lastFeatureType:(this.targetLayer?this.targetLayer.name:'heron');},updateStatusPanel:function(text){if(!text){text='&nbsp;';}
917if(this.statusPanel.body){this.statusPanel.body.update(text);}else{this.statusPanel.html=text;}},onBeforeHide:function(){if(this.selectionLayer){this.selectionLayer.setVisibility(false);}},onBeforeShow:function(){if(this.selectionLayer){this.selectionLayer.setVisibility(true);}},onBeforeDestroy:function(){this.deactivateDrawControl();if(this.selectionLayer){this.selectionLayer.removeAllFeatures();this.map.removeLayer(this.selectionLayer);}},onDrawingComplete:function(searchPanel,selectionLayer){},onTargetLayerSelected:function(){},onSelectionLayerUpdate:function(){},onSearchIssued:function(){this.searchState="searchissued";this.response=null;this.features=null;this.updateStatusPanel(__('Searching...'));var self=this;var startTime=new Date().getTime()/1000;this.timer=setInterval(function(){if(self.searchState!='searchissued'){return;}
918self.updateStatusPanel(Math.floor(new Date().getTime()/1000-startTime)+' '+__('Seconds')+' - '+
919Heron.Utils.randArrayElm(self.progressMessages));},4000);},onSearchCanceled:function(searchPanel){this.searchState='searchcanceled';this.searchAbort();this.updateStatusPanel(__('Search Canceled'));},onSearchComplete:function(searchPanel,result){this.protocol=null;if(this.timer){clearInterval(this.timer);this.timer=null;}
920if(this.sketch){this.selectionLayer.removeAllFeatures();this.sketch=false;}
921this.fireEvent('selectionlayerupdate');
921if(this.searchState=='searchcanceled'){this.fireEvent('searchfailed',searchPanel,null);return;}
922this.searchState="searchcomplete";var olResponse=result.olResponse;if(!olResponse||!olResponse.success()||olResponse.priv.responseText.indexOf('ExceptionReport')>0){this.fireEvent('searchfailed',searchPanel,olResponse);this.updateStatusPanel(__('Search Failed')+' details: '+olResponse.priv.responseText);return;}
923this.onSearchSuccess(searchPanel,result);},onSearchSuccess:function(searchPanel,result){var features=this.features=this.filterFeatures=result.olResponse.features;var featureCount=features?features.length:0;this.updateStatusPanel(__('Search Completed: ')+featureCount+' '+(featureCount!=1?__('Results'):__('Result')));this.fireEvent('searchsuccess',searchPanel,result);},search:function(geometries,options){var targetLayer=options.targetLayer;var wfsOptions=targetLayer.metadata.wfs;if(wfsOptions.protocol=='fromWMSLayer'){this.protocol=OpenLayers.Protocol.WFS.fromWMSLayer(targetLayer,{outputFormat:'GML2'});if(this.protocol.url instanceof Array){this.protocol.url=Heron.Utils.randArrayElm(this.protocol.url);this.protocol.options.url=this.protocol.url;}}else{this.protocol=wfsOptions.protocol;}
924this.lastFeatureType=this.protocol.featureType;var geometry=geometries[0];var spatialFilterType=options.spatialFilterType||OpenLayers.Filter.Spatial.INTERSECTS;var filterOptions={type:spatialFilterType,value:geometry};if(spatialFilterType==OpenLayers.Filter.Spatial.DWITHIN){var spatialFilterDistance=options.spatialFilterDistance||0;Ext.apply(filterOptions,{distanceUnits:options.spatialDistanceUnits,distance:spatialFilterDistance});}
925var filter=new OpenLayers.Filter.Spatial(filterOptions);if(geometries.length>1){var filters=[];geometry=new OpenLayers.Geometry.Collection();Ext.each(geometries,function(g){geometry.addComponent(g);var options=Ext.applyIf({value:g},filterOptions);filters.push(new OpenLayers.Filter.Spatial(options));});filter=new OpenLayers.Filter.Logical({type:OpenLayers.Filter.Logical.OR,filters:filters});}
926if(geometry.CLASS_NAME.indexOf('LineString')>0&&wfsOptions.maxQueryLength){var length=Math.round(geometry.getGeodesicLength(options.projection));if(length>wfsOptions.maxQueryLength){this.selectionLayer.removeAllFeatures();var units=options.units;Ext.Msg.alert(__('Warning - Line Length is ')+length+units,__('You drew a line with length above the layer-maximum of ')+wfsOptions.maxQueryLength+units);return false;}}
927if(geometry.CLASS_NAME.indexOf('Polygon')>0&&wfsOptions.maxQueryArea){var area=Math.round(geometry.getGeodesicArea(options.projection));if(area>wfsOptions.maxQueryArea){this.selectionLayer.removeAllFeatures();var areaUnits=options.units+'2';Ext.Msg.alert(__('Warning - Area is ')+area+areaUnits,__('You selected an area for this layer above its maximum of ')+wfsOptions.maxQueryArea+areaUnits);return false;}}
928var filterFormat=new OpenLayers.Format.Filter.v1_1_0({srsName:this.protocol.srsName});var filterStr=OpenLayers.Format.XML.prototype.write.apply(filterFormat,[filterFormat.write(filter)]);var maxFeatures=this.single==true?this.maxFeatures:undefined;this.response=this.protocol.read({maxFeatures:maxFeatures,filter:filter,callback:function(olResponse){if(!this.protocol){return;}
929var downloadInfo={type:'wfs',url:this.protocol.options.url,downloadFormats:this.downloadFormats?this.downloadFormats:wfsOptions.downloadFormats,params:{typename:this.protocol.featureType,maxFeatures:maxFeatures,"Content-Disposition":"attachment",filename:targetLayer.name,srsName:this.protocol.srsName,service:"WFS",version:"1.1.0",request:"GetFeature",filter:filterStr}};var result={olResponse:olResponse,downloadInfo:downloadInfo,layer:targetLayer};this.fireEvent('searchcomplete',this,result);},scope:this});this.fireEvent('searchissued',this);return true;},searchAbort:function(){if(this.protocol){this.protocol.abort(this.response);}
930this.protocol=null;if(this.timer){clearInterval(this.timer);this.timer=null;}}});Ext.reg('hr_spatialsearchpanel',Heron.widgets.search.SpatialSearchPanel);Ext.namespace("Heron.widgets.search");Heron.widgets.search.SearchByDrawPanel=Ext.extend(Heron.widgets.search.SpatialSearchPanel,{name:__('Search by Drawing'),spatialFilterType:OpenLayers.Filter.Spatial.INTERSECTS,initComponent:function(){this.items=[this.createTargetLayerCombo(),this.createDrawToolPanel(),this.createStatusPanel(),this.createActionButtons()];Heron.widgets.search.SearchByDrawPanel.superclass.initComponent.call(this);this.addListener("drawcontroladded",this.activateDrawControl,this);},createActionButtons:function(){return this.cancelButton=new Ext.Button({text:__('Cancel'),tooltip:__('Cancel ongoing search'),disabled:true,handler:function(){this.fireEvent('searchcanceled',this);},scope:this});},onDrawingComplete:function(searchPanel,selectionLayer){this.searchFromSketch();},onFeatureDrawn:function(){this.fireEvent('drawingcomplete',this,this.selectionLayer);},onPanelRendered:function(){this.updateStatusPanel(__('Select a drawing tool and draw to search immediately'));this.targetLayer=this.targetLayerCombo.selectedLayer;if(this.targetLayer){this.fireEvent('targetlayerselected',this.targetLayer);}},onParentShow:function(){this.activateDrawControl();},onParentHide:function(){this.deactivateDrawControl();},onSearchCanceled:function(searchPanel){Heron.widgets.search.SearchByFeaturePanel.superclass.onSearchCanceled.call(this);this.cancelButton.disable();if(this.selectionLayer){this.selectionLayer.removeAllFeatures();}},onSearchComplete:function(searchPanel,result){Heron.widgets.search.SearchByFeaturePanel.superclass.onSearchComplete.call(this,searchPanel,result);this.cancelButton.disable();},searchFromSketch:function(){var selectionLayer=this.selectionLayer;var geometry=selectionLayer.features[0].geometry;if(!this.search([geometry],{projection:selectionLayer.projection,units:selectionLayer.units,spatialFilterType:this.spatialFilterType,targetLayer:this.targetLayer})){}
931this.sketch=true;this.cancelButton.enable();}});Ext.reg('hr_searchbydrawpanel',Heron.widgets.search.SearchByDrawPanel);Ext.namespace("Heron.widgets.search");Heron.widgets.search.SearchByFeaturePanel=Ext.extend(Heron.widgets.search.SpatialSearchPanel,{name:__('Search by Feature Selection'),sourceSpatialFilterType:OpenLayers.Filter.Spatial.INTERSECTS,spatialDistanceUnits:'meter',spatialFilterDistance:0,targetLayerFilter:function(map){return map.getLayersBy('metadata',{test:function(metadata){return metadata&&metadata.wfs&&!metadata.isSourceLayer;}})}
931,initComponent:function(){this.resetButton=new Ext.Button({anchor:"20%",text:__('Reset'),tooltip:__('Start a new search'),listeners:{click:function(){this.resetForm();},scope:this}});this.items=[this.createSourceLayerCombo(),this.createDrawFieldSet(),this.createTargetLayerCombo({selectFirst:true}),this.createSearchTypeCombo(),this.createSearchDistField(),this.createActionButtons(),this.createStatusPanel(),this.resetButton];Heron.widgets.search.SearchByFeaturePanel.superclass.initComponent.call(this);},activateSearchByFeature:function(){this.deactivateSearchByFeature();this.sourceLayerCombo.addListener('selectlayer',this.onSourceLayerSelect,this);this.selectionLayer.events.register('featureadded',this,this.onSelectionLayerUpdate);this.selectionLayer.events.register('featuresadded',this,this.onSelectionLayerUpdate);this.selectionLayer.events.register('featureremoved',this,this.onSelectionLayerUpdate);this.selectionLayer.events.register('featuresremoved',this,this.onSelectionLayerUpdate);},deactivateSearchByFeature:function(){this.sourceLayerCombo.removeListener('selectlayer',this.onSourceLayerSelect,this);this.selectionLayer.events.unregister('featureadded',this,this.onSelectionLayerUpdate);this.selectionLayer.events.unregister('featuresadded',this,this.onSelectionLayerUpdate);this.selectionLayer.events.unregister('featureremoved',this,this.onSelectionLayerUpdate);this.selectionLayer.events.unregister('featuresremoved',this,this.onSelectionLayerUpdate);},resetForm:function(){this.selectionLayer.removeAllFeatures();this.searchButton.disable();this.sourceLayerCombo.reset();this.targetLayerCombo.reset();this.spatialFilterType=OpenLayers.Filter.Spatial.INTERSECTS;this.drawFieldSet.hide();this.deactivateDrawControl();this.selectionStatusField.hide();this.targetLayerCombo.hide();this.searchTypeCombo.hide();this.searchDistField.setValue(0);this.spatialFilterDistance=0;this.searchDistField.hide();this.actionButtons.hide();this.updateStatusPanel(__('Select a source Layer and then draw to select objects from that layer. <br/>Then select a target Layer to search in using the geometries of the selected objects.'));this.fireEvent('searchreset');},createActionButtons:function(){this.searchButton=new Ext.Button({text:__('Search'),tooltip:__('Search in target layer using the feature-geometries from the selection'),disabled:true,handler:function(){this.searchFromFeatures();},scope:this});this.cancelButton=new Ext.Button({text:__('Cancel'),tooltip:__('Cancel ongoing search'),disabled:true,listeners:{click:function(){this.fireEvent('searchcanceled',this);},scope:this}});return this.actionButtons=new Ext.ButtonGroup({fieldLabel:__('Actions'),anchor:"100%",title:null,border:false,items:[this.cancelButton,this.searchButton]});},createDrawFieldSet:function(){this.selectionStatusField=new Heron.widgets.HTMLPanel({html:__('No objects selected'),preventBodyReset:true,bodyCfg:{style:{padding:'2px',border:'0px'}},style:{marginTop:'2px',marginBottom:'2px',fontFamily:'Verdana, Arial, Helvetica, sans-serif',fontSize:'11px',color:'#0000C0'}});return this.drawFieldSet=new Ext.form.FieldSet({xtype:"fieldset",title:null,anchor:"100%",items:[this.createDrawToolPanel({style:{marginTop:'12px',marginBottom:'12px'},activateControl:false}),this.selectionStatusField]});},createSearchDistField:function(){return this.searchDistField=new Ext.form.NumberField({fieldLabel:__('Distance of Search'),name:'basic',value:0,minValue:0,maxValue:9999,enableKeyEvents:true,listeners:{keyup:function(numberfield,ev){this.spatialFilterDistance=numberfield.getValue();},scope:this}});},createSearchTypeCombo:function(){var store=new Ext.data.ArrayStore({fields:['name','value'],data:[[__('INTERSECTS (default)'),OpenLayers.Filter.Spatial.INTERSECTS],[__('WITHIN'),OpenLayers.Filter.Spatial.WITHIN],[__('WITHIN DISTANCE'),OpenLayers.Filter.Spatial.DWITHIN],[__('CONTAINS'),OpenLayers.Filter.Spatial.CONTAINS]]});return this.searchTypeCombo=new Ext.form.ComboBox({mode:'local',listWidth:160,value:store.getAt(0).get("name"),fieldLabel:__('Type of Search'),store:store,displayField:'name',valueField:'value',forceSelection:true,triggerAction:'all',editable:false,listeners:{select:function(cb,record){this.spatialFilterType=record.data['value'];if(record.data['value']==OpenLayers.Filter.Spatial.DWITHIN){this.searchDistField.show();}else{this.searchDistField.hide();}},scope:this}});},createSourceLayerCombo:function(){return this.sourceLayerCombo=new Heron.widgets.LayerCombo({fieldLabel:__('Cho
931ose Layer to select with'),sortOrder:this.layerSortOrder,layerFilter:this.layerFilter});},updateSelectionStatusField:function(text){if(this.selectionStatusField.body){this.selectionStatusField.body.update(text);}else{this.selectionStatusField.html=text;}},onFeatureDrawn:function(evt){var selectionLayer=this.selectionLayer;selectionLayer.removeAllFeatures();selectionLayer.addFeatures(evt.feature);var geometries=[selectionLayer.features[0].geometry];if(!this.search(geometries,{spatialFilterType:this.sourceSpatialFilterType,targetLayer:this.sourceLayer,projection:this.selectionLayer.projection,units:this.selectionLayer.units})){return;}
932this.searchSelect=true;this.searchButton.enable();this.cancelButton.disable();},onSourceLayerSelect:function(layer){if(this.sourceLayer&&this.sourceLayer.metadata){this.sourceLayer.metadata.isSourceLayer=false;}
933this.sourceLayer=layer;if(this.sourceLayer&&this.sourceLayer.metadata){this.sourceLayer.metadata.isSourceLayer=true;}
934this.searchButton.enable();this.cancelButton.disable();this.drawFieldSet.show();this.activateDrawControl();this.selectionStatusField.show();this.updateStatusPanel();this.updateSelectionStatusField(__('Select a draw tool and draw to select objects from')+(this.sourceLayer?'<br/>"'+this.sourceLayer.name+'"':''));},onSelectionLayerUpdate:function(){},onTargetLayerSelected:function(){this.searchTypeCombo.show();this.actionButtons.show();this.searchButton.enable();this.cancelButton.disable();this.doLayout();this.updateStatusPanel(__('Select the spatial operator (optional) and use the Search button to start your search.'));},onPanelRendered:function(){if(this.fromLastResult&&this.filterFeatures){this.selectionLayer.addFeatures(this.filterFeatures);}
935this.activateSearchByFeature();this.resetForm();},onParentShow:function(){this.activateSearchByFeature();},onParentHide:function(){this.deactivateSearchByFeature();this.resetForm();},onBeforeDestroy:function(){this.deactivateSearchByFeature();if(this.selectionLayer){this.selectionLayer.removeAllFeatures();this.map.removeLayer(this.selectionLayer);}},onSearchCanceled:function(searchPanel){Heron.widgets.search.SearchByFeaturePanel.superclass.onSearchCanceled.call(this);this.resetForm();},onSearchSuccess:function(searchPanel,result){var features=this.features=this.filterFeatures=result.olResponse.features;this.searchButton.enable();this.cancelButton.disable();if(this.searchSelect){this.selectionLayer.removeAllFeatures();this.selectionLayer.addFeatures(features);this.targetLayerCombo.hide();this.updateStatusPanel();if(this.selectionLayer.features.length==0){this.updateSelectionStatusField(__('No objects selected.'));return;}
936if(this.selectionLayer.features.length>this.maxFilterGeometries){this.updateSelectionStatusField(__('Too many geometries for spatial filter: ')+this.selectionLayer.features.length+' '+'max: '+this.maxFilterGeometries);return;}
937this.searchSelect=false;this.targetLayerCombo.setLayers(this.targetLayerFilter(this.map));this.targetLayerCombo.show();var text=this.selectionLayer.features.length+' '+__('objects selected from "')+(this.sourceLayer?this.sourceLayer.name:'')+'"';this.updateSelectionStatusField(text);this.updateStatusPanel(__('Select a target layer to search using the geometries of the selected objects'));}else{Heron.widgets.search.SearchByFeaturePanel.superclass.onSearchSuccess.call(this,searchPanel,result);}},searchFromFeatures:function(){var geometries=[];var features=this.selectionLayer.features;for(var i=0;i<features.length;i++){geometries.push(features[i].geometry);}
938this.searchButton.disable();this.cancelButton.enable();if(!this.search(geometries,{spatialFilterType:this.spatialFilterType,targetLayer:this.targetLayer,projection:this.selectionLayer.projection,spatialDistanceUnits:this.spatialDistanceUnits,spatialFilterDistance:this.spatialFilterDistance})){this.selectionLayer.removeAllFeatures();}}});Ext.reg('hr_searchbyfeaturepanel',Heron.widgets.search.SearchByFeaturePanel);Ext.namespace("Heron.widgets.search");Heron.widgets.search.SearchByBufferPanel=Ext.extend(Heron.widgets.search.SpatialSearchPanel,{name:__('Search by Buffer'),sourceSpatialFilterType:OpenLayers.Filter.Spatial.INTERSECTS,spatialDistanceUnits:'meter',spatialFilterDistance:1,vectorLayer:'',targetLayerFilter:function(map){return map.getLayersBy('metadata',{test:function(metadata){return metadata&&metadata.wfs&&!metadata.isSourceLayer;}})},vectorLayerFilter:function(map){return map.getLayersByClass("OpenLayers.Layer.Vector");},initComponent:function(){this.resetButton=new Ext.Button({anchor:"20%",text:'Reset',tooltip:__('Start a new search'),listeners:{click:function(){this.resetForm();},scope:this}});this.bufferButton=new Ext.Button({anchor:"20%",text:'Buffer',tooltip:__('Buffer'),listeners:{click:function(){if(this.sourceLayer&&this.sourceLayer.metadata){this.sourceLayer.metadata.isSourceLayer=false;}
939this.sourceLayer=this.vectorLayer;if(this.sourceLayer&&this.sourceLayer.metadata){this.sourceLayer.metadata.isSourceLayer=true;}
940this.searchButton.enable();this.cancelButton.disable();this.searchVector();},scope:this}});this.items=[this.createSourceLayerCombo(),this.createVectorLayerCombo(),this.createSearchDistField(),this.bufferButton,this.createDrawFieldSet(),this.createTargetLayerCombo({selectFirst:true}),this.createActionButtons(),this.createStatusPanel(),this.resetButton];Heron.widgets.search.SearchByBufferPanel.superclass.initComponent.call(this);},activateSearchByFeature:function(){this.deactivateSearchByFeature();this.sourceLayerCombo.addListener('selectlayer',this.onSourceLayerSelect,this);this.vectorLayerCombo.addListener('selectlayer',this.onVectorLayerSelect,this);this.selectionLayer.events.register('featureadded',this,this.onSelectionLayerUpdate);this.selectionLayer.events.register('featuresadded',this,this.onSelectionLayerUpdate);this.selectionLayer.events.register('featureremoved',this,this.onSelectionLayerUpdate);this.selectionLayer.events.register('featuresremoved',this,this.onSelectionLayerUpdate);},deactivateSearchByFeature:function(){this.sourceLayerCombo.removeListener('selectlayer',this.onSourceLayerSelect,this);this.vectorLayerCombo.removeListener('selectlayer',this.onVectorLayerSelect,this);this.selectionLayer.events.unregister('featureadded',this,this.onSelectionLayerUpdate);this.selectionLayer.events.unregister('featuresadded',this,this.onSelectionLayerUpdate);this.selectionLayer.events.unregister('featureremoved',this,this.onSelectionLayerUpdate);this.selectionLayer.events.unregister('featuresremoved',this,this.onSelectionLayerUpdate);},resetForm:function(){this.selectionLayer.removeAllFeatures();this.searchButton.disable();this.sourceLayerCombo.show();this.sourceLayerCombo.reset();this.vectorLayerCombo.show();this.vectorLayerCombo.reset();this.targetLayerCombo.reset();this.spatialFilterType=OpenLayers.Filter.Spatial.INTERSECTS;this.drawFieldSet.hide();this.deactivateDrawControl();this.selectionStatusField.hide();this.targetLayerCombo.hide();this.searchDistField.setValue(1);this.spatialFilterDistance=1;this.searchDistField.hide();this.bufferButton.hide();this.actionButtons.hide();this.updateStatusPanel(__('Select a source Layer and then draw to select objects from that layer. <br/>Then select a target Layer to search in using the geometries of the selected objects.'));this.fireEvent('searchreset');},createActionButtons:function(){this.searchButton=new Ext.Button({text:__('Search'),tooltip:__('Search in target layer using the feature-geometries from the selection'),disabled:true,handler:function(){this.searchFromFeatures();},scope:this});this.cancelButton=new Ext.Button({text:'Cancel',tooltip:__('Cancel ongoing search'),disabled:true,listeners:{click:function(){this.fireEvent('searchcanceled',this);},scope:this}});return this.actionButtons=new Ext.ButtonGroup({fieldLabel:__('Actions'),anchor:"100%",title:null,border:false,items:[this.cancelButton,this.searchButton]});},createDrawFieldSet:function(){this.selectionStatusField=new Heron.widgets.HTMLPanel({html:__('No objects selected'),preventBodyReset:true,bodyCfg:{style:{padding:'2px',border:'0px'}},style:{marginTop:'2px',marginBottom:'2px',fontFamily:'Verdana, Arial, Helvetica, sans-serif',fontSize:'11px',color:'#0000C0'}});return this.drawFieldSet=new Ext.form.FieldSet({xtype:"fieldset",title:null,anchor:"100%",items:[this.createDrawToolPanel({style:{marginTop:'12px',marginBottom:'12px'},activateControl:false}),this.selectionStatusField]});},createSearchDistField:function(){this.spatialFilterDistance=1;return this.searchDistField=new Ext.form.NumberField({fieldLabel:__('Distance of Search'),name:'basic',value:1,minValue:-99999,maxValue:99999,enableKeyEvents:true,listeners:{keyup:function(numberfield,ev){this.spatialFilterDistance=numberfield.getValue();},scope:this}});},createVectorLayerCombo:function(){return this.vectorLayerCombo=new Heron.widgets.LayerCombo({fieldLabel:__('Vector Layers'),sortOrder:this.layerSortOrder,layerFilter:this.vectorLayerFilter});},createSourceLayerCombo:function(){return this.sourceLayerCombo=new Heron.widgets.LayerCombo({fieldLabel:__('Cho
940ose Layer to select with'),sortOrder:this.layerSortOrder,layerFilter:this.layerFilter});},updateSelectionStatusField:function(text){if(this.selectionStatusField.body){this.selectionStatusField.body.update(text);}else{this.selectionStatusField.html=text;}},onFeatureDrawn:function(evt){var selectionLayer=this.selectionLayer;selectionLayer.removeAllFeatures();selectionLayer.addFeatures(evt.feature);var geometries=[selectionLayer.features[0].geometry];if(!this.search(geometries,{spatialFilterType:this.sourceSpatialFilterType,targetLayer:this.sourceLayer,projection:this.selectionLayer.projection,units:this.selectionLayer.units})){return;}
941this.searchSelect=true;this.searchButton.enable();this.cancelButton.disable();},onSourceLayerSelect:function(layer){if(this.sourceLayer&&this.sourceLayer.metadata){this.sourceLayer.metadata.isSourceLayer=false;}
942this.sourceLayer=layer;if(this.sourceLayer&&this.sourceLayer.metadata){this.sourceLayer.metadata.isSourceLayer=true;}
943this.searchButton.enable();this.cancelButton.disable();this.drawFieldSet.show();this.activateDrawControl();this.searchDistField.show();this.vectorLayerCombo.hide();this.selectionStatusField.show();this.updateStatusPanel();this.updateSelectionStatusField(__('Enter a buffer distance and draw to apply to objects from')+(this.sourceLayer?'<br/>"'+this.sourceLayer.name+'"':''));},onVectorLayerSelect:function(layer){if(this.sourceLayer&&this.sourceLayer.metadata){this.sourceLayer.metadata.isSourceLayer=false;}
944this.vectorLayer=layer;if(this.sourceLayer&&this.sourceLayer.metadata){this.sourceLayer.metadata.isSourceLayer=true;}
945this.sourceLayerCombo.hide();this.searchDistField.show();this.bufferButton.show();this.updateStatusPanel(__('Enter a buffer distance and press "Buffer" to apply to objets from')+(this.vectorLayer?'<br/>"'+this.vectorLayer.name+'"':''));},onSelectionLayerUpdate:function(){},onTargetLayerSelected:function(){this.actionButtons.show();this.searchButton.enable();this.cancelButton.disable();this.doLayout();this.updateStatusPanel(__('Press the Search button to start your Search.'));},onPanelRendered:function(){if(this.fromLastResult&&this.filterFeatures){this.selectionLayer.addFeatures(this.filterFeatures);}
946this.activateSearchByFeature();this.resetForm();},onParentShow:function(){this.activateSearchByFeature();},onParentHide:function(){this.deactivateSearchByFeature();this.resetForm();},onBeforeDestroy:function(){this.deactivateSearchByFeature();if(this.selectionLayer){this.selectionLayer.removeAllFeatures();this.map.removeLayer(this.selectionLayer);}},onSearchCanceled:function(searchPanel){Heron.widgets.search.SearchByBufferPanel.superclass.onSearchCanceled.call(this);this.resetForm();},bufferFeatures:function(features){var input,buffer,distance;var buffered=[];var reader=new jsts.io.WKTReader();var parser=new jsts.io.GeoJSONWriter();var geoJSON=new OpenLayers.Format.GeoJSON();var distance=this.spatialFilterDistance;for(var i=0;i<features.length;i++){input=reader.read(features[i].geometry.toString());buffer=input.buffer(distance*1.25);buffer=parser.write(buffer);buffer=geoJSON.read(buffer,'Geometry');var newfeat=new OpenLayers.Feature.Vector(buffer,null,null);buffered.push(newfeat);}
947return buffered;},onSearchSuccess:function(searchPanel,result){var features=this.features=this.filterFeatures=result.olResponse.features;this.searchButton.enable();this.cancelButton.disable();if(this.searchSelect){this.selectionLayer.removeAllFeatures();this.selectionLayer.addFeatures(this.bufferFeatures(features));this.targetLayerCombo.hide();this.updateStatusPanel();if(this.selectionLayer.features.length==0){this.updateSelectionStatusField(__('No objects selected.'));return;}
948if(this.selectionLayer.features.length>this.maxFilterGeometries){this.updateSelectionStatusField(__('Too many geometries for spatial filter: ')+this.selectionLayer.features.length+' '+'max: '+this.maxFilterGeometries);return;}
949this.searchSelect=false;this.targetLayerCombo.setLayers(this.targetLayerFilter(this.map));this.targetLayerCombo.show();var text=this.selectionLayer.features.length+' '+__('objects selected from "')+(this.sourceLayer?this.sourceLayer.name:'')+'"';this.updateSelectionStatusField(text);this.updateStatusPanel(__('Select a target layer to search using the geometries of the selected objects'));}else{Heron.widgets.search.SearchByBufferPanel.superclass.onSearchSuccess.call(this,searchPanel,result);}},searchVector:function(){features=this.sourceLayer.features;this.searchButton.enable();this.cancelButton.disable();this.selectionLayer.addFeatures(this.bufferFeatures(features));this.targetLayerCombo.hide();this.updateStatusPanel();if(this.selectionLayer.features.length==0){this.updateStatusPanel(__('No objects selected.'));return;}
950if(this.selectionLayer.features.length>this.maxFilterGeometries){this.updateStatusPanel(__('Too many geometries for spatial filter: ')+this.selectionLayer.features.length+' '+'max: '+this.maxFilterGeometries);return;}
951this.searchSelect=false;this.targetLayerCombo.setLayers(this.targetLayerFilter(this.map));this.targetLayerCombo.show();var text=this.selectionLayer.features.length+' '+__('objects selected from "')+(this.sourceLayer?this.sourceLayer.name:'')+'". '+__('Select a target layer to search using the geometries of the selected objects');this.updateStatusPanel(text);},searchFromFeatures:function(){var geometries=[];var features=this.selectionLayer.features;for(var i=0;i<features.length;i++){geometries.push(features[i].geometry);}
952this.searchButton.disable();this.cancelButton.enable();if(!this.search(geometries,{spatialFilterType:this.spatialFilterType,targetLayer:this.targetLayer,projection:this.selectionLayer.projection,spatialDistanceUnits:this.spatialDistanceUnits,spatialFilterDistance:this.spatialFilterDistance})){}}});Ext.reg('hr_searchbybufferpanel',Heron.widgets.search.SearchByBufferPanel);Ext.namespace("Heron.widgets.search");Heron.widgets.GXP_QueryPanel_Empty=Ext.extend(Ext.Panel,{});Heron.widgets.search.GXP_QueryPanel=Ext.extend(gxp.QueryPanel,{statusReady:__('Ready'),statusNoQueryLayers:__('No query layers found'),wfsVersion:'1.1.0',title:__('Query Panel'),bodyStyle:'padding: 12px',layerSortOrder:'ASC',caseInsensitiveMatch:false,autoWildCardAttach:false,downloadFormats:null,wfsLayers:undefined,layerFilter:function(map){return map.getLayersBy('metadata',{test:function(metadata){return metadata&&metadata.wfs&&!metadata.wfs.noBBOX;}})},progressMessages:[__('Working on it...'),__('Still searching, please be patient...'),__('Still searching, have you selected an area with too many objects?')],initComponent:function(){var map=this.map=Heron.Ap
952p.getMap();this.wfsLayers=this.getWFSLayers();var config={map:map,layerStore:new Ext.data.JsonStore({data:{layers:this.wfsLayers},sortInfo:this.layerSortOrder?{field:'title',direction:this.layerSortOrder}:null,root:"layers",fields:["title","name","namespace","url","schema","options"]}),listeners:{ready:function(panel,store){store.addListener("exception",this.onQueryException,this);},layerchange:function(panel,record){this.layerRecord=record;},beforequery:function(panel,store){var area=Math.round(map.getExtent().toGeometry().getGeodesicArea(map.projection));var filter=this.getFilter();return true;},query:function(panel,store){this.fireEvent('searchissued',this);},storeload:function(panel,store){var features=[];store.each(function(record){features.push(record.get("feature"));});var protocol=store.proxy.protocol;var wfsOptions=this.layerRecord.get('options');var filterFormat=new OpenLayers.Format.Filter.v1_1_0({srsName:protocol.srsName});var filterStr=protocol.filter?OpenLayers.Format.XML.prototype.write.apply(filterFormat,[filterFormat.write(protocol.filter)]):null;var downloadInfo={type:'wfs',url:protocol.options.url,downloadFormats:this.downloadFormats?this.downloadFormats:wfsOptions.downloadFormats,params:{typename:protocol.featureType,maxFeatures:undefined,"Content-Disposition":"attachment",filename:protocol.featureType,srsName:protocol.srsName,service:"WFS",version:"1.1.0",request:"GetFeature",filter:filterStr}};var result={olResponse:store.proxy.response,downloadInfo:downloadInfo};this.fireEvent('searchcomplete',panel,result);store.removeListener("exception",this.onQueryException,this);}}};if(config.layerStore.data.items[0]){Ext.apply(this,config);this.addEvents({"searchissued":true,"searchcomplete":true,"searchfailed":true,"searchsuccess":true,"searchaborted":true});this.likeSubstring=this.autoWildCardAttach;Heron.widgets.search.GXP_QueryPanel.superclass.initComponent.call(this);this.addButton(this.createActionButtons());this.addListener("searchissued",this.onSearchIssued,this);this.addListener("searchcomplete",this.onSearchComplete,this);this.addListener("beforedestroy",this.onBeforeDestroy,this);this.addListener("afterrender",this.onPanelRendered,this);if(this.ownerCt){this.ownerCt.addListener("parenthide",this.onParentHide,this);this.ownerCt.addListener("parentshow",this.onParentShow,this);}}else{Ext.apply(this,{});Heron.widgets.GXP_QueryPanel_Empty.superclass.initComponent.apply(this,arguments);}
953this.statusPanel=this.add({xtype:"hr_htmlpanel",html:config.layerStore.data.items[0]?this.statusReady:this.statusNoQueryLayers,height:132,preventBodyReset:true,bodyCfg:{style:{padding:'6px',border:'0px'}},style:{marginTop:'24px',paddingTop:'24px',fontFamily:'Verdana, Arial, Helvetica, sans-serif',fontSize:'11px',color:'#0000C0'}});},createActionButtons:function(){this.searchButton=new Ext.Button({text:__('Search'),tooltip:__('Search in target layer using the selected filters'),disabled:false,handler:function(){this.search();},scope:this});this.cancelButton=new Ext.Button({text:__('Cancel'),tooltip:__('Cancel current search'),disabled:true,listeners:{click:function(){this.searchAbort();},scope:this}});return this.actionButtons=new Ext.ButtonGroup({fieldLabel:null,anchor:"100%",title:null,border:false,width:160,padding:'2px',bodyBorder:false,style:{border:'0px'},items:[this.cancelButton,this.searchButton]});},getWFSLayers:function(){var self=this;if(this.wfsLayers){return this.wfsLayers;}
954var wmsLayers=this.layerFilter(this.map);var wfsLayers=[];Ext.each(wmsLayers,function(wmsLayer){var wfsOpts=wmsLayer.metadata.wfs;var protocol=wfsOpts.protocol;if(wfsOpts.protocol==='fromWMSLayer'){protocol=OpenLayers.Protocol.WFS.fromWMSLayer(wmsLayer);if(protocol.url instanceof Array){protocol.url=Heron.Utils.randArrayElm(protocol.url);protocol.options.url=protocol.url;}}else{protocol=wfsOpts.protocol;}
955var url=protocol.url.indexOf('?')==protocol.url.length-1?protocol.url.slice(0,-1):protocol.url;var featureType=protocol.featureType;var featurePrefix=wfsOpts.featurePrefix;var fullFeatureType=featurePrefix?featurePrefix+':'+featureType:featureType;var wfsVersion=protocol.version?protocol.version:self.version;var outputFormat=protocol.outputFormat?'&outputFormat='+protocol.outputFormat:'';var wfsLayer={title:wmsLayer.name,name:featureType,namespace:wfsOpts.featureNS,url:url,schema:url+'?service=WFS&version='+wfsVersion+'&request=DescribeFeatureType&typeName='+fullFeatureType+outputFormat,options:wfsOpts};wfsLayers.push(wfsLayer);});return wfsLayers;},getFeatureType:function(){return this.layerRecord?this.layerRecord.get('name'):'heron';},updateStatusPanel:function(text){this.statusPanel.body.update(text);},onPanelRendered:function(){},onParentShow:function(){},onParentHide:function(){},onBeforeDestroy:function(){},onQueryException:function(type,action,obj,response_error,o_records){this.searchButton.enable();if(this.timer){clearInterval(this.timer);this.timer=null;}
956this.updateStatusPanel(__('Search Failed'));},onSearchIssued:function(){this.searchState="searchissued";this.response=null;this.features=null;this.updateStatusPanel(__('Searching...'));if(this.timer){clearInterval(this.timer);this.timer=null;}
957this.searchButton.disable();var self=this;var startTime=new Date().getTime()/1000;this.timer=setInterval(function(){if(self.searchState!='searchissued'){return;}
958self.updateStatusPanel(Math.floor(new Date().getTime()/1000-startTime)+' '+__('Seconds')+' - '+
959self.progressMessages[Math.floor(Math.random()*self.progressMessages.length)]);},4000);},onSearchComplete:function(searchPanel,result){this.searchButton.enable();this.cancelButton.disable();if(this.timer){clearInterval(this.timer);this.timer=null;}
960if(this.searchState=='searchaborted'){return;}
961this.searchState="searchcomplete";
961var features=result.olResponse.features;var featureCount=features?features.length:0;this.updateStatusPanel(__('Search Completed: ')+featureCount+' '+(featureCount!=1?__('Results'):__('Result')));this.fireEvent('searchsuccess',searchPanel,result);},searchAbort:function(){if(this.timer){clearInterval(this.timer);this.timer=null;}
962if(this.featureStore&&this.featureStore.proxy&&this.featureStore.proxy.protocol){this.featureStore.proxy.protocol.abort(this.featureStore.proxy.response);}
963this.fireEvent('searchaborted',this);this.searchState='searchaborted';this.searchButton.enable();this.cancelButton.disable();this.updateStatusPanel(__('Search aborted'));},search:function(){this.query();this.cancelButton.enable();}});Ext.reg('hr_gxpquerypanel',Heron.widgets.search.GXP_QueryPanel);Ext.namespace("Heron.widgets.ToolbarBuilder");Heron.widgets.ToolbarBuilder.defs={baselayer:{options:{id:"baselayercombo"},create:function(mapPanel,options){if(!options.initialConfig){options.initialConfig={};}
964Ext.apply(options.initialConfig,options);options.initialConfig.map=mapPanel.getMap();return new Heron.widgets.BaseLayerCombo(options);}},geocoder:{options:{id:"geocodercombo"},create:function(mapPanel,options){return new Heron.widgets.search.GeocoderCombo(options);}},scale:{options:{id:"scalecombo"},create:function(mapPanel,options){if(!options.initialConfig){options.initialConfig={};}
965Ext.apply(options.initialConfig,options);return new Heron.widgets.ScaleSelectorCombo(options);}},featureinfo:{options:{tooltip:__('Feature information'),iconCls:"icon-getfeatureinfo",enableToggle:true,pressed:false,id:"featureinfo",toggleGroup:"toolGroup",popupWindowDefaults:{title:__('Feature Info'),width:360,height:200,anchored:false,hideonmove:false},controlDefaults:{maxFeatures:8,hover:false,drillDown:true,infoFormat:"application/vnd.ogc.gml",queryVisible:true}},create:function(mapPanel,options){if(options.getfeatureControl){options.controlDefaults=Ext.apply(options.controlDefaults,options.getfeatureControl);}
966var self=this;var olControlWMS=new OpenLayers.Control.WMSGetFeatureInfo({hover:options.controlDefaults.hover,maxFeatures:options.controlDefaults.maxFeatures,queryVisible:true,infoFormat:options.controlDefaults.infoFormat,drillDown:options.controlDefaults.drillDown,popup:!!options.popupWindow});var olControlWMTS=new OpenLayers.Control.WMTSGetFeatureInfo({hover:options.controlDefaults.hover,maxFeatures:options.controlDefaults.maxFeatures,queryVisible:true,popup:!!options.popupWindow,infoFormat:options.controlDefaults.infoFormat,drillDown:options.controlDefaults.drillDown});var map=Heron.App.getMap();map.addControl(olControlWMS);map.addControl(olControlWMTS);if(options.pressed){olControlWMS.activate();olControlWMTS.activate();}
967options.toggleHandler=function(button,pressed){if(self.featurePopupWindow){self.featurePopupWindow.hide();}
968var control=this.map.getControlsBy('id',olControlWMS.id);if(control.length>0){pressed?control[0].activate():control[0].deactivate();}
969control=this.map.getControlsBy('id',olControlWMTS.id);if(control.length>0){pressed?control[0].activate():control[0].deactivate();}};if(options.popupWindow){var popupWindowProps=Ext.apply(options.popupWindowDefaults,options.popupWindow);popupWindowProps.location=Heron.App.getMap().center;popupWindowProps.olControl=olControlWMS;popupWindowProps.olControlWMTS=olControlWMTS;popupWindowProps.featureInfoPanel=options.popupWindow?options.popupWindow.featureInfoPanel:null;if(!self.featurePopupWindow){self.featurePopupWindow=new Heron.widgets.search.FeatureInfoPopup(popupWindowProps);}}
970return new Ext.Action(options);}},featuregraph:{options:{tooltip:__('Feature Graph'),iconCls:"icon-chartbar",enableToggle:true,pressed:false,id:"featuregraph"},create:function(mapPanel,options){var self=this;options.handler=function(item){if(!self.graphHandler){self.graphHandler=new Heron.widgets.search.WMSFeatureInfoGraph();self.graphHandler.setup();}
971self.graphHandler.enable(item.pressed)};return new Ext.Action(options);}},help:{options:{tooltip:__('Help'),iconCls:"icon-help",enableToggle:false,pressed:false,id:"helpinfo",content:'<b>Default help info</b>',contentUrl:null,popupWindowDefaults:{title:__('Help'),border:true,layoutConfig:{padding:'0'},width:460,height:540,autoScroll:true,items:[{xtype:'hr_htmlpanel',height:'100%',width:'95%',preventBodyReset:true,bodyBorder:false,border:false,style:{paddingTop:'12px',paddingBottom:'12px',paddingLeft:'10px',paddingRight:'10px',fontFamily:'Verdana, Arial, Helvetica, sans-serif',fontSize:'10px',background:'#FFFFFF',color:'#111111'}}]}},create:function(mapPanel,options){options.handler=function(){var popupOptions=Ext.apply(options.popupWindowDefaults,options.popupWindow);if(options.contentUrl){popupOptions.items[0].autoLoad={url:options.contentUrl};}else{popupOptions.items[0].html=options.content}
972new Ext.Window(popupOptions).show();};return new Ext.Action(options);}},tooltips:{options:{tooltip:__('Feature tooltips'),iconCls:"icon-featuretooltip",enableToggle:true,pressed:false,id:"tooltips",toggleGroup:"toolGroup",popupWindowDefaults:{title:__('FeatureTooltip'),anchored:false,hideonmove:false,height:150},controlDefaults:{maxFeatures:1,hover:true,drillDown:false,infoFormat:"application/vnd.ogc.gml",queryVisible:true}},create:function(mapPanel,options){return Heron.widgets.ToolbarBuilder.defs.featureinfo.create(mapPanel,options);}},pan:{options:{tooltip:__('Pan'),iconCls:"icon-hand",enableToggle:true,pressed:true,control:new OpenLayers.Control.Navigation(),id:"pan",toggleGroup:"toolGroup"},create:function(mapPanel,options){return new GeoExt.Action(options);}},upload:{options:{tooltip:__('Upload features from local file'),iconCls:"icon-upload",enableToggle:false,pressed:false,id:"hr-upload-button",toggleGroup:"toolGroup",upload:{layerName:__('My Upload'),visibleOnUpload:true,url:Heron.globals.serviceUrl,params:{action:'upload',mime:'text/html',encoding:'escape'},formats:[{name:'Well-Known-Text (WKT)',fileExt:'.wkt',mimeType:'text/plain',formatter:'OpenLayers.Format.WKT'},{name:'Geographic Markup Language - v2 (GML2)',fileExt:'.gml',mimeType:'text/xml',formatter:'OpenLayers.Format.GML'},{name:'Geographic Markup Language - v3 (GML3)',fileExt:'.gml',mimeType:'text/xml',formatter:'OpenLayers.Format.GML.v3'},{name:'GeoJSON',fileExt:'.json',mimeType:'text/plain',formatter:'OpenLayers.Format.GeoJSON'},{name:'GPS Exchange Format (GPX)',fileExt:'.gpx',mimeType:'text/xml',formatter:'OpenLayers.Format.GPX'},{name:'Keyhole Markup Language (KML)',fileExt:'.kml',mimeType:'text/xml',formatter:'OpenLayers.Format.KML'},{name:'CSV (with X,Y)',fileExt:'.csv',mimeType:'text/plain',formatter:'OpenLayers.Format.GeoJSON'},{name:'ESRI Shapefile (zipped)',fileExt:'.zip',mimeType:'text/plain',formatter:'OpenLayers.Format.GeoJSON'}],fileProjection:new OpenLayers.Projection('EPSG:4326')}},create:function(mapPanel,options){var map=mapPanel.getMap();options.upload.map=map;var layers=map.getLayersByName(options.upload.layerName);var layer;if(layers.length==0){layer=new OpenLayers.Layer.Vector(options.upload.layerName);map.addLayers([layer]);}else{layer=layers[0];}
973options.control=new OpenLayers.Editor.Control.UploadFeature(layer,options.upload);return new GeoExt.Action(options);}},zoomin:{options:{tooltip:__('Zoom in'),iconCls:"icon-zoom-in",enableToggle:true,pressed:false,control:new OpenLayers.Control.ZoomBox({title:__('Zoom in'),out:false}),id:"zoomin",toggleGroup:"toolGroup"},create:function(mapPanel,options){return new GeoExt.Action(options);}},zoomout:{options:{tooltip:__('Zoom out'),iconCls:"icon-zoom-out",enableToggle:true,pressed:false,control:new OpenLayers.Control.ZoomBox({title:__('Zoom out'),out:true}),id:"zoomout",toggleGroup:"toolGroup"},create:function(mapPanel,options){return new GeoExt.Action(options);}},zoomvisible:{options:{tooltip:__('Zoom to full extent'),iconCls:"icon-zoom-visible",enableToggle:false,pressed:false,control:new OpenLayers.Control.ZoomToMaxExtent(),id:"zoomvisible"},create:function(mapPanel,options){return new GeoExt.Action(options);}},zoomprevious:{options:{tooltip:__('Zoom previous'),iconCls:"icon-zoom-previous",enableToggle:false,disabled:true,pressed:false,id:"zoomprevious"},create:function(mapPanel,options){if(!mapPanel.historyControl){mapPanel.historyControl=new OpenLayers.Control.NavigationHistory();mapPanel.getMap().addControl(mapPanel.historyControl);}
974options.control=mapPanel.historyControl.previous;return new GeoExt.Action(options);}},zoomnext:{options:{tooltip:__('Zoom next'),iconCls:"icon-zoom-next",enableToggle:false,disabled:true,pressed:false,id:"zoomnext"},create:function(mapPanel,options){if(!mapPanel.historyControl){mapPanel.historyControl=new OpenLayers.Control.NavigationHistory();mapPanel.getMap().addControl(mapPanel.historyControl);}
975options.control=mapPanel.historyControl.next;return new GeoExt.Action(options);}},measurelength:{options:{tooltip:__('Measure length'),iconCls:"icon-measure-length",enableToggle:true,pressed:false,measureLastLength:0.0,control:new OpenLayers.Control.Measure(OpenLayers.Handler.Path,{persist:true,immediate:true,displayClass:"olControlMeasureDistance",handlerOptions:{layerOptions:{styleMap:new OpenLayers.StyleMap({"default":new OpenLayers.Style(null,{rules:[new OpenLayers.Rule({symbolizer:{"Point":{pointRadius:10,graphicName:"square",fillColor:"white",fillOpacity:0.25,strokeWidth:1,strokeOpacity:1,strokeColor:"#333333"},"Line":{strokeWidth:1,strokeOpacity:1,strokeColor:"#FF0000",strokeDashstyle:"solid"}}})]})})}}}),id:"measurelength",toggleGroup:"toolGroup"},create:function(mapPanel,options){var action=new GeoExt.Action(options);var map=mapPanel.getMap();var controls=map.getControlsByClass("OpenLayers.Control.Measure");Heron.widgets.ToolbarBuilder.onMeasurementsActivate=function(event){Ext.getCmp("measurelength").measureLastLength=0.0;};Heron.widgets.ToolbarBuilder.onMeasurements=function(event){var units=event.units;var measure=event.measure;var out="";if(event.order==1){out+=__('Length')+": "+measure.toFixed(2)+" "+units;var item=Ext.getCmp("measurelength");item.measureLastLength=0.0;}else{out+=__('Area')+": "+measure.toFixed(2)+" "+units+"&#178;";}
976Ext.getCmp("bbar_measure").setText(out);};Heron.widgets.ToolbarBuilder.onMeasurementsPartial=function(event){var units=event.units;var measure=event.measure;var out="";if(event.order==1){out+=__('Length')+": "+measure.toFixed(2)+" "+units;var item=Ext.getCmp("measurelength");item.measureLastLength=measure;}else{out+=__('Area')+": "+measure.toFixed(2)+" "+units+"&#178;";}
977Ext.getCmp("bbar_measure").setText(out);};Heron.widgets.ToolbarBuilder.onMeasurementsDeactivate=function(event){Ext.getCmp("bbar_measure").setText("");};for(var i=0;i<controls.length;
977i++){if(controls[i].displayClass=='olControlMeasureDistance'){controls[i].geodesic=options.geodesic;controls[i].events.register("activate",map,Heron.widgets.ToolbarBuilder.onMeasurementsActivate);controls[i].events.register("measure",map,Heron.widgets.ToolbarBuilder.onMeasurements);controls[i].events.register("measurepartial",map,Heron.widgets.ToolbarBuilder.onMeasurementsPartial);controls[i].events.register("deactivate",map,Heron.widgets.ToolbarBuilder.onMeasurementsDeactivate);break;}}
978return action;}},measurearea:{options:{tooltip:__('Measure area'),iconCls:"icon-measure-area",enableToggle:true,pressed:false,control:new OpenLayers.Control.Measure(OpenLayers.Handler.Polygon,{persist:true,immediate:true,displayClass:"olControlMeasureArea",handlerOptions:{layerOptions:{styleMap:new OpenLayers.StyleMap({"default":new OpenLayers.Style(null,{rules:[new OpenLayers.Rule({symbolizer:{"Point":{pointRadius:10,graphicName:"square",fillColor:"white",fillOpacity:0.25,strokeWidth:1,strokeOpacity:1,strokeColor:"#333333"},"Polygon":{strokeWidth:1,strokeOpacity:1,strokeColor:"#FF0000",strokeDashstyle:"solid",fillColor:"#FFFFFF",fillOpacity:0.5}}})]})})}}}),id:"measurearea",toggleGroup:"toolGroup"},create:function(mapPanel,options){var action=new GeoExt.Action(options);var map=mapPanel.getMap();var controls=map.getControlsByClass("OpenLayers.Control.Measure");for(var i=0;i<controls.length;i++){if(controls[i].displayClass=='olControlMeasureArea'){controls[i].geodesic=options.geodesic;controls[i].events.register("activate",map,Heron.widgets.ToolbarBuilder.onMeasurementsActivate);controls[i].events.register("measure",map,Heron.widgets.ToolbarBuilder.onMeasurements);controls[i].events.register("measurepartial",map,Heron.widgets.ToolbarBuilder.onMeasurementsPartial);controls[i].events.register("deactivate",map,Heron.widgets.ToolbarBuilder.onMeasurementsDeactivate);break;}}
979return action;}},oleditor:{options:{tooltip:__('Draw Features'),iconCls:"icon-mapedit",enableToggle:true,pressed:false,id:"mapeditor",toggleGroup:"toolGroup",olEditorOptions:{activeControls:['UploadFeature','DownloadFeature','Separator','Navigation','SnappingSettings','CADTools','Separator','DeleteAllFeatures','DeleteFeature','DragFeature','SelectFeature','Separator','DrawHole','ModifyFeature','Separator'],featureTypes:['text','polygon','path','point'],language:'en',DownloadFeature:{url:Heron.globals.serviceUrl,params:{action:'download',mime:'text/plain',filename:'editor',encoding:'none'},formats:[{name:'Well-Known-Text (WKT)',fileExt:'.wkt',mimeType:'text/plain',formatter:'OpenLayers.Format.WKT'},{name:'Geographic Markup Language - v2 (GML2)',fileExt:'.gml',mimeType:'text/xml',formatter:new OpenLayers.Format.GML.v2({featureType:'oledit',featureNS:'http://geops.de'})},{name:'Geographic Markup Language - v3 (GML3)',fileExt:'.gml',mimeType:'text/xml',formatter:new OpenLayers.Format.GML.v3({featureType:'oledit',featureNS:'http://geops.de'})},{name:'GeoJSON',fileExt:'.json',mimeType:'text/plain',formatter:'OpenLayers.Format.GeoJSON'},{name:'GPS Exchange Format (GPX)',fileExt:'.gpx',mimeType:'text/xml',formatter:'OpenLayers.Format.GPX'},{name:'Keyhole Markup Language (KML)',fileExt:'.kml',mimeType:'text/xml',formatter:'OpenLayers.Format.KML'}],fileProjection:new OpenLayers.Projection('EPSG:4326')},UploadFeature:{url:Heron.globals.serviceUrl,params:{action:'upload',mime:'text/html',encoding:'escape'},formats:[{name:'Well-Known-Text (WKT)',fileExt:'.wkt',mimeType:'text/plain',formatter:'OpenLayers.Format.WKT'},{name:'Geographic Markup Language - v2 (GML2)',fileExt:'.gml',mimeType:'text/xml',formatter:'OpenLayers.Format.GML'},{name:'Geographic Markup Language - v3 (GML3)',fileExt:'.gml',mimeType:'text/xml',formatter:'OpenLayers.Format.GML.v3'},{name:'GeoJSON',fileExt:'.json',mimeType:'text/plain',formatter:'OpenLayers.Format.GeoJSON'},{name:'GPS Exchange Format (GPX)',fileExt:'.gpx',mimeType:'text/xml',formatter:'OpenLayers.Format.GPX'},{name:'Keyhole Markup Language (KML)',fileExt:'.kml',mimeType:'text/xml',formatter:'OpenLayers.Format.KML'},{name:'CSV (with X,Y)',fileExt:'.csv',mimeType:'text/plain',formatter:'OpenLayers.Format.GeoJSON'}
979,{name:'ESRI Shapefile (zipped)',fileExt:'.zip',mimeType:'text/plain',formatter:'OpenLayers.Format.GeoJSON'}],fileProjection:new OpenLayers.Projection('EPSG:4326')}}},create:function(mapPanel,options){OpenLayers.Lang.setCode(options.olEditorOptions.language);var map=mapPanel.getMap();this.editor=new OpenLayers.Editor(map,options.olEditorOptions);this.startEditor=function(self){var editor=self.editor;if(!editor){return;}
980if(editor.editLayer){editor.editLayer.setVisibility(true);}
981self.editor.startEditMode();};this.stopEditor=function(self){var editor=self.editor;if(!editor){return;}
982if(editor.editLayer){}
983editor.stopEditMode();};var self=this;options.handler=function(cmp,event){if(cmp.pressed===true){self.startEditor(self);}else{self.stopEditor(self);}};if(options.pressed){this.startEditor(self);}
984options.control=this.editor.editorPanel;return new GeoExt.Action(options);}},any:{options:{tooltip:__('Anything is allowed here'),text:__('Any valid Toolbar.add() config goes here')},create:function(mapPanel,options){return options;}},search_nominatim:{options:{tooltip:__('Search Nominatim'),id:"search_nominatim"},create:function(mapPanel,options){return new Heron.widgets.search.NominatimSearchCombo(options);}},namesearch:{options:{id:"namesearch"},create:function(mapPanel,options){return Ext.create(options);}},searchcenter:{options:{id:"searchcenter",tooltip:__('Search'),iconCls:"icon-find",pressed:false,enableToggle:false,searchWindowDefault:{title:__('Search'),layout:"fit",closeAction:"hide",x:100,width:400,height:400}},create:function(mapPanel,options){var searchWindow,searchWindowId=options.id;var pressButton=function(){var sc=Ext.getCmp(searchWindowId);if(sc&&!sc.pressed){sc.toggle();}};var depressButton=function(){var sc=Ext.getCmp(searchWindowId);if(sc&&sc.pressed){sc.toggle();}};var showSearchWindow=function(){if(!searchWindow){var windowOptions=options.searchWindowDefault;Ext.apply(windowOptions,options.searchWindow);searchWindow=new Ext.Window(windowOptions);searchWindow.on('hide',depressButton);searchWindow.on('show',pressButton);}
985searchWindow.show();};var toggleSearchWindow=function(){if(searchWindow&&searchWindow.isVisible()){searchWindow.hide();}else{showSearchWindow();}};if(options.show){options.pressed=true;}
986if(options.pressed||options.show){showSearchWindow();}
987options.handler=function(){toggleSearchWindow();};if(options.enableToggle){return new GeoExt.Action(options)}else{return new Ext.Action(options);}}},printdialog:{options:{id:"hr_printdialog",title:__('Print Dialog'),tooltip:__('Print Dialog Popup with Preview Map'),iconCls:"icon-printer",enableToggle:false,pressed:false,windowTitle:__('Print Preview'),windowWidth:400,method:'POST',url:null,legendDefaults:{useScaleParameter:false,baseParams:{FORMAT:"image/png"}},showTitle:true,mapTitle:null,mapTitleYAML:"mapTitle",showComment:true,mapComment:null,mapCommentYAML:"mapComment",showFooter:false,mapFooter:null,mapFooterYAML:"mapFooter",printAttribution:true,mapAttribution:null,mapAttributionYAML:"mapAttribution",showRotation:true,showLegend:true,showLegendChecked:false,mapLimitScales:true,showOutputFormats:false,mapPreviewAutoHeight:false,mapPreviewHeight:300},create:function(mapPanel,options){options.handler=function(){if(!Heron.widgets.ToolbarBuilder.checkCanWePrint(mapPanel.getMap().layers)){return;}
988var printWindow=new Heron.widgets.PrintPreviewWindow({title:options.windowTitle,modal:true,border:false,resizable:false,width:options.windowWidth,autoHeight:true,hropts:{mapPanel:mapPanel,method:options.method,url:options.url,legendDefaults:options.legendDefaults,showTitle:options.showTitle,mapTitle:options.mapTitle,mapTitleYAML:options.mapTitleYAML,showComment:options.showComment,mapComment:options.mapComment,mapCommentYAML:options.mapCommentYAML,showFooter:options.showFooter,mapFooter:options.mapFooter,mapFooterYAML:options.mapFooterYAML,printAttribution:options.printAttribution,mapAttribution:options.mapAttribution,mapAttributionYAML:options.mapAttributionYAML,showRotation:options.showRotation,showLegend:options.showLegend,showLegendChecked:options.showLegendChecked,mapLimitScales:options.mapLimitScales,showOutputFormats:options.showOutputFormats,mapPreviewAutoHeight:options.mapPreviewAutoHeight,mapPreviewHeight:options.mapPreviewHeight}});};return new Ext.Action(options);}},printdirect:{options:{id:"printdirect",tooltip:__('Print Visible Map Area Directly'),iconCls:"icon-print-direct",enableToggle:false,pressed:false,method:'POST',url:null,mapTitle:null,mapTitleYAML:"mapTitle",mapComment:__('This is a simple map directly printed.'),mapCommentYAML:"mapComment",mapFooter:null,mapFooterYAML:"mapFooter",printAttribution:true,mapAttribution:null,mapAttributionYAML:"mapAttribution",mapPrintLayout:"A4",mapPrintDPI:"75",mapPrintLegend:false,mapPrintOutputFormat:null,excludeLayers:['OpenLayers.Handler.Polygon','OpenLayers.Handler.RegularPolygon','OpenLayers.Handler.Path','OpenLayers.Handler.Point'],legendDefaults:{useScaleParameter:true,baseParams:{FORMAT:"image/png"}}},create:function(mapPanel,options){options.handler=function(){if(!Heron.widgets.ToolbarBuilder.checkCanWePrint(mapPanel.getMap().layers)){return;}
989var busyMask=new Ext.LoadMask(Ext.getBody(),{msg:__('Create PDF...')});busyMask.show();Ext.Ajax.request({url:options.url+'/info.json',method:'GET',params:null,
989success:function(result,request){var printCapabilities=Ext.decode(result.responseText);var printProvider=new GeoExt.data.PrintProvider({method:options.method,capabilities:printCapabilities,outputFormatsEnabled:(options.mapPrintOutputFormat!=null),customParams:{},listeners:{"printexception":function(printProvider,result){Ext.Msg.alert(__('Warning'),__('Error from Print server: ')+result.statusText);},"beforeencodelayer":function(printProvider,layer){for(var i=0;i<options.excludeLayers.length;i++){if(layer.name==options.excludeLayers[i]){return false;}}
990return true;}}});printProvider.customParams[options.mapTitleYAML]=(options.mapTitle)?options.mapTitle:'';printProvider.customParams[options.mapCommentYAML]=(options.mapComment)?options.mapComment:'';printProvider.customParams[options.mapFooterYAML]=(options.mapFooter)?options.mapFooter:'';printProvider.customParams[options.mapAttributionYAML]='';if(options.printAttribution){if(options.mapAttribution){printProvider.customParams[options.mapAttributionYAML]=options.mapAttribution;}else{var attributions=[];var map=mapPanel.getMap();if(map&&map.layers){for(var i=0,len=map.layers.length;i<len;i++){var layer=map.layers[i];if(layer.attribution&&layer.getVisibility()){if(OpenLayers.Util.indexOf(attributions,layer.attribution)===-1){attributions.push(layer.attribution);}}}
991var tmp=document.createElement("DIV");tmp.innerHTML=attributions?attributions:'';printProvider.customParams[options.mapAttributionYAML]=tmp.textContent||tmp.innerText||"";}}}
992if((printProvider.layouts.getCount()>1)&&(options.mapPrintLayout)){var index=printProvider.layouts.find('name',options.mapPrintLayout);if(index!=-1){printProvider.setLayout(printProvider.layouts.getAt(index));}}
993if((printProvider.dpis.getCount()>1)&&(options.mapPrintDPI)){var index=printProvider.dpis.find('value',options.mapPrintDPI);if(index!=-1){printProvider.setDpi(printProvider.dpis.getAt(index));}}
994if(printProvider.outputFormatsEnabled&&options.mapPrintOutputFormat&&(printProvider.outputFormats.getCount()>0)){var index=printProvider.outputFormats.find('name',options.mapPrintOutputFormat);if(index!=-1){printProvider.setOutputFormat(printProvider.outputFormats.getAt(index));}}
995if(options.mapPrintLegend){var legendPanel=new Heron.widgets.LayerLegendPanel({renderTo:document.body,hidden:true,defaults:options.legendDefaults});}
996var printPage=new GeoExt.data.PrintPage({printProvider:printProvider});printPage.fit(mapPanel,true);printProvider.print(mapPanel,printPage,options.mapPrintLegend&&{legend:legendPanel});busyMask.hide();},failure:function(result,request){busyMask.hide();Ext.Msg.alert(__('Warning'),__('Error getting Print options from server: ')+options.url);}});};return new Ext.Action(options);}},coordinatesearch:{options:{id:"coordinatesearch",tooltip:__('Enter coordinates to go to location on map'),iconCls:"icon-map-pin",enableToggle:false,pressed:false,formWidth:340,formPageX:200,formPageY:75,buttonAlign:'center'},create:function(mapPanel,options){options.handler=function(){if(!this.coordPopup){var sp=new Heron.widgets.search.CoordSearchPanel({});this.coordPopup=new Ext.Window({layout:'auto',resizable:false,autoHeight:true,pageX:options.formPageX,pageY:options.formPageY,width:options.formWidth,closeAction:'hide',title:__('Go to coordinates'),items:[new Heron.widgets.search.CoordSearchPanel({deferredRender:false,border:false,title:options.title?options.title:null,titleDescription:options.titleDescription?options.titleDescription:sp.titleDescription,titleDescriptionStyle:options.titleDescriptionStyle?options.titleDescriptionStyle:sp.titleDescriptionStyle,bodyBaseCls:options.bodyBaseCls?options.bodyBaseCls:sp.bodyBaseCls,bodyItemCls:options.bodyItemCls?options.bodyItemCls:null,bodyCls:options.bodyCls?options.bodyCls:null,fieldMaxWidth:options.fieldMaxWidth?options.fieldMaxWidth:sp.fieldMaxWidth,fieldLabelWidth:options.fieldLabelWidth?options.fieldLabelWidth:sp.fieldLabelWidth,fieldStyle:options.fieldStyle?options.fieldStyle:sp.fieldStyle,fieldLabelStyle:options.fieldLabelStyle?options.fieldLabelStyle:sp.fieldLabelStyle,layerName:options.layerName?options.layerName:sp.layerName,onProjectionIndex:options.onProjectionIndex?options.onProjectionIndex:sp.onProjectionIndex,onZoomLevel:options.onZoomLevel?options.onZoomLevel:sp.onZoomLevel,showProjection:options.showProjection?options.showProjection:sp.showProjection,showZoom:options.showZoom?options.showZoom:sp.showZoom,showAddMarkers:options.showAddMarkers?options.showAddMarkers:sp.showAddMarkers,checkAddMarkers:options.checkAddMarkers?options.checkAddMarkers:sp.checkAddMarkers,showHideMarkers:options.showHideMarkers?options.showHideMarkers:sp.showHideMarkers,checkHideMarkers:options.checkHideMarkers?options.checkHideMarkers:sp.checkHideMarkers,showResultMarker:options.showResultMarker?options.showResultMarker:sp.showResultMarker,f
996ieldResultMarkerStyle:options.fieldResultMarkerStyle?options.fieldResultMarkerStyle:sp.fieldResultMarkerStyle,fieldResultMarkerText:options.fieldResultMarkerText?options.fieldResultMarkerText:sp.fieldResultMarkerText,fieldResultMarkerSeparator:options.fieldResultMarkerSeparator?options.fieldResultMarkerSeparator:sp.fieldResultMarkerSeparator,fieldResultMarkerPrecision:options.fieldResultMarkerPrecision?options.fieldResultMarkerPrecision:sp.fieldResultMarkerPrecision,removeMarkersOnClose:options.removeMarkersOnClose?options.removeMarkersOnClose:sp.removeMarkersOnClose,showRemoveMarkersBtn:options.showRemoveMarkersBtn?options.showRemoveMarkersBtn:sp.showRemoveMarkersBtn,buttonAlign:options.buttonAlign?options.buttonAlign:sp.buttonAlign,hropts:options.hropts?options.hropts:null})]});}
997if(this.coordPopup.isVisible()){this.coordPopup.hide();}else{this.coordPopup.show(this);}};return new Ext.Action(options);}},vectorstyler:{options:{id:"styler",tooltip:__('Edit vector Layer styles'),iconCls:"icon-palette",enableToggle:false,pressed:false,formWidth:340,formPageX:200,formPageY:75,buttonAlign:'center'},create:function(mapPanel,options){options.handler=function(){if(!this.stylerPopup){var layer=mapPanel.map.getLayersByName('RD Info - Punten')[0];var layerRecord=mapPanel.layers.getByLayer(layer);var url='http://kademo.nl/gs2';this.stylerPopup=new Ext.Window({layout:'auto',resizable:false,autoHeight:true,pageX:options.formPageX,pageY:options.formPageY,width:options.formWidth,closeAction:'hide',title:__('Style Editor'),items:[{xtype:"gxp_wmsstylesdialog",layerRecord:layerRecord,plugins:[{ptype:"gxp_memorystylewriter",baseUrl:url}],listeners:{"styleselected":function(cmp,style){layer.mergeNewParams({styles:style});},"modified":function(cmp,style){cmp.saveStyles();},"saved":function(cmp,style){layer.mergeNewParams({_olSalt:Math.random(),styles:style});},scope:this}}]});}
998if(this.stylerPopup.isVisible()){this.stylerPopup.hide();}else{this.stylerPopup.show(this);}};return new Ext.Action(options);}},addbookmark:{options:{id:"addbookmark",tooltip:__('Bookmark current map context (layers, zoom, extent)'),iconCls:"icon-bookmark",enableToggle:false,disabled:false,pressed:false},create:function(mapPanel,options){options.handler=function(){var bookmarksPanel=Heron.widgets.Bookmarks.getBookmarksPanel(this);if(!bookmarksPanel){Ext.Msg.alert(__('Warning'),__('Error: No \'BookmarksPanel\' found.'));return null;}
999bookmarksPanel.onAddBookmark();};return new GeoExt.Action(options);}},mapopen:{options:{id:"mapopen",tooltip:__('Open a map context (layers, styling, extent) from file'),iconCls:"icon-map-open",enableToggle:false,disabled:false,pressed:false},create:function(mapPanel,options){options.handler=function(){Heron.data.MapContext.openContext(mapPanel,options);}
1000return new GeoExt.Action(options);}},mapsave:{options:{id:"mapsave",tooltip:__('Save current map context (layers, styling, extent) to file'),iconCls:"icon-map-save",enableToggle:false,disabled:false,pressed:false,mime:'text/xml',fileName:'heron_map',fileExt:'.cml'},create:function(mapPanel,options){options.handler=function(){Heron.data.MapContext.saveContext(mapPanel,options);}
1001return new GeoExt.Action(options);}},epsgpanel:{options:{id:"map-panel-epsg",text:"",width:80,xtype:"tbtext"},create:function(mapPanel,options){return Ext.create(options);}},xcoord:{options:{id:"x-coord",text:"X:",width:80,xtype:"tbtext"},create:function(mapPanel,options){return Ext.create(options);}},ycoord:{options:{id:"y-coord",text:"Y:",width:80,xtype:"tbtext"},create:function(mapPanel,options){return Ext.create(options);}},measurepanel:{options:{id:"bbar_measure",text:"",xtype:"tbtext"},create:function(mapPanel,options){return Ext.create(options);}},overviewmap:{options:{tooltip:__('OverviewMap'),iconCls:"icon-overview",enableToggle:true,pressed:true,id:"overviewmap",overviewOptions:{autoActivate:true,maximized:true,minRatio:16,maxRatio:64,mapOptions:{projection:new OpenLayers.Projection("EPSG:4326")}}},create:function(mapPanel,options){var ovshow=true;var ovmap=new OpenLayers.Control.OverviewMap(options.overviewOptions);options.handler=function(){if(ovshow){ovmap.element.style.display='none';}else{ovmap.element.style.display='';}
1002ovshow=!ovshow;};options.control=ovmap;return new GeoExt.Action(options);}},streetview:{options:{tooltip:__('Click on map to view location in Google StreetView'),iconCls:"icon-streetview",enableToggle:true,pressed:false,id:"streetview",toggleGroup:"toolGroup",popupOptions:{title:__('Street View'),anchored:false,anchorPosition:'auto',width:300,height:300,collapsible:true,draggable:true}}
1002,create:function(mapPanel,options){var ClickControl=OpenLayers.Class(OpenLayers.Control,{defaults:{pixelTolerance:1,stopSingle:true},initialize:function(options){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(event){openPopup(this.map.getLonLatFromViewPortPx(event.xy));}});var popup;function openPopup(location){if(!location){location=mapPanel.map.getCenter();}
1003if(popup&&popup.anc){popup.close();}
1004var popupOptions={location:location,map:mapPanel,items:[new Heron.widgets.GoogleStreetViewPanel()]};Ext.apply(popupOptions,options.popupOptions);popup=new GeoExt.Popup(popupOptions);popup.show();}
1005options.control=new ClickControl({trigger:function(e){openPopup(this.map.getLonLatFromViewPortPx(e.xy));}});return new GeoExt.Action(options);}},streetview_extern:{options:{tooltip:__('Open new window in Google StreetView'),iconCls:"icon-streetview",enableToggle:true,pressed:false,id:"streetview_extern",toggleGroup:"toolGroup"},create:function(mapPanel,options){options.control=new OpenLayers.Control.Click({trigger:function(e){var lonlat=mapPanel.getMap().getLonLatFromPixel(e.xy);var source=new Proj4js.Proj('EPSG:28992');var dest=new Proj4js.Proj('WGS84');var p=new Proj4js.Point(lonlat.lon,lonlat.lat);Proj4js.transform(source,dest,p);var link="http://maps.google.com/?layer=c&cbp=1,1,1,1,1&t=h&z=14&ll="+p.y+","+p.x+"&cbll="+p.y+","+p.x+""
1006window.open(link,id);}});return new GeoExt.Action(options);}}};Heron.widgets.ToolbarBuilder.checkCanWePrint=function(layers){var failingLayers='';for(var l=0;l<layers.length;l++){var nextLayer=layers[l];if(!nextLayer.visibility||!nextLayer.disallowPrinting){continue;}
1007failingLayers+="\n - "+nextLayer.name;if(nextLayer.isBaseLayer){failingLayers+=__(' [Baselayer]');}}
1008if(failingLayers!=''){Ext.Msg.alert(__('Warning'),__('!!Cannot Print!!\nThis service disallows printing of the following layer(s).\nPlease disable these layers and print again.\n')+failingLayers);return false;}
1009return true;};Heron.widgets.ToolbarBuilder.setItemDef=function(type,createFun,defaultOptions){Heron.widgets.ToolbarBuilder.defs[type].create=createFun;Heron.widgets.ToolbarBuilder.defs[type].options=defaultOptions?defaultOptions:{};};Heron.widgets.ToolbarBuilder.build=function(mapPanel,config,toolbar){var toolbarItems=[];if(typeof(config)!=="undefined"){for(var i=0;i<config.length;i++){var itemDef=config[i];if(itemDef.type=="-"){toolbarItems.push("-");continue;}
1010if(itemDef.type=="->"){toolbarItems.push("->");continue;}
1011var createFun;var defaultItemDef=Heron.widgets.ToolbarBuilder.defs[itemDef.type];if(itemDef.create){createFun=itemDef.create;}else if(defaultItemDef&&defaultItemDef.create){createFun=defaultItemDef.create;}
1012if(!createFun){continue;}
1013var coreOptions={map:mapPanel.getMap(),scope:mapPanel};var defaultItemOptions={};if(defaultItemDef&&defaultItemDef.options){defaultItemOptions=defaultItemDef.options;}
1014var extraOptions=itemDef.options?itemDef.options:{};var options=Ext.apply(coreOptions,extraOptions,defaultItemOptions);var item=createFun(mapPanel,options);if(item){toolbarItems.push(item);}}}
1015if(toolbarItems.length>0){toolbar.add(toolbarItems);}else{toolbar.setVisible(false);}};Ext.namespace("Heron.widgets");Heron.widgets.XMLTreePanel=Ext.extend(Ext.tree.TreePanel,{initComponent:function(){Ext.apply(this,{autoScroll:true,rootVisible:false,root:this.root?this.root:{nodeType:'async',text:'Ext JS',draggable:false,id:'source'}});Heron.widgets.XMLTreePanel.superclass.initComponent.apply(this,arguments);},xmlTreeFromUrl:function(url){var self=this;Ext.Ajax.request({url:url,method:'GET',params:null,success:function(result,request){self.xmlTreeFromDoc(self,result.responseXML);},failure:function(result,request){Ext.Msg.alert(__('Warning'),__('Error in ajax request'));}});},xmlTreeFromText:function(self,text){var doc=new OpenLayers.Format.XML().read(text);self.xmlTreeFromDoc(self,doc);return doc;},xmlTreeFromDoc:function(self,doc){self.setRootNode(self.treeNodeFromXml(self,doc.documentElement||doc));},treeNodeFromXml:function(self,XmlEl){var t=((XmlEl.nodeType==3)?XmlEl.nodeValue:XmlEl.tagName);if(t.replace(/\s/g,'').length==0){return null;}
1016var result=new Ext.tree.TreeNode({text:t});var xmlns='xmlns',xsi='xsi';if(XmlEl.nodeType==1){Ext.each(XmlEl.attributes,function(a){var nodeName=a.nodeName;if(!(XmlEl.parentNode.nodeType==9&&(nodeName.substring(0,xmlns.length)===xmlns||nodeName.substring(0,xsi.length)===xsi))){var c=new Ext.tree.TreeNode({text:a.nodeName});c.appendChild(new Ext.tree.TreeNode({text:a.nodeValue}));result.appendChild(c);}});
1016Ext.each(XmlEl.childNodes,function(el){if((el.nodeType==1)||(el.nodeType==3)){var c=self.treeNodeFromXml(self,el);if(c){result.appendChild(c);}}});}
1017return result;}});Ext.reg('hr_xmltreepanel',Heron.widgets.XMLTreePanel);Ext.namespace("Heron.widgets");Heron.widgets.IFramePanel=Ext.extend(Ext.Panel,{name:'iframe',iframe:null,src:Ext.isIE&&Ext.isSecure?Ext.SSL_SECURE_URL:'about:blank',maskMessage:__('Loading...'),doMask:true,initComponent:function(){this.bodyCfg={tag:'iframe',frameborder:'0',src:this.src,name:this.name};Ext.apply(this,{});Heron.widgets.IFramePanel.superclass.initComponent.apply(this,arguments);this.addListener=this.on;},onRender:function(){Heron.widgets.IFramePanel.superclass.onRender.apply(this,arguments);this.iframe=Ext.isIE?this.body.dom.contentWindow:window.frames[this.name];this.body.dom[Ext.isIE?'onreadystatechange':'onload']=this.loadHandler.createDelegate(this);},loadHandler:function(){this.src=this.body.dom.src;this.removeMask();},getIframe:function(){return this.iframe;},getIframeBody:function(){var b=this.iframe.document.getElementsByTagName('body');if(!Ext.isEmpty(b)){return b[0];}else{return'';}},getUrl:function(){return this.body.dom.src;},setUrl:function(source){this.setMask();this.body.dom.src=source;},resetUrl:function(){this.setMask();this.body.dom.src=this.src;},refresh:function(){if(!this.isVisible()){return;}
1018this.setMask();this.body.dom.src=this.body.dom.src;},setMask:function(){if(this.doMask){this.el.mask(this.maskMessage);}},removeMask:function(){if(this.doMask){this.el.unmask();}}});Ext.reg('hr_iframePpanel',Heron.widgets.IFramePanel);Ext.namespace("Heron.widgets");Heron.widgets.ScaleSelectorCombo=Ext.extend(Ext.form.ComboBox,{map:null,tpl:'<tpl for="."><div class="x-combo-list-item">1 : {[parseInt(values.scale + 0.5)]}</div></tpl>',editable:false,width:130,listWidth:120,emptyText:__('Scale'),tooltip:__('Scale'),triggerAction:'all',mode:'local',initComponent:function(){Heron.widgets.ScaleSelectorCombo.superclass.initComponent.apply(this,arguments);this.store=new GeoExt.data.ScaleStore({map:this.map});for(var i=0;i<this.store.getCount();i++){this.store.getAt(i).data.formattedScale=parseInt(this.store.getAt(i).data.scale+0.5);}
1019this.on('select',function(combo,record,index){this.map.zoomTo(record.data.level);},this);this.map.events.register('zoomend',this,this.zoomendUpdate);this.map.events.triggerEvent("zoomend");},listeners:{render:function(c){c.el.set({qtip:this.tooltip});c.trigger.set({qtip:this.tooltip});}},zoomendUpdate:function(record){var scale=this.store.queryBy(function(record){return this.map.getZoom()==record.data.level;});if(scale.length>0){scale=scale.items[0];this.setValue("1 : "+parseInt(scale.data.scale+0.5));}else{if(!this.rendered){return;}
1020this.clearValue();}},beforeDestroy:function(){this.map.events.unregister('zoomend',this,this.zoomendUpdate);Heron.widgets.ScaleSelectorCombo.superclass.beforeDestroy.apply(this,arguments);}});Ext.reg('hr_scaleselectorcombo',Heron.widgets.ScaleSelectorCombo);Ext.namespace("Heron.widgets.search");Heron.widgets.search.GeocoderCombo=Ext.extend(Ext.form.ComboBox,{map:null,emptyText:__('Search'),loadingText:__('Loading...'),srs:"EPSG:4326",zoom:10,layerOpts:undefined,queryDelay:200,valueField:"bounds",displayField:"name",locationField:"lonlat",url:"http://nominatim.openstreetmap.org/search?format=json",queryParam:"q",minChars:3,hideTrigger:true,tooltip:__('Search'),initComponent:function(){if(this.map){this.setMap(this.map);}
1021if(Ext.isString(this.srs)){this.srs=new OpenLayers.Projection(this.srs);}
1022if(!this.store){this.store=new Ext.data.JsonStore({root:null,fields:[{name:"name",mapping:"display_name"},{name:"bounds",convert:function(v,rec){var bbox=rec.boundingbox;return[bbox[2],bbox[0],bbox[3],bbox[1]];}},{name:"lonlat",convert:function(v,rec){return[rec.lon,rec.lat];}}],proxy:new Ext.data.ScriptTagProxy({url:this.url,callbackParam:"json_callback"})});}
1023this.on({added:this.handleAdded,select:this.handleSelect,focus:function(){this.clearValue();this.removeLocationFeature();},scope:this});return Heron.widgets.search.GeocoderCombo.superclass.initComponent.apply(this,arguments);}
1023,handleAdded:function(){if(!this.map){this.setMap(Heron.App.getMap());}},handleSelect:function(combo,rec){var value=this.getValue();if(Ext.isArray(value)){var mapProj=this.map.getProjectionObject();delete this.center;delete this.locationFeature;if(this.zoom<0){this.map.zoomToExtent(OpenLayers.Bounds.fromArray(value).transform(this.srs,mapProj));}else{this.map.setCenter(OpenLayers.LonLat.fromArray(value).transform(this.srs,mapProj),Math.max(this.map.getZoom(),this.zoom));}
1024this.center=this.map.getCenter();var lonlat=rec.get(this.locationField);if(this.layer&&lonlat){var geom=new OpenLayers.Geometry.Point(this.center.lon,this.center.lat).transform(this.srs,mapProj);this.locationFeature=new OpenLayers.Feature.Vector(geom,rec.data);this.layer.addFeatures([this.locationFeature]);var vm=this.map.getLayersByName(this.layer);if(vm.length===0){this.layer.setVisibility(true);}}
1025var lropts=this.layerOpts;if(lropts){var map=Heron.App.getMap();for(var l=0;l<lropts.length;l++){if(lropts[l]['layerOn']){var mapLayers=map.getLayersByName(lropts[l]['layerOn']);for(var n=0;n<mapLayers.length;n++){if(mapLayers[n].isBaseLayer){map.setBaseLayer(mapLayers[n]);}else{mapLayers[n].setVisibility(true);}
1026if(lropts[l]['layerOpacity']){mapLayers[n].setOpacity(lropts[l]['layerOpacity']);}}}}}}
1027(function(){this.triggerBlur();this.el.blur();}).defer(100,this);},removeLocationFeature:function(){if(this.locationFeature){this.layer.destroyFeatures([this.locationFeature]);}},clearResult:function(){if(this.center&&!this.map.getCenter().equals(this.center)){this.clearValue();}},setMap:function(map){if(map instanceof GeoExt.MapPanel){map=map.map;}
1028this.map=map;map.events.on({"moveend":this.clearResult,scope:this});},addToMapPanel:Ext.emptyFn,beforeDestroy:function(){this.map.events.un({"moveend":this.clearResult,scope:this});this.removeLocationFeature();delete this.map;delete this.layer;delete this.center;Heron.widgets.search.GeocoderCombo.superclass.beforeDestroy.apply(this,arguments);},listeners:{render:function(c){c.el.set({qtip:this.tooltip});c.trigger.set({qtip:this.tooltip});}}});Ext.reg("hr_geocodercombo",Heron.widgets.search.GeocoderCombo);Heron.version='1.0.7';

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.