Ext.namespace("gxp");gxp.util={_uniqueNames:{},dispatch:function(functions,complete,scope){complete=complete||Ext.emptyFn;scope=scope||this;var requests=functions.length;var responses=0;var storage={};function respond(){++responses;if(responses===requests){complete.call(scope,storage);}}
function trigger(index){window.setTimeout(function(){functions[index].apply(scope,[respond,storage]);});}
for(var i=0;i<requests;++i){trigger(i);}},loadScript:function(url,complete,scope,attributes){var script=document.createElement("script");script.src=url;if(complete){script.onload=complete.createDelegate(scope||window);script.onreadystatechange=function(){if(this.readyState=="complete"){complete.call(scope||window);}}}
if(attributes){for(a in attributes){script[a]=attributes[a];}}
document.getElementsByTagName("head")[0].appendChild(script);},uniqueName:function(name,delimiter){delimiter=delimiter||" ";var regEx=new RegExp(delimiter+"[0-9]*$");var key=name.replace(regEx,"");var regExResult=regEx.exec(name);var count=this._uniqueNames[key]!==undefined?this._uniqueNames[key]:(regExResult instanceof Array?Number(regExResult[0]):undefined);var newName=key;if(count!==undefined){count++;newName+=delimiter+count;}
this._uniqueNames[key]=count||0;return newName;},getAbsoluteUrl:function(url){var a;if(Ext.isIE){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;}
return a.href;}};Ext.namespace("gxp.plugins");gxp.plugins.LayerSource=Ext.extend(Ext.util.Observable,{store:null,title:"",constructor:function(config){this.initialConfig=config;Ext.apply(this,config);this.addEvents("ready","failure");gxp.plugins.LayerSource.superclass.constructor.apply(this,arguments);},init:function(target){this.target=target;var fallback=function(msg,details){this.fireEvent("failure",msg,details);}
this.createStore();},createStore:function(){this.fireEvent("ready",this);},createLayerRecord:function(config){},getConfigForRecord:function(record){var layer=record.get("layer");return{source:record.get("source"),name:record.get("name"),title:record.get("title"),visibility:layer.getVisibility(),opacity:layer.opacity||undefined,group:record.get("group"),fixed:record.get("fixed")};}});Ext.namespace("gxp");gxp.PolygonSymbolizer=Ext.extend(Ext.Panel,{symbolizer:null,initComponent:function(){this.items=[{xtype:"gx_fillsymbolizer",symbolizer:this.symbolizer,listeners:{change:function(symbolizer){this.fireEvent("change",this.symbolizer);},scope:this}},{xtype:"gx_strokesymbolizer",symbolizer:this.symbolizer,listeners:{change:function(symbolizer){this.fireEvent("change",this.symbolizer);},scope:this}}];this.addEvents("change");gxp.PolygonSymbolizer.superclass.initComponent.call(this);}});Ext.reg('gx_polygonsymbolizer',gxp.PolygonSymbolizer);Ext.namespace("gxp.plugins");gxp.plugins.OLSource=Ext.extend(gxp.plugins.LayerSource,{ptype:"gx_olsource",createLayerRecord:function(config){var record;var Class=window;var parts=config.type.split(".");for(var i=0,ii=parts.length;i<ii;++i){Class=Class[parts[i]];if(!Class){break;}}
if(Class&&Class.prototype&&Class.prototype.initialize){var Constructor=function(){Class.prototype.initialize.apply(this,config.args);}
Constructor.prototype=Class.prototype;var layer=new Constructor();if("visibility"in config){layer.visibility=config.visibility;}
var Record=GeoExt.data.LayerRecord.create([{name:"source",type:"string"},{name:"group",type:"string"},{name:"fixed",type:"boolean"},{name:"type",type:"string"},{name:"args"}]);var data={layer:layer,title:layer.name,source:config.source,group:config.group,fixed:("fixed"in config)?config.fixed:false,type:config.type,args:config.args};record=new Record(data,layer.id);}else{throw new Error("Cannot construct OpenLayers layer from given type: "+config.type);}
return record;},getConfigForRecord:function(record){var config=gxp.plugins.OLSource.superclass.getConfigForRecord.apply(this,arguments);var layer=record.get("layer");return Ext.apply(config,{type:record.get("type"),args:record.get("args")});}});Ext.preg(gxp.plugins.OLSource.prototype.ptype,gxp.plugins.OLSource);Ext.namespace("gxp.form");gxp.form.FilterField=Ext.extend(Ext.form.CompositeField,{filter:null,attributes:null,attributesComboConfig:null,initComponent:function(){if(!this.filter){this.filter=this.createDefaultFilter();}
if(!this.attributes){this.attributes=new GeoExt.data.AttributeStore();}
var defAttributesComboConfig={xtype:"combo",store:this.attributes,editable:false,triggerAction:"all",allowBlank:false,displayField:"name",valueField:"name",value:this.filter.property,listeners:{select:function(combo,record){this.filter.property=record.get("name");this.fireEvent("change",this.filter);},scope:this},width:120};this.attributesComboConfig=this.attributesComboConfig||{};Ext.applyIf(this.attributesComboConfig,defAttributesComboConfig);this.items=this.createFilterItems();this.addEvents("change");gxp.form.FilterField.superclass.initComponent.call(this);},createDefaultFilter:function(){return new OpenLayers.Filter.Comparison();},createFilterItems:function(){return[this.attributesComboConfig,{xtype:"gx_comparisoncombo",value:this.filter.type,listeners:{select:function(combo,record){this.filter.type=record.get("value");this.fireEvent("change",this.filter);},scope:this}},{xtype:"textfield",value:this.filter.value,width:50,grow:true,growMin:50,anchor:"100%",allowBlank:false,listeners:{change:function(el,value){this.filter.value=value;this.fireEvent("change",this.filter);},scope:this}}];}});Ext.reg('gx_filterfield',gxp.form.FilterField);Ext.namespace("gxp");gxp.PointSymbolizer=Ext.extend(Ext.Panel,{symbolizer:null,pointGraphics:[{display:"circle",value:"circle",mark:true},{display:"square",value:"square",mark:true},{display:"triangle",value:"triangle",mark:true},{display:"star",value:"star",mark:true},{display:"cross",value:"cross",mark:true},{display:"x",value:"x",mark:true},{display:"external"}],colorManager:null,external:null,layout:"form",initComponent:function(){if(!this.symbolizer){this.symbolizer={};}
this.external=!!this.symbolizer["externalGraphic"];this.markPanel=new Ext.Panel({border:false,collapsed:this.external,layout:"form",items:[{xtype:"gx_fillsymbolizer",symbolizer:this.symbolizer,labelWidth:this.labelWidth,labelAlign:this.labelAlign,colorManager:this.colorManager,listeners:{change:function(symbolizer){this.fireEvent("change",this.symbolizer);},scope:this}},{xtype:"gx_strokesymbolizer",symbolizer:this.symbolizer,labelWidth:this.labelWidth,labelAlign:this.labelAlign,colorManager:this.colorManager,listeners:{change:function(symbolizer){this.fireEvent("change",this.symbolizer);},scope:this}}]});this.urlField=new Ext.form.TextField({name:"url",fieldLabel:"URL",value:this.symbolizer["externalGraphic"],hidden:true,listeners:{change:function(field,value){this.symbolizer["externalGraphic"]=value;this.fireEvent("change",this.symbolizer);},scope:this},width:100});this.graphicPanel=new Ext.Panel({border:false,collapsed:!this.external,layout:"form",items:[this.urlField,{xtype:"slider",name:"opacity",fieldLabel:"Opacity",value:[(this.symbolizer["graphicOpacity"]==null)?100:this.symbolizer["graphicOpacity"]*100],isFormField:true,listeners:{changecomplete:function(slider,value){this.symbolizer["graphicOpacity"]=value/100;this.fireEvent("change",this.symbolizer);},scope:this},plugins:[new GeoExt.SliderTip({getText:function(slider){return slider.getValue()+"%";}})],width:100}]});this.items=[{xtype:"combo",name:"mark",fieldLabel:"Symbol",store:new Ext.data.JsonStore({data:{root:this.pointGraphics},root:"root",fields:["value","display","preview",{name:"mark",type:"boolean"}]}),value:this.external?0:this.symbolizer["graphicName"],displayField:"display",valueField:"value",tpl:new Ext.XTemplate('<tpl for=".">'+'<div class="x-combo-list-item gx-pointsymbolizer-mark-item">'+'<tpl if="preview">'+'<img src="{preview}" alt="{display}"/>'+'</tpl>'+'<span>{display}</span>'+'</div></tpl>'),mode:"local",allowBlank:false,triggerAction:"all",editable:false,listeners:{select:function(combo,record){var mark=record.get("mark");var value=record.get("value");if(!mark){if(value){this.urlField.hide();this.urlField.getEl().up('.x-form-item').setDisplayed(false);this.symbolizer["externalGraphic"]=value;}else{this.urlField.show();this.urlField.getEl().up('.x-form-item').setDisplayed(true);}
if(!this.external){this.external=true;this.updateGraphicDisplay();}}else{if(this.external){this.external=false;delete this.symbolizer["externalGraphic"];this.updateGraphicDisplay();}
this.symbolizer["graphicName"]=value;}
this.fireEvent("change",this.symbolizer);},scope:this},width:100},{xtype:"textfield",name:"size",fieldLabel:"Size",value:this.symbolizer["pointRadius"]&&this.symbolizer["pointRadius"]*2,listeners:{change:function(field,value){this.symbolizer["pointRadius"]=value/2;this.fireEvent("change",this.symbolizer);},scope:this},width:100},{xtype:"textfield",name:"rotation",fieldLabel:"Rotation",value:this.symbolizer["rotation"],listeners:{change:function(field,value){this.symbolizer["rotation"]=value;this.fireEvent("change",this.symbolizer);},scope:this},width:100},this.markPanel,this.graphicPanel];this.addEvents("change");gxp.PointSymbolizer.superclass.initComponent.call(this);},updateGraphicDisplay:function(){if(this.external){this.markPanel.collapse();this.graphicPanel.expand();}else{this.graphicPanel.collapse();this.markPanel.expand();}}});Ext.reg('gx_pointsymbolizer',gxp.PointSymbolizer);Ext.namespace("gxp");gxp.Viewer=Ext.extend(Ext.util.Observable,{constructor:function(config){this.addEvents("ready");Ext.apply(this,{layerSources:{},portalItems:[]});this.loadConfig(config,this.applyConfig);gxp.Viewer.superclass.constructor.apply(this,arguments);},loadConfig:function(config){this.applyConfig(config);},applyConfig:function(config){this.initialConfig=Ext.apply({},config);Ext.apply(this,this.initialConfig);this.load();},load:function(){if(this.proxy){OpenLayers.ProxyHost=this.proxy;}
this.initMapPanel();var config,queue=[];for(var key in this.sources){queue.push(this.createSourceLoader(key));}
queue.push(function(done){Ext.onReady(function(){this.initPortal();done();},this);});gxp.util.dispatch(queue,this.activate,this);},createSourceLoader:function(key){return function(done){var config=this.sources[key];config.projection=this.initialConfig.map.projection;this.addLayerSource({id:key,config:config,callback:done,fallback:function(){done();},scope:this});};},addLayerSource:function(options){var id=options.id||OpenLayers.Util.createUniqueID("source");var source=Ext.ComponentMgr.createPlugin(options.config,this.defaultSourceType);source.on({ready:function(){var callback=options.callback||Ext.emptyFn;callback.call(this,id);},failure:function(){var fallback=options.fallback||Ext.emptyFn;delete this.layerSources[id];fallback.apply(this,arguments);},scope:options.scope||this})
this.layerSources[id]=source;source.init(this);return source;},initMapPanel:function(){var mapConfig=this.initialConfig.map||{};this.mapPanel=new GeoExt.MapPanel({map:{theme:mapConfig.theme||null,controls:[new OpenLayers.Control.Navigation({zoomWheelEnabled:false}),new OpenLayers.Control.PanPanel(),new OpenLayers.Control.ZoomPanel(),new OpenLayers.Control.Attribution()],projection:mapConfig.projection,units:mapConfig.units,maxExtent:mapConfig.maxExtent&&OpenLayers.Bounds.fromArray(mapConfig.maxExtent),maxResolution:mapConfig.maxResolution,numZoomLevels:mapConfig.numZoomLevels||20},center:mapConfig.center&&new OpenLayers.LonLat(mapConfig.center[0],mapConfig.center[1]),zoom:mapConfig.zoom,items:this.mapItems});},initPortal:function(){var config=this.portalConfig||{};var Constructor=config.renderTo?Ext.Panel:Ext.Viewport;if(this.portalItems.length===0){this.mapPanel.region="center";this.portalItems.push(this.mapPanel);}
this.portal=new Constructor(Ext.applyIf(this.portalConfig||{},{layout:"fit",hideBorders:true,items:{layout:"border",deferredRender:false,items:this.portalItems}}));},activate:function(){this.addLayers();Ext.QuickTips.init();this.fireEvent("ready");},addLayers:function(){var mapConfig=this.initialConfig.map;if(mapConfig&&mapConfig.layers){var conf,source,record,baseRecords=[],overlayRecords=[];for(var i=0;i<mapConfig.layers.length;++i){conf=mapConfig.layers[i];source=this.layerSources[conf.source];if(source){record=source.createLayerRecord(conf);if(record){if(record.get("group")==="background"){baseRecords.push(record);}else{overlayRecords.push(record);}}}}
baseRecords.sort(function(a,b){return a.get("layer").visibility<b.get("layer").visibility;});var panel=this.mapPanel;var map=panel.map;var records=baseRecords.concat(overlayRecords);if(records.length){panel.layers.add(records);if(panel.center){map.setCenter(panel.center,panel.zoom);}else if(panel.extent){map.zoomToExtent(panel.extent);}else{map.zoomToMaxExtent();}}}},getState:function(){var state=Ext.apply({},this.initialConfig);var center=this.mapPanel.map.getCenter();Ext.apply(state.map,{center:[center.lon,center.lat],zoom:this.mapPanel.map.zoom,layers:[]});this.mapPanel.layers.each(function(record){var layer=record.get("layer");if(layer.displayInLayerSwitcher){var id=record.get("source");var source=this.layerSources[id];if(!source){throw new Error("Could not find source for layer '"+record.get("name")+"'");}
state.map.layers.push(source.getConfigForRecord(record));if(!state.sources[id]){state.sources[id]=Ext.apply({},source.initialConfig);}}},this);return state;}});Ext.namespace("gxp.plugins");gxp.plugins.StyleWriter=Ext.extend(Ext.util.Observable,{deletedStyles:null,constructor:function(config){this.initialConfig=config;Ext.apply(this,config);this.deletedStyles=[];gxp.plugins.StyleWriter.superclass.constructor.apply(this,arguments);},init:function(target){this.target=target;target.stylesStore.on({"remove":function(store,record,index){var styleName=record.get("name");record.get("name")===styleName&&this.deletedStyles.push(styleName);},scope:this});target.on({"beforesaved":this.write,scope:this});},write:function(target,options){target.fireEvent("saved");}});Ext.namespace("gxp.plugins");gxp.plugins.GeoServerStyleWriter=Ext.extend(gxp.plugins.StyleWriter,{baseUrl:"/geoserver/rest",constructor:function(config){this.initialConfig=config;Ext.apply(this,config);gxp.plugins.GeoServerStyleWriter.superclass.constructor.apply(this,arguments);},write:function(target,options){var dispatchQueue=[];var store=target.stylesStore;store.each(function(rec){(rec.phantom||store.modified.indexOf(rec)!==-1)&&this.writeStyle(rec,dispatchQueue);},this);var success=function(){this.deleteStyles();target.stylesStore.commitChanges();options.success&&options.success.call(options.scope);target.fireEvent("saved");}
if(dispatchQueue.length>0){gxp.util.dispatch(dispatchQueue,function(){this.assignStyles(options.defaultStyle,success);},this);}else{this.assignStyles(options.defaultStyle,success);}},writeStyle:function(styleRec,dispatchQueue){var styleName=styleRec.get("userStyle").name;dispatchQueue.push(function(callback,storage){Ext.Ajax.request({method:styleRec.phantom===true?"POST":"PUT",url:this.baseUrl+"/styles"+(styleRec.phantom===true?"":"/"+styleName+".xml"),headers:{"Content-Type":"application/vnd.ogc.sld+xml; charset=UTF-8"},xmlData:this.target.createSLD({userStyles:[styleName]}),success:styleRec.phantom===true?function(){Ext.Ajax.request({method:"POST",url:this.baseUrl+"/layers/"+
this.target.layerRecord.get("name")+"/styles.json",jsonData:{"style":{"name":styleName}},success:callback,scope:this})}:callback,scope:this});});},assignStyles:function(defaultStyle,callback){var styles=[];this.target.stylesStore.each(function(rec){if(!defaultStyle&&rec.get("userStyle").isDefault===true){defaultStyle=rec.get("name");}
if(rec.get("name")!==defaultStyle&&this.deletedStyles.indexOf(rec.id)===-1){styles.push({"name":rec.get("name")})}},this);Ext.Ajax.request({method:"PUT",url:this.baseUrl+"/layers/"+
this.target.layerRecord.get("name")+".json",jsonData:{"layer":{"defaultStyle":{"name":defaultStyle},"styles":styles.length>0?{"style":styles}:{},"enabled":true}},success:callback,scope:this});},deleteStyles:function(){for(var i=0,len=this.deletedStyles.length;i<len;++i){Ext.Ajax.request({method:"DELETE",url:this.baseUrl+"/styles/"+this.deletedStyles[i]+"?purge=true"});}}});Ext.preg("gx-geoserverstylewriter",gxp.plugins.GeoServerStyleWriter);Ext.namespace("gxp");gxp.GoogleEarthPanel=Ext.extend(Ext.Panel,{HORIZONTAL_FIELD_OF_VIEW:(30*Math.PI)/180,map:null,mapPanel:null,layers:null,earth:null,projection:null,layerCache:null,initComponent:function(){this.addEvents("beforeadd");gxp.GoogleEarthPanel.superclass.initComponent.call(this);if(!this.map){this.map=this.mapPanel&&this.mapPanel.map;}
if(!this.layers){this.layers=this.mapPanel&&this.mapPanel.layers;}
this.projection=new OpenLayers.Projection("EPSG:4326");this.on("show",function(){this.layerCache={};google.earth.createInstance(this.body.dom,this.onEarthReady.createDelegate(this),function(){});},this);this.on("hide",function(){if(this.earth!=null){this.updateMap();this.body.child("*").remove();}
this.earth=null;},this);},onEarthReady:function(object){this.earth=object;this.earth.getOptions().setFlyToSpeed(this.earth.SPEED_TELEPORT);this.resetCamera();this.setExtent(this.map.getExtent());this.earth.getNavigationControl().setVisibility(this.earth.VISIBILITY_SHOW);var screenXY=this.earth.getNavigationControl().getScreenXY();screenXY.setXUnits(this.earth.UNITS_PIXELS);screenXY.setYUnits(this.earth.UNITS_INSET_PIXELS);this.earth.getWindow().setVisibility(true);this.layers.each(function(record){this.addLayer(record);},this);this.layers.on("remove",this.updateLayers,this);this.layers.on("update",this.updateLayers,this);this.layers.on("add",this.updateLayers,this);},updateLayers:function(){if(!this.earth)return;var features=this.earth.getFeatures();var f=features.getFirstChild();while(f!=null){features.removeChild(f);f=features.getFirstChild();}
this.layers.each(function(record){this.addLayer(record);},this);},addLayer:function(layer,order){if(this.earth){var add=this.fireEvent("beforeadd",layer);if(add!==false){var name=layer.get("layer").id;if(this.layerCache[name]){var networkLink=this.layerCache[name];}else{var link=this.earth.createLink('kl_'+name);var ows=layer.get("layer").url;ows=ows.replace(/\?.*/,'');var params=layer.get("layer").params
var kmlPath='/kml?mode=refresh&layers='+params.LAYERS+"&styles="+params.STYLES;link.setHref(ows+kmlPath);var networkLink=this.earth.createNetworkLink('nl_'+name);networkLink.setName(name);networkLink.set(link,false,false);this.layerCache[name]=networkLink;}
networkLink.setVisibility(layer.get("layer").getVisibility());if(order!==undefined&&order<this.earth.getFeatures().getChildNodes().getLength()){this.earth.getFeatures().insertBefore(this.earth.getFeatures().getChildNodes().item(order));}else{this.earth.getFeatures().appendChild(networkLink);}}}},setExtent:function(extent){var extent=extent.transform(this.map.getProjectionObject(),this.projection);var center=extent.getCenterLonLat();var width=this.getExtentWidth(extent);var height=width/(2*Math.tan(this.HORIZONTAL_FIELD_OF_VIEW));var lookAt=this.earth.getView().copyAsLookAt(this.earth.ALTITUDE_RELATIVE_TO_GROUND);lookAt.setLatitude(center.lat);lookAt.setLongitude(center.lon);lookAt.setRange(height);this.earth.getView().setAbstractView(lookAt);},resetCamera:function(){var camera=this.earth.getView().copyAsCamera(this.earth.ALTITUDE_RELATIVE_TO_GROUND);camera.setRoll(0);camera.setHeading(0);camera.setTilt(0);this.earth.getView().setAbstractView(camera);},getExtent:function(){var geBounds=this.earth.getView().getViewportGlobeBounds();var olBounds=new OpenLayers.Bounds(geBounds.getWest(),geBounds.getSouth(),geBounds.getEast(),geBounds.getNorth());return olBounds;},updateMap:function(){var lookAt=this.earth.getView().copyAsLookAt(this.earth.ALTITUDE_RELATIVE_TO_GROUND);var center=this.reprojectToMap(new OpenLayers.LonLat(lookAt.getLongitude(),lookAt.getLatitude()));var geExtent=this.reprojectToMap(this.getExtent());this.map.zoomToExtent(geExtent,true);this.map.setCenter(center);var lookAt=this.earth.getView().copyAsLookAt(this.earth.ALTITUDE_RELATIVE_TO_GROUND);var height=lookAt.getRange();var width=2*height*Math.tan(this.HORIZONTAL_FIELD_OF_VIEW);var nextResolution=this.map.getResolutionForZoom(this.map.getZoom()+1);var currentExtent=this.map.getExtent();var nextExtent=new OpenLayers.Bounds(center.lon-(this.map.getSize().w/2*nextResolution),center.lat+(this.map.getSize().h/2*nextResolution),center.lon+(this.map.getSize().w/2*nextResolution),center.lat-(this.map.getSize().h/2*nextResolution));var currentWidthDiff=Math.abs(this.getExtentWidth(currentExtent)-width);var nextWidthDiff=Math.abs(this.getExtentWidth(nextExtent)-width);if(nextWidthDiff<currentWidthDiff){this.map.zoomTo(this.map.getZoom()+1);}},getExtentWidth:function(extent){var center=extent.getCenterLonLat();var middleLeft=new OpenLayers.LonLat(extent.left,center.lat);var middleRight=new OpenLayers.LonLat(extent.right,center.lat);return OpenLayers.Util.distVincenty(middleLeft,middleRight)*1000;},reprojectToGE:function(data){return data.clone().transform(this.map.getProjectionObject(),this.projection);},reprojectToMap:function(data){return data.clone().transform(this.projection,this.map.getProjectionObject());}});Ext.namespace("gxp");gxp.FillSymbolizer=Ext.extend(Ext.FormPanel,{symbolizer:null,colorManager:null,checkboxToggle:true,defaultColor:null,border:false,initComponent:function(){if(!this.symbolizer){this.symbolizer={};}
var colorFieldPlugins;if(this.colorManager){colorFieldPlugins=[new this.colorManager];}
this.items=[{xtype:"fieldset",title:"Fill",autoHeight:true,checkboxToggle:this.checkboxToggle,collapsed:this.checkboxToggle===true&&this.symbolizer["fill"]===false,hideMode:"offsets",defaults:{width:100},items:[{xtype:"gx_colorfield",fieldLabel:"Color",name:"color",value:this.symbolizer["fillColor"],defaultBackground:this.defaultColor||OpenLayers.Renderer.defaultSymbolizer["fillColor"],plugins:colorFieldPlugins,listeners:{valid:function(field){this.symbolizer["fillColor"]=field.getValue();this.fireEvent("change",this.symbolizer);},scope:this}},{xtype:"slider",fieldLabel:"Opacity",name:"opacity",values:[(this.symbolizer["fillOpacity"]==null)?100:this.symbolizer["fillOpacity"]*100],isFormField:true,listeners:{changecomplete:function(slider,value){this.symbolizer["fillOpacity"]=value/100;this.fireEvent("change",this.symbolizer);},scope:this},plugins:[new GeoExt.SliderTip({getText:function(slider){return slider.getValue()+"%";}})]}],listeners:{"collapse":function(){this.symbolizer["fill"]=false;this.fireEvent("change",this.symbolizer);},"expand":function(){this.symbolizer["fill"]=true;this.fireEvent("change",this.symbolizer);},scope:this}}];this.addEvents("change");gxp.FillSymbolizer.superclass.initComponent.call(this);}});Ext.reg('gx_fillsymbolizer',gxp.FillSymbolizer);(function(){var proto=GeoExt.data.WMSCapabilitiesReader.prototype;var original=proto.readRecords;proto.readRecords=function(data){if(typeof data==="string"||data.nodeType){data=this.meta.format.read(data);}
this.raw=data;return original.call(this,data);};})();Ext.namespace("gxp.plugins");gxp.plugins.WMSSource=Ext.extend(gxp.plugins.LayerSource,{ptype:"gx_wmssource",createStore:function(){this.store=new GeoExt.data.WMSCapabilitiesStore({url:this.url,baseParams:{SERVICE:"WMS",REQUEST:"GetCapabilities"},autoLoad:true,listeners:{load:function(){if(!this.store.reader.raw||!this.store.reader.raw.service){this.fireEvent("failure",this,"Invalid capabilities document.");}else{if(!this.title){this.title=this.store.reader.raw.service.title;}
this.fireEvent("ready",this);}},exception:function(proxy,type,action,options,response,arg){delete this.store;var msg;if(type==="response"){msg=arg||"Invalid response from server.";}else{msg="Trouble creating layer store from response.";}
this.fireEvent("failure",this,msg,Array.prototype.concat(arguments));},scope:this}});},createLayerRecord:function(config){var record;var index=this.store.findExact("name",config.name);if(index>-1){var original=this.store.getAt(index);var layer=original.get("layer");var projConfig=this.target.mapPanel.map.projection;var projection=this.target.mapPanel.map.getProjectionObject()||(projConfig&&new OpenLayers.Projection(projConfig))||new OpenLayers.Projection("EPSG:4326");var nativeExtent=original.get("bbox")[projection.getCode()]
var maxExtent=(nativeExtent&&OpenLayers.Bounds.fromArray(nativeExtent.bbox))||OpenLayers.Bounds.fromArray(original.get("llbbox")).transform(new OpenLayers.Projection("EPSG:4326"),projection);if(!(1/maxExtent.getHeight()>0)||!(1/maxExtent.getWidth()>0)){maxExtent=undefined;}
var params=Ext.applyIf({STYLES:config.styles,FORMAT:config.format,TRANSPARENT:config.transparent},layer.params);layer=new OpenLayers.Layer.WMS(config.title||layer.name,layer.url,params,{attribution:layer.attribution,maxExtent:maxExtent,restrictedExtent:maxExtent,singleTile:("tiled"in config)?!config.tiled:false,ratio:config.ratio||1,visibility:("visibility"in config)?config.visibility:true,opacity:("opacity"in config)?config.opacity:1,buffer:("buffer"in config)?config.buffer:1});var data=Ext.applyIf({title:layer.name,group:config.group,source:config.source,properties:"gx_wmslayerpanel",fixed:config.fixed,layer:layer},original.data);var fields=[{name:"source",type:"string"},{name:"group",type:"string"},{name:"properties",type:"string"},{name:"fixed",type:"boolean"}];original.fields.each(function(field){fields.push(field);});var Record=GeoExt.data.LayerRecord.create(fields);record=new Record(data,layer.id);}
return record;},getConfigForRecord:function(record){var config=gxp.plugins.WMSSource.superclass.getConfigForRecord.apply(this,arguments);var layer=record.get("layer");var params=layer.params;return Ext.apply(config,{format:params.FORMAT,styles:params.STYLES,transparent:params.TRANSPARENT});}});Ext.preg(gxp.plugins.WMSSource.prototype.ptype,gxp.plugins.WMSSource);Ext.namespace("gxp");gxp.ScaleLimitPanel=Ext.extend(Ext.Panel,{maxScaleDenominatorLimit:40075016.68*39.3701*OpenLayers.DOTS_PER_INCH/256,limitMaxScaleDenominator:true,maxScaleDenominator:undefined,minScaleDenominatorLimit:Math.pow(0.5,19)*40075016.68*39.3701*OpenLayers.DOTS_PER_INCH/256,limitMinScaleDenominator:true,minScaleDenominator:undefined,scaleLevels:20,scaleSliderTemplate:"{scaleType} Scale 1:{scale}",modifyScaleTipContext:Ext.emptyFn,scaleFactor:null,changing:false,border:false,initComponent:function(){this.layout="column";this.defaults={border:false,bodyStyle:"margin: 0 5px;"};this.bodyStyle={padding:"5px"};this.scaleSliderTemplate=new Ext.Template(this.scaleSliderTemplate);Ext.applyIf(this,{minScaleDenominator:this.minScaleDenominatorLimit,maxScaleDenominator:this.maxScaleDenominatorLimit});this.scaleFactor=Math.pow(this.maxScaleDenominatorLimit/this.minScaleDenominatorLimit,1/(this.scaleLevels-1));this.scaleSlider=new Ext.Slider({vertical:true,height:100,values:[0,100],listeners:{changecomplete:function(slider,value){this.updateScaleValues(slider);},render:function(slider){slider.thumbs[0].el.setVisible(this.limitMaxScaleDenominator);slider.thumbs[1].el.setVisible(this.limitMinScaleDenominator);slider.setDisabled(!this.limitMinScaleDenominator&&!this.limitMaxScaleDenominator);},scope:this},plugins:[new gxp.slider.Tip({getText:(function(thumb){var index=thumb.slider.thumbs.indexOf(thumb);var value=thumb.value;var scales=this.sliderValuesToScale([thumb.value]);var data={scale:String(scales[0]),zoom:(thumb.value*(this.scaleLevels/100)).toFixed(1),type:(index===0)?"Max":"Min",scaleType:(index===0)?"Min":"Max"};this.modifyScaleTipContext(this,data);return this.scaleSliderTemplate.apply(data);}).createDelegate(this)})]});this.maxScaleDenominatorInput=new Ext.form.TextField({width:100,fieldLabel:"1",value:Math.round(this.maxScaleDenominator),disabled:!this.limitMaxScaleDenominator,listeners:{valid:function(field){var value=Number(field.getValue());var limit=Math.round(this.maxScaleDenominatorLimit);if(value<limit&&value>this.minScaleDenominator){this.maxScaleDenominator=value;this.updateSliderValues();}},change:function(field){var value=Number(field.getValue());var limit=Math.round(this.maxScaleDenominatorLimit);if(value>limit){field.setValue(limit);}else if(value<this.minScaleDenominator){field.setValue(this.minScaleDenominator);}else{this.maxScaleDenominator=value;this.updateSliderValues();}},scope:this}});this.minScaleDenominatorInput=new Ext.form.TextField({width:100,fieldLabel:"1",value:Math.round(this.minScaleDenominator),disabled:!this.limitMinScaleDenominator,listeners:{valid:function(field){var value=Number(field.getValue());var limit=Math.round(this.minScaleDenominatorLimit);if(value>limit&&value<this.maxScaleDenominator){this.minScaleDenominator=value;this.updateSliderValues();}},change:function(field){var value=Number(field.getValue());var limit=Math.round(this.minScaleDenominatorLimit);if(value<limit){field.setValue(limit);}else if(value>this.maxScaleDenominator){field.setValue(this.maxScaleDenominator);}else{this.minScaleDenominator=value;this.updateSliderValues();}},scope:this}});this.items=[this.scaleSlider,{xtype:"panel",layout:"form",defaults:{border:false},items:[{labelWidth:90,layout:"form",width:150,items:[{xtype:"checkbox",checked:!!this.limitMinScaleDenominator,fieldLabel:"Max scale limit",listeners:{check:function(box,checked){this.limitMinScaleDenominator=checked;var slider=this.scaleSlider;slider.setValue(1,100);slider.thumbs[1].el.setVisible(checked);this.minScaleDenominatorInput.setDisabled(!checked);this.updateScaleValues(slider);slider.setDisabled(!this.limitMinScaleDenominator&&!this.limitMaxScaleDenominator);},scope:this}}]},{labelWidth:10,layout:"form",items:[this.minScaleDenominatorInput]},{labelWidth:90,layout:"form",items:[{xtype:"checkbox",checked:!!this.limitMaxScaleDenominator,fieldLabel:"Min scale limit",listeners:{check:function(box,checked){this.limitMaxScaleDenominator=checked;var slider=this.scaleSlider;slider.setValue(0,0);slider.thumbs[0].el.setVisible(checked);this.maxScaleDenominatorInput.setDisabled(!checked);this.updateScaleValues(slider);slider.setDisabled(!this.limitMinScaleDenominator&&!this.limitMaxScaleDenominator);},scope:this}}]},{labelWidth:10,layout:"form",items:[this.maxScaleDenominatorInput]}]}];this.addEvents("change");gxp.ScaleLimitPanel.superclass.initComponent.call(this);},updateScaleValues:function(slider){if(!this.changing){var values=slider.getValues();var resetSlider=false;if(!this.limitMaxScaleDenominator){if(values[0]>0){values[0]=0;resetSlider=true;}}
if(!this.limitMinScaleDenominator){if(values[1]<100){values[1]=100;resetSlider=true;}}
if(resetSlider){slider.setValue(0,values[0]);slider.setValue(1,values[1]);}else{var scales=this.sliderValuesToScale(values);var max=scales[0];var min=scales[1];this.changing=true;this.minScaleDenominatorInput.setValue(min);this.maxScaleDenominatorInput.setValue(max);this.changing=false;this.fireEvent("change",this,(this.limitMinScaleDenominator)?min:undefined,(this.limitMaxScaleDenominator)?max:undefined);}}},updateSliderValues:function(){if(!this.changing){var min=this.minScaleDenominator;var max=this.maxScaleDenominator;var values=this.scaleToSliderValues([max,min]);this.changing=true;this.scaleSlider.setValue(0,values[0]);this.scaleSlider.setValue(1,values[1]);this.changing=false;this.fireEvent("change",this,(this.limitMinScaleDenominator)?min:undefined,(this.limitMaxScaleDenominator)?max:undefined);}},sliderValuesToScale:function(values){var interval=100/(this.scaleLevels-1);return[Math.round(Math.pow(this.scaleFactor,(100-values[0])/interval)*this.minScaleDenominatorLimit),Math.round(Math.pow(this.scaleFactor,(100-values[1])/interval)*this.minScaleDenominatorLimit)];},scaleToSliderValues:function(scales){var interval=100/(this.scaleLevels-1);return[100-(interval*Math.log(scales[0]/this.minScaleDenominatorLimit)/Math.log(this.scaleFactor)),100-(interval*Math.log(scales[1]/this.minScaleDenominatorLimit)/Math.log(this.scaleFactor))];}});Ext.reg('gx_scalelimitpanel',gxp.ScaleLimitPanel);Ext.namespace("gxp.menu");gxp.menu.LayerMenu=Ext.extend(Ext.menu.Menu,{layers:null,initComponent:function(){gxp.menu.LayerMenu.superclass.initComponent.apply(this,arguments);this.layers.on("add",this.onLayerAdd,this);this.onLayerAdd();},onRender:function(ct,position){gxp.menu.LayerMenu.superclass.onRender.apply(this,arguments);},beforeDestroy:function(){if(this.layers&&this.layers.on){this.layers.un("add",this.onLayerAdd,this);}
delete this.layers;gxp.menu.LayerMenu.superclass.beforeDestroy.apply(this,arguments);},onLayerAdd:function(){this.removeAll();this.add({iconCls:"gx-layer-visibility",text:"Layer",canActivate:false},"-");this.layers.each(function(record){var layer=record.get("layer");if(layer.displayInLayerSwitcher){var item=new Ext.menu.CheckItem({text:record.get("title"),checked:record.get("layer").getVisibility(),group:record.get("group"),listeners:{checkchange:function(item,checked){record.get("layer").setVisibility(checked);}}});if(this.items.getCount()>2){this.insert(2,item);}else{this.add(item);}}},this);}});Ext.reg('gx_layermenu',gxp.menu.LayerMenu);Ext.namespace("gxp.form");gxp.form.ComarisonComboBox=Ext.extend(Ext.form.ComboBox,{allowedTypes:[[OpenLayers.Filter.Comparison.EQUAL_TO,"="],[OpenLayers.Filter.Comparison.NOT_EQUAL_TO,"<>"],[OpenLayers.Filter.Comparison.LESS_THAN,"<"],[OpenLayers.Filter.Comparison.GREATER_THAN,">"],[OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO,"<="],[OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO,">="],[OpenLayers.Filter.Comparison.LIKE,"like"]],allowBlank:false,mode:"local",triggerAction:"all",width:50,editable:false,initComponent:function(){var defConfig={displayField:"name",valueField:"value",store:new Ext.data.SimpleStore({data:this.allowedTypes,fields:["value","name"]}),value:(this.value===undefined)?this.allowedTypes[0][0]:this.value};Ext.applyIf(this,defConfig);gxp.form.ComarisonComboBox.superclass.initComponent.call(this);}});Ext.reg("gx_comparisoncombo",gxp.form.ComarisonComboBox);Ext.namespace("gxp.form");gxp.form.ColorField=Ext.extend(Ext.form.TextField,{cssColors:{aqua:"#00FFFF",black:"#000000",blue:"#0000FF",fuchsia:"#FF00FF",gray:"#808080",green:"#008000",lime:"#00FF00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#FF0000",silver:"#C0C0C0",teal:"#008080",white:"#FFFFFF",yellow:"#FFFF00"},defaultBackground:"#ffffff",initComponent:function(){if(this.value){this.value=this.hexToColor(this.value);}
gxp.form.ColorField.superclass.initComponent.call(this);this.on({render:this.colorField,valid:this.colorField,scope:this});},isDark:function(hex){var dark=false;if(hex){var r=parseInt(hex.substring(1,3),16)/255;var g=parseInt(hex.substring(3,5),16)/255;var b=parseInt(hex.substring(5,7),16)/255;var brightness=(r*0.299)+(g*0.587)+(b*0.144);dark=brightness<0.5;}
return dark;},colorField:function(){var color=this.colorToHex(this.getValue())||this.defaultBackground;this.getEl().setStyle({"background":color,"color":this.isDark(color)?"#ffffff":"#000000"});},getHexValue:function(){return this.colorToHex(gxp.form.ColorField.superclass.getValue.apply(this,arguments));},getValue:function(){var v=this.getHexValue();var o=this.initialConfig.value;if(v===this.hexToColor(o)){v=o;}
return v;},setValue:function(value){gxp.form.ColorField.superclass.setValue.apply(this,[this.hexToColor(value)]);},colorToHex:function(color){if(!color){return color;}
var hex;if(color.match(/^#[0-9a-f]{6}$/i)){hex=color;}else{hex=this.cssColors[color.toLowerCase()]||null;}
return hex;},hexToColor:function(hex){if(!hex){return hex;}
var color=hex;for(var c in this.cssColors){if(this.cssColors[c]==color.toUpperCase()){color=c;break;}}
return color;}});Ext.reg("gx_colorfield",gxp.form.ColorField);Ext.namespace("gxp");gxp.LineSymbolizer=Ext.extend(Ext.Panel,{symbolizer:null,initComponent:function(){this.items=[{xtype:"gx_strokesymbolizer",symbolizer:this.symbolizer,listeners:{change:function(symbolizer){this.fireEvent("change",this.symbolizer);},scope:this}}];this.addEvents("change");gxp.LineSymbolizer.superclass.initComponent.call(this);}});Ext.reg('gx_linesymbolizer',gxp.LineSymbolizer);Ext.namespace("gxp");gxp.RulePanel=Ext.extend(Ext.TabPanel,{fonts:undefined,symbolType:"Point",rule:null,attributes:null,nestedFilters:true,minScaleDenominatorLimit:Math.pow(0.5,19)*40075016.68*39.3701*OpenLayers.DOTS_PER_INCH/256,maxScaleDenominatorLimit:40075016.68*39.3701*OpenLayers.DOTS_PER_INCH/256,scaleLevels:20,scaleSliderTemplate:"{scaleType} Scale 1:{scale}",modifyScaleTipContext:Ext.emptyFn,initComponent:function(){var defConfig={plain:true,border:false};Ext.applyIf(this,defConfig);if(!this.rule){this.rule=new OpenLayers.Rule({name:this.uniqueRuleName()});}
this.activeTab=0;this.textSymbolizer=new gxp.TextSymbolizer({symbolizer:this.rule.symbolizer["Text"],attributes:this.attributes,fonts:this.fonts,listeners:{change:function(symbolizer){this.fireEvent("change",this,this.rule);},scope:this}});this.scaleLimitPanel=new gxp.ScaleLimitPanel({maxScaleDenominator:this.rule.maxScaleDenominator||undefined,limitMaxScaleDenominator:!!this.rule.maxScaleDenominator,maxScaleDenominatorLimit:this.maxScaleDenominatorLimit,minScaleDenominator:this.rule.minScaleDenominator||undefined,limitMinScaleDenominator:!!this.rule.minScaleDenominator,minScaleDenominatorLimit:this.minScaleDenominatorLimit,scaleLevels:this.scaleLevels,scaleSliderTemplate:this.scaleSliderTemplate,modifyScaleTipContext:this.modifyScaleTipContext,listeners:{change:function(comp,min,max){this.rule.minScaleDenominator=min;this.rule.maxScaleDenominator=max;this.fireEvent("change",this,this.rule);},scope:this}});this.filterBuilder=new gxp.FilterBuilder({allowGroups:this.nestedFilters,filter:this.rule&&this.rule.filter&&this.rule.filter.clone(),attributes:this.attributes,listeners:{change:function(builder){var filter=builder.getFilter();this.rule.filter=filter;this.fireEvent("change",this,this.rule)},scope:this}});this.items=[{title:"Labels",autoScroll:true,bodyStyle:{"padding":"10px"},items:[{xtype:"fieldset",title:"Label Features",autoHeight:true,checkboxToggle:true,collapsed:!this.rule.symbolizer["Text"],items:[this.textSymbolizer],listeners:{collapse:function(){delete this.rule.symbolizer["Text"];this.fireEvent("change",this,this.rule);},expand:function(){this.rule.symbolizer["Text"]=this.textSymbolizer.symbolizer;this.fireEvent("change",this,this.rule);},scope:this}}]}];if(this.getSymbolTypeFromRule(this.rule)||this.symbolType){this.items=[{title:"Basic",autoScroll:true,items:[this.createHeaderPanel(),this.createSymbolizerPanel()]},this.items[0],{title:"Advanced",defaults:{style:{margin:"7px"}},autoScroll:true,items:[{xtype:"fieldset",title:"Limit by scale",checkboxToggle:true,collapsed:!(this.rule&&(this.rule.minScaleDenominator||this.rule.maxScaleDenominator)),autoHeight:true,items:[this.scaleLimitPanel],listeners:{collapse:function(){delete this.rule.minScaleDenominator;delete this.rule.maxScaleDenominator;this.fireEvent("change",this,this.rule)},expand:function(){var tab=this.getActiveTab();this.activeTab=null;this.setActiveTab(tab);var changed=false;if(this.scaleLimitPanel.limitMinScaleDenominator){this.rule.minScaleDenominator=this.scaleLimitPanel.minScaleDenominator;changed=true;}
if(this.scaleLimitPanel.limitMaxScaleDenominator){this.rule.maxScaleDenominator=this.scaleLimitPanel.maxScaleDenominator;changed=true;}
if(changed){this.fireEvent("change",this,this.rule)}},scope:this}},{xtype:"fieldset",title:"Limit by condition",checkboxToggle:true,collapsed:!(this.rule&&this.rule.filter),autoHeight:true,items:[this.filterBuilder],listeners:{collapse:function(){delete this.rule.filter;this.fireEvent("change",this,this.rule)},expand:function(){var changed=false;this.rule.filter=this.filterBuilder.getFilter();this.fireEvent("change",this,this.rule)},scope:this}}]}]};this.items[0].autoHeight=true;this.addEvents("change");this.on({tabchange:function(panel,tab){tab.doLayout();},scope:this});gxp.RulePanel.superclass.initComponent.call(this);},uniqueRuleName:function(){return OpenLayers.Util.createUniqueID("rule_");},createHeaderPanel:function(){this.symbolizerSwatch=new GeoExt.FeatureRenderer({symbolType:this.symbolType,symbolizers:[this.rule.symbolizer[this.symbolType]],isFormField:true,fieldLabel:"Symbol"});return{xtype:"form",border:false,labelAlign:"top",defaults:{border:false},style:{"padding":"0.3em 0 0 1em"},items:[{layout:"column",defaults:{border:false,style:{"padding-right":"1em"}},items:[{layout:"form",width:150,items:[{xtype:"textfield",fieldLabel:"Name",anchor:"95%",value:this.rule&&(this.rule.title||this.rule.name||""),listeners:{change:function(el,value){this.rule.title=value;this.fireEvent("change",this,this.rule);},scope:this}}]},{layout:"form",width:70,items:[this.symbolizerSwatch]}]}]};},createSymbolizerPanel:function(){symbolizerConfig={xtype:"gx_"+this.symbolType.toLowerCase()+"symbolizer",symbolizer:this.rule.symbolizer[this.symbolType],bodyStyle:{"padding":"10px"},border:false,labelWidth:70,defaults:{labelWidth:70},listeners:{change:function(symbolizer){this.symbolizerSwatch.setSymbolizers([symbolizer],{draw:this.symbolizerSwatch.rendered});this.fireEvent("change",this,this.rule);},scope:this}};if(this.symbolType==="Point"&&this.pointGraphics){symbolizerConfig.pointGraphics=this.pointGraphics;}
return symbolizerConfig;},getSymbolTypeFromRule:function(rule){var symbolizer=rule.symbolizer;if(symbolizer["Line"]||symbolizer["Point"]||symbolizer["Polygon"]){for(var type in symbolizer){if(type!="Text"){return type;}}}}});Ext.reg('gx_rulepanel',gxp.RulePanel);Ext.namespace("gxp.slider");gxp.slider.Tip=Ext.extend(Ext.slider.Tip,{hover:true,dragging:false,init:function(slider){if(this.hover){slider.on("render",this.registerThumbListeners,this);}
this.slider=slider;gxp.slider.Tip.superclass.init.apply(this,arguments);},registerThumbListeners:function(){for(var i=0,len=this.slider.thumbs.length;i<len;++i){this.slider.thumbs[i].el.on({"mouseover":this.createHoverListener(i),"mouseout":function(){if(!this.dragging){this.hide.apply(this,arguments);}},scope:this});}},createHoverListener:function(index){return(function(){this.onSlide(this.slider,{},this.slider.thumbs[index]);this.dragging=false;}).createDelegate(this);},onSlide:function(slider,e,thumb){this.dragging=true;gxp.slider.Tip.superclass.onSlide.apply(this,arguments);}});Ext.namespace("gxp.plugins");gxp.plugins.GoogleSource=Ext.extend(gxp.plugins.LayerSource,{ptype:"gx_googlesource",timeout:7000,title:"Google Layers",constructor:function(config){this.config=config;gxp.plugins.GoogleSource.superclass.constructor.apply(this,arguments);},createStore:function(){if(gxp.plugins.GoogleSource.monitor.ready){this.syncCreateStore();}else{gxp.plugins.GoogleSource.monitor.on({ready:function(){this.syncCreateStore();},scope:this});if(!gxp.plugins.GoogleSource.monitor.loading){this.loadScript();}}},syncCreateStore:function(){var mapTypes={"ROADMAP":{abstract:"Show street map",MAX_ZOOM_LEVEL:20},"SATELLITE":{abstract:"Show satellite imagery"},"HYBRID":{abstract:"Show imagery with street names"},"TERRAIN":{abstract:"Show street map with terrain",MAX_ZOOM_LEVEL:15}};var layers=[];var name,mapType;for(var name in mapTypes){mapType=google.maps.MapTypeId[name];layers.push(new OpenLayers.Layer.Google("Google "+mapType.replace(/\w/,function(c){return c.toUpperCase()}),{type:mapType,typeName:name,MAX_ZOOM_LEVEL:mapTypes[name].MAX_ZOOM_LEVEL,maxExtent:new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),restrictedExtent:new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),projection:this.projection}))}
this.store=new GeoExt.data.LayerStore({layers:layers,fields:[{name:"source",type:"string"},{name:"name",type:"string",mapping:"typeName"},{name:"abstract",type:"string"},{name:"group",type:"string",defaultValue:"background"},{name:"fixed",type:"boolean",defaultValue:true}]});this.store.each(function(l){l.set("abstract",mapTypes[l.get("name")].abstract);});this.fireEvent("ready",this);},createLayerRecord:function(config){var record;var cmp=function(l){return l.get("name")===config.name;};if(this.target.mapPanel.layers.findBy(cmp)==-1){record=this.store.getAt(this.store.findBy(cmp)).clone();var layer=record.get("layer");if(config.title){layer.setName(config.title);record.set("title",config.title);}
if("visibility"in config){layer.visibility=config.visibility}
record.set("source",config.source);record.set("name",config.name);if("group"in config){record.set("group",config.group);}
record.commit();};return record;},loadScript:function(){var params={autoload:Ext.encode({modules:[{name:"maps",version:3,nocss:"true",callback:"gxp.plugins.GoogleSource.monitor.onScriptLoad",other_params:"sensor=false"}]})};var script=document.createElement("script");script.src="http://www.google.com/jsapi?"+Ext.urlEncode(params);window.setTimeout((function(){if(!gxp.plugins.GoogleSource.monitor.ready){this.abortScriptLoad(script);}}).createDelegate(this),this.timeout);document.getElementsByTagName("head")[0].appendChild(script);},abortScriptLoad:function(script){document.getElementsByTagName("head")[0].removeChild(script);delete this.store;this.fireEvent("failure",this,"The Google Maps script failed to load within the provided timeout ("+(this.timeout/1000)+" s).");}});gxp.plugins.GoogleSource.monitor=new(Ext.extend(Ext.util.Observable,{ready:!!(window.google&&google.maps),loading:false,constructor:function(){this.addEvents("ready");},onScriptLoad:function(){var monitor=gxp.plugins.GoogleSource.monitor;if(!monitor.ready){monitor.ready=true;monitor.loading=false;monitor.fireEvent("ready");}}}))();Ext.preg(gxp.plugins.GoogleSource.prototype.ptype,gxp.plugins.GoogleSource);Ext.namespace("gxp");gxp.FilterBuilder=Ext.extend(Ext.Container,{builderTypeNames:["any","all","none","not all"],allowedBuilderTypes:null,preComboText:"Match",postComboText:"of the following:",cls:"gx-filterbuilder",builderType:null,childFilterContainer:null,customizeFilterOnInit:true,allowGroups:true,initComponent:function(){var defConfig={defaultBuilderType:gxp.FilterBuilder.ANY_OF};Ext.applyIf(this,defConfig);if(this.customizeFilterOnInit){this.filter=this.customizeFilter(this.filter);}
this.builderType=this.getBuilderType();this.items=[{xtype:"container",layout:"form",defaults:{anchor:"100%"},hideLabels:true,items:[{xtype:"compositefield",style:"padding-left: 2px",items:[{xtype:"label",style:"padding-top: 0.3em",text:this.preComboText},this.createBuilderTypeCombo(),{xtype:"label",style:"padding-top: 0.3em",text:this.postComboText}]},this.createChildFiltersPanel(),{xtype:"toolbar",items:this.createToolBar()}]}];this.addEvents("change");gxp.FilterBuilder.superclass.initComponent.call(this);},createToolBar:function(){var bar=[{text:"add condition",iconCls:"add",handler:function(){this.addCondition();},scope:this}];if(this.allowGroups){bar.push({text:"add group",iconCls:"add",handler:function(){this.addCondition(true);},scope:this});}
return bar;},getFilter:function(){var filter;if(this.filter){filter=this.filter.clone();if(filter instanceof OpenLayers.Filter.Logical){filter=this.cleanFilter(filter);}}
return filter;},cleanFilter:function(filter){if(filter instanceof OpenLayers.Filter.Logical){if(filter.type!==OpenLayers.Filter.Logical.NOT&&filter.filters.length===1){filter=this.cleanFilter(filter.filters[0]);}else{var child;for(var i=0,len=filter.filters.length;i<len;++i){child=filter.filters[i];if(child instanceof OpenLayers.Filter.Logical){child=this.cleanFilter(child);if(child){filter.filters[i]=child;}else{filter=child;break;}}else if(!child||child.type===null||child.property===null||child.value===null){filter=false;break;}}}}else{if(!filter||filter.type===null||filter.property===null||filter.value===null){filter=false;}}
return filter;},customizeFilter:function(filter){if(!filter){filter=this.wrapFilter(this.createDefaultFilter());}else{filter=this.cleanFilter(filter);switch(filter.type){case OpenLayers.Filter.Logical.AND:case OpenLayers.Filter.Logical.OR:if(!filter.filters||filter.filters.length===0){filter.filters=[this.createDefaultFilter()];}else{var child;for(var i=0,len=filter.filters.length;i<len;++i){child=filter.filters[i];if(child instanceof OpenLayers.Filter.Logical){filter.filters[i]=this.customizeFilter(child);}}}
filter=new OpenLayers.Filter.Logical({type:OpenLayers.Filter.Logical.OR,filters:[filter]});break;case OpenLayers.Filter.Logical.NOT:if(!filter.filters||filter.filters.length===0){filter.filters=[new OpenLayers.Filter.Logical({type:OpenLayers.Filter.Logical.OR,filters:[this.createDefaultFilter()]})];}else{var child=filter.filters[0];if(child instanceof OpenLayers.Filter.Logical){if(child.type!==OpenLayers.Filter.Logical.NOT){var grandchild;for(var i=0,len=child.filters.length;i<len;++i){grandchild=child.filters[i];if(grandchild instanceof OpenLayers.Filter.Logical){child.filters[i]=this.customizeFilter(grandchild);}}}else{if(child.filters&&child.filters.length>0){filter=this.customizeFilter(child.filters[0]);}else{filter=this.wrapFilter(this.createDefaultFilter());}}}else{var type;if(this.defaultBuilderType===gxp.FilterBuilder.NOT_ALL_OF){type=OpenLayers.Filter.Logical.AND;}else{type=OpenLayers.Filter.Logical.OR;}
filter.filters=[new OpenLayers.Filter.Logical({type:type,filters:[child]})];}}
break;default:filter=this.wrapFilter(filter);}}
return filter;},createDefaultFilter:function(){return new OpenLayers.Filter.Comparison();},wrapFilter:function(filter){var type;if(this.defaultBuilderType===gxp.FilterBuilder.ALL_OF){type=OpenLayers.Filter.Logical.AND;}else{type=OpenLayers.Filter.Logical.OR;}
return new OpenLayers.Filter.Logical({type:OpenLayers.Filter.Logical.OR,filters:[new OpenLayers.Filter.Logical({type:type,filters:[filter]})]});},addCondition:function(group){var filter,type;if(group){type="gx_filterbuilder";filter=this.wrapFilter(this.createDefaultFilter());}else{type="gx_filterfield";filter=this.createDefaultFilter();}
var newChild=this.newRow({xtype:type,filter:filter,columnWidth:1,attributes:this.attributes,customizeFilterOnInit:group&&false,listeners:{change:function(){this.fireEvent("change",this);},scope:this}});this.childFilterContainer.add(newChild);this.filter.filters[0].filters.push(filter);this.childFilterContainer.doLayout();},removeCondition:function(item,filter){var parent=this.filter.filters[0].filters;if(parent.length>1){parent.remove(filter);this.childFilterContainer.remove(item,true);}
this.fireEvent("change",this);},createBuilderTypeCombo:function(){var types=this.allowedBuilderTypes||[gxp.FilterBuilder.ANY_OF,gxp.FilterBuilder.ALL_OF,gxp.FilterBuilder.NONE_OF];var numTypes=types.length;var data=new Array(numTypes);var type;for(var i=0;i<numTypes;++i){type=types[i];data[i]=[type,this.builderTypeNames[type]];}
return{xtype:"combo",store:new Ext.data.SimpleStore({data:data,fields:["value","name"]}),value:this.builderType,displayField:"name",valueField:"value",triggerAction:"all",mode:"local",listeners:{select:function(combo,record){this.changeBuilderType(record.get("value"));this.fireEvent("change",this);},scope:this},width:60};},changeBuilderType:function(type){if(type!==this.builderType){this.builderType=type;var child=this.filter.filters[0];switch(type){case gxp.FilterBuilder.ANY_OF:this.filter.type=OpenLayers.Filter.Logical.OR;child.type=OpenLayers.Filter.Logical.OR;break;case gxp.FilterBuilder.ALL_OF:this.filter.type=OpenLayers.Filter.Logical.OR;child.type=OpenLayers.Filter.Logical.AND;break;case gxp.FilterBuilder.NONE_OF:this.filter.type=OpenLayers.Filter.Logical.NOT;child.type=OpenLayers.Filter.Logical.OR;break;case gxp.FilterBuilder.NOT_ALL_OF:this.filter.type=OpenLayers.Filter.Logical.NOT;child.type=OpenLayers.Filter.Logical.AND;break;}}},createChildFiltersPanel:function(){this.childFilterContainer=new Ext.Container();var grandchildren=this.filter.filters[0].filters;var grandchild;for(var i=0,len=grandchildren.length;i<len;++i){grandchild=grandchildren[i];var fieldCfg={xtype:"gx_filterfield",columnWidth:1,filter:grandchild,attributes:this.attributes,listeners:{change:function(){this.fireEvent("change",this);},scope:this}};var containerCfg=Ext.applyIf(grandchild instanceof OpenLayers.Filter.Logical?{xtype:"gx_filterbuilder"}:{xtype:"container",layout:"form",hideLabels:true,items:fieldCfg},fieldCfg);this.childFilterContainer.add(this.newRow(containerCfg));}
return this.childFilterContainer;},newRow:function(filterContainer){var ct=new Ext.Container({layout:"column",items:[{xtype:"container",width:28,style:"padding-left: 2px",items:{xtype:"button",tooltip:"remove condition",iconCls:"delete",handler:function(btn){this.removeCondition(ct,filterContainer.filter);},scope:this}},filterContainer]});return ct;},getBuilderType:function(){var type=this.defaultBuilderType;if(this.filter){var child=this.filter.filters[0];if(this.filter.type===OpenLayers.Filter.Logical.NOT){switch(child.type){case OpenLayers.Filter.Logical.OR:type=gxp.FilterBuilder.NONE_OF;break;case OpenLayers.Filter.Logical.AND:type=gxp.FilterBuilder.NOT_ALL_OF;break;}}else{switch(child.type){case OpenLayers.Filter.Logical.OR:type=gxp.FilterBuilder.ANY_OF;break;case OpenLayers.Filter.Logical.AND:type=gxp.FilterBuilder.ALL_OF;break;}}}
return type;}});gxp.FilterBuilder.ANY_OF=0;gxp.FilterBuilder.ALL_OF=1;gxp.FilterBuilder.NONE_OF=2;gxp.FilterBuilder.NOT_ALL_OF=3;Ext.reg('gx_filterbuilder',gxp.FilterBuilder);Ext.namespace("gxp");gxp.NewSourceWindow=Ext.extend(Ext.Window,{title:"Add New Server...",bodyStyle:"padding: 0px",width:300,closeAction:'hide',error:null,initComponent:function(){this.addEvents("server-added");this.urlTextField=new Ext.form.TextField({fieldLabel:"URL",width:240,msgTarget:"under",validator:OpenLayers.Function.bind(function(){return(this.error==null)?true:this.error;},this)});this.form=new Ext.form.FormPanel({items:[this.urlTextField],border:false,labelWidth:30,bodyStyle:"padding: 5px",autoWidth:true,autoHeight:true});this.bbar=[new Ext.Button({text:"Cancel",handler:function(){this.hide();},scope:this}),new Ext.Toolbar.Fill(),new Ext.Button({text:"Add Server",iconCls:"add",handler:function(){this.error=null;this.urlTextField.validate();this.fireEvent("server-added",this.urlTextField.getValue());},scope:this})];this.items=this.form;gxp.NewSourceWindow.superclass.initComponent.call(this);this.form.on("render",function(){this.loadMask=new Ext.LoadMask(this.form.getEl(),{msg:"Contacting Server..."});},this);this.on("hide",function(){this.error=null;this.urlTextField.validate();this.urlTextField.setValue("");this.loadMask.hide();},this);this.on("server-added",function(url){this.setLoading();var success=function(record){this.hide();};var failure=function(){this.setError(this.sourceLoadFailureMessage);};this.addSource(url,success,failure,this);},this);},setLoading:function(){this.loadMask.show();},setError:function(error){this.loadMask.hide();this.error=error;this.urlTextField.validate();},addSource:function(url,success,failure,scope){}});Ext.namespace("gxp");gxp.EmbedMapDialog=Ext.extend(Ext.Container,{url:null,url:null,publishMessage:"Your map is ready to be published to the web! Simply copy the following HTML to embed the map in your website:",heightLabel:'Height',widthLabel:'Width',mapSizeLabel:'Map Size',miniSizeLabel:'Mini',smallSizeLabel:'Small',premiumSizeLabel:'Premium',largeSizeLabel:'Large',snippetArea:null,heightField:null,widthField:null,initComponent:function(){Ext.apply(this,this.getConfig());gxp.EmbedMapDialog.superclass.initComponent.call(this);},updateSnippet:function(){this.snippetArea.setValue('<iframe height="'+this.heightField.getValue()+'" width="'+this.widthField.getValue()+'" src="'+
gxp.util.getAbsoluteUrl(this.url)+'"></iframe>');this.snippetArea.focus(true,100);},getConfig:function(){this.snippetArea=new Ext.form.TextArea({height:70,selectOnFocus:true,readOnly:true});var numFieldListeners={"change":this.updateSnippet,"specialkey":function(f,e){e.getKey()==e.ENTER&&this.updateSnippet();},scope:this};this.heightField=new Ext.form.NumberField({width:50,value:400,listeners:numFieldListeners});this.widthField=new Ext.form.NumberField({width:50,value:600,listeners:numFieldListeners});var adjustments=new Ext.Container({layout:"column",defaults:{border:false,xtype:"box"},items:[{autoEl:{cls:"gx-field-label",html:this.mapSizeLabel}},new Ext.form.ComboBox({editable:false,width:75,store:new Ext.data.SimpleStore({fields:["name","height","width"],data:[[this.miniSizeLabel,100,100],[this.smallSizeLabel,200,300],[this.largeSizeLabel,400,600],[this.premiumSizeLabel,600,800]]}),triggerAction:'all',displayField:'name',value:this.largeSizeLabel,mode:'local',listeners:{"select":function(combo,record,index){this.widthField.setValue(record.get("width"));this.heightField.setValue(record.get("height"));this.updateSnippet();},scope:this}}),{autoEl:{cls:"gx-field-label",html:this.heightLabel}},this.heightField,{autoEl:{cls:"gx-field-label",html:this.widthLabel}},this.widthField]});return{border:false,defaults:{border:false,cls:"gx-export-section",xtype:"container",layout:"fit"},items:[{xtype:"box",autoEl:{tag:"p",html:this.publishMessage}},{items:[this.snippetArea]},{items:[adjustments]}],listeners:{"afterrender":this.updateSnippet,scope:this}}}});Ext.reg('gx_embedmapdialog',gxp.EmbedMapDialog);Ext.namespace("gxp.form");gxp.form.FontComboBox=Ext.extend(Ext.form.ComboBox,{fonts:["Arial","Courier New","Tahoma","Times New Roman","Verdana"],defaultFont:"Tahoma",allowBlank:false,mode:"local",triggerAction:"all",editable:false,initComponent:function(){var fonts=this.fonts||gxp.form.FontComboBox.prototype.fonts;var defaultFont=this.defaultFont;if(fonts.indexOf(this.defaultFont)===-1){defaultFont=fonts[0];}
var defConfig={displayField:"field1",valueField:"field1",store:fonts,value:defaultFont,tpl:new Ext.XTemplate('<tpl for=".">'+'<div class="x-combo-list-item">'+'<span style="font-family: {field1};">{field1}</span>'+'</div></tpl>')};Ext.applyIf(this,defConfig);gxp.form.FontComboBox.superclass.initComponent.call(this);}});Ext.reg("gx_fontcombo",gxp.form.FontComboBox);Ext.namespace("gxp");gxp.WMSLayerPanel=Ext.extend(Ext.TabPanel,{layerRecord:null,activeTab:0,border:false,imageFormats:/png|gif|jpe?g/i,initComponent:function(){this.addEvents("change");this.items=[this.createAboutPanel(),this.createDisplayPanel()];gxp.WMSLayerPanel.superclass.initComponent.call(this);},createAboutPanel:function(){return{title:"About",style:{"padding":"10px"},defaults:{border:false},items:[{layout:"form",labelWidth:70,items:[{xtype:"textfield",fieldLabel:"Title",anchor:"99%",value:this.layerRecord.get("title"),listeners:{change:function(field){this.layerRecord.set("title",field.getValue());this.layerRecord.commit();this.fireEvent("change");},scope:this}},{xtype:"textfield",fieldLabel:"Name",anchor:"99%",value:this.layerRecord.get("name"),readOnly:true}]},{layout:"form",labelAlign:"top",items:[{xtype:"textarea",fieldLabel:"Description",grow:true,growMax:150,anchor:"99%",value:this.layerRecord.get("abstract"),readOnly:true}]}]};},createDisplayPanel:function(){var record=this.layerRecord;var layer=record.get("layer");var opacity=layer.opacity;if(opacity==null){opacity=1;}
var formats=[];var currentFormat=layer.params["FORMAT"].toLowerCase();Ext.each(this.layerRecord.get("formats"),function(format){if(this.imageFormats.test(format)){formats.push(format.toLowerCase());}},this);if(formats.indexOf(currentFormat)===-1){formats.push(currentFormat);}
var transparent=layer.params["TRANSPARENT"];transparent=(transparent==="true"||transparent===true);return{title:"Display",style:{"padding":"10px"},layout:"form",labelWidth:70,items:[{xtype:"slider",name:"opacity",fieldLabel:"Opacity",value:opacity*100,values:[opacity*100],anchor:"99%",isFormField:true,listeners:{change:function(slider,value){layer.setOpacity(value/100);this.fireEvent("change");},scope:this}},{xtype:"combo",fieldLabel:"Format",store:formats,value:currentFormat,mode:"local",triggerAction:"all",editable:false,anchor:"99%",listeners:{select:function(combo){layer.mergeNewParams({format:combo.getValue()});this.fireEvent("change");},scope:this}},{xtype:"checkbox",fieldLabel:"Transparent",checked:transparent,listeners:{check:function(checkbox,checked){layer.mergeNewParams({transparent:checked?"true":"false"});this.fireEvent("change");},scope:this}}]};}});Ext.reg('gx_wmslayerpanel',gxp.WMSLayerPanel);Ext.namespace("gxp");gxp.StrokeSymbolizer=Ext.extend(Ext.FormPanel,{symbolizer:null,colorManager:null,checkboxToggle:true,defaultColor:null,dashStyles:[["solid","solid"],["4 4","dash"],["2 4","dot"]],border:false,initComponent:function(){if(!this.symbolizer){this.symbolizer={};}
var colorFieldPlugins;if(this.colorManager){colorFieldPlugins=[new this.colorManager];}
this.items=[{xtype:"fieldset",title:"Stroke",autoHeight:true,checkboxToggle:this.checkboxToggle,collapsed:this.checkboxToggle===true&&this.symbolizer["stroke"]===false,hideMode:"offsets",defaults:{width:100},items:[{xtype:"combo",name:"style",fieldLabel:"Style",store:new Ext.data.SimpleStore({data:this.dashStyles,fields:["value","display"]}),displayField:"display",valueField:"value",value:this.getDashArray(this.symbolizer["strokeDashstyle"])||"solid",mode:"local",allowBlank:true,triggerAction:"all",editable:false,listeners:{select:function(combo,record){this.symbolizer["strokeDashstyle"]=record.get("value");this.fireEvent("change",this.symbolizer);},scope:this}},{xtype:"gx_colorfield",name:"color",fieldLabel:"Color",value:this.symbolizer["strokeColor"],defaultBackground:this.defaultColor||OpenLayers.Renderer.defaultSymbolizer["strokeColor"],plugins:colorFieldPlugins,listeners:{valid:function(field){this.symbolizer["strokeColor"]=field.getValue();this.fireEvent("change",this.symbolizer);},scope:this}},{xtype:"textfield",name:"width",fieldLabel:"Width",value:this.symbolizer["strokeWidth"],listeners:{change:function(field,value){this.symbolizer["strokeWidth"]=value;this.fireEvent("change",this.symbolizer);},scope:this}},{xtype:"slider",name:"opacity",fieldLabel:"Opacity",values:[(this.symbolizer["strokeOpacity"]==null)?100:this.symbolizer["strokeOpacity"]*100],isFormField:true,listeners:{changecomplete:function(slider,value){this.symbolizer["strokeOpacity"]=value/100;this.fireEvent("change",this.symbolizer);},scope:this},plugins:[new GeoExt.SliderTip({getText:function(slider){return slider.getValue()+"%";}})]}],listeners:{"collapse":function(){this.symbolizer["stroke"]=false;this.fireEvent("change",this.symbolizer);},"expand":function(){this.symbolizer["stroke"]=true;this.fireEvent("change",this.symbolizer);},scope:this}}];this.addEvents("change");gxp.StrokeSymbolizer.superclass.initComponent.call(this);},getDashArray:function(style){var array;if(style){var parts=style.split(/\s+/);var ratio=parts[0]/parts[1];var array;if(!isNaN(ratio)){array=ratio>=1?"4 4":"2 4"}}
return array;}});Ext.reg('gx_strokesymbolizer',gxp.StrokeSymbolizer);Ext.namespace("gxp");gxp.StylePropertiesDialog=Ext.extend(Ext.Container,{userStyle:null,initComponent:function(){var listeners={"change":function(field,value){this.userStyle[field.name]=value;this.fireEvent("change",this,this.userStyle);},scope:this};var defConfig={layout:"form",items:[{xtype:"fieldset",title:"General",labelWidth:75,defaults:{xtype:"textfield",anchor:"100%",listeners:listeners},items:[{fieldLabel:"Name",name:"name",value:this.userStyle.name,disabled:this.initialConfig.nameEditable===false,maskRe:/[A-Za-z0-9_]/},{fieldLabel:"Title",name:"title",value:this.userStyle.title},{xtype:"textarea",fieldLabel:"Abstract",name:"description",value:this.userStyle.description}]}]};Ext.applyIf(this,defConfig);this.addEvents("change");gxp.StylePropertiesDialog.superclass.initComponent.apply(this,arguments);}});Ext.reg('gx_stylepropertiesdialog',gxp.StylePropertiesDialog);Ext.namespace("gxp");gxp.WMSStylesDialog=Ext.extend(Ext.Container,{layerRecord:null,layerDescription:null,symbolType:null,stylesStore:null,selectedStyle:null,selectedRule:null,editable:true,isRaster:null,modified:false,initComponent:function(){this.addEvents("ready","modified","styleselected","beforesaved","saved");var defConfig={layout:"form",disabled:true,items:[{xtype:"fieldset",title:"Styles",labelWidth:85,style:"margin-bottom: 0;"},{xtype:"toolbar",style:"border-width: 0 1px 1px 1px; margin-bottom: 10px;",items:[{xtype:"button",iconCls:"add",text:"Add",handler:this.addStyle,scope:this},{xtype:"button",iconCls:"delete",text:"Remove",handler:function(){this.stylesStore.remove(this.selectedStyle);},scope:this},{xtype:"button",iconCls:"edit",text:"Edit",handler:this.editStyle,scope:this},{xtype:"button",iconCls:"duplicate",text:"Duplicate",handler:function(){var newStyle=this.selectedStyle.get("userStyle").clone();newStyle.isDefault=false;newStyle.name=gxp.util.uniqueName(newStyle.name+"_copy","_");var store=this.stylesStore;store.add(new store.recordType({"name":newStyle.name,"title":newStyle.title,"abstract":newStyle.description,"userStyle":newStyle}));},scope:this}]}]};Ext.applyIf(this,defConfig);this.createStylesStore();gxp.util.dispatch([this.getStyles,this.describeLayer],function(){this.enable();},this)
gxp.WMSStylesDialog.superclass.initComponent.apply(this,arguments);},addStyle:function(){if(!this._ready){this.on("ready",this.addStyle,this);return;}
var store=this.stylesStore;var newStyle=new OpenLayers.Style(null,{name:gxp.util.uniqueName("New_Style","_"),rules:[this.createRule()]});store.add(new store.recordType({"name":newStyle.name,"userStyle":newStyle}));this.editStyle();},editStyle:function(){var userStyle=this.selectedStyle.get("userStyle");var styleProperties=new Ext.Window({title:"User Style: "+userStyle.name,bodyBorder:false,autoHeight:true,width:300,modal:true,items:{border:false,items:{xtype:"gx_stylepropertiesdialog",userStyle:userStyle.clone(),nameEditable:this.selectedStyle.id!==this.selectedStyle.get("name"),style:"padding: 10px;"}},buttons:[{text:"Cancel",handler:function(){styleProperties.close();}},{text:"Save",handler:function(){var userStyle=this.selectedStyle.set("userStyle",styleProperties.items.get(0).items.get(0).userStyle);styleProperties.close();},scope:this}]});styleProperties.show();},createSLD:function(options){options=options||{};var sld={version:"1.0.0",namedLayers:{}};var layerName=this.layerRecord.get("name");sld.namedLayers[layerName]={name:layerName,userStyles:[]};this.stylesStore.each(function(r){if(!options.userStyles||options.userStyles.indexOf(r.get("name"))!==-1){sld.namedLayers[layerName].userStyles.push(r.get("userStyle"));}});return new OpenLayers.Format.SLD().write(sld);},saveStyles:function(options){this.fireEvent("beforesaved",this,options);},updateStyleRemoveButton:function(){var userStyle=this.selectedStyle&&this.selectedStyle.get("userStyle");this.items.get(1).items.get(1).setDisabled(!userStyle||this.stylesStore.getCount()<=1||userStyle.isDefault===true);},updateRuleRemoveButton:function(){this.items.get(3).items.get(1).setDisabled(!this.selectedRule||(this.isRaster===false&&this.items.get(2).items.get(0).rules.length<=1));},createRule:function(){var symbolizer={};symbolizer[this.isRaster?"Raster":this.symbolType]={};return new OpenLayers.Rule({name:gxp.util.uniqueName("New Rule"),symbolizer:symbolizer});},addRulesFieldSet:function(){var rulesFieldSet=new Ext.form.FieldSet({title:"Rules",autoScroll:true,style:"margin-bottom: 0;"});var rulesToolbar=new Ext.Toolbar({style:"border-width: 0 1px 1px 1px;",items:[{xtype:"button",iconCls:"add",text:"Add",handler:function(){var legend=this.items.get(2).items.get(0);if(this.isRaster){legend.rules.push(this.createPseudoRule());this.savePseudoRules();}else{this.selectedStyle.get("userStyle").addRules([this.createRule()]);legend.update();this.selectedStyle.store.afterEdit(this.selectedStyle);}
this.updateRuleRemoveButton();},scope:this},{xtype:"button",iconCls:"delete",text:"Remove",handler:function(){var rule=this.selectedRule;var legend=this.items.get(2).items.get(0);if(this.isRaster){legend.unselect();legend.rules.remove(rule);this.savePseudoRules();}else{this.selectedStyle.get("userStyle").rules.remove(rule);this.afterRuleChange();}},scope:this,disabled:true},{xtype:"button",iconCls:"edit",text:"Edit",handler:function(){this.isRaster?this.editPseudoRule():this.editRule();},scope:this,disabled:true},{xtype:"button",iconCls:"duplicate",text:"Duplicate",handler:function(){var legend=this.items.get(2).items.get(0);if(this.isRaster){legend.rules.push(this.createPseudoRule({quantity:this.selectedRule.name,label:this.selectedRule.title,color:this.selectedRule.symbolizer.Polygon.fillColor,opacity:this.selectedRule.symbolizer.Polygon.fillOpacity}));this.savePseudoRules();}else{var newRule=this.selectedRule.clone();newRule.name=gxp.util.uniqueName((newRule.title||newRule.name)+" (copy)");delete newRule.title;this.selectedStyle.get("userStyle").addRules([newRule]);legend.update();}
this.updateRuleRemoveButton();},scope:this,disabled:true}]});this.add(rulesFieldSet,rulesToolbar);this.doLayout();return rulesFieldSet;},editRule:function(){var rule=this.selectedRule.clone();wfsUrl=Ext.urlAppend(this.layerDescription.owsURL,Ext.urlEncode({"SERVICE":this.layerDescription.owsType,"REQUEST":"DescribeFeatureType","TYPENAME":this.layerDescription.typeName}));var ruleDlg=new Ext.Window({title:"Style Rule: "+(rule.title||rule.name),width:340,autoHeight:true,modal:true,items:[{xtype:"gx_rulepanel",symbolType:this.symbolType,rule:rule,attributes:new GeoExt.data.AttributeStore({url:wfsUrl}),border:false,defaults:{autoHeight:true,hideMode:"offsets"}}],buttons:[{text:"Cancel",handler:function(){ruleDlg.close();}},{text:"Apply",handler:function(){this.saveRule(rule);origRule=rule;},scope:this},{text:"Save",handler:function(){this.saveRule(rule);ruleDlg.close();},scope:this}]});ruleDlg.show();},editPseudoRule:function(){var rule=this.selectedRule;var pseudoRuleDlg=new Ext.Window({title:"Color Map Entry: "+rule.name,width:340,autoHeight:true,modal:true,items:[{bodyStyle:"padding-top: 5px",border:false,defaults:{autoHeight:true,hideMode:"offsets"},items:[{xtype:"form",border:false,labelAlign:"top",defaults:{border:false},style:{"padding":"0.3em 0 0 1em"},items:[{layout:"column",defaults:{border:false,style:{"padding-right":"1em"}},items:[{layout:"form",width:70,items:[{xtype:"numberfield",anchor:"95%",value:rule.name,fieldLabel:"Quantity",listeners:{change:function(el,value){rule.name=String(value);}}}]},{layout:"form",width:130,items:[{xtype:"textfield",fieldLabel:"Label",anchor:"95%",value:rule.title,listeners:{change:function(el,value){rule.title=value;}}}]},{layout:"form",width:70,items:[new GeoExt.FeatureRenderer({symbolType:this.symbolType,isFormField:true,fieldLabel:"Appearance"})]}]}]},{xtype:"gx_polygonsymbolizer",symbolizer:rule.symbolizer[this.symbolType],bodyStyle:{"padding":"10px"},border:false,labelWidth:70,defaults:{labelWidth:70},listeners:{change:function(symbolizer){var symbolizerSwatch=pseudoRuleDlg.findByType(GeoExt.FeatureRenderer)[0];symbolizerSwatch.setSymbolizers([symbolizer],{draw:symbolizerSwatch.rendered});},scope:this}}]}],buttons:[{text:"Cancel",handler:function(){pseudoRuleDlg.close();}},{text:"Apply",handler:function(){this.savePseudoRules();origRule=rule;},scope:this},{text:"Save",handler:function(){this.savePseudoRules();pseudoRuleDlg.close();},scope:this}]});var strokeSymbolizer=pseudoRuleDlg.findByType("gx_strokesymbolizer")[0];strokeSymbolizer.ownerCt.remove(strokeSymbolizer);pseudoRuleDlg.show();},saveRule:function(rule){var style=this.selectedStyle;var legend=this.items.get(2).items.get(0);var userStyle=style.get("userStyle");var i=userStyle.rules.indexOf(this.selectedRule);userStyle.rules[i]=rule;this.afterRuleChange(rule);},savePseudoRules:function(){var style=this.selectedStyle;var legend=this.items.get(2).items.get(0);var userStyle=style.get("userStyle");var pseudoRules=legend.rules;pseudoRules.sort(function(a,b){var left=parseFloat(a.name);var right=parseFloat(b.name);return left===right?0:(left<right?-1:1);});var symbolizer=userStyle.rules[0].symbolizer["Raster"];symbolizer.colorMap=pseudoRules.length>0?new Array(pseudoRules.length):undefined;var pseudoRule;for(var i=0,len=pseudoRules.length;i<len;++i){pseudoRule=pseudoRules[i];symbolizer.colorMap[i]={quantity:parseFloat(pseudoRule.name),label:pseudoRule.title||undefined,opacity:pseudoRule.symbolizer.Polygon.fillOpacity,color:pseudoRule.symbolizer.Polygon.fillColor||undefined}}
this.afterRuleChange(this.selectedRule);},afterRuleChange:function(rule){var legend=this.items.get(2).items.get(0);this.selectedRule=rule;this.selectedStyle.store.afterEdit(this.selectedStyle);},removeRulesFieldSet:function(){this.remove(this.items.get(3));this.remove(this.items.get(2));this.doLayout();},parseSLD:function(response,options){var data=response.responseXML;if(!data||!data.documentElement){data=new OpenLayers.Format.XML().read(response.responseText);}
var layerParams=this.layerRecord.get("layer").params;var initialStyle=this.initialConfig.styleName||layerParams.STYLES;if(initialStyle){this.selectedStyle=this.stylesStore.getAt(this.stylesStore.findExact("name",initialStyle));}
try{var sld=new OpenLayers.Format.SLD().read(data);var userStyles=sld.namedLayers[layerParams.LAYERS].userStyles;this.stylesStore.removeAll();var userStyle,record;for(var i=0,len=userStyles.length;i<len;++i){userStyle=userStyles[i];record=new this.stylesStore.recordType({"name":userStyle.name,"title":userStyle.title,"abstract":userStyle.description,"userStyle":userStyle});record.phantom=false;this.stylesStore.add(record);if(initialStyle===userStyle.name||userStyle.isDefault===true){this.selectedStyle=record;}}
var rulesFieldSet=this.addRulesFieldSet();var rules=this.selectedStyle.get("userStyle").rules;if(rules[0]&&rules[0].symbolizer["Raster"]){rulesFieldSet.setTitle("Color Map Entries");this.isRaster=true;this.addRasterLegend(rules);}else{rulesFieldSet.setTitle("Rules");this.isRaster=false;this.addVectorLegend(rules);}
this.stylesStoreReady();}
catch(e){this.setupNonEditable();}},setupNonEditable:function(){this.editable=false;this.items.get(1).disable();this.addRulesFieldSet().add(this.createLegendImage());this.doLayout();this.items.get(3).disable();this.stylesStoreReady();},stylesStoreReady:function(){this.stylesStore.commitChanges();this.stylesStore.on({"load":function(){this.addStylesCombo();this.updateStyleRemoveButton();},"add":function(store,records,index){this.updateStyleRemoveButton();var combo=this.items.get(0).items.get(0);this.markModified();combo.fireEvent("select",combo,store.getAt(index),index);combo.setValue(this.selectedStyle.get("name"));},"remove":function(store,record,index){var newIndex=Math.min(index,store.getCount()-1);this.updateStyleRemoveButton();var combo=this.items.get(0).items.get(0);this.markModified();combo.fireEvent("select",combo,store.getAt(newIndex),newIndex);combo.setValue(this.selectedStyle.get("name"));},"update":function(store,record){var userStyle=record.get("userStyle");var data={"name":userStyle.name,"title":userStyle.title,"abstract":userStyle.description};Ext.apply(record.data,data);this.changeStyle(record);this.items.get(0).items.get(0).setValue(userStyle.name);this.markModified();},scope:this});this.stylesStore.fireEvent("load",this.stylesStore,this.stylesStore.getRange())
this._ready=true;this.fireEvent("ready");},markModified:function(){if(this.modified===false){this.modified=true;this.fireEvent("modified");}},createStylesStore:function(callback){var styles=this.layerRecord.get("styles");this.stylesStore=new Ext.data.JsonStore({data:{styles:styles},idProperty:"name",root:"styles",fields:["name","title","abstract","legend","userStyle"]});},getStyles:function(callback){var layer=this.layerRecord.get("layer");if(this.editable===true){Ext.Ajax.request({url:layer.url,params:{"REQUEST":"GetStyles","LAYERS":layer.params.LAYERS},success:this.parseSLD,failure:this.setupNonEditable,callback:callback,scope:this});}else{this.setupNonEditable();}},describeLayer:function(callback){if(this.layerDescription){callback.call(this);return;}
var layer=this.layerRecord.get("layer");Ext.Ajax.request({url:layer.url,params:{"VERSION":layer.params["VERSION"],"REQUEST":"DescribeLayer","LAYERS":[layer.params["LAYERS"]].join(",")},disableCaching:false,success:function(response){var result=new OpenLayers.Format.WMSDescribeLayer().read(response.responseXML&&response.responseXML.documentElement?response.responseXML:response.responseText);this.layerDescription=result[0];},callback:callback,scope:this});},addStylesCombo:function(){var store=this.stylesStore;var combo=new Ext.form.ComboBox(Ext.apply({fieldLabel:"Choose style",store:store,editable:false,displayField:"name",value:this.selectedStyle?this.selectedStyle.get("name"):this.layerRecord.get("layer").params.STYLES||"default",disabled:!store.getCount(),mode:"local",typeAhead:true,triggerAction:"all",forceSelection:true,anchor:"100%",listeners:{"select":function(combo,record){this.changeStyle(record);this.fireEvent("styleselected",this,record.get("name"));},scope:this}},this.initialConfig.stylesComboOptions));this.items.get(0).add(combo);this.doLayout();},createLegendImage:function(){var legend=new GeoExt.WMSLegend({showTitle:false,layerRecord:this.layerRecord,defaults:{listeners:{"render":function(){this.getEl().on({"load":this.doLayout,"error":this.removeRulesFieldSet,scope:this});},scope:this}}});return legend;},changeStyle:function(record){var legend=this.items.get(2).items.get(0);this.selectedStyle=record;this.updateStyleRemoveButton();var styleName=record.get("name");var wmsLegend=record.get("legend");if(wmsLegend){var urlParts=wmsLegend.href.split("?");var params=Ext.urlDecode(urlParts[1]);params.STYLE=styleName;urlParts[1]=Ext.urlEncode(params);wmsLegend.href=urlParts.join("?");}
if(this.editable===true){var userStyle=record.get("userStyle");if(userStyle.isDefault===true){styleName="";}
var ruleIdx=legend.rules.indexOf(this.selectedRule);legend.ownerCt.remove(legend);this.isRaster?this.addRasterLegend(userStyle.rules,{selectedRuleIndex:ruleIdx}):this.addVectorLegend(userStyle.rules);}
var layer=this.layerRecord.get("layer");var oldStyleName=layer.params.STYLES;if(this.initialConfig.applySelectedStyle===true&&oldStyleName!==styleName&&this.modified===false){layer.mergeNewParams({styles:styleName});}},addVectorLegend:function(rules){var typeHierarchy=["Point","Line","Polygon"];var highest;if(this.isRaster){highest=2;}else{var highest=0;for(var symbolType in rules[0].symbolizer){highest=Math.max(highest,typeHierarchy.indexOf(symbolType));}}
this.symbolType=typeHierarchy[highest];var legend=this.items.get(2).add({xtype:"gx_vectorlegend",showTitle:false,rules:rules,symbolType:this.symbolType,selectOnClick:true,enableDD:!this.isRaster,listeners:{"ruleselected":function(cmp,rule){this.selectedRule=rule;var tbItems=this.items.get(3).items;this.updateRuleRemoveButton();tbItems.get(2).enable();tbItems.get(3).enable();},"ruleunselected":function(cmp,rule){this.selectedRule=null;var tbItems=this.items.get(3).items;tbItems.get(1).disable();tbItems.get(2).disable();tbItems.get(3).disable();},"afterlayout":function(){if(this.selectedRule!==null&&legend.selectedRule===null&&legend.rules.indexOf(this.selectedRule)!==-1){legend.selectRuleEntry(this.selectedRule);}},scope:this}});this.doLayout();return legend;},addRasterLegend:function(rules,options){options=options||{};var symbolizer=rules[0].symbolizer["Raster"];var colorMap=symbolizer.colorMap||[];var pseudoRules=[];var colorMapEntry;for(var i=0,len=colorMap.length;i<len;i++){pseudoRules.push(this.createPseudoRule(colorMap[i]));}
this.selectedRule=options.selectedRuleIndex!=null?pseudoRules[options.selectedRuleIndex]:null;return this.addVectorLegend(pseudoRules);},createPseudoRule:function(colorMapEntry){colorMapEntry=Ext.applyIf(colorMapEntry||{},{quantity:0,color:"#000000",opacity:1});return new OpenLayers.Rule({title:colorMapEntry.label,name:String(colorMapEntry.quantity),symbolizer:{"Polygon":{fillColor:colorMapEntry.color,fillOpacity:colorMapEntry.opacity,stroke:false}}});}});Ext.reg('gx_wmsstylesdialog',gxp.WMSStylesDialog);Ext.namespace("gxp");gxp.TextSymbolizer=Ext.extend(Ext.Panel,{fonts:undefined,symbolizer:null,defaultSymbolizer:null,attributes:null,colorManager:null,haloCache:null,border:false,layout:"form",initComponent:function(){if(!this.symbolizer){this.symbolizer={};}
Ext.applyIf(this.symbolizer,this.defaultSymbolizer);this.haloCache={};var defAttributesComboConfig={xtype:"combo",fieldLabel:"Label values",store:this.attributes,editable:false,triggerAction:"all",allowBlank:false,displayField:"name",valueField:"name",value:this.symbolizer.label&&this.symbolizer.label.replace(/^\${(.*)}$/,"$1"),listeners:{select:function(combo,record){this.symbolizer.label="${"+record.get("name")+"}";this.fireEvent("change",this.symbolizer);},scope:this},width:120};this.attributesComboConfig=this.attributesComboConfig||{};Ext.applyIf(this.attributesComboConfig,defAttributesComboConfig);this.labelWidth=80;this.items=[this.attributesComboConfig,{cls:"x-html-editor-tb",style:"background: transparent; border: none; padding: 0 0em 0.5em;",xtype:"toolbar",items:[{xtype:"gx_fontcombo",fonts:this.fonts||undefined,width:110,value:this.symbolizer.fontFamily,listeners:{select:function(combo,record){this.symbolizer.fontFamily=record.get("text");this.fireEvent("change",this.symbolizer);},scope:this}},{xtype:"tbtext",text:"Size: "},{xtype:"textfield",value:this.symbolizer.fontSize,width:30,listeners:{valid:function(field){this.symbolizer.fontSize=Number(field.getValue());this.fireEvent("change",this.symbolizer);},scope:this}},{enableToggle:true,cls:"x-btn-icon",iconCls:"x-edit-bold",pressed:this.symbolizer.fontWeight==="bold",listeners:{toggle:function(button,pressed){this.symbolizer.fontWeight=pressed?"bold":"normal";this.fireEvent("change",this.symbolizer);},scope:this}},{enableToggle:true,cls:"x-btn-icon",iconCls:"x-edit-italic",pressed:this.symbolizer.fontStyle==="italic",listeners:{toggle:function(button,pressed){this.symbolizer.fontStyle=pressed?"italic":"normal";this.fireEvent("change",this.symbolizer);},scope:this}}]},{xtype:"gx_fillsymbolizer",symbolizer:this.symbolizer,defaultColor:OpenLayers.Renderer.defaultSymbolizer["fontColor"],checkboxToggle:false,autoHeight:true,width:213,labelWidth:70,plugins:this.colorManager&&[new this.colorManager()],listeners:{change:function(symbolizer){this.fireEvent("change",this.symbolizer);},scope:this}},{xtype:"fieldset",title:"Halo",checkboxToggle:true,collapsed:!(this.symbolizer.haloRadius||this.symbolizer.haloColor||this.symbolizer.haloOpacity),autoHeight:true,labelWidth:50,items:[{xtype:"textfield",fieldLabel:"Size",anchor:"89%",value:this.symbolizer.haloRadius,listeners:{valid:function(field){this.symbolizer.haloRadius=field.getValue();this.fireEvent("change",this.symbolizer);},scope:this}},{xtype:"gx_fillsymbolizer",symbolizer:{fillColor:this.symbolizer.haloColor,fillOpacity:this.symbolizer.haloOpacity},defaultColor:OpenLayers.Renderer.defaultSymbolizer["haloColor"],checkboxToggle:false,width:190,labelWidth:60,plugins:this.colorManager&&[new this.colorManager()],listeners:{change:function(symbolizer){this.symbolizer.haloColor=symbolizer.fillColor;this.symbolizer.haloOpacity=symbolizer.fillOpacity;this.fireEvent("change",this.symbolizer);},scope:this}}],listeners:{collapse:function(){this.haloCache={haloRadius:this.symbolizer.haloRadius,haloColor:this.symbolizer.haloColor,haloOpacity:this.symbolizer.haloOpacity};delete this.symbolizer.haloRadius;delete this.symbolizer.haloColor;delete this.symbolizer.haloOpacity;this.fireEvent("change",this.symbolizer)},render:function(){this.doLayout();},expand:function(){Ext.apply(this.symbolizer,this.haloCache);this.doLayout();this.fireEvent("change",this.symbolizer);},scope:this}}];this.addEvents("change");gxp.TextSymbolizer.superclass.initComponent.call(this);}});Ext.reg('gx_textsymbolizer',gxp.TextSymbolizer);