
(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/data/FeatureReader.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/toolbar/Toolbar.js","widgets/toolbar/CheckItem.js","widgets/toolbar/MenuItem.js","widgets/editing/FeatureList.js","widgets/print/Base.js","widgets/print/SimpleForm.js","widgets/print/MultiPage.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.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.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.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.Searcher=OpenLayers.Class({initialize:function(){},getFilter:function(){},CLASS_NAME:"mapfish.Searcher"});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;}};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);mapfish.Strategy={};mapfish.Protocol.TriggerEventDecorator=OpenLayers.Class(OpenLayers.Protocol,{protocol:null,events:null,EVENT_TYPES:["crudtriggered","crudfinished","committriggered","commitfinished","clear"],initialize:function(options){OpenLayers.Protocol.prototype.initialize.call(this,options);this.events=new OpenLayers.Events(this,null,this.EVENT_TYPES);if(this.eventListeners instanceof Object){this.events.on(this.eventListeners);}},read:function(options){var newOptions=OpenLayers.Util.applyDefaults({callback:this.createCallback(this.handleCRUD,options),scope:null},options);this.events.triggerEvent("crudtriggered",{type:"read"});return this.protocol.read(newOptions);},create:function(features,options){var newOptions=OpenLayers.Util.applyDefaults({callback:this.createCallback(this.handleCRUD,options),scope:null},options);this.events.triggerEvent("crudtriggered",{type:"create"});return this.protocol.create(features,newOptions);},update:function(features,options){var newOptions=OpenLayers.Util.applyDefaults({callback:this.createCallback(this.handleCRUD,options),scope:null},options);this.events.triggerEvent("crudtriggered",{type:"update"});return this.protocol.update(features,newOptions);},"delete":function(feature,options){var newOptions=OpenLayers.Util.applyDefaults({callback:this.createCallback(this.handleCRUD,options),scope:null},options);this.events.triggerEvent("crudtriggered",{type:"delete"});return this.protocol["delete"](feature,newOptions);},commit:function(features,options){var newOptions=OpenLayers.Util.applyDefaults({callback:this.createCallback(this.handleCommit,options),scope:null},options);this.events.triggerEvent("committriggered");return this.protocol.commit(features,newOptions);},createCallback:function(method,options){return OpenLayers.Function.bind(method,this,options);},handleCRUD:function(options,response){if(options&&options.callback){options.callback.call(options.scope,response);}
this.events.triggerEvent("crudfinished",response);},handleCommit:function(options){if(options.callback){options.callback.call(options.scope);}
this.events.triggerEvent("commitfinished");},clear:function(){this.events.triggerEvent("clear");},CLASS_NAME:"mapfish.Protocol.TriggerEventDecorator"});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','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.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.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);}}}}};mapfish.Searcher.Map=OpenLayers.Class(mapfish.Searcher,OpenLayers.Control,{protocol:null,mode:null,searchTolerance:3,searchToleranceUnits:'pixels',pixelTolerance:2,delay:300,boxDivClassName:"olHandlerBoxZoomBox",displayDefaultPopup:false,onMouseMove:function(evt){},position:null,popupLonLat:null,response: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.popupLonLat=this.position.getCenterLonLat();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){if(this.response){var response=this.response;if(response.priv&&typeof response.priv.abort=="function"){response.priv.abort();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/);},getFilter:function(){var filter=null;if(this.position){if(this.position instanceof OpenLayers.Bounds){filter=new OpenLayers.Filter.Spatial({type:OpenLayers.Filter.Spatial.BBOX,value:this.position});}else{var tolerance=this.searchTolerance;if(tolerance&&this.searchToleranceUnits=="pixels"){tolerance*=this.map.getResolution();}
var lonlat=this.map.getLonLatFromViewPortPx(this.position);filter={lon:lonlat.lon,lat:lonlat.lat};if(tolerance){filter.tolerance=tolerance;}}
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";mapfish.Protocol.MergeFilterDecorator=OpenLayers.Class(OpenLayers.Protocol,{searchers:null,protocol:null,initialize:function(options){this.searchers=[];OpenLayers.Protocol.prototype.initialize.call(this,options);},register:function(searcher){this.searchers.push(searcher);},unregister:function(searcher){OpenLayers.Util.removeItem(searcher,this.searchers);},"create":function(features,options){return this.protocol.create(features,options);},"read":function(options){options.filter=this.mergeFilters(options.filter||options.params,options.searcher);delete options.searcher;return this.protocol.read(options);},mergeFilters:function(filter,searcher){var i,len,s;for(i=0,len=this.searchers.length;i<len;i++){s=this.searchers[i];if(s!=searcher){filter=this.toFilter(s.getFilter(),filter);}}
return filter;},toFilter:function(obj,filter){if(!obj){return filter;}
if(!filter){filter=new OpenLayers.Filter.Logical({type:OpenLayers.Filter.Logical.AND});}else if(!this.isFilter(filter)){filter=this.fromObjToFilter(filter);}else if(!this.isLogicalFilter(filter)){filter=new OpenLayers.Filter.Logical({type:OpenLayers.Filter.Logical.AND,filters:[filter]});}
var filters=filter.filters;if(this.isFilter(obj)){filters.push(obj);}else{filters.push(this.fromObjToFilter(obj));}
return filter;},fromObjToFilter:function(obj){var filters=[];for(var key in obj){filters.push(new OpenLayers.Filter.Comparison({type:OpenLayers.Filter.Comparison.EQUAL_TO,property:key,value:obj[key]}));}
return new OpenLayers.Filter.Logical({type:OpenLayers.Filter.Logical.AND,filters:filters});},isLogicalFilter:function(obj){return!!obj.CLASS_NAME&&!!obj.CLASS_NAME.match(/^OpenLayers\.Filter\.Logical/);},isFilter:function(obj){return!!obj.CLASS_NAME&&!!obj.CLASS_NAME.match(/^OpenLayers\.Filter/);},"update":function(features,options){return this.protocol.update(features,options);},"delete":function(features,options){return this.protocol["delete"](features,options);},commit:function(features,options){return this.protocol.commit(features,options);},CLASS_NAME:"mapfish.Protocol.MergeFilterDecorator"});Ext.namespace('mapfish.widgets','mapfish.widgets.data');mapfish.widgets.data.GridRowFeatureMediator=function(config){Ext.apply(this,config);if(!this.grid){OpenLayers.Console.error("no Ext.grid.GridPanel provided");return;}
if(!this.selectControl||this.selectControl.CLASS_NAME!="OpenLayers.Control.SelectFeature"){OpenLayers.Console.error("no OpenLayers.Control.SelectFeature provided");return;}
this.selectModel=this.grid.getSelectionModel();if(this.autoActivate){this.activate();}};mapfish.widgets.data.GridRowFeatureMediator.prototype={autoActivate:true,selectControl:null,grid:null,selectModel:null,active:false,activate:function(){if(!this.active){this.featureEventsOn();this.rowEventsOn();this.active=true;return true;}
return false;},deactivate:function(){if(this.active){this.featureEventsOff();this.rowEventsOff();this.active=false;return true;}
return false;},featureSelected:function(o){var r=this.grid.store.getById(o.feature.id);if(r){this.rowEventsOff();this.selectModel.selectRecords([r]);this.rowEventsOn();}},featureUnselected:function(o){var r=this.grid.store.getById(o.feature.id);if(r){this.rowEventsOff();this.selectModel.deselectRow(this.grid.store.indexOf(r));this.rowEventsOn();}},rowSelected:function(s,i,r){var f=this.selectControl.layer.getFeatureById(r.id);if(f){this.featureEventsOff();this.selectControl.select(f);this.featureEventsOn();}},rowDeselected:function(s,i,r){var f=this.selectControl.layer.getFeatureById(r.id);if(f){this.featureEventsOff();this.selectControl.unselect(f);this.featureEventsOn();}},rowEventsOff:function(){this.selectModel.un("rowselect",this.rowSelected,this);this.selectModel.un("rowdeselect",this.rowDeselected,this);},rowEventsOn:function(){this.selectModel.on("rowselect",this.rowSelected,this);this.selectModel.on("rowdeselect",this.rowDeselected,this);},featureEventsOff:function(){this.selectControl.layer.events.un({featureselected:this.featureSelected,featureunselected:this.featureUnselected,scope:this});},featureEventsOn:function(){this.selectControl.layer.events.on({featureselected:this.featureSelected,featureunselected:this.featureUnselected,scope:this});}};mapfish.Offline=function(){var EVENT_TYPES=["network","sync","synctask"];var syncTaskCounter=0;var numActiveSyncTasks=0;var activeSyncTaskIds={};function SyncTask(label,id){this.label=label;this.id=id;}
function setOnline(){this.isOnline=true;this.events.triggerEvent("network","online");}
function setOffline(){this.isOnline=false;this.events.triggerEvent("network","offline");}
function maybeNotifySyncDone(){if(numActiveSyncTasks>0||this.syncState==null)
return;this.isSynchronizing=false;if(this.syncState=="download"){setOffline.call(this);this.events.triggerEvent("sync","downloadDone");}else if(this.syncState=="upload"){this.events.triggerEvent("sync","uploadDone");}else{OpenLayers.Console.error("Unexpected state "+this.syncState);}
this.syncState=null;}
var off={isOnline:true,syncState:null,hasOfflineCache:false,events:null,goOffline:function(){if(!this.isOnline)
return;this.syncState="download";this.events.triggerEvent("sync","download");var self=this;setTimeout(function(){maybeNotifySyncDone.call(self);},100);},goOnline:function(){if(this.isOnline)
return;setOnline.call(this);this.syncState="upload";this.events.triggerEvent("sync","upload");var self=this;setTimeout(function(){maybeNotifySyncDone.call(self);},100);},addSyncTask:function(label){numActiveSyncTasks++;var syncTaskId=++syncTaskCounter;var syncTask=new SyncTask(label,syncTaskId);activeSyncTaskIds[syncTaskId]=syncTask;this.events.triggerEvent("synctask",{type:"syncTaskAdded",syncTask:syncTask});return syncTaskId;},syncTaskDone:function(syncTaskId){if(!activeSyncTaskIds[syncTaskId]){OpenLayers.Console.error(arguments.callee.name+": Unknown syncTaskId "+syncTaskId);return;}
this.events.triggerEvent("synctask",{type:"syncTaskDone",syncTask:activeSyncTaskIds[syncTaskId]});numActiveSyncTasks--;delete activeSyncTaskIds[syncTaskId];var self=this;setTimeout(function(){maybeNotifySyncDone.call(self);},0);}};off.events=new OpenLayers.Events(this,null,EVENT_TYPES,false);if(navigator&&navigator.onLine!=undefined){off.isOnline=navigator.onLine}
off.hasOfflineCache=!!(window.google&&google.gears);return off;}();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":if(filter.type!=OpenLayers.Filter.Spatial.BBOX){OpenLayers.Console.error('Unsupported spatial filter type '+
filter.type);return false;}
if(params["box"]){OpenLayers.Console.error('Filter contains multiple '+'Spatial BBOX entries');return false;}
params["box"]=filter.value.toBBOX();break;case"Comparison":if(params[filter.property]){OpenLayers.Console.error('Filter contains multiple Comparison '+'filters for the same property '+filer.property);return false;}
params[filter.property]=filter.value;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;break;}
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"});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,{initComponent:function(){var 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});combo.on('select',this.recenter,this);this.items=combo;mapfish.widgets.Shortcuts.superclass.initComponent.call(this);},onRender:function(container,position){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);mapfish.Strategy.ProtocolListener=OpenLayers.Class(OpenLayers.Strategy,{append:false,recenter:false,initialize:function(options){OpenLayers.Strategy.prototype.initialize.apply(this,[options]);},activate:function(){if(this.layer.protocol.CLASS_NAME!="mapfish.Protocol.TriggerEventDecorator"){OpenLayers.Console.error(["This strategy is to be used with a layer whose protocol ","is an instance of mapfish.Protocol.TriggerEventDecorator"].join(''));return false;}
var activated=OpenLayers.Strategy.prototype.activate.call(this);if(activated){this.layer.protocol.events.on({"crudfinished":this.onCrudfinished,"clear":this.onClear,scope:this});}
return activated;},deactivate:function(){var deactivated=OpenLayers.Strategy.prototype.deactivate.call(this);if(deactivated){this.layer.protocol.events.un({"crudfinished":this.onCrudfinished,"clear":this.onClear,scope:this});}
return deactivated;},onCrudfinished:function(response){if(response.requestType=="read"){this.addFeatures(response.features)}},addFeatures:function(features){if(!this.append){this.layer.destroyFeatures();}
if(features&&features.length>0){this.layer.addFeatures(features);if(this.recenter){this.layer.map.zoomToExtent(this.layer.getDataExtent())}}},onClear:function(){this.layer.destroyFeatures()},CLASS_NAME:"mapfish.Strategy.ProtocolListener"});Ext.namespace('mapfish.widgets','mapfish.widgets.data');mapfish.widgets.data.SearchStoreMediator=function(config){var store=config.store;delete config.store;Ext.apply(this,config);if(!this.protocol){OpenLayers.Console.error("config does not include a protocol property");}
if(this.protocol.CLASS_NAME!="mapfish.Protocol.TriggerEventDecorator"){OpenLayers.Console.error("the protocol config property does not reference a "+"TriggerEventDecorator protocol");}
this.featureStoreMediator=new mapfish.widgets.data.FeatureStoreMediator({store:store});if(this.autoActivate){this.activate();}};mapfish.widgets.data.SearchStoreMediator.prototype={protocol:null,append:true,filter:null,autoActivate:true,active:false,featureStoreMediator:null,activate:function(){if(!this.active){this.protocol.events.on({crudfinished:this.onSearchfinished,clear:this.onClear,scope:this});this.active=true;return true;}
return false;},deactivate:function(){if(this.active){this.protocol.events.un({crudfinished:this.onSearchfinished,clear:this.onClear,scope:this});this.active=false;return true;}
return false;},onSearchfinished:function(response){if(response.requestType=="read"&&response.success()){var features=response.features;if(features&&features.length>0){this.featureStoreMediator.addFeatures(features,{append:this.append,filter:this.filter});}}},onClear:function(){this.featureStoreMediator.removeFeatures();}};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);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);var self=this;control.events.on({"activate":function(){button.toggle(true);},"deactivate":function(){button.toggle(false);self.checkDefaultControl(button,control);}});}
this.add(button);this._buttons.push(button);return 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,control){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(){if(this.response){var response=this.response;if(response.priv&&typeof response.priv.abort=="function"){response.priv.abort();this.response=null;}}
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.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');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.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];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 getLegendParams={service:"WMS",version:"1.1.1",request:"GetLegendGraphic",exceptions:"application/vnd.ogc.se_inimage",format:"image/png"};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){var params=OpenLayers.Util.extend({LAYER:w},getLegendParams);var paramsString=OpenLayers.Util.getParameterString(params);iconUrl=l.url+paramsString;}
wmsChildren.push({text:w,checked:l.getVisibility(),icon:iconUrl,layerName:l.name+this.separator+w,children:[],cls:"cf-wms-node"});}}}
var className='';if(!l.displayInLayerSwitcher){className='x-hidden';}
layers.push({text:l.name,checked:l.getVisibility(),cls:className,layerName:(wmsChildren.length>0?null:l.name),children:wmsChildren});}
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;if(layers){isBaseLayer=true;Ext.each(layers,function(layer){if(!layer.isBaseLayer){isBaseLayer=false;return false;}},this);}
if(isBaseLayer||node.attributes.radio){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);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();this.addListener("dragdrop",function(){this._updateOrder(arguments);},this);if(!this._automaticModel){this._handleModelChange(null,null);if(this.enableDD)
this._updateOrder();}},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);OpenLayers.Util.extend(OpenLayers.Lang.en,{'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.popupBlocked':'Popup windows are blocked by your browser.<br />'+'<br />Use this url to download your document:','mf.print.noPage':'No page selected, click on the "Add page" button to add one.','mf.error':'Error','mf.warning':'Warning','mf.information':'Information'});
