/*
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

Ext.namespace("Heron.i18n");function __(string){var dict=Heron.i18n.dict;if(typeof(dict)!='undefined'&&dict[string]){return dict[string];}
return string;}
OpenLayers.Util.extend(OpenLayers.Format.WFST.v1.prototype.namespaces,{gml32:'http://www.opengis.net/gml/3.2'});OpenLayers.Control.WMSGetFeatureInfo.prototype.buildWMSOptions=function(url,layers,clickPosition,format){var layerNames=[],styleNames=[];var i;for(i=0,len=layers.length;i<len;i++){layerNames=layerNames.concat(layers[i].params.LAYERS);styleNames=styleNames.concat(this.getStyleNames(layers[i]));}
var firstLayer=layers[0];var projection=this.map.getProjection();var layerProj=firstLayer.projection;if(layerProj&&layerProj.equals(this.map.getProjectionObject())){projection=layerProj.getCode();}
var params=OpenLayers.Util.extend({service:"WMS",version:firstLayer.params.VERSION,request:"GetFeatureInfo",layers:layerNames,query_layers:layerNames,styles:styleNames,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,10),j:parseInt(clickPosition.y,10)}:{srs:projection,x:parseInt(clickPosition.x,10),y:parseInt(clickPosition.y,10)});OpenLayers.Util.applyDefaults(params,this.vendorParams);return{url:url,params:OpenLayers.Util.upperCaseObject(params),callback:function(request){this.handleResponse(clickPosition,request);},scope:this};};OpenLayers.Format.WMSGetFeatureInfo.prototype.read_FeatureInfoResponse=function(data){var response=[];var featureNodes=this.getElementsByTagNameNS(data,'*','FIELDS');var i;var len;for(i=0,len=featureNodes.length;i<len;i++){var featureNode=featureNodes[i];var geom=null;var attributes={};var j;var jlen=featureNode.attributes.length;if(jlen>0){for(j=0;j<jlen;j++){var attribute=featureNode.attributes[j];attributes[attribute.nodeName]=attribute.nodeValue;}}else{var nodes=featureNode.childNodes;var _featureType="";for(j=0,jlen=nodes.length;j<jlen;++j){var node=nodes[j];if(node.nodeType!==3){var dino_name=node.getAttribute("name");var _feat=dino_name.split(".");if(_feat[0]==="DINO_DBA"){attributes[_feat[2]]=node.getAttribute("value");_featureType=_feat[1];}else{attributes[node.getAttribute("name")]=node.getAttribute("value");}}}}
_feature=new OpenLayers.Feature.Vector(geom,attributes,null);if(_featureType!==""){_feature.gml={};_feature.gml.featureType=_featureType;_feature.fid=_featureType+"."+len;_feature.layer=_featureType;}
response.push(_feature);}
return response;};OpenLayers.Util.modifyDOMElement=function(element,id,px,sz,position,border,overflow,opacity){if(id){element.id=id;}
if(px){if(!px.x){px.x=0;}
if(!px.y){px.y=0;}
element.style.left=px.x+"px";element.style.top=px.y+"px";}
if(sz){element.style.width=sz.w+"px";element.style.height=sz.h+"px";}
if(position){element.style.position=position;}
if(border){element.style.border=border;}
if(overflow){element.style.overflow=overflow;}
if(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='';}};Ext.namespace("Heron");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";}catch(err){}
Heron.App=function(){var topComponent,map,mapPanel;return{create:function(){Ext.QuickTips.init();if(Heron.layout.renderTo||Heron.layout.xtype=='window'){topComponent=Ext.create(Heron.layout);}else{topComponent=new Ext.Viewport({id:"hr-topComponent",layout:"fit",hideBorders:true,items:[Heron.layout]});}},show:function(){topComponent.show();},getMap:function(){return map;},setMap:function(aMap){map=aMap;},getMapPanel:function(){return mapPanel;},setMapPanel:function(aMapPanel){mapPanel=aMapPanel;}};}();Ext.namespace("Heron");Ext.onReady(function(){if(!Heron.noAutoLaunch){Heron.App.create();Heron.App.show();}},Heron.App);Ext.namespace("Heron.Utils");Heron.Utils={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+='    ';}
if(htmlEscape){ln=ln.replace('<','&lt;');ln=ln.replace('>','&gt;');}
formatted+=padding+ln+'\n';}
return formatted;}};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;}});}
return 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]);}
var 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.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;this.attributes.component.value=layer.opacity?(parseInt(layer.opacity*100)):100;}
Heron.widgets.ActiveLayerNode.superclass.render.call(this,bulkRender);if(layer.opacity){layer.setOpacity(layer.opacity-0.001);}}});Ext.tree.TreePanel.nodeTypes.hr_activelayer=Heron.widgets.ActiveLayerNode;Heron.widgets.ActiveLayersPanel=Ext.extend(Ext.tree.TreePanel,{applyStandardNodeOpts:function(opts,layer){if(opts.component){opts.component.layer=layer;}
opts.layerId=layer.id;},initComponent:function(){var self=this;var options={id:"hr-activelayers",border:true,title:__('Active Layers'),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,attr);},filter:function(record){return record.getLayer().getVisibility();}}},rootVisible:false,lines:false};Ext.apply(this,options);Heron.widgets.ActiveLayersPanel.superclass.initComponent.call(this);this.addListener("afterrender",this.onAfterRender);},createNode:function(self,attr){if(self.hropts){Ext.apply(attr,self.hropts);self.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);},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 topLayer;if(rootNode.firstChild){topLayer=rootNode.firstChild.layer;}
rootNode.insertBefore(newNode,rootNode.firstChild);if(topLayer){map.setLayerIndex(newNode.layer,map.getLayerIndex(topLayer)+1);}}else if(!evt.layer.getVisibility()&&layerNode){layerNode.un("move",self.onChildMove,self);layerNode.remove();}}});}});Ext.reg('hr_activelayerspanel',Heron.widgets.ActiveLayersPanel);Ext.namespace("Heron.widgets");Heron.widgets.CapabilitiesTreePanel=Ext.extend(Ext.tree.TreePanel,{initComponent:function(){var root=new Ext.tree.AsyncTreeNode({text:this.hropts.text,expanded:this.hropts.preload,loader:new GeoExt.tree.WMSCapabilitiesLoader({url:this.hropts.url,layerOptions:{buffer:0,singleTile:true,ratio:1},layerParams:{'TRANSPARENT':'TRUE'},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;}
var 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("Heron.widgets");Heron.widgets.FeaturePanel=Ext.extend(Ext.Panel,{maxFeatures:5,tabs:null,map:null,initComponent:function(){Ext.apply(this,{layout:"fit",title:__('Feature info')});Heron.widgets.FeaturePanel.superclass.initComponent.call(this);this.addListener("afterrender",this.setupGrid);},setupGrid:function(evt){this.add(this.getGrid());},getGrid:function(){var map=Heron.App.getMap();var vecLayer=new OpenLayers.Layer.Vector("vector");map.addLayers([vecLayer]);var store=new GeoExt.data.FeatureStore({layer:vecLayer,fields:[{name:'objectnumm',type:'string'}],proxy:new GeoExt.data.ProtocolProxy({protocol:new OpenLayers.Protocol.HTTP({url:'http://local.kademo.nl/gs2/wfs?request=GetFeature&typeName=kad:lki_vlakken&maxFeatures=10&version=1.0.0',format:new OpenLayers.Format.WFS({},vecLayer)})}),autoLoad:true});var gridPanel=new Ext.grid.GridPanel({title:"Feature Grid",store:store,columns:[{header:"Object",width:200,dataIndex:"objectnumm"}],sm:new GeoExt.grid.FeatureSelectionModel()});return gridPanel;}});Ext.reg('hr_featurepanel',Heron.widgets.FeaturePanel);Ext.namespace("Heron.widgets");Ext.namespace("Heron.utils");Heron.widgets.FeatureInfoPanel=Ext.extend(Ext.Panel,{maxFeatures:5,infoFormat:'application/vnd.ogc.gml',tabPanel:null,map:null,displayPanel:null,lastEvt:null,olControl:null,initComponent:function(){var self=this;Ext.apply(this,{layout:"fit",title:__('Feature info'),tbar:[{text:__('Grid'),toggleGroup:"featInfoGroup",enableToggle:true,pressed:true,handler:function(t){self.display=self.displayGrid;self.handleGetFeatureInfo();}},{text:__('Tree'),toggleGroup:"featInfoGroup",enableToggle:true,pressed:false,handler:function(t){self.display=self.displayTree;self.handleGetFeatureInfo();}},{text:__('XML'),toggleGroup:"featInfoGroup",enableToggle:true,pressed:false,handler:function(t){self.display=self.displayXML;self.handleGetFeatureInfo();}}]});Heron.widgets.FeatureInfoPanel.superclass.initComponent.call(this);this.map=Heron.App.getMap();this.display=this.displayGrid;var controls=this.map.getControlsByClass("OpenLayers.Control.WMSGetFeatureInfo");if(controls&&controls.length>0){this.olControl=controls[0];this.olControl.infoFormat=this.infoFormat;this.olControl.maxFeatures=this.maxFeatures;}
if(!this.olControl){this.olControl=new OpenLayers.Control.WMSGetFeatureInfo({maxFeatures:this.maxFeatures,queryVisible:true,infoFormat:this.infoFormat});this.map.addControl(this.olControl);}
this.olControl.events.register("getfeatureinfo",this,this.handleGetFeatureInfo);this.olControl.events.register("beforegetfeatureinfo",this,this.handleBeforeGetFeatureInfo);this.on("render",function(){this.mask=new Ext.LoadMask(this.body,{msg:__('Loading...')})});},handleBeforeGetFeatureInfo:function(evt){this.olControl.layers=[];this.olControl.url=null;this.olControl.drillDown=true;var layer;for(var index=0;index<this.map.layers.length;index++){layer=this.map.layers[index];if(layer.visibility&&(layer.featureInfoFormat||layer.params.INFO_FORMAT)){if(!layer.params.INFO_FORMAT&&layer.featureInfoFormat){layer.params.INFO_FORMAT=layer.featureInfoFormat;}
this.olControl.layers.push(layer);}}
if(this.olControl.layers.length==0){alert(__('Feature Info unavailable'));return;}
this.lastEvt=null;this.expand();if(this.tabPanel!=undefined){this.tabPanel.removeAll();}
this.mask.show();},handleGetFeatureInfo:function(evt){this.mask.hide();if(evt){this.lastEvt=evt;}
if(!this.lastEvt){return;}
if(this.displayPanel){this.remove(this.displayPanel);}
this.displayPanel=this.display(this.lastEvt);if(this.displayPanel){this.add(this.displayPanel);this.displayPanel.doLayout();}
if(this.getLayout()){this.getLayout().runLayout();}},displayGrid:function(evt){var types=new Array();for(var index=0;index<evt.features.length;index++){var rec=evt.features[index];var featureType=/[^\.]*/.exec(rec.fid);featureType=(featureType[0]!="null")?featureType[0]:__('Unknown');var found=false;var type=null;for(var j=0;j<types.length;j++){type=types[j];if(type.featureType==featureType){found=true;}}
if(!found){type={featureType:featureType,columns:new Array(),fields:new Array(),records:new Array()};types.push(type);}
for(var attrib in rec.attributes){var new_attrib=attrib.replace(/\./g,"_");rec.attributes[new_attrib]=rec.attributes[attrib];if(attrib!=new_attrib){delete rec.attributes[attrib];}}
if(type.records.length==0){for(var attrib in rec.attributes){if(type.records.length==0){type.columns.push({header:attrib,width:100,dataIndex:attrib});type.fields.push(attrib);}}}
type.records.push(rec.attributes);}
if(this.tabPanel!=null){this.remove(this.tabPanel);this.tabPanel=null;}
while(types.length>0){type=types.pop();if(type.records.length>0){var grid=new Ext.grid.GridPanel({store:new Ext.data.JsonStore({autoDestroy:true,fields:type.fields,data:type.records}),title:type.featureType,colModel:new Ext.grid.ColumnModel({defaults:{width:120,sortable:true},columns:type.columns,autoScroll:true,listeners:{"render":function(c){c.doLayout();}}})});if(this.tabPanel==null){this.tabPanel=new Ext.TabPanel({border:false,autoDestroy:true,height:this.getHeight(),items:[grid],activeTab:0});}else{this.tabPanel.add(grid);this.tabPanel.setActiveTab(0);}}}
return 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);}});Ext.reg('hr_featureinfopanel',Heron.widgets.FeatureInfoPanel);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){alert('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;}
var result=new Ext.tree.TreeNode({text:t});if(XmlEl.nodeType==1){Ext.each(XmlEl.attributes,function(a){if(!(XmlEl.parentNode.nodeType==9&&(a.nodeName.startsWith('xmlns')||a.nodeName.startsWith('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);}}});}
return result;}});Ext.reg('hr_xmltreepanel',Heron.widgets.XMLTreePanel);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.ContextBrowser=(function(){var contexts=undefined;var map=undefined;var instance={init:function(hroptions){if(hroptions&&!contexts){contexts=hroptions;}},setMapContext:function(id){var map=Heron.App.getMap();for(var i=0;i<contexts.length;i++){if(contexts[i].id==id){map.setCenter(new OpenLayers.LonLat(contexts[i].x,contexts[i].y),contexts[i].zoom,false,true);if(contexts[i].layers){var mapLayers=map.layers;var ctxLayers=contexts[i].layers;for(var n=0;n<mapLayers.length;n++){if(mapLayers[n].getVisibility()){mapLayers[n].setVisibility(false);}}
for(var m=0;m<ctxLayers.length;m++){for(n=0;n<mapLayers.length;n++){if(mapLayers[n].name==ctxLayers[m]){mapLayers[n].setVisibility(true);if(mapLayers[n].isBaseLayer){map.setBaseLayer(mapLayers[n]);}}}}}}}}};return(instance);})();Heron.widgets.ContextBrowserPanel=Ext.extend(Heron.widgets.HTMLPanel,{initComponent:function(){Heron.widgets.ContextBrowserPanel.superclass.initComponent.call(this);this.id='hr-context-browser';this.title=__('Shortcuts');this.html='<div class="hr-html-panel-body">';var contexts=this.hropts;if(typeof(contexts)!=="undefined"){for(var i=0;i<contexts.length;i++){this.html+='<a href="#" title="'+contexts[i].desc+'" onclick="Heron.widgets.ContextBrowser.setMapContext(\''+contexts[i].id+'\'); return false;">'+contexts[i].name+'</a><br/>';}}
this.html+='</div>';Heron.widgets.ContextBrowser.init(contexts);}});Ext.reg('hr_contextbrowserpanel',Heron.widgets.ContextBrowserPanel);Ext.namespace("Heron.widgets");Heron.widgets.LayerTreePanel=Ext.extend(Ext.tree.TreePanel,{initComponent:function(){var treeConfig;if(this.hropts&&this.hropts.tree){treeConfig=this.hropts.tree;}else{treeConfig=[{nodeType:"gx_baselayercontainer",text:__('Base Layers'),expanded:true},{nodeType:"gx_overlaylayercontainer",text:__('Overlays'),loader:{baseAttrs:{uiProvider:"layerNodeUI"}}}]}
treeConfig=new OpenLayers.Format.JSON().write(treeConfig,true);var options={id:"hr-layer-browser",border:true,title:__('Layers'),autoScroll:true,containerScroll:true,loader:new Ext.tree.TreeLoader({applyLoader:false,uiProviders:{"layerNodeUI":GeoExt.tree.LayerNodeUI}}),root:{nodeType:"async",children:Ext.decode(treeConfig)},rootVisible:false,headerCls:'hr-header-text',enableDD:true,lines:false};Ext.apply(this,options);Heron.widgets.LayerTreePanel.superclass.initComponent.call(this);}});Ext.reg('hr_layertreepanel',Heron.widgets.LayerTreePanel);Ext.namespace("Heron.widgets");Heron.widgets.LayerLegendPanel=Ext.extend(GeoExt.LegendPanel,{initComponent:function(){var options={id:'hr-layer-legend',title:__('Legend'),filter:function(record){return record&&!record.get("layer").noLegend;},bodyStyle:'padding:5px',autoScroll:true,defaults:{useScaleParameter:false},dynamic:true};Ext.apply(this,options);Heron.widgets.LayerLegendPanel.superclass.initComponent.call(this);},addLegend:function(record,index){record.store=this.layerStore;Heron.widgets.LayerLegendPanel.superclass.addLegend.apply(this,arguments);}});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--;}
if(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);}}}
OpenLayers.Control.prototype.destroy.apply(this,arguments);},CLASS_NAME:"OpenLayers.Control.LoadingPanel"});Ext.namespace("Heron.widgets");Heron.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,controls:[new OpenLayers.Control.Attribution(),new OpenLayers.Control.ZoomBox(),new OpenLayers.Control.Navigation(),new OpenLayers.Control.LoadingPanel()]}};Heron.widgets.MapPanel=Ext.extend(GeoExt.MapPanel,{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:220,x:10,y:20,plugins:new GeoExt.ZoomSliderTip()}],bbar:{items:[{id:'x-coord',text:"X:",width:100,xtype:"tbtext"},{id:'y-coord',text:"Y:",width:100,xtype:"tbtext"},{id:'bbar_measure',text:"",width:200,xtype:"tbtext"}]},tbar:new Ext.Toolbar({items:[]})};Ext.apply(gxMapPanelOptions,Heron.widgets.MapPanelOptsDefaults);if(this.hropts.settings){Ext.apply(gxMapPanelOptions.map,this.hropts.settings);}
if(typeof gxMapPanelOptions.map.maxExtent=="string"){gxMapPanelOptions.map.maxExtent=OpenLayers.Bounds.fromString(gxMapPanelOptions.map.maxExtent);gxMapPanelOptions.maxExtent=gxMapPanelOptions.map.maxExtent;}
if(typeof gxMapPanelOptions.map.extent=="string"){gxMapPanelOptions.map.extent=OpenLayers.Bounds.fromString(gxMapPanelOptions.map.extent);gxMapPanelOptions.extent=gxMapPanelOptions.map.extent;}
if(typeof gxMapPanelOptions.map.center=="string"){gxMapPanelOptions.map.center=OpenLayers.LonLat.fromString(gxMapPanelOptions.map.center);gxMapPanelOptions.center=gxMapPanelOptions.map.center;}
if(gxMapPanelOptions.map.zoom){gxMapPanelOptions.zoom=gxMapPanelOptions.map.zoom;}
gxMapPanelOptions.map.layers=this.hropts.layers;Ext.apply(this,gxMapPanelOptions);Heron.widgets.MapPanel.superclass.initComponent.call(this);Heron.App.setMap(this.getMap());Heron.App.setMapPanel(this);Heron.widgets.ToolbarBuilder.build(this,this.hropts.toolbar);},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.xy_precision){xy_precision=this.hropts.settings.xy_precision;}
var onMouseMove=function(e){var lonLat=this.getLonLatFromPixel(e.xy);if(!lonLat){return;}
if(this.displayProjection){lonLat.transform(this.getProjectionObject(),this.displayProjection);}
Ext.getCmp("x-coord").setText("X: "+lonLat.lon.toFixed(xy_precision));Ext.getCmp("y-coord").setText("Y: "+lonLat.lat.toFixed(xy_precision));};var map=this.getMap();map.events.register("mousemove",map,onMouseMove);}});Ext.reg('hr_mappanel',Heron.widgets.MapPanel);Ext.namespace("Heron.widgets");Heron.widgets.MenuHandler=(function(){var options=null;function loadPage(page){if(page&&options.pageContainer&&options.pageRoot){Ext.getCmp(options.pageContainer).load(options.pageRoot+'/'+page+'.html?t='+new Date().getMilliseconds());}}
function setActiveCard(card){if(card&&options.cardContainer){Ext.getCmp(options.cardContainer).getLayout().setActiveItem(card);}}
var instance={init:function(hroptions){if(hroptions&&!options){options=hroptions;setActiveCard(options.defaultCard);loadPage(options.defaultPage);}},onSelect:function(item){setActiveCard(item.card);loadPage(item.page);}};return(instance);})();Heron.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];}}
for(var i=0;i<this.layerNames.length;i++){if(!this.layerStore||this.layerStore=="auto"){this.layerStore=GeoExt.MapPanel.guess().layers;}
var 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();}}
Heron.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");Heron.widgets.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.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.OpenLSSearchCombo);Ext.namespace("Heron.widgets");Heron.widgets.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',url:'http://open.mapquestapi.com/nominatim/v1/search?format=json',lang:'en',charset:'UTF8',hideTrigger:true,displayField:'display_name',forceSelection:true,queryParam:'q',initComponent:function(){Heron.widgets.NominatimSearchCombo.superclass.initComponent.apply(this,arguments);this.store=new Ext.data.JsonStore({proxy:new Ext.data.HttpProxy({url:this.url,method:'GET'}),idProperty:'place_id',successProperty:null,totalProperty:null,fields:["place_id","display_name",{name:"lat",type:"number"},{name:"lon",type:"number"}]});if(this.zoom>0){this.on("select",function(combo,record,index){this.setValue(record.data.display_name);var position=new OpenLayers.LonLat(record.data.lon,record.data.lat);position.transform(new OpenLayers.Projection("EPSG:4326"),this.map.getProjectionObject());this.map.setCenter(position,this.zoom);this.collapse();},this);}}});Ext.reg('hr_nominatimsearchcombo',Heron.widgets.NominatimSearchCombo);Ext.namespace("Heron.widgets");Heron.widgets.SearchPanel=Ext.extend(GeoExt.form.FormPanel,{onSearchCompleteZoom:11,defaultProgressLabel:{xtype:"label",id:"progresslabel",style:{marginLeft:'6px',fontFamily:'Verdana, Arial, Helvetica, sans-serif',color:'#0000C0',fontSize:'12px'}},getProgressLabelId:function(){return this.id+"progresslabel";},getProgressLabel:function(){this.get(this.getProgressLabelId());},initComponent:function(){var foundLabel=false;var hropts=this.hropts;Ext.each(this.items,function(item,index){if(item.id&&item.id=='progresslabel'){item.id=this.getProgressLabelId(this);foundLabel=true;}});if(!foundLabel){this.defaultProgressLabel.id=this.getProgressLabelId();this.items.push(this.defaultProgressLabel);}
Ext.apply(this,hropts);Ext.apply(this.initialConfig,hropts);var self=this;this.listeners={actioncomplete:function(form,action){self.action=action;if(self.onSearchComplete){self.onSearchComplete(self,action);}}};Heron.widgets.SearchPanel.superclass.initComponent.call(this);this.addButton({text:__('Search'),handler:function(){self.action=null;self.search();if(self.onSearchInProgress){self.onSearchInProgress(self);}},scope:self});},onSearchInProgress:function(searchPanel){searchPanel.features=null;searchPanel.get(searchPanel.id+'progresslabel').setText(__('Searching...'));},onSearchComplete:function(searchPanel,action){searchPanel.form.items.each(function(item){if(item.oldValue){item.setValue(item.oldValue);}});var progressLabel=searchPanel.get(searchPanel.id+'progresslabel');if(action&&action.response&&action.response.success()){var features=searchPanel.features=action.response.features;progressLabel.setText(__('Search Completed: ')+(features?features.length:0)+' '+__('Feature(s)'));if(searchPanel.onSearchCompleteAction){searchPanel.onSearchCompleteAction(searchPanel,features);}}else{progressLabel.setText(__('Search Failed'));}},onSearchCompleteAction:function(searchPanel,features){if(features.length==1&&features[0].geometry&&features[0].geometry.getVertices().length==1&&searchPanel.onSearchCompleteZoom){var point=features[0].geometry.getCentroid();Heron.App.getMap().setCenter(new OpenLayers.LonLat(point.x,point.y),searchPanel.onSearchCompleteZoom);searchPanel.notifyParentOnSearchComplete(searchPanel,features);return;}
var bbox;for(var i=0;i<features.length;++i){if(features[i]&&features[i].geometry){if(!bbox){bbox=features[i].geometry.getBounds();}else{bbox.extend(features[i].geometry.getBounds());}}}
Heron.App.getMap().zoomToExtent(bbox);searchPanel.notifyParentOnSearchComplete(searchPanel,features);},notifyParentOnSearchComplete:function(searchPanel,features){if(searchPanel.parentId){var parent=Ext.getCmp(searchPanel.parentId);if(parent.onSearchSuccess){parent.onSearchSuccess(searchPanel,features);}}},search:function(options){this.form.items.each(function(item){var name=item.getName();if(name.indexOf('__like'||name.indexOf('__ilike'))){item.oldValue=item.getValue();item.setValue('*'+item.getValue()+'*');}});Heron.widgets.SearchPanel.superclass.search.call(this,options);}});Ext.reg('hr_searchpanel',Heron.widgets.SearchPanel);Ext.namespace("Heron.widgets");Heron.widgets.FeatSelGridPanel=Ext.extend(Ext.grid.GridPanel,{zoomOnFeatureSelect:false,zoomOnRowDoubleClick:true,zoomLevelPointSelect:10,initComponent:function(){var layer=this.layer=new OpenLayers.Layer.Vector(this.title);this.map=Heron.App.getMap();this.map.addLayer(this.layer);Ext.apply(this,this.hropts);var self=this;if(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});}
var storeFields=[];Ext.each(this.columns,function(column){if(column.dataIndex){storeFields.push({name:column.dataIndex,type:column.type});}
column.sortable=true;});var storeConfig={layer:layer,fields:storeFields};Ext.apply(storeConfig,this.hropts.storeOpts);this.store=new GeoExt.data.FeatureStore(storeConfig);if(!this.sm){this.sm=new GeoExt.grid.FeatureSelectionModel();}
if(this.zoomOnRowDoubleClick){this.on('celldblclick',function(grid,rowIndex,columnIndex,e){var record=grid.getStore().getAt(rowIndex);var feature=record.getFeature();self.zoomToFeature(self,feature.geometry);});}
if(this.ownerCt){this.ownerCt.on('hide',function(){self.hideLayer();});}
Heron.widgets.FeatSelGridPanel.superclass.initComponent.call(this);},loadFeatures:function(features){this.showLayer();this.store.loadData(features);},removeFeatures:function(){this.store.removeAll(false);},showLayer:function(){if(this.layer&&!this.layer.getVisibility()){this.layer.setVisibility(true);}},hideLayer:function(){if(this.layer&&this.layer.getVisibility()){this.layer.setVisibility(false);}},zoomToFeature:function(self,geometry){if(!geometry){return;}
if(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));}});Ext.reg('hr_featselgridpanel',Heron.widgets.FeatSelGridPanel);Ext.namespace("Heron.widgets");Heron.widgets.FeatSelSearchPanel=Ext.extend(Ext.Panel,{initComponent:function(){this.hropts.searchPanel.parentId=this.id;var self=this;Ext.apply(this,{layout:'card',title:__('Search'),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);}}],items:[self.hropts.searchPanel]});if(this.ownerCt){this.ownerCt.fsSearchPanel=this;this.ownerCt.addListener("hide",this.cleanup);this.ownerCt.addListener("show",this.startup);}
Heron.widgets.FeatSelSearchPanel.superclass.initComponent.call(this);},showSearchPanel:function(self){self.getLayout().setActiveItem(0);self.prevButton.disable();self.nextButton.enable();},showResultGridPanel:function(self){self.getLayout().setActiveItem(1);self.prevButton.enable();self.nextButton.disable();},onSearchSuccess:function(searchPanel,features){if(!this.resultPanel){this.resultPanel=new Heron.widgets.FeatSelGridPanel(this.hropts.resultPanel);this.add(this.resultPanel);}
if(features&&features.length>0){this.resultPanel.loadFeatures(features);this.showResultGridPanel(this);}},startup:function(parent){if(parent.fsSearchPanel&&parent.fsSearchPanel.resultPanel){parent.fsSearchPanel.showSearchPanel(parent.fsSearchPanel);parent.fsSearchPanel.resultPanel.showLayer();}},cleanup:function(parent){if(parent.fsSearchPanel&&parent.fsSearchPanel.resultPanel){parent.fsSearchPanel.resultPanel.hideLayer();}}});Ext.reg('hr_featselsearchpanel',Heron.widgets.FeatSelSearchPanel);Ext.namespace("Heron.widgets");Heron.widgets.ToolbarBuilder={};Heron.widgets.ToolbarBuilder.onMeasurements=function(event){var units=event.units;var measure=event.measure;var out="";if(event.order==1){out+=__('Length')+": "+measure.toFixed(3)+" "+units;}else{out+=__('Area')+": "+measure.toFixed(3)+" "+units+"2";}
Ext.getCmp("bbar_measure").setText(out);};Heron.widgets.ToolbarBuilder.defs={featureinfo:{options:{tooltip:__('Feature information'),iconCls:"icon-getfeatureinfo",enableToggle:true,pressed:false,id:"featureinfo",toggleGroup:"toolGroup",max_features:10},create:function(mapPanel,options){options.control=new OpenLayers.Control.WMSGetFeatureInfo({maxFeatures:options.max_features,queryVisible:true,infoFormat:options.infoFormat?options.infoFormat:"application/vnd.ogc.gml"});return new GeoExt.Action(options);}},pan:{options:{tooltip:__('Pan'),iconCls:"icon-pan",enableToggle:true,pressed:true,control:new OpenLayers.Control.Navigation(),id:"pan",toggleGroup:"toolGroup"},create:function(mapPanel,options){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:true,pressed:false,control:new OpenLayers.Control.ZoomToMaxExtent(),id:"zoomvisible",toggleGroup:"toolGroup"},create:function(mapPanel,options){return new GeoExt.Action(options);}},zoomprevious:{options:{tooltip:__('Zoom previous'),iconCls:"icon-zoom-previous",disabled:true,pressed:false,id:"zoomprevious",toggleGroup:"toolGroup"},create:function(mapPanel,options){if(!mapPanel.historyControl){mapPanel.historyControl=new OpenLayers.Control.NavigationHistory();mapPanel.getMap().addControl(mapPanel.historyControl);}
options.control=mapPanel.historyControl.previous;return new GeoExt.Action(options);}},zoomnext:{options:{tooltip:__('Zoom next'),iconCls:"icon-zoom-next",disabled:true,pressed:false,id:"zoomnext",toggleGroup:"toolGroup"},create:function(mapPanel,options){if(!mapPanel.historyControl){mapPanel.historyControl=new OpenLayers.Control.NavigationHistory();mapPanel.getMap().addControl(mapPanel.historyControl);}
options.control=mapPanel.historyControl.next;return new GeoExt.Action(options);}},measurelength:{options:{tooltip:__('Measure length'),iconCls:"icon-measure-length",enableToggle:true,pressed:false,control:new OpenLayers.Control.Measure(OpenLayers.Handler.Path,{persist:true}),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");for(var i=0;i<controls.length;i++){controls[i].events.register("measure",map,Heron.widgets.ToolbarBuilder.onMeasurements);controls[i].events.register("measurepartial",map,Heron.widgets.ToolbarBuilder.onMeasurements);}
return action;}},measurearea:{options:{tooltip:__('Measure area'),iconCls:"icon-measure-area",enableToggle:true,pressed:false,control:new OpenLayers.Control.Measure(OpenLayers.Handler.Polygon,{persist:true}),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++){controls[i].events.register("measure",map,Heron.widgets.ToolbarBuilder.onMeasurements);controls[i].events.register("measurepartial",map,Heron.widgets.ToolbarBuilder.onMeasurements);}
return action;}},search_nominatim:{options:{tooltip:__('Search Nominatim'),id:"search_nominatim"},create:function(mapPanel,options){return new Heron.widgets.NominatimSearchCombo(options);}},namesearch:{options:{id:"namesearch"},create:function(mapPanel,options){return Ext.create(options);}},searchpanel:{options:{id:"searchpanel",tooltip:__('Search'),iconCls:"icon-find",enableToggle:false,pressed:false,searchWindowDefault:{title:__('Search'),layout:"fit",closeAction:"hide",x:100,width:400,height:400}},create:function(mapPanel,options){options.handler=function(){if(!this.searchpanelWindow){var windowOptions=options.searchWindowDefault;Ext.apply(windowOptions,options.searchWindow);this.searchpanelWindow=new Ext.Window(windowOptions);}
this.searchpanelWindow.show();};return new Ext.Action(options);}}};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){var toolbarItems=[];if(typeof(config)!=="undefined"){for(var i=0;i<config.length;i++){var itemDef=config[i];if(itemDef.type=="-"){toolbarItems.push("-");continue;}
var createFun;var defaultItemDef=Heron.widgets.ToolbarBuilder.defs[itemDef.type];if(itemDef.create){createFun=itemDef.create;}else if(defaultItemDef&&defaultItemDef.create){createFun=defaultItemDef.create;}
if(!createFun){continue;}
var coreOptions={map:mapPanel.getMap(),scope:mapPanel};var defaultItemOptions={};if(defaultItemDef&&defaultItemDef.options){defaultItemOptions=defaultItemDef.options;}
var extraOptions=itemDef.options?itemDef.options:{};var options=Ext.apply(coreOptions,extraOptions,defaultItemOptions);var item=createFun(mapPanel,options);if(item){toolbarItems.push(item);}}}
mapPanel.getTopToolbar().add(toolbarItems);};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){alert('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;}
var result=new Ext.tree.TreeNode({text:t});if(XmlEl.nodeType==1){Ext.each(XmlEl.attributes,function(a){if(!(XmlEl.parentNode.nodeType==9&&(a.nodeName.startsWith('xmlns')||a.nodeName.startsWith('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);}}});}
return 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;}
this.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);Heron.version='0.66';

