/*
 * Copyright (C) 2007-2008  Camptocamp
 *
 * This file is part of MapFish Client
 *
 * MapFish Client 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.
 *
 * MapFish Client 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 MapFish Client.  If not, see <http://www.gnu.org/licenses/>.
 */

/*

  Contains portion of OpenLayers.js:

  OpenLayers.js -- OpenLayers Map Viewer Library

  Copyright 2005-2007 MetaCarta, Inc., released under the Clear BSD license.
  Please see http://svn.openlayers.org/trunk/openlayers/license.txt
  for the full text of the license.

  Includes compressed code under the following licenses:

  (For uncompressed versions of the code used please see the
  OpenLayers SVN repository: <http://openlayers.org/>)

*/
(function(){window.mapfish={singleFile:true};var foolOpenLayers=true;var scripts=document.getElementsByTagName('script');for(var i=0;i<scripts.length;i++){var src=scripts[i].getAttribute('src');if(src&&src.lastIndexOf("OpenLayers.js")>-1){foolOpenLayers=false;break;}}
if(foolOpenLayers){window.OpenLayers._getScriptLocation=function(){return mapfish._getScriptLocation()+"../openlayers/";};}})();(function(){var singleFile=(typeof window.mapfish=="object"&&window.mapfish.singleFile);window.mapfish={_scriptName:"MapFish.js",_getScriptLocation:function(){if(window.gMfLocation){return window.gMfLocation;}
var scriptLocation="";var scriptName=mapfish._scriptName;var scripts=document.getElementsByTagName('script');for(var i=0;i<scripts.length;i++){var src=scripts[i].getAttribute('src');if(src){var index=src.lastIndexOf(scriptName);if((index>-1)&&(index+scriptName.length==src.length)){scriptLocation=src.slice(0,-scriptName.length);break;}}}
return scriptLocation;}};if(!singleFile){var jsfiles=new Array("lang/en.js","core/Color.js","core/GeoStat.js","core/GeoStat/Choropleth.js","core/GeoStat/ProportionalSymbol.js","core/Routing.js","core/Util.js","core/Searcher.js","core/Searcher/Map.js","core/Searcher/Form.js","core/PrintProtocol.js","core/Offline.js","core/Protocol.js","core/Protocol/MapFish.js","core/Protocol/MergeFilterDecorator.js","core/Protocol/TriggerEventDecorator.js","core/Strategy.js","core/Strategy/ProtocolListener.js","widgets/MapComponent.js","widgets/Shortcuts.js","widgets/ComboBoxFactory.js","widgets/recenter/Base.js","widgets/recenter/Coords.js","widgets/data/FeatureReader.js","widgets/data/FeatureStore.js","widgets/data/FeatureStoreMediator.js","widgets/data/SearchStoreMediator.js","widgets/data/LayerStoreMediator.js","widgets/data/GridRowFeatureMediator.js","widgets/geostat/Choropleth.js","widgets/geostat/ProportionalSymbol.js","widgets/tree/LayerTree.js","widgets/tree/LayerTreeExtra.js","widgets/toolbar/Toolbar.js","widgets/toolbar/CheckItem.js","widgets/toolbar/MenuItem.js","widgets/editing/FeatureList.js","widgets/editing/FeatureProperties.js","widgets/editing/FeatureEditingPanel.js","widgets/print/Base.js","widgets/print/BaseWidget.js","widgets/print/SimpleForm.js","widgets/print/MultiPage.js","widgets/print/PrintAction.js");var allScriptTags="";var host=mapfish._getScriptLocation();for(var i=0;i<jsfiles.length;i++){if(/MSIE/.test(navigator.userAgent)||/Safari/.test(navigator.userAgent)){var currentScriptTag="<script src='"+host+jsfiles[i]+"'></script>";allScriptTags+=currentScriptTag;}else{var s=document.createElement("script");s.src=host+jsfiles[i];var h=document.getElementsByTagName("head").length?document.getElementsByTagName("head")[0]:document.body;h.appendChild(s);}}
if(allScriptTags){document.write(allScriptTags);}}})();mapfish.Util={};mapfish.Util.sum=function(array){for(var i=0,sum=0;i<array.length;sum+=array[i++]);return sum;};mapfish.Util.max=function(array){return Math.max.apply({},array);};mapfish.Util.min=function(array){return Math.min.apply({},array);};mapfish.Util.getIconUrl=function(wmsUrl,options){if(!options.layer){OpenLayers.Console.warn('Missing required layer option in mapfish.Util.getIconUrl');return'';}
if(!options.rule){options.rule=options.layer;}
if(wmsUrl.indexOf("?")<0){wmsUrl+="?";}else if(wmsUrl.lastIndexOf('&')!=(wmsUrl.length-1)){if(wmsUrl.indexOf("?")!=(wmsUrl.length-1)){wmsUrl+="&";}}
var options=OpenLayers.Util.extend({layer:"",rule:"",service:"WMS",version:"1.1.1",request:"GetLegendGraphic",format:"image/png",width:16,height:16},options);options=OpenLayers.Util.upperCaseObject(options);return wmsUrl+OpenLayers.Util.getParameterString(options);};mapfish.Util.arrayEqual=function(a,b){if(a==null||b==null)
return false;if(typeof(a)!='object'||typeof(b)!='object')
return false;if(a.length!=b.length)
return false;for(var i=0;i<a.length;i++){if(typeof(a[i])!=typeof(b[i]))
return false;if(a[i]!=b[i])
return false;}
return true;};mapfish.Util.isIE7=function(){var ua=navigator.userAgent.toLowerCase();return ua.indexOf("msie 7")>-1;};mapfish.Util.relativeToAbsoluteURL=function(source){if(/^\w+:/.test(source)||!source){return source;}
var h=location.protocol+"//"+location.host;if(source.indexOf("/")==0){return h+source;}
var p=location.pathname.replace(/\/[^\/]*$/,'');return h+p+"/"+source;};mapfish.Util.fixArray=function(subs){if(subs==''||subs==null){return[];}else if(subs instanceof Array){return subs;}else{return subs.split(',');}};mapfish.Util.formatURL=function(url){var proxy=mapfish.PROXY_HOST;if(proxy&&(url.indexOf("http")==0)){var str=url;var protocol=str.match(/https?:\/\//)[0].split(':')[0];str=str.slice((protocol+'://').length);var path=undefined;var pathSeparatorIndex=str.indexOf('/');if(pathSeparatorIndex!=-1){path=str.substring(pathSeparatorIndex);str=str.slice(0,pathSeparatorIndex);}
var host_port=str.split(":");var host=host_port[0];var port=host_port.length>1?host_port[1]:undefined;url=protocol+','+host;url+=(port==undefined?'':','+port);url+=(path==undefined?'':path);if(proxy.lastIndexOf('/')!=proxy.length-1){url='/'+url;}
url=proxy+url;}
return url;};mapfish.Color=OpenLayers.Class({getColorRgb:function(){}});mapfish.ColorRgb=OpenLayers.Class(mapfish.Color,{redLevel:null,greenLevel:null,blueLevel:null,initialize:function(red,green,blue){this.redLevel=red;this.greenLevel=green;this.blueLevel=blue;},equals:function(color){return color.redLevel==this.redLevel&&color.greenLevel==this.greenLevel&&color.blueLevel==this.blueLevel;},getColorRgb:function(){return this;},getRgbArray:function(){return[this.redLevel,this.greenLevel,this.blueLevel];},hex2rgbArray:function(rgbHexString){if(rgbHexString.charAt(0)=='#'){rgbHexString=rgbHexString.substr(1);}
var rgbArray=[parseInt(rgbHexString.substring(0,2),16),parseInt(rgbHexString.substring(2,4),16),parseInt(rgbHexString.substring(4,6),16)];for(var i=0;i<rgbArray.length;i++){if(rgbArray[i]<0||rgbArray[i]>255){OpenLayers.Console.error("Invalid rgb hex color string: rgbHexString");}}
return rgbArray;},setFromHex:function(rgbHexString){var rgbArray=this.hex2rgbArray(rgbHexString);this.redLevel=rgbArray[0];this.greenLevel=rgbArray[1];this.blueLevel=rgbArray[2];},setFromRgb:function(rgbString){var color=dojo.colorFromString(rgbString);this.redLevel=color.r;this.greenLevel=color.g;this.blueLevel=color.b;},toHexString:function(){var r=this.toHex(this.redLevel);var g=this.toHex(this.greenLevel);var b=this.toHex(this.blueLevel);return'#'+r+g+b;},toHex:function(dec){var hexCharacters="0123456789ABCDEF";if(dec<0||dec>255){var msg="Invalid decimal value for color level";OpenLayers.Console.error(msg);}
var i=Math.floor(dec/16);var j=dec%16;return hexCharacters.charAt(i)+hexCharacters.charAt(j);},CLASS_NAME:"mapfish.ColorRgb"});mapfish.ColorRgb.getColorsArrayByRgbInterpolation=function(firstColor,lastColor,nbColors){var resultColors=[];var colorA=firstColor.getColorRgb();var colorB=lastColor.getColorRgb();var colorAVal=colorA.getRgbArray();var colorBVal=colorB.getRgbArray();if(nbColors==1){return[colorA];}
for(var i=0;i<nbColors;i++){var rgbTriplet=[];rgbTriplet[0]=colorAVal[0]+
i*(colorBVal[0]-colorAVal[0])/(nbColors-1);rgbTriplet[1]=colorAVal[1]+
i*(colorBVal[1]-colorAVal[1])/(nbColors-1);rgbTriplet[2]=colorAVal[2]+
i*(colorBVal[2]-colorAVal[2])/(nbColors-1);resultColors[i]=new mapfish.ColorRgb(parseInt(rgbTriplet[0]),parseInt(rgbTriplet[1]),parseInt(rgbTriplet[2]));}
return resultColors;};mapfish.Protocol={decorateProtocol:function(config){var protocol=config.protocol;for(var key in config){if(key!="protocol"){if(!mapfish.Protocol[key]){OpenLayers.Console.error("mapfish.Protocol."+key+" does not exist");}else{protocol=new mapfish.Protocol[key](OpenLayers.Util.extend({protocol:protocol},config[key]));}}}
return protocol;}};mapfish.Searcher=OpenLayers.Class({initialize:function(){},getFilter:function(){},CLASS_NAME:"mapfish.Searcher"});Ext.namespace('mapfish.widgets');mapfish.widgets.createScaleComboBox=function(config,comboConfig){if(!config.scales){OpenLayers.Console.error("scales is missing in the config");}
var formatScale=function(value){value=String(Math.round(value));var rgx=/(\d+)(\d{3})/;while(rgx.test(value)){value=value.replace(rgx,'$1'+"'"+'$2');}
return'1:'+value;};var store=[];for(var i=0;i<config.scales.length;i++){store.push([config.scales[i],formatScale(config.scales[i])]);}
return new Ext.form.ComboBox(Ext.apply(comboConfig,{store:store}));};Ext.namespace('mapfish.widgets');mapfish.widgets.MapComponent=function(config){Ext.apply(this,config);this.contentEl=this.map.div;var content=Ext.get(this.contentEl);content.setStyle('width','100%');content.setStyle('height','100%');mapfish.widgets.MapComponent.superclass.constructor.call(this);};Ext.extend(mapfish.widgets.MapComponent,Ext.Panel,{map:null,initComponent:function(){mapfish.widgets.MapComponent.superclass.initComponent.apply(this,arguments);this.on("bodyresize",this.map.updateSize,this.map);}});Ext.reg('mapcomponent',mapfish.widgets.MapComponent);Ext.namespace('mapfish.widgets','mapfish.widgets.data');mapfish.widgets.data.FeatureReader=function(meta,recordType){meta=meta||{};mapfish.widgets.data.FeatureReader.superclass.constructor.call(this,meta,recordType||meta.fields);};Ext.extend(mapfish.widgets.data.FeatureReader,Ext.data.DataReader,{totalRecords:null,read:function(response){return this.readRecords(response.features);},readRecords:function(features){var records=[];if(features){var recordType=this.recordType,fields=recordType.prototype.fields;var i,lenI,j,lenJ,feature,values,field,v;for(i=0,lenI=features.length;i<lenI;i++){feature=features[i];values={};if(feature.attributes){for(j=0,lenJ=fields.length;j<lenJ;j++){field=fields.items[j];v=feature.attributes[field.mapping||field.name]||field.defaultValue;v=field.convert(v);values[field.name]=v;}}
values.feature=feature;values.state=feature.state;values.fid=feature.fid;records[records.length]=new recordType(values,feature.id);}}
return{records:records,totalRecords:this.totalRecords!=null?this.totalRecords:records.length};}});Ext.namespace('mapfish.widgets','mapfish.widgets.editing');mapfish.widgets.editing.BaseProperty=function(config){Ext.apply(this,config);};mapfish.widgets.editing.BaseProperty.prototype={label:null,name:null,type:null,showInGrid:false,defaultValue:null,extFieldCfg:null,getRecordType:function(){return{name:this.name,type:this.type};},getExtField:function(){OpenLayers.Console.error("Not implemented");}};mapfish.widgets.editing.SimpleProperty=function(config){mapfish.widgets.editing.SimpleProperty.superclass.constructor.call(this,config);};Ext.extend(mapfish.widgets.editing.SimpleProperty,mapfish.widgets.editing.BaseProperty,{getExtField:function(){return OpenLayers.Util.applyDefaults({xtype:'textfield',fieldLabel:this.label||this.name,name:this.name},this.extFieldCfg);}});mapfish.widgets.editing.StringProperty=function(config){this.type='string';this.defaultValue='';mapfish.widgets.editing.StringProperty.superclass.constructor.call(this,config);};Ext.extend(mapfish.widgets.editing.StringProperty,mapfish.widgets.editing.SimpleProperty);mapfish.widgets.editing.IntegerProperty=function(config){this.type='int';this.defaultValue=0;mapfish.widgets.editing.IntegerProperty.superclass.constructor.call(this,config);};Ext.extend(mapfish.widgets.editing.IntegerProperty,mapfish.widgets.editing.SimpleProperty,{getExtField:function(){return OpenLayers.Util.applyDefaults({xtype:'numberfield',allowDecimals:false,fieldLabel:this.label||this.name,name:this.name},this.extFieldCfg);}});mapfish.widgets.editing.FloatProperty=function(config){this.type='float';this.defaultValue=0;mapfish.widgets.editing.FloatProperty.superclass.constructor.call(this,config);};Ext.extend(mapfish.widgets.editing.FloatProperty,mapfish.widgets.editing.SimpleProperty,{getExtField:function(){return OpenLayers.Util.applyDefaults({xtype:'numberfield',fieldLabel:this.label||this.name,name:this.name},this.extFieldCfg);}});mapfish.widgets.editing.BooleanProperty=function(config){this.type='boolean';this.defaultValue=false;mapfish.widgets.editing.FloatProperty.superclass.constructor.call(this,config);};Ext.extend(mapfish.widgets.editing.BooleanProperty,mapfish.widgets.editing.BaseProperty,{getExtField:function(){return new Ext.form.Checkbox(OpenLayers.Util.applyDefaults({name:this.name,fieldLabel:this.label||this.name},this.extFieldCfg));}});mapfish.widgets.editing.ComboProperty=function(config){this.type='int';mapfish.widgets.editing.ComboProperty.superclass.constructor.call(this,config);};Ext.extend(mapfish.widgets.editing.ComboProperty,mapfish.widgets.editing.BaseProperty,{url:null,getExtField:function(){var store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:this.url,method:'GET',disableCaching:false}),reader:new Ext.data.JsonReader({root:'root'},[{name:'id',type:'int'},'label'])});var cfg=OpenLayers.Util.applyDefaults({fieldLabel:this.label||this.name,typeAhead:true,triggerAction:'all',editable:false,displayField:'label',valueField:'id',name:this.name,store:store,listeners:{render:{fn:function(combo){var params={};params[this.queryParam]='';this.store.load({params:params});}}}},this.extFieldCfg);return new Ext.form.ComboBox(cfg);}});mapfish.widgets.editing.DateProperty=function(config){this.type='string';mapfish.widgets.editing.DateProperty.superclass.constructor.call(this,config);};Ext.extend(mapfish.widgets.editing.DateProperty,mapfish.widgets.editing.BaseProperty,{getExtField:function(){return new Ext.form.DateField(OpenLayers.Util.applyDefaults({fieldLabel:this.label||this.name,name:this.name},this.extFieldCfg));}});Ext.namespace('mapfish.widgets.toolbar');mapfish.widgets.toolbar.CheckItem=function(config){Ext.apply(this,config);mapfish.widgets.toolbar.CheckItem.superclass.constructor.call(this);};Ext.extend(mapfish.widgets.toolbar.CheckItem,Ext.menu.CheckItem,{controlAdded:false,olHandler:null,initComponent:function(){mapfish.widgets.toolbar.CheckItem.superclass.initComponent.call(this);Ext.QuickTips.init();if(this.control){this.scope=this;this.checkHandler=this.handleChecked;}},handleChecked:function(item,checked){if(!this.controlAdded){this.map.addControl(this.control);this.controlAdded=true;}
if(checked){if(!this.olHandler){if(this.control.div){this.control.div.style.display='block';}}else{this.control.deactivate();eval('this.control.'+this.olHandler+'.activate();');}}else{if(!this.olHandler){if(this.control.div){this.control.div.style.display='none';}}else{this.control.deactivate();}}
this.saveState();},getState:function(){return{className:this.control.CLASS_NAME,olHandler:this.olHandler,active:this.checked};},applyState:function(state){if(!state){return false;}
if(this.control.CLASS_NAME==state.className&&this.olHandler==state.olHandler){this.checked=state.active;}else if(this.control.CLASS_NAME==state.className){this.checked=state.active;}
this.handleChecked(null,this.checked);},onRender:function(container,position){mapfish.widgets.toolbar.CheckItem.superclass.onRender.apply(this,arguments);if(this.tooltip){this.el.dom.qtip=this.tooltip;}}});Ext.reg('checkitem',mapfish.widgets.toolbar.CheckItem);Ext.namespace('mapfish.widgets.toolbar');mapfish.widgets.toolbar.MenuItem=function(config){Ext.apply(this,config);mapfish.widgets.toolbar.MenuItem.superclass.constructor.call(this);};Ext.extend(mapfish.widgets.toolbar.MenuItem,Ext.menu.Item,{initComponent:function(){mapfish.widgets.toolbar.MenuItem.superclass.initComponent.call(this);Ext.QuickTips.init();if(this.control){this.scope=this;this.handler=function(){this.control.trigger();};}},onRender:function(container,position){mapfish.widgets.toolbar.MenuItem.superclass.onRender.apply(this,arguments);if(this.tooltip){this.el.dom.qtip=this.tooltip;}}});Ext.reg('menuitem',mapfish.widgets.toolbar.MenuItem);Ext.namespace('mapfish.widgets.toolbar');mapfish.widgets.toolbar.Toolbar=function(config){Ext.apply(this,config);mapfish.widgets.toolbar.Toolbar.superclass.constructor.call(this);};Ext.extend(mapfish.widgets.toolbar.Toolbar,Ext.Toolbar,{controls:null,state:null,configurable:false,_buttons:null,initComponent:function(){mapfish.widgets.toolbar.Toolbar.superclass.initComponent.call(this);this.controls=[];this._buttons=[];this.autoWidth=true;this.autoHeight=true;Ext.QuickTips.init();},addControl:function(control,options){control.visible=true;this.controls.push(control);if(!control.map){this.map.addControl(control);}
var button=new Ext.Toolbar.Button(options);if(!button.tooltip){button.tooltip=control.title;}
button.enableToggle=(control.type!=OpenLayers.Control.TYPE_BUTTON);if(control.isDefault){button.pressed=true;}
if(control.type==OpenLayers.Control.TYPE_BUTTON){button.on("click",control.trigger,control);}else{button.on("toggle",function(button,pressed){this.toggleHandler(control,pressed);},this);control.events.on({"activate":this.onControlActivate,"deactivate":this.onControlDeactivate,scope:this});}
this.add(button);this._buttons.push(button);return button;},removeControl:function(control){var button=this.getButtonForControl(control);button.destroy();OpenLayers.Util.removeItem(this._buttons,button);control.events.un({"activate":this.onControlActivate,"deactivate":this.onControlDeactivate,scope:this});this.map.removeControl(control);OpenLayers.Util.removeItem(this.controls,control);},onControlActivate:function(evt){var control=evt.object;var button=this.getButtonForControl(control);button.toggle(true);},onControlDeactivate:function(evt){var control=evt.object;var button=this.getButtonForControl(control);button.toggle(false);this.checkDefaultControl(button);},getControlByClassName:function(className){if(this.controls){for(var i=0;i<this.controls.length;i++){if(this.controls[i].CLASS_NAME==className){return this.controls[i];}}}
return null;},getButtonForControl:function(control){if(this.controls){for(var i=0;i<this.controls.length;i++){if(this.controls[i]==control){return this._buttons[i];}}}
return null;},activate:function(){if(this.configurable){this.applyState(this.state);var mb=new Ext.Toolbar.Button({'text':'+'});mb.menu=new Ext.menu.Menu();for(var i=0;i<this.controls.length;i++){mb.menu.add({'style':'height:25px','text':'<div style="position: relative; left: 25px; top: -15px;" class="'+this._buttons[i].iconCls+'"/>',checked:this.controls[i].visible,scope:{toolbar:this,button:this._buttons[i],control:this.controls[i]},checkHandler:function(item,checked){if(checked){this.control.visible=true;if(this.control.isDefault){this.control.activate();}
this.button.show();}else{this.control.visible=false;this.control.deactivate();this.button.hide();}
this.toolbar.saveState();}});}
this.add(mb);}else{for(var j=0,c;j<this.controls.length;j++){c=this.controls[j];if(c.isDefault){c.activate();}}}},deactivate:function(){for(var i=0;i<this.controls.length;i++){this.controls[i].deactivate();}},applyState:function(state){if(!state){return false;}
this.state=state;var cs=state.controls;if(cs){for(var i=0,len=cs.length;i<len;i++){var s=cs[i];var c=this.getControlByClassName(s.id);if(c){c.visible=s.visible;if(!c.visible){this._buttons[i].hide();}}}}},getState:function(){var o={controls:[]};for(var i=0,c;i<this.controls.length;i++){c=this.controls[i];o.controls[i]={id:c.CLASS_NAME,visible:c.visible};}
return o;},toggleHandler:function(control,pressed){if(pressed!=control.active){if(pressed){control.activate();}else{control.deactivate();}}},checkDefaultControl:function(button){var group=button.toggleGroup;if(group){var defaultControl=null;for(var j=0;j<this.controls.length;j++){var curButton=this._buttons[j];if(curButton.toggleGroup==group){var control=this.controls[j];if(control.active){return;}else if(control.isDefault){defaultControl=control;}}}
if(defaultControl){defaultControl.activate();}}}});Ext.reg('toolbar',mapfish.widgets.toolbar.Toolbar);mapfish.Searcher.Form=OpenLayers.Class(mapfish.Searcher,{protocol:null,form:null,response:null,initialize:function(options){mapfish.Searcher.prototype.initialize.call(this,options);OpenLayers.Util.extend(this,options);if(!this.form){OpenLayers.Console.error("no form set");return;}
if(!this.protocol){OpenLayers.Console.error("no protocol set");return;}},triggerSearch:function(){this.protocol.abort(this.response);this.response=this.protocol.read({filter:this.getFilter(),searcher:this});},getFilter:function(){var i;var params={};var form=this.form;var inputElements=form.getElementsByTagName('input');for(i=0;i<inputElements.length;i++){currentElement=inputElements.item(i);if(currentElement.disabled==true){continue;}
var inputType=currentElement.getAttribute('type');if(inputType=='radio'||inputType=='checkbox'){if(currentElement.checked){params=OpenLayers.Util.extend(params,this.getParamsFromInput(currentElement));}}else if(inputType=='submit'||inputType=='button'||inputType=='image'){}else{params=OpenLayers.Util.extend(params,this.getParamsFromInput(currentElement));}}
var selectElements=form.getElementsByTagName('select');for(i=0;i<selectElements.length;i++){var currentElement=selectElements.item(i);var paramName=currentElement.getAttribute('name');var optionElements=currentElement.getElementsByTagName('option');for(var j=0;j<optionElements.length;j++){currentElement=optionElements.item(j);if(currentElement.selected){var paramValue=currentElement.getAttribute('value');if(paramValue==null){paramValue='';}
var param={};param[paramName]=paramValue;params=OpenLayers.Util.extend(params,param);}}}
return OpenLayers.Util.extend(this.params,params);},getParamsFromInput:function(htmlElement){var paramValue;var inputType=htmlElement.getAttribute('type');var paramName=htmlElement.getAttribute('name');if(inputType=='text'){paramValue=htmlElement.value;}else{paramValue=htmlElement.getAttribute('value');}
var ret=new Object();if(paramValue!=null){ret[paramName]=paramValue;}else{ret[paramName]=null;}
return ret;},CLASS_NAME:"mapfish.Searcher.Form"});Ext.namespace('mapfish.widgets','mapfish.widgets.data');mapfish.widgets.data.FeatureStoreMediator=function(config){Ext.apply(this,config);if(!this.store){OpenLayers.Console.error("store is missing in the config");}
if(!(this.store.reader instanceof mapfish.widgets.data.FeatureReader)){OpenLayers.Console.error("store does not use a FeatureReader");}};mapfish.widgets.data.FeatureStoreMediator.prototype={store:null,append:true,filter:null,addFeatures:function(features,config){if(!Ext.isArray(features)){features=[features];}
config=OpenLayers.Util.applyDefaults(config,{append:this.append,filter:this.filter});var toAdd=features;if(config.filter){toAdd=[];var feature;for(var i=0,len=features.length;i<len;i++){feature=features[i];if(config.filter(feature)){toAdd.push(feature);}}}
if(!config.append){this.store.removeAll();}
this.store.loadData(toAdd,true);},removeFeatures:function(features){if(!features){this.store.removeAll();}else{if(!Ext.isArray(features)){features=[features];}
for(var i=0,len=features.length;i<len;i++){var feature=features[i];var r=this.store.getById(feature.id);if(r!==undefined){this.store.remove(r);}}}}};OpenLayers.Util.extend(OpenLayers.Lang.en,{'mf.tools':'Tools','mf.layertree':'Layer tree','mf.layertree.opacity':'Opacity','mf.layertree.remove':'Remove','mf.layertree.zoomToExtent':'Zoom to extent','mf.print.mapTitle':'Title','mf.print.comment':'Comments','mf.print.loadingConfig':'Loading the configuration...','mf.print.serverDown':'The print service is not working','mf.print.unableToPrint':"Unable to print",'mf.print.generatingPDF':"Generating PDF...",'mf.print.dpi':'DPI','mf.print.scale':'Scale','mf.print.rotation':'Rotation','mf.print.print':'Print','mf.print.resetPos':'Reset Pos.','mf.print.layout':'Layout','mf.print.addPage':'Add page','mf.print.remove':'Remove page','mf.print.clearAll':'Clear all','mf.print.pdfReady':'Your PDF document is ready.','mf.print.noPage':'No page selected, click on the "Add page" button to add one.','mf.print.print-tooltip':'Generate a PDF with at least the extent shown on the map','mf.error':'Error','mf.warning':'Warning','mf.information':'Information','mf.cancel':'Cancel','mf.recenter.x':'X','mf.recenter.y':'Y','mf.recenter.submit':'Recenter','mf.recenter.missingCoords':'Some coordinates are missing.','mf.recenter.outOfRangeCoords':'Submitted coordinates (${myX}, ${myY}) are not in the map area<br />'+'and must be within following ranges:<br/>'+'${coordX} between ${minCoordX} and ${maxCoordX},<br />'+'${coordY} between ${minCoordY} and ${maxCoordY}','mf.recenter.ws.error':'An error occured when accessing the distant webservice:','mf.recenter.ws.service':'Selected service','mf.control.previous':'Previous view','mf.control.next':'Next view','mf.control.pan':'Pan','mf.control.zoomIn':'Zoom in','mf.control.zoomOut':'Zoom out','mf.control.zoomAll':'Zoom all','mf.editing.comboNoneName':'None','mf.editing.import':'Import','mf.editing.importTooltip':'Import data','mf.editing.commit':'Commit','mf.editing.commitTooltip':'Commit data','mf.editing.delete':'Delete','mf.editing.deleteTooltip':'Delete selected feature','mf.editing.comboLabel':'Layer to edit','mf.editing.confirmMessageTitle':'Edited features','mf.editing.confirmMessage':'There are uncommitted features, are you sure '+'you want to switch layer?','mf.editing.selectModifyFeature':'Modify features','mf.editing.drawPointTitle':'Draw points','mf.editing.drawLineTitle':'Draw lines','mf.editing.drawPolygonTitle':'Draw polygons','mf.editing.formTitle':'Attributes','mf.editing.gridIdHeader':'Id','mf.editing.gridStateHeader':'State','mf.editing.gridTitle':'Edited features','mf.editing.onContextClickMessage':'Edit this feature','mf.editing.onBeforeUnloadMessage':'The feature editing panel has '+'uncommitted features'});mapfish.PrintProtocol=OpenLayers.Class({config:null,spec:null,params:null,hasOverview:false,initialize:function(map,config,overrides,dpi,params){this.config=config;this.spec={pages:[]};overrides=this.fixOverrides(overrides,map);this.addMapParams(overrides,map,dpi);this.addOverviewMapParams(overrides,map,dpi);this.params=params;},getAllInOneUrl:function(){var json=new OpenLayers.Format.JSON();var result=this.config.printURL+"?spec="+
json.write(this.encodeForURL(this.spec));if(this.params){result+="&"+OpenLayers.Util.getParameterString(this.params);}
return result;},createPDF:function(success,popup,failure,context){var specTxt=new OpenLayers.Format.JSON().write(this.spec);OpenLayers.Console.info(specTxt);try{var charset="UTF-8";var params=OpenLayers.Util.applyDefaults({url:this.config.createURL},this.params);OpenLayers.Request.POST({url:this.config.createURL,data:specTxt,params:params,headers:{'CONTENT-TYPE':"application/json; charset="+charset},callback:function(request){if(request.status>=200&&request.status<300){var json=new OpenLayers.Format.JSON();var answer=json.read(request.responseText);if(answer&&answer.getURL){this.openPdf(answer,success,popup,context);}else{failure.call(context,request);}}else{failure.call(context,request);}},scope:this});}catch(err){OpenLayers.Console.warn("Cannot request the print service by AJAX. You must set "+"the 'OpenLayers.ProxyHost' variable. Fallback to GET method");window.open(this.getAllInOneUrl());success.call(context,err);}},openPdf:function(answer,success,popup,context){OpenLayers.Console.info(answer.getURL);if(Ext.isIE||Ext.isOpera){popup.call(context,answer);}else{window.location=answer.getURL;success.call(context);}},fixOverrides:function(overrides,map){overrides=OpenLayers.Util.extend({},overrides);var hasOverview=false;var name;for(var i=0;i<map.layers.length;++i){var olLayer=map.layers[i];name=olLayer.name;if(!overrides[name]){overrides[name]={};}else if(overrides[name].overview){hasOverview=true;}}
if(hasOverview){for(name in overrides){var cur=overrides[name];if(!cur.overview){cur.overview=false;}}}
this.hasOverview=hasOverview;return overrides;},addMapParams:function(overrides,map,dpi){var spec=this.spec;spec.dpi=dpi;spec.units=map.baseLayer.units;spec.srs=map.baseLayer.projection.getCode();var layers=spec.layers=[];this.fillLayers(layers,map.layers,overrides,dpi);},addOverviewMapParams:function(overrides,map,dpi){if(!this.hasOverview){var overviewControls=map.getControlsByClass('OpenLayers.Control.OverviewMap');if(overviewControls.length>0){var spec=this.spec;var layers=spec.overviewLayers=[];this.fillLayers(layers,overviewControls[0].layers,overrides,dpi);}}},fillLayers:function(layers,olLayers,overrides,dpi){for(var i=0;i<olLayers.length;++i){var olLayer=olLayers[i];var layerOverrides=OpenLayers.Util.extend({},overrides[olLayer.name]);OpenLayers.Util.extend(layerOverrides,layerOverrides[dpi]);if((olLayer.getVisibility()&&layerOverrides.visibility!==false)||layerOverrides.visibility===true){var type=olLayer.CLASS_NAME;var handler=mapfish.PrintProtocol.SUPPORTED_TYPES[type];if(handler){var layer=handler.call(this,olLayer);if(layer){this.applyOverrides(layer,layerOverrides);if(olLayer.isBaseLayer){layers.unshift(layer);}else{layers.push(layer);}}}else if(!handler){OpenLayers.Console.error("Don't know how to print a layer of type "+type+" ("+olLayer.name+")");}}}},applyOverrides:function(layer,overrides){for(var key in overrides){if(isNaN(parseInt(key))){var value=overrides[key];if(key=='layers'||key=='styles'){value=mapfish.Util.fixArray(value);}
if(key=="visibility"){}else if(layer[key]!=null||key=="overview"){layer[key]=value;}else{layer.customParams[key]=value;}}}},convertLayer:function(olLayer){var url=olLayer.url;if(url instanceof Array){url=url[0];}
return{baseURL:mapfish.Util.relativeToAbsoluteURL(url),opacity:(olLayer.opacity!=null)?olLayer.opacity:1.0,singleTile:olLayer.singleTile,customParams:{}};},convertWMSLayer:function(olLayer){var layer=OpenLayers.Util.extend(this.convertLayer(olLayer),{type:'WMS',layers:mapfish.Util.fixArray(olLayer.params.LAYERS),format:olLayer.params.FORMAT||olLayer.DEFAULT_PARAMS.format,styles:mapfish.Util.fixArray(olLayer.params.STYLES||olLayer.DEFAULT_PARAMS.styles)});for(var paramName in olLayer.params){var paramNameLow=paramName.toLowerCase();if(olLayer.DEFAULT_PARAMS[paramNameLow]==null&&paramNameLow!='layers'&&paramNameLow!='width'&&paramNameLow!='height'&&paramNameLow!='srs'){layer.customParams[paramName]=olLayer.params[paramName];}}
return layer;},convertMapServerLayer:function(olLayer){var layer=OpenLayers.Util.extend(this.convertLayer(olLayer),{type:'MapServer',layers:mapfish.Util.fixArray(olLayer.params.LAYERS||olLayer.params.layers),format:olLayer.params.FORMAT||olLayer.params.format||olLayer.DEFAULT_PARAMS.format});for(var paramName in olLayer.params){var paramNameLow=paramName.toLowerCase();if(olLayer.DEFAULT_PARAMS[paramNameLow]==null&&paramNameLow!='layers'&&paramNameLow!='format'&&paramNameLow!='width'&&paramNameLow!='height'&&paramNameLow!='srs'){layer.customParams[paramName]=olLayer.params[paramName];}}
return layer;},convertTileCacheLayer:function(olLayer){return OpenLayers.Util.extend(this.convertLayer(olLayer),{type:'TileCache',layer:olLayer.layername,maxExtent:olLayer.maxExtent.toArray(),tileSize:[olLayer.tileSize.w,olLayer.tileSize.h],extension:olLayer.extension,resolutions:olLayer.serverResolutions||olLayer.resolutions});},convertImageLayer:function(olLayer){var url=olLayer.getURL(olLayer.extent);return{type:'Image',baseURL:mapfish.Util.relativeToAbsoluteURL(url),opacity:(olLayer.opacity!=null)?olLayer.opacity:1.0,extent:olLayer.extent.toArray(),pixelSize:[olLayer.size.w,olLayer.size.h],name:olLayer.name};},convertVectorLayer:function(olLayer){var olFeatures=olLayer.features;var features=[];var styles={};var formatter=new OpenLayers.Format.GeoJSON();var nextId=1;for(var i=0;i<olFeatures.length;++i){var feature=olFeatures[i];var style=feature.style||olLayer.style||olLayer.styleMap.createSymbolizer(feature,feature.renderIntent);var styleName;if(style._printId){styleName=style._printId;}else{style._printId=styleName=nextId++;styles[styleName]=style;if(style.externalGraphic){style.externalGraphic=mapfish.Util.relativeToAbsoluteURL(style.externalGraphic);}}
var featureGeoJson=formatter.extract.feature.call(formatter,feature);featureGeoJson.properties=OpenLayers.Util.extend({_style:styleName},featureGeoJson.properties);for(var cur in featureGeoJson.properties){var curVal=featureGeoJson.properties[cur];if(curVal instanceof Object&&!(curVal instanceof String)){delete featureGeoJson.properties[cur];}}
features.push(featureGeoJson);}
for(var key in styles){delete styles[key]._printId;}
var geoJson={"type":"FeatureCollection","features":features};return OpenLayers.Util.extend(this.convertLayer(olLayer),{type:'Vector',styles:styles,styleProperty:'_style',geoJson:geoJson,name:olLayer.name,opacity:(olLayer.opacity!=null)?olLayer.opacity:1.0});},encodeForURL:function(cur){if(cur==null)return null;var type=typeof cur;Ext.type(cur);if(type=='string'){return escape(cur.replace(/[\n]/g,"\\n"));}else if(type=='object'&&cur.constructor==Array){var array=[];for(var i=0;i<cur.length;++i){var val=this.encodeForURL(cur[i]);if(val!=null)array.push(val);}
return array;}else if(type=='object'&&cur.CLASS_NAME&&cur.CLASS_NAME=='OpenLayers.Feature.Vector'){return new OpenLayers.Format.WKT().write(cur);}else if(type=='object'){var hash={};for(var j in cur){var val2=this.encodeForURL(cur[j]);if(val2!=null)hash[j]=val2;}
return hash;}else{return cur;}},CLASS_NAME:"mapfish.PrintProtocol"});mapfish.PrintProtocol.getConfiguration=function(url,success,failure,context,params){try{params=OpenLayers.Util.extend(params,{url:url});OpenLayers.Request.GET({url:url,params:params,callback:function(request){if(request.status>=200&&request.status<300){var json=new OpenLayers.Format.JSON();var answer=json.read(request.responseText);if(answer){success.call(context,answer);}else{failure.call(context,request);}}else{failure.call(context,request);}}});}catch(err){failure.call(context,err);}};mapfish.PrintProtocol.IGNORED=function(){return null;};mapfish.PrintProtocol.SUPPORTED_TYPES={'OpenLayers.Layer':mapfish.PrintProtocol.IGNORED,'OpenLayers.Layer.WMS':mapfish.PrintProtocol.prototype.convertWMSLayer,'OpenLayers.Layer.WMS.Untiled':mapfish.PrintProtocol.prototype.convertWMSLayer,'OpenLayers.Layer.TileCache':mapfish.PrintProtocol.prototype.convertTileCacheLayer,'OpenLayers.Layer.Vector':mapfish.PrintProtocol.prototype.convertVectorLayer,'OpenLayers.Layer.Vector.RootContainer':mapfish.PrintProtocol.prototype.convertVectorLayer,'OpenLayers.Layer.GML':mapfish.PrintProtocol.prototype.convertVectorLayer,'OpenLayers.Layer.PointTrack':mapfish.PrintProtocol.prototype.convertVectorLayer,'OpenLayers.Layer.MapServer':mapfish.PrintProtocol.prototype.convertMapServerLayer,'OpenLayers.Layer.MapServer.Untiled':mapfish.PrintProtocol.prototype.convertMapServerLayer,'OpenLayers.Layer.Image':mapfish.PrintProtocol.prototype.convertImageLayer};Ext.namespace('mapfish.widgets');mapfish.widgets.Shortcuts=function(config){Ext.apply(this,config);mapfish.widgets.Shortcuts.superclass.constructor.call(this);};Ext.extend(mapfish.widgets.Shortcuts,Ext.Container,{combo:null,initComponent:function(){this.combo=new Ext.form.ComboBox({name:'shortcuts',hiddenName:'',store:this.store,valueField:'value',displayField:'text',editable:false,mode:'local',triggerAction:'all',emptyText:'Select a value ...',lazyRender:true,width:150});this.combo.on('select',this.recenter,this);mapfish.widgets.Shortcuts.superclass.initComponent.call(this);},onRender:function(container,position){this.add(this.combo);if(!this.el){this.el=document.createElement('div');}
mapfish.widgets.Shortcuts.superclass.onRender.apply(this,arguments);this.initTemplates();this.applyTemplates();},initTemplates:function(){var ts=this.templates||{};if(!ts.header){ts.header=new Ext.Template('some text before');}
if(!ts.footer){ts.footer=new Ext.Template('some text after');}
this.templates=ts;},applyTemplates:function(){for(var i in this.templates){var template=this.templates[i];var el=document.createElement("div");template.overwrite(el);switch(i){case'header':template.insertBefore(this.el);break;case'footer':template.insertAfter(this.el);break;}}},recenter:function(combo,record){this.map.zoomToExtent(record.get('bbox'));}});Ext.reg('shortcuts',mapfish.widgets.Shortcuts);Ext.namespace('mapfish.widgets');Ext.namespace('mapfish.widgets.print');mapfish.widgets.print.Base={map:null,overrides:null,configUrl:null,config:null,layerTree:null,grids:null,serviceParams:null,mask:null,printing:false,initPrint:function(){if(this.overrides==null){this.overrides={};}
if(this.config==null){mapfish.PrintProtocol.getConfiguration(this.configUrl,this.configReceived,this.configFailed,this,this.serviceParams);return true;}else{this.fillComponent();return false;}},configReceived:function(config){this.config=config;if(this.mask){this.mask.hide();}},configFailed:function(){if(this.mask){this.mask.hide();}},print:function(){if(this.mask){this.mask.msg=OpenLayers.Lang.translate('mf.print.generatingPDF');this.mask.show();}
var printCommand=new mapfish.PrintProtocol(this.map,this.config,this.overrides,this.getCurDpi(),this.serviceParams);if(this.layerTree){this.addLegends(printCommand.spec);}
if(this.grids){this.addGrids(printCommand.spec);}
this.fillSpec(printCommand);this.printing=true;printCommand.createPDF(function(){if(this.mask)this.mask.hide();this.printing=false;},function(request){var onClick='Ext.getCmp(\'printPopup\').destroy();';if(Ext.isOpera){onClick+='window.open(\''+request.getURL+'\', \'_blank\');';}else{onClick+='window.location=\''+request.getURL+'\';';}
var content=OpenLayers.Lang.translate('mf.print.pdfReady')+'<br /><br />'+'<table onclick="'+onClick+'" border="0" cellpadding="0" cellspacing="0" class="x-btn-wrap" align="center">'+'<tbody><tr><td class="x-btn-left"><i>&#160;</i></td>'+'<td class="x-btn-center"><em unselectable="on" class="x-btn x-btn-text">'+Ext.MessageBox.buttonText.ok+'</em></td>'+'<td class="x-btn-right"><i>&#160;</i></td></tr>'+'</tbody></table>';var popup=new Ext.Window({bodyStyle:'padding: 7px;',width:200,id:"printPopup",autoHeight:true,constrain:true,closable:false,title:OpenLayers.Lang.translate('mf.information'),html:content,listeners:{destroy:function(){if(this.mask)this.mask.hide();this.printing=false;},scope:this}});popup.show();},function(request){Ext.Msg.alert(OpenLayers.Lang.translate('mf.error'),OpenLayers.Lang.translate('mf.print.unableToPrint'));if(this.mask)this.mask.hide();this.printing=false;},this);},addGrids:function(spec){var grids=this.grids;if(grids&&typeof grids=="function"){grids=grids();}
if(grids){for(var name in grids){var grid=grids[name];if(!grid){continue;}
spec[name]={};var specData=spec[name].data=[];var specCols=spec[name].columns=[];var columns=grid.getColumnModel();var store=grid.getStore();for(var j=0;j<columns.getColumnCount();++j){if(!columns.isHidden(j)){specCols.push(columns.getDataIndex(j));}}
store.each(function(record){var hash={};for(var key in record.data){var val=record.data[key];if(val!=null){if(val.CLASS_NAME&&val.CLASS_NAME=='OpenLayers.Feature.Vector'){val=new OpenLayers.Format.WKT().write(val);}
hash[key]=val;}}
specData.push(hash);},this);}}},addLegends:function(spec){var legends=spec.legends=[];function addLayer(layerNode){var layerInfo={name:layerNode.attributes.printText||layerNode.attributes.text,icon:mapfish.Util.relativeToAbsoluteURL(layerNode.attributes.icon)};var classesInfo=layerInfo.classes=[];layerNode.eachChild(function(classNode){classesInfo.push({name:classNode.attributes.printText||classNode.attributes.text,icon:mapfish.Util.relativeToAbsoluteURL(classNode.attributes.icon)});},this);legends.push(layerInfo);}
function goDeep(root){root.eachChild(function(node){var attr=node.attributes;if(attr.checked&&attr.layerNames&&!attr.hidden&&attr.printText!==''){addLayer(node);}else{goDeep(node);}},this);}
goDeep(this.layerTree.getRootNode());if(legends.length==0){delete spec.legends;}},fillSpec:null,getCurDpi:null};Ext.namespace('mapfish.widgets');Ext.namespace('mapfish.widgets.print');mapfish.widgets.print.PrintAction=function(config){var actionParams=OpenLayers.Util.extend({iconCls:'mf-print-action',text:OpenLayers.Lang.translate('mf.print.print'),tooltip:OpenLayers.Lang.translate('mf.print.print-tooltip'),handler:this.handler,scope:this},config);mapfish.widgets.print.PrintAction.superclass.constructor.call(this,actionParams);OpenLayers.Util.extend(this,config);this.mask=new Ext.LoadMask(this.map.div,{msg:OpenLayers.Lang.translate('mf.print.loadingConfig')});this.initPrint();};Ext.extend(mapfish.widgets.print.PrintAction,Ext.Action,{handler:function(){if(!this.printing&&this.config){this.print();}},fillSpec:function(printCommand){var singlePage={bbox:this.map.getExtent().toArray()};var params=printCommand.spec;params.pages.push(singlePage);params.layout=this.getCurLayout();},getCurDpi:function(){return this.config.dpis[0].value;},getCurLayout:function(){return this.config.layouts[0].name;}});OpenLayers.Util.applyDefaults(mapfish.widgets.print.PrintAction.prototype,mapfish.widgets.print.Base);Ext.reg('print-action',mapfish.widgets.print.PrintAction);mapfish.Searcher.Map=OpenLayers.Class(mapfish.Searcher,OpenLayers.Control,{protocol:null,mode:null,searchTolerance:3,searchToleranceUnits:'pixels',pointAsBBOX:false,pixelTolerance:2,delay:300,boxDivClassName:"olHandlerBoxZoomBox",displayDefaultPopup:false,onMouseMove:function(evt){},position:null,popupLonLat:null,response:null,projection:null,initialize:function(options){this.mode=mapfish.Searcher.Map.CLICK;mapfish.Searcher.prototype.initialize.call(this,options);OpenLayers.Control.prototype.initialize.call(this,options);if(!this.protocol){OpenLayers.Console.error("no protocol set");return;}
switch(this.mode){case mapfish.Searcher.Map.CLICK:this.handler=new OpenLayers.Handler.Click(this,{click:this.handlePoint},{delay:this.delay,pixelTolerance:this.pixelTolerance});break;case mapfish.Searcher.Map.HOVER:this.handler=new OpenLayers.Handler.Hover(this,{pause:this.handlePoint,move:this.cancelSearch},{delay:this.delay,pixelTolerance:this.pixelTolerance});break;case mapfish.Searcher.Map.BOX:this.handler=new OpenLayers.Handler.Box(this,{done:this.handleBox},{boxDivClassName:this.boxDivClassName});break;case mapfish.Searcher.Map.EXTENT:break;default:OpenLayers.Console.error("unsupported mode");return;}},activate:function(){var activated=OpenLayers.Control.prototype.activate.call(this);if(activated){if(this.mode==mapfish.Searcher.Map.EXTENT){this.map.events.register("moveend",this,this.handleMoveend);}else if(this.displayDefaultPopup&&this.protocol.CLASS_NAME=="mapfish.Protocol.TriggerEventDecorator"){this.protocol.events.on({crudfinished:this.displayPopup,scope:this});}}
return activated;},deactivate:function(){var deactivated=OpenLayers.Control.prototype.deactivate.call(this);if(deactivated){if(this.mode==mapfish.Searcher.Map.EXTENT){this.map.events.unregister("moveend",this,this.handleMoveend);}else if(this.displayDefaultPopup&&this.protocol.CLASS_NAME=="mapfish.Protocol.TriggerEventDecorator"){this.protocol.events.un({crudfinished:this.displayPopup,scope:this});}}
return deactivated;},handlePoint:function(evt){this.position=evt.xy;this.popupLonLat=this.map.getLonLatFromViewPortPx(this.position);this.triggerSearch();},handleBox:function(position){if(position instanceof OpenLayers.Bounds){var minXY=this.map.getLonLatFromPixel(new OpenLayers.Pixel(position.left,position.bottom));var maxXY=this.map.getLonLatFromPixel(new OpenLayers.Pixel(position.right,position.top));this.position=new OpenLayers.Bounds(minXY.lon,minXY.lat,maxXY.lon,maxXY.lat);this.popupLonLat=this.position.getCenterLonLat();}else{this.position=position;this.popupLonLat=this.map.getLonLatFromViewPortPx(this.position);}
this.triggerSearch();},handleMoveend:function(){this.position=this.map.getExtent();this.triggerSearch();},triggerSearch:function(){this.cancelSearch();var filter=this.getFilter();filter=this.isFilter(filter)?{filter:filter}:{params:filter};var options=OpenLayers.Util.extend({searcher:this},filter);this.response=this.protocol.read(options);},cancelSearch:function(evt){this.protocol.abort(this.response);this.response=null;if(this.mode==mapfish.Searcher.Map.HOVER){this.onMouseMove();}},displayPopup:function(response){var features=response.features;if(features&&features.length>0){var k;var html="<table><tr>";for(k in features[0].attributes){html+="<th>"+k+"</th>";}
html+="</tr>";for(var i=0;i<features.length;i++){var attributes=features[i].attributes;html+="<tr>";for(k in attributes){html+="<td>"+attributes[k]+"</td>";}
html+="</tr>";}
html+="</table>";var popup=new OpenLayers.Popup.FramedCloud("mapfish_popup",this.popupLonLat,null,html,null,true);this.map.addPopup(popup,true);}},isFilter:function(obj){return!!obj.CLASS_NAME&&!!obj.CLASS_NAME.match(/^OpenLayers\.Filter/);},reproject:function(obj){if(this.projection&&!this.projection.equals(this.map.getProjectionObject())){obj.transform(this.map.getProjectionObject(),this.projection);}
return obj;},getFilter:function(){var filter=null;if(this.mode==mapfish.Searcher.Map.EXTENT&&!this.position){this.position=this.map.getExtent();}
if(this.position){if(this.position instanceof OpenLayers.Bounds){filter=new OpenLayers.Filter.Spatial({type:OpenLayers.Filter.Spatial.BBOX,value:this.reproject(this.position)});}else{var tolerance=this.searchTolerance;if(tolerance&&this.searchToleranceUnits=="pixels"){tolerance*=this.map.getResolution();}
var ll=this.map.getLonLatFromViewPortPx(this.position);var point=this.reproject(new OpenLayers.Geometry.Point(ll.lon,ll.lat));if(tolerance){if(this.pointAsBBOX){var box=new OpenLayers.Bounds(ll.lon-tolerance/2,ll.lat-tolerance/2,ll.lon+tolerance/2,ll.lat+tolerance/2);filter=new OpenLayers.Filter.Spatial({type:OpenLayers.Filter.Spatial.BBOX,value:this.reproject(box)});}else{filter=new OpenLayers.Filter.Spatial({type:OpenLayers.Filter.Spatial.DWITHIN,value:point,distance:tolerance,distanceUnits:this.map.getUnits()});}}else{filter=new OpenLayers.Filter.Spatial({type:OpenLayers.Filter.Spatial.WITHIN,value:point});}}
this.position=null;}
return filter;},CLASS_NAME:"mapfish.Searcher.Map"});mapfish.Searcher.Map.CLICK="CLICK";mapfish.Searcher.Map.HOVER="HOVER";mapfish.Searcher.Map.BOX="BOX";mapfish.Searcher.Map.EXTENT="EXTENT";Ext.namespace('mapfish.widgets','mapfish.widgets.data');mapfish.widgets.data.LayerStoreMediator=function(config){var store=config.store;delete config.store;Ext.apply(this,config);if(!this.layer){OpenLayers.Console.error("layer is missing in config");}
this.featureStoreMediator=new mapfish.widgets.data.FeatureStoreMediator({store:store});if(this.autoActivate){this.activate();}};mapfish.widgets.data.LayerStoreMediator.prototype={layer:null,filter:null,autoActivate:true,active:false,featureStoreMediator:null,activate:function(){if(!this.active){this.layer.events.on({featuresadded:this.update,featuresremoved:this.update,featuremodified:this.update,scope:this});this.active=true;return true;}
return false;},deactivate:function(){if(this.active){this.layer.events.un({featuresadded:this.update,featuresremoved:this.update,featuremodified:this.update,scope:this});return true;}
return false;},update:function(){this.featureStoreMediator.addFeatures(this.layer.features,{append:false,filter:this.filter});}};Ext.namespace('mapfish.widgets');Ext.namespace('mapfish.widgets.editing');mapfish.widgets.editing.FeatureList=function(config){Ext.apply(this,config,{sm:new Ext.grid.RowSelectionModel({singleSelect:true}),clicksToEdit:1,enableDragDrop:true});mapfish.widgets.editing.FeatureList.superclass.constructor.call(this);};Ext.extend(mapfish.widgets.editing.FeatureList,Ext.grid.EditorGridPanel,{featureType:null,map:null,layer:null,automaticMode:false,autoFocusMode:2,displayNotEdited:true,editGeometryVisual:function(geometry,record,edited){return geometry?(edited?"->":"X"):"";},isDnd:false,colDefs:null,modifyFeature:null,initComponent:function(){if(!this.map&&!this.layer){OpenLayers.Console.error("Mandatory param for FeatureList missing: layer and/or map");}
if(!this.featureType){OpenLayers.Console.error("Mandatory param for FeatureList missing: featureType");}
this.colDefs=this.columns;mapfish.widgets.editing.FeatureList.superclass.initComponent.call(this);this.setGeoColRenderer();if(!this.map){this.map=this.layer.map;}else if(!this.layer){this.layer=new OpenLayers.Layer.Vector("Geometry editing");this.map.addLayer(this.layer);}
var self=this;this.addEvents({geomodifstart:true,geomodif:true,geomodifend:true});var mode=OpenLayers.Control.ModifyFeature.RESHAPE|OpenLayers.Control.ModifyFeature.DRAG;this.modifyFeature=new OpenLayers.Control.ModifyFeature(this.layer,{mode:mode,onModificationStart:function(feature){if(!self.automaticMode){this.activate();}
self.refreshGeometryVisual(feature.data);var record=feature.data;var row=self.getStore().findBy(function(r){return r.id==record.id;});self.getView().focusCell(row,0);self.getSelectionModel().selectRange(row,row);self.fireEvent('geomodifstart',self,record,feature);},onModification:function(feature){self.fireEvent('geomodif',self,feature.data,feature);},onModificationEnd:function(feature){if(!self.automaticMode){this.deactivate();}
if(feature.data){self.refreshGeometryVisual(feature.data);}
if(!self.displayNotEdited){self.layer.removeFeatures(feature);}
self.fireEvent('geomodifend',self,feature.data,feature);}});this.map.addControl(this.modifyFeature);this.getStore().on("remove",function(store,record,index){this.removeGeometries(record);},this);this.getStore().on("clear",function(store){store.each(this.removeGeometries,this);},this);function add(store,records,index){if(self.displayNotEdited){for(var i=0;i<records.length;++i){self.addGeometries(records[i]);}}
return true;}
this.getStore().on("add",add);this.getStore().on("load",function(store,records,options){if(!options.add){if(this.modifyFeature.feature){this.modifyFeature.selectControl.unselect(this.modifyFeature.feature);}
this.clearLayer();}
add(store,records,0);return true;},this);},onRender:function(){mapfish.widgets.editing.FeatureList.superclass.onRender.apply(this,arguments);var self=this;var ddrow=new Ext.dd.DropTarget(this.getView().mainBody,{ddGroup:'GridDD',notifyOver:function(source,e,data){var cindex=source.getDragData(e).rowIndex;if(typeof cindex!="undefined"){return this.dropAllowed;}
return this.dropNotAllowed;},notifyDrop:function(dd,e,data){var dragData=dd.getDragData(e);var destIndex=dragData.rowIndex;if(typeof destIndex!="undefined"){var record=data.selections[0];self.isDnd=true;data.grid.store.remove(record);dragData.grid.store.insert(destIndex,record);self.isDnd=false;return true;}
return false;}});if(this.displayNotEdited){this.drawAllFeatures();}},eachGeoColumn:function(callback){for(var i=0;i<this.colDefs.length;++i){var col=this.colDefs[i];var colDesc=this.featureType.prototype.fields.get(col.dataIndex);if(colDesc.type=='geo'){callback.call(this,col,colDesc,i);}}},setGeoColRenderer:function(){this.eachGeoColumn(function(col,colDesc,colNum){col.renderer=OpenLayers.Function.bind(function(value,cellMetaData,record,rowNum,colNum,store){if(value){var edited=(this.grid.modifyFeature.feature!=null)&&(this.grid.getFeatureByGeometry(value)==this.grid.modifyFeature.feature);return'<div onclick="mapfish.widgets.editing.FeatureList.geometryClickHandler(\''
+this.grid.id+'\', '+record.id+', \''+this.colName+'\');">'
+this.grid.editGeometryVisual(value,record,edited)+'</div>';}else{return this.grid.editGeometryVisual(value,record,false);}},{grid:this,colName:colDesc.name});});},drawAllFeatures:function(){this.clearLayer();if(this.displayNotEdited){var features=[];this.eachGeoColumn(function(col,colDesc,colNum){this.store.each(function(record){var geometry=record.get(colDesc.name);if(geometry&&!this.getFeatureByGeometry(geometry)){var vector=new OpenLayers.Feature.Vector(geometry,record);features.push(vector);}},this);});this.layer.addFeatures(features);}},addGeometries:function(record){var layer=this.layer;this.eachGeoColumn(function(col,colDesc,colNum){var geometry=record.get(colDesc.name);if(geometry&&!this.getFeatureByGeometry(geometry)){var vector=new OpenLayers.Feature.Vector(geometry,record);layer.addFeatures(vector);}});},removeGeometries:function(record){this.eachGeoColumn(function(col,colDesc,colNum){var geometry=record.get(colDesc.name);if(geometry){var feature=this.getFeatureByGeometry(geometry);if(feature){if(feature==this.modifyFeature.feature){feature.data=null;this.modifyFeature.selectControl.unselect(feature);}
this.layer.removeFeatures([feature]);feature.destroy();}}});return true;},getFeatureByGeometry:function(geometry){var features=this.layer.features;for(var i=0;i<features.length;++i){var cur=features[i];if(cur.geometry==geometry){return cur;}}
return null;},editFirstGeometry:function(record){if(this.automaticMode){return;}
var colName;for(var i=0;i<this.colDefs.length;++i){var col=this.colDefs[i];var colDesc=this.featureType.prototype.fields.get(col.dataIndex);if(colDesc.type=='geo'){colName=colDesc.name;break;}}
this.editGeometry(record,colName,false);},editGeometry:function(record,colName,focus){var geometry=record.get(colName);if(!geometry){return;}
var feature=this.getFeatureByGeometry(geometry);if(!feature&&!this.displayNotEdited){feature=new OpenLayers.Feature.Vector(geometry,record);this.layer.addFeatures(feature);}
if(feature){var previousFeature=this.modifyFeature.feature;if(previousFeature){this.modifyFeature.selectControl.unselect(this.modifyFeature.feature);}
if(previousFeature!=feature){this.modifyFeature.selectControl.select(feature);if(focus){this.manageAutoFocus(geometry);}}}else{OpenLayers.Console.error("BUG: cannot find vector feature for: "+record);}},manageAutoFocus:function(geometry){if(this.autoFocusMode==1){this.map.zoomToExtent(geometry.getBounds());}else if(this.autoFocusMode==2){var extent=this.map.getExtent();extent.extend(geometry.getBounds());var margin=extent.getWidth()*0.02;extent.left+=margin;extent.right-=margin;extent.top-=margin;extent.bottom+=margin;this.map.zoomToExtent(extent);}},refreshGeometryVisual:function(record){this.getView().refreshRow(record);},setAutomaticMode:function(automatic){if(automatic==this.automaticMode){return;}
this.automaticMode=automatic;if(this.modifyFeature.feature){this.modifyFeature.selectControl.unselect(this.modifyFeature.feature);}
if(automatic){this.modifyFeature.activate();}else{this.modifyFeature.deactivate();}},setDisplayNotEdited:function(value){if(value==this.displayNotEdited){return;}
this.displayNotEdited=value;if(value){this.drawAllFeatures();}else{this.clearLayer();this.setAutomaticMode(false);}},clearLayer:function(){var toRemove=[];var layer=this.layer;var edited=this.modifyFeature.feature;for(var i=0;i<layer.features.length;++i){var cur=layer.features[i];if(cur!=edited&&cur.data&&cur.data.endEdit){toRemove.push(cur);}}
layer.removeFeatures(toRemove);}});Ext.reg('featurelist',mapfish.widgets.editing.FeatureList);mapfish.widgets.editing.FeatureList.geometryClickHandler=function(gridId,recordId,colName){var grid=Ext.getCmp(gridId);if(grid){var record=grid.store.getById(recordId);if(record){grid.editGeometry(record,colName,true);}else{OpenLayers.Console.error("Cannot find record with id="+recordId);}}else{OpenLayers.Console.error("Cannot find grid with id="+gridId);}};mapfish.widgets.editing.FeatureList.createRecord=function(cols){for(var i=0;i<cols.length;++i){var col=cols[i];if(col.type=='geo'){if(!col.convert){col.convert=function(v){return v;};}
if(!col.sortType){col.sortType=Ext.data.SortTypes.none();}}}
return Ext.data.Record.create.apply(null,arguments);};Ext.namespace('mapfish.widgets','mapfish.widgets.recenter');mapfish.widgets.recenter.Base=function(config){Ext.apply(this,config);mapfish.widgets.recenter.Base.superclass.constructor.call(this);};Ext.extend(mapfish.widgets.recenter.Base,Ext.FormPanel,{scales:null,showCenter:null,defaultZoom:null,vectorLayer:null,expandedOnce:false,initComponent:function(){mapfish.widgets.recenter.Base.superclass.initComponent.apply(this,arguments);this.on("destroy",this.destroyResources,this);this.on("collapse",this.destroyResources,this);this.on("deactivate",this.destroyResources,this);this.on("disable",this.destroyResources,this);},render:function(){if(!this.ownerCt||!this.ownerCt.initialConfig.layout||this.ownerCt.initialConfig.layout.toLowerCase!='accordion'){this.addItems();}
mapfish.widgets.recenter.Base.superclass.render.apply(this,arguments);},expand:function(){mapfish.widgets.recenter.Base.superclass.expand.apply(this,arguments);if(!this.expandedOnce){this.addItems();this.expandedOnce=true;this.doLayout();}},addItems:function(){OpenLayers.Console.warn("must be implemented by subclasses");},removeAll:function(){if(this.items){this.items.each(this.remove,this);this.form.items.clear();}},addRecenterButton:function(){this.addButton({text:OpenLayers.i18n('mf.recenter.submit'),handler:this.recenter,scope:this});},addScaleCombo:function(){this.add(mapfish.widgets.createScaleComboBox({scales:this.scales},{fieldLabel:OpenLayers.i18n('mf.print.scale'),typeAhead:false,value:this.scales[this.defaultZoom]||this.scales[0],mode:'local',id:'scale_'+this.getId(),name:"scale",hiddenName:'scaleValue',editable:false,triggerAction:'all'}));},recenter:function(){OpenLayers.Console.warn("must be implemented by subclasses");},recenterOnCoords:function(x,y,zoom){if(typeof(zoom)=='undefined'){zoom=(typeof(this.defaultZoom)!='undefined')?this.defaultZoom:this.map.getZoom()}
if(this.showCenter){this.showCenterMark(x,y);}
this.map.setCenter(new OpenLayers.LonLat(x,y),zoom);},recenterOnBbox:function(bbox){if(this.showCenter){var lonlat=bbox.getCenterLonLat();this.showCenterMark(lonlat.lon,lonlat.lat);}
this.map.zoomToExtent(bbox);},recenterOnGeometry:function(geometry){if(geometry.CLASS_NAME=="OpenLayers.Geometry.Point"){this.recenterOnCoords(geometry.x,geometry.y);}else{this.recenterOnBbox(geometry.getBounds());}},showCenterMark:function(x,y){this.prepareVectorLayer();var features=[new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(x,y),{type:this.symbol||'cross'})];this.vectorLayer.addFeatures(features);},prepareVectorLayer:function(){if(this.vectorLayer){this.vectorLayer.destroyFeatures();}else{var styles=new OpenLayers.StyleMap({"default":OpenLayers.Util.extend({graphicName:"${type}",pointRadius:10,fillColor:"red",fillOpacity:1},this.centerMarkStyles)});this.vectorLayer=new OpenLayers.Layer.Vector("Center Symbol",{styleMap:styles,alwaysInRange:true});this.map.addLayer(this.vectorLayer);}},showError:function(msg,title){title=title||OpenLayers.i18n('mf.error');Ext.Msg.alert(title,msg);},destroyLayer:function(){var layer=this.vectorLayer;if(layer){layer.destroy();this.vectorLayer=null;}},destroyResources:function(){this.destroyLayer();}});Ext.namespace('mapfish.widgets');mapfish.widgets.RadioTreeNodeUI=Ext.extend(Ext.tree.TreeNodeUI,{renderElements:function(n,a,targetNode,bulkRender){this.indentMarkup=n.parentNode?n.parentNode.ui.getChildIndent():'';var cb=typeof a.checked=='boolean';var radioGrp=n.attributes.radioGrp||"radioGrp";var href=a.href?a.href:Ext.isGecko?"":"#";var buf=['<li class="x-tree-node"><div ext:tree-node-id="',n.id,'" class="x-tree-node-el x-tree-node-leaf x-unselectable ',a.cls,'" unselectable="on">','<span class="x-tree-node-indent">',this.indentMarkup,"</span>",'<img src="',this.emptyIcon,'" class="x-tree-ec-icon x-tree-elbow" />','<img src="',a.icon||this.emptyIcon,'" class="x-tree-node-icon',(a.icon?" x-tree-node-inline-icon":""),(a.iconCls?" "+a.iconCls:""),'" unselectable="on" />',cb?('<input class="x-tree-node-cb" type="radio" id="'+n.id+'" name="'+radioGrp+'" '+(a.checked?'checked="checked" />':'/>')):'','<a hidefocus="on" class="x-tree-node-anchor" href="',href,'" tabIndex="1" ',a.hrefTarget?' target="'+a.hrefTarget+'"':"",'><span unselectable="on">',n.text,"</span></a></div>",'<ul class="x-tree-node-ct" style="display:none;"></ul>',"</li>"].join('');var nel;if(bulkRender!==true&&n.nextSibling&&(nel=n.nextSibling.ui.getEl())){this.wrap=Ext.DomHelper.insertHtml("beforeBegin",nel,buf);}else{this.wrap=Ext.DomHelper.insertHtml("beforeEnd",targetNode,buf);}
this.elNode=this.wrap.childNodes[0];this.ctNode=this.wrap.childNodes[1];var cs=this.elNode.childNodes;this.indentNode=cs[0];this.ecNode=cs[1];this.iconNode=cs[2];var index=3;if(cb){this.checkbox=cs[3];index++;}
this.anchor=cs[index];this.textNode=cs[index].firstChild;},_unused_renderElements:function(n,a,targetNode,bulkRender){mapfish.widgets.RadioTreeNodeUI.superclass.renderElements.apply(this,arguments);var cbNode=Ext.DomQuery.selectNode(".x-tree-node-cb",this.elNode);var radioGrp=n.attributes.radioGrp||"radioGrp";cbNode.setAttribute("type","radio");cbNode.setAttribute("id",n.id);cbNode.setAttribute("name",radioGrp);},onRadioChange:function(){var checked=this.checkbox.checked;this.node.attributes.checked=checked;this.fireEvent('radiochange',this.node,checked);}});mapfish.widgets.LayerTreeEventModel=Ext.extend(Ext.tree.TreeEventModel,{delegateClick:function(e,t){if(!this.beforeEvent(e)){return;}
if(e.getTarget('input[type=checkbox]',1)){this.onCheckboxClick(e,this.getNode(e));}
else if(e.getTarget('input[type=radio]',1)){this.onRadioClick(e,this.getNode(e));}
else if(e.getTarget('.x-tree-ec-icon',1)){this.onIconClick(e,this.getNode(e));}
else if(this.getNodeTarget(e)){this.onNodeClick(e,this.getNode(e));}},onRadioClick:function(e,node){if(!node.ui.onRadioChange){OpenLayers.Console.error("Invalid TreeNodeUI Class, no "+"onRadioChange is available");return;}
node.ui.onRadioChange(e);}});mapfish.widgets.LayerTree=function(config){Ext.apply(this,config);mapfish.widgets.LayerTree.superclass.constructor.call(this);};Ext.extend(mapfish.widgets.LayerTree,Ext.tree.TreePanel,{separator:":",model:null,showWmsLegend:false,rootVisible:false,animate:true,autoScroll:true,loader:new Ext.tree.TreeLoader({}),enableDD:false,containerScroll:true,ascending:true,_automaticModel:true,layerNameToLayer:{},baseLayerNames:[],layersWithSublayers:{},layerToNodeIds:{},nodeIdToNode:{},nodeIdToLayers:{},hasCheckbox:function(node){return typeof(node.attributes.checked)=="boolean";},setNodeChecked:function(nodeOrId,checked,fireEvent){var node=(nodeOrId instanceof Ext.data.Node)?nodeOrId:this.getNodeById(nodeOrId);if(!node||!this.hasCheckbox(node)){return;}
if(checked===undefined){checked=!node.attributes.checked;}
node.attributes.checked=checked;if(node.ui&&node.ui.checkbox){node.ui.checkbox.checked=checked;}
if(fireEvent||(fireEvent===undefined)){node.fireEvent('checkchange',node,checked);}},_updateCachedObjects:function(){if(!this.map){OpenLayers.Console.error("map Object needs to be available when "+"calling _updateCachedObjects");return;}
this.layerNameToLayer={};this.baseLayerNames=[];this.layersWithSublayers={};this.layerToNodeIds={};this.nodeIdToNode={};this.nodeIdToLayers={};Ext.each(this.map.layers,function(layer){var name=layer.name;this.layerNameToLayer[name]=layer;if(layer.isBaseLayer)
this.baseLayerNames.push(name);},this);this.getRootNode().cascade(function(node){if(!node.attributes.layerNames)
return true;var layerNames=node.attributes.layerNames;for(var i=0;i<layerNames.length;i++){var name=layerNames[i];if(name.indexOf(this.separator)!=-1){var name=name.split(this.separator)[0];this.layersWithSublayers[name]=true;}
if(!this.nodeIdToLayers[node.id])
this.nodeIdToLayers[node.id]=[];this.nodeIdToLayers[node.id].push(this.layerNameToLayer[name]);}},this);this.getRootNode().cascade(function(node){var checked=node.attributes.checked;var layerNames=node.attributes.layerNames;if(!layerNames)
return;for(var i=0;i<layerNames.length;i++){var layerName=layerNames[i];if(!layerName)
continue;if(!this.layerToNodeIds[layerName])
this.layerToNodeIds[layerName]=[];this.layerToNodeIds[layerName].push(node.id);this.nodeIdToNode[node.id]=node;}},this);},_updateCheckboxAncestors:function(){var unvisitedNodeIds={};var tree=this;function updateNodeCheckbox(node){if(!tree.hasCheckbox(node)){throw new Error(arguments.callee.name+" should only be called on checkbox nodes");}
var checkboxChildren=[];node.eachChild(function(child){if(tree.hasCheckbox(child))
checkboxChildren.push(child);},this);if(checkboxChildren.length==0){return node.attributes.checked;}
var allChecked=true;Ext.each(checkboxChildren,function(child){if(!updateNodeCheckbox(child)){allChecked=false;return false;}},this);tree.setNodeChecked(node,allChecked,false);delete unvisitedNodeIds[node.id];return allChecked;}
var checkboxNodes=[];this.getRootNode().cascade(function(node){if(this.hasCheckbox(node)){checkboxNodes.push(node);unvisitedNodeIds[node.id]=true;}},this);var node;while(node=checkboxNodes.shift()){if(unvisitedNodeIds[node.id])
updateNodeCheckbox(node);}},_handleModelChange:function LT__handleModelChange(clickedNode,checked){if(clickedNode){clickedNode.cascade(function(node){this.setNodeChecked(node,checked,false);},this);}
this._updateCheckboxAncestors();if(!this.map){return;}
this._updateCachedObjects();function getVisibilityFromMap(){var layerVisibility={};Ext.each(this.map.layers,function(layer){var name=layer.name;layerVisibility[name]=layer.visibility;if(!(layer instanceof OpenLayers.Layer.WMS)&&!(layer instanceof OpenLayers.Layer.WMS.Untiled)&&!(layer instanceof OpenLayers.Layer.MapServer))
{return;}
if(!this.layersWithSublayers[layer.name])
return;if(layer.isBaseLayer){OpenLayers.Console.error("Using sublayers on a base layer "+"is not supported (base layer is "+
name+")");}
if(!layer._origLayers){layer._origLayers=layer.params.LAYERS||layer.params.layers;}
var sublayers=layer._origLayers;if(sublayers instanceof Array){for(var j=0;j<sublayers.length;j++){var sublayer=sublayers[j];layerVisibility[name+this.separator+sublayer]=layer.visibility;}}},this);return layerVisibility;}
function updateVisibilityFromTree(layerVisibility){var forcedVisibility={};this.getRootNode().cascade(function(node){var checked=node.attributes.checked;var layerNames=node.attributes.layerNames;var radioGrp=null;if(!layerNames)
return;for(var i=0;i<layerNames.length;i++){var layerName=layerNames[i];if(!layerName)
continue;if(layerVisibility[layerName]==undefined)
OpenLayers.Console.error("Invalid layer: ",layerName);if(node.attributes.radio){radioGrp=node.attributes.radioGrp||"radioGrp";if(!radioButton[radioGrp])
radioButton[radioGrp]={};radioButton[radioGrp][layerName]=checked;}
if(forcedVisibility[layerName])
continue;if(node==clickedNode){if(this.baseLayerNames.indexOf(layerName)!=-1){clickedBaseLayer=layerName;}
if(radioGrp){clickedRadioButton[0]=radioGrp;clickedRadioButton[1]=layerName;}
forcedVisibility[layerName]=true;}
layerVisibility[layerName]=checked;}},this);return layerVisibility;}
function applyBaseLayerRestriction(layerVisibility,clickedBaseLayer,currentBaseLayerName){var numBaseLayer=0;for(var i=0;i<this.baseLayerNames.length;i++){if(layerVisibility[this.baseLayerNames[i]])
numBaseLayer++;}
if(numBaseLayer==1)
return layerVisibility;for(var i=0;i<this.baseLayerNames.length;i++){layerVisibility[this.baseLayerNames[i]]=false;}
if(clickedBaseLayer){layerVisibility[clickedBaseLayer]=true;return layerVisibility;}
if(!currentBaseLayerName)
return layerVisibility;layerVisibility[currentBaseLayerName]=true;return layerVisibility;}
function applyRadioButtonRestriction(layerVisibility,clickedRadioButton,radioButton){for(var radioGrp in radioButton){for(var layerName in radioButton[radioGrp]){if(clickedRadioButton[0]==radioGrp){layerVisibility[layerName]=layerName==clickedRadioButton[1];}else{layerVisibility[layerName]=radioButton[radioGrp][layerName];}}}
return layerVisibility;}
function updateTreeFromVisibility(layerVisibility){for(var layerName in layerVisibility){var nodeIds=this.layerToNodeIds[layerName];if(!nodeIds)
continue;for(var i=0;i<nodeIds.length;i++){var node=this.nodeIdToNode[nodeIds[i]];if(!node)
continue;var layerNames=node.attributes.layerNames;if(!layerNames){OpenLayers.Console.error("unexpected state");continue;}
var allChecked=true;for(var j=0;j<layerNames.length;j++){var layerName=layerNames[j];if(!layerName)
continue;if(!layerVisibility[layerName]){allChecked=false;break;}}
this.setNodeChecked(node,allChecked,false);}}}
function updateMapFromVisibility(layerVisibility){var wmsLayers={};for(var layerName in layerVisibility){var visible=layerVisibility[layerName];var splitName=layerName.split(this.separator);if(splitName.length!=2)
continue;delete layerVisibility[layerName];layerName=splitName[0];var sublayerName=splitName[1];if(!wmsLayers[layerName]){wmsLayers[layerName]=[];}
if(visible){wmsLayers[layerName].push(sublayerName);}}
for(layerName in wmsLayers){if(layerVisibility[layerName]!==undefined)
delete layerVisibility[layerName];}
for(var layerName in layerVisibility){var layer=this.layerNameToLayer[layerName];if(!layer){OpenLayers.Console.error("Non existing layer name",layerName);continue;}
if(this.baseLayerNames.indexOf(layerName)!=-1){if(layerVisibility[layerName]){this.map.setBaseLayer(layer);}}else{layer.setVisibility(layerVisibility[layerName]);}}
for(var layerName in wmsLayers){var layer=this.layerNameToLayer[layerName];var sublayers=wmsLayers[layerName];if(layer.isBaseLayer){OpenLayers.Console.error("base layer for sublayer "+"are not supported");return;}
if(sublayers.length==0){layer.setVisibility(false,true);}else{if(!this.enableDD){if(!layer._origLayers){OpenLayers.Console.error("Assertion failure");}
var origLayers=layer._origLayers;var orderedLayers=[];for(var i=0;i<origLayers.length;i++){var l=origLayers[i];if(sublayers.indexOf(l)!=-1)
orderedLayers.push(l);}
sublayers=orderedLayers;}
var layerParamName=layer.params.LAYERS?"LAYERS":"layers";if(!mapfish.Util.arrayEqual(layer.params[layerParamName],sublayers)){layer.params[layerParamName]=sublayers;layer.redraw();}
layer.setVisibility(true,true);}}}
var currentBaseLayerName;if(this.map.baseLayer)
currentBaseLayerName=this.map.baseLayer.name;var clickedBaseLayer;var radioButton={};var clickedRadioButton=[];var layerVisibility=getVisibilityFromMap.call(this);layerVisibility=updateVisibilityFromTree.call(this,layerVisibility);applyBaseLayerRestriction.call(this,layerVisibility,clickedBaseLayer,currentBaseLayerName);applyRadioButtonRestriction.call(this,layerVisibility,clickedRadioButton,radioButton);updateTreeFromVisibility.call(this,layerVisibility);updateMapFromVisibility.call(this,layerVisibility);},_extractOLModel:function LT__extractOLModel(){var layers=[];var layersArray=this.map.layers.slice();if(!this.ascending){layersArray.reverse();}
for(var i=0;i<layersArray.length;i++){var l=layersArray[i];var wmsChildren=[];if(l instanceof OpenLayers.Layer.WMS||l instanceof OpenLayers.Layer.WMS.Untiled||l instanceof OpenLayers.Layer.MapServer){var sublayers=l.params.LAYERS||l.params.layers;if(sublayers instanceof Array){for(var j=0;j<sublayers.length;j++){var w=sublayers[j];var iconUrl;if(this.showWmsLegend){iconUrl=mapfish.Util.getIconUrl(l.url,{layer:w});}
var wmsChild={text:w,checked:l.getVisibility(),icon:iconUrl,layerName:l.name+this.separator+w,children:[],cls:"cf-wms-node"};if(this.ascending){wmsChildren.push(wmsChild);}else{wmsChildren.unshift(wmsChild);}}}}
var info={text:l.name,checked:l.getVisibility(),layerName:(wmsChildren.length>0?null:l.name),children:wmsChildren};if(!l.displayInLayerSwitcher){info.uiProvider=function(){};info.hidden=true;info.uiProvider.prototype={render:function(){},renderIndent:function(){},updateExpandIcon:function(){}};}
layers.push(info);}
return layers;},_updateOrder:function(){this._updateCachedObjects();function layerIndex(layers,name){for(var i=0;i<layers.length;i++){var l=layers[i];if(l.name==name)
return i;}
return-1;}
var orderedLayers=this.map.layers.slice();var seenLayers={};var nodes=[];this.getRootNode().cascade(function(node){if(this.ascending)
nodes.push(node);else
nodes.unshift(node);},this);Ext.each(nodes,function(node){var layers=this.nodeIdToLayers[node.id];if(!layers)
return;Ext.each(layers,function(layer){var layerName=layer.name;if(seenLayers[layerName])
return;seenLayers[layerName]=true;var index=layerIndex(orderedLayers,layerName);if(index==-1||!this.layerNameToLayer[layerName]){throw new Error("Layer "+layerName+" not available");}
orderedLayers.splice(index,1);orderedLayers.push(this.layerNameToLayer[layerName]);},this);},this);this._updateCheckboxAncestors();this.map.layers=orderedLayers;for(var i=0;i<this.map.layers.length;i++){this.map.setLayerZIndex(this.map.layers[i],i);}},_fixupModel:function(){this.getRootNode().cascade(function(node){var attrs=node.attributes;if(!attrs.layerNames&&attrs.layerName){attrs.layerNames=[attrs.layerName];delete attrs.layerName;}},this);if(this.map)
this._updateCachedObjects();this.getRootNode().cascade(function(node){var layers;if(!node.attributes.radio&&(!this.map||!(layers=this.nodeIdToLayers[node.id])))
return;var isBaseLayer=false;var displayInLayerSwitcher=false;if(layers){isBaseLayer=true;Ext.each(layers,function(layer){if(!layer.isBaseLayer){isBaseLayer=false;}
if(layer.displayInLayerSwitcher){displayInLayerSwitcher=true;}},this);}else{displayInLayerSwitcher=true;}
if((isBaseLayer||node.attributes.radio)&&displayInLayerSwitcher){node.attributes.uiProvider=mapfish.widgets.RadioTreeNodeUI;if(node.ui)
node.ui=new mapfish.widgets.RadioTreeNodeUI(node);}},this);},initComponent:function(){this.eventModel=new mapfish.widgets.LayerTreeEventModel(this);mapfish.widgets.LayerTree.superclass.initComponent.call(this);this.addListener("checkchange",function checkChange(node,checked){this._handleModelChange(node,checked);},this);this.addListener("radiochange",function radioChange(node,checked){this._handleModelChange(node,checked);},this);this._automaticModel=!this.model;if(!this.model){this.model=this._extractOLModel();}
var root={text:'Root',draggable:false,id:'source',children:this.model,leaf:false};function buildTree(attributes){var node=new Ext.tree.TreeNode(attributes);console.log(attributes);var cs=attributes.children;node.leaf=!cs;if(!cs)
return node;for(var i=0;i<cs.length;i++){if(!cs[i]){continue;}
node.appendChild(buildTree(cs[i]));}
return node;}
var rootNode=buildTree(root);this.setRootNode(rootNode);this._fixupModel();if(this.enableDD){this.addListener("dragdrop",function(){this._updateOrder(arguments);},this);this.addListener('nodedragover',this.isDragAllowed,this);}
if(!this._automaticModel){this._handleModelChange(null,null);if(this.enableDD){this._updateOrder();}}},isDragAllowed:function(e){var draggedNode=e.data.node;var targetParentNode=e.target;if(e.point=="above"||e.point=="below"){targetParentNode=targetParentNode.parentNode;}
if(draggedNode.parentNode!=targetParentNode){return false;}
return true;},onRender:function(container,position){if(!this.el){this.el=document.createElement('div');}
mapfish.widgets.LayerTree.superclass.onRender.apply(this,arguments);}});Ext.reg('layertree',mapfish.widgets.LayerTree);Ext.namespace('mapfish.widgets','mapfish.widgets.recenter');mapfish.widgets.recenter.Coords=function(config){Ext.apply(this,config);mapfish.widgets.recenter.Coords.superclass.constructor.call(this);};Ext.extend(mapfish.widgets.recenter.Coords,mapfish.widgets.recenter.Base,{addItems:function(){this.removeAll();this.add({xtype:'numberfield',fieldLabel:OpenLayers.i18n('mf.recenter.x'),name:'coordx'});this.add({xtype:'numberfield',fieldLabel:OpenLayers.i18n('mf.recenter.y'),name:'coordy'});if(this.scales){this.addScaleCombo();}
this.addRecenterButton();},recenter:function(){var values=this.getForm().getValues();var x=values.coordx;var y=values.coordy;if(this.checkCoords(x,y)){var zoom;if(this.scales&&values.scaleValue){resolution=OpenLayers.Util.getResolutionFromScale(values.scaleValue,this.map.units);zoom=this.map.getZoomForResolution(resolution);}
this.recenterOnCoords(x,y,zoom);}},checkCoords:function(x,y){if(!x||!y){this.showError(OpenLayers.i18n('mf.recenter.missingCoords'));return false;}
var maxExtent=this.map.maxExtent;if(x<maxExtent.left||x>maxExtent.right||y<maxExtent.bottom||y>maxExtent.top){this.showError(OpenLayers.i18n('mf.recenter.outOfRangeCoords',{'myX':x,'myY':y,'coordX':OpenLayers.i18n('mf.recenter.x'),'coordY':OpenLayers.i18n('mf.recenter.y'),'minCoordX':maxExtent.left,'maxCoordX':maxExtent.right,'minCoordY':maxExtent.bottom,'maxCoordY':maxExtent.top}));return false;}
return true;}});Ext.reg('coordsrecenter',mapfish.widgets.recenter.Coords);mapfish.widgets.LayerTree.getNodeLayers=function(layerTree,node){var olLayers=[];node.cascade(function(subNode){var curLayers=layerTree.nodeIdToLayers[subNode.id];if(curLayers){olLayers=olLayers.concat(curLayers);}});return olLayers;};mapfish.widgets.LayerTree.removeNode=function(layerTree,node){node.cascade(function(subNode){if(subNode.attributes&&subNode.attributes.layerNames){var layerNames=subNode.attributes.layerNames;for(var i=0;i<layerNames.length;++i){var layerName=layerNames[i].split(layerTree.separator);var olLayer=layerTree.layerNameToLayer[layerName[0]];var wmsLayer=layerName[1];var layerList;if(olLayer.params.LAYERS){layerList=olLayer.params.LAYERS=mapfish.Util.fixArray(olLayer.params.LAYERS);}else{layerList=olLayer.params.layers=mapfish.Util.fixArray(olLayer.params.layers);}
if(wmsLayer&&layerList){layerList.remove(wmsLayer);}
if(!wmsLayer||!layerList||layerList.length==0){olLayer.destroy();}else{olLayer.redraw();}}}});var parent=node.parentNode;node.remove();while(parent){if(parent.hasChildNodes()){break;}
var cur=parent;parent=parent.parentNode;cur.remove();}
layerTree._updateCachedObjects();};mapfish.widgets.LayerTree.MenuFeatures={opacitySlide:function(layerTree,node,olLayers){if(olLayers.length==0)return null;return{text:OpenLayers.Lang.translate("mf.layertree.opacity"),menu:{plain:true,items:[mapfish.widgets.LayerTree.MenuFeatures.opacitySlideDirect(layerTree,node,olLayers)]}};},opacitySlideDirect:function(layerTree,node,olLayers){if(olLayers.length==0)return null;var value=0;for(var i=0;i<olLayers.length;++i){value+=olLayers[i].opacity==null?1.0:olLayers[i].opacity;}
value=value/olLayers.length;return new Ext.menu.Adapter(new Ext.Slider({width:200,value:value*100,listeners:{change:function(slider,value){for(var j=0;j<olLayers.length;++j){olLayers[j].setOpacity(value/100.0);}}}}));},remove:function(layerTree,node,olLayers){if(olLayers.length==0)return null;for(var i=0;i<olLayers.length;++i){var layer=olLayers[i];if(layer.isBaseLayer&&layer.getVisibility()){return null;}}
return{text:OpenLayers.Lang.translate('mf.layertree.remove'),handler:function(){mapfish.widgets.LayerTree.removeNode(layerTree,node);}};},zoomToExtent:function(layerTree,node,olLayers){if(olLayers.length==0)return null;var bbox=null;for(var i=0;i<olLayers.length;++i){var layer=olLayers[i];if(bbox){bbox.extend(layer.maxExtent);}else{bbox=layer.maxExtent.clone();}}
return{text:OpenLayers.Lang.translate('mf.layertree.zoomToExtent'),handler:function(){layerTree.map.zoomToExtent(bbox);}};}};mapfish.widgets.LayerTree.createContextualMenuPlugin=function(options){return{init:function(layerTree){function openMenu(node,e){var olLayers=mapfish.widgets.LayerTree.getNodeLayers(layerTree,node);var items=[];for(var j=0;j<options.length;++j){var constructor=mapfish.widgets.LayerTree.MenuFeatures[options[j]];var menuItem=constructor(layerTree,node,olLayers);if(menuItem){items.push(menuItem);}}
if(items.length>0){var menu=new Ext.menu.Menu({ignoreParentClick:true,defaults:{scope:layerTree},items:items});menu.showAt(e.getXY());menu.on('hide',function(){menu.destroy();});}}
if(Ext.isOpera){layerTree.on('click',function(node,e){if(e.hasModifier()){e.stopEvent();openMenu(node,e);}});}else{layerTree.on('contextMenu',function(node,e){e.stopEvent();openMenu(node,e);});}}};};mapfish.widgets.LayerTree.createDisableLayersPlugin=function(serverResolution){return{init:function(layertree){if(!layertree.map){return;}
layertree.map.events.on({zoomend:function(){function checkDisable(node,disable){if(disable){node.disable();}else{var scale=layertree.map.getScale();scale=scale*serverResolution/OpenLayers.DOTS_PER_INCH;if(scale<node.attributes.minScale||scale>node.attributes.maxScale){node.disable();disable=true;}else{node.enable();disable=false;}}
node.eachChild(function(child){checkDisable(child,disable);});}
checkDisable(layertree.root,false);}});}};};Ext.namespace('mapfish.widgets');Ext.namespace('mapfish.widgets.print');mapfish.widgets.print.BaseWidget=function(options){mapfish.widgets.print.BaseWidget.superclass.constructor.call(this,options);};Ext.extend(mapfish.widgets.print.BaseWidget,Ext.Panel,{pageDrag:null,rotateHandle:null,layer:null,layout:'fit',initComponent:function(){mapfish.widgets.print.BaseWidget.superclass.initComponent.call(this);this.addEvents("configloaded");this.on('expand',this.setUp,this);this.on('collapse',this.tearDown,this);this.on('activate',this.setUp,this);this.on('deactivate',this.tearDown,this);this.on('enable',this.setUp,this);this.on('disable',this.tearDown,this);this.on('render',function(){var mask=this.mask=new Ext.LoadMask(this.body,{msg:OpenLayers.Lang.translate('mf.print.loadingConfig')});if(this.config==null){mask.show();}},this);if(!this.initPrint()){this.fillComponent();}},configReceived:function(config){mapfish.widgets.print.Base.configReceived.call(this,config);this.fillComponent();this.doLayout();this.setUp();this.fireEvent("configloaded");},configFailed:function(){mapfish.widgets.print.Base.configFailed.call(this);this.add({border:false,region:'center',html:OpenLayers.Lang.translate('mf.print.serverDown')});this.doLayout();this.config=false;},isReallyVisible:function(){if(!this.isVisible()||!this.body.isVisible(true))return false;var result=true;this.bubble(function(component){return result=result&&component.isVisible()&&(!component.body||component.body.isVisible());},this);return result;},setUp:function(){if(!this.disabled&&this.isReallyVisible()&&this.config&&!this.layer){this.map.addLayer(this.getOrCreateLayer());this.pageDrag.activate();}},tearDown:function(){if(this.config&&this.pageDrag&&this.layer){this.pageDrag.destroy();this.pageDrag=null;this.removeRotateHandle();this.layer.removeFeatures(this.layer.features);this.layer.destroy();this.layer=null;}},getOrCreateLayer:function(){if(!this.layer){var self=this;this.layer=new OpenLayers.Layer.Vector("_Print"+this.getId(),{displayInLayerSwitcher:false,calculateInRange:function(){return true;}});this.pageDrag=new OpenLayers.Control.DragFeature(this.layer);this.map.addControl(this.pageDrag);var curFeature=null;this.pageDrag.onStart=function(feature){OpenLayers.Control.DragFeature.prototype.onStart.apply(this,arguments);curFeature=feature;if(feature.attributes.rotate){self.pageRotateStart(feature);}else{self.pageDragStart(feature);}};this.pageDrag.onDrag=function(feature){OpenLayers.Control.DragFeature.prototype.onDrag.apply(this,arguments);if(!feature)feature=curFeature;if(feature.attributes.rotate){self.pageRotated(feature);}};this.pageDrag.onComplete=function(feature){OpenLayers.Control.DragFeature.prototype.onComplete.apply(this,arguments);if(!feature)feature=curFeature;if(feature.attributes.rotate){self.pageRotateComplete(feature);}else{self.pageDragComplete(feature);}
curFeature=null;};this.afterLayerCreated();}
return this.layer;},pageRotateStart:function(feature){},pageRotated:function(feature){var center=feature.attributes.center;var pos=feature.geometry;var angle=Math.atan2(pos.x-center.x,pos.y-center.y)*180/Math.PI;var page=feature.attributes.page;page.attributes.rotation=angle;var centerPoint=new OpenLayers.Geometry.Point(center.x,center.y);page.geometry.rotate(feature.attributes.prevAngle-angle,centerPoint);this.layer.drawFeature(page);this.setCurRotation(Math.round(angle));feature.attributes.prevAngle=angle;},pageRotateComplete:function(feature){this.createRotateHandle(feature.attributes.page);},pageDragStart:function(feature){this.removeRotateHandle();},removeRotateHandle:function(){if(this.rotateHandle){this.rotateHandle.destroy();this.rotateHandle=null;}},pageDragComplete:function(feature){if(this.getCurLayout().rotation){this.createRotateHandle(feature);}},createRotateHandle:function(feature){this.removeRotateHandle();var firstPoint=feature.geometry.components[0].components[2];var secondPoint=feature.geometry.components[0].components[3];var lon=(firstPoint.x+secondPoint.x)/2;var lat=(firstPoint.y+secondPoint.y)/2;var rotatePoint=new OpenLayers.Geometry.Point(lon,lat);var center=this.getCenterRectangle(feature);this.rotateHandle=new OpenLayers.Feature.Vector(rotatePoint,{rotate:true,page:feature,center:{x:center[0],y:center[1]},prevAngle:feature.attributes.rotation});this.layer.addFeatures(this.rotateHandle);},createRectangle:function(center,scale,layout,rotation){var extent=this.getExtent(center,scale,layout);var rect=extent.toGeometry();if(rotation!=0.0){var centerPoint=new OpenLayers.Geometry.Point(center.lon,center.lat);rect.rotate(-rotation,centerPoint);}
var feature=new OpenLayers.Feature.Vector(rect,{rotation:rotation});this.layer.addFeatures(feature);return feature;},getCenterRectangle:function(rectangle){var center=rectangle.geometry.getBounds().getCenterLonLat();return[center.lon,center.lat];},getExtent:function(center,scale,layout){var unitsRatio=OpenLayers.INCHES_PER_UNIT[this.map.baseLayer.units];var size=layout.map;var w=size.width/72.0/unitsRatio*scale/2.0;var h=size.height/72.0/unitsRatio*scale/2.0;return new OpenLayers.Bounds(center.lon-w,center.lat-h,center.lon+w,center.lat+h);},fitScale:function(layout){var availsTxt=this.config.scales;if(availsTxt.length==0)return;var avails=[];for(var i=0;i<availsTxt.length;++i){avails.push(parseFloat(availsTxt[i].value));}
avails.sort(function(a,b){return a-b;});var bounds=this.map.getExtent();var unitsRatio=OpenLayers.INCHES_PER_UNIT[this.map.baseLayer.units];var size=layout.map;var targetScale=Math.min(bounds.getWidth()/size.width*72.0*unitsRatio,bounds.getHeight()/size.height*72.0*unitsRatio);var nearestScale=avails[0];for(var j=1;j<avails.length;++j){if(avails[j]<=targetScale){nearestScale=avails[j];}else{break;}}
return nearestScale;},print:function(){this.overrides[this.layer.name]={visibility:false};mapfish.widgets.print.Base.print.call(this);delete this.overrides[this.layer.name];},getLayoutForName:function(layoutName){var layouts=this.config.layouts;for(var i=0;i<layouts.length;++i){var cur=layouts[i];if(cur.name==layoutName){return cur;}}},createScaleCombo:function(){var scaleStore=new Ext.data.JsonStore({root:"scales",fields:['name','value'],data:this.config});return new Ext.form.ComboBox({fieldLabel:OpenLayers.Lang.translate('mf.print.scale'),store:scaleStore,displayField:'name',valueField:'value',typeAhead:false,mode:'local',id:'scale_'+this.getId(),hiddenId:'scaleId_'+this.getId(),hiddenName:"scale",name:"scale",editable:false,triggerAction:'all',value:this.config.scales[this.config.scales.length-1].value});},createDpiCombo:function(name){if(this.config.dpis.length>1){var dpiStore=new Ext.data.JsonStore({root:"dpis",fields:['name','value'],data:this.config});return{fieldLabel:OpenLayers.Lang.translate('mf.print.dpi'),xtype:'combo',store:dpiStore,displayField:'name',valueField:'value',typeAhead:false,mode:'local',id:'dpi_'+this.getId(),hiddenId:'dpiId_'+this.getId(),hiddenName:name,name:name,editable:false,triggerAction:'all',value:this.config.dpis[0].value};}else{return{xtype:'hidden',name:name,value:this.config.dpis[0].value};}},createLayoutCombo:function(name){if(this.config.layouts.length>1){var layoutStore=new Ext.data.JsonStore({root:"layouts",fields:['name'],data:this.config});return new Ext.form.ComboBox({fieldLabel:OpenLayers.Lang.translate('mf.print.layout'),store:layoutStore,displayField:'name',valueField:'name',typeAhead:false,mode:'local',id:'layout_'+this.getId(),hiddenId:'layoutId_'+this.getId(),hiddenName:name,name:name,editable:false,triggerAction:'all',value:this.config.layouts[0].name});}else{return new Ext.form.Hidden({name:name,value:this.config.layouts[0].name});}},createRotationTextField:function(){var layouts=this.config.layouts;var hasRotation=false;for(var i=0;i<layouts.length&&!hasRotation;++i){hasRotation=layouts[i].rotation;}
if(hasRotation){var num=/^-?[0-9]+$/;return new Ext.form.TextField({fieldLabel:OpenLayers.Lang.translate('mf.print.rotation'),name:'rotation',value:'0',maskRe:/^[-0-9]$/,msgTarget:'side',validator:function(v){return num.test(v)?true:"Not a number";}});}else{return null;}},fillComponent:null,afterLayerCreated:null,fillSpec:null,getCurLayout:null,setCurRotation:null});OpenLayers.Util.applyDefaults(mapfish.widgets.print.BaseWidget.prototype,mapfish.widgets.print.Base);Ext.namespace('mapfish.widgets');Ext.namespace('mapfish.widgets.print');mapfish.widgets.print.MultiPage=Ext.extend(mapfish.widgets.print.BaseWidget,{formConfig:null,columns:null,zoomToExtentEnabled:true,grid:null,printButton:null,freezeGeometryRefresh:false,fillComponent:function(){this.columns=this.columns||[];var innerPanel=this.add({border:false,layout:'border',id:this.getId()+'InnerPanel'});this.createGlobalForm(innerPanel);this.createGrid(innerPanel);},setUp:function(){if(this.config){if(Ext.isGecko3){var buggyDiv=this.formPanel.getEl().parent();buggyDiv.setStyle("position","absolute");setTimeout(function(){buggyDiv.setStyle("position","relative");},20);}
mapfish.widgets.print.BaseWidget.prototype.setUp.call(this);}},createGlobalForm:function(innerPanel){var formConfig=OpenLayers.Util.extend({region:'south',bodyStyle:'padding: 7px 0 0 0;',border:false,bodyBorder:false,id:this.getId()+"formPanel"},this.formConfig);var formPanel=this.formPanel=new Ext.form.FormPanel(formConfig);var layout=this.createLayoutCombo("layout");if(this.config.layouts.length>1){layout.on('select',this.layoutChanged,this);}
formPanel.add(layout);formPanel.add(this.createDpiCombo("dpi"));this.printButton=formPanel.addButton({text:OpenLayers.Lang.translate('mf.print.print'),scope:this,handler:this.print,disabled:true});innerPanel.add(formPanel);},createGrid:function(innerPanel){var scale=this.createScaleCombo();scale.on('select',this.updateCurrentRectangle,this);var self=this;var columns=[{header:OpenLayers.Lang.translate('mf.print.scale'),dataIndex:'scale',editor:scale,renderer:function(value){return self.getScaleName(value);}}];var rotation=this.createRotationTextField();if(rotation!=null){columns.push({header:OpenLayers.Lang.translate('mf.print.rotation'),dataIndex:'rotation',editor:rotation,id:this.getId()+'_rotation',hidden:!this.config.layouts[0].rotation});}
if(this.columns){columns.push.apply(columns,this.columns);}
var pageFields=[];for(var i=0;i<columns.length;++i){pageFields.push({name:columns[i].dataIndex});}
var pages=new Ext.data.SimpleStore({fields:pageFields});var grid=this.grid=new Ext.grid.EditorGridPanel({region:'center',border:false,id:this.getId()+'PagesGrid',autoScroll:true,enableColumnHide:false,enableHdMenu:false,store:pages,viewConfig:{forceFit:true,emptyText:OpenLayers.Lang.translate('mf.print.noPage')},sm:new Ext.grid.RowSelectionModel({singleSelect:true}),clicksToEdit:1,columns:columns,bbar:[{text:OpenLayers.Lang.translate('mf.print.addPage'),scope:this,handler:this.addPage},{text:OpenLayers.Lang.translate('mf.print.remove'),scope:this,handler:this.removeSelected,id:this.getId()+"_remove",disabled:true},{text:OpenLayers.Lang.translate('mf.print.clearAll'),scope:this,handler:this.clearPages}]});innerPanel.add(grid);grid.getSelectionModel().addListener('selectionchange',this.selectionChanged,this);grid.getStore().addListener('update',function(store,record,operation){if(!this.freezeGeometryRefresh){this.updateRectangle(record);this.updatePrintLayerStyle();}},this);grid.getStore().addListener('remove',function(store,record,index){this.layer.removeFeatures(record.data.rectangle);this.removeRotateHandle();if(store.getCount()==0){this.printButton.disable();}},this);grid.getStore().addListener('clear',function(){this.layer.removeFeatures(this.layer.features);this.printButton.disable();},this);},selectionChanged:function(){this.updatePrintLayerStyle();var removeButton=Ext.getCmp(this.getId()+'_remove');var selected=this.grid.getSelectionModel().getSelected();if(selected){if(this.zoomToExtentEnabled){var bounds=selected.data.rectangle.geometry.getBounds().clone();bounds.extend(this.map.getExtent());this.map.zoomToExtent(bounds);}
removeButton.enable();var layoutData=this.getCurLayout();if(layoutData.rotation){this.createRotateHandle(selected.data.rectangle);}}else{removeButton.disable();}},updatePrintLayerStyle:function(){var selected=this.grid.getSelectionModel().getSelected();var theOne=null;for(var i=0;i<this.layer.features.length;++i){var feature=this.layer.features[i];var isTheOne=feature.data.record==selected;feature.style=OpenLayers.Feature.Vector.style[isTheOne?'select':'default'];if(isTheOne&&i!=this.layer.features.length-1){theOne=feature;this.layer.removeFeatures(feature);}}
if(theOne)this.layer.addFeatures(theOne);this.layer.redraw();},addPage:function(){var layoutData=this.getCurLayout();var scale=this.fitScale(layoutData);var feature=this.createRectangle(this.map.getCenter(),scale,layoutData,0);var newPage={scale:scale,rotation:0,rectangle:feature};for(var i=0;i<this.columns.length;++i){var cur=this.columns[i].dataIndex;if(newPage[cur]==null){newPage[cur]="";}}
var pages=this.grid.getStore();var record=new pages.recordType(newPage);pages.add(record);feature.data.record=record;this.grid.getSelectionModel().selectLastRow();this.printButton.enable();},clearPages:function(){this.grid.stopEditing();this.grid.getStore().removeAll();},removeSelected:function(){this.grid.stopEditing();var record=this.grid.getSelectionModel().getSelected();this.grid.getStore().remove(record);},layoutChanged:function(){this.grid.getStore().each(function(record){this.updateRectangle(record);},this);this.updatePrintLayerStyle();var cm=this.grid.getColumnModel();var rotationIndex=cm.getIndexById(this.id+'_rotation');if(rotationIndex>=0){var layoutData=this.getCurLayout();cm.setHidden(rotationIndex,!layoutData.rotation);}},updateCurrentRectangle:function(){this.updateRectangle(this.grid.getSelectionModel().getSelected());this.updatePrintLayerStyle();},updateRectangle:function(record){this.grid.stopEditing();this.layer.removeFeatures(record.data.rectangle);var layoutData=this.getCurLayout();var scale=record.get('scale');var angle=layoutData.rotation?record.get('rotation'):0;var center=record.data.rectangle.geometry.getBounds().getCenterLonLat();var feature=this.createRectangle(center,scale,layoutData,angle);feature.data.record=record;record.data.rectangle=feature;var sm=this.grid.getSelectionModel();if(sm.getSelected()==record){if(layoutData.rotation){this.createRotateHandle(feature);}else{this.removeRotateHandle();}}},afterLayerCreated:function(){if(this.grid.getStore().getCount()!=0){this.grid.getStore().each(function(record){this.layer.addFeatures(record.data.rectangle);},this);this.updatePrintLayerStyle();var sm=this.grid.getSelectionModel();var selected=sm.getSelected();if(selected&&this.getCurLayout().rotation){this.createRotateHandle(selected.data.rectangle);}}else{this.addPage();}},pageRotateStart:function(feature){mapfish.widgets.print.BaseWidget.prototype.pageRotateStart.call(this,feature);this.grid.stopEditing();},pageDragStart:function(feature){mapfish.widgets.print.BaseWidget.prototype.pageDragStart.call(this,feature);var prev=this.zoomToExtentEnabled;var sm=this.grid.getSelectionModel();if(sm.getSelected()!=feature.data.record){this.zoomToExtentEnabled=false;sm.selectRecords([feature.data.record]);this.zoomToExtentEnabled=prev;}
this.grid.stopEditing();},getCurDpi:function(){var values=this.formPanel.getForm().getValues();return values["dpi"];},getCurLayoutName:function(){var values=this.formPanel.getForm().getValues();return values['layout'];},getCurLayout:function(){var layout=this.getCurLayoutName();return this.getLayoutForName(layout);},setCurRotation:function(rotation){var selected=this.grid.getSelectionModel().getSelected();this.freezeGeometryRefresh=true;selected.set('rotation',rotation);this.freezeGeometryRefresh=false;},fillSpec:function(printCommand){var params=printCommand.spec;var layout=this.getCurLayout();this.formPanel.getForm().items.each(function(cur){params[cur.getName()]=cur.getValue();},this);this.grid.getStore().each(function(record){var page={};for(var key in record.data){if(key=='rectangle'){page.center=this.getCenterRectangle(record.data.rectangle);}else if(key=='rotation'&&!layout.rotation){}else{page[key]=record.data[key];}}
params.pages.push(page);},this);},getScaleName:function(scaleValue){var scales=this.config.scales;for(var i=0;i<scales.length;++i){var cur=scales[i];if(cur.value==scaleValue){return cur.name;}}}});Ext.reg('print-multi',mapfish.widgets.print.MultiPage);Ext.namespace('mapfish.widgets');Ext.namespace('mapfish.widgets.print');mapfish.widgets.print.SimpleForm=Ext.extend(mapfish.widgets.print.BaseWidget,{formConfig:null,wantResetButton:true,scale:null,rectangle:null,rotation:null,infoPanel:null,fillComponent:function(){var formConfig=OpenLayers.Util.extend({border:false,bodyBorder:false},this.formConfig);var formPanel=this.formPanel=new Ext.form.FormPanel(formConfig);var layout=this.createLayoutCombo("/layout");if(this.config.layouts.length>1){layout.on('select',this.updateRectangle,this);}
formPanel.add(layout);formPanel.add(this.createDpiCombo("/dpi"));this.scale=formPanel.add(this.createScaleCombo());this.scale.on('select',this.updateRectangle,this);this.rotation=this.createRotationTextField();if(this.rotation!=null){this.rotation.setDisabled(!this.config.layouts[0].rotation);formPanel.add(this.rotation);this.rotation.on('change',function(){if(!this.rotation.isValid(true)){this.rotation.setValue(0);}
this.updateRectangle();},this);}
if(this.infoPanel!=null){formPanel.add(this.infoPanel);}
if(this.wantResetButton){formPanel.addButton({text:OpenLayers.Lang.translate('mf.print.resetPos'),scope:this,handler:function(){this.setCurScale(this.fitScale(this.getCurLayout()));if(this.rotation){this.setCurRotation(0);}
this.createTheRectangle();}});}
formPanel.addButton({text:OpenLayers.Lang.translate('mf.print.print'),scope:this,handler:this.print});this.add(formPanel);},updateRectangle:function(){this.layer.removeFeatures(this.rectangle);var center=this.rectangle.geometry.getBounds().getCenterLonLat();var layout=this.getCurLayout();this.rectangle=this.createRectangle(center,this.getCurScale(),layout,this.rotation&&layout.rotation?this.rotation.getValue():0);if(this.rotation){this.rotation.setDisabled(!layout.rotation);if(!layout.rotation){this.rotation.setValue(0);}}
if(layout.rotation){this.createRotateHandle(this.rectangle);}else{this.removeRotateHandle();}},createTheRectangle:function(){if(this.rectangle)this.layer.removeFeatures(this.rectangle);var layout=this.getCurLayout();this.rectangle=this.createRectangle(this.map.getCenter(),this.getCurScale(),this.getCurLayout(),this.rotation&&layout.rotation?this.rotation.getValue():0);if(layout.rotation){this.createRotateHandle(this.rectangle);}},afterLayerCreated:function(){this.setCurScale(this.fitScale(this.getCurLayout()));this.createTheRectangle();},getCurLayout:function(){var values=this.formPanel.getForm().getValues();var layoutName=values['/layout'];return this.getLayoutForName(layoutName);},getCurScale:function(){var values=this.formPanel.getForm().getValues();return values['scale'];},setCurScale:function(value){this.scale.setValue(value);},getCurDpi:function(){var values=this.formPanel.getForm().getValues();return values["dpi"];},setCurRotation:function(rotation){this.rotation.setValue(rotation);},fillSpec:function(printCommand){var singlePage={center:this.getCenterRectangle(this.rectangle)};var params=printCommand.spec;params.pages.push(singlePage);this.formPanel.getForm().items.each(function(cur){var name=cur.getName();if(OpenLayers.String.startsWith(name,"/")){params[name.substr(1)]=cur.getValue();}else{singlePage[name]=cur.getValue();}},this);}});Ext.reg('print-simple',mapfish.widgets.print.SimpleForm);mapfish.GeoStat=OpenLayers.Class({layer:null,format:null,url:null,requestSuccess:function(request){},requestFailure:function(request){},featureSelection:true,nameAttribute:null,indicator:null,defaultSymbolizer:{},selectSymbolizer:{'strokeColor':'#000000'},legendDiv:null,initialize:function(map,options){this.map=map;this.addOptions(options);if(!this.layer){var styleMap=new OpenLayers.StyleMap({'default':new OpenLayers.Style(OpenLayers.Util.applyDefaults(this.defaultSymbolizer,OpenLayers.Feature.Vector.style['default'])),'select':new OpenLayers.Style(this.selectSymbolizer)});var layer=new OpenLayers.Layer.Vector('geostat',{'displayInLayerSwitcher':false,'visibility':false,'styleMap':styleMap});map.addLayer(layer);this.layer=layer;}
if(this.featureSelection){this.layer.events.on({'featureselected':this.showDetails,'featureunselected':this.hideDetails,scope:this});var selectFeature=new OpenLayers.Control.SelectFeature(this.layer,{'hover':true});map.addControl(selectFeature);selectFeature.activate();}
if(this.url){OpenLayers.loadURL(this.url,'',this,this.onSuccess,this.onFailure);}
this.legendDiv=Ext.get(options.legendDiv);},onSuccess:function(request){var doc=request.responseXML;if(!doc||!doc.documentElement){doc=request.responseText;}
var format=this.format||new OpenLayers.Format.GeoJSON()
this.layer.addFeatures(format.read(doc));this.requestSuccess(request);},onFailure:function(request){this.requestFailure(request);},addOptions:function(newOptions){if(newOptions){if(!this.options){this.options={};}
OpenLayers.Util.extend(this.options,newOptions);OpenLayers.Util.extend(this,newOptions);}},extendStyle:function(rules,symbolizer,context){var style=this.layer.styleMap.styles['default'];if(rules){style.rules=rules;}
if(symbolizer){style.setDefaultStyle(OpenLayers.Util.applyDefaults(symbolizer,style.defaultStyle));}
if(context){if(!style.context){style.context={};}
OpenLayers.Util.extend(style.context,context);}},applyClassification:function(options){this.layer.renderer.clear();this.layer.redraw();this.updateLegend();this.layer.setVisibility(true);},showDetails:function(obj){var feature=obj.feature;var html=typeof this.nameAttribute=='string'?'<h4 style="margin-top:5px">'
+feature.attributes[this.nameAttribute]+'</h4>':'';html+=this.indicator+": "+feature.attributes[this.indicator];var bounds=this.layer.map.getExtent();var lonlat=new OpenLayers.LonLat(bounds.right,bounds.bottom);var size=new OpenLayers.Size(200,100);var popup=new OpenLayers.Popup.AnchoredBubble(feature.attributes[this.nameAttribute],lonlat,size,html,0.5,false);var symbolizer=feature.layer.styleMap.createSymbolizer(feature,'default');popup.setBackgroundColor(symbolizer.fillColor);this.layer.map.addPopup(popup);},hideDetails:function(obj){var map=this.layer.map;for(var i=map.popups.length-1;i>=0;--i){map.removePopup(map.popups[i]);}},CLASS_NAME:"mapfish.GeoStat"});mapfish.GeoStat.Distribution=OpenLayers.Class({labelGenerator:function(bin,binIndex,nbBins){return this.defaultLabelGenerator(bin,binIndex,nbBins)},values:null,nbVal:null,minVal:null,maxVal:null,initialize:function(values,options){OpenLayers.Util.extend(this,options);this.values=values;this.nbVal=values.length;this.minVal=this.nbVal?mapfish.Util.min(this.values):0;this.maxVal=this.nbVal?mapfish.Util.max(this.values):0;},defaultLabelGenerator:function(bin,binIndex,nbBins){return bin.lowerBound.toFixed(3)+' - '+bin.upperBound.toFixed(3)+' ('+bin.nbVal+')'},classifyWithBounds:function(bounds){var bins=[];var binCount=[];var sortedValues=[];for(var i=0;i<this.values.length;i++){sortedValues.push(this.values[i]);}
sortedValues.sort(function(a,b){return a-b;});var nbBins=bounds.length-1;for(var i=0;i<nbBins;i++){binCount[i]=0;}
for(var i=0;i<nbBins-1;i){if(sortedValues[0]<bounds[i+1]){binCount[i]=binCount[i]+1;sortedValues.shift();}else{i++;}}
binCount[nbBins-1]=this.nbVal-mapfish.Util.sum(binCount);for(var i=0;i<nbBins;i++){bins[i]=new mapfish.GeoStat.Bin(binCount[i],bounds[i],bounds[i+1],i==(nbBins-1));var labelGenerator=this.labelGenerator||this.defaultLabelGenerator;bins[i].label=labelGenerator(bins[i],i,nbBins);}
return new mapfish.GeoStat.Classification(bins);},classifyByEqIntervals:function(nbBins){var bounds=[];for(var i=0;i<=nbBins;i++){bounds[i]=this.minVal+
i*(this.maxVal-this.minVal)/nbBins;}
return this.classifyWithBounds(bounds);},classifyByQuantils:function(nbBins){var values=this.values;values.sort(function(a,b){return a-b;});var binSize=Math.round(this.values.length/nbBins);var bounds=[];var binLastValPos=(binSize==0)?0:binSize;if(values.length>0){bounds[0]=values[0];for(i=1;i<nbBins;i++){bounds[i]=values[binLastValPos];binLastValPos+=binSize;}
bounds.push(values[values.length-1]);}
return this.classifyWithBounds(bounds);},sturgesRule:function(){return Math.floor(1+3.3*Math.log(this.nbVal,10));},classify:function(method,nbBins,bounds){var classification=null;if(!nbBins){nbBins=this.sturgesRule();}
switch(method){case mapfish.GeoStat.Distribution.CLASSIFY_WITH_BOUNDS:classification=this.classifyWithBounds(bounds);break;case mapfish.GeoStat.Distribution.CLASSIFY_BY_EQUAL_INTERVALS:classification=this.classifyByEqIntervals(nbBins);break;case mapfish.GeoStat.Distribution.CLASSIFY_BY_QUANTILS:classification=this.classifyByQuantils(nbBins);break;default:OpenLayers.Console.error("unsupported or invalid classification method");}
return classification;},CLASS_NAME:"mapfish.GeoStat.Distribution"});mapfish.GeoStat.Distribution.CLASSIFY_WITH_BOUNDS=0;mapfish.GeoStat.Distribution.CLASSIFY_BY_EQUAL_INTERVALS=1;mapfish.GeoStat.Distribution.CLASSIFY_BY_QUANTILS=2;mapfish.GeoStat.Bin=OpenLayers.Class({label:null,nbVal:null,lowerBound:null,upperBound:null,isLast:false,initialize:function(nbVal,lowerBound,upperBound,isLast){this.nbVal=nbVal;this.lowerBound=lowerBound;this.upperBound=upperBound;this.isLast=isLast;},CLASS_NAME:"mapfish.GeoStat.Bin"});mapfish.GeoStat.Classification=OpenLayers.Class({bins:[],initialize:function(bins){this.bins=bins;},getBoundsArray:function(){var bounds=[];for(var i=0;i<this.bins.length;i++){bounds.push(this.bins[i].lowerBound);}
if(this.bins.length>0){bounds.push(this.bins[this.bins.length-1].upperBound);}
return bounds;},CLASS_NAME:"mapfish.GeoStat.Classification"});mapfish.Protocol.MapFish=OpenLayers.Class(OpenLayers.Protocol.HTTP,{initialize:function(options){options=options||{};if(!options.format){options.format=new OpenLayers.Format.GeoJSON();}
OpenLayers.Protocol.HTTP.prototype.initialize.call(this,options);},"create":function(features,options){options=options||{};options.headers=OpenLayers.Util.extend(options.headers,{"Content-Type":"plain/text"});return OpenLayers.Protocol.HTTP.prototype.create.call(this,features,options);},handleCreate:function(resp,options){this.handleCreateUpdate(resp,options);},"read":function(options){options.params=OpenLayers.Util.applyDefaults(options.params,this.options.params);if(options){this.filterAdapter(options);}
return OpenLayers.Protocol.HTTP.prototype.read.call(this,options);},handleRead:function(resp,options){var request=resp.priv;if(options.callback){var code=request.status;if(code==200){resp.features=this.parseFeatures(request);resp.code=OpenLayers.Protocol.Response.SUCCESS;}else{resp.features=null;resp.code=OpenLayers.Protocol.Response.FAILURE;}
options.callback.call(options.scope,resp);}},_filterToParams:function(filter,params){var className=filter.CLASS_NAME;var str=className.substring(className.indexOf('.')+1,className.lastIndexOf('.'));if(str!="Filter"){return false;}
var filterType=className.substring(className.lastIndexOf('.')+1);switch(filterType){case"Spatial":var type=filter.type;switch(type){case OpenLayers.Filter.Spatial.BBOX:if(params["box"]){OpenLayers.Console.error('Filter contains multiple '+'Spatial BBOX entries');return false;}
params["box"]=filter.value.toBBOX();break;case OpenLayers.Filter.Spatial.DWITHIN:params["tolerance"]=filter.distance;case OpenLayers.Filter.Spatial.WITHIN:if(params["lon"]){OpenLayers.Console.error('Filter contains multiple '+'Spatial *WITHIN entries');return false;}
params["lon"]=filter.value.x;params["lat"]=filter.value.y;break;default:OpenLayers.Console.warn('Unknown spatial filter type '+
type);return false;}
break;case"Comparison":var op=mapfish.Protocol.MapFish.COMP_TYPE_TO_OP_STR[filter.type];if(op===undefined){OpenLayers.Console.error('Unknown comparison filter type '+filter.type);return false;}
params[filter.property+"__"+op]=filter.value;params["queryable"]=params["queryable"]||[];params["queryable"].push(filter.property);break;case"Logical":if(filter.type!=OpenLayers.Filter.Logical.AND){OpenLayers.Console.error('Unsupported logical filter type '+
filter.type);return false;}
if(filter.filters.length==0){OpenLayers.Console.error('Empty logical AND filter');return false;}
for(var i=0;i<filter.filters.length;i++){var f=filter.filters[i];if(!this._filterToParams(f,params))
return false;}
break;default:OpenLayers.Console.warn("Unknown filter type "+filterType);return false;}
return true;},filterAdapter:function(options){if(!options||!options.filter||!options.filter.CLASS_NAME){return;}
var params={};if(this._filterToParams(options.filter,params)){options.params=OpenLayers.Util.extend(options.params,params);}
delete options.filter;},"update":function(features,options){options=options||{};var url=options.url||features.url||this.options.url+'/'+features.fid;options.url=url;options.headers=OpenLayers.Util.extend(options.headers,{"Content-Type":"plain/text"});return OpenLayers.Protocol.HTTP.prototype.update.call(this,features,options);},handleUpdate:function(resp,options){this.handleCreateUpdate(resp,options);},handleCreateUpdate:function(resp,options){var request=resp.priv;if(options.callback){var code=request.status;if(code==201){resp.features=this.parseFeatures(request);resp.code=OpenLayers.Protocol.Response.SUCCESS;}else{resp.features=null;resp.code=OpenLayers.Protocol.Response.FAILURE;}
options.callback.call(options.scope,resp);}},"delete":function(feature,options){options=options||{};var url=options.url||feature.url||this.options.url+'/'+feature.fid;options.url=url;return OpenLayers.Protocol.HTTP.prototype["delete"].call(this,feature,options);},handleDelete:function(resp,options){var request=resp.priv;if(options.callback){var code=request.status;if(code==204){resp.code=OpenLayers.Protocol.Response.SUCCESS;}else{resp.code=OpenLayers.Protocol.Response.FAILURE;}
options.callback.call(options.scope,resp);}},CLASS_NAME:"mapfish.Protocol.MapFish"});mapfish.Protocol.MapFish.COMP_TYPE_TO_OP_STR={};(function(){var o=mapfish.Protocol.MapFish.COMP_TYPE_TO_OP_STR;o[OpenLayers.Filter.Comparison.EQUAL_TO]="eq";o[OpenLayers.Filter.Comparison.NOT_EQUAL_TO]="ne";o[OpenLayers.Filter.Comparison.LESS_THAN]="lt";o[OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO]="lte";o[OpenLayers.Filter.Comparison.GREATER_THAN]="gt";o[OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO]="gte";o[OpenLayers.Filter.Comparison.LIKE]="ilike";})();mapfish.Protocol.MapFish.create=function(config){return mapfish.Protocol.decorateProtocol({protocol:new mapfish.Protocol.MapFish(config),MergeFilterDecorator:null,TriggerEventDecorator:null});};mapfish.Routing=OpenLayers.Class({url:null,vector:null,parser:null,initialize:function(url,map,options){this.url=url;this.map=map;OpenLayers.Util.extend(this,options);this.parser=new OpenLayers.Format.GeoJSON();this.vector=new OpenLayers.Layer.Vector("Routing");this.map.addLayer(this.vector);},onSuccess:function(result){if(result.responseText.search(/^error/)!=-1){OpenLayers.Console.error("Routing data returned by server contains error: "+
result.responseText);this.onFailure(result);return;}
this.vector.destroyFeatures();var features=this.parser.read(result.responseText);if(!features){this.onFailure("can't parse features");return;}
var bounds=features[0].geometry.getBounds();for(var i=0;i<features.length;i++){if(features[i].attributes._isSourceNode){features[i].style=mapfish.Routing.firstPointStyle;}else if(features[i].attributes._isTargetNode){features[i].style=mapfish.Routing.lastPointStyle;}else{bounds.extend(features[i].geometry.getBounds());features[i].style=mapfish.Routing.routeStyle;}}
this.vector.addFeatures(features);if(!this.map.getExtent().containsBounds(bounds)){this.map.zoomToExtent(bounds);}},onFailure:function(result){OpenLayers.Console.error("Failed to fetch routing data: "+result);},fetchRoute:function(params){new OpenLayers.Ajax.Request(this.url,{method:"get",parameters:params,onSuccess:OpenLayers.Function.bind(this.onSuccess,this),onFailure:OpenLayers.Function.bind(this.onFailure,this)});}});mapfish.Routing.routeStyle={strokeColor:"blue",strokeWidth:6,strokeOpacity:0.4};OpenLayers.Util.applyDefaults(mapfish.Routing.routeStyle,OpenLayers.Feature.Vector.style['default']);mapfish.Routing.firstPointStyle={externalGraphic:mapfish._getScriptLocation()+"img/routing-start-node.png",graphicWidth:18,graphicHeight:26,graphicYOffset:-26,fillOpacity:1,cursor:'pointer'};OpenLayers.Util.applyDefaults(mapfish.Routing.firstPointStyle,OpenLayers.Feature.Vector.style['default']);mapfish.Routing.lastPointStyle={externalGraphic:mapfish._getScriptLocation()+"img/routing-stop-node.png",graphicWidth:18,graphicHeight:26,graphicYOffset:-26,fillOpacity:1,cursor:'pointer'};OpenLayers.Util.applyDefaults(mapfish.Routing.lastPointStyle,OpenLayers.Feature.Vector.style['default']);mapfish.GeoStat.Choropleth=OpenLayers.Class(mapfish.GeoStat,{colors:[new mapfish.ColorRgb(120,120,0),new mapfish.ColorRgb(255,0,0)],method:mapfish.GeoStat.Distribution.CLASSIFY_BY_QUANTILS,numClasses:5,defaultSymbolizer:{'fillOpacity':1},classification:null,colorInterpolation:null,initialize:function(map,options){mapfish.GeoStat.prototype.initialize.apply(this,arguments);},updateOptions:function(newOptions){var oldOptions=OpenLayers.Util.extend({},this.options);this.addOptions(newOptions);if(newOptions){if(newOptions.method!=oldOptions.method||newOptions.indicator!=oldOptions.indicator||newOptions.numClasses!=oldOptions.numClasses){this.setClassification();}else if(newOptions.colors&&(!newOptions.colors[0].equals(oldOptions.colors[0])||!newOptions.colors[1].equals(oldOptions.colors[1]))){this.createColorInterpolation();}}},createColorInterpolation:function(){var initialColors=this.colors;var numColors=this.classification.bins.length;this.colorInterpolation=mapfish.ColorRgb.getColorsArrayByRgbInterpolation(initialColors[0],initialColors[1],numColors);},setClassification:function(){var values=[];var features=this.layer.features;for(var i=0;i<features.length;i++){values.push(features[i].attributes[this.indicator]);}
var distOptions={'labelGenerator':this.options.labelGenerator};var dist=new mapfish.GeoStat.Distribution(values,distOptions);this.classification=dist.classify(this.method,this.numClasses,null);this.createColorInterpolation();},applyClassification:function(options){this.updateOptions(options);var boundsArray=this.classification.getBoundsArray();var rules=new Array(boundsArray.length-1);for(var i=0;i<boundsArray.length-1;i++){var rule=new OpenLayers.Rule({symbolizer:{fillColor:this.colorInterpolation[i].toHexString()},filter:new OpenLayers.Filter.Comparison({type:OpenLayers.Filter.Comparison.BETWEEN,property:this.indicator,lowerBoundary:boundsArray[i],upperBoundary:boundsArray[i+1]})});rules[i]=rule;}
this.extendStyle(rules);mapfish.GeoStat.prototype.applyClassification.apply(this,arguments);},updateLegend:function(){if(!this.legendDiv){return;}
this.legendDiv.update("");for(var i=0;i<this.classification.bins.length;i++){var element=document.createElement("div");element.style.backgroundColor=this.colorInterpolation[i].toHexString();element.style.width="30px";element.style.height="15px";element.style.cssFloat="left";element.style.marginRight="10px";this.legendDiv.appendChild(element);element=document.createElement("div");element.innerHTML=this.classification.bins[i].label;this.legendDiv.appendChild(element);element=document.createElement("div");element.style.clear="left";this.legendDiv.appendChild(element);}},CLASS_NAME:"mapfish.GeoStat.Choropleth"});mapfish.GeoStat.ProportionalSymbol=OpenLayers.Class(mapfish.GeoStat,{minSize:2,maxSize:20,minVal:null,maxVal:null,initialize:function(map,options){mapfish.GeoStat.prototype.initialize.apply(this,arguments);},updateOptions:function(newOptions){var oldOptions=OpenLayers.Util.extend({},this.options);this.addOptions(newOptions);if(newOptions&&newOptions.indicator!=oldOptions.indicator){this.setClassification();}},setClassification:function(){var values=[];var features=this.layer.features;for(var i=0;i<features.length;i++){values.push(features[i].attributes[this.indicator]);}
var dist=new mapfish.GeoStat.Distribution(values);this.minVal=dist.minVal;this.maxVal=dist.maxVal;},applyClassification:function(options){if(options&&options.resetClassification){this.setClassification();}
var calculateRadius=OpenLayers.Function.bind(function(feature){var value=feature.attributes[this.indicator];var size=(value-this.minVal)/(this.maxVal-this.minVal)*(this.maxSize-this.minSize)+this.minSize;return size;},this);this.extendStyle(null,{'pointRadius':'${calculateRadius}'},{'calculateRadius':calculateRadius});mapfish.GeoStat.prototype.applyClassification.apply(this,arguments);},updateLegend:function(){if(!this.legendDiv){return;}
this.legendDiv.innerHTML="Needs to be done !";},CLASS_NAME:"mapfish.GeoStat.ProportionalSymbol"});Ext.namespace('mapfish.widgets','mapfish.widgets.editing');mapfish.widgets.editing.FeatureEditingPanel=Ext.extend(Ext.Panel,{COMBO_NONE_VALUE:"__combo_none_value__",COMBO_NONE_NAME:OpenLayers.i18n("mf.editing.comboNoneName"),map:null,layerConfig:null,combo:null,comboConfig:null,form:null,store:null,layerStoreMediator:null,grid:null,menu:null,layer:null,currentLayerId:null,modifyFeatureControl:null,drawFeatureControl:null,importBtn:null,commitBtn:null,deleteBtn:null,attributesFormDefaults:null,initComponent:function(){if(!this.map){OpenLayers.Console.error("map option for FeatureEditingPanel missing");}
if(!this.layerConfig){OpenLayers.Console.error("layerConfig option for FeatureEditingPanel missing");}
this.layout='form';this.tbar=this.createToolbar();mapfish.widgets.editing.FeatureEditingPanel.superclass.initComponent.apply(this);this.add(this.createLayerCombo());this.on("destroy",this.destroyResources,this);this.on("enable",this.setUp,this);this.on("disable",this.tearDown,this);this.on('expand',this.setUp,this);this.on('collapse',this.tearDown,this);this.on('activate',this.setUp,this);this.on('deactivate',this.tearDown,this);this.addEvents('beforecommit','commit');},createToolbar:function(){this.importBtn=new Ext.Button({text:OpenLayers.i18n("mf.editing.import"),tooltip:OpenLayers.i18n("mf.editing.importTooltip"),disabled:true,handler:function(){this.refreshFeatures();},scope:this});this.commitBtn=new Ext.Button({text:OpenLayers.i18n("mf.editing.commit"),tooltip:OpenLayers.i18n("mf.editing.commitTooltip"),disabled:true,handler:function(){this.commitFeatures();},scope:this});this.deleteBtn=new Ext.Button({text:OpenLayers.i18n("mf.editing.delete"),tooltip:OpenLayers.i18n("mf.editing.deleteTooltip"),disabled:true,handler:function(){this.deleteFeatures();},scope:this});var buttons=[this.importBtn,this.commitBtn,'-',this.deleteBtn];return new mapfish.widgets.toolbar.Toolbar({items:buttons,map:this.map});},refreshFeatures:function(){this.layer.strategies[0].update({force:true});},commitFeatures:function(){function onUpdateCreate(resp){if(this.modifyFeatureControl.feature){this.modifyFeatureControl.unselectFeature({feature:this.modifyFeatureControl.feature});}
var toDestroy=(resp.reqFeatures instanceof Array)?resp.reqFeatures:[resp.reqFeatures];this.layer.destroyFeatures(toDestroy);this.layer.addFeatures(resp.features);if(resp.last){this.fireEvent("commit");}}
function onDelete(resp){var features=resp.reqFeatures;if(!(features instanceof Array)){features=[features];}
this.layer.destroyFeatures(features);if(resp.last){this.fireEvent("commit");}}
this.fireEvent("beforecommit");this.layer.protocol.commit(this.layer.features,{"create":{scope:this,callback:onUpdateCreate},"update":{scope:this,callback:onUpdateCreate},"delete":{scope:this,callback:onDelete}});},deleteFeatures:function(){var feature;for(var i=this.layer.selectedFeatures.length-1;i>=0;i--){feature=this.layer.selectedFeatures[i];if(this.modifyFeatureControl.feature==feature){this.modifyFeatureControl.selectControl.unselect(feature);}
if(feature.state==OpenLayers.State.INSERT){this.layer.destroyFeatures([feature]);}else{feature.state=OpenLayers.State.DELETE;this.layerStoreMediator.featureStoreMediator.addFeatures(feature);this.layer.drawFeature(feature);}}},createLayerCombo:function(){var data=[[this.COMBO_NONE_VALUE,this.COMBO_NONE_NAME]];for(var i in this.layerConfig){data.push([i,this.layerConfig[i].text]);}
var store=new Ext.data.SimpleStore({fields:['value','text'],data:data});var comboConfig=OpenLayers.Util.applyDefaults({fieldLabel:OpenLayers.i18n("mf.editing.comboLabel"),name:"editingLayer",hiddenName:"editingLayer",displayField:"text",valueField:"value",mode:"local",triggerAction:"all",editable:false,store:store,listeners:{select:function(combo,record,index){this.prepareSwitchLayer(record.data.value);},scope:this}},this.comboConfig);this.combo=new Ext.form.ComboBox(comboConfig);return this.combo;},prepareSwitchLayer:function(id){if(this.isDirty()){Ext.Msg.confirm(OpenLayers.i18n("mf.editing.confirmMessageTitle"),OpenLayers.i18n("mf.editing.confirmMessage"),function(btn,text){if(btn=="yes"){this.switchLayer(id);}else{this.combo.setValue(this.currentLayerId);}},this);}else{this.switchLayer(id);}},switchLayer:function(id){if(id!=this.COMBO_NONE_VALUE){var config=this.layerConfig[id];this.configureLayer(config);this.createStore(config);this.createModifyFeatureControl();this.createDrawFeatureControl(config);this.createLayerStoreMediator();this.importBtn.enable();this.createForm(config);this.createGrid(config);}else{this.destroyAllResources();}
this.currentLayerId=id;},configureLayer:function(config){var layer=this.layer;if(!layer){layer=this.layer=this.createLayer();}
config.protocol.autoDestroy=false;layer.protocol=config.protocol;if(OpenLayers.Util.indexOf(this.map.layers,layer)<0){this.map.addLayer(layer);}
layer.destroyFeatures();},createLayer:function(){var layer=new OpenLayers.Layer.Vector(OpenLayers.Util.createUniqueID("mf.ediding"),{strategies:[this.createStrategy()],styleMap:this.createStyleMap(),displayInLayerSwitcher:false});layer.events.register("featureselected",this,this.onFeatureselected);layer.events.register("featureunselected",this,this.onFeatureunselected);layer.events.register("featureremoved",this,this.onFeatureremoved);layer.events.register("featuremodified",this,this.onFeaturemodified);return layer;},destroyLayer:function(){var layer=this.layer;if(layer){layer.destroy();this.layer=null;}},createStyleMap:function(){var styleMap=new OpenLayers.StyleMap();var context=function(feature){return{state:feature.state||OpenLayers.State.UNKNOWN};};var lookup={};lookup[OpenLayers.State.UNKNOWN]={};lookup[OpenLayers.State.UPDATE]={fillColor:"green",strokeColor:"green"};lookup[OpenLayers.State.DELETE]={fillColor:"red",strokeColor:"red",fillOpacity:0.2,strokeOpacity:0.3,display:""};lookup[OpenLayers.State.INSERT]={fillColor:"green",strokeColor:"green"};styleMap.addUniqueValueRules("default","state",lookup,context);styleMap.addUniqueValueRules("delete","state",lookup,context);return styleMap;},createStrategy:function(){return new OpenLayers.Strategy.BBOX({autoActivate:false});},onFeatureselected:function(obj){var f=obj.feature;this.deleteBtn.enable();this.selectInGrid(f);this.editAttributes(f);},onFeatureunselected:function(obj){this.deleteBtn.disable();this.unselectInGrid();this.form.getForm().reset();this.form.setDisabled(true);},createStore:function(config){this.destroyStore();var fields=[];var properties=config.featuretypes.properties;for(var i=0;i<properties.length;i++){fields.push(properties[i].getRecordType());}
var store=new Ext.data.GroupingStore({reader:new mapfish.widgets.data.FeatureReader({},fields),groupField:"state"});store.on("add",this.updateCommitBtnState,this);store.on("remove",this.updateCommitBtnState,this);store.on("clear",this.updateCommitBtnState,this);store.on("load",this.updateGridSelection,this);this.store=store;},destroyStore:function(){var store=this.store;if(store){store.destroy();this.store=null;}},updateCommitBtnState:function(store){this.commitBtn.setDisabled(!(store.getCount()>0));},updateGridSelection:function(store,records,options){for(var i=0;i<records.length;i++){var feature=records[i].data.feature;if(OpenLayers.Util.indexOf(this.layer.selectedFeatures,feature)>=0){this.selectInGrid(feature);}}},createModifyFeatureControl:function(){this.destroyModifyFeatureControl();var ctrl=new OpenLayers.Control.ModifyFeature(this.layer,{mode:OpenLayers.Control.ModifyFeature.RESHAPE|OpenLayers.Control.ModifyFeature.DRAG,title:OpenLayers.i18n("mf.editing.selectModifyFeature")});this.getTopToolbar().addControl(ctrl,{iconCls:'modifyfeature',toggleGroup:this.getId()+'map'});ctrl.activate();this.modifyFeatureControl=ctrl;},destroyModifyFeatureControl:function(){var ctrl=this.modifyFeatureControl;if(ctrl){this.getTopToolbar().removeControl(ctrl);ctrl.destroy();this.modifyFeatureControl=null;}},onFeatureremoved:function(obj){if(this.modifyFeatureControl&&obj.feature==this.modifyFeatureControl.feature){this.modifyFeatureControl.feature=null;}},onFeaturemodified:function(obj){var feature=obj.feature;if(feature.state!=OpenLayers.State.INSERT){feature.state=OpenLayers.State.UPDATE;}},createDrawFeatureControl:function(config){this.destroyDrawFeatureControl();var title,handler,multi=false,iconCls;switch(config.featuretypes.geometry.type){case OpenLayers.Geometry.MultiPoint:multi=true;case OpenLayers.Geometry.Point:title=OpenLayers.i18n("mf.editing.drawPointTitle");handler=OpenLayers.Handler.Point;iconCls="drawpoint";break;case OpenLayers.Geometry.MultiPolygon:multi=true;case OpenLayers.Geometry.Polygon:title=OpenLayers.i18n("mf.editing.drawPolygonTitle");handler=OpenLayers.Handler.Polygon;iconCls="drawpolygon";break;case OpenLayers.Geometry.MultiLineString:multi=true;case OpenLayers.Geometry.LineString:title=OpenLayers.i18n("mf.editing.drawLineTitle");handler=OpenLayers.Handler.Path;iconCls="drawline";break;}
var ctrl=new OpenLayers.Control.DrawFeature(this.layer,handler,{title:title,featureAdded:OpenLayers.Function.bind(this.onFeatureadded,this),handlerOptions:{multi:multi}});this.getTopToolbar().addControl(ctrl,{iconCls:iconCls,toggleGroup:this.getId()+'map'});this.drawFeatureControl=ctrl;},destroyDrawFeatureControl:function(){var ctrl=this.drawFeatureControl;if(ctrl){this.getTopToolbar().removeControl(ctrl);ctrl.destroy();this.drawFeatureControl=null;}},onFeatureadded:function(feature){feature.state=OpenLayers.State.INSERT;this.layer.events.triggerEvent("featuresadded",{features:[feature]});this.modifyFeatureControl.selectControl.select(feature);this.form.getForm().loadRecord(this.attributesFormDefaults);this.modifyFeatureControl.activate();},createLayerStoreMediator:function(){this.destroyLayerStoreMediator();var lsm=new mapfish.widgets.data.LayerStoreMediator({store:this.store,layer:this.layer,filter:function(feature){return feature.state!=null&&feature.state!=OpenLayers.State.UNKNOWN;}});lsm.activate();this.layerStoreMediator=lsm;},destroyLayerStoreMediator:function(){var lsm=this.layerStoreMediator;if(lsm){lsm.deactivate();this.layerStoreMediator=null;}},destroyAllResources:function(){this.destroyResources();this.destroyForm();this.destroyGrid();},destroyResources:function(){this.destroyStore();this.destroyModifyFeatureControl();this.destroyDrawFeatureControl();this.destroyLayerStoreMediator();this.destroyLayer();},setUp:function(){if(this.layer&&this.currentLayerId!=this.COMBO_NONE_VALUE){this.map.addLayer(this.layer)}
if(this.modifyFeatureControl){this.modifyFeatureControl.activate();}},tearDown:function(){if(this.modifyFeatureControl){this.modifyFeatureControl.deactivate();}
if(this.drawFeatureControl){this.drawFeatureControl.deactivate();}
var layer=this.layer;if(layer&&OpenLayers.Util.indexOf(this.map.layers,layer)>=0){this.map.removeLayer(layer)}},createForm:function(config){if(!config.featuretypes){OpenLayers.Console.error("no featuretypes exist for the given layer");return;}
var form=this.form;if(!form){var form=new Ext.FormPanel({title:OpenLayers.i18n("mf.editing.formTitle"),disabled:true,items:[{}],trackResetOnLoad:true,bodyStyle:'padding: 5px',buttons:[{text:'ok',handler:function(){if(!this.currentlyEditedFeature||!this.form.getForm().isDirty()){return;}
this.updateFeatureAttributes(this.currentlyEditedFeature);},scope:this}]});this.add(form);this.form=form;this.doLayout();}
var items=this.form.items.items
for(var i=items.length-1;i>=0;--i){var field=items[i];form.getForm().remove(field);form.remove(field);}
var properties=config.featuretypes.properties;var defaults={};for(i=0;i<properties.length;i++){var property=properties[i];form.add(property.getExtField());defaults[property.name]=property.defaultValue;}
form.doLayout();this.attributesFormDefaults=new Ext.data.Record(defaults);form.getForm().loadRecord(this.attributesFormDefaults);},destroyForm:function(){var form=this.form;if(form){form.destroy();this.form=null;}},updateFeatureAttributes:function(feature){var item,value,i,items=this.form.items.items;for(i=0;i<items.length;i++){item=items[i];if(!item.getValue){continue;}
if(item.isDirty&&item.isDirty()){value=item.getValue();feature.attributes[item.name]=value;feature.data[item.name]=value;}}
if(feature.state!=OpenLayers.State.INSERT){feature.state=OpenLayers.State.UPDATE;}
var fsm=this.layerStoreMediator.featureStoreMediator;fsm.addFeatures([feature]);},createGrid:function(config){var grid=this.grid;if(grid){this.destroyGrid();}
if(!config.featuretypes){OpenLayers.Console.error("no featuretypes exist for the given layer");return;}
if(!config.featuretypes.properties){OpenLayers.Console.error("no featuretypes properties are given for layer");return;}
var columns=[{header:OpenLayers.i18n("mf.editing.gridIdHeader"),dataIndex:"fid"}];Ext.each(config.featuretypes.properties,function(property){if(property.showInGrid){columns.push({header:property.label||property.name,dataIndex:property.name});}});columns.push({header:OpenLayers.i18n("mf.editing.gridStateHeader"),dataIndex:"state"});grid=new Ext.grid.GridPanel({title:OpenLayers.i18n("mf.editing.gridTitle"),height:200,store:this.store,view:new Ext.grid.GroupingView({groupTextTpl:'{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Features" : "Feature"]})'}),columns:columns});grid.on("rowcontextmenu",this.onContextClick,this);this.add(grid);this.doLayout();this.grid=grid;},destroyGrid:function(){if(this.grid){this.grid.destroy();this.grid=null;}},selectInGrid:function(feature){if(this.store&&this.grid){var index=this.store.findBy(function(rec,id){return rec.get("feature")==feature;});var record=this.store.getAt(index);this.grid.getSelectionModel().selectRecords([record]);if(index!=-1){this.grid.getView().focusRow(index);}}},unselectInGrid:function(){if(this.grid){this.grid.getSelectionModel().clearSelections();}},editAttributes:function(feature){this.currentlyEditedFeature=feature;this.form.getForm().reset();var obj=this.store.reader.readRecords([feature]);var record=obj.records[0];this.form.getForm().loadRecord(record);this.form.enable();},onContextClick:function(grid,index,e){var menu=this.menu;if(!menu){menu=new Ext.menu.Menu({id:'grid-ctx',items:[{text:OpenLayers.i18n('mf.editing.onContextClickMessage'),scope:this,handler:function(){this.modifyFeatureControl.selectControl.unselectAll();var feature=this.ctxRecord.data.feature;this.modifyFeatureControl.selectControl.select(feature);this.modifyFeatureControl.activate();}}]});menu.on('hide',this.onContextHide,this);this.menu=menu;}
e.stopEvent();if(this.ctxRow){Ext.fly(this.ctxRow).removeClass('x-node-ctx');this.ctxRow=null;}
this.ctxRow=grid.view.getRow(index);this.ctxRecord=grid.store.getAt(index);Ext.fly(this.ctxRow).addClass('x-node-ctx');menu.showAt(e.getXY());},onContextHide:function(){if(this.ctxRow){Ext.fly(this.ctxRow).removeClass('x-node-ctx');this.ctxRow=null;}},isDirty:function(){return(this.store&&this.store.getCount()>0);},setWindowOnbeforeunload:function(){window.onbeforeunload=OpenLayers.Function.bind(function(e){if(this.isDirty()){return OpenLayers.i18n("mf.editing.onBeforeUnloadMessage");}},this);}});Ext.reg('featureediting',mapfish.widgets.editing.FeatureEditingPanel);Ext.namespace('mapfish.widgets','mapfish.widgets.geostat');mapfish.widgets.geostat.Choropleth=Ext.extend(Ext.FormPanel,{layer:null,format:null,url:null,featureSelection:true,nameAttribute:null,indicator:null,indicatorText:null,coreComp:null,classificationApplied:false,ready:false,border:false,loadMask:false,labelGenerator:null,initComponent:function(){this.items=[{xtype:'combo',fieldLabel:'Indicator',name:'indicator',editable:false,valueField:'value',displayField:'text',mode:'local',emptyText:'Select an indicator',triggerAction:'all',store:new Ext.data.SimpleStore({fields:['value','text'],data:this.indicators}),listeners:{'select':{fn:function(){this.classify(false);},scope:this}}},{xtype:'combo',fieldLabel:'Method',name:'method',hiddenName:'method',editable:false,valueField:'value',displayField:'text',mode:'local',emptyText:'Select a method',triggerAction:'all',store:new Ext.data.SimpleStore({fields:['value','text'],data:[['CLASSIFY_BY_EQUAL_INTERVALS','Equal Intervals'],['CLASSIFY_BY_QUANTILS','Quantils']]}),listeners:{'select':{fn:function(){this.classify(false);},scope:this}}},{xtype:'combo',fieldLabel:'Number of classes',name:'numClasses',editable:false,valueField:'value',displayField:'value',mode:'local',value:5,triggerAction:'all',store:new Ext.data.SimpleStore({fields:['value'],data:[[0],[1],[2],[3],[4],[5],[6],[7],[8],[9]]}),listeners:{'select':{fn:function(){this.classify(false);},scope:this}}},{xtype:'colorfield',fieldLabel:'Color',name:'colorA',width:100,allowBlank:false,value:"#FFFF00",listeners:{'valid':{fn:function(){this.classify(false);},scope:this}}},{xtype:'colorfield',fieldLabel:'Color',name:'colorB',width:100,allowBlank:false,value:"#FF0000",listeners:{'valid':{fn:function(){this.classify(false);},scope:this}}}];mapfish.widgets.geostat.Choropleth.superclass.initComponent.apply(this);},requestSuccess:function(request){this.ready=true;if(this.loadMask&&this.rendered){this.loadMask.hide();}},requestFailure:function(request){OpenLayers.Console.error('Ajax request failed');},getColors:function(){var colorA=new mapfish.ColorRgb();colorA.setFromHex(this.form.findField('colorA').getValue());var colorB=new mapfish.ColorRgb();colorB.setFromHex(this.form.findField('colorB').getValue());return[colorA,colorB];},classify:function(exception){if(!this.ready){if(exception){Ext.MessageBox.alert('Error','Component init not complete');}
return;}
var options={};this.indicator=this.form.findField('indicator').getValue();this.indicatorText=this.form.findField('indicator').getRawValue();options.indicator=this.indicator;if(!options.indicator){if(exception){Ext.MessageBox.alert('Error','You must choose an indicator');}
return;}
options.method=this.form.findField('method').getValue();if(!options.method){if(exception){Ext.MessageBox.alert('Error','You must choose a method');}
return;}
options.method=mapfish.GeoStat.Distribution[options.method];options.numClasses=this.form.findField('numClasses').getValue();options.colors=this.getColors();this.coreComp.updateOptions(options);this.coreComp.applyClassification();this.classificationApplied=true;},onRender:function(ct,position){mapfish.widgets.geostat.Choropleth.superclass.onRender.apply(this,arguments);if(this.loadMask){this.loadMask=new Ext.LoadMask(this.bwrap,this.loadMask);this.loadMask.show();}
var coreOptions={'layer':this.layer,'format':this.format,'url':this.url,'requestSuccess':this.requestSuccess.createDelegate(this),'requestFailure':this.requestFailure.createDelegate(this),'featureSelection':this.featureSelection,'nameAttribute':this.nameAttribute,'legendDiv':this.legendDiv,'labelGenerator':this.labelGenerator};this.coreComp=new mapfish.GeoStat.Choropleth(this.map,coreOptions);}});Ext.reg('choropleth',mapfish.widgets.geostat.Choropleth);Ext.namespace('mapfish.widgets','mapfish.widgets.geostat');mapfish.widgets.geostat.ProportionalSymbol=Ext.extend(Ext.FormPanel,{layer:null,format:null,url:null,featureSelection:true,nameAttribute:null,indicator:null,indicatorText:null,coreComp:null,classificationApplied:false,ready:false,border:false,loadMask:false,initComponent:function(){this.items=[{xtype:'combo',fieldLabel:'Indicator',name:'indicator',editable:false,valueField:'value',displayField:'text',mode:'local',emptyText:'select an indicator',triggerAction:'all',store:new Ext.data.SimpleStore({fields:['value','text'],data:this.indicators})},{xtype:'numberfield',fieldLabel:'Min Size',name:'minSize',width:30,value:2,maxValue:20},{xtype:'numberfield',fieldLabel:'Max Size',name:'maxSize',width:30,value:20,maxValue:50}];this.buttons=[{text:'OK',handler:this.classify,scope:this}];mapfish.widgets.geostat.ProportionalSymbol.superclass.initComponent.apply(this);},requestSuccess:function(request){this.ready=true;if(this.loadMask&&this.rendered){this.loadMask.hide();}},requestFailure:function(request){OpenLayers.Console.error('Ajax request failed');},classify:function(){if(!this.ready){if(exception){Ext.MessageBox.alert('Error','Component init not complete');}
return;}
this.indicator=this.form.findField('indicator').getValue();this.indicatorText=this.form.findField('indicator').getRawValue();if(!this.indicator){Ext.MessageBox.alert('Error','You must choose an indicator');return;}
var minSize=this.form.findField('minSize').getValue();var maxSize=this.form.findField('maxSize').getValue();this.coreComp.updateOptions({'indicator':this.indicator,'minSize':minSize,'maxSize':maxSize});this.coreComp.applyClassification();this.classificationApplied=true;},onRender:function(ct,position){mapfish.widgets.geostat.Choropleth.superclass.onRender.apply(this,arguments);if(this.loadMask){this.loadMask=new Ext.LoadMask(this.bwrap,this.loadMask);this.loadMask.show();}
this.coreComp=new mapfish.GeoStat.ProportionalSymbol(this.map,{'layer':this.layer,'format':this.format,'url':this.url,'requestSuccess':this.requestSuccess.createDelegate(this),'requestFailure':this.requestFailure.createDelegate(this),'featureSelection':this.featureSelection,'nameAttribute':this.nameAttribute});}});Ext.reg('proportionalsymbol',mapfish.widgets.geostat.ProportionalSymbol);
