WME OpenLayers Library Upgrade

Adds all features missing in the light version of OpenLayers 2.12

As of 28/06/2016. See the latest version.

// ==UserScript==
// @name        WME OpenLayers Library Upgrade
// @author      Tom 'Glodenox' Puttemans
// @namespace   http://www.tomputtemans.com/
// @description Adds all features missing in the light version of OpenLayers 2.12
// @include     /^https:\/\/(www|editor-beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor\/.*$/
// @version     0.0.1
// @grant       none
// ==/UserScript==

/*
  OpenLayers.js -- OpenLayers Map Viewer Library

  Copyright (c) 2006-2012 by OpenLayers Contributors
  Published under the 2-clause BSD license.
  See http://openlayers.org/dev/license.txt for the full text of the license, and http://openlayers.org/dev/authors.txt for full list of contributors.

  Includes compressed code under the following licenses:

  (For uncompressed versions of the code used, please see the
  OpenLayers Github repository: <https://github.com/openlayers/openlayers>)
*/
OpenLayers.Format.CSWGetRecords = function (a) {
  var a = OpenLayers.Util.applyDefaults(a, OpenLayers.Format.CSWGetRecords.DEFAULTS),
  b = OpenLayers.Format.CSWGetRecords['v' + a.version.replace(/\./g, '_')];
  if (!b) throw 'Unsupported CSWGetRecords version: ' + a.version;
  return new b(a)
};
OpenLayers.Format.CSWGetRecords.DEFAULTS = {
  version: '2.0.2'
};
OpenLayers.Events.buttonclick = OpenLayers.Class({
  target: null,
  events: 'mousedown mouseup click dblclick touchstart touchmove touchend keydown'.split(' '),
  startRegEx: /^mousedown|touchstart$/,
  cancelRegEx: /^touchmove$/,
  completeRegEx: /^mouseup|touchend$/,
  initialize: function (a) {
    this.target = a;
    for (a = this.events.length - 1; 0 <= a; --a) this.target.register(this.events[a], this, this.buttonClick, {
      extension: !0
    })
  },
  destroy: function () {
    for (var a = this.events.length - 1; 0 <= a; --a) this.target.unregister(this.events[a], this, this.buttonClick);
    delete this.target
  },
  getPressedButton: function (a) {
    var b = 3,
    c;
    do {
      if (OpenLayers.Element.hasClass(a, 'olButton')) {
        c = a;
        break
      }
      a = a.parentNode
    } while (0 < --b && a);
    return c
  },
  buttonClick: function (a) {
    var b = !0,
    c = OpenLayers.Event.element(a);
    if (c && (OpenLayers.Event.isLeftClick(a) || !~a.type.indexOf('mouse'))) if (c = this.getPressedButton(c)) {
      if ('keydown' === a.type) switch (a.keyCode) {
        case OpenLayers.Event.KEY_RETURN:
        case OpenLayers.Event.KEY_SPACE:
          this.target.triggerEvent('buttonclick', {
            buttonElement: c
          }),
          OpenLayers.Event.stop(a),
          b = !1
      } else this.startEvt && (this.completeRegEx.test(a.type) && (b = OpenLayers.Util.pagePosition(c), this.target.triggerEvent('buttonclick', {
        buttonElement: c,
        buttonXY: {
          x: this.startEvt.clientX - b[0],
          y: this.startEvt.clientY - b[1]
        }
      })), this.cancelRegEx.test(a.type) && delete this.startEvt, OpenLayers.Event.stop(a), b = !1);
      this.startRegEx.test(a.type) && (this.startEvt = a, OpenLayers.Event.stop(a), b = !1)
    } else delete this.startEvt;
    return b
  }
});
OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
  element: null,
  ovmap: null,
  size: {
    w: 180,
    h: 90
  },
  layers: null,
  minRectSize: 15,
  minRectDisplayClass: 'RectReplacement',
  minRatio: 8,
  maxRatio: 32,
  mapOptions: null,
  autoPan: !1,
  handlers: null,
  resolutionFactor: 1,
  maximized: !1,
  initialize: function (a) {
    this.layers = [
    ];
    this.handlers = {
    };
    OpenLayers.Control.prototype.initialize.apply(this, [
      a
    ])
  },
  destroy: function () {
    this.mapDiv && (this.handlers.click && this.handlers.click.destroy(), this.handlers.drag && this.handlers.drag.destroy(), this.ovmap && this.ovmap.viewPortDiv.removeChild(this.extentRectangle), this.extentRectangle = null, this.rectEvents && (this.rectEvents.destroy(), this.rectEvents = null), this.ovmap && (this.ovmap.destroy(), this.ovmap = null), this.element.removeChild(this.mapDiv), this.mapDiv = null, this.div.removeChild(this.element), this.element = null, this.maximizeDiv && (this.div.removeChild(this.maximizeDiv), this.maximizeDiv = null), this.minimizeDiv && (this.div.removeChild(this.minimizeDiv), this.minimizeDiv = null), this.map.events.un({
      buttonclick: this.onButtonClick,
      moveend: this.update,
      changebaselayer: this.baseLayerDraw,
      scope: this
    }), OpenLayers.Control.prototype.destroy.apply(this, arguments))
  },
  draw: function () {
    OpenLayers.Control.prototype.draw.apply(this, arguments);
    if (0 === this.layers.length) if (this.map.baseLayer) this.layers = [
      this.map.baseLayer.clone()
    ];
     else return this.map.events.register('changebaselayer', this, this.baseLayerDraw),
    this.div;
    this.element = document.createElement('div');
    this.element.className = this.displayClass + 'Element';
    this.element.style.display = 'none';
    this.mapDiv = document.createElement('div');
    this.mapDiv.style.width = this.size.w + 'px';
    this.mapDiv.style.height = this.size.h + 'px';
    this.mapDiv.style.position = 'relative';
    this.mapDiv.style.overflow = 'hidden';
    this.mapDiv.id = OpenLayers.Util.createUniqueID('overviewMap');
    this.extentRectangle = document.createElement('div');
    this.extentRectangle.style.position = 'absolute';
    this.extentRectangle.style.zIndex = 1000;
    this.extentRectangle.className = this.displayClass + 'ExtentRectangle';
    this.element.appendChild(this.mapDiv);
    this.div.appendChild(this.element);
    if (this.outsideViewport) this.element.style.display = '';
     else {
      this.div.className += ' ' + this.displayClass + 'Container';
      var a = OpenLayers.Util.getImageLocation('layer-switcher-maximize.png');
      this.maximizeDiv = OpenLayers.Util.createAlphaImageDiv(this.displayClass + 'MaximizeButton', null, null, a, 'absolute');
      this.maximizeDiv.style.display = 'none';
      this.maximizeDiv.className = this.displayClass + 'MaximizeButton olButton';
      this.div.appendChild(this.maximizeDiv);
      a = OpenLayers.Util.getImageLocation('layer-switcher-minimize.png');
      this.minimizeDiv = OpenLayers.Util.createAlphaImageDiv('OpenLayers_Control_minimizeDiv', null, null, a, 'absolute');
      this.minimizeDiv.style.display = 'none';
      this.minimizeDiv.className = this.displayClass + 'MinimizeButton olButton';
      this.div.appendChild(this.minimizeDiv);
      this.minimizeControl()
    }
    this.map.getExtent() && this.update();
    this.map.events.on({
      buttonclick: this.onButtonClick,
      moveend: this.update,
      scope: this
    });
    this.maximized && this.maximizeControl();
    return this.div
  },
  baseLayerDraw: function () {
    this.draw();
    this.map.events.unregister('changebaselayer', this, this.baseLayerDraw)
  },
  rectDrag: function (a) {
    var b = this.handlers.drag.last.x - a.x,
    c = this.handlers.drag.last.y - a.y;
    if (0 != b || 0 != c) {
      var d = this.rectPxBounds.top,
      e = this.rectPxBounds.left,
      a = Math.abs(this.rectPxBounds.getHeight()),
      f = this.rectPxBounds.getWidth(),
      c = Math.max(0, d - c),
      c = Math.min(c, this.ovmap.size.h - this.hComp - a),
      b = Math.max(0, e - b),
      b = Math.min(b, this.ovmap.size.w - this.wComp - f);
      this.setRectPxBounds(new OpenLayers.Bounds(b, c + a, b + f, c))
    }
  },
  mapDivClick: function (a) {
    var b = this.rectPxBounds.getCenterPixel(),
    c = a.xy.x - b.x,
    d = a.xy.y - b.y,
    e = this.rectPxBounds.top,
    f = this.rectPxBounds.left,
    a = Math.abs(this.rectPxBounds.getHeight()),
    b = this.rectPxBounds.getWidth(),
    d = Math.max(0, e + d),
    d = Math.min(d, this.ovmap.size.h - a),
    c = Math.max(0, f + c),
    c = Math.min(c, this.ovmap.size.w - b);
    this.setRectPxBounds(new OpenLayers.Bounds(c, d + a, c + b, d));
    this.updateMapToRect()
  },
  onButtonClick: function (a) {
    a.buttonElement === this.minimizeDiv ? this.minimizeControl()  : a.buttonElement === this.maximizeDiv && this.maximizeControl()
  },
  maximizeControl: function (a) {
    this.element.style.display = '';
    this.showToggle(!1);
    null != a && OpenLayers.Event.stop(a)
  },
  minimizeControl: function (a) {
    this.element.style.display = 'none';
    this.showToggle(!0);
    null != a && OpenLayers.Event.stop(a)
  },
  showToggle: function (a) {
    this.maximizeDiv.style.display = a ? '' : 'none';
    this.minimizeDiv.style.display = a ? 'none' : ''
  },
  update: function () {
    null == this.ovmap && this.createMap();
    (this.autoPan || !this.isSuitableOverview()) && this.updateOverview();
    this.updateRectToMap()
  },
  isSuitableOverview: function () {
    var a = this.map.getExtent(),
    b = this.map.maxExtent,
    a = new OpenLayers.Bounds(Math.max(a.left, b.left), Math.max(a.bottom, b.bottom), Math.min(a.right, b.right), Math.min(a.top, b.top));
    this.ovmap.getProjection() != this.map.getProjection() && (a = a.transform(this.map.getProjectionObject(), this.ovmap.getProjectionObject()));
    b = this.ovmap.getResolution() / this.map.getResolution();
    return b > this.minRatio && b <= this.maxRatio && this.ovmap.getExtent().containsBounds(a)
  },
  updateOverview: function () {
    var a = this.map.getResolution(),
    b = this.ovmap.getResolution(),
    c = b / a;
    c > this.maxRatio ?
    b = this.minRatio * a : c <= this.minRatio && (b = this.maxRatio * a);
    this.ovmap.getProjection() != this.map.getProjection() ? (a = this.map.center.clone(), a.transform(this.map.getProjectionObject(), this.ovmap.getProjectionObject()))  : a = this.map.center;
    this.ovmap.setCenter(a, this.ovmap.getZoomForResolution(b * this.resolutionFactor));
    this.updateRectToMap()
  },
  createMap: function () {
    var a = OpenLayers.Util.extend({
      controls: [
      ],
      maxResolution: 'auto',
      fallThrough: !1
    }, this.mapOptions);
    this.ovmap = new OpenLayers.Map(this.mapDiv, a);
    this.ovmap.viewPortDiv.appendChild(this.extentRectangle);
    OpenLayers.Event.stopObserving(window, 'unload', this.ovmap.unloadDestroy);
    this.ovmap.addLayers(this.layers);
    this.ovmap.zoomToMaxExtent();
    this.wComp = (this.wComp = parseInt(OpenLayers.Element.getStyle(this.extentRectangle, 'border-left-width')) + parseInt(OpenLayers.Element.getStyle(this.extentRectangle, 'border-right-width'))) ? this.wComp : 2;
    this.hComp = (this.hComp = parseInt(OpenLayers.Element.getStyle(this.extentRectangle, 'border-top-width')) + parseInt(OpenLayers.Element.getStyle(this.extentRectangle, 'border-bottom-width'))) ?
    this.hComp : 2;
    this.handlers.drag = new OpenLayers.Handler.Drag(this, {
      move: this.rectDrag,
      done: this.updateMapToRect
    }, {
      map: this.ovmap
    });
    this.handlers.click = new OpenLayers.Handler.Click(this, {
      click: this.mapDivClick
    }, {
      single: !0,
      'double': !1,
      stopSingle: !0,
      stopDouble: !0,
      pixelTolerance: 1,
      map: this.ovmap
    });
    this.handlers.click.activate();
    this.rectEvents = new OpenLayers.Events(this, this.extentRectangle, null, !0);
    this.rectEvents.register('mouseover', this, function () {
      !this.handlers.drag.active && !this.map.dragging && this.handlers.drag.activate()
    });
    this.rectEvents.register('mouseout', this, function () {
      this.handlers.drag.dragging || this.handlers.drag.deactivate()
    });
    if (this.ovmap.getProjection() != this.map.getProjection()) {
      var a = this.map.getProjectionObject().getUnits() || this.map.units || this.map.baseLayer.units,
      b = this.ovmap.getProjectionObject().getUnits() || this.ovmap.units || this.ovmap.baseLayer.units;
      this.resolutionFactor = a && b ? OpenLayers.INCHES_PER_UNIT[a] / OpenLayers.INCHES_PER_UNIT[b] : 1
    }
  },
  updateRectToMap: function () {
    var a = this.getRectBoundsFromMapBounds(this.ovmap.getProjection() !=
    this.map.getProjection() ? this.map.getExtent().transform(this.map.getProjectionObject(), this.ovmap.getProjectionObject())  : this.map.getExtent());
    a && this.setRectPxBounds(a)
  },
  updateMapToRect: function () {
    var a = this.getMapBoundsFromRectBounds(this.rectPxBounds);
    this.ovmap.getProjection() != this.map.getProjection() && (a = a.transform(this.ovmap.getProjectionObject(), this.map.getProjectionObject()));
    this.map.panTo(a.getCenterLonLat())
  },
  setRectPxBounds: function (a) {
    var b = Math.max(a.top, 0),
    c = Math.max(a.left, 0),
    d = Math.min(a.top + Math.abs(a.getHeight()), this.ovmap.size.h - this.hComp),
    a = Math.min(a.left + a.getWidth(), this.ovmap.size.w - this.wComp),
    e = Math.max(a - c, 0),
    f = Math.max(d - b, 0);
    e < this.minRectSize || f < this.minRectSize ? (this.extentRectangle.className = this.displayClass + this.minRectDisplayClass, e = c + e / 2 - this.minRectSize / 2, this.extentRectangle.style.top = Math.round(b + f / 2 - this.minRectSize / 2) + 'px', this.extentRectangle.style.left = Math.round(e) + 'px', this.extentRectangle.style.height = this.minRectSize + 'px', this.extentRectangle.style.width = this.minRectSize + 'px')  : (this.extentRectangle.className = this.displayClass + 'ExtentRectangle', this.extentRectangle.style.top = Math.round(b) + 'px', this.extentRectangle.style.left = Math.round(c) + 'px', this.extentRectangle.style.height = Math.round(f) + 'px', this.extentRectangle.style.width = Math.round(e) + 'px');
    this.rectPxBounds = new OpenLayers.Bounds(Math.round(c), Math.round(d), Math.round(a), Math.round(b))
  },
  getRectBoundsFromMapBounds: function (a) {
    var b = this.getOverviewPxFromLonLat({
      lon: a.left,
      lat: a.bottom
    }),
    a = this.getOverviewPxFromLonLat({
      lon: a.right,
      lat: a.top
    }),
    c = null;
    b && a && (c = new OpenLayers.Bounds(b.x, b.y, a.x, a.y));
    return c
  },
  getMapBoundsFromRectBounds: function (a) {
    var b = this.getLonLatFromOverviewPx({
      x: a.left,
      y: a.bottom
    }),
    a = this.getLonLatFromOverviewPx({
      x: a.right,
      y: a.top
    });
    return new OpenLayers.Bounds(b.lon, b.lat, a.lon, a.lat)
  },
  getLonLatFromOverviewPx: function (a) {
    var b = this.ovmap.size,
    c = this.ovmap.getResolution(),
    d = this.ovmap.getExtent().getCenterLonLat();
    return {
      lon: d.lon + (a.x - b.w / 2) * c,
      lat: d.lat - (a.y - b.h / 2) * c
    }
  },
  getOverviewPxFromLonLat: function (a) {
    var b = this.ovmap.getResolution(),
    c = this.ovmap.getExtent();
    if (c) return {
      x: Math.round(1 / b * (a.lon - c.left)),
      y: Math.round(1 / b * (c.top - a.lat))
    }
  },
  CLASS_NAME: 'OpenLayers.Control.OverviewMap'
});
OpenLayers.Layer.Google = OpenLayers.Class(OpenLayers.Layer.EventPane, OpenLayers.Layer.FixedZoomLevels, {
  MIN_ZOOM_LEVEL: 0,
  MAX_ZOOM_LEVEL: 21,
  RESOLUTIONS: [
    1.40625,
    0.703125,
    0.3515625,
    0.17578125,
    0.087890625,
    0.0439453125,
    0.02197265625,
    0.010986328125,
    0.0054931640625,
    0.00274658203125,
    0.001373291015625,
    0.0006866455078125,
    0.00034332275390625,
    0.000171661376953125,
    0.0000858306884765625,
    0.00004291534423828125,
    0.00002145767211914062,
    0.00001072883605957031,
    0.00000536441802978515,
    0.00000268220901489257,
    0.000001341104507446289,
    6.705522537231445e-7
  ],
  type: null,
  wrapDateLine: !0,
  sphericalMercator: !1,
  version: null,
  initialize: function (a, b) {
    b = b || {
    };
    b.version || (b.version = 'function' === typeof GMap2 ? '2' : '3');
    var c = OpenLayers.Layer.Google['v' + b.version.replace(/\./g, '_')];
    if (c) OpenLayers.Util.applyDefaults(b, c);
     else throw 'Unsupported Google Maps API version: ' + b.version;
    OpenLayers.Util.applyDefaults(b, c.DEFAULTS);
    b.maxExtent && (b.maxExtent = b.maxExtent.clone());
    OpenLayers.Layer.EventPane.prototype.initialize.apply(this, [
      a,
      b
    ]);
    OpenLayers.Layer.FixedZoomLevels.prototype.initialize.apply(this, [
      a,
      b
    ]);
    this.sphericalMercator && (OpenLayers.Util.extend(this, OpenLayers.Layer.SphericalMercator), this.initMercatorParameters())
  },
  clone: function () {
    return new OpenLayers.Layer.Google(this.name, this.getOptions())
  },
  setVisibility: function (a) {
    var b = null == this.opacity ? 1 : this.opacity;
    OpenLayers.Layer.EventPane.prototype.setVisibility.apply(this, arguments);
    this.setOpacity(b)
  },
  display: function (a) {
    this._dragging || this.setGMapVisibility(a);
    OpenLayers.Layer.EventPane.prototype.display.apply(this, arguments)
  },
  moveTo: function (a, b, c) {
    this._dragging = c;
    OpenLayers.Layer.EventPane.prototype.moveTo.apply(this, arguments);
    delete this._dragging
  },
  setOpacity: function (a) {
    a !== this.opacity && (null != this.map && this.map.events.triggerEvent('changelayer', {
      layer: this,
      property: 'opacity'
    }), this.opacity = a);
    if (this.getVisibility()) {
      var b = this.getMapContainer();
      OpenLayers.Util.modifyDOMElement(b, null, null, null, null, null, null, a)
    }
  },
  destroy: function () {
    if (this.map) {
      this.setGMapVisibility(!1);
      var a = OpenLayers.Layer.Google.cache[this.map.id];
      a && 1 >= a.count && this.removeGMapElements()
    }
    OpenLayers.Layer.EventPane.prototype.destroy.apply(this, arguments)
  },
  removeGMapElements: function () {
    var a = OpenLayers.Layer.Google.cache[this.map.id];
    if (a) {
      var b = this.mapObject && this.getMapContainer();
      b && b.parentNode && b.parentNode.removeChild(b);
      (b = a.termsOfUse) && b.parentNode && b.parentNode.removeChild(b);
      (a = a.poweredBy) && a.parentNode && a.parentNode.removeChild(a)
    }
  },
  removeMap: function (a) {
    this.visibility && this.mapObject && this.setGMapVisibility(!1);
    var b = OpenLayers.Layer.Google.cache[a.id];
    b && (1 >= b.count ? (this.removeGMapElements(), delete OpenLayers.Layer.Google.cache[a.id])  : --b.count);
    delete this.termsOfUse;
    delete this.poweredBy;
    delete this.mapObject;
    delete this.dragObject;
    OpenLayers.Layer.EventPane.prototype.removeMap.apply(this, arguments)
  },
  getOLBoundsFromMapObjectBounds: function (a) {
    var b = null;
    null != a && (b = a.getSouthWest(), a = a.getNorthEast(), this.sphericalMercator ? (b = this.forwardMercator(b.lng(), b.lat()), a = this.forwardMercator(a.lng(), a.lat()))  : (b = new OpenLayers.LonLat(b.lng(), b.lat()), a = new OpenLayers.LonLat(a.lng(), a.lat())), b = new OpenLayers.Bounds(b.lon, b.lat, a.lon, a.lat));
    return b
  },
  getWarningHTML: function () {
    return OpenLayers.i18n('googleWarning')
  },
  getMapObjectCenter: function () {
    return this.mapObject.getCenter()
  },
  getMapObjectZoom: function () {
    return this.mapObject.getZoom()
  },
  getLongitudeFromMapObjectLonLat: function (a) {
    return this.sphericalMercator ? this.forwardMercator(a.lng(), a.lat()).lon : a.lng()
  },
  getLatitudeFromMapObjectLonLat: function (a) {
    return this.sphericalMercator ? this.forwardMercator(a.lng(), a.lat()).lat : a.lat()
  },
  getXFromMapObjectPixel: function (a) {
    return a.x
  },
  getYFromMapObjectPixel: function (a) {
    return a.y
  },
  CLASS_NAME: 'OpenLayers.Layer.Google'
});
OpenLayers.Layer.Google.cache = {
};
OpenLayers.Layer.Google.v2 = {
  termsOfUse: null,
  poweredBy: null,
  dragObject: null,
  loadMapObject: function () {
    this.type || (this.type = G_NORMAL_MAP);
    var a,
    b,
    c,
    d = OpenLayers.Layer.Google.cache[this.map.id];
    if (d) a = d.mapObject,
    b = d.termsOfUse,
    c = d.poweredBy,
    ++d.count;
     else {
      var d = this.map.viewPortDiv,
      e = document.createElement('div');
      e.id = this.map.id + '_GMap2Container';
      e.style.position = 'absolute';
      e.style.width = '100%';
      e.style.height = '100%';
      d.appendChild(e);
      try {
        a = new GMap2(e),
        b = e.lastChild,
        d.appendChild(b),
        b.style.zIndex = '1100',
        b.style.right = '',
        b.style.bottom = '',
        b.className = 'olLayerGoogleCopyright',
        c = e.lastChild,
        d.appendChild(c),
        c.style.zIndex = '1100',
        c.style.right = '',
        c.style.bottom = '',
        c.className = 'olLayerGooglePoweredBy gmnoprint'
      } catch (f) {
        throw f;
      }
      OpenLayers.Layer.Google.cache[this.map.id] = {
        mapObject: a,
        termsOfUse: b,
        poweredBy: c,
        count: 1
      }
    }
    this.mapObject = a;
    this.termsOfUse = b;
    this.poweredBy = c;
    - 1 === OpenLayers.Util.indexOf(this.mapObject.getMapTypes(), this.type) && this.mapObject.addMapType(this.type);
    'function' == typeof a.getDragObject ?
    this.dragObject = a.getDragObject()  : this.dragPanMapObject = null;
    !1 === this.isBaseLayer && this.setGMapVisibility('none' !== this.div.style.display)
  },
  onMapResize: function () {
    if (this.visibility && this.mapObject.isLoaded()) this.mapObject.checkResize();
     else {
      if (!this._resized) var a = this,
      b = GEvent.addListener(this.mapObject, 'load', function () {
        GEvent.removeListener(b);
        delete a._resized;
        a.mapObject.checkResize();
        a.moveTo(a.map.getCenter(), a.map.getZoom())
      });
      this._resized = !0
    }
  },
  setGMapVisibility: function (a) {
    var b = OpenLayers.Layer.Google.cache[this.map.id];
    if (b) {
      var c = this.mapObject.getContainer();
      !0 === a ? (this.mapObject.setMapType(this.type), c.style.display = '', this.termsOfUse.style.left = '', this.termsOfUse.style.display = '', this.poweredBy.style.display = '', b.displayed = this.id)  : (b.displayed === this.id && delete b.displayed, b.displayed || (c.style.display = 'none', this.termsOfUse.style.display = 'none', this.termsOfUse.style.left = '-9999px', this.poweredBy.style.display = 'none'))
    }
  },
  getMapContainer: function () {
    return this.mapObject.getContainer()
  },
  getMapObjectBoundsFromOLBounds: function (a) {
    var b = null;
    null != a && (b = this.sphericalMercator ? this.inverseMercator(a.bottom, a.left)  : new OpenLayers.LonLat(a.bottom, a.left), a = this.sphericalMercator ? this.inverseMercator(a.top, a.right)  : new OpenLayers.LonLat(a.top, a.right), b = new GLatLngBounds(new GLatLng(b.lat, b.lon), new GLatLng(a.lat, a.lon)));
    return b
  },
  setMapObjectCenter: function (a, b) {
    this.mapObject.setCenter(a, b)
  },
  dragPanMapObject: function (a, b) {
    this.dragObject.moveBy(new GSize( - a, b))
  },
  getMapObjectLonLatFromMapObjectPixel: function (a) {
    return this.mapObject.fromContainerPixelToLatLng(a)
  },
  getMapObjectPixelFromMapObjectLonLat: function (a) {
    return this.mapObject.fromLatLngToContainerPixel(a)
  },
  getMapObjectZoomFromMapObjectBounds: function (a) {
    return this.mapObject.getBoundsZoomLevel(a)
  },
  getMapObjectLonLatFromLonLat: function (a, b) {
    var c;
    this.sphericalMercator ? (c = this.inverseMercator(a, b), c = new GLatLng(c.lat, c.lon))  : c = new GLatLng(b, a);
    return c
  },
  getMapObjectPixelFromXY: function (a, b) {
    return new GPoint(a, b)
  }
};
OpenLayers.Format.WFST = function (a) {
  var a = OpenLayers.Util.applyDefaults(a, OpenLayers.Format.WFST.DEFAULTS),
  b = OpenLayers.Format.WFST['v' + a.version.replace(/\./g, '_')];
  if (!b) throw 'Unsupported WFST version: ' + a.version;
  return new b(a)
};
OpenLayers.Format.WFST.DEFAULTS = {
  version: '1.0.0'
};
OpenLayers.Format.WFST.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
  namespaces: {
    xlink: 'http://www.w3.org/1999/xlink',
    xsi: 'http://www.w3.org/2001/XMLSchema-instance',
    wfs: 'http://www.opengis.net/wfs',
    gml: 'http://www.opengis.net/gml',
    ogc: 'http://www.opengis.net/ogc',
    ows: 'http://www.opengis.net/ows'
  },
  defaultPrefix: 'wfs',
  version: null,
  schemaLocations: null,
  srsName: null,
  extractAttributes: !0,
  xy: !0,
  stateName: null,
  initialize: function (a) {
    this.stateName = {
    };
    this.stateName[OpenLayers.State.INSERT] = 'wfs:Insert';
    this.stateName[OpenLayers.State.UPDATE] = 'wfs:Update';
    this.stateName[OpenLayers.State.DELETE] = 'wfs:Delete';
    OpenLayers.Format.XML.prototype.initialize.apply(this, [
      a
    ])
  },
  getSrsName: function (a, b) {
    var c = b && b.srsName;
    c || (c = a && a.layer ? a.layer.projection.getCode()  : this.srsName);
    return c
  },
  read: function (a, b) {
    b = b || {
    };
    OpenLayers.Util.applyDefaults(b, {
      output: 'features'
    });
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    a && 9 == a.nodeType && (a = a.documentElement);
    var c = {
    };
    a && this.readNode(a, c, !0);
    c.features && 'features' === b.output && (c = c.features);
    return c
  },
  readers: {
    wfs: {
      FeatureCollection: function (a, b) {
        b.features = [
        ];
        this.readChildNodes(a, b)
      }
    }
  },
  write: function (a, b) {
    var c = this.writeNode('wfs:Transaction', {
      features: a,
      options: b
    }),
    d = this.schemaLocationAttr();
    d && this.setAttributeNS(c, this.namespaces.xsi, 'xsi:schemaLocation', d);
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      c
    ])
  },
  writers: {
    wfs: {
      GetFeature: function (a) {
        var b = this.createElementNSPlus('wfs:GetFeature', {
          attributes: {
            service: 'WFS',
            version: this.version,
            handle: a && a.handle,
            outputFormat: a && a.outputFormat,
            maxFeatures: a && a.maxFeatures,
            'xsi:schemaLocation': this.schemaLocationAttr(a)
          }
        });
        if ('string' == typeof this.featureType) this.writeNode('Query', a, b);
         else for (var c = 0, d = this.featureType.length; c < d; c++) a.featureType = this.featureType[c],
        this.writeNode('Query', a, b);
        return b
      },
      Transaction: function (a) {
        var a = a || {
        },
        b = a.options || {
        },
        c = this.createElementNSPlus('wfs:Transaction', {
          attributes: {
            service: 'WFS',
            version: this.version,
            handle: b.handle
          }
        }),
        d,
        e = a.features;
        if (e) {
          !0 === b.multi && OpenLayers.Util.extend(this.geometryTypes, {
            'OpenLayers.Geometry.Point': 'MultiPoint',
            'OpenLayers.Geometry.LineString': !0 === this.multiCurve ? 'MultiCurve' : 'MultiLineString',
            'OpenLayers.Geometry.Polygon': !0 === this.multiSurface ? 'MultiSurface' : 'MultiPolygon'
          });
          var f,
          g,
          a = 0;
          for (d = e.length; a < d; ++a) g = e[a],
          (f = this.stateName[g.state]) && this.writeNode(f, {
            feature: g,
            options: b
          }, c);
          !0 === b.multi && this.setGeometryTypes()
        }
        if (b.nativeElements) {
          a = 0;
          for (d = b.nativeElements.length; a < d; ++a) this.writeNode('wfs:Native', b.nativeElements[a], c)
        }
        return c
      },
      Native: function (a) {
        return this.createElementNSPlus('wfs:Native', {
          attributes: {
            vendorId: a.vendorId,
            safeToIgnore: a.safeToIgnore
          },
          value: a.value
        })
      },
      Insert: function (a) {
        var b = a.feature,
        a = a.options,
        a = this.createElementNSPlus('wfs:Insert', {
          attributes: {
            handle: a && a.handle
          }
        });
        this.srsName = this.getSrsName(b);
        this.writeNode('feature:_typeName', b, a);
        return a
      },
      Update: function (a) {
        var b = a.feature,
        a = a.options,
        a = this.createElementNSPlus('wfs:Update', {
          attributes: {
            handle: a && a.handle,
            typeName: (this.featureNS ? this.featurePrefix + ':' : '') + this.featureType
          }
        });
        this.featureNS && a.setAttribute('xmlns:' +
        this.featurePrefix, this.featureNS);
        var c = b.modified;
        if (null !== this.geometryName && (!c || void 0 !== c.geometry)) this.srsName = this.getSrsName(b),
        this.writeNode('Property', {
          name: this.geometryName,
          value: b.geometry
        }, a);
        for (var d in b.attributes) void 0 !== b.attributes[d] && (!c || !c.attributes || c.attributes && void 0 !== c.attributes[d]) && this.writeNode('Property', {
          name: d,
          value: b.attributes[d]
        }, a);
        this.writeNode('ogc:Filter', new OpenLayers.Filter.FeatureId({
          fids: [
            b.fid
          ]
        }), a);
        return a
      },
      Property: function (a) {
        var b = this.createElementNSPlus('wfs:Property');
        this.writeNode('Name', a.name, b);
        null !== a.value && this.writeNode('Value', a.value, b);
        return b
      },
      Name: function (a) {
        return this.createElementNSPlus('wfs:Name', {
          value: a
        })
      },
      Value: function (a) {
        var b;
        a instanceof OpenLayers.Geometry ? (b = this.createElementNSPlus('wfs:Value'), a = this.writeNode('feature:_geometry', a).firstChild, b.appendChild(a))  : b = this.createElementNSPlus('wfs:Value', {
          value: a
        });
        return b
      },
      Delete: function (a) {
        var b = a.feature,
        a = a.options,
        a = this.createElementNSPlus('wfs:Delete', {
          attributes: {
            handle: a && a.handle,
            typeName: (this.featureNS ? this.featurePrefix + ':' : '') + this.featureType
          }
        });
        this.featureNS && a.setAttribute('xmlns:' + this.featurePrefix, this.featureNS);
        this.writeNode('ogc:Filter', new OpenLayers.Filter.FeatureId({
          fids: [
            b.fid
          ]
        }), a);
        return a
      }
    }
  },
  schemaLocationAttr: function (a) {
    var a = OpenLayers.Util.extend({
      featurePrefix: this.featurePrefix,
      schema: this.schema
    }, a),
    b = OpenLayers.Util.extend({
    }, this.schemaLocations);
    a.schema && (b[a.featurePrefix] = a.schema);
    var a = [
    ],
    c,
    d;
    for (d in b) (c = this.namespaces[d]) && a.push(c + ' ' + b[d]);
    return a.join(' ') || void 0
  },
  setFilterProperty: function (a) {
    if (a.filters) for (var b = 0, c = a.filters.length; b < c; ++b) OpenLayers.Format.WFST.v1.prototype.setFilterProperty.call(this, a.filters[b]);
     else a instanceof OpenLayers.Filter.Spatial && !a.property && (a.property = this.geometryName)
  },
  CLASS_NAME: 'OpenLayers.Format.WFST.v1'
});
OpenLayers.Format.OGCExceptionReport = OpenLayers.Class(OpenLayers.Format.XML, {
  namespaces: {
    ogc: 'http://www.opengis.net/ogc'
  },
  regExes: {
    trimSpace: /^\s*|\s*$/g,
    removeSpace: /\s*/g,
    splitSpace: /\s+/,
    trimComma: /\s*,\s*/g
  },
  defaultPrefix: 'ogc',
  read: function (a) {
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    var b = {
      exceptionReport: null
    };
    a.documentElement && (this.readChildNodes(a, b), null === b.exceptionReport && (b = (new OpenLayers.Format.OWSCommon).read(a)));
    return b
  },
  readers: {
    ogc: {
      ServiceExceptionReport: function (a, b) {
        b.exceptionReport = {
          exceptions: [
          ]
        };
        this.readChildNodes(a, b.exceptionReport)
      },
      ServiceException: function (a, b) {
        var c = {
          code: a.getAttribute('code'),
          locator: a.getAttribute('locator'),
          text: this.getChildValue(a)
        };
        b.exceptions.push(c)
      }
    }
  },
  CLASS_NAME: 'OpenLayers.Format.OGCExceptionReport'
});
OpenLayers.Format.XML.VersionedOGC = OpenLayers.Class(OpenLayers.Format.XML, {
  defaultVersion: null,
  version: null,
  profile: null,
  errorProperty: null,
  name: null,
  stringifyOutput: !1,
  parser: null,
  initialize: function (a) {
    OpenLayers.Format.XML.prototype.initialize.apply(this, [
      a
    ]);
    a = this.CLASS_NAME;
    this.name = a.substring(a.lastIndexOf('.') + 1)
  },
  getVersion: function (a, b) {
    var c;
    a ? (c = this.version, c || (c = a.getAttribute('version'), c || (c = this.defaultVersion)))  : c = b && b.version || this.version || this.defaultVersion;
    return c
  },
  getParser: function (a) {
    var a = a || this.defaultVersion,
    b = this.profile ? '_' + this.profile : '';
    if (!this.parser || this.parser.VERSION != a) {
      var c = OpenLayers.Format[this.name]['v' + a.replace(/\./g, '_') + b];
      if (!c) throw 'Can\'t find a ' + this.name + ' parser for version ' + a + b;
      this.parser = new c(this.options)
    }
    return this.parser
  },
  write: function (a, b) {
    this.parser = this.getParser(this.getVersion(null, b));
    var c = this.parser.write(a, b);
    return !1 === this.stringifyOutput ? c : OpenLayers.Format.XML.prototype.write.apply(this, [
      c
    ])
  },
  read: function (a, b) {
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    var c = this.getVersion(a.documentElement);
    this.parser = this.getParser(c);
    var d = this.parser.read(a, b);
    if (null !== this.errorProperty && void 0 === d[this.errorProperty]) {
      var e = new OpenLayers.Format.OGCExceptionReport;
      d.error = e.read(a)
    }
    d.version = c;
    return d
  },
  CLASS_NAME: 'OpenLayers.Format.XML.VersionedOGC'
});
OpenLayers.Filter.FeatureId = OpenLayers.Class(OpenLayers.Filter, {
  fids: null,
  type: 'FID',
  initialize: function (a) {
    this.fids = [
    ];
    OpenLayers.Filter.prototype.initialize.apply(this, [
      a
    ])
  },
  evaluate: function (a) {
    for (var b = 0, c = this.fids.length; b < c; b++) if ((a.fid || a.id) == this.fids[b]) return !0;
    return !1
  },
  clone: function () {
    var a = new OpenLayers.Filter.FeatureId;
    OpenLayers.Util.extend(a, this);
    a.fids = this.fids.slice();
    return a
  },
  CLASS_NAME: 'OpenLayers.Filter.FeatureId'
});
OpenLayers.Format.Filter = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
  defaultVersion: '1.0.0',
  CLASS_NAME: 'OpenLayers.Format.Filter'
});
OpenLayers.Filter.Function = OpenLayers.Class(OpenLayers.Filter, {
  name: null,
  params: null,
  CLASS_NAME: 'OpenLayers.Filter.Function'
});
OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
  namespaces: {
    ogc: 'http://www.opengis.net/ogc',
    gml: 'http://www.opengis.net/gml',
    xlink: 'http://www.w3.org/1999/xlink',
    xsi: 'http://www.w3.org/2001/XMLSchema-instance'
  },
  defaultPrefix: 'ogc',
  schemaLocation: null,
  initialize: function (a) {
    OpenLayers.Format.XML.prototype.initialize.apply(this, [
      a
    ])
  },
  read: function (a) {
    var b = {
    };
    this.readers.ogc.Filter.apply(this, [
      a,
      b
    ]);
    return b.filter
  },
  readers: {
    ogc: {
      _expression: function (a) {
        for (var b = '', c = a.firstChild; c; c = c.nextSibling) switch (c.nodeType) {
          case 1:
            a = this.readNode(c);
            a.property ? b += '${' + a.property + '}' : void 0 !== a.value && (b += a.value);
            break;
          case 3:
          case 4:
            b += c.nodeValue
        }
        return b
      },
      Filter: function (a, b) {
        var c = {
          fids: [
          ],
          filters: [
          ]
        };
        this.readChildNodes(a, c);
        0 < c.fids.length ? b.filter = new OpenLayers.Filter.FeatureId({
          fids: c.fids
        })  : 0 < c.filters.length && (b.filter = c.filters[0])
      },
      FeatureId: function (a, b) {
        var c = a.getAttribute('fid');
        c && b.fids.push(c)
      },
      And: function (a, b) {
        var c = new OpenLayers.Filter.Logical({
          type: OpenLayers.Filter.Logical.AND
        });
        this.readChildNodes(a, c);
        b.filters.push(c)
      },
      Or: function (a, b) {
        var c = new OpenLayers.Filter.Logical({
          type: OpenLayers.Filter.Logical.OR
        });
        this.readChildNodes(a, c);
        b.filters.push(c)
      },
      Not: function (a, b) {
        var c = new OpenLayers.Filter.Logical({
          type: OpenLayers.Filter.Logical.NOT
        });
        this.readChildNodes(a, c);
        b.filters.push(c)
      },
      PropertyIsLessThan: function (a, b) {
        var c = new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Comparison.LESS_THAN
        });
        this.readChildNodes(a, c);
        b.filters.push(c)
      },
      PropertyIsGreaterThan: function (a, b) {
        var c = new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Comparison.GREATER_THAN
        });
        this.readChildNodes(a, c);
        b.filters.push(c)
      },
      PropertyIsLessThanOrEqualTo: function (a, b) {
        var c = new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO
        });
        this.readChildNodes(a, c);
        b.filters.push(c)
      },
      PropertyIsGreaterThanOrEqualTo: function (a, b) {
        var c = new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO
        });
        this.readChildNodes(a, c);
        b.filters.push(c)
      },
      PropertyIsBetween: function (a, b) {
        var c = new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Comparison.BETWEEN
        });
        this.readChildNodes(a, c);
        b.filters.push(c)
      },
      Literal: function (a, b) {
        b.value = OpenLayers.String.numericIf(this.getChildValue(a))
      },
      PropertyName: function (a, b) {
        b.property = this.getChildValue(a)
      },
      LowerBoundary: function (a, b) {
        b.lowerBoundary = OpenLayers.String.numericIf(this.readers.ogc._expression.call(this, a))
      },
      UpperBoundary: function (a, b) {
        b.upperBoundary = OpenLayers.String.numericIf(this.readers.ogc._expression.call(this, a))
      },
      Intersects: function (a, b) {
        this.readSpatial(a, b, OpenLayers.Filter.Spatial.INTERSECTS)
      },
      Within: function (a, b) {
        this.readSpatial(a, b, OpenLayers.Filter.Spatial.WITHIN)
      },
      Contains: function (a, b) {
        this.readSpatial(a, b, OpenLayers.Filter.Spatial.CONTAINS)
      },
      DWithin: function (a, b) {
        this.readSpatial(a, b, OpenLayers.Filter.Spatial.DWITHIN)
      },
      Distance: function (a, b) {
        b.distance = parseInt(this.getChildValue(a));
        b.distanceUnits = a.getAttribute('units')
      },
      Function: function () {
      }
    }
  },
  readSpatial: function (a, b, c) {
    c = new OpenLayers.Filter.Spatial({
      type: c
    });
    this.readChildNodes(a, c);
    c.value = c.components[0];
    delete c.components;
    b.filters.push(c)
  },
  writeOgcExpression: function (a, b) {
    if (a instanceof OpenLayers.Filter.Function) {
      var c = this.writeNode('Function', a, b);
      b.appendChild(c)
    } else this.writeNode('Literal', a, b);
    return b
  },
  write: function (a) {
    return this.writers.ogc.Filter.apply(this, [
      a
    ])
  },
  writeFeatureIdNodes: function (a, b) {
    for (var c = 0, d = a.fids.length; c < d; ++c) this.writeNode('FeatureId', a.fids[c], b)
  },
  writers: {
    ogc: {
      Filter: function (a) {
        var b = this.createElementNSPlus('ogc:Filter');
        'FID' === a.type ? OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, a, b)  : this.writeNode(this.getFilterType(a), a, b);
        return b
      },
      FeatureId: function (a) {
        return this.createElementNSPlus('ogc:FeatureId', {
          attributes: {
            fid: a
          }
        })
      },
      And: function (a) {
        for (var b = this.createElementNSPlus('ogc:And'), c, d = 0, e = a.filters.length; d < e; ++d) c = a.filters[d],
        'FID' === c.type ? OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, c, b)  : this.writeNode(this.getFilterType(c), c, b);
        return b
      },
      Or: function (a) {
        for (var b = this.createElementNSPlus('ogc:Or'), c, d = 0, e = a.filters.length; d < e; ++d) c = a.filters[d],
        'FID' === c.type ? OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, c, b)  : this.writeNode(this.getFilterType(c), c, b);
        return b
      },
      Not: function (a) {
        var b = this.createElementNSPlus('ogc:Not'),
        a = a.filters[0];
        'FID' === a.type ? OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, a, b)  : this.writeNode(this.getFilterType(a), a, b);
        return b
      },
      PropertyIsLessThan: function (a) {
        var b = this.createElementNSPlus('ogc:PropertyIsLessThan');
        this.writeNode('PropertyName', a, b);
        this.writeOgcExpression(a.value, b);
        return b
      },
      PropertyIsGreaterThan: function (a) {
        var b = this.createElementNSPlus('ogc:PropertyIsGreaterThan');
        this.writeNode('PropertyName', a, b);
        this.writeOgcExpression(a.value, b);
        return b
      },
      PropertyIsLessThanOrEqualTo: function (a) {
        var b = this.createElementNSPlus('ogc:PropertyIsLessThanOrEqualTo');
        this.writeNode('PropertyName', a, b);
        this.writeOgcExpression(a.value, b);
        return b
      },
      PropertyIsGreaterThanOrEqualTo: function (a) {
        var b = this.createElementNSPlus('ogc:PropertyIsGreaterThanOrEqualTo');
        this.writeNode('PropertyName', a, b);
        this.writeOgcExpression(a.value, b);
        return b
      },
      PropertyIsBetween: function (a) {
        var b = this.createElementNSPlus('ogc:PropertyIsBetween');
        this.writeNode('PropertyName', a, b);
        this.writeNode('LowerBoundary', a, b);
        this.writeNode('UpperBoundary', a, b);
        return b
      },
      PropertyName: function (a) {
        return this.createElementNSPlus('ogc:PropertyName', {
          value: a.property
        })
      },
      Literal: function (a) {
        return this.createElementNSPlus('ogc:Literal', {
          value: a
        })
      },
      LowerBoundary: function (a) {
        var b = this.createElementNSPlus('ogc:LowerBoundary');
        this.writeOgcExpression(a.lowerBoundary, b);
        return b
      },
      UpperBoundary: function (a) {
        var b = this.createElementNSPlus('ogc:UpperBoundary');
        this.writeNode('Literal', a.upperBoundary, b);
        return b
      },
      INTERSECTS: function (a) {
        return this.writeSpatial(a, 'Intersects')
      },
      WITHIN: function (a) {
        return this.writeSpatial(a, 'Within')
      },
      CONTAINS: function (a) {
        return this.writeSpatial(a, 'Contains')
      },
      DWITHIN: function (a) {
        var b = this.writeSpatial(a, 'DWithin');
        this.writeNode('Distance', a, b);
        return b
      },
      Distance: function (a) {
        return this.createElementNSPlus('ogc:Distance', {
          attributes: {
            units: a.distanceUnits
          },
          value: a.distance
        })
      },
      Function: function (a) {
        for (var b = this.createElementNSPlus('ogc:Function', {
          attributes: {
            name: a.name
          }
        }), a = a.params, c = 0, d = a.length; c < d; c++) this.writeOgcExpression(a[c], b);
        return b
      }
    }
  },
  getFilterType: function (a) {
    var b = this.filterMap[a.type];
    if (!b) throw 'Filter writing not supported for rule type: ' + a.type;
    return b
  },
  filterMap: {
    '&&': 'And',
    '||': 'Or',
    '!': 'Not',
    '==': 'PropertyIsEqualTo',
    '!=': 'PropertyIsNotEqualTo',
    '<': 'PropertyIsLessThan',
    '>': 'PropertyIsGreaterThan',
    '<=': 'PropertyIsLessThanOrEqualTo',
    '>=': 'PropertyIsGreaterThanOrEqualTo',
    '..': 'PropertyIsBetween',
    '~': 'PropertyIsLike',
    BBOX: 'BBOX',
    DWITHIN: 'DWITHIN',
    WITHIN: 'WITHIN',
    CONTAINS: 'CONTAINS',
    INTERSECTS: 'INTERSECTS',
    FID: 'FeatureId'
  },
  CLASS_NAME: 'OpenLayers.Format.Filter.v1'
});
OpenLayers.Format.GML = OpenLayers.Class(OpenLayers.Format.XML, {
  featureNS: 'http://mapserver.gis.umn.edu/mapserver',
  featurePrefix: 'feature',
  featureName: 'featureMember',
  layerName: 'features',
  geometryName: 'geometry',
  collectionName: 'FeatureCollection',
  gmlns: 'http://www.opengis.net/gml',
  extractAttributes: !0,
  xy: !0,
  initialize: function (a) {
    this.regExes = {
      trimSpace: /^\s*|\s*$/g,
      removeSpace: /\s*/g,
      splitSpace: /\s+/,
      trimComma: /\s*,\s*/g
    };
    OpenLayers.Format.XML.prototype.initialize.apply(this, [
      a
    ])
  },
  read: function (a) {
    'string' ==
    typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    for (var a = this.getElementsByTagNameNS(a.documentElement, this.gmlns, this.featureName), b = [
    ], c = 0; c < a.length; c++) {
      var d = this.parseFeature(a[c]);
      d && b.push(d)
    }
    return b
  },
  parseFeature: function (a) {
    for (var b = 'MultiPolygon Polygon MultiLineString LineString MultiPoint Point Envelope'.split(' '), c, d, e, f = 0; f < b.length; ++f) if (c = b[f], d = this.getElementsByTagNameNS(a, this.gmlns, c), 0 < d.length) {
      if (e = this.parseGeometry[c.toLowerCase()]) e = e.apply(this, [
        d[0]
      ]),
      this.internalProjection && this.externalProjection && e.transform(this.externalProjection, this.internalProjection);
       else throw new TypeError('Unsupported geometry type: ' + c);
      break
    }
    var g;
    c = this.getElementsByTagNameNS(a, this.gmlns, 'Box');
    for (f = 0; f < c.length; ++f) b = c[f],
    d = this.parseGeometry.box.apply(this, [
      b
    ]),
    b = b.parentNode,
    'boundedBy' === (b.localName || b.nodeName.split(':').pop()) ? g = d : e = d.toGeometry();
    var h;
    this.extractAttributes && (h = this.parseAttributes(a));
    h = new OpenLayers.Feature.Vector(e, h);
    h.bounds = g;
    h.gml = {
      featureType: a.firstChild.nodeName.split(':') [1],
      featureNS: a.firstChild.namespaceURI,
      featureNSPrefix: a.firstChild.prefix
    };
    for (var a = a.firstChild, i; a && !(1 == a.nodeType && (i = a.getAttribute('fid') || a.getAttribute('id'))); ) a = a.nextSibling;
    h.fid = i;
    return h
  },
  parseGeometry: {
    point: function (a) {
      var b,
      c;
      c = [
      ];
      b = this.getElementsByTagNameNS(a, this.gmlns, 'pos');
      0 < b.length && (c = b[0].firstChild.nodeValue, c = c.replace(this.regExes.trimSpace, ''), c = c.split(this.regExes.splitSpace));
      0 == c.length && (b = this.getElementsByTagNameNS(a, this.gmlns, 'coordinates'), 0 < b.length && (c = b[0].firstChild.nodeValue, c = c.replace(this.regExes.removeSpace, ''), c = c.split(',')));
      0 == c.length && (b = this.getElementsByTagNameNS(a, this.gmlns, 'coord'), 0 < b.length && (a = this.getElementsByTagNameNS(b[0], this.gmlns, 'X'), b = this.getElementsByTagNameNS(b[0], this.gmlns, 'Y'), 0 < a.length && 0 < b.length && (c = [
        a[0].firstChild.nodeValue,
        b[0].firstChild.nodeValue
      ])));
      2 == c.length && (c[2] = null);
      return this.xy ? new OpenLayers.Geometry.Point(c[0], c[1], c[2])  : new OpenLayers.Geometry.Point(c[1], c[0], c[2])
    },
    multipoint: function (a) {
      var a = this.getElementsByTagNameNS(a, this.gmlns, 'Point'),
      b = [
      ];
      if (0 < a.length) for (var c, d = 0; d < a.length; ++d) (c = this.parseGeometry.point.apply(this, [
        a[d]
      ])) && b.push(c);
      return new OpenLayers.Geometry.MultiPoint(b)
    },
    linestring: function (a, b) {
      var c,
      d;
      d = [
      ];
      var e = [
      ];
      c = this.getElementsByTagNameNS(a, this.gmlns, 'posList');
      if (0 < c.length) {
        d = this.getChildValue(c[0]);
        d = d.replace(this.regExes.trimSpace, '');
        d = d.split(this.regExes.splitSpace);
        var f = parseInt(c[0].getAttribute('dimension')),
        g,
        h,
        i;
        for (c = 0; c < d.length / f; ++c) g = c * f,
        h = d[g],
        i = d[g + 1],
        g = 2 == f ? null : d[g + 2],
        this.xy ? e.push(new OpenLayers.Geometry.Point(h, i, g))  : e.push(new OpenLayers.Geometry.Point(i, h, g))
      }
      if (0 == d.length && (c = this.getElementsByTagNameNS(a, this.gmlns, 'coordinates'), 0 < c.length)) {
        d = this.getChildValue(c[0]);
        d = d.replace(this.regExes.trimSpace, '');
        d = d.replace(this.regExes.trimComma, ',');
        f = d.split(this.regExes.splitSpace);
        for (c = 0; c < f.length; ++c) d = f[c].split(','),
        2 == d.length && (d[2] = null),
        this.xy ? e.push(new OpenLayers.Geometry.Point(d[0], d[1], d[2]))  : e.push(new OpenLayers.Geometry.Point(d[1], d[0], d[2]))
      }
      d = null;
      0 != e.length && (d = b ? new OpenLayers.Geometry.LinearRing(e)  : new OpenLayers.Geometry.LineString(e));
      return d
    },
    multilinestring: function (a) {
      var a = this.getElementsByTagNameNS(a, this.gmlns, 'LineString'),
      b = [
      ];
      if (0 < a.length) for (var c, d = 0; d < a.length; ++d) (c = this.parseGeometry.linestring.apply(this, [
        a[d]
      ])) && b.push(c);
      return new OpenLayers.Geometry.MultiLineString(b)
    },
    polygon: function (a) {
      var a = this.getElementsByTagNameNS(a, this.gmlns, 'LinearRing'),
      b = [
      ];
      if (0 < a.length) for (var c, d = 0; d < a.length; ++d) (c = this.parseGeometry.linestring.apply(this, [
        a[d],
        !0
      ])) && b.push(c);
      return new OpenLayers.Geometry.Polygon(b)
    },
    multipolygon: function (a) {
      var a = this.getElementsByTagNameNS(a, this.gmlns, 'Polygon'),
      b = [
      ];
      if (0 < a.length) for (var c, d = 0; d < a.length; ++d) (c = this.parseGeometry.polygon.apply(this, [
        a[d]
      ])) && b.push(c);
      return new OpenLayers.Geometry.MultiPolygon(b)
    },
    envelope: function (a) {
      var b = [
      ],
      c,
      d,
      e = this.getElementsByTagNameNS(a, this.gmlns, 'lowerCorner');
      if (0 < e.length) {
        c = [
        ];
        0 < e.length && (c = e[0].firstChild.nodeValue, c = c.replace(this.regExes.trimSpace, ''), c = c.split(this.regExes.splitSpace));
        2 == c.length && (c[2] = null);
        var f = this.xy ? new OpenLayers.Geometry.Point(c[0], c[1], c[2])  : new OpenLayers.Geometry.Point(c[1], c[0], c[2])
      }
      a = this.getElementsByTagNameNS(a, this.gmlns, 'upperCorner');
      if (0 < a.length) {
        c = [
        ];
        0 < a.length && (c = a[0].firstChild.nodeValue, c = c.replace(this.regExes.trimSpace, ''), c = c.split(this.regExes.splitSpace));
        2 == c.length && (c[2] = null);
        var g = this.xy ? new OpenLayers.Geometry.Point(c[0], c[1], c[2])  : new OpenLayers.Geometry.Point(c[1], c[0], c[2])
      }
      f && g && (b.push(new OpenLayers.Geometry.Point(f.x, f.y)), b.push(new OpenLayers.Geometry.Point(g.x, f.y)), b.push(new OpenLayers.Geometry.Point(g.x, g.y)), b.push(new OpenLayers.Geometry.Point(f.x, g.y)), b.push(new OpenLayers.Geometry.Point(f.x, f.y)), b = new OpenLayers.Geometry.LinearRing(b), d = new OpenLayers.Geometry.Polygon([b]));
      return d
    },
    box: function (a) {
      var b = this.getElementsByTagNameNS(a, this.gmlns, 'coordinates'),
      c = a = null;
      0 < b.length && (b = b[0].firstChild.nodeValue, b = b.split(' '), 2 == b.length && (a = b[0].split(','), c = b[1].split(',')));
      if (null !== a && null !== c) return new OpenLayers.Bounds(parseFloat(a[0]), parseFloat(a[1]), parseFloat(c[0]), parseFloat(c[1]))
    }
  },
  parseAttributes: function (a) {
    for (var b = {
    }, a = a.firstChild, c, d, e; a; ) {
      if (1 == a.nodeType) {
        a = a.childNodes;
        for (c = 0; c < a.length; ++c) if (d = a[c], 1 == d.nodeType) if (e = d.childNodes, 1 == e.length) {
          if (e = e[0], 3 == e.nodeType || 4 == e.nodeType) d = d.prefix ? d.nodeName.split(':') [1] : d.nodeName,
          e = e.nodeValue.replace(this.regExes.trimSpace, ''),
          b[d] = e
        } else b[d.nodeName.split(':').pop()] = null;
        break
      }
      a = a.nextSibling
    }
    return b
  },
  write: function (a) {
    OpenLayers.Util.isArray(a) || (a = [
      a
    ]);
    for (var b = this.createElementNS('http://www.opengis.net/wfs', 'wfs:' + this.collectionName), c = 0; c < a.length; c++) b.appendChild(this.createFeatureXML(a[c]));
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      b
    ])
  },
  createFeatureXML: function (a) {
    var b = this.buildGeometryNode(a.geometry),
    c = this.createElementNS(this.featureNS, this.featurePrefix + ':' + this.geometryName);
    c.appendChild(b);
    var b = this.createElementNS(this.gmlns, 'gml:' + this.featureName),
    d = this.createElementNS(this.featureNS, this.featurePrefix + ':' + this.layerName);
    d.setAttribute('fid', a.fid || a.id);
    d.appendChild(c);
    for (var e in a.attributes) {
      var c = this.createTextNode(a.attributes[e]),
      f = this.createElementNS(this.featureNS, this.featurePrefix + ':' + e.substring(e.lastIndexOf(':') + 1));
      f.appendChild(c);
      d.appendChild(f)
    }
    b.appendChild(d);
    return b
  },
  buildGeometryNode: function (a) {
    this.externalProjection && this.internalProjection && (a = a.clone(), a.transform(this.internalProjection, this.externalProjection));
    var b = a.CLASS_NAME;
    return this.buildGeometry[b.substring(b.lastIndexOf('.') + 1).toLowerCase()].apply(this, [
      a
    ])
  },
  buildGeometry: {
    point: function (a) {
      var b = this.createElementNS(this.gmlns, 'gml:Point');
      b.appendChild(this.buildCoordinatesNode(a));
      return b
    },
    multipoint: function (a) {
      for (var b = this.createElementNS(this.gmlns, 'gml:MultiPoint'), a = a.components, c, d, e = 0; e < a.length; e++) c = this.createElementNS(this.gmlns, 'gml:pointMember'),
      d = this.buildGeometry.point.apply(this, [
        a[e]
      ]),
      c.appendChild(d),
      b.appendChild(c);
      return b
    },
    linestring: function (a) {
      var b = this.createElementNS(this.gmlns, 'gml:LineString');
      b.appendChild(this.buildCoordinatesNode(a));
      return b
    },
    multilinestring: function (a) {
      for (var b = this.createElementNS(this.gmlns, 'gml:MultiLineString'), a = a.components, c, d, e = 0; e < a.length; ++e) c = this.createElementNS(this.gmlns, 'gml:lineStringMember'),
      d = this.buildGeometry.linestring.apply(this, [
        a[e]
      ]),
      c.appendChild(d),
      b.appendChild(c);
      return b
    },
    linearring: function (a) {
      var b = this.createElementNS(this.gmlns, 'gml:LinearRing');
      b.appendChild(this.buildCoordinatesNode(a));
      return b
    },
    polygon: function (a) {
      for (var b = this.createElementNS(this.gmlns, 'gml:Polygon'), a = a.components, c, d, e = 0; e < a.length; ++e) c = 0 == e ? 'outerBoundaryIs' : 'innerBoundaryIs',
      c = this.createElementNS(this.gmlns, 'gml:' + c),
      d = this.buildGeometry.linearring.apply(this, [
        a[e]
      ]),
      c.appendChild(d),
      b.appendChild(c);
      return b
    },
    multipolygon: function (a) {
      for (var b = this.createElementNS(this.gmlns, 'gml:MultiPolygon'), a = a.components, c, d, e = 0; e < a.length; ++e) c = this.createElementNS(this.gmlns, 'gml:polygonMember'),
      d = this.buildGeometry.polygon.apply(this, [
        a[e]
      ]),
      c.appendChild(d),
      b.appendChild(c);
      return b
    },
    bounds: function (a) {
      var b = this.createElementNS(this.gmlns, 'gml:Box');
      b.appendChild(this.buildCoordinatesNode(a));
      return b
    }
  },
  buildCoordinatesNode: function (a) {
    var b = this.createElementNS(this.gmlns, 'gml:coordinates');
    b.setAttribute('decimal', '.');
    b.setAttribute('cs', ',');
    b.setAttribute('ts', ' ');
    var c = [
    ];
    if (a instanceof OpenLayers.Bounds) c.push(a.left + ',' + a.bottom),
    c.push(a.right + ',' + a.top);
     else for (var a = a.components ? a.components : [
      a
    ], d = 0; d < a.length; d++) c.push(a[d].x + ',' + a[d].y);
    c = this.createTextNode(c.join(' '));
    b.appendChild(c);
    return b
  },
  CLASS_NAME: 'OpenLayers.Format.GML'
});
OpenLayers.Format.GML || (OpenLayers.Format.GML = {
});
OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
  namespaces: {
    gml: 'http://www.opengis.net/gml',
    xlink: 'http://www.w3.org/1999/xlink',
    xsi: 'http://www.w3.org/2001/XMLSchema-instance',
    wfs: 'http://www.opengis.net/wfs'
  },
  defaultPrefix: 'gml',
  schemaLocation: null,
  featureType: null,
  featureNS: null,
  geometryName: 'geometry',
  extractAttributes: !0,
  srsName: null,
  xy: !0,
  geometryTypes: null,
  singleFeatureType: null,
  regExes: {
    trimSpace: /^\s*|\s*$/g,
    removeSpace: /\s*/g,
    splitSpace: /\s+/,
    trimComma: /\s*,\s*/g,
    featureMember: /^(.*:)?featureMembers?$/
  },
  initialize: function (a) {
    OpenLayers.Format.XML.prototype.initialize.apply(this, [
      a
    ]);
    this.setGeometryTypes();
    a && a.featureNS && this.setNamespace('feature', a.featureNS);
    this.singleFeatureType = !a || typeof a.featureType === 'string'
  },
  read: function (a) {
    typeof a == 'string' && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    if (a && a.nodeType == 9) a = a.documentElement;
    var b = [
    ];
    this.readNode(a, {
      features: b
    }, true);
    if (b.length == 0) {
      var c = this.getElementsByTagNameNS(a, this.namespaces.gml, 'featureMember');
      if (c.length) for (var a = 0, d = c.length; a < d; ++a) this.readNode(c[a], {
        features: b
      }, true);
       else {
        c = this.getElementsByTagNameNS(a, this.namespaces.gml, 'featureMembers');
        c.length && this.readNode(c[0], {
          features: b
        }, true)
      }
    }
    return b
  },
  readNode: function (a, b, c) {
    if (c === true && this.autoConfig === true) {
      this.featureType = null;
      delete this.namespaceAlias[this.featureNS];
      delete this.namespaces.feature;
      this.featureNS = null
    }
    if (!this.featureNS && !(a.prefix in this.namespaces) && a.parentNode.namespaceURI == this.namespaces.gml && this.regExes.featureMember.test(a.parentNode.nodeName)) {
      this.featureType = a.nodeName.split(':').pop();
      this.setNamespace('feature', a.namespaceURI);
      this.featureNS = a.namespaceURI;
      this.autoConfig = true
    }
    return OpenLayers.Format.XML.prototype.readNode.apply(this, [
      a,
      b
    ])
  },
  readers: {
    gml: {
      featureMember: function (a, b) {
        this.readChildNodes(a, b)
      },
      featureMembers: function (a, b) {
        this.readChildNodes(a, b)
      },
      name: function (a, b) {
        b.name = this.getChildValue(a)
      },
      boundedBy: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        if (c.components && c.components.length > 0) b.bounds = c.components[0]
      },
      Point: function (a, b) {
        var c = {
          points: [
          ]
        };
        this.readChildNodes(a, c);
        if (!b.components) b.components = [
        ];
        b.components.push(c.points[0])
      },
      coordinates: function (a, b) {
        for (var c = this.getChildValue(a).replace(this.regExes.trimSpace, ''), c = c.replace(this.regExes.trimComma, ','), c = c.split(this.regExes.splitSpace), d, e = c.length, f = Array(e), g = 0; g < e; ++g) {
          d = c[g].split(',');
          f[g] = this.xy ? new OpenLayers.Geometry.Point(d[0], d[1], d[2])  : new OpenLayers.Geometry.Point(d[1], d[0], d[2])
        }
        b.points = f
      },
      coord: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        if (!b.points) b.points = [
        ];
        b.points.push(new OpenLayers.Geometry.Point(c.x, c.y, c.z))
      },
      X: function (a, b) {
        b.x = this.getChildValue(a)
      },
      Y: function (a, b) {
        b.y = this.getChildValue(a)
      },
      Z: function (a, b) {
        b.z = this.getChildValue(a)
      },
      MultiPoint: function (a, b) {
        var c = {
          components: [
          ]
        };
        this.readChildNodes(a, c);
        b.components = [
          new OpenLayers.Geometry.MultiPoint(c.components)
        ]
      },
      pointMember: function (a, b) {
        this.readChildNodes(a, b)
      },
      LineString: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        if (!b.components) b.components = [
        ];
        b.components.push(new OpenLayers.Geometry.LineString(c.points))
      },
      MultiLineString: function (a, b) {
        var c = {
          components: [
          ]
        };
        this.readChildNodes(a, c);
        b.components = [
          new OpenLayers.Geometry.MultiLineString(c.components)
        ]
      },
      lineStringMember: function (a, b) {
        this.readChildNodes(a, b)
      },
      Polygon: function (a, b) {
        var c = {
          outer: null,
          inner: [
          ]
        };
        this.readChildNodes(a, c);
        c.inner.unshift(c.outer);
        if (!b.components) b.components = [
        ];
        b.components.push(new OpenLayers.Geometry.Polygon(c.inner))
      },
      LinearRing: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        b.components = [
          new OpenLayers.Geometry.LinearRing(c.points)
        ]
      },
      MultiPolygon: function (a, b) {
        var c = {
          components: [
          ]
        };
        this.readChildNodes(a, c);
        b.components = [
          new OpenLayers.Geometry.MultiPolygon(c.components)
        ]
      },
      polygonMember: function (a, b) {
        this.readChildNodes(a, b)
      },
      GeometryCollection: function (a, b) {
        var c = {
          components: [
          ]
        };
        this.readChildNodes(a, c);
        b.components = [
          new OpenLayers.Geometry.Collection(c.components)
        ]
      },
      geometryMember: function (a, b) {
        this.readChildNodes(a, b)
      }
    },
    feature: {
      '*': function (a, b) {
        var c,
        d = a.localName || a.nodeName.split(':').pop();
        b.features ? !this.singleFeatureType && OpenLayers.Util.indexOf(this.featureType, d) !== - 1 ? c = '_typeName' : d === this.featureType && (c = '_typeName')  : a.childNodes.length == 0 || a.childNodes.length == 1 && a.firstChild.nodeType == 3 ? this.extractAttributes && (c = '_attribute')  : c = '_geometry';
        c && this.readers.feature[c].apply(this, [
          a,
          b
        ])
      },
      _typeName: function (a, b) {
        var c = {
          components: [
          ],
          attributes: {
          }
        };
        this.readChildNodes(a, c);
        if (c.name) c.attributes.name = c.name;
        var d = new OpenLayers.Feature.Vector(c.components[0], c.attributes);
        if (!this.singleFeatureType) {
          d.type = a.nodeName.split(':').pop();
          d.namespace = a.namespaceURI
        }
        var e = a.getAttribute('fid') || this.getAttributeNS(a, this.namespaces.gml, 'id');
        if (e) d.fid = e;
        this.internalProjection && (this.externalProjection && d.geometry) && d.geometry.transform(this.externalProjection, this.internalProjection);
        if (c.bounds) d.bounds = c.bounds;
        b.features.push(d)
      },
      _geometry: function (a, b) {
        if (!this.geometryName) this.geometryName = a.nodeName.split(':').pop();
        this.readChildNodes(a, b)
      },
      _attribute: function (a, b) {
        var c = a.localName || a.nodeName.split(':').pop(),
        d = this.getChildValue(a);
        b.attributes[c] = d
      }
    },
    wfs: {
      FeatureCollection: function (a, b) {
        this.readChildNodes(a, b)
      }
    }
  },
  write: function (a) {
    a = this.writeNode('gml:' + (OpenLayers.Util.isArray(a) ? 'featureMembers' : 'featureMember'), a);
    this.setAttributeNS(a, this.namespaces.xsi, 'xsi:schemaLocation', this.schemaLocation);
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      a
    ])
  },
  writers: {
    gml: {
      featureMember: function (a) {
        var b = this.createElementNSPlus('gml:featureMember');
        this.writeNode('feature:_typeName', a, b);
        return b
      },
      MultiPoint: function (a) {
        for (var b = this.createElementNSPlus('gml:MultiPoint'), a = a.components || [
          a
        ], c = 0, d = a.length; c < d; ++c) this.writeNode('pointMember', a[c], b);
        return b
      },
      pointMember: function (a) {
        var b = this.createElementNSPlus('gml:pointMember');
        this.writeNode('Point', a, b);
        return b
      },
      MultiLineString: function (a) {
        for (var b = this.createElementNSPlus('gml:MultiLineString'), a = a.components || [
          a
        ], c = 0, d = a.length; c < d; ++c) this.writeNode('lineStringMember', a[c], b);
        return b
      },
      lineStringMember: function (a) {
        var b = this.createElementNSPlus('gml:lineStringMember');
        this.writeNode('LineString', a, b);
        return b
      },
      MultiPolygon: function (a) {
        for (var b = this.createElementNSPlus('gml:MultiPolygon'), a = a.components || [
          a
        ], c = 0, d = a.length; c < d; ++c) this.writeNode('polygonMember', a[c], b);
        return b
      },
      polygonMember: function (a) {
        var b = this.createElementNSPlus('gml:polygonMember');
        this.writeNode('Polygon', a, b);
        return b
      },
      GeometryCollection: function (a) {
        for (var b = this.createElementNSPlus('gml:GeometryCollection'), c = 0, d = a.components.length; c < d; ++c) this.writeNode('geometryMember', a.components[c], b);
        return b
      },
      geometryMember: function (a) {
        var b = this.createElementNSPlus('gml:geometryMember'),
        a = this.writeNode('feature:_geometry', a);
        b.appendChild(a.firstChild);
        return b
      }
    },
    feature: {
      _typeName: function (a) {
        var b = this.createElementNSPlus('feature:' + this.featureType, {
          attributes: {
            fid: a.fid
          }
        });
        a.geometry && this.writeNode('feature:_geometry', a.geometry, b);
        for (var c in a.attributes) {
          var d = a.attributes[c];
          d != null && this.writeNode('feature:_attribute', {
            name: c,
            value: d
          }, b)
        }
        return b
      },
      _geometry: function (a) {
        this.externalProjection && this.internalProjection && (a = a.clone().transform(this.internalProjection, this.externalProjection));
        var b = this.createElementNSPlus('feature:' + this.geometryName),
        a = this.writeNode('gml:' + this.geometryTypes[a.CLASS_NAME], a, b);
        this.srsName && a.setAttribute('srsName', this.srsName);
        return b
      },
      _attribute: function (a) {
        return this.createElementNSPlus('feature:' + a.name, {
          value: a.value
        })
      }
    },
    wfs: {
      FeatureCollection: function (a) {
        for (var b = this.createElementNSPlus('wfs:FeatureCollection'), c = 0, d = a.length; c < d; ++c) this.writeNode('gml:featureMember', a[c], b);
        return b
      }
    }
  },
  setGeometryTypes: function () {
    this.geometryTypes = {
      'OpenLayers.Geometry.Point': 'Point',
      'OpenLayers.Geometry.MultiPoint': 'MultiPoint',
      'OpenLayers.Geometry.LineString': 'LineString',
      'OpenLayers.Geometry.MultiLineString': 'MultiLineString',
      'OpenLayers.Geometry.Polygon': 'Polygon',
      'OpenLayers.Geometry.MultiPolygon': 'MultiPolygon',
      'OpenLayers.Geometry.Collection': 'GeometryCollection'
    }
  },
  CLASS_NAME: 'OpenLayers.Format.GML.Base'
});
OpenLayers.Format.GML.v3 = OpenLayers.Class(OpenLayers.Format.GML.Base, {
  schemaLocation: 'http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd',
  curve: !1,
  multiCurve: !0,
  surface: !1,
  multiSurface: !0,
  initialize: function (a) {
    OpenLayers.Format.GML.Base.prototype.initialize.apply(this, [
      a
    ])
  },
  readers: {
    gml: OpenLayers.Util.applyDefaults({
      featureMembers: function (a, b) {
        this.readChildNodes(a, b)
      },
      Curve: function (a, b) {
        var c = {
          points: [
          ]
        };
        this.readChildNodes(a, c);
        b.components || (b.components = [
        ]);
        b.components.push(new OpenLayers.Geometry.LineString(c.points))
      },
      segments: function (a, b) {
        this.readChildNodes(a, b)
      },
      LineStringSegment: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        c.points && Array.prototype.push.apply(b.points, c.points)
      },
      pos: function (a, b) {
        var c = this.getChildValue(a).replace(this.regExes.trimSpace, '').split(this.regExes.splitSpace),
        c = this.xy ? new OpenLayers.Geometry.Point(c[0], c[1], c[2])  : new OpenLayers.Geometry.Point(c[1], c[0], c[2]);
        b.points = [
          c
        ]
      },
      posList: function (a, b) {
        for (var c = this.getChildValue(a).replace(this.regExes.trimSpace, '').split(this.regExes.splitSpace), d = parseInt(a.getAttribute('dimension')) || 2, e, f, g, h = Array(c.length / d), i = 0, j = c.length; i < j; i += d) e = c[i],
        f = c[i + 1],
        g = 2 == d ? void 0 : c[i + 2],
        h[i / d] = this.xy ? new OpenLayers.Geometry.Point(e, f, g)  : new OpenLayers.Geometry.Point(f, e, g);
        b.points = h
      },
      Surface: function (a, b) {
        this.readChildNodes(a, b)
      },
      patches: function (a, b) {
        this.readChildNodes(a, b)
      },
      PolygonPatch: function (a, b) {
        this.readers.gml.Polygon.apply(this, [
          a,
          b
        ])
      },
      exterior: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        b.outer = c.components[0]
      },
      interior: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        b.inner.push(c.components[0])
      },
      MultiCurve: function (a, b) {
        var c = {
          components: [
          ]
        };
        this.readChildNodes(a, c);
        0 < c.components.length && (b.components = [
          new OpenLayers.Geometry.MultiLineString(c.components)
        ])
      },
      curveMember: function (a, b) {
        this.readChildNodes(a, b)
      },
      MultiSurface: function (a, b) {
        var c = {
          components: [
          ]
        };
        this.readChildNodes(a, c);
        0 < c.components.length && (b.components = [
          new OpenLayers.Geometry.MultiPolygon(c.components)
        ])
      },
      surfaceMember: function (a, b) {
        this.readChildNodes(a, b)
      },
      surfaceMembers: function (a, b) {
        this.readChildNodes(a, b)
      },
      pointMembers: function (a, b) {
        this.readChildNodes(a, b)
      },
      lineStringMembers: function (a, b) {
        this.readChildNodes(a, b)
      },
      polygonMembers: function (a, b) {
        this.readChildNodes(a, b)
      },
      geometryMembers: function (a, b) {
        this.readChildNodes(a, b)
      },
      Envelope: function (a, b) {
        var c = {
          points: Array(2)
        };
        this.readChildNodes(a, c);
        b.components || (b.components = [
        ]);
        var d = c.points[0],
        c = c.points[1];
        b.components.push(new OpenLayers.Bounds(d.x, d.y, c.x, c.y))
      },
      lowerCorner: function (a, b) {
        var c = {
        };
        this.readers.gml.pos.apply(this, [
          a,
          c
        ]);
        b.points[0] = c.points[0]
      },
      upperCorner: function (a, b) {
        var c = {
        };
        this.readers.gml.pos.apply(this, [
          a,
          c
        ]);
        b.points[1] = c.points[0]
      }
    }, OpenLayers.Format.GML.Base.prototype.readers.gml),
    feature: OpenLayers.Format.GML.Base.prototype.readers.feature,
    wfs: OpenLayers.Format.GML.Base.prototype.readers.wfs
  },
  write: function (a) {
    a = this.writeNode('gml:' + (OpenLayers.Util.isArray(a) ? 'featureMembers' : 'featureMember'), a);
    this.setAttributeNS(a, this.namespaces.xsi, 'xsi:schemaLocation', this.schemaLocation);
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      a
    ])
  },
  writers: {
    gml: OpenLayers.Util.applyDefaults({
      featureMembers: function (a) {
        for (var b = this.createElementNSPlus('gml:featureMembers'), c = 0, d = a.length; c < d; ++c) this.writeNode('feature:_typeName', a[c], b);
        return b
      },
      Point: function (a) {
        var b = this.createElementNSPlus('gml:Point');
        this.writeNode('pos', a, b);
        return b
      },
      pos: function (a) {
        return this.createElementNSPlus('gml:pos', {
          value: this.xy ? a.x +
          ' ' + a.y : a.y + ' ' + a.x
        })
      },
      LineString: function (a) {
        var b = this.createElementNSPlus('gml:LineString');
        this.writeNode('posList', a.components, b);
        return b
      },
      Curve: function (a) {
        var b = this.createElementNSPlus('gml:Curve');
        this.writeNode('segments', a, b);
        return b
      },
      segments: function (a) {
        var b = this.createElementNSPlus('gml:segments');
        this.writeNode('LineStringSegment', a, b);
        return b
      },
      LineStringSegment: function (a) {
        var b = this.createElementNSPlus('gml:LineStringSegment');
        this.writeNode('posList', a.components, b);
        return b
      },
      posList: function (a) {
        for (var b = a.length, c = Array(b), d, e = 0; e < b; ++e) d = a[e],
        c[e] = this.xy ? d.x + ' ' + d.y : d.y + ' ' + d.x;
        return this.createElementNSPlus('gml:posList', {
          value: c.join(' ')
        })
      },
      Surface: function (a) {
        var b = this.createElementNSPlus('gml:Surface');
        this.writeNode('patches', a, b);
        return b
      },
      patches: function (a) {
        var b = this.createElementNSPlus('gml:patches');
        this.writeNode('PolygonPatch', a, b);
        return b
      },
      PolygonPatch: function (a) {
        var b = this.createElementNSPlus('gml:PolygonPatch', {
          attributes: {
            interpolation: 'planar'
          }
        });
        this.writeNode('exterior', a.components[0], b);
        for (var c = 1, d = a.components.length; c < d; ++c) this.writeNode('interior', a.components[c], b);
        return b
      },
      Polygon: function (a) {
        var b = this.createElementNSPlus('gml:Polygon');
        this.writeNode('exterior', a.components[0], b);
        for (var c = 1, d = a.components.length; c < d; ++c) this.writeNode('interior', a.components[c], b);
        return b
      },
      exterior: function (a) {
        var b = this.createElementNSPlus('gml:exterior');
        this.writeNode('LinearRing', a, b);
        return b
      },
      interior: function (a) {
        var b = this.createElementNSPlus('gml:interior');
        this.writeNode('LinearRing', a, b);
        return b
      },
      LinearRing: function (a) {
        var b = this.createElementNSPlus('gml:LinearRing');
        this.writeNode('posList', a.components, b);
        return b
      },
      MultiCurve: function (a) {
        for (var b = this.createElementNSPlus('gml:MultiCurve'), a = a.components || [
          a
        ], c = 0, d = a.length; c < d; ++c) this.writeNode('curveMember', a[c], b);
        return b
      },
      curveMember: function (a) {
        var b = this.createElementNSPlus('gml:curveMember');
        this.curve ? this.writeNode('Curve', a, b)  : this.writeNode('LineString', a, b);
        return b
      },
      MultiSurface: function (a) {
        for (var b = this.createElementNSPlus('gml:MultiSurface'), a = a.components || [
          a
        ], c = 0, d = a.length; c < d; ++c) this.writeNode('surfaceMember', a[c], b);
        return b
      },
      surfaceMember: function (a) {
        var b = this.createElementNSPlus('gml:surfaceMember');
        this.surface ? this.writeNode('Surface', a, b)  : this.writeNode('Polygon', a, b);
        return b
      },
      Envelope: function (a) {
        var b = this.createElementNSPlus('gml:Envelope');
        this.writeNode('lowerCorner', a, b);
        this.writeNode('upperCorner', a, b);
        this.srsName && b.setAttribute('srsName', this.srsName);
        return b
      },
      lowerCorner: function (a) {
        return this.createElementNSPlus('gml:lowerCorner', {
          value: this.xy ? a.left + ' ' + a.bottom : a.bottom + ' ' + a.left
        })
      },
      upperCorner: function (a) {
        return this.createElementNSPlus('gml:upperCorner', {
          value: this.xy ? a.right + ' ' + a.top : a.top + ' ' + a.right
        })
      }
    }, OpenLayers.Format.GML.Base.prototype.writers.gml),
    feature: OpenLayers.Format.GML.Base.prototype.writers.feature,
    wfs: OpenLayers.Format.GML.Base.prototype.writers.wfs
  },
  setGeometryTypes: function () {
    this.geometryTypes = {
      'OpenLayers.Geometry.Point': 'Point',
      'OpenLayers.Geometry.MultiPoint': 'MultiPoint',
      'OpenLayers.Geometry.LineString': !0 ===
      this.curve ? 'Curve' : 'LineString',
      'OpenLayers.Geometry.MultiLineString': !1 === this.multiCurve ? 'MultiLineString' : 'MultiCurve',
      'OpenLayers.Geometry.Polygon': !0 === this.surface ? 'Surface' : 'Polygon',
      'OpenLayers.Geometry.MultiPolygon': !1 === this.multiSurface ? 'MultiPolygon' : 'MultiSurface',
      'OpenLayers.Geometry.Collection': 'GeometryCollection'
    }
  },
  CLASS_NAME: 'OpenLayers.Format.GML.v3'
});
OpenLayers.Format.Filter.v1_1_0 = OpenLayers.Class(OpenLayers.Format.GML.v3, OpenLayers.Format.Filter.v1, {
  VERSION: '1.1.0',
  schemaLocation: 'http://www.opengis.net/ogc/filter/1.1.0/filter.xsd',
  initialize: function (a) {
    OpenLayers.Format.GML.v3.prototype.initialize.apply(this, [
      a
    ])
  },
  readers: {
    ogc: OpenLayers.Util.applyDefaults({
      PropertyIsEqualTo: function (a, b) {
        var c = a.getAttribute('matchCase'),
        c = new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Comparison.EQUAL_TO,
          matchCase: !('false' === c || '0' === c)
        });
        this.readChildNodes(a, c);
        b.filters.push(c)
      },
      PropertyIsNotEqualTo: function (a, b) {
        var c = a.getAttribute('matchCase'),
        c = new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Comparison.NOT_EQUAL_TO,
          matchCase: !('false' === c || '0' === c)
        });
        this.readChildNodes(a, c);
        b.filters.push(c)
      },
      PropertyIsLike: function (a, b) {
        var c = new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Comparison.LIKE
        });
        this.readChildNodes(a, c);
        var d = a.getAttribute('wildCard'),
        e = a.getAttribute('singleChar'),
        f = a.getAttribute('escapeChar');
        c.value2regex(d, e, f);
        b.filters.push(c)
      }
    }, OpenLayers.Format.Filter.v1.prototype.readers.ogc),
    gml: OpenLayers.Format.GML.v3.prototype.readers.gml,
    feature: OpenLayers.Format.GML.v3.prototype.readers.feature
  },
  writers: {
    ogc: OpenLayers.Util.applyDefaults({
      PropertyIsEqualTo: function (a) {
        var b = this.createElementNSPlus('ogc:PropertyIsEqualTo', {
          attributes: {
            matchCase: a.matchCase
          }
        });
        this.writeNode('PropertyName', a, b);
        this.writeOgcExpression(a.value, b);
        return b
      },
      PropertyIsNotEqualTo: function (a) {
        var b = this.createElementNSPlus('ogc:PropertyIsNotEqualTo', {
          attributes: {
            matchCase: a.matchCase
          }
        });
        this.writeNode('PropertyName', a, b);
        this.writeOgcExpression(a.value, b);
        return b
      },
      PropertyIsLike: function (a) {
        var b = this.createElementNSPlus('ogc:PropertyIsLike', {
          attributes: {
            matchCase: a.matchCase,
            wildCard: '*',
            singleChar: '.',
            escapeChar: '!'
          }
        });
        this.writeNode('PropertyName', a, b);
        this.writeNode('Literal', a.regex2value(), b);
        return b
      },
      BBOX: function (a) {
        var b = this.createElementNSPlus('ogc:BBOX');
        a.property && this.writeNode('PropertyName', a, b);
        var c = this.writeNode('gml:Envelope', a.value);
        a.projection && c.setAttribute('srsName', a.projection);
        b.appendChild(c);
        return b
      },
      SortBy: function (a) {
        for (var b = this.createElementNSPlus('ogc:SortBy'), c = 0, d = a.length; c < d; c++) this.writeNode('ogc:SortProperty', a[c], b);
        return b
      },
      SortProperty: function (a) {
        var b = this.createElementNSPlus('ogc:SortProperty');
        this.writeNode('ogc:PropertyName', a, b);
        this.writeNode('ogc:SortOrder', 'DESC' == a.order ? 'DESC' : 'ASC', b);
        return b
      },
      SortOrder: function (a) {
        return this.createElementNSPlus('ogc:SortOrder', {
          value: a
        })
      }
    }, OpenLayers.Format.Filter.v1.prototype.writers.ogc),
    gml: OpenLayers.Format.GML.v3.prototype.writers.gml,
    feature: OpenLayers.Format.GML.v3.prototype.writers.feature
  },
  writeSpatial: function (a, b) {
    var c = this.createElementNSPlus('ogc:' + b);
    this.writeNode('PropertyName', a, c);
    if (a.value instanceof OpenLayers.Filter.Function) this.writeNode('Function', a.value, c);
     else {
      var d;
      d = a.value instanceof OpenLayers.Geometry ? this.writeNode('feature:_geometry', a.value).firstChild : this.writeNode('gml:Envelope', a.value);
      a.projection && d.setAttribute('srsName', a.projection);
      c.appendChild(d)
    }
    return c
  },
  CLASS_NAME: 'OpenLayers.Format.Filter.v1_1_0'
});
OpenLayers.Format.OWSCommon = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
  defaultVersion: '1.0.0',
  getVersion: function (a) {
    var b = this.version;
    b || ((a = a.getAttribute('xmlns:ows')) && '1.1' === a.substring(a.lastIndexOf('/') + 1) && (b = '1.1.0'), b || (b = this.defaultVersion));
    return b
  },
  CLASS_NAME: 'OpenLayers.Format.OWSCommon'
});
OpenLayers.Format.OWSCommon.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
  regExes: {
    trimSpace: /^\s*|\s*$/g,
    removeSpace: /\s*/g,
    splitSpace: /\s+/,
    trimComma: /\s*,\s*/g
  },
  read: function (a, b) {
    OpenLayers.Util.applyDefaults(b, this.options);
    var c = {
    };
    this.readChildNodes(a, c);
    return c
  },
  readers: {
    ows: {
      Exception: function (a, b) {
        var c = {
          code: a.getAttribute('exceptionCode'),
          locator: a.getAttribute('locator'),
          texts: [
          ]
        };
        b.exceptions.push(c);
        this.readChildNodes(a, c)
      },
      ExceptionText: function (a, b) {
        var c = this.getChildValue(a);
        b.texts.push(c)
      },
      ServiceIdentification: function (a, b) {
        b.serviceIdentification = {
        };
        this.readChildNodes(a, b.serviceIdentification)
      },
      Title: function (a, b) {
        b.title = this.getChildValue(a)
      },
      Abstract: function (a, b) {
        b['abstract'] = this.getChildValue(a)
      },
      Keywords: function (a, b) {
        b.keywords = {
        };
        this.readChildNodes(a, b.keywords)
      },
      Keyword: function (a, b) {
        b[this.getChildValue(a)] = !0
      },
      ServiceType: function (a, b) {
        b.serviceType = {
          codeSpace: a.getAttribute('codeSpace'),
          value: this.getChildValue(a)
        }
      },
      ServiceTypeVersion: function (a, b) {
        b.serviceTypeVersion = this.getChildValue(a)
      },
      Fees: function (a, b) {
        b.fees = this.getChildValue(a)
      },
      AccessConstraints: function (a, b) {
        b.accessConstraints = this.getChildValue(a)
      },
      ServiceProvider: function (a, b) {
        b.serviceProvider = {
        };
        this.readChildNodes(a, b.serviceProvider)
      },
      ProviderName: function (a, b) {
        b.providerName = this.getChildValue(a)
      },
      ProviderSite: function (a, b) {
        b.providerSite = this.getAttributeNS(a, this.namespaces.xlink, 'href')
      },
      ServiceContact: function (a, b) {
        b.serviceContact = {
        };
        this.readChildNodes(a, b.serviceContact)
      },
      IndividualName: function (a, b) {
        b.individualName = this.getChildValue(a)
      },
      PositionName: function (a, b) {
        b.positionName = this.getChildValue(a)
      },
      ContactInfo: function (a, b) {
        b.contactInfo = {
        };
        this.readChildNodes(a, b.contactInfo)
      },
      Phone: function (a, b) {
        b.phone = {
        };
        this.readChildNodes(a, b.phone)
      },
      Voice: function (a, b) {
        b.voice = this.getChildValue(a)
      },
      Address: function (a, b) {
        b.address = {
        };
        this.readChildNodes(a, b.address)
      },
      DeliveryPoint: function (a, b) {
        b.deliveryPoint = this.getChildValue(a)
      },
      City: function (a, b) {
        b.city = this.getChildValue(a)
      },
      AdministrativeArea: function (a, b) {
        b.administrativeArea = this.getChildValue(a)
      },
      PostalCode: function (a, b) {
        b.postalCode = this.getChildValue(a)
      },
      Country: function (a, b) {
        b.country = this.getChildValue(a)
      },
      ElectronicMailAddress: function (a, b) {
        b.electronicMailAddress = this.getChildValue(a)
      },
      Role: function (a, b) {
        b.role = this.getChildValue(a)
      },
      OperationsMetadata: function (a, b) {
        b.operationsMetadata = {
        };
        this.readChildNodes(a, b.operationsMetadata)
      },
      Operation: function (a, b) {
        var c = a.getAttribute('name');
        b[c] = {
        };
        this.readChildNodes(a, b[c])
      },
      DCP: function (a, b) {
        b.dcp = {
        };
        this.readChildNodes(a, b.dcp)
      },
      HTTP: function (a, b) {
        b.http = {
        };
        this.readChildNodes(a, b.http)
      },
      Get: function (a, b) {
        b.get || (b.get = [
        ]);
        var c = {
          url: this.getAttributeNS(a, this.namespaces.xlink, 'href')
        };
        this.readChildNodes(a, c);
        b.get.push(c)
      },
      Post: function (a, b) {
        b.post || (b.post = [
        ]);
        var c = {
          url: this.getAttributeNS(a, this.namespaces.xlink, 'href')
        };
        this.readChildNodes(a, c);
        b.post.push(c)
      },
      Parameter: function (a, b) {
        b.parameters || (b.parameters = {
        });
        var c = a.getAttribute('name');
        b.parameters[c] = {
        };
        this.readChildNodes(a, b.parameters[c])
      },
      Constraint: function (a, b) {
        b.constraints || (b.constraints = {
        });
        var c = a.getAttribute('name');
        b.constraints[c] = {
        };
        this.readChildNodes(a, b.constraints[c])
      },
      Value: function (a, b) {
        b[this.getChildValue(a)] = !0
      },
      OutputFormat: function (a, b) {
        b.formats.push({
          value: this.getChildValue(a)
        });
        this.readChildNodes(a, b)
      },
      WGS84BoundingBox: function (a, b) {
        var c = {
        };
        c.crs = a.getAttribute('crs');
        b.BoundingBox ? b.BoundingBox.push(c)  : (b.projection = c.crs, c = b);
        this.readChildNodes(a, c)
      },
      BoundingBox: function (a, b) {
        this.readers.ows.WGS84BoundingBox.apply(this, [
          a,
          b
        ])
      },
      LowerCorner: function (a, b) {
        var c = this.getChildValue(a).replace(this.regExes.trimSpace, ''),
        c = c.replace(this.regExes.trimComma, ','),
        c = c.split(this.regExes.splitSpace);
        b.left = c[0];
        b.bottom = c[1]
      },
      UpperCorner: function (a, b) {
        var c = this.getChildValue(a).replace(this.regExes.trimSpace, ''),
        c = c.replace(this.regExes.trimComma, ','),
        c = c.split(this.regExes.splitSpace);
        b.right = c[0];
        b.top = c[1];
        b.bounds = new OpenLayers.Bounds(b.left, b.bottom, b.right, b.top);
        delete b.left;
        delete b.bottom;
        delete b.right;
        delete b.top
      },
      Language: function (a, b) {
        b.language = this.getChildValue(a)
      }
    }
  },
  writers: {
    ows: {
      BoundingBox: function (a) {
        var b = this.createElementNSPlus('ows:BoundingBox', {
          attributes: {
            crs: a.projection
          }
        });
        this.writeNode('ows:LowerCorner', a, b);
        this.writeNode('ows:UpperCorner', a, b);
        return b
      },
      LowerCorner: function (a) {
        return this.createElementNSPlus('ows:LowerCorner', {
          value: a.bounds.left + ' ' + a.bounds.bottom
        })
      },
      UpperCorner: function (a) {
        return this.createElementNSPlus('ows:UpperCorner', {
          value: a.bounds.right + ' ' + a.bounds.top
        })
      },
      Identifier: function (a) {
        return this.createElementNSPlus('ows:Identifier', {
          value: a
        })
      },
      Title: function (a) {
        return this.createElementNSPlus('ows:Title', {
          value: a
        })
      },
      Abstract: function (a) {
        return this.createElementNSPlus('ows:Abstract', {
          value: a
        })
      },
      OutputFormat: function (a) {
        return this.createElementNSPlus('ows:OutputFormat', {
          value: a
        })
      }
    }
  },
  CLASS_NAME: 'OpenLayers.Format.OWSCommon.v1'
});
OpenLayers.Format.OWSCommon.v1_0_0 = OpenLayers.Class(OpenLayers.Format.OWSCommon.v1, {
  namespaces: {
    ows: 'http://www.opengis.net/ows',
    xlink: 'http://www.w3.org/1999/xlink'
  },
  readers: {
    ows: OpenLayers.Util.applyDefaults({
      ExceptionReport: function (a, b) {
        b.success = !1;
        b.exceptionReport = {
          version: a.getAttribute('version'),
          language: a.getAttribute('language'),
          exceptions: [
          ]
        };
        this.readChildNodes(a, b.exceptionReport)
      }
    }, OpenLayers.Format.OWSCommon.v1.prototype.readers.ows)
  },
  writers: {
    ows: OpenLayers.Format.OWSCommon.v1.prototype.writers.ows
  },
  CLASS_NAME: 'OpenLayers.Format.OWSCommon.v1_0_0'
});
OpenLayers.Format.WFST.v1_1_0 = OpenLayers.Class(OpenLayers.Format.Filter.v1_1_0, OpenLayers.Format.WFST.v1, {
  version: '1.1.0',
  schemaLocations: {
    wfs: 'http://schemas.opengis.net/wfs/1.1.0/wfs.xsd'
  },
  initialize: function (a) {
    OpenLayers.Format.Filter.v1_1_0.prototype.initialize.apply(this, [
      a
    ]);
    OpenLayers.Format.WFST.v1.prototype.initialize.apply(this, [
      a
    ])
  },
  readNode: function (a, b) {
    return OpenLayers.Format.GML.v3.prototype.readNode.apply(this, [
      a,
      b
    ])
  },
  readers: {
    wfs: OpenLayers.Util.applyDefaults({
      FeatureCollection: function (a, b) {
        b.numberOfFeatures = parseInt(a.getAttribute('numberOfFeatures'));
        OpenLayers.Format.WFST.v1.prototype.readers.wfs.FeatureCollection.apply(this, arguments)
      },
      TransactionResponse: function (a, b) {
        b.insertIds = [
        ];
        b.success = !1;
        this.readChildNodes(a, b)
      },
      TransactionSummary: function (a, b) {
        b.success = !0
      },
      InsertResults: function (a, b) {
        this.readChildNodes(a, b)
      },
      Feature: function (a, b) {
        var c = {
          fids: [
          ]
        };
        this.readChildNodes(a, c);
        b.insertIds.push(c.fids[0])
      }
    }, OpenLayers.Format.WFST.v1.prototype.readers.wfs),
    gml: OpenLayers.Format.GML.v3.prototype.readers.gml,
    feature: OpenLayers.Format.GML.v3.prototype.readers.feature,
    ogc: OpenLayers.Format.Filter.v1_1_0.prototype.readers.ogc,
    ows: OpenLayers.Format.OWSCommon.v1_0_0.prototype.readers.ows
  },
  writers: {
    wfs: OpenLayers.Util.applyDefaults({
      GetFeature: function (a) {
        var b = OpenLayers.Format.WFST.v1.prototype.writers.wfs.GetFeature.apply(this, arguments);
        a && this.setAttributes(b, {
          resultType: a.resultType,
          startIndex: a.startIndex,
          count: a.count
        });
        return b
      },
      Query: function (a) {
        var a = OpenLayers.Util.extend({
          featureNS: this.featureNS,
          featurePrefix: this.featurePrefix,
          featureType: this.featureType,
          srsName: this.srsName
        }, a),
        b = a.featurePrefix,
        c = this.createElementNSPlus('wfs:Query', {
          attributes: {
            typeName: (b ? b + ':' : '') + a.featureType,
            srsName: a.srsName
          }
        });
        a.featureNS && c.setAttribute('xmlns:' + b, a.featureNS);
        if (a.propertyNames) for (var b = 0, d = a.propertyNames.length; b < d; b++) this.writeNode('wfs:PropertyName', {
          property: a.propertyNames[b]
        }, c);
        a.filter && (OpenLayers.Format.WFST.v1_1_0.prototype.setFilterProperty.call(this, a.filter), this.writeNode('ogc:Filter', a.filter, c));
        return c
      },
      PropertyName: function (a) {
        return this.createElementNSPlus('wfs:PropertyName', {
          value: a.property
        })
      }
    }, OpenLayers.Format.WFST.v1.prototype.writers.wfs),
    gml: OpenLayers.Format.GML.v3.prototype.writers.gml,
    feature: OpenLayers.Format.GML.v3.prototype.writers.feature,
    ogc: OpenLayers.Format.Filter.v1_1_0.prototype.writers.ogc
  },
  CLASS_NAME: 'OpenLayers.Format.WFST.v1_1_0'
});
OpenLayers.Protocol = OpenLayers.Class({
  format: null,
  options: null,
  autoDestroy: !0,
  defaultFilter: null,
  initialize: function (a) {
    a = a || {
    };
    OpenLayers.Util.extend(this, a);
    this.options = a
  },
  mergeWithDefaultFilter: function (a) {
    return a && this.defaultFilter ? new OpenLayers.Filter.Logical({
      type: OpenLayers.Filter.Logical.AND,
      filters: [
        this.defaultFilter,
        a
      ]
    })  : a || this.defaultFilter || void 0
  },
  destroy: function () {
    this.format = this.options = null
  },
  read: function (a) {
    a = a || {
    };
    a.filter = this.mergeWithDefaultFilter(a.filter)
  },
  create: function () {
  },
  update: function () {
  },
  'delete': function () {
  },
  commit: function () {
  },
  abort: function () {
  },
  createCallback: function (a, b, c) {
    return OpenLayers.Function.bind(function () {
      a.apply(this, [
        b,
        c
      ])
    }, this)
  },
  CLASS_NAME: 'OpenLayers.Protocol'
});
OpenLayers.Protocol.Response = OpenLayers.Class({
  code: null,
  requestType: null,
  last: !0,
  features: null,
  data: null,
  reqFeatures: null,
  priv: null,
  error: null,
  initialize: function (a) {
    OpenLayers.Util.extend(this, a)
  },
  success: function () {
    return 0 < this.code
  },
  CLASS_NAME: 'OpenLayers.Protocol.Response'
});
OpenLayers.Protocol.Response.SUCCESS = 1;
OpenLayers.Protocol.Response.FAILURE = 0;
OpenLayers.Protocol.Script = OpenLayers.Class(OpenLayers.Protocol, {
  url: null,
  params: null,
  callback: null,
  callbackTemplate: 'OpenLayers.Protocol.Script.registry.${id}',
  callbackKey: 'callback',
  callbackPrefix: '',
  scope: null,
  format: null,
  pendingRequests: null,
  srsInBBOX: !1,
  initialize: function (a) {
    a = a || {
    };
    this.params = {
    };
    this.pendingRequests = {
    };
    OpenLayers.Protocol.prototype.initialize.apply(this, arguments);
    this.format || (this.format = new OpenLayers.Format.GeoJSON);
    if (!this.filterToParams && OpenLayers.Format.QueryStringFilter) {
      var b = new OpenLayers.Format.QueryStringFilter({
        srsInBBOX: this.srsInBBOX
      });
      this.filterToParams = function (a, d) {
        return b.write(a, d)
      }
    }
  },
  read: function (a) {
    OpenLayers.Protocol.prototype.read.apply(this, arguments);
    a = OpenLayers.Util.applyDefaults(a, this.options);
    a.params = OpenLayers.Util.applyDefaults(a.params, this.options.params);
    a.filter && this.filterToParams && (a.params = this.filterToParams(a.filter, a.params));
    var b = new OpenLayers.Protocol.Response({
      requestType: 'read'
    }),
    c = this.createRequest(a.url, a.params, OpenLayers.Function.bind(function (c) {
      b.data = c;
      this.handleRead(b, a)
    }, this));
    b.priv = c;
    return b
  },
  createRequest: function (a, b, c) {
    var c = OpenLayers.Protocol.Script.register(c),
    d = OpenLayers.String.format(this.callbackTemplate, {
      id: c
    }),
    b = OpenLayers.Util.extend({
    }, b);
    b[this.callbackKey] = this.callbackPrefix + d;
    a = OpenLayers.Util.urlAppend(a, OpenLayers.Util.getParameterString(b));
    b = document.createElement('script');
    b.type = 'text/javascript';
    b.src = a;
    b.id = 'OpenLayers_Protocol_Script_' + c;
    this.pendingRequests[b.id] = b;
    document.getElementsByTagName('head') [0].appendChild(b);
    return b
  },
  destroyRequest: function (a) {
    OpenLayers.Protocol.Script.unregister(a.id.split('_').pop());
    delete this.pendingRequests[a.id];
    a.parentNode && a.parentNode.removeChild(a)
  },
  handleRead: function (a, b) {
    this.handleResponse(a, b)
  },
  handleResponse: function (a, b) {
    b.callback && (a.data ? (a.features = this.parseFeatures(a.data), a.code = OpenLayers.Protocol.Response.SUCCESS)  : a.code = OpenLayers.Protocol.Response.FAILURE, this.destroyRequest(a.priv), b.callback.call(b.scope, a))
  },
  parseFeatures: function (a) {
    return this.format.read(a)
  },
  abort: function (a) {
    if (a) this.destroyRequest(a.priv);
     else for (var b in this.pendingRequests) this.destroyRequest(this.pendingRequests[b])
  },
  destroy: function () {
    this.abort();
    delete this.params;
    delete this.format;
    OpenLayers.Protocol.prototype.destroy.apply(this)
  },
  CLASS_NAME: 'OpenLayers.Protocol.Script'
}); (function () {
  var a = OpenLayers.Protocol.Script,
  b = 0;
  a.registry = {
  };
  a.register = function (c) {
    var d = 'c' + ++b;
    a.registry[d] = function () {
      c.apply(this, arguments)
    };
    return d
  };
  a.unregister = function (b) {
    delete a.registry[b]
  }
}) ();
OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, {
  controls: null,
  autoActivate: !0,
  defaultControl: null,
  saveState: !1,
  allowDepress: !1,
  activeState: null,
  initialize: function (a) {
    OpenLayers.Control.prototype.initialize.apply(this, [
      a
    ]);
    this.controls = [
    ];
    this.activeState = {
    }
  },
  destroy: function () {
    this.map && this.map.events.unregister('buttonclick', this, this.onButtonClick);
    OpenLayers.Control.prototype.destroy.apply(this, arguments);
    for (var a, b = this.controls.length - 1; 0 <= b; b--) a = this.controls[b],
    a.events && a.events.un({
      activate: this.iconOn,
      deactivate: this.iconOff
    }),
    a.panel_div = null;
    this.activeState = null
  },
  activate: function () {
    if (OpenLayers.Control.prototype.activate.apply(this, arguments)) {
      for (var a, b = 0, c = this.controls.length; b < c; b++) a = this.controls[b],
      (a === this.defaultControl || this.saveState && this.activeState[a.id]) && a.activate();
      !0 === this.saveState && (this.defaultControl = null);
      this.redraw();
      return !0
    }
    return !1
  },
  deactivate: function () {
    if (OpenLayers.Control.prototype.deactivate.apply(this, arguments)) {
      for (var a, b = 0, c = this.controls.length; b < c; b++) a = this.controls[b],
      this.activeState[a.id] = a.deactivate();
      this.redraw();
      return !0
    }
    return !1
  },
  draw: function () {
    OpenLayers.Control.prototype.draw.apply(this, arguments);
    this.outsideViewport ? (this.events.attachToElement(this.div), this.events.register('buttonclick', this, this.onButtonClick))  : this.map.events.register('buttonclick', this, this.onButtonClick);
    this.addControlsToMap(this.controls);
    return this.div
  },
  redraw: function () {
    for (var a = this.div.childNodes.length - 1; 0 <= a; a--) this.div.removeChild(this.div.childNodes[a]);
    this.div.innerHTML = '';
    if (this.active) for (var a = 0, b = this.controls.length; a < b; a++) this.div.appendChild(this.controls[a].panel_div)
  },
  activateControl: function (a) {
    if (!this.active) return !1;
    if (a.type == OpenLayers.Control.TYPE_BUTTON) a.trigger();
     else if (a.type == OpenLayers.Control.TYPE_TOGGLE) a.active ? a.deactivate()  : a.activate();
     else if (this.allowDepress && a.active) a.deactivate();
     else {
      for (var b, c = 0, d = this.controls.length; c < d; c++) b = this.controls[c],
      b != a && (b.type === OpenLayers.Control.TYPE_TOOL || null == b.type) && b.deactivate();
      a.activate()
    }
  },
  addControls: function (a) {
    OpenLayers.Util.isArray(a) || (a = [
      a
    ]);
    this.controls = this.controls.concat(a);
    for (var b = 0, c = a.length; b < c; b++) {
      var d = a[b],
      e = this.createControlMarkup(d);
      OpenLayers.Element.addClass(e, d.displayClass + 'ItemInactive');
      OpenLayers.Element.addClass(e, 'olButton');
      '' != d.title && !e.title && (e.title = d.title);
      d.panel_div = e
    }
    this.map && (this.addControlsToMap(a), this.redraw())
  },
  createControlMarkup: function () {
    return document.createElement('div')
  },
  addControlsToMap: function (a) {
    for (var b, c = 0, d = a.length; c < d; c++) b = a[c],
    !0 === b.autoActivate ? (b.autoActivate = !1, this.map.addControl(b), b.autoActivate = !0)  : (this.map.addControl(b), b.deactivate()),
    b.events.on({
      activate: this.iconOn,
      deactivate: this.iconOff
    })
  },
  iconOn: function () {
    var a = this.panel_div;
    a.className = a.className.replace(RegExp('\\b(' + this.displayClass + 'Item)Inactive\\b'), '$1Active')
  },
  iconOff: function () {
    var a = this.panel_div;
    a.className = a.className.replace(RegExp('\\b(' + this.displayClass + 'Item)Active\\b'), '$1Inactive')
  },
  onButtonClick: function (a) {
    for (var b = this.controls, a = a.buttonElement, c = b.length - 1; 0 <= c; --c) if (b[c].panel_div === a) {
      this.activateControl(b[c]);
      break
    }
  },
  getControlsBy: function (a, b) {
    var c = 'function' == typeof b.test;
    return OpenLayers.Array.filter(this.controls, function (d) {
      return d[a] == b || c && b.test(d[a])
    })
  },
  getControlsByName: function (a) {
    return this.getControlsBy('name', a)
  },
  getControlsByClass: function (a) {
    return this.getControlsBy('CLASS_NAME', a)
  },
  CLASS_NAME: 'OpenLayers.Control.Panel'
});
OpenLayers.Control.ZoomIn = OpenLayers.Class(OpenLayers.Control, {
  type: OpenLayers.Control.TYPE_BUTTON,
  trigger: function () {
    this.map.zoomIn()
  },
  CLASS_NAME: 'OpenLayers.Control.ZoomIn'
});
OpenLayers.Control.ZoomOut = OpenLayers.Class(OpenLayers.Control, {
  type: OpenLayers.Control.TYPE_BUTTON,
  trigger: function () {
    this.map.zoomOut()
  },
  CLASS_NAME: 'OpenLayers.Control.ZoomOut'
});
OpenLayers.Control.ZoomToMaxExtent = OpenLayers.Class(OpenLayers.Control, {
  type: OpenLayers.Control.TYPE_BUTTON,
  trigger: function () {
    this.map && this.map.zoomToMaxExtent()
  },
  CLASS_NAME: 'OpenLayers.Control.ZoomToMaxExtent'
});
OpenLayers.Control.ZoomPanel = OpenLayers.Class(OpenLayers.Control.Panel, {
  initialize: function (a) {
    OpenLayers.Control.Panel.prototype.initialize.apply(this, [
      a
    ]);
    this.addControls([new OpenLayers.Control.ZoomIn,
    new OpenLayers.Control.ZoomToMaxExtent,
    new OpenLayers.Control.ZoomOut])
  },
  CLASS_NAME: 'OpenLayers.Control.ZoomPanel'
});
OpenLayers.Format.ArcXML = OpenLayers.Class(OpenLayers.Format.XML, {
  fontStyleKeys: 'antialiasing blockout font fontcolor fontsize fontstyle glowing interval outline printmode shadow transparency'.split(' '),
  request: null,
  response: null,
  initialize: function (a) {
    this.request = new OpenLayers.Format.ArcXML.Request;
    this.response = new OpenLayers.Format.ArcXML.Response;
    if (a) if ('feature' == a.requesttype) {
      this.request.get_image = null;
      var b = this.request.get_feature.query;
      this.addCoordSys(b.featurecoordsys, a.featureCoordSys);
      this.addCoordSys(b.filtercoordsys, a.filterCoordSys);
      a.polygon ? (b.isspatial = !0, b.spatialfilter.polygon = a.polygon)  : a.envelope && (b.isspatial = !0, b.spatialfilter.envelope = {
        minx: 0,
        miny: 0,
        maxx: 0,
        maxy: 0
      }, this.parseEnvelope(b.spatialfilter.envelope, a.envelope))
    } else 'image' == a.requesttype ? (this.request.get_feature = null, b = this.request.get_image.properties, this.parseEnvelope(b.envelope, a.envelope), this.addLayers(b.layerlist, a.layers), this.addImageSize(b.imagesize, a.tileSize), this.addCoordSys(b.featurecoordsys, a.featureCoordSys), this.addCoordSys(b.filtercoordsys, a.filterCoordSys))  : this.request = null;
    OpenLayers.Format.XML.prototype.initialize.apply(this, [
      a
    ])
  },
  parseEnvelope: function (a, b) {
    b && 4 == b.length && (a.minx = b[0], a.miny = b[1], a.maxx = b[2], a.maxy = b[3])
  },
  addLayers: function (a, b) {
    for (var c = 0, d = b.length; c < d; c++) a.push(b[c])
  },
  addImageSize: function (a, b) {
    null !== b && (a.width = b.w, a.height = b.h, a.printwidth = b.w, a.printheight = b.h)
  },
  addCoordSys: function (a, b) {
    'string' == typeof b ? (a.id = parseInt(b), a.string = b)  : 'object' == typeof b && null !== b.proj && (a.id = b.proj.srsProjNumber, a.string = b.proj.srsCode)
  },
  iserror: function (a) {
    var b = null;
    a ? (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]), a = a.documentElement.getElementsByTagName('ERROR'), b = null !== a && 0 < a.length)  : b = '' !== this.response.error;
    return b
  },
  read: function (a) {
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    var b = null;
    a && a.documentElement && (b = 'ARCXML' == a.documentElement.nodeName ? a.documentElement : a.documentElement.getElementsByTagName('ARCXML') [0]);
    if (!b || 'parsererror' === b.firstChild.nodeName) {
      var c,
      d;
      try {
        c = a.firstChild.nodeValue,
        d = a.firstChild.childNodes[1].firstChild.nodeValue
      } catch (e) {
      }
      throw {
        message: 'Error parsing the ArcXML request',
        error: c,
        source: d
      };
    }
    return this.parseResponse(b)
  },
  write: function (a) {
    a || (a = this.request);
    var b = this.createElementNS('', 'ARCXML');
    b.setAttribute('version', '1.1');
    var c = this.createElementNS('', 'REQUEST');
    if (null != a.get_image) {
      var d = this.createElementNS('', 'GET_IMAGE');
      c.appendChild(d);
      var e = this.createElementNS('', 'PROPERTIES');
      d.appendChild(e);
      a = a.get_image.properties;
      null != a.featurecoordsys && (d = this.createElementNS('', 'FEATURECOORDSYS'), e.appendChild(d), 0 === a.featurecoordsys.id ? d.setAttribute('string', a.featurecoordsys.string)  : d.setAttribute('id', a.featurecoordsys.id));
      null != a.filtercoordsys && (d = this.createElementNS('', 'FILTERCOORDSYS'), e.appendChild(d), 0 === a.filtercoordsys.id ? d.setAttribute('string', a.filtercoordsys.string)  : d.setAttribute('id', a.filtercoordsys.id));
      null != a.envelope && (d = this.createElementNS('', 'ENVELOPE'), e.appendChild(d), d.setAttribute('minx', a.envelope.minx), d.setAttribute('miny', a.envelope.miny), d.setAttribute('maxx', a.envelope.maxx), d.setAttribute('maxy', a.envelope.maxy));
      d = this.createElementNS('', 'IMAGESIZE');
      e.appendChild(d);
      d.setAttribute('height', a.imagesize.height);
      d.setAttribute('width', a.imagesize.width);
      if (a.imagesize.height != a.imagesize.printheight || a.imagesize.width != a.imagesize.printwidth) d.setAttribute('printheight', a.imagesize.printheight),
      d.setArrtibute('printwidth', a.imagesize.printwidth);
      null != a.background && (d = this.createElementNS('', 'BACKGROUND'), e.appendChild(d), d.setAttribute('color', a.background.color.r + ',' + a.background.color.g + ',' + a.background.color.b), null !== a.background.transcolor && d.setAttribute('transcolor', a.background.transcolor.r + ',' + a.background.transcolor.g + ',' + a.background.transcolor.b));
      if (null != a.layerlist && 0 < a.layerlist.length) {
        d = this.createElementNS('', 'LAYERLIST');
        e.appendChild(d);
        for (e = 0; e < a.layerlist.length; e++) {
          var f = this.createElementNS('', 'LAYERDEF');
          d.appendChild(f);
          f.setAttribute('id', a.layerlist[e].id);
          f.setAttribute('visible', a.layerlist[e].visible);
          if ('object' == typeof a.layerlist[e].query) {
            var g = a.layerlist[e].query;
            if (0 > g.where.length) continue;
            var h = null,
            h = 'boolean' == typeof g.spatialfilter && g.spatialfilter ? this.createElementNS('', 'SPATIALQUERY')  : this.createElementNS('', 'QUERY');
            h.setAttribute('where', g.where);
            'number' == typeof g.accuracy && 0 < g.accuracy && h.setAttribute('accuracy', g.accuracy);
            'number' == typeof g.featurelimit && 2000 > g.featurelimit && h.setAttribute('featurelimit', g.featurelimit);
            'string' == typeof g.subfields && '#ALL#' != g.subfields && h.setAttribute('subfields', g.subfields);
            'string' == typeof g.joinexpression && 0 < g.joinexpression.length && h.setAttribute('joinexpression', g.joinexpression);
            'string' == typeof g.jointables && 0 < g.jointables.length && h.setAttribute('jointables', g.jointables);
            f.appendChild(h)
          }
          'object' == typeof a.layerlist[e].renderer && this.addRenderer(f, a.layerlist[e].renderer)
        }
      }
    } else if (null != a.get_feature && (d = this.createElementNS('', 'GET_FEATURES'), d.setAttribute('outputmode', 'newxml'), d.setAttribute('checkesc', 'true'), a.get_feature.geometry ? d.setAttribute('geometry', a.get_feature.geometry)  : d.setAttribute('geometry', 'false'), a.get_feature.compact && d.setAttribute('compact', a.get_feature.compact), 'number' == a.get_feature.featurelimit && d.setAttribute('featurelimit', a.get_feature.featurelimit), d.setAttribute('globalenvelope', 'true'), c.appendChild(d), null != a.get_feature.layer && 0 < a.get_feature.layer.length && (e = this.createElementNS('', 'LAYER'), e.setAttribute('id', a.get_feature.layer), d.appendChild(e)), a = a.get_feature.query, null != a)) e = null,
    e = a.isspatial ? this.createElementNS('', 'SPATIALQUERY')  : this.createElementNS('', 'QUERY'),
    d.appendChild(e),
    'number' == typeof a.accuracy && e.setAttribute('accuracy', a.accuracy),
    null != a.featurecoordsys && (d = this.createElementNS('', 'FEATURECOORDSYS'), 0 == a.featurecoordsys.id ? d.setAttribute('string', a.featurecoordsys.string)  : d.setAttribute('id', a.featurecoordsys.id), e.appendChild(d)),
    null != a.filtercoordsys && (d = this.createElementNS('', 'FILTERCOORDSYS'), 0 === a.filtercoordsys.id ? d.setAttribute('string', a.filtercoordsys.string)  : d.setAttribute('id', a.filtercoordsys.id), e.appendChild(d)),
    0 < a.buffer && (d = this.createElementNS('', 'BUFFER'), d.setAttribute('distance', a.buffer), e.appendChild(d)),
    a.isspatial && (d = this.createElementNS('', 'SPATIALFILTER'), d.setAttribute('relation', a.spatialfilter.relation), e.appendChild(d), a.spatialfilter.envelope ? (f = this.createElementNS('', 'ENVELOPE'), f.setAttribute('minx', a.spatialfilter.envelope.minx), f.setAttribute('miny', a.spatialfilter.envelope.miny), f.setAttribute('maxx', a.spatialfilter.envelope.maxx), f.setAttribute('maxy', a.spatialfilter.envelope.maxy), d.appendChild(f))  : 'object' == typeof a.spatialfilter.polygon && d.appendChild(this.writePolygonGeometry(a.spatialfilter.polygon))),
    null != a.where && 0 < a.where.length && e.setAttribute('where', a.where);
    b.appendChild(c);
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      b
    ])
  },
  addGroupRenderer: function (a, b) {
    var c = this.createElementNS('', 'GROUPRENDERER');
    a.appendChild(c);
    for (var d = 0; d < b.length; d++) this.addRenderer(c, b[d])
  },
  addRenderer: function (a, b) {
    if (OpenLayers.Util.isArray(b)) this.addGroupRenderer(a, b);
     else {
      var c = this.createElementNS('', b.type.toUpperCase() + 'RENDERER');
      a.appendChild(c);
      'VALUEMAPRENDERER' == c.tagName ? this.addValueMapRenderer(c, b)  : 'VALUEMAPLABELRENDERER' == c.tagName ? this.addValueMapLabelRenderer(c, b)  : 'SIMPLELABELRENDERER' == c.tagName ? this.addSimpleLabelRenderer(c, b)  : 'SCALEDEPENDENTRENDERER' == c.tagName && this.addScaleDependentRenderer(c, b)
    }
  },
  addScaleDependentRenderer: function (a, b) {
    ('string' == typeof b.lower || 'number' == typeof b.lower) && a.setAttribute('lower', b.lower);
    ('string' == typeof b.upper || 'number' == typeof b.upper) && a.setAttribute('upper', b.upper);
    this.addRenderer(a, b.renderer)
  },
  addValueMapLabelRenderer: function (a, b) {
    a.setAttribute('lookupfield', b.lookupfield);
    a.setAttribute('labelfield', b.labelfield);
    if ('object' == typeof b.exacts) for (var c = 0, d = b.exacts.length; c < d; c++) {
      var e = b.exacts[c],
      f = this.createElementNS('', 'EXACT');
      'string' == typeof e.value && f.setAttribute('value', e.value);
      'string' == typeof e.label && f.setAttribute('label', e.label);
      'string' == typeof e.method && f.setAttribute('method', e.method);
      a.appendChild(f);
      if ('object' == typeof e.symbol) {
        var g = null;
        'text' == e.symbol.type && (g = this.createElementNS('', 'TEXTSYMBOL'));
        if (null != g) {
          for (var h = this.fontStyleKeys, i = 0, j = h.length; i < j; i++) {
            var k = h[i];
            e.symbol[k] && g.setAttribute(k, e.symbol[k])
          }
          f.appendChild(g)
        }
      }
    }
  },
  addValueMapRenderer: function (a, b) {
    a.setAttribute('lookupfield', b.lookupfield);
    if ('object' == typeof b.ranges) for (var c = 0, d = b.ranges.length; c < d; c++) {
      var e = b.ranges[c],
      f = this.createElementNS('', 'RANGE');
      f.setAttribute('lower', e.lower);
      f.setAttribute('upper', e.upper);
      a.appendChild(f);
      if ('object' == typeof e.symbol) {
        var g = null;
        'simplepolygon' == e.symbol.type && (g = this.createElementNS('', 'SIMPLEPOLYGONSYMBOL'));
        null != g && ('string' == typeof e.symbol.boundarycolor && g.setAttribute('boundarycolor', e.symbol.boundarycolor), 'string' == typeof e.symbol.fillcolor && g.setAttribute('fillcolor', e.symbol.fillcolor), 'number' == typeof e.symbol.filltransparency && g.setAttribute('filltransparency', e.symbol.filltransparency), f.appendChild(g))
      }
    } else if ('object' == typeof b.exacts) {
      c = 0;
      for (d = b.exacts.length; c < d; c++) e = b.exacts[c],
      f = this.createElementNS('', 'EXACT'),
      'string' == typeof e.value && f.setAttribute('value', e.value),
      'string' == typeof e.label && f.setAttribute('label', e.label),
      'string' == typeof e.method && f.setAttribute('method', e.method),
      a.appendChild(f),
      'object' == typeof e.symbol && (g = null, 'simplemarker' == e.symbol.type && (g = this.createElementNS('', 'SIMPLEMARKERSYMBOL')), null != g && ('string' == typeof e.symbol.antialiasing && g.setAttribute('antialiasing', e.symbol.antialiasing), 'string' == typeof e.symbol.color && g.setAttribute('color', e.symbol.color), 'string' == typeof e.symbol.outline && g.setAttribute('outline', e.symbol.outline), 'string' == typeof e.symbol.overlap && g.setAttribute('overlap', e.symbol.overlap), 'string' == typeof e.symbol.shadow && g.setAttribute('shadow', e.symbol.shadow), 'number' == typeof e.symbol.transparency && g.setAttribute('transparency', e.symbol.transparency), 'string' == typeof e.symbol.usecentroid && g.setAttribute('usecentroid', e.symbol.usecentroid), 'number' == typeof e.symbol.width && g.setAttribute('width', e.symbol.width), f.appendChild(g)))
    }
  },
  addSimpleLabelRenderer: function (a, b) {
    a.setAttribute('field', b.field);
    for (var c = 'featureweight howmanylabels labelbufferratio labelpriorities labelweight linelabelposition rotationalangles'.split(' '), d = 0, e = c.length; d < e; d++) {
      var f = c[d];
      b[f] && a.setAttribute(f, b[f])
    }
    if ('text' == b.symbol.type) {
      var g = b.symbol,
      h = this.createElementNS('', 'TEXTSYMBOL');
      a.appendChild(h);
      c = this.fontStyleKeys;
      d = 0;
      for (e = c.length; d < e; d++) f = c[d],
      g[f] && h.setAttribute(f, b[f])
    }
  },
  writePolygonGeometry: function (a) {
    if (!(a instanceof OpenLayers.Geometry.Polygon)) throw {
      message: 'Cannot write polygon geometry to ArcXML with an ' + a.CLASS_NAME + ' object.',
      geometry: a
    };
    for (var b = this.createElementNS('', 'POLYGON'), c = 0, d = a.components.length; c < d; c++) {
      for (var e = a.components[c], f = this.createElementNS('', 'RING'), g = 0, h = e.components.length; g < h; g++) {
        var i = e.components[g],
        j = this.createElementNS('', 'POINT');
        j.setAttribute('x', i.x);
        j.setAttribute('y', i.y);
        f.appendChild(j)
      }
      b.appendChild(f)
    }
    return b
  },
  parseResponse: function (a) {
    'string' == typeof a && (a = (new OpenLayers.Format.XML).read(a));
    var b = new OpenLayers.Format.ArcXML.Response,
    c = a.getElementsByTagName('ERROR');
    if (null != c && 0 < c.length) b.error = this.getChildValue(c, 'Unknown error.');
     else {
      c = a.getElementsByTagName('RESPONSE');
      if (null == c || 0 == c.length) return b.error = 'No RESPONSE tag found in ArcXML response.',
      b;
      var d = c[0].firstChild.nodeName;
      '#text' == d && (d = c[0].firstChild.nextSibling.nodeName);
      if ('IMAGE' ==
      d) c = a.getElementsByTagName('ENVELOPE'),
      a = a.getElementsByTagName('OUTPUT'),
      null == c || 0 == c.length ? b.error = 'No ENVELOPE tag found in ArcXML response.' : null == a || 0 == a.length ? b.error = 'No OUTPUT tag found in ArcXML response.' : (c = this.parseAttributes(c[0]), d = this.parseAttributes(a[0]), b.image = 'string' == typeof d.type ? {
        envelope: c,
        output: {
          type: d.type,
          data: this.getChildValue(a[0])
        }
      }
       : {
        envelope: c,
        output: d
      });
       else if ('FEATURES' == d) {
        if (a = c[0].getElementsByTagName('FEATURES'), c = a[0].getElementsByTagName('FEATURECOUNT'), b.features.featurecount = c[0].getAttribute('count'), 0 < b.features.featurecount) {
          c = a[0].getElementsByTagName('ENVELOPE');
          b.features.envelope = this.parseAttributes(c[0], 'number');
          a = a[0].getElementsByTagName('FEATURE');
          for (c = 0; c < a.length; c++) {
            for (var d = new OpenLayers.Feature.Vector, e = a[c].getElementsByTagName('FIELD'), f = 0; f < e.length; f++) {
              var g = e[f].getAttribute('name'),
              h = e[f].getAttribute('value');
              d.attributes[g] = h
            }
            e = a[c].getElementsByTagName('POLYGON');
            if (0 < e.length) {
              e = e[0].getElementsByTagName('RING');
              f = [
              ];
              for (g = 0; g < e.length; g++) {
                h = [
                ];
                h.push(this.parsePointGeometry(e[g]));
                for (var i = e[g].getElementsByTagName('HOLE'), j = 0; j < i.length; j++) h.push(this.parsePointGeometry(i[j]));
                f.push(new OpenLayers.Geometry.Polygon(h))
              }
              d.geometry = 1 == f.length ? f[0] : new OpenLayers.Geometry.MultiPolygon(f)
            }
            b.features.feature.push(d)
          }
        }
      } else b.error = 'Unidentified response type.'
    }
    return b
  },
  parseAttributes: function (a, b) {
    for (var c = {
    }, d = 0; d < a.attributes.length; d++) c[a.attributes[d].nodeName] = 'number' == b ? parseFloat(a.attributes[d].nodeValue)  :
    a.attributes[d].nodeValue;
    return c
  },
  parsePointGeometry: function (a) {
    var b = [
    ],
    c = a.getElementsByTagName('COORDS');
    if (0 < c.length) {
      a = this.getChildValue(c[0]);
      a = a.split(/;/);
      for (c = 0; c < a.length; c++) {
        var d = a[c].split(/ /);
        b.push(new OpenLayers.Geometry.Point(d[0], d[1]))
      }
    } else if (a = a.getElementsByTagName('POINT'), 0 < a.length) for (c = 0; c < a.length; c++) b.push(new OpenLayers.Geometry.Point(parseFloat(a[c].getAttribute('x')), parseFloat(a[c].getAttribute('y'))));
    return new OpenLayers.Geometry.LinearRing(b)
  },
  CLASS_NAME: 'OpenLayers.Format.ArcXML'
});
OpenLayers.Format.ArcXML.Request = OpenLayers.Class({
  initialize: function () {
    return OpenLayers.Util.extend(this, {
      get_image: {
        properties: {
          background: null,
          draw: !0,
          envelope: {
            minx: 0,
            miny: 0,
            maxx: 0,
            maxy: 0
          },
          featurecoordsys: {
            id: 0,
            string: '',
            datumtransformid: 0,
            datumtransformstring: ''
          },
          filtercoordsys: {
            id: 0,
            string: '',
            datumtransformid: 0,
            datumtransformstring: ''
          },
          imagesize: {
            height: 0,
            width: 0,
            dpi: 96,
            printheight: 0,
            printwidth: 0,
            scalesymbols: !1
          },
          layerlist: [
          ],
          output: {
            baseurl: '',
            legendbaseurl: '',
            legendname: '',
            legendpath: '',
            legendurl: '',
            name: '',
            path: '',
            type: 'jpg',
            url: ''
          }
        }
      },
      get_feature: {
        layer: '',
        query: {
          isspatial: !1,
          featurecoordsys: {
            id: 0,
            string: '',
            datumtransformid: 0,
            datumtransformstring: ''
          },
          filtercoordsys: {
            id: 0,
            string: '',
            datumtransformid: 0,
            datumtransformstring: ''
          },
          buffer: 0,
          where: '',
          spatialfilter: {
            relation: 'envelope_intersection',
            envelope: null
          }
        }
      },
      environment: {
        separators: {
          cs: ' ',
          ts: ';'
        }
      },
      layer: [
      ],
      workspaces: [
      ]
    })
  },
  CLASS_NAME: 'OpenLayers.Format.ArcXML.Request'
});
OpenLayers.Format.ArcXML.Response = OpenLayers.Class({
  initialize: function () {
    return OpenLayers.Util.extend(this, {
      image: {
        envelope: null,
        output: ''
      },
      features: {
        featurecount: 0,
        envelope: null,
        feature: [
        ]
      },
      error: ''
    })
  },
  CLASS_NAME: 'OpenLayers.Format.ArcXML.Response'
});
OpenLayers.ProxyHost = '';
OpenLayers.Request = {
  DEFAULT_CONFIG: {
    method: 'GET',
    url: window.location.href,
    async: !0,
    user: void 0,
    password: void 0,
    params: null,
    proxy: OpenLayers.ProxyHost,
    headers: {
    },
    data: null,
    callback: function () {
    },
    success: null,
    failure: null,
    scope: null
  },
  URL_SPLIT_REGEX: /([^:]*:)\/\/([^:]*:?[^@]*@)?([^:\/\?]*):?([^\/\?]*)/,
  events: new OpenLayers.Events(this),
  makeSameOrigin: function (a, b) {
    var c = 0 !== a.indexOf('http'),
    d = !c && a.match(this.URL_SPLIT_REGEX);
    if (d) {
      var e = window.location,
      c = d[1] == e.protocol && d[3] == e.hostname,
      d = d[4],
      e = e.port;
      if (80 != d && '' != d || '80' != e && '' != e) c = c && d == e
    }
    c || (b ? a = 'function' == typeof b ? b(a)  : b + encodeURIComponent(a)  : OpenLayers.Console.warn(OpenLayers.i18n('proxyNeeded'), {
      url: a
    }));
    return a
  },
  issue: function (a) {
    var b = OpenLayers.Util.extend(this.DEFAULT_CONFIG, {
      proxy: OpenLayers.ProxyHost
    }),
    a = OpenLayers.Util.applyDefaults(a, b),
    b = !1,
    c;
    for (c in a.headers) a.headers.hasOwnProperty(c) && 'x-requested-with' === c.toLowerCase() && (b = !0);
    !1 === b && (a.headers['X-Requested-With'] = 'XMLHttpRequest');
    var d = new OpenLayers.Request.XMLHttpRequest,
    e = OpenLayers.Util.urlAppend(a.url, OpenLayers.Util.getParameterString(a.params || {
    })),
    e = OpenLayers.Request.makeSameOrigin(e, a.proxy);
    d.open(a.method, e, a.async, a.user, a.password);
    for (var f in a.headers) d.setRequestHeader(f, a.headers[f]);
    var g = this.events,
    h = this;
    d.onreadystatechange = function () {
      d.readyState == OpenLayers.Request.XMLHttpRequest.DONE && !1 !== g.triggerEvent('complete', {
        request: d,
        config: a,
        requestUrl: e
      }) && h.runCallbacks({
        request: d,
        config: a,
        requestUrl: e
      })
    };
    !1 === a.async ? d.send(a.data)  : window.setTimeout(function () {
      0 !==
      d.readyState && d.send(a.data)
    }, 0);
    return d
  },
  runCallbacks: function (a) {
    var b = a.request,
    c = a.config,
    d = c.scope ? OpenLayers.Function.bind(c.callback, c.scope)  : c.callback,
    e;
    c.success && (e = c.scope ? OpenLayers.Function.bind(c.success, c.scope)  : c.success);
    var f;
    c.failure && (f = c.scope ? OpenLayers.Function.bind(c.failure, c.scope)  : c.failure);
    'file:' == OpenLayers.Util.createUrlObject(c.url).protocol && b.responseText && (b.status = 200);
    d(b);
    if (!b.status || 200 <= b.status && 300 > b.status) this.events.triggerEvent('success', a),
    e && e(b);
    if (b.status && (200 > b.status || 300 <= b.status)) this.events.triggerEvent('failure', a),
    f && f(b)
  },
  GET: function (a) {
    a = OpenLayers.Util.extend(a, {
      method: 'GET'
    });
    return OpenLayers.Request.issue(a)
  },
  POST: function (a) {
    a = OpenLayers.Util.extend(a, {
      method: 'POST'
    });
    a.headers = a.headers ? a.headers : {
    };
    'CONTENT-TYPE' in OpenLayers.Util.upperCaseObject(a.headers) || (a.headers['Content-Type'] = 'application/xml');
    return OpenLayers.Request.issue(a)
  },
  PUT: function (a) {
    a = OpenLayers.Util.extend(a, {
      method: 'PUT'
    });
    a.headers = a.headers ?
    a.headers : {
    };
    'CONTENT-TYPE' in OpenLayers.Util.upperCaseObject(a.headers) || (a.headers['Content-Type'] = 'application/xml');
    return OpenLayers.Request.issue(a)
  },
  DELETE: function (a) {
    a = OpenLayers.Util.extend(a, {
      method: 'DELETE'
    });
    return OpenLayers.Request.issue(a)
  },
  HEAD: function (a) {
    a = OpenLayers.Util.extend(a, {
      method: 'HEAD'
    });
    return OpenLayers.Request.issue(a)
  },
  OPTIONS: function (a) {
    a = OpenLayers.Util.extend(a, {
      method: 'OPTIONS'
    });
    return OpenLayers.Request.issue(a)
  }
};
OpenLayers.Layer.ArcIMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
  DEFAULT_PARAMS: {
    ClientVersion: '9.2',
    ServiceName: ''
  },
  featureCoordSys: '4326',
  filterCoordSys: '4326',
  layers: null,
  async: !0,
  name: 'ArcIMS',
  isBaseLayer: !0,
  DEFAULT_OPTIONS: {
    tileSize: new OpenLayers.Size(512, 512),
    featureCoordSys: '4326',
    filterCoordSys: '4326',
    layers: null,
    isBaseLayer: !0,
    async: !0,
    name: 'ArcIMS'
  },
  initialize: function (a, b, c) {
    this.tileSize = new OpenLayers.Size(512, 512);
    this.params = OpenLayers.Util.applyDefaults({
      ServiceName: c.serviceName
    }, this.DEFAULT_PARAMS);
    this.options = OpenLayers.Util.applyDefaults(c, this.DEFAULT_OPTIONS);
    OpenLayers.Layer.Grid.prototype.initialize.apply(this, [
      a,
      b,
      this.params,
      c
    ]);
    if (this.transparent && (this.isBaseLayer || (this.isBaseLayer = !1), 'image/jpeg' == this.format)) this.format = OpenLayers.Util.alphaHack() ? 'image/gif' : 'image/png';
    null === this.options.layers && (this.options.layers = [
    ])
  },
  getURL: function (a) {
    var b = '',
    a = this.adjustBounds(a),
    a = new OpenLayers.Format.ArcXML(OpenLayers.Util.extend(this.options, {
      requesttype: 'image',
      envelope: a.toArray(),
      tileSize: this.tileSize
    })),
    a = new OpenLayers.Request.POST({
      url: this.getFullRequestString(),
      data: a.write(),
      async: !1
    });
    if (null != a) {
      b = a.responseXML;
      if (!b || !b.documentElement) b = a.responseText;
      b = this.getUrlOrImage((new OpenLayers.Format.ArcXML).read(b).image.output)
    }
    return b
  },
  getURLasync: function (a, b, c) {
    a = this.adjustBounds(a);
    a = new OpenLayers.Format.ArcXML(OpenLayers.Util.extend(this.options, {
      requesttype: 'image',
      envelope: a.toArray(),
      tileSize: this.tileSize
    }));
    OpenLayers.Request.POST({
      url: this.getFullRequestString(),
      async: !0,
      data: a.write(),
      callback: function (a) {
        var e = a.responseXML;
        if (!e || !e.documentElement) e = a.responseText;
        a = (new OpenLayers.Format.ArcXML).read(e);
        b.call(c, this.getUrlOrImage(a.image.output))
      },
      scope: this
    })
  },
  getUrlOrImage: function (a) {
    var b = '';
    a.url ? b = a.url : a.data && (b = 'data:image/' + a.type + ';base64,' + a.data);
    return b
  },
  setLayerQuery: function (a, b) {
    for (var c = 0; c < this.options.layers.length; c++) if (a == this.options.layers[c].id) {
      this.options.layers[c].query = b;
      return
    }
    this.options.layers.push({
      id: a,
      visible: !0,
      query: b
    })
  },
  getFeatureInfo: function (a, b, c) {
    var d = c.buffer || 1,
    e = c.callback || function () {
    },
    f = c.scope || window,
    g = {
    };
    OpenLayers.Util.extend(g, this.options);
    g.requesttype = 'feature';
    a instanceof OpenLayers.LonLat ? (g.polygon = null, g.envelope = [
      a.lon - d,
      a.lat - d,
      a.lon + d,
      a.lat + d
    ])  : a instanceof OpenLayers.Geometry.Polygon && (g.envelope = null, g.polygon = a);
    var h = new OpenLayers.Format.ArcXML(g);
    OpenLayers.Util.extend(h.request.get_feature, c);
    h.request.get_feature.layer = b.id;
    'number' == typeof b.query.accuracy ? h.request.get_feature.query.accuracy = b.query.accuracy : (a = this.map.getCenter(), c = this.map.getViewPortPxFromLonLat(a), c.x++, c = this.map.getLonLatFromPixel(c), h.request.get_feature.query.accuracy = c.lon - a.lon);
    h.request.get_feature.query.where = b.query.where;
    h.request.get_feature.query.spatialfilter.relation = 'area_intersection';
    OpenLayers.Request.POST({
      url: this.getFullRequestString({
        CustomService: 'Query'
      }),
      data: h.write(),
      callback: function (a) {
        a = h.parseResponse(a.responseText);
        h.iserror() ? e.call(f, null)  : e.call(f, a.features)
      }
    })
  },
  clone: function (a) {
    null ==
    a && (a = new OpenLayers.Layer.ArcIMS(this.name, this.url, this.getOptions()));
    return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [
      a
    ])
  },
  CLASS_NAME: 'OpenLayers.Layer.ArcIMS'
});
OpenLayers.Format.OWSCommon.v1_1_0 = OpenLayers.Class(OpenLayers.Format.OWSCommon.v1, {
  namespaces: {
    ows: 'http://www.opengis.net/ows/1.1',
    xlink: 'http://www.w3.org/1999/xlink'
  },
  readers: {
    ows: OpenLayers.Util.applyDefaults({
      ExceptionReport: function (a, b) {
        b.exceptionReport = {
          version: a.getAttribute('version'),
          language: a.getAttribute('xml:lang'),
          exceptions: [
          ]
        };
        this.readChildNodes(a, b.exceptionReport)
      },
      AllowedValues: function (a, b) {
        b.allowedValues = {
        };
        this.readChildNodes(a, b.allowedValues)
      },
      AnyValue: function (a, b) {
        b.anyValue = !0
      },
      DataType: function (a, b) {
        b.dataType = this.getChildValue(a)
      },
      Range: function (a, b) {
        b.range = {
        };
        this.readChildNodes(a, b.range)
      },
      MinimumValue: function (a, b) {
        b.minValue = this.getChildValue(a)
      },
      MaximumValue: function (a, b) {
        b.maxValue = this.getChildValue(a)
      },
      Identifier: function (a, b) {
        b.identifier = this.getChildValue(a)
      },
      SupportedCRS: function (a, b) {
        b.supportedCRS = this.getChildValue(a)
      }
    }, OpenLayers.Format.OWSCommon.v1.prototype.readers.ows)
  },
  writers: {
    ows: OpenLayers.Util.applyDefaults({
      Range: function (a) {
        var b = this.createElementNSPlus('ows:Range', {
          attributes: {
            'ows:rangeClosure': a.closure
          }
        });
        this.writeNode('ows:MinimumValue', a.minValue, b);
        this.writeNode('ows:MaximumValue', a.maxValue, b);
        return b
      },
      MinimumValue: function (a) {
        return this.createElementNSPlus('ows:MinimumValue', {
          value: a
        })
      },
      MaximumValue: function (a) {
        return this.createElementNSPlus('ows:MaximumValue', {
          value: a
        })
      },
      Value: function (a) {
        return this.createElementNSPlus('ows:Value', {
          value: a
        })
      }
    }, OpenLayers.Format.OWSCommon.v1.prototype.writers.ows)
  },
  CLASS_NAME: 'OpenLayers.Format.OWSCommon.v1_1_0'
});
OpenLayers.Format.WCSGetCoverage = OpenLayers.Class(OpenLayers.Format.XML, {
  namespaces: {
    ows: 'http://www.opengis.net/ows/1.1',
    wcs: 'http://www.opengis.net/wcs/1.1',
    xlink: 'http://www.w3.org/1999/xlink',
    xsi: 'http://www.w3.org/2001/XMLSchema-instance'
  },
  regExes: {
    trimSpace: /^\s*|\s*$/g,
    removeSpace: /\s*/g,
    splitSpace: /\s+/,
    trimComma: /\s*,\s*/g
  },
  VERSION: '1.1.2',
  schemaLocation: 'http://www.opengis.net/wcs/1.1 http://schemas.opengis.net/wcs/1.1/wcsGetCoverage.xsd',
  write: function (a) {
    a = this.writeNode('wcs:GetCoverage', a);
    this.setAttributeNS(a, this.namespaces.xsi, 'xsi:schemaLocation', this.schemaLocation);
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      a
    ])
  },
  writers: {
    wcs: {
      GetCoverage: function (a) {
        var b = this.createElementNSPlus('wcs:GetCoverage', {
          attributes: {
            version: a.version || this.VERSION,
            service: 'WCS'
          }
        });
        this.writeNode('ows:Identifier', a.identifier, b);
        this.writeNode('wcs:DomainSubset', a.domainSubset, b);
        this.writeNode('wcs:Output', a.output, b);
        return b
      },
      DomainSubset: function (a) {
        var b = this.createElementNSPlus('wcs:DomainSubset', {
        });
        this.writeNode('ows:BoundingBox', a.boundingBox, b);
        a.temporalSubset && this.writeNode('wcs:TemporalSubset', a.temporalSubset, b);
        return b
      },
      TemporalSubset: function (a) {
        for (var b = this.createElementNSPlus('wcs:TemporalSubset', {
        }), c = 0, d = a.timePeriods.length; c < d; ++c) this.writeNode('wcs:TimePeriod', a.timePeriods[c], b);
        return b
      },
      TimePeriod: function (a) {
        var b = this.createElementNSPlus('wcs:TimePeriod', {
        });
        this.writeNode('wcs:BeginPosition', a.begin, b);
        this.writeNode('wcs:EndPosition', a.end, b);
        a.resolution && this.writeNode('wcs:TimeResolution', a.resolution, b);
        return b
      },
      BeginPosition: function (a) {
        return this.createElementNSPlus('wcs:BeginPosition', {
          value: a
        })
      },
      EndPosition: function (a) {
        return this.createElementNSPlus('wcs:EndPosition', {
          value: a
        })
      },
      TimeResolution: function (a) {
        return this.createElementNSPlus('wcs:TimeResolution', {
          value: a
        })
      },
      Output: function (a) {
        var b = this.createElementNSPlus('wcs:Output', {
          attributes: {
            format: a.format,
            store: a.store
          }
        });
        a.gridCRS && this.writeNode('wcs:GridCRS', a.gridCRS, b);
        return b
      },
      GridCRS: function (a) {
        var b = this.createElementNSPlus('wcs:GridCRS', {
        });
        this.writeNode('wcs:GridBaseCRS', a.baseCRS, b);
        a.type && this.writeNode('wcs:GridType', a.type, b);
        a.origin && this.writeNode('wcs:GridOrigin', a.origin, b);
        this.writeNode('wcs:GridOffsets', a.offsets, b);
        a.CS && this.writeNode('wcs:GridCS', a.CS, b);
        return b
      },
      GridBaseCRS: function (a) {
        return this.createElementNSPlus('wcs:GridBaseCRS', {
          value: a
        })
      },
      GridOrigin: function (a) {
        return this.createElementNSPlus('wcs:GridOrigin', {
          value: a
        })
      },
      GridType: function (a) {
        return this.createElementNSPlus('wcs:GridType', {
          value: a
        })
      },
      GridOffsets: function (a) {
        return this.createElementNSPlus('wcs:GridOffsets', {
          value: a
        })
      },
      GridCS: function (a) {
        return this.createElementNSPlus('wcs:GridCS', {
          value: a
        })
      }
    },
    ows: OpenLayers.Format.OWSCommon.v1_1_0.prototype.writers.ows
  },
  CLASS_NAME: 'OpenLayers.Format.WCSGetCoverage'
});
OpenLayers.Format.WPSExecute = OpenLayers.Class(OpenLayers.Format.XML, {
  namespaces: {
    ows: 'http://www.opengis.net/ows/1.1',
    gml: 'http://www.opengis.net/gml',
    wps: 'http://www.opengis.net/wps/1.0.0',
    wfs: 'http://www.opengis.net/wfs',
    ogc: 'http://www.opengis.net/ogc',
    wcs: 'http://www.opengis.net/wcs',
    xlink: 'http://www.w3.org/1999/xlink',
    xsi: 'http://www.w3.org/2001/XMLSchema-instance'
  },
  regExes: {
    trimSpace: /^\s*|\s*$/g,
    removeSpace: /\s*/g,
    splitSpace: /\s+/,
    trimComma: /\s*,\s*/g
  },
  VERSION: '1.0.0',
  schemaLocation: 'http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd',
  schemaLocationAttr: function () {
  },
  write: function (a) {
    var b;
    window.ActiveXObject ? this.xmldom = b = new ActiveXObject('Microsoft.XMLDOM')  : b = document.implementation.createDocument('', '', null);
    a = this.writeNode('wps:Execute', a, b);
    this.setAttributeNS(a, this.namespaces.xsi, 'xsi:schemaLocation', this.schemaLocation);
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      a
    ])
  },
  writers: {
    wps: {
      Execute: function (a) {
        var b = this.createElementNSPlus('wps:Execute', {
          attributes: {
            version: this.VERSION,
            service: 'WPS'
          }
        });
        this.writeNode('ows:Identifier', a.identifier, b);
        this.writeNode('wps:DataInputs', a.dataInputs, b);
        this.writeNode('wps:ResponseForm', a.responseForm, b);
        return b
      },
      ResponseForm: function (a) {
        var b = this.createElementNSPlus('wps:ResponseForm', {
        });
        a.rawDataOutput && this.writeNode('wps:RawDataOutput', a.rawDataOutput, b);
        a.responseDocument && this.writeNode('wps:ResponseDocument', a.responseDocument, b);
        return b
      },
      ResponseDocument: function (a) {
        var b = this.createElementNSPlus('wps:ResponseDocument', {
          attributes: {
            storeExecuteResponse: a.storeExecuteResponse,
            lineage: a.lineage,
            status: a.status
          }
        });
        a.output && this.writeNode('wps:Output', a.output, b);
        return b
      },
      Output: function (a) {
        var b = this.createElementNSPlus('wps:Output', {
          attributes: {
            asReference: a.asReference
          }
        });
        this.writeNode('ows:Identifier', a.identifier, b);
        this.writeNode('ows:Title', a.title, b);
        this.writeNode('ows:Abstract', a['abstract'], b);
        return b
      },
      RawDataOutput: function (a) {
        var b = this.createElementNSPlus('wps:RawDataOutput', {
          attributes: {
            mimeType: a.mimeType
          }
        });
        this.writeNode('ows:Identifier', a.identifier, b);
        return b
      },
      DataInputs: function (a) {
        for (var b = this.createElementNSPlus('wps:DataInputs', {
        }), c = 0, d = a.length; c < d; ++c) this.writeNode('wps:Input', a[c], b);
        return b
      },
      Input: function (a) {
        var b = this.createElementNSPlus('wps:Input', {
        });
        this.writeNode('ows:Identifier', a.identifier, b);
        a.title && this.writeNode('ows:Title', a.title, b);
        a.data && this.writeNode('wps:Data', a.data, b);
        a.reference && this.writeNode('wps:Reference', a.reference, b);
        return b
      },
      Data: function (a) {
        var b = this.createElementNSPlus('wps:Data', {
        });
        a.literalData ?
        this.writeNode('wps:LiteralData', a.literalData, b)  : a.complexData && this.writeNode('wps:ComplexData', a.complexData, b);
        return b
      },
      LiteralData: function (a) {
        return this.createElementNSPlus('wps:LiteralData', {
          attributes: {
            uom: a.uom
          },
          value: a.value
        })
      },
      ComplexData: function (a) {
        var b = this.createElementNSPlus('wps:ComplexData', {
          attributes: {
            mimeType: a.mimeType,
            encoding: a.encoding,
            schema: a.schema
          }
        }),
        c = a.value;
        'string' === typeof c ? b.appendChild(this.getXMLDoc().createCDATASection(a.value))  : b.appendChild(c);
        return b
      },
      Reference: function (a) {
        var b = this.createElementNSPlus('wps:Reference', {
          attributes: {
            mimeType: a.mimeType,
            'xlink:href': a.href,
            method: a.method,
            encoding: a.encoding,
            schema: a.schema
          }
        });
        a.body && this.writeNode('wps:Body', a.body, b);
        return b
      },
      Body: function (a) {
        var b = this.createElementNSPlus('wps:Body', {
        });
        a.wcs ? this.writeNode('wcs:GetCoverage', a.wcs, b)  : a.wfs ? (this.featureType = a.wfs.featureType, this.version = a.wfs.version, this.writeNode('wfs:GetFeature', a.wfs, b))  : this.writeNode('wps:Execute', a, b);
        return b
      }
    },
    wcs: OpenLayers.Format.WCSGetCoverage.prototype.writers.wcs,
    wfs: OpenLayers.Format.WFST.v1_1_0.prototype.writers.wfs,
    ogc: OpenLayers.Format.Filter.v1_1_0.prototype.writers.ogc,
    ows: OpenLayers.Format.OWSCommon.v1_1_0.prototype.writers.ows
  },
  CLASS_NAME: 'OpenLayers.Format.WPSExecute'
});
OpenLayers.Format.WFSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
  defaultVersion: '1.1.0',
  errorProperty: 'service',
  CLASS_NAME: 'OpenLayers.Format.WFSCapabilities'
});
OpenLayers.Format.WFSCapabilities.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
  namespaces: {
    wfs: 'http://www.opengis.net/wfs',
    xlink: 'http://www.w3.org/1999/xlink',
    xsi: 'http://www.w3.org/2001/XMLSchema-instance',
    ows: 'http://www.opengis.net/ows'
  },
  defaultPrefix: 'wfs',
  read: function (a) {
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    a && 9 == a.nodeType && (a = a.documentElement);
    var b = {
    };
    this.readNode(a, b);
    return b
  },
  readers: {
    wfs: {
      WFS_Capabilities: function (a, b) {
        this.readChildNodes(a, b)
      },
      FeatureTypeList: function (a, b) {
        b.featureTypeList = {
          featureTypes: [
          ]
        };
        this.readChildNodes(a, b.featureTypeList)
      },
      FeatureType: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        b.featureTypes.push(c)
      },
      Name: function (a, b) {
        var c = this.getChildValue(a);
        c && (c = c.split(':'), b.name = c.pop(), 0 < c.length && (b.featureNS = this.lookupNamespaceURI(a, c[0])))
      },
      Title: function (a, b) {
        var c = this.getChildValue(a);
        c && (b.title = c)
      },
      Abstract: function (a, b) {
        var c = this.getChildValue(a);
        c && (b['abstract'] = c)
      }
    }
  },
  CLASS_NAME: 'OpenLayers.Format.WFSCapabilities.v1'
});
OpenLayers.Format.WFSCapabilities.v1_1_0 = OpenLayers.Class(OpenLayers.Format.WFSCapabilities.v1, {
  regExes: {
    trimSpace: /^\s*|\s*$/g,
    removeSpace: /\s*/g,
    splitSpace: /\s+/,
    trimComma: /\s*,\s*/g
  },
  readers: {
    wfs: OpenLayers.Util.applyDefaults({
      DefaultSRS: function (a, b) {
        var c = this.getChildValue(a);
        c && (b.srs = c)
      }
    }, OpenLayers.Format.WFSCapabilities.v1.prototype.readers.wfs),
    ows: OpenLayers.Format.OWSCommon.v1.prototype.readers.ows
  },
  CLASS_NAME: 'OpenLayers.Format.WFSCapabilities.v1_1_0'
});
OpenLayers.Layer.Image = OpenLayers.Class(OpenLayers.Layer, {
  isBaseLayer: !0,
  url: null,
  extent: null,
  size: null,
  tile: null,
  aspectRatio: null,
  initialize: function (a, b, c, d, e) {
    this.url = b;
    this.maxExtent = this.extent = c;
    this.size = d;
    OpenLayers.Layer.prototype.initialize.apply(this, [
      a,
      e
    ]);
    this.aspectRatio = this.extent.getHeight() / this.size.h / (this.extent.getWidth() / this.size.w)
  },
  destroy: function () {
    this.tile && (this.removeTileMonitoringHooks(this.tile), this.tile.destroy(), this.tile = null);
    OpenLayers.Layer.prototype.destroy.apply(this, arguments)
  },
  clone: function (a) {
    null == a && (a = new OpenLayers.Layer.Image(this.name, this.url, this.extent, this.size, this.getOptions()));
    return a = OpenLayers.Layer.prototype.clone.apply(this, [
      a
    ])
  },
  setMap: function (a) {
    null == this.options.maxResolution && (this.options.maxResolution = this.aspectRatio * this.extent.getWidth() / this.size.w);
    OpenLayers.Layer.prototype.setMap.apply(this, arguments)
  },
  moveTo: function (a, b, c) {
    OpenLayers.Layer.prototype.moveTo.apply(this, arguments);
    var d = null == this.tile;
    if (b || d) {
      this.setTileSize();
      var e = this.map.getLayerPxFromLonLat({
        lon: this.extent.left,
        lat: this.extent.top
      });
      d ? (this.tile = new OpenLayers.Tile.Image(this, e, this.extent, null, this.tileSize), this.addTileMonitoringHooks(this.tile))  : (this.tile.size = this.tileSize.clone(), this.tile.position = e.clone());
      this.tile.draw()
    }
  },
  setTileSize: function () {
    var a = this.extent.getWidth() / this.map.getResolution(),
    b = this.extent.getHeight() / this.map.getResolution();
    this.tileSize = new OpenLayers.Size(a, b)
  },
  addTileMonitoringHooks: function (a) {
    a.onLoadStart = function () {
      this.events.triggerEvent('loadstart')
    };
    a.events.register('loadstart', this, a.onLoadStart);
    a.onLoadEnd = function () {
      this.events.triggerEvent('loadend')
    };
    a.events.register('loadend', this, a.onLoadEnd);
    a.events.register('unload', this, a.onLoadEnd)
  },
  removeTileMonitoringHooks: function (a) {
    a.unload();
    a.events.un({
      loadstart: a.onLoadStart,
      loadend: a.onLoadEnd,
      unload: a.onLoadEnd,
      scope: this
    })
  },
  setUrl: function (a) {
    this.url = a;
    this.tile.draw()
  },
  getURL: function () {
    return this.url
  },
  CLASS_NAME: 'OpenLayers.Layer.Image'
});
OpenLayers.Strategy = OpenLayers.Class({
  layer: null,
  options: null,
  active: null,
  autoActivate: !0,
  autoDestroy: !0,
  initialize: function (a) {
    OpenLayers.Util.extend(this, a);
    this.options = a;
    this.active = !1
  },
  destroy: function () {
    this.deactivate();
    this.options = this.layer = null
  },
  setLayer: function (a) {
    this.layer = a
  },
  activate: function () {
    return !this.active ? this.active = !0 : !1
  },
  deactivate: function () {
    return this.active ? (this.active = !1, !0)  : !1
  },
  CLASS_NAME: 'OpenLayers.Strategy'
});
OpenLayers.Strategy.Save = OpenLayers.Class(OpenLayers.Strategy, {
  events: null,
  auto: !1,
  timer: null,
  initialize: function (a) {
    OpenLayers.Strategy.prototype.initialize.apply(this, [
      a
    ]);
    this.events = new OpenLayers.Events(this)
  },
  activate: function () {
    var a = OpenLayers.Strategy.prototype.activate.call(this);
    if (a && this.auto) if ('number' === typeof this.auto) this.timer = window.setInterval(OpenLayers.Function.bind(this.save, this), 1000 * this.auto);
     else this.layer.events.on({
      featureadded: this.triggerSave,
      afterfeaturemodified: this.triggerSave,
      scope: this
    });
    return a
  },
  deactivate: function () {
    var a = OpenLayers.Strategy.prototype.deactivate.call(this);
    a && this.auto && ('number' === typeof this.auto ? window.clearInterval(this.timer)  : this.layer.events.un({
      featureadded: this.triggerSave,
      afterfeaturemodified: this.triggerSave,
      scope: this
    }));
    return a
  },
  triggerSave: function (a) {
    var b = a.feature;
    (b.state === OpenLayers.State.INSERT || b.state === OpenLayers.State.UPDATE || b.state === OpenLayers.State.DELETE) && this.save([a.feature])
  },
  save: function (a) {
    a || (a = this.layer.features);
    this.events.triggerEvent('start', {
      features: a
    });
    var b = this.layer.projection,
    c = this.layer.map.getProjectionObject();
    if (!c.equals(b)) {
      for (var d = a.length, e = Array(d), f, g, h = 0; h < d; ++h) f = a[h],
      g = f.clone(),
      g.fid = f.fid,
      g.state = f.state,
      f.url && (g.url = f.url),
      g._original = f,
      g.geometry.transform(c, b),
      e[h] = g;
      a = e
    }
    this.layer.protocol.commit(a, {
      callback: this.onCommit,
      scope: this
    })
  },
  onCommit: function (a) {
    var b = {
      response: a
    };
    if (a.success()) {
      for (var c = a.reqFeatures, d, e = [
      ], f = a.insertIds || [
      ], g = 0, h = 0, i = c.length; h < i; ++h) if (d = c[h], d = d._original || d, a = d.state) a == OpenLayers.State.DELETE ? e.push(d)  : a == OpenLayers.State.INSERT && (d.fid = f[g], ++g),
      d.state = null;
      0 < e.length && this.layer.destroyFeatures(e);
      this.events.triggerEvent('success', b)
    } else this.events.triggerEvent('fail', b)
  },
  CLASS_NAME: 'OpenLayers.Strategy.Save'
});
OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
  defaultDesc: 'No description available',
  extractWaypoints: !0,
  extractTracks: !0,
  extractRoutes: !0,
  extractAttributes: !0,
  namespaces: {
    gpx: 'http://www.topografix.com/GPX/1/1',
    xsi: 'http://www.w3.org/2001/XMLSchema-instance'
  },
  schemaLocation: 'http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd',
  creator: 'OpenLayers',
  initialize: function (a) {
    this.externalProjection = new OpenLayers.Projection('EPSG:4326');
    OpenLayers.Format.XML.prototype.initialize.apply(this, [
      a
    ])
  },
  read: function (a) {
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    var b = [
    ];
    if (this.extractTracks) for (var c = a.getElementsByTagName('trk'), d = 0, e = c.length; d < e; d++) {
      var f = {
      };
      this.extractAttributes && (f = this.parseAttributes(c[d]));
      for (var g = this.getElementsByTagNameNS(c[d], c[d].namespaceURI, 'trkseg'), h = 0, i = g.length; h < i; h++) {
        var j = this.extractSegment(g[h], 'trkpt');
        b.push(new OpenLayers.Feature.Vector(j, f))
      }
    }
    if (this.extractRoutes) {
      e = a.getElementsByTagName('rte');
      c = 0;
      for (d = e.length; c < d; c++) f = {
      },
      this.extractAttributes && (f = this.parseAttributes(e[c])),
      g = this.extractSegment(e[c], 'rtept'),
      b.push(new OpenLayers.Feature.Vector(g, f))
    }
    if (this.extractWaypoints) {
      a = a.getElementsByTagName('wpt');
      c = 0;
      for (e = a.length; c < e; c++) f = {
      },
      this.extractAttributes && (f = this.parseAttributes(a[c])),
      d = new OpenLayers.Geometry.Point(a[c].getAttribute('lon'), a[c].getAttribute('lat')),
      b.push(new OpenLayers.Feature.Vector(d, f))
    }
    if (this.internalProjection && this.externalProjection) {
      f = 0;
      for (a = b.length; f <
      a; f++) b[f].geometry.transform(this.externalProjection, this.internalProjection)
    }
    return b
  },
  extractSegment: function (a, b) {
    for (var c = this.getElementsByTagNameNS(a, a.namespaceURI, b), d = [
    ], e = 0, f = c.length; e < f; e++) d.push(new OpenLayers.Geometry.Point(c[e].getAttribute('lon'), c[e].getAttribute('lat')));
    return new OpenLayers.Geometry.LineString(d)
  },
  parseAttributes: function (a) {
    for (var b = {
    }, a = a.firstChild, c, d; a; ) {
      if (1 == a.nodeType && a.firstChild && (c = a.firstChild, 3 == c.nodeType || 4 == c.nodeType)) d = a.prefix ? a.nodeName.split(':') [1] :
      a.nodeName,
      'trkseg' != d && 'rtept' != d && (b[d] = c.nodeValue);
      a = a.nextSibling
    }
    return b
  },
  write: function (a, b) {
    var a = OpenLayers.Util.isArray(a) ? a : [
      a
    ],
    c = this.createElementNS(this.namespaces.gpx, 'gpx');
    c.setAttribute('version', '1.1');
    c.setAttribute('creator', this.creator);
    this.setAttributes(c, {
      'xsi:schemaLocation': this.schemaLocation
    });
    b && 'object' == typeof b && c.appendChild(this.buildMetadataNode(b));
    for (var d = 0, e = a.length; d < e; d++) c.appendChild(this.buildFeatureNode(a[d]));
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      c
    ])
  },
  buildMetadataNode: function (a) {
    for (var b = [
      'name',
      'desc',
      'author'
    ], c = this.createElementNSPlus('gpx:metadata'), d = 0; d < b.length; d++) {
      var e = b[d];
      if (a[e]) {
        var f = this.createElementNSPlus('gpx:' + e);
        f.appendChild(this.createTextNode(a[e]));
        c.appendChild(f)
      }
    }
    return c
  },
  buildFeatureNode: function (a) {
    var b = a.geometry,
    b = b.clone();
    this.internalProjection && this.externalProjection && b.transform(this.internalProjection, this.externalProjection);
    if ('OpenLayers.Geometry.Point' == b.CLASS_NAME) {
      var c = this.buildWptNode(b);
      this.appendAttributesNode(c, a);
      return c
    }
    c = this.createElementNSPlus('gpx:trk');
    this.appendAttributesNode(c, a);
    for (var a = this.buildTrkSegNode(b), a = OpenLayers.Util.isArray(a) ? a : [
      a
    ], b = 0, d = a.length; b < d; b++) c.appendChild(a[b]);
    return c
  },
  buildTrkSegNode: function (a) {
    var b,
    c,
    d,
    e;
    if ('OpenLayers.Geometry.LineString' == a.CLASS_NAME || 'OpenLayers.Geometry.LinearRing' == a.CLASS_NAME) {
      b = this.createElementNSPlus('gpx:trkseg');
      c = 0;
      for (d = a.components.length; c < d; c++) e = a.components[c],
      b.appendChild(this.buildTrkPtNode(e));
      return b
    }
    b = [
    ];
    c = 0;
    for (d = a.components.length; c < d; c++) b.push(this.buildTrkSegNode(a.components[c]));
    return b
  },
  buildTrkPtNode: function (a) {
    var b = this.createElementNSPlus('gpx:trkpt');
    b.setAttribute('lon', a.x);
    b.setAttribute('lat', a.y);
    return b
  },
  buildWptNode: function (a) {
    var b = this.createElementNSPlus('gpx:wpt');
    b.setAttribute('lon', a.x);
    b.setAttribute('lat', a.y);
    return b
  },
  appendAttributesNode: function (a, b) {
    var c = this.createElementNSPlus('gpx:name');
    c.appendChild(this.createTextNode(b.attributes.name || b.id));
    a.appendChild(c);
    c = this.createElementNSPlus('gpx:desc');
    c.appendChild(this.createTextNode(b.attributes.description || this.defaultDesc));
    a.appendChild(c)
  },
  CLASS_NAME: 'OpenLayers.Format.GPX'
});
OpenLayers.Format.WMSDescribeLayer = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
  defaultVersion: '1.1.1',
  getVersion: function (a, b) {
    var c = OpenLayers.Format.XML.VersionedOGC.prototype.getVersion.apply(this, arguments);
    if ('1.1.1' == c || '1.1.0' == c) c = '1.1';
    return c
  },
  CLASS_NAME: 'OpenLayers.Format.WMSDescribeLayer'
});
OpenLayers.Format.WMSDescribeLayer.v1_1 = OpenLayers.Class(OpenLayers.Format.WMSDescribeLayer, {
  initialize: function (a) {
    OpenLayers.Format.WMSDescribeLayer.prototype.initialize.apply(this, [
      a
    ])
  },
  read: function (a) {
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    for (var a = a.documentElement.childNodes, b = [
    ], c, d, e = 0; e < a.length; ++e) if (c = a[e], d = c.nodeName, 'LayerDescription' == d) {
      d = c.getAttribute('name');
      var f = '',
      g = '',
      h = '';
      c.getAttribute('owsType') ? (f = c.getAttribute('owsType'), g = c.getAttribute('owsURL'))  :
      '' != c.getAttribute('wfs') ? (f = 'WFS', g = c.getAttribute('wfs'))  : '' != c.getAttribute('wcs') && (f = 'WCS', g = c.getAttribute('wcs'));
      c = c.getElementsByTagName('Query');
      0 < c.length && ((h = c[0].getAttribute('typeName')) || (h = c[0].getAttribute('typename')));
      b.push({
        layerName: d,
        owsType: f,
        owsURL: g,
        typeName: h
      })
    }
    return b
  },
  CLASS_NAME: 'OpenLayers.Format.WMSDescribeLayer.v1_1'
});
OpenLayers.Layer.OSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
  name: 'OpenStreetMap',
  url: [
    'http://a.tile.openstreetmap.org/${z}/${x}/${y}.png',
    'http://b.tile.openstreetmap.org/${z}/${x}/${y}.png',
    'http://c.tile.openstreetmap.org/${z}/${x}/${y}.png'
  ],
  attribution: 'Data CC-By-SA by <a href=\'http://openstreetmap.org/\'>OpenStreetMap</a>',
  sphericalMercator: !0,
  wrapDateLine: !0,
  tileOptions: null,
  initialize: function (a, b, c) {
    OpenLayers.Layer.XYZ.prototype.initialize.apply(this, arguments);
    this.tileOptions = OpenLayers.Util.extend({
      crossOriginKeyword: 'anonymous'
    }, this.options && this.options.tileOptions)
  },
  clone: function (a) {
    null == a && (a = new OpenLayers.Layer.OSM(this.name, this.url, this.getOptions()));
    return a = OpenLayers.Layer.XYZ.prototype.clone.apply(this, [
      a
    ])
  },
  CLASS_NAME: 'OpenLayers.Layer.OSM'
});
OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
  hitDetection: !0,
  hitOverflow: 0,
  canvas: null,
  features: null,
  pendingRedraw: !1,
  cachedSymbolBounds: {
  },
  initialize: function (a, b) {
    OpenLayers.Renderer.prototype.initialize.apply(this, arguments);
    this.root = document.createElement('canvas');
    this.container.appendChild(this.root);
    this.canvas = this.root.getContext('2d');
    this.features = {
    };
    this.hitDetection && (this.hitCanvas = document.createElement('canvas'), this.hitContext = this.hitCanvas.getContext('2d'))
  },
  setExtent: function () {
    OpenLayers.Renderer.prototype.setExtent.apply(this, arguments);
    return !1
  },
  eraseGeometry: function (a, b) {
    this.eraseFeatures(this.features[b][0])
  },
  supported: function () {
    return OpenLayers.CANVAS_SUPPORTED
  },
  setSize: function (a) {
    this.size = a.clone();
    var b = this.root;
    b.style.width = a.w + 'px';
    b.style.height = a.h + 'px';
    b.width = a.w;
    b.height = a.h;
    this.resolution = null;
    this.hitDetection && (b = this.hitCanvas, b.style.width = a.w + 'px', b.style.height = a.h + 'px', b.width = a.w, b.height = a.h)
  },
  drawFeature: function (a, b) {
    var c;
    if (a.geometry) {
      b = this.applyDefaultSymbolizer(b || a.style);
      c = a.geometry.getBounds();
      var d;
      this.map.baseLayer && this.map.baseLayer.wrapDateLine && (d = this.map.getMaxExtent());
      d = c && c.intersectsBounds(this.extent, {
        worldBounds: d
      });
      (c = 'none' !== b.display && !!c && d) ? this.features[a.id] = [
        a,
        b
      ] : delete this.features[a.id];
      this.pendingRedraw = !0
    }
    this.pendingRedraw && !this.locked && (this.redraw(), this.pendingRedraw = !1);
    return c
  },
  drawGeometry: function (a, b, c) {
    var d = a.CLASS_NAME;
    if ('OpenLayers.Geometry.Collection' ==
    d || 'OpenLayers.Geometry.MultiPoint' == d || 'OpenLayers.Geometry.MultiLineString' == d || 'OpenLayers.Geometry.MultiPolygon' == d) for (d = 0; d < a.components.length; d++) this.drawGeometry(a.components[d], b, c);
     else switch (a.CLASS_NAME) {
      case 'OpenLayers.Geometry.Point':
        this.drawPoint(a, b, c);
        break;
      case 'OpenLayers.Geometry.LineString':
        this.drawLineString(a, b, c);
        break;
      case 'OpenLayers.Geometry.LinearRing':
        this.drawLinearRing(a, b, c);
        break;
      case 'OpenLayers.Geometry.Polygon':
        this.drawPolygon(a, b, c)
    }
  },
  drawExternalGraphic: function (a, b, c) {
    var d = new Image;
    b.graphicTitle && (d.title = b.graphicTitle);
    var e = b.graphicWidth || b.graphicHeight,
    f = b.graphicHeight || b.graphicWidth,
    e = e ? e : 2 * b.pointRadius,
    f = f ? f : 2 * b.pointRadius,
    g = void 0 != b.graphicXOffset ? b.graphicXOffset : - (0.5 * e),
    h = void 0 != b.graphicYOffset ? b.graphicYOffset : - (0.5 * f),
    i = b.graphicOpacity || b.fillOpacity;
    d.onload = OpenLayers.Function.bind(function () {
      if (this.features[c]) {
        var b = this.getLocalXY(a),
        k = b[0],
        b = b[1];
        if (!isNaN(k) && !isNaN(b)) {
          var k = k + g | 0,
          b = b + h | 0,
          l = this.canvas;
          l.globalAlpha = i;
          var m = OpenLayers.Renderer.Canvas.drawImageScaleFactor || (OpenLayers.Renderer.Canvas.drawImageScaleFactor = /android 2.1/.test(navigator.userAgent.toLowerCase()) ? 320 / window.screen.width : 1);
          l.drawImage(d, k * m, b * m, e * m, f * m);
          if (this.hitDetection) {
            this.setHitContextStyle('fill', c);
            this.hitContext.fillRect(k, b, e, f)
          }
        }
      }
    }, this);
    d.src = b.externalGraphic
  },
  drawNamedSymbol: function (a, b, c) {
    var d,
    e,
    f,
    g;
    f = Math.PI / 180;
    var h = OpenLayers.Renderer.symbol[b.graphicName];
    if (!h) throw Error(b.graphicName + ' is not a valid symbol name');
    if (h.length && !(2 > h.length) && (a = this.getLocalXY(a), e = a[0], g = a[1], !isNaN(e) && !isNaN(g))) {
      this.canvas.lineCap = 'round';
      this.canvas.lineJoin = 'round';
      this.hitDetection && (this.hitContext.lineCap = 'round', this.hitContext.lineJoin = 'round');
      if (b.graphicName in this.cachedSymbolBounds) d = this.cachedSymbolBounds[b.graphicName];
       else {
        d = new OpenLayers.Bounds;
        for (a = 0; a < h.length; a += 2) d.extend(new OpenLayers.LonLat(h[a], h[a + 1]));
        this.cachedSymbolBounds[b.graphicName] = d
      }
      this.canvas.save();
      this.hitDetection && this.hitContext.save();
      this.canvas.translate(e, g);
      this.hitDetection && this.hitContext.translate(e, g);
      a = f * b.rotation;
      isNaN(a) || (this.canvas.rotate(a), this.hitDetection && this.hitContext.rotate(a));
      f = 2 * b.pointRadius / Math.max(d.getWidth(), d.getHeight());
      this.canvas.scale(f, f);
      this.hitDetection && this.hitContext.scale(f, f);
      a = d.getCenterLonLat().lon;
      d = d.getCenterLonLat().lat;
      this.canvas.translate( - a, - d);
      this.hitDetection && this.hitContext.translate( - a, - d);
      g = b.strokeWidth;
      b.strokeWidth = g / f;
      if (!1 !== b.fill) {
        this.setCanvasStyle('fill', b);
        this.canvas.beginPath();
        for (a = 0; a < h.length; a += 2) d = h[a],
        e = h[a + 1],
        0 == a && this.canvas.moveTo(d, e),
        this.canvas.lineTo(d, e);
        this.canvas.closePath();
        this.canvas.fill();
        if (this.hitDetection) {
          this.setHitContextStyle('fill', c, b);
          this.hitContext.beginPath();
          for (a = 0; a < h.length; a += 2) d = h[a],
          e = h[a + 1],
          0 == a && this.canvas.moveTo(d, e),
          this.hitContext.lineTo(d, e);
          this.hitContext.closePath();
          this.hitContext.fill()
        }
      }
      if (!1 !== b.stroke) {
        this.setCanvasStyle('stroke', b);
        this.canvas.beginPath();
        for (a = 0; a < h.length; a += 2) d = h[a],
        e = h[a + 1],
        0 == a && this.canvas.moveTo(d, e),
        this.canvas.lineTo(d, e);
        this.canvas.closePath();
        this.canvas.stroke();
        if (this.hitDetection) {
          this.setHitContextStyle('stroke', c, b, f);
          this.hitContext.beginPath();
          for (a = 0; a < h.length; a += 2) d = h[a],
          e = h[a + 1],
          0 == a && this.hitContext.moveTo(d, e),
          this.hitContext.lineTo(d, e);
          this.hitContext.closePath();
          this.hitContext.stroke()
        }
      }
      b.strokeWidth = g;
      this.canvas.restore();
      this.hitDetection && this.hitContext.restore();
      this.setCanvasStyle('reset')
    }
  },
  setCanvasStyle: function (a, b) {
    'fill' ===
    a ? (this.canvas.globalAlpha = b.fillOpacity, this.canvas.fillStyle = b.fillColor)  : 'stroke' === a ? (this.canvas.globalAlpha = b.strokeOpacity, this.canvas.strokeStyle = b.strokeColor, this.canvas.lineWidth = b.strokeWidth)  : (this.canvas.globalAlpha = 0, this.canvas.lineWidth = 1)
  },
  featureIdToHex: function (a) {
    a = Number(a.split('_').pop()) + 1;
    16777216 <= a && (this.hitOverflow = a - 16777215, a = a % 16777216 + 1);
    var a = '000000' + a.toString(16),
    b = a.length;
    return a = '#' + a.substring(b - 6, b)
  },
  setHitContextStyle: function (a, b, c, d) {
    b = this.featureIdToHex(b);
    'fill' == a ? (this.hitContext.globalAlpha = 1, this.hitContext.fillStyle = b)  : 'stroke' == a ? (this.hitContext.globalAlpha = 1, this.hitContext.strokeStyle = b, 'undefined' === typeof d ? this.hitContext.lineWidth = c.strokeWidth + 2 : isNaN(d) || (this.hitContext.lineWidth = c.strokeWidth + 2 / d))  : (this.hitContext.globalAlpha = 0, this.hitContext.lineWidth = 1)
  },
  drawPoint: function (a, b, c) {
    if (!1 !== b.graphic) if (b.externalGraphic) this.drawExternalGraphic(a, b, c);
     else if (b.graphicName && 'circle' != b.graphicName) this.drawNamedSymbol(a, b, c);
     else {
      var d = this.getLocalXY(a),
      a = d[0],
      d = d[1];
      if (!isNaN(a) && !isNaN(d)) {
        var e = 2 * Math.PI,
        f = b.pointRadius;
        !1 !== b.fill && (this.setCanvasStyle('fill', b), this.canvas.beginPath(), this.canvas.arc(a, d, f, 0, e, !0), this.canvas.fill(), this.hitDetection && (this.setHitContextStyle('fill', c, b), this.hitContext.beginPath(), this.hitContext.arc(a, d, f, 0, e, !0), this.hitContext.fill()));
        !1 !== b.stroke && (this.setCanvasStyle('stroke', b), this.canvas.beginPath(), this.canvas.arc(a, d, f, 0, e, !0), this.canvas.stroke(), this.hitDetection && (this.setHitContextStyle('stroke', c, b), this.hitContext.beginPath(), this.hitContext.arc(a, d, f, 0, e, !0), this.hitContext.stroke()), this.setCanvasStyle('reset'))
      }
    }
  },
  drawLineString: function (a, b, c) {
    b = OpenLayers.Util.applyDefaults({
      fill: !1
    }, b);
    this.drawLinearRing(a, b, c)
  },
  drawLinearRing: function (a, b, c) {
    !1 !== b.fill && (this.setCanvasStyle('fill', b), this.renderPath(this.canvas, a, b, c, 'fill'), this.hitDetection && (this.setHitContextStyle('fill', c, b), this.renderPath(this.hitContext, a, b, c, 'fill')));
    !1 !== b.stroke && (this.setCanvasStyle('stroke', b), this.renderPath(this.canvas, a, b, c, 'stroke'), this.hitDetection && (this.setHitContextStyle('stroke', c, b), this.renderPath(this.hitContext, a, b, c, 'stroke')));
    this.setCanvasStyle('reset')
  },
  renderPath: function (a, b, c, d, e) {
    b = b.components;
    c = b.length;
    a.beginPath();
    var d = this.getLocalXY(b[0]),
    f = d[1];
    if (!isNaN(d[0]) && !isNaN(f)) {
      a.moveTo(d[0], d[1]);
      for (d = 1; d < c; ++d) f = this.getLocalXY(b[d]),
      a.lineTo(f[0], f[1]);
      'fill' === e ? a.fill()  : a.stroke()
    }
  },
  drawPolygon: function (a, b, c) {
    var a = a.components,
    d = a.length;
    this.drawLinearRing(a[0], b, c);
    for (var e = 1; e <
    d; ++e) this.canvas.globalCompositeOperation = 'destination-out',
    this.hitDetection && (this.hitContext.globalCompositeOperation = 'destination-out'),
    this.drawLinearRing(a[e], OpenLayers.Util.applyDefaults({
      stroke: !1,
      fillOpacity: 1
    }, b), c),
    this.canvas.globalCompositeOperation = 'source-over',
    this.hitDetection && (this.hitContext.globalCompositeOperation = 'source-over'),
    this.drawLinearRing(a[e], OpenLayers.Util.applyDefaults({
      fill: !1
    }, b), c)
  },
  drawText: function (a, b) {
    var c = this.getLocalXY(a);
    this.setCanvasStyle('reset');
    this.canvas.fillStyle = b.fontColor;
    this.canvas.globalAlpha = b.fontOpacity || 1;
    var d = [
      b.fontStyle ? b.fontStyle : 'normal',
      'normal',
      b.fontWeight ? b.fontWeight : 'normal',
      b.fontSize ? b.fontSize : '1em',
      b.fontFamily ? b.fontFamily : 'sans-serif'
    ].join(' '),
    e = b.label.split('\n'),
    f = e.length;
    if (this.canvas.fillText) {
      this.canvas.font = d;
      this.canvas.textAlign = OpenLayers.Renderer.Canvas.LABEL_ALIGN[b.labelAlign[0]] || 'center';
      this.canvas.textBaseline = OpenLayers.Renderer.Canvas.LABEL_ALIGN[b.labelAlign[1]] || 'middle';
      var g = OpenLayers.Renderer.Canvas.LABEL_FACTOR[b.labelAlign[1]];
      null == g && (g = - 0.5);
      d = this.canvas.measureText('Mg').height || this.canvas.measureText('xx').width;
      c[1] += d * g * (f - 1);
      for (g = 0; g < f; g++) b.labelOutlineWidth && (this.canvas.save(), this.canvas.strokeStyle = b.labelOutlineColor, this.canvas.lineWidth = b.labelOutlineWidth, this.canvas.strokeText(e[g], c[0], c[1] + d * g + 1), this.canvas.restore()),
      this.canvas.fillText(e[g], c[0], c[1] + d * g)
    } else if (this.canvas.mozDrawText) {
      this.canvas.mozTextStyle = d;
      var h = OpenLayers.Renderer.Canvas.LABEL_FACTOR[b.labelAlign[0]];
      null == h && (h = - 0.5);
      g = OpenLayers.Renderer.Canvas.LABEL_FACTOR[b.labelAlign[1]];
      null == g && (g = - 0.5);
      d = this.canvas.mozMeasureText('xx');
      c[1] += d * (1 + g * f);
      for (g = 0; g < f; g++) {
        var i = c[0] + h * this.canvas.mozMeasureText(e[g]),
        j = c[1] + g * d;
        this.canvas.translate(i, j);
        this.canvas.mozDrawText(e[g]);
        this.canvas.translate( - i, - j)
      }
    }
    this.setCanvasStyle('reset')
  },
  getLocalXY: function (a) {
    var b = this.getResolution(),
    c = this.extent;
    return [(a.x - this.featureDx) / b + - c.left / b,
    c.top / b - a.y / b]
  },
  clear: function () {
    var a = this.root.height,
    b = this.root.width;
    this.canvas.clearRect(0, 0, b, a);
    this.features = {
    };
    this.hitDetection && this.hitContext.clearRect(0, 0, b, a)
  },
  getFeatureIdFromEvent: function (a) {
    var b;
    if (this.hitDetection && 'none' !== this.root.style.display && !this.map.dragging && (a = a.xy, a = this.hitContext.getImageData(a.x | 0, a.y | 0, 1, 1).data, 255 === a[3] && (a = a[2] + 256 * (a[1] + 256 * a[0])))) {
      a = 'OpenLayers.Feature.Vector_' + (a - 1 + this.hitOverflow);
      try {
        b = this.features[a][0]
      } catch (c) {
      }
    }
    return b
  },
  eraseFeatures: function (a) {
    OpenLayers.Util.isArray(a) || (a = [
      a
    ]);
    for (var b = 0; b < a.length; ++b) delete this.features[a[b].id];
    this.redraw()
  },
  redraw: function () {
    if (!this.locked) {
      var a = this.root.height,
      b = this.root.width;
      this.canvas.clearRect(0, 0, b, a);
      this.hitDetection && this.hitContext.clearRect(0, 0, b, a);
      var a = [
      ],
      c,
      d,
      e = this.map.baseLayer && this.map.baseLayer.wrapDateLine && this.map.getMaxExtent(),
      f;
      for (f in this.features) this.features.hasOwnProperty(f) && (b = this.features[f][0], c = b.geometry, this.calculateFeatureDx(c.getBounds(), e), d = this.features[f][1], this.drawGeometry(c, d, b.id), d.label && a.push([b,
      d]));
      b = 0;
      for (c = a.length; b < c; ++b) f = a[b],
      this.drawText(f[0].geometry.getCentroid(), f[1])
    }
  },
  CLASS_NAME: 'OpenLayers.Renderer.Canvas'
});
OpenLayers.Renderer.Canvas.LABEL_ALIGN = {
  l: 'left',
  r: 'right',
  t: 'top',
  b: 'bottom'
};
OpenLayers.Renderer.Canvas.LABEL_FACTOR = {
  l: 0,
  r: - 1,
  t: 0,
  b: - 1
};
OpenLayers.Renderer.Canvas.drawImageScaleFactor = null;
OpenLayers.Format.OSM = OpenLayers.Class(OpenLayers.Format.XML, {
  checkTags: !1,
  interestingTagsExclude: null,
  areaTags: null,
  initialize: function (a) {
    for (var b = {
      interestingTagsExclude: 'source source_ref source:ref history attribution created_by'.split(' '),
      areaTags: 'area building leisure tourism ruins historic landuse military natural sport'.split(' ')
    }, b = OpenLayers.Util.extend(b, a), c = {
    }, a = 0; a < b.interestingTagsExclude.length; a++) c[b.interestingTagsExclude[a]] = !0;
    b.interestingTagsExclude = c;
    c = {
    };
    for (a = 0; a < b.areaTags.length; a++) c[b.areaTags[a]] = !0;
    b.areaTags = c;
    this.externalProjection = new OpenLayers.Projection('EPSG:4326');
    OpenLayers.Format.XML.prototype.initialize.apply(this, [
      b
    ])
  },
  read: function (a) {
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    for (var b = this.getNodes(a), c = this.getWays(a), a = Array(c.length), d = 0; d < c.length; d++) {
      for (var e = Array(c[d].nodes.length), f = this.isWayArea(c[d]) ? 1 : 0, g = 0; g < c[d].nodes.length; g++) {
        var h = b[c[d].nodes[g]],
        i = new OpenLayers.Geometry.Point(h.lon, h.lat);
        i.osm_id = parseInt(c[d].nodes[g]);
        e[g] = i;
        h.used = !0
      }
      h = null;
      h = f ? new OpenLayers.Geometry.Polygon(new OpenLayers.Geometry.LinearRing(e))  : new OpenLayers.Geometry.LineString(e);
      this.internalProjection && this.externalProjection && h.transform(this.externalProjection, this.internalProjection);
      e = new OpenLayers.Feature.Vector(h, c[d].tags);
      e.osm_id = parseInt(c[d].id);
      e.fid = 'way.' + e.osm_id;
      a[d] = e
    }
    for (var j in b) {
      h = b[j];
      if (!h.used || this.checkTags) {
        c = null;
        if (this.checkTags) {
          c = this.getTags(h.node, !0);
          if (h.used && !c[1]) continue;
          c = c[0]
        } else c = this.getTags(h.node);
        e = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(h.lon, h.lat), c);
        this.internalProjection && this.externalProjection && e.geometry.transform(this.externalProjection, this.internalProjection);
        e.osm_id = parseInt(j);
        e.fid = 'node.' + e.osm_id;
        a.push(e)
      }
      h.node = null
    }
    return a
  },
  getNodes: function (a) {
    for (var a = a.getElementsByTagName('node'), b = {
    }, c = 0; c < a.length; c++) {
      var d = a[c],
      e = d.getAttribute('id');
      b[e] = {
        lat: d.getAttribute('lat'),
        lon: d.getAttribute('lon'),
        node: d
      }
    }
    return b
  },
  getWays: function (a) {
    for (var a = a.getElementsByTagName('way'), b = [
    ], c = 0; c < a.length; c++) {
      var d = a[c],
      e = {
        id: d.getAttribute('id')
      };
      e.tags = this.getTags(d);
      d = d.getElementsByTagName('nd');
      e.nodes = Array(d.length);
      for (var f = 0; f < d.length; f++) e.nodes[f] = d[f].getAttribute('ref');
      b.push(e)
    }
    return b
  },
  getTags: function (a, b) {
    for (var c = a.getElementsByTagName('tag'), d = {
    }, e = !1, f = 0; f < c.length; f++) {
      var g = c[f].getAttribute('k');
      d[g] = c[f].getAttribute('v');
      b && (this.interestingTagsExclude[g] || (e = !0))
    }
    return b ? [
      d,
      e
    ] : d
  },
  isWayArea: function (a) {
    var b = !1,
    c = !1;
    a.nodes[0] == a.nodes[a.nodes.length - 1] && (b = !0);
    if (this.checkTags) for (var d in a.tags) if (this.areaTags[d]) {
      c = !0;
      break
    }
    return b && (this.checkTags ? c : !0)
  },
  write: function (a) {
    OpenLayers.Util.isArray(a) || (a = [
      a
    ]);
    this.osm_id = 1;
    this.created_nodes = {
    };
    var b = this.createElementNS(null, 'osm');
    b.setAttribute('version', '0.5');
    b.setAttribute('generator', 'OpenLayers ' + OpenLayers.VERSION_NUMBER);
    for (var c = a.length - 1; 0 <= c; c--) for (var d = this.createFeatureNodes(a[c]), e = 0; e < d.length; e++) b.appendChild(d[e]);
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      b
    ])
  },
  createFeatureNodes: function (a) {
    var b = [
    ],
    c = a.geometry.CLASS_NAME,
    c = c.substring(c.lastIndexOf('.') + 1),
    c = c.toLowerCase();
    (c = this.createXML[c]) && (b = c.apply(this, [
      a
    ]));
    return b
  },
  createXML: {
    point: function (a) {
      var b = null,
      c = a.geometry ? a.geometry : a;
      this.internalProjection && this.externalProjection && (c = c.clone(), c.transform(this.internalProjection, this.externalProjection));
      var d = !1;
      a.osm_id ? (b = a.osm_id, this.created_nodes[b] && (d = !0))  : (b = - this.osm_id, this.osm_id++);
      var e = d ? this.created_nodes[b] : this.createElementNS(null, 'node');
      this.created_nodes[b] = e;
      e.setAttribute('id', b);
      e.setAttribute('lon', c.x);
      e.setAttribute('lat', c.y);
      a.attributes && this.serializeTags(a, e);
      this.setState(a, e);
      return d ? [
      ] : [
        e
      ]
    },
    linestring: function (a) {
      var b,
      c = [
      ],
      d = a.geometry;
      a.osm_id ? b = a.osm_id : (b = - this.osm_id, this.osm_id++);
      var e = this.createElementNS(null, 'way');
      e.setAttribute('id', b);
      for (b = 0; b < d.components.length; b++) {
        var f = this.createXML.point.apply(this, [
          d.components[b]
        ]);
        if (f.length) {
          var f = f[0],
          g = f.getAttribute('id');
          c.push(f)
        } else g = d.components[b].osm_id,
        f = this.created_nodes[g];
        this.setState(a, f);
        f = this.createElementNS(null, 'nd');
        f.setAttribute('ref', g);
        e.appendChild(f)
      }
      this.serializeTags(a, e);
      c.push(e);
      return c
    },
    polygon: function (a) {
      var b = OpenLayers.Util.extend({
        area: 'yes'
      }, a.attributes),
      b = new OpenLayers.Feature.Vector(a.geometry.components[0], b);
      b.osm_id = a.osm_id;
      return this.createXML.linestring.apply(this, [
        b
      ])
    }
  },
  serializeTags: function (a, b) {
    for (var c in a.attributes) {
      var d = this.createElementNS(null, 'tag');
      d.setAttribute('k', c);
      d.setAttribute('v', a.attributes[c]);
      b.appendChild(d)
    }
  },
  setState: function (a, b) {
    if (a.state) {
      var c = null;
      switch (a.state) {
        case OpenLayers.State.UPDATE:
        case OpenLayers.State.DELETE:
          c = 'delete'
      }
      c && b.setAttribute('action', c)
    }
  },
  CLASS_NAME: 'OpenLayers.Format.OSM'
});
OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
  key: null,
  serverResolutions: [
    156543.03390625,
    78271.516953125,
    39135.7584765625,
    19567.87923828125,
    9783.939619140625,
    4891.9698095703125,
    2445.9849047851562,
    1222.9924523925781,
    611.4962261962891,
    305.74811309814453,
    152.87405654907226,
    76.43702827453613,
    38.218514137268066,
    19.109257068634033,
    9.554628534317017,
    4.777314267158508,
    2.388657133579254,
    1.194328566789627,
    0.5971642833948135,
    0.29858214169740677,
    0.14929107084870338,
    0.07464553542435169
  ],
  attributionTemplate: '<span class="olBingAttribution ${type}"><div><a target="_blank" href="http://www.bing.com/maps/"><img src="${logo}" /></a></div>${copyrights}<a style="white-space: nowrap" target="_blank" href="http://www.microsoft.com/maps/product/terms.html">Terms of Use</a></span>',
  metadata: null,
  type: 'Road',
  culture: 'en-US',
  metadataParams: null,
  tileOptions: null,
  initialize: function (a) {
    a = OpenLayers.Util.applyDefaults({
      sphericalMercator: !0
    }, a);
    OpenLayers.Layer.XYZ.prototype.initialize.apply(this, [
      a.name || 'Bing ' + (a.type || this.type),
      null,
      a
    ]);
    this.tileOptions = OpenLayers.Util.extend({
      crossOriginKeyword: 'anonymous'
    }, this.options.tileOptions);
    this.loadMetadata()
  },
  loadMetadata: function () {
    this._callbackId = '_callback_' + this.id.replace(/\./g, '_');
    window[this._callbackId] = OpenLayers.Function.bind(OpenLayers.Layer.Bing.processMetadata, this);
    var a = OpenLayers.Util.applyDefaults({
      key: this.key,
      jsonp: this._callbackId,
      include: 'ImageryProviders'
    }, this.metadataParams),
    a = 'http://dev.virtualearth.net/REST/v1/Imagery/Metadata/' + this.type + '?' + OpenLayers.Util.getParameterString(a),
    b = document.createElement('script');
    b.type = 'text/javascript';
    b.src = a;
    b.id = this._callbackId;
    document.getElementsByTagName('head') [0].appendChild(b)
  },
  initLayer: function () {
    var a = this.metadata.resourceSets[0].resources[0],
    b = a.imageUrl.replace('{quadkey}', '${quadkey}'),
    b = b.replace('{culture}', this.culture);
    this.url = [
    ];
    for (var c = 0; c < a.imageUrlSubdomains.length; ++c) this.url.push(b.replace('{subdomain}', a.imageUrlSubdomains[c]));
    this.addOptions({
      maxResolution: Math.min(this.serverResolutions[a.zoomMin], this.maxResolution || Number.POSITIVE_INFINITY),
      numZoomLevels: Math.min(a.zoomMax + 1 - a.zoomMin, this.numZoomLevels)
    }, !0)
  },
  getURL: function (a) {
    if (this.url) {
      for (var b = this.getXYZ(a), a = b.x, c = b.y, b = b.z, d = [
      ], e = b; 0 < e; --e) {
        var f = '0',
        g = 1 << e - 1;
        0 != (a & g) && f++;
        0 != (c & g) && (f++, f++);
        d.push(f)
      }
      d = d.join('');
      a = this.selectUrl('' + a + c + b, this.url);
      return OpenLayers.String.format(a, {
        quadkey: d
      })
    }
  },
  updateAttribution: function () {
    var a = this.metadata;
    if (a.resourceSets && this.map && this.map.center) {
      var b = a.resourceSets[0].resources[0],
      c = this.map.getExtent().transform(this.map.getProjectionObject(), new OpenLayers.Projection('EPSG:4326')),
      b = b.imageryProviders,
      d = OpenLayers.Util.indexOf(this.serverResolutions, this.getServerResolution()),
      e = '',
      f,
      g,
      h,
      i,
      j,
      k,
      l;
      g = 0;
      for (h = b.length; g < h; ++g) {
        f = b[g];
        i = 0;
        for (j = f.coverageAreas.length; i <
        j; ++i) l = f.coverageAreas[i],
        k = OpenLayers.Bounds.fromArray(l.bbox, !0),
        c.intersectsBounds(k) && (d <= l.zoomMax && d >= l.zoomMin) && (e += f.attribution + ' ')
      }
      this.attribution = OpenLayers.String.format(this.attributionTemplate, {
        type: this.type.toLowerCase(),
        logo: a.brandLogoUri,
        copyrights: e
      });
      this.map && this.map.events.triggerEvent('changelayer', {
        layer: this,
        property: 'attribution'
      })
    }
  },
  setMap: function () {
    OpenLayers.Layer.XYZ.prototype.setMap.apply(this, arguments);
    this.updateAttribution();
    this.map.events.register('moveend', this, this.updateAttribution)
  },
  clone: function (a) {
    null == a && (a = new OpenLayers.Layer.Bing(this.options));
    return a = OpenLayers.Layer.XYZ.prototype.clone.apply(this, [
      a
    ])
  },
  destroy: function () {
    this.map && this.map.events.unregister('moveend', this, this.updateAttribution);
    OpenLayers.Layer.XYZ.prototype.destroy.apply(this, arguments)
  },
  CLASS_NAME: 'OpenLayers.Layer.Bing'
});
OpenLayers.Layer.Bing.processMetadata = function (a) {
  this.metadata = a;
  this.initLayer();
  a = document.getElementById(this._callbackId);
  a.parentNode.removeChild(a);
  window[this._callbackId] = void 0;
  delete this._callbackId
};
OpenLayers.Layer.PointGrid = OpenLayers.Class(OpenLayers.Layer.Vector, {
  dx: null,
  dy: null,
  ratio: 1.5,
  maxFeatures: 250,
  rotation: 0,
  origin: null,
  gridBounds: null,
  initialize: function (a) {
    a = a || {
    };
    OpenLayers.Layer.Vector.prototype.initialize.apply(this, [
      a.name,
      a
    ])
  },
  setMap: function (a) {
    OpenLayers.Layer.Vector.prototype.setMap.apply(this, arguments);
    a.events.register('moveend', this, this.onMoveEnd)
  },
  removeMap: function (a) {
    a.events.unregister('moveend', this, this.onMoveEnd);
    OpenLayers.Layer.Vector.prototype.removeMap.apply(this, arguments)
  },
  setRatio: function (a) {
    this.ratio = a;
    this.updateGrid(!0)
  },
  setMaxFeatures: function (a) {
    this.maxFeatures = a;
    this.updateGrid(!0)
  },
  setSpacing: function (a, b) {
    this.dx = a;
    this.dy = b || a;
    this.updateGrid(!0)
  },
  setOrigin: function (a) {
    this.origin = a;
    this.updateGrid(!0)
  },
  getOrigin: function () {
    this.origin || (this.origin = this.map.getExtent().getCenterLonLat());
    return this.origin
  },
  setRotation: function (a) {
    this.rotation = a;
    this.updateGrid(!0)
  },
  onMoveEnd: function () {
    this.updateGrid()
  },
  getViewBounds: function () {
    var a = this.map.getExtent();
    if (this.rotation) {
      var b = this.getOrigin(),
      b = new OpenLayers.Geometry.Point(b.lon, b.lat),
      a = a.toGeometry();
      a.rotate( - this.rotation, b);
      a = a.getBounds()
    }
    return a
  },
  updateGrid: function (a) {
    if (a || this.invalidBounds()) {
      var b = this.getViewBounds(),
      c = this.getOrigin(),
      a = new OpenLayers.Geometry.Point(c.lon, c.lat),
      d = b.getWidth(),
      e = b.getHeight(),
      f = d / e,
      g = Math.sqrt(this.dx * this.dy * this.maxFeatures / f),
      d = Math.min(d * this.ratio, g * f),
      e = Math.min(e * this.ratio, g),
      b = b.getCenterLonLat();
      this.gridBounds = new OpenLayers.Bounds(b.lon -
      d / 2, b.lat - e / 2, b.lon + d / 2, b.lat + e / 2);
      for (var b = Math.floor(e / this.dy), d = Math.floor(d / this.dx), e = c.lon + this.dx * Math.ceil((this.gridBounds.left - c.lon) / this.dx), c = c.lat + this.dy * Math.ceil((this.gridBounds.bottom - c.lat) / this.dy), g = Array(b * d), h, i = 0; i < d; ++i) for (var f = e + i * this.dx, j = 0; j < b; ++j) h = c + j * this.dy,
      h = new OpenLayers.Geometry.Point(f, h),
      this.rotation && h.rotate(this.rotation, a),
      g[i * b + j] = new OpenLayers.Feature.Vector(h);
      this.destroyFeatures(this.features, {
        silent: !0
      });
      this.addFeatures(g, {
        silent: !0
      })
    }
  },
  invalidBounds: function () {
    return !this.gridBounds || !this.gridBounds.containsBounds(this.getViewBounds())
  },
  CLASS_NAME: 'OpenLayers.Layer.PointGrid'
});
OpenLayers.Filter.Spatial = OpenLayers.Class(OpenLayers.Filter, {
  type: null,
  property: null,
  value: null,
  distance: null,
  distanceUnits: null,
  evaluate: function (a) {
    var b = !1;
    switch (this.type) {
      case OpenLayers.Filter.Spatial.BBOX:
      case OpenLayers.Filter.Spatial.INTERSECTS:
        if (a.geometry) {
          var c = this.value;
          'OpenLayers.Bounds' == this.value.CLASS_NAME && (c = this.value.toGeometry());
          a.geometry.intersects(c) && (b = !0)
        }
        break;
      default:
        throw Error('evaluate is not implemented for this filter type.');
    }
    return b
  },
  clone: function () {
    var a = OpenLayers.Util.applyDefaults({
      value: this.value && this.value.clone && this.value.clone()
    }, this);
    return new OpenLayers.Filter.Spatial(a)
  },
  CLASS_NAME: 'OpenLayers.Filter.Spatial'
});
OpenLayers.Filter.Spatial.BBOX = 'BBOX';
OpenLayers.Filter.Spatial.INTERSECTS = 'INTERSECTS';
OpenLayers.Filter.Spatial.DWITHIN = 'DWITHIN';
OpenLayers.Filter.Spatial.WITHIN = 'WITHIN';
OpenLayers.Filter.Spatial.CONTAINS = 'CONTAINS';
OpenLayers.Format.SLD = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
  profile: null,
  defaultVersion: '1.0.0',
  stringifyOutput: !0,
  namedLayersAsArray: !1,
  CLASS_NAME: 'OpenLayers.Format.SLD'
});
OpenLayers.Format.GML.v2 = OpenLayers.Class(OpenLayers.Format.GML.Base, {
  schemaLocation: 'http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd',
  initialize: function (a) {
    OpenLayers.Format.GML.Base.prototype.initialize.apply(this, [
      a
    ])
  },
  readers: {
    gml: OpenLayers.Util.applyDefaults({
      outerBoundaryIs: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        b.outer = c.components[0]
      },
      innerBoundaryIs: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        b.inner.push(c.components[0])
      },
      Box: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        b.components || (b.components = [
        ]);
        var d = c.points[0],
        c = c.points[1];
        b.components.push(new OpenLayers.Bounds(d.x, d.y, c.x, c.y))
      }
    }, OpenLayers.Format.GML.Base.prototype.readers.gml),
    feature: OpenLayers.Format.GML.Base.prototype.readers.feature,
    wfs: OpenLayers.Format.GML.Base.prototype.readers.wfs
  },
  write: function (a) {
    a = this.writeNode(OpenLayers.Util.isArray(a) ? 'wfs:FeatureCollection' : 'gml:featureMember', a);
    this.setAttributeNS(a, this.namespaces.xsi, 'xsi:schemaLocation', this.schemaLocation);
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      a
    ])
  },
  writers: {
    gml: OpenLayers.Util.applyDefaults({
      Point: function (a) {
        var b = this.createElementNSPlus('gml:Point');
        this.writeNode('coordinates', [
          a
        ], b);
        return b
      },
      coordinates: function (a) {
        for (var b = a.length, c = Array(b), d, e = 0; e < b; ++e) d = a[e],
        c[e] = this.xy ? d.x + ',' + d.y : d.y + ',' + d.x,
        void 0 != d.z && (c[e] += ',' + d.z);
        return this.createElementNSPlus('gml:coordinates', {
          attributes: {
            decimal: '.',
            cs: ',',
            ts: ' '
          },
          value: 1 == b ? c[0] : c.join(' ')
        })
      },
      LineString: function (a) {
        var b = this.createElementNSPlus('gml:LineString');
        this.writeNode('coordinates', a.components, b);
        return b
      },
      Polygon: function (a) {
        var b = this.createElementNSPlus('gml:Polygon');
        this.writeNode('outerBoundaryIs', a.components[0], b);
        for (var c = 1; c < a.components.length; ++c) this.writeNode('innerBoundaryIs', a.components[c], b);
        return b
      },
      outerBoundaryIs: function (a) {
        var b = this.createElementNSPlus('gml:outerBoundaryIs');
        this.writeNode('LinearRing', a, b);
        return b
      },
      innerBoundaryIs: function (a) {
        var b = this.createElementNSPlus('gml:innerBoundaryIs');
        this.writeNode('LinearRing', a, b);
        return b
      },
      LinearRing: function (a) {
        var b = this.createElementNSPlus('gml:LinearRing');
        this.writeNode('coordinates', a.components, b);
        return b
      },
      Box: function (a) {
        var b = this.createElementNSPlus('gml:Box');
        this.writeNode('coordinates', [
          {
            x: a.left,
            y: a.bottom
          },
          {
            x: a.right,
            y: a.top
          }
        ], b);
        this.srsName && b.setAttribute('srsName', this.srsName);
        return b
      }
    }, OpenLayers.Format.GML.Base.prototype.writers.gml),
    feature: OpenLayers.Format.GML.Base.prototype.writers.feature,
    wfs: OpenLayers.Format.GML.Base.prototype.writers.wfs
  },
  CLASS_NAME: 'OpenLayers.Format.GML.v2'
});
OpenLayers.Format.Filter.v1_0_0 = OpenLayers.Class(OpenLayers.Format.GML.v2, OpenLayers.Format.Filter.v1, {
  VERSION: '1.0.0',
  schemaLocation: 'http://www.opengis.net/ogc/filter/1.0.0/filter.xsd',
  initialize: function (a) {
    OpenLayers.Format.GML.v2.prototype.initialize.apply(this, [
      a
    ])
  },
  readers: {
    ogc: OpenLayers.Util.applyDefaults({
      PropertyIsEqualTo: function (a, b) {
        var c = new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Comparison.EQUAL_TO
        });
        this.readChildNodes(a, c);
        b.filters.push(c)
      },
      PropertyIsNotEqualTo: function (a, b) {
        var c = new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Comparison.NOT_EQUAL_TO
        });
        this.readChildNodes(a, c);
        b.filters.push(c)
      },
      PropertyIsLike: function (a, b) {
        var c = new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Comparison.LIKE
        });
        this.readChildNodes(a, c);
        var d = a.getAttribute('wildCard'),
        e = a.getAttribute('singleChar'),
        f = a.getAttribute('escape');
        c.value2regex(d, e, f);
        b.filters.push(c)
      }
    }, OpenLayers.Format.Filter.v1.prototype.readers.ogc),
    gml: OpenLayers.Format.GML.v2.prototype.readers.gml,
    feature: OpenLayers.Format.GML.v2.prototype.readers.feature
  },
  writers: {
    ogc: OpenLayers.Util.applyDefaults({
      PropertyIsEqualTo: function (a) {
        var b = this.createElementNSPlus('ogc:PropertyIsEqualTo');
        this.writeNode('PropertyName', a, b);
        this.writeOgcExpression(a.value, b);
        return b
      },
      PropertyIsNotEqualTo: function (a) {
        var b = this.createElementNSPlus('ogc:PropertyIsNotEqualTo');
        this.writeNode('PropertyName', a, b);
        this.writeOgcExpression(a.value, b);
        return b
      },
      PropertyIsLike: function (a) {
        var b = this.createElementNSPlus('ogc:PropertyIsLike', {
          attributes: {
            wildCard: '*',
            singleChar: '.',
            escape: '!'
          }
        });
        this.writeNode('PropertyName', a, b);
        this.writeNode('Literal', a.regex2value(), b);
        return b
      },
      BBOX: function (a) {
        var b = this.createElementNSPlus('ogc:BBOX');
        a.property && this.writeNode('PropertyName', a, b);
        var c = this.writeNode('gml:Box', a.value, b);
        a.projection && c.setAttribute('srsName', a.projection);
        return b
      }
    }, OpenLayers.Format.Filter.v1.prototype.writers.ogc),
    gml: OpenLayers.Format.GML.v2.prototype.writers.gml,
    feature: OpenLayers.Format.GML.v2.prototype.writers.feature
  },
  writeSpatial: function (a, b) {
    var c = this.createElementNSPlus('ogc:' + b);
    this.writeNode('PropertyName', a, c);
    if (a.value instanceof OpenLayers.Filter.Function) this.writeNode('Function', a.value, c);
     else {
      var d;
      d = a.value instanceof OpenLayers.Geometry ? this.writeNode('feature:_geometry', a.value).firstChild : this.writeNode('gml:Box', a.value);
      a.projection && d.setAttribute('srsName', a.projection);
      c.appendChild(d)
    }
    return c
  },
  CLASS_NAME: 'OpenLayers.Format.Filter.v1_0_0'
});
OpenLayers.Format.WFST.v1_0_0 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, OpenLayers.Format.WFST.v1, {
  version: '1.0.0',
  srsNameInQuery: !1,
  schemaLocations: {
    wfs: 'http://schemas.opengis.net/wfs/1.0.0/WFS-transaction.xsd'
  },
  initialize: function (a) {
    OpenLayers.Format.Filter.v1_0_0.prototype.initialize.apply(this, [
      a
    ]);
    OpenLayers.Format.WFST.v1.prototype.initialize.apply(this, [
      a
    ])
  },
  readNode: function (a, b) {
    return OpenLayers.Format.GML.v2.prototype.readNode.apply(this, [
      a,
      b
    ])
  },
  readers: {
    wfs: OpenLayers.Util.applyDefaults({
      WFS_TransactionResponse: function (a, b) {
        b.insertIds = [
        ];
        b.success = !1;
        this.readChildNodes(a, b)
      },
      InsertResult: function (a, b) {
        var c = {
          fids: [
          ]
        };
        this.readChildNodes(a, c);
        b.insertIds.push(c.fids[0])
      },
      TransactionResult: function (a, b) {
        this.readChildNodes(a, b)
      },
      Status: function (a, b) {
        this.readChildNodes(a, b)
      },
      SUCCESS: function (a, b) {
        b.success = !0
      }
    }, OpenLayers.Format.WFST.v1.prototype.readers.wfs),
    gml: OpenLayers.Format.GML.v2.prototype.readers.gml,
    feature: OpenLayers.Format.GML.v2.prototype.readers.feature,
    ogc: OpenLayers.Format.Filter.v1_0_0.prototype.readers.ogc
  },
  writers: {
    wfs: OpenLayers.Util.applyDefaults({
      Query: function (a) {
        var a = OpenLayers.Util.extend({
          featureNS: this.featureNS,
          featurePrefix: this.featurePrefix,
          featureType: this.featureType,
          srsName: this.srsName,
          srsNameInQuery: this.srsNameInQuery
        }, a),
        b = a.featurePrefix,
        c = this.createElementNSPlus('wfs:Query', {
          attributes: {
            typeName: (b ? b + ':' : '') + a.featureType
          }
        });
        a.srsNameInQuery && a.srsName && c.setAttribute('srsName', a.srsName);
        a.featureNS && c.setAttribute('xmlns:' + b, a.featureNS);
        if (a.propertyNames) for (var b = 0, d = a.propertyNames.length; b <
        d; b++) this.writeNode('ogc:PropertyName', {
          property: a.propertyNames[b]
        }, c);
        a.filter && (this.setFilterProperty(a.filter), this.writeNode('ogc:Filter', a.filter, c));
        return c
      }
    }, OpenLayers.Format.WFST.v1.prototype.writers.wfs),
    gml: OpenLayers.Format.GML.v2.prototype.writers.gml,
    feature: OpenLayers.Format.GML.v2.prototype.writers.feature,
    ogc: OpenLayers.Format.Filter.v1_0_0.prototype.writers.ogc
  },
  CLASS_NAME: 'OpenLayers.Format.WFST.v1_0_0'
});
OpenLayers.Layer.TMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
  serviceVersion: '1.0.0',
  layername: null,
  type: null,
  isBaseLayer: !0,
  tileOrigin: null,
  serverResolutions: null,
  zoomOffset: 0,
  initialize: function (a, b, c) {
    var d = [
    ];
    d.push(a, b, {
    }, c);
    OpenLayers.Layer.Grid.prototype.initialize.apply(this, d)
  },
  clone: function (a) {
    null == a && (a = new OpenLayers.Layer.TMS(this.name, this.url, this.getOptions()));
    return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [
      a
    ])
  },
  getURL: function (a) {
    var a = this.adjustBounds(a),
    b = this.getServerResolution(),
    c = Math.round((a.left - this.tileOrigin.lon) / (b * this.tileSize.w)),
    a = Math.round((a.bottom - this.tileOrigin.lat) / (b * this.tileSize.h)),
    c = this.serviceVersion + '/' + this.layername + '/' + this.getServerZoom() + '/' + c + '/' + a + '.' + this.type,
    a = this.url;
    OpenLayers.Util.isArray(a) && (a = this.selectUrl(c, a));
    return a + c
  },
  setMap: function (a) {
    OpenLayers.Layer.Grid.prototype.setMap.apply(this, arguments);
    this.tileOrigin || (this.tileOrigin = new OpenLayers.LonLat(this.map.maxExtent.left, this.map.maxExtent.bottom))
  },
  CLASS_NAME: 'OpenLayers.Layer.TMS'
});
OpenLayers.Strategy.Fixed = OpenLayers.Class(OpenLayers.Strategy, {
  preload: !1,
  activate: function () {
    if (OpenLayers.Strategy.prototype.activate.apply(this, arguments)) {
      this.layer.events.on({
        refresh: this.load,
        scope: this
      });
      if (!0 == this.layer.visibility || this.preload) this.load();
       else this.layer.events.on({
        visibilitychanged: this.load,
        scope: this
      });
      return !0
    }
    return !1
  },
  deactivate: function () {
    var a = OpenLayers.Strategy.prototype.deactivate.call(this);
    a && this.layer.events.un({
      refresh: this.load,
      visibilitychanged: this.load,
      scope: this
    });
    return a
  },
  load: function (a) {
    var b = this.layer;
    b.events.triggerEvent('loadstart');
    b.protocol.read(OpenLayers.Util.applyDefaults({
      callback: OpenLayers.Function.bind(this.merge, this, b.map.getProjectionObject()),
      filter: b.filter
    }, a));
    b.events.un({
      visibilitychanged: this.load,
      scope: this
    })
  },
  merge: function (a, b) {
    var c = this.layer;
    c.destroyFeatures();
    var d = b.features;
    if (d && 0 < d.length) {
      if (!a.equals(c.projection)) for (var e, f = 0, g = d.length; f < g; ++f) (e = d[f].geometry) && e.transform(c.projection, a);
      c.addFeatures(d)
    }
    c.events.triggerEvent('loadend')
  },
  CLASS_NAME: 'OpenLayers.Strategy.Fixed'
});
OpenLayers.Control.Zoom = OpenLayers.Class(OpenLayers.Control, {
  zoomInText: '+',
  zoomInId: 'olZoomInLink',
  zoomOutText: '-',
  zoomOutId: 'olZoomOutLink',
  draw: function () {
    var a = OpenLayers.Control.prototype.draw.apply(this),
    b = this.getOrCreateLinks(a),
    c = b.zoomIn,
    b = b.zoomOut,
    d = this.map.events;
    b.parentNode !== a && (d = this.events, d.attachToElement(b.parentNode));
    d.register('buttonclick', this, this.onZoomClick);
    this.zoomInLink = c;
    this.zoomOutLink = b;
    return a
  },
  getOrCreateLinks: function (a) {
    var b = document.getElementById(this.zoomInId),
    c = document.getElementById(this.zoomOutId);
    b || (b = document.createElement('a'), b.href = '#zoomIn', b.appendChild(document.createTextNode(this.zoomInText)), b.className = 'olControlZoomIn', a.appendChild(b));
    OpenLayers.Element.addClass(b, 'olButton');
    c || (c = document.createElement('a'), c.href = '#zoomOut', c.appendChild(document.createTextNode(this.zoomOutText)), c.className = 'olControlZoomOut', a.appendChild(c));
    OpenLayers.Element.addClass(c, 'olButton');
    return {
      zoomIn: b,
      zoomOut: c
    }
  },
  onZoomClick: function (a) {
    a = a.buttonElement;
    a === this.zoomInLink ? this.map.zoomIn()  : a === this.zoomOutLink && this.map.zoomOut()
  },
  destroy: function () {
    this.map && this.map.events.unregister('buttonclick', this, this.onZoomClick);
    delete this.zoomInLink;
    delete this.zoomOutLink;
    OpenLayers.Control.prototype.destroy.apply(this)
  },
  CLASS_NAME: 'OpenLayers.Control.Zoom'
});
OpenLayers.Layer.PointTrack = OpenLayers.Class(OpenLayers.Layer.Vector, {
  dataFrom: null,
  styleFrom: null,
  addNodes: function (a, b) {
    if (2 > a.length) throw Error('At least two point features have to be added to create a line from');
    for (var c = Array(a.length - 1), d, e, f, g = 0, h = a.length; g < h; g++) {
      d = a[g];
      if (f = d.geometry) {
        if ('OpenLayers.Geometry.Point' != f.CLASS_NAME) throw new TypeError('Only features with point geometries are supported.');
      } else f = d.lonlat,
      f = new OpenLayers.Geometry.Point(f.lon, f.lat);
      if (0 < g) {
        d = null != this.dataFrom ?
        a[g + this.dataFrom].data || a[g + this.dataFrom].attributes : null;
        var i = null != this.styleFrom ? a[g + this.styleFrom].style : null;
        e = new OpenLayers.Geometry.LineString([e,
        f]);
        c[g - 1] = new OpenLayers.Feature.Vector(e, d, i)
      }
      e = f
    }
    this.addFeatures(c, b)
  },
  CLASS_NAME: 'OpenLayers.Layer.PointTrack'
});
OpenLayers.Layer.PointTrack.SOURCE_NODE = - 1;
OpenLayers.Layer.PointTrack.TARGET_NODE = 0;
OpenLayers.Layer.PointTrack.dataFrom = {
  SOURCE_NODE: - 1,
  TARGET_NODE: 0
};
OpenLayers.Protocol.WFS = function (a) {
  var a = OpenLayers.Util.applyDefaults(a, OpenLayers.Protocol.WFS.DEFAULTS),
  b = OpenLayers.Protocol.WFS['v' + a.version.replace(/\./g, '_')];
  if (!b) throw 'Unsupported WFS version: ' + a.version;
  return new b(a)
};
OpenLayers.Protocol.WFS.fromWMSLayer = function (a, b) {
  var c,
  d;
  c = a.params.LAYERS;
  c = (OpenLayers.Util.isArray(c) ? c[0] : c).split(':');
  1 < c.length && (d = c[0]);
  c = c.pop();
  d = {
    url: a.url,
    featureType: c,
    featurePrefix: d,
    srsName: a.projection && a.projection.getCode() || a.map && a.map.getProjectionObject().getCode(),
    version: '1.1.0'
  };
  return new OpenLayers.Protocol.WFS(OpenLayers.Util.applyDefaults(b, d))
};
OpenLayers.Protocol.WFS.DEFAULTS = {
  version: '1.0.0'
};
OpenLayers.Control.Pan = OpenLayers.Class(OpenLayers.Control, {
  slideFactor: 50,
  slideRatio: null,
  direction: null,
  type: OpenLayers.Control.TYPE_BUTTON,
  initialize: function (a, b) {
    this.direction = a;
    this.CLASS_NAME += this.direction;
    OpenLayers.Control.prototype.initialize.apply(this, [
      b
    ])
  },
  trigger: function () {
    var a = OpenLayers.Function.bind(function (a) {
      return this.slideRatio ? this.map.getSize() [a] * this.slideRatio : this.slideFactor
    }, this);
    switch (this.direction) {
      case OpenLayers.Control.Pan.NORTH:
        this.map.pan(0, - a('h'));
        break;
      case OpenLayers.Control.Pan.SOUTH:
        this.map.pan(0, a('h'));
        break;
      case OpenLayers.Control.Pan.WEST:
        this.map.pan( - a('w'), 0);
        break;
      case OpenLayers.Control.Pan.EAST:
        this.map.pan(a('w'), 0)
    }
  },
  CLASS_NAME: 'OpenLayers.Control.Pan'
});
OpenLayers.Control.Pan.NORTH = 'North';
OpenLayers.Control.Pan.SOUTH = 'South';
OpenLayers.Control.Pan.EAST = 'East';
OpenLayers.Control.Pan.WEST = 'West';
OpenLayers.Format.CSWGetDomain = function (a) {
  var a = OpenLayers.Util.applyDefaults(a, OpenLayers.Format.CSWGetDomain.DEFAULTS),
  b = OpenLayers.Format.CSWGetDomain['v' + a.version.replace(/\./g, '_')];
  if (!b) throw 'Unsupported CSWGetDomain version: ' + a.version;
  return new b(a)
};
OpenLayers.Format.CSWGetDomain.DEFAULTS = {
  version: '2.0.2'
};
OpenLayers.Format.CSWGetDomain.v2_0_2 = OpenLayers.Class(OpenLayers.Format.XML, {
  namespaces: {
    xlink: 'http://www.w3.org/1999/xlink',
    xsi: 'http://www.w3.org/2001/XMLSchema-instance',
    csw: 'http://www.opengis.net/cat/csw/2.0.2'
  },
  defaultPrefix: 'csw',
  version: '2.0.2',
  schemaLocation: 'http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd',
  PropertyName: null,
  ParameterName: null,
  read: function (a) {
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    a && 9 ==
    a.nodeType && (a = a.documentElement);
    var b = {
    };
    this.readNode(a, b);
    return b
  },
  readers: {
    csw: {
      GetDomainResponse: function (a, b) {
        this.readChildNodes(a, b)
      },
      DomainValues: function (a, b) {
        OpenLayers.Util.isArray(b.DomainValues) || (b.DomainValues = [
        ]);
        for (var c = a.attributes, d = {
        }, e = 0, f = c.length; e < f; ++e) d[c[e].name] = c[e].nodeValue;
        this.readChildNodes(a, d);
        b.DomainValues.push(d)
      },
      PropertyName: function (a, b) {
        b.PropertyName = this.getChildValue(a)
      },
      ParameterName: function (a, b) {
        b.ParameterName = this.getChildValue(a)
      },
      ListOfValues: function (a, b) {
        OpenLayers.Util.isArray(b.ListOfValues) || (b.ListOfValues = [
        ]);
        this.readChildNodes(a, b.ListOfValues)
      },
      Value: function (a, b) {
        for (var c = a.attributes, d = {
        }, e = 0, f = c.length; e < f; ++e) d[c[e].name] = c[e].nodeValue;
        d.value = this.getChildValue(a);
        b.push({
          Value: d
        })
      },
      ConceptualScheme: function (a, b) {
        b.ConceptualScheme = {
        };
        this.readChildNodes(a, b.ConceptualScheme)
      },
      Name: function (a, b) {
        b.Name = this.getChildValue(a)
      },
      Document: function (a, b) {
        b.Document = this.getChildValue(a)
      },
      Authority: function (a, b) {
        b.Authority = this.getChildValue(a)
      },
      RangeOfValues: function (a, b) {
        b.RangeOfValues = {
        };
        this.readChildNodes(a, b.RangeOfValues)
      },
      MinValue: function (a, b) {
        for (var c = a.attributes, d = {
        }, e = 0, f = c.length; e < f; ++e) d[c[e].name] = c[e].nodeValue;
        d.value = this.getChildValue(a);
        b.MinValue = d
      },
      MaxValue: function (a, b) {
        for (var c = a.attributes, d = {
        }, e = 0, f = c.length; e < f; ++e) d[c[e].name] = c[e].nodeValue;
        d.value = this.getChildValue(a);
        b.MaxValue = d
      }
    }
  },
  write: function (a) {
    a = this.writeNode('csw:GetDomain', a);
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      a
    ])
  },
  writers: {
    csw: {
      GetDomain: function (a) {
        var b = this.createElementNSPlus('csw:GetDomain', {
          attributes: {
            service: 'CSW',
            version: this.version
          }
        });
        if (a.PropertyName || this.PropertyName) this.writeNode('csw:PropertyName', a.PropertyName || this.PropertyName, b);
         else if (a.ParameterName || this.ParameterName) this.writeNode('csw:ParameterName', a.ParameterName || this.ParameterName, b);
        this.readChildNodes(b, a);
        return b
      },
      PropertyName: function (a) {
        return this.createElementNSPlus('csw:PropertyName', {
          value: a
        })
      },
      ParameterName: function (a) {
        return this.createElementNSPlus('csw:ParameterName', {
          value: a
        })
      }
    }
  },
  CLASS_NAME: 'OpenLayers.Format.CSWGetDomain.v2_0_2'
});
OpenLayers.Format.ArcXML.Features = OpenLayers.Class(OpenLayers.Format.XML, {
  read: function (a) {
    return (new OpenLayers.Format.ArcXML).read(a).features.feature
  }
});
OpenLayers.Date = {
  toISOString: function () {
    if ('toISOString' in Date.prototype) return function (a) {
      return a.toISOString()
    };
    var a = function (a, c) {
      for (var d = a + ''; d.length < c; ) d = '0' + d;
      return d
    };
    return function (b) {
      return isNaN(b.getTime()) ? 'Invalid Date' : b.getUTCFullYear() + '-' + a(b.getUTCMonth() + 1, 2) + '-' + a(b.getUTCDate(), 2) + 'T' + a(b.getUTCHours(), 2) + ':' + a(b.getUTCMinutes(), 2) + ':' + a(b.getUTCSeconds(), 2) + '.' + a(b.getUTCMilliseconds(), 3) + 'Z'
    }
  }(),
  parse: function (a) {
    var b;
    if ((a = a.match(/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:(?:T(\d{1,2}):(\d{2}):(\d{2}(?:\.\d+)?)(Z|(?:[+-]\d{1,2}(?::(\d{2}))?)))|Z)?$/)) && (a[1] || a[7])) {
      b = parseInt(a[1], 10) || 0;
      var c = parseInt(a[2], 10) - 1 || 0,
      d = parseInt(a[3], 10) || 1;
      b = new Date(Date.UTC(b, c, d));
      if (c = a[7]) {
        var d = parseInt(a[4], 10),
        e = parseInt(a[5], 10),
        f = parseFloat(a[6]),
        g = f | 0,
        f = Math.round(1000 * (f - g));
        b.setUTCHours(d, e, g, f);
        'Z' !== c && (c = parseInt(c, 10), a = parseInt(a[8], 10) || 0, b = new Date(b.getTime() + - 1000 * (60 * 60 * c + 60 * a)))
      }
    } else b = new Date('invalid');
    return b
  }
}; (function () {
  function a() {
    this._object = f && !i ? new f : new window.ActiveXObject('Microsoft.XMLHTTP');
    this._listeners = [
    ]
  }
  function b() {
    return new a
  }
  function c(a) {
    b.onreadystatechange && b.onreadystatechange.apply(a);
    a.dispatchEvent({
      type: 'readystatechange',
      bubbles: !1,
      cancelable: !1,
      timeStamp: new Date + 0
    })
  }
  function d(a) {
    try {
      a.responseText = a._object.responseText
    } catch (b) {
    }
    try {
      var c;
      var d = a._object,
      e = d.responseXML,
      f = d.responseText;
      h && (f && e && !e.documentElement && d.getResponseHeader('Content-Type').match(/[^\/]+\/[^\+]+\+xml/)) && (e = new window.ActiveXObject('Microsoft.XMLDOM'), e.async = !1, e.validateOnParse = !1, e.loadXML(f));
      c = e && (h && 0 != e.parseError || !e.documentElement || e.documentElement && 'parsererror' == e.documentElement.tagName) ? null : e;
      a.responseXML = c
    } catch (g) {
    }
    try {
      a.status = a._object.status
    } catch (i) {
    }
    try {
      a.statusText = a._object.statusText
    } catch (r) {
    }
  }
  function e(a) {
    a._object.onreadystatechange = new window.Function
  }
  var f = window.XMLHttpRequest,
  g = !!window.controllers,
  h = window.document.all && !window.opera,
  i = h && window.navigator.userAgent.match(/MSIE 7.0/);
  b.prototype = a.prototype;
  g && f.wrapped && (b.wrapped = f.wrapped);
  b.UNSENT = 0;
  b.OPENED = 1;
  b.HEADERS_RECEIVED = 2;
  b.LOADING = 3;
  b.DONE = 4;
  b.prototype.readyState = b.UNSENT;
  b.prototype.responseText = '';
  b.prototype.responseXML = null;
  b.prototype.status = 0;
  b.prototype.statusText = '';
  b.prototype.priority = 'NORMAL';
  b.prototype.onreadystatechange = null;
  b.onreadystatechange = null;
  b.onopen = null;
  b.onsend = null;
  b.onabort = null;
  b.prototype.open = function (a, f, i, m, n) {
    delete this._headers;
    arguments.length < 3 && (i = true);
    this._async = i;
    var o = this,
    p = this.readyState,
    q;
    if (h && i) {
      q = function () {
        if (p != b.DONE) {
          e(o);
          o.abort()
        }
      };
      window.attachEvent('onunload', q)
    }
    b.onopen && b.onopen.apply(this, arguments);
    arguments.length > 4 ? this._object.open(a, f, i, m, n)  : arguments.length > 3 ? this._object.open(a, f, i, m)  : this._object.open(a, f, i);
    this.readyState = b.OPENED;
    c(this);
    this._object.onreadystatechange = function () {
      if (!g || i) {
        o.readyState = o._object.readyState;
        d(o);
        if (o._aborted) o.readyState = b.UNSENT;
         else {
          if (o.readyState == b.DONE) {
            delete o._data;
            e(o);
            h && i && window.detachEvent('onunload', q)
          }
          p != o.readyState && c(o);
          p = o.readyState
        }
      }
    }
  };
  b.prototype.send = function (a) {
    b.onsend && b.onsend.apply(this, arguments);
    arguments.length || (a = null);
    if (a && a.nodeType) {
      a = window.XMLSerializer ? (new window.XMLSerializer).serializeToString(a)  : a.xml;
      this._headers['Content-Type'] || this._object.setRequestHeader('Content-Type', 'application/xml')
    }
    this._data = a;
    a: {
      this._object.send(this._data);
      if (g && !this._async) {
        this.readyState = b.OPENED;
        for (d(this); this.readyState < b.DONE; ) {
          this.readyState++;
          c(this);
          if (this._aborted) break a
        }
      }
    }
  };
  b.prototype.abort = function () {
    b.onabort && b.onabort.apply(this, arguments);
    if (this.readyState > b.UNSENT) this._aborted = true;
    this._object.abort();
    e(this);
    this.readyState = b.UNSENT;
    delete this._data
  };
  b.prototype.getAllResponseHeaders = function () {
    return this._object.getAllResponseHeaders()
  };
  b.prototype.getResponseHeader = function (a) {
    return this._object.getResponseHeader(a)
  };
  b.prototype.setRequestHeader = function (a, b) {
    if (!this._headers) this._headers = {
    };
    this._headers[a] = b;
    return this._object.setRequestHeader(a, b)
  };
  b.prototype.addEventListener = function (a, b, c) {
    for (var d = 0, e; e = this._listeners[d]; d++) if (e[0] == a && e[1] == b && e[2] == c) return;
    this._listeners.push([a,
    b,
    c])
  };
  b.prototype.removeEventListener = function (a, b, c) {
    for (var d = 0, e; e = this._listeners[d]; d++) if (e[0] == a && e[1] == b && e[2] == c) break;
    e && this._listeners.splice(d, 1)
  };
  b.prototype.dispatchEvent = function (a) {
    a = {
      type: a.type,
      target: this,
      currentTarget: this,
      eventPhase: 2,
      bubbles: a.bubbles,
      cancelable: a.cancelable,
      timeStamp: a.timeStamp,
      stopPropagation: function () {
      },
      preventDefault: function () {
      },
      initEvent: function () {
      }
    };
    a.type == 'readystatechange' && this.onreadystatechange && (this.onreadystatechange.handleEvent || this.onreadystatechange).apply(this, [
      a
    ]);
    for (var b = 0, c; c = this._listeners[b]; b++) c[0] == a.type && !c[2] && (c[1].handleEvent || c[1]).apply(this, [
      a
    ])
  };
  b.prototype.toString = function () {
    return '[object XMLHttpRequest]'
  };
  b.toString = function () {
    return '[XMLHttpRequest]'
  };
  window.Function.prototype.apply || (window.Function.prototype.apply = function (a, b) {
    b || (b = [
    ]);
    a.__func = this;
    a.__func(b[0], b[1], b[2], b[3], b[4]);
    delete a.__func
  });
  OpenLayers.Request.XMLHttpRequest = b
}) ();
OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
  namespaces: {
    kml: 'http://www.opengis.net/kml/2.2',
    gx: 'http://www.google.com/kml/ext/2.2'
  },
  kmlns: 'http://earth.google.com/kml/2.0',
  placemarksDesc: 'No description available',
  foldersName: 'OpenLayers export',
  foldersDesc: 'Exported on ' + new Date,
  extractAttributes: !0,
  kvpAttributes: !1,
  extractStyles: !1,
  extractTracks: !1,
  trackAttributes: null,
  internalns: null,
  features: null,
  styles: null,
  styleBaseUrl: '',
  fetched: null,
  maxDepth: 0,
  initialize: function (a) {
    this.regExes = {
      trimSpace: /^\s*|\s*$/g,
      removeSpace: /\s*/g,
      splitSpace: /\s+/,
      trimComma: /\s*,\s*/g,
      kmlColor: /(\w{2})(\w{2})(\w{2})(\w{2})/,
      kmlIconPalette: /root:\/\/icons\/palette-(\d+)(\.\w+)/,
      straightBracket: /\$\[(.*?)\]/g
    };
    this.externalProjection = new OpenLayers.Projection('EPSG:4326');
    OpenLayers.Format.XML.prototype.initialize.apply(this, [
      a
    ])
  },
  read: function (a) {
    this.features = [
    ];
    this.styles = {
    };
    this.fetched = {
    };
    return this.parseData(a, {
      depth: 0,
      styleBaseUrl: this.styleBaseUrl
    })
  },
  parseData: function (a, b) {
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    for (var c = [
      'Link',
      'NetworkLink',
      'Style',
      'StyleMap',
      'Placemark'
    ], d = 0, e = c.length; d < e; ++d) {
      var f = c[d],
      g = this.getElementsByTagNameNS(a, '*', f);
      if (0 != g.length) switch (f.toLowerCase()) {
        case 'link':
        case 'networklink':
          this.parseLinks(g, b);
          break;
        case 'style':
          this.extractStyles && this.parseStyles(g, b);
          break;
        case 'stylemap':
          this.extractStyles && this.parseStyleMaps(g, b);
          break;
        case 'placemark':
          this.parseFeatures(g, b)
      }
    }
    return this.features
  },
  parseLinks: function (a, b) {
    if (b.depth >= this.maxDepth) return !1;
    var c = OpenLayers.Util.extend({
    }, b);
    c.depth++;
    for (var d = 0, e = a.length; d < e; d++) {
      var f = this.parseProperty(a[d], '*', 'href');
      f && !this.fetched[f] && (this.fetched[f] = !0, (f = this.fetchLink(f)) && this.parseData(f, c))
    }
  },
  fetchLink: function (a) {
    if (a = OpenLayers.Request.GET({
      url: a,
      async: !1
    })) return a.responseText
  },
  parseStyles: function (a, b) {
    for (var c = 0, d = a.length; c < d; c++) {
      var e = this.parseStyle(a[c]);
      e && (this.styles[(b.styleBaseUrl || '') + '#' + e.id] = e)
    }
  },
  parseKmlColor: function (a) {
    var b = null;
    a && (a = a.match(this.regExes.kmlColor)) && (b = {
      color: '#' + a[4] + a[3] + a[2],
      opacity: parseInt(a[1], 16) / 255
    });
    return b
  },
  parseStyle: function (a) {
    for (var b = {
    }, c = [
      'LineStyle',
      'PolyStyle',
      'IconStyle',
      'BalloonStyle',
      'LabelStyle'
    ], d, e, f = 0, g = c.length; f < g; ++f) if (d = c[f], e = this.getElementsByTagNameNS(a, '*', d) [0]) switch (d.toLowerCase()) {
      case 'linestyle':
        d = this.parseProperty(e, '*', 'color');
        if (d = this.parseKmlColor(d)) b.strokeColor = d.color,
        b.strokeOpacity = d.opacity;
        (d = this.parseProperty(e, '*', 'width')) && (b.strokeWidth = d);
        break;
      case 'polystyle':
        d = this.parseProperty(e, '*', 'color');
        if (d = this.parseKmlColor(d)) b.fillOpacity = d.opacity,
        b.fillColor = d.color;
        '0' == this.parseProperty(e, '*', 'fill') && (b.fillColor = 'none');
        '0' == this.parseProperty(e, '*', 'outline') && (b.strokeWidth = '0');
        break;
      case 'iconstyle':
        var h = parseFloat(this.parseProperty(e, '*', 'scale') || 1);
        d = 32 * h;
        var i = 32 * h,
        j = this.getElementsByTagNameNS(e, '*', 'Icon') [0];
        if (j) {
          var k = this.parseProperty(j, '*', 'href');
          if (k) {
            var l = this.parseProperty(j, '*', 'w'),
            m = this.parseProperty(j, '*', 'h');
            OpenLayers.String.startsWith(k, 'http://maps.google.com/mapfiles/kml') && (!l && !m) && (m = l = 64, h /= 2);
            l = l || m;
            m = m || l;
            l && (d = parseInt(l) * h);
            m && (i = parseInt(m) * h);
            if (m = k.match(this.regExes.kmlIconPalette)) l = m[1],
            m = m[2],
            k = this.parseProperty(j, '*', 'x'),
            j = this.parseProperty(j, '*', 'y'),
            k = 'http://maps.google.com/mapfiles/kml/pal' + l + '/icon' + (8 * (j ? 7 - j / 32 : 7) + (k ? k / 32 : 0)) + m;
            b.graphicOpacity = 1;
            b.externalGraphic = k
          }
        }
        if (e = this.getElementsByTagNameNS(e, '*', 'hotSpot') [0]) k = parseFloat(e.getAttribute('x')),
        j = parseFloat(e.getAttribute('y')),
        l = e.getAttribute('xunits'),
        'pixels' == l ? b.graphicXOffset = - k * h : 'insetPixels' == l ? b.graphicXOffset = - d + k * h : 'fraction' == l && (b.graphicXOffset = - d * k),
        e = e.getAttribute('yunits'),
        'pixels' == e ? b.graphicYOffset = - i + j * h + 1 : 'insetPixels' == e ? b.graphicYOffset = - (j * h) + 1 : 'fraction' == e && (b.graphicYOffset = - i * (1 - j) + 1);
        b.graphicWidth = d;
        b.graphicHeight = i;
        break;
      case 'balloonstyle':
        (e = OpenLayers.Util.getXmlNodeValue(e)) && (b.balloonStyle = e.replace(this.regExes.straightBracket, '${$1}'));
        break;
      case 'labelstyle':
        if (d = this.parseProperty(e, '*', 'color'), d = this.parseKmlColor(d)) b.fontColor = d.color,
        b.fontOpacity = d.opacity
    }
    !b.strokeColor && b.fillColor && (b.strokeColor = b.fillColor);
    if ((a = a.getAttribute('id')) && b) b.id = a;
    return b
  },
  parseStyleMaps: function (a, b) {
    for (var c = 0, d = a.length; c < d; c++) for (var e = a[c], f = this.getElementsByTagNameNS(e, '*', 'Pair'), e = e.getAttribute('id'), g = 0, h = f.length; g < h; g++) {
      var i = f[g],
      j = this.parseProperty(i, '*', 'key');
      (i = this.parseProperty(i, '*', 'styleUrl')) && 'normal' == j && (this.styles[(b.styleBaseUrl || '') + '#' + e] = this.styles[(b.styleBaseUrl || '') + i])
    }
  },
  parseFeatures: function (a, b) {
    for (var c = [
    ], d = 0, e = a.length; d < e; d++) {
      var f = a[d],
      g = this.parseFeature.apply(this, [
        f
      ]);
      if (g) {
        this.extractStyles && (g.attributes && g.attributes.styleUrl) && (g.style = this.getStyle(g.attributes.styleUrl, b));
        if (this.extractStyles) {
          var h = this.getElementsByTagNameNS(f, '*', 'Style') [0];
          if (h && (h = this.parseStyle(h))) g.style = OpenLayers.Util.extend(g.style, h)
        }
        if (this.extractTracks) {
          if ((f = this.getElementsByTagNameNS(f, this.namespaces.gx, 'Track')) && 0 < f.length) g = {
            features: [
            ],
            feature: g
          },
          this.readNode(f[0], g),
          0 < g.features.length && c.push.apply(c, g.features)
        } else c.push(g)
      } else throw 'Bad Placemark: ' + d;
    }
    this.features = this.features.concat(c)
  },
  readers: {
    kml: {
      when: function (a, b) {
        b.whens.push(OpenLayers.Date.parse(this.getChildValue(a)))
      },
      _trackPointAttribute: function (a, b) {
        var c = a.nodeName.split(':').pop();
        b.attributes[c].push(this.getChildValue(a))
      }
    },
    gx: {
      Track: function (a, b) {
        var c = {
          whens: [
          ],
          points: [
          ],
          angles: [
          ]
        };
        if (this.trackAttributes) {
          var d;
          c.attributes = {
          };
          for (var e = 0, f = this.trackAttributes.length; e <
          f; ++e) d = this.trackAttributes[e],
          c.attributes[d] = [
          ],
          d in this.readers.kml || (this.readers.kml[d] = this.readers.kml._trackPointAttribute)
        }
        this.readChildNodes(a, c);
        if (c.whens.length !== c.points.length) throw Error('gx:Track with unequal number of when (' + c.whens.length + ') and gx:coord (' + c.points.length + ') elements.');
        var g = 0 < c.angles.length;
        if (g && c.whens.length !== c.angles.length) throw Error('gx:Track with unequal number of when (' + c.whens.length + ') and gx:angles (' + c.angles.length + ') elements.');
        for (var h, i, e = 0, f = c.whens.length; e < f; ++e) {
          h = b.feature.clone();
          h.fid = b.feature.fid || b.feature.id;
          i = c.points[e];
          h.geometry = i;
          'z' in i && (h.attributes.altitude = i.z);
          this.internalProjection && this.externalProjection && h.geometry.transform(this.externalProjection, this.internalProjection);
          if (this.trackAttributes) {
            i = 0;
            for (var j = this.trackAttributes.length; i < j; ++i) h.attributes[d] = c.attributes[this.trackAttributes[i]][e]
          }
          h.attributes.when = c.whens[e];
          h.attributes.trackId = b.feature.id;
          g && (i = c.angles[e], h.attributes.heading = parseFloat(i[0]), h.attributes.tilt = parseFloat(i[1]), h.attributes.roll = parseFloat(i[2]));
          b.features.push(h)
        }
      },
      coord: function (a, b) {
        var c = this.getChildValue(a).replace(this.regExes.trimSpace, '').split(/\s+/),
        d = new OpenLayers.Geometry.Point(c[0], c[1]);
        2 < c.length && (d.z = parseFloat(c[2]));
        b.points.push(d)
      },
      angles: function (a, b) {
        var c = this.getChildValue(a).replace(this.regExes.trimSpace, '').split(/\s+/);
        b.angles.push(c)
      }
    }
  },
  parseFeature: function (a) {
    for (var b = [
      'MultiGeometry',
      'Polygon',
      'LineString',
      'Point'
    ], c, d, e, f = 0, g = b.length; f < g; ++f) if (c = b[f], this.internalns = a.namespaceURI ? a.namespaceURI : this.kmlns, d = this.getElementsByTagNameNS(a, this.internalns, c), 0 < d.length) {
      if (b = this.parseGeometry[c.toLowerCase()]) e = b.apply(this, [
        d[0]
      ]),
      this.internalProjection && this.externalProjection && e.transform(this.externalProjection, this.internalProjection);
       else throw new TypeError('Unsupported geometry type: ' + c);
      break
    }
    var h;
    this.extractAttributes && (h = this.parseAttributes(a));
    c = new OpenLayers.Feature.Vector(e, h);
    a = a.getAttribute('id') || a.getAttribute('name');
    null != a && (c.fid = a);
    return c
  },
  getStyle: function (a, b) {
    var c = OpenLayers.Util.removeTail(a),
    d = OpenLayers.Util.extend({
    }, b);
    d.depth++;
    d.styleBaseUrl = c;
    !this.styles[a] && !OpenLayers.String.startsWith(a, '#') && d.depth <= this.maxDepth && !this.fetched[c] && (c = this.fetchLink(c)) && this.parseData(c, d);
    return OpenLayers.Util.extend({
    }, this.styles[a])
  },
  parseGeometry: {
    point: function (a) {
      var b = this.getElementsByTagNameNS(a, this.internalns, 'coordinates'),
      a = [
      ];
      if (0 < b.length) var c = b[0].firstChild.nodeValue,
      c = c.replace(this.regExes.removeSpace, ''),
      a = c.split(',');
      b = null;
      if (1 < a.length) 2 == a.length && (a[2] = null),
      b = new OpenLayers.Geometry.Point(a[0], a[1], a[2]);
       else throw 'Bad coordinate string: ' + c;
      return b
    },
    linestring: function (a, b) {
      var c = this.getElementsByTagNameNS(a, this.internalns, 'coordinates'),
      d = null;
      if (0 < c.length) {
        for (var c = this.getChildValue(c[0]), c = c.replace(this.regExes.trimSpace, ''), c = c.replace(this.regExes.trimComma, ','), d = c.split(this.regExes.splitSpace), e = d.length, f = Array(e), g, h, i = 0; i < e; ++i) if (g = d[i].split(','), h = g.length, 1 < h) 2 == g.length && (g[2] = null),
        f[i] = new OpenLayers.Geometry.Point(g[0], g[1], g[2]);
         else throw 'Bad LineString point coordinates: ' + d[i];
        if (e) d = b ? new OpenLayers.Geometry.LinearRing(f)  : new OpenLayers.Geometry.LineString(f);
         else throw 'Bad LineString coordinates: ' + c;
      }
      return d
    },
    polygon: function (a) {
      var a = this.getElementsByTagNameNS(a, this.internalns, 'LinearRing'),
      b = a.length,
      c = Array(b);
      if (0 < b) for (var d = 0, e = a.length; d < e; ++d) if (b = this.parseGeometry.linestring.apply(this, [
        a[d],
        !0
      ])) c[d] = b;
       else throw 'Bad LinearRing geometry: ' + d;
      return new OpenLayers.Geometry.Polygon(c)
    },
    multigeometry: function (a) {
      for (var b, c = [
      ], d = a.childNodes, e = 0, f = d.length; e < f; ++e) a = d[e],
      1 == a.nodeType && (b = this.parseGeometry[(a.prefix ? a.nodeName.split(':') [1] : a.nodeName).toLowerCase()]) && c.push(b.apply(this, [
        a
      ]));
      return new OpenLayers.Geometry.Collection(c)
    }
  },
  parseAttributes: function (a) {
    var b = {
    },
    c = a.getElementsByTagName('ExtendedData');
    c.length && (b = this.parseExtendedData(c[0]));
    for (var d, e, f, a = a.childNodes, c = 0, g = a.length; c < g; ++c) if (d = a[c], 1 == d.nodeType && (e = d.childNodes, 1 <= e.length && 3 >= e.length)) {
      switch (e.length) {
        case 1:
          f = e[0];
          break;
        case 2:
          f = e[0];
          e = e[1];
          f = 3 == f.nodeType || 4 == f.nodeType ? f : e;
          break;
        default:
          f = e[1]
      }
      if (3 == f.nodeType || 4 == f.nodeType) if (d = d.prefix ? d.nodeName.split(':') [1] : d.nodeName, f = OpenLayers.Util.getXmlNodeValue(f)) f = f.replace(this.regExes.trimSpace, ''),
      b[d] = f
    }
    return b
  },
  parseExtendedData: function (a) {
    var b = {
    },
    c,
    d,
    e,
    f,
    g = a.getElementsByTagName('Data');
    c = 0;
    for (d = g.length; c < d; c++) {
      e = g[c];
      f = e.getAttribute('name');
      var h = {
      },
      i = e.getElementsByTagName('value');
      i.length && (h.value = this.getChildValue(i[0]));
      this.kvpAttributes ? b[f] = h.value : (e = e.getElementsByTagName('displayName'), e.length && (h.displayName = this.getChildValue(e[0])), b[f] = h)
    }
    a = a.getElementsByTagName('SimpleData');
    c = 0;
    for (d = a.length; c < d; c++) h = {
    },
    e = a[c],
    f = e.getAttribute('name'),
    h.value = this.getChildValue(e),
    this.kvpAttributes ? b[f] = h.value : (h.displayName = f, b[f] = h);
    return b
  },
  parseProperty: function (a, b, c) {
    var d,
    a = this.getElementsByTagNameNS(a, b, c);
    try {
      d = OpenLayers.Util.getXmlNodeValue(a[0])
    } catch (e) {
      d = null
    }
    return d
  },
  write: function (a) {
    OpenLayers.Util.isArray(a) || (a = [
      a
    ]);
    for (var b = this.createElementNS(this.kmlns, 'kml'), c = this.createFolderXML(), d = 0, e = a.length; d < e; ++d) c.appendChild(this.createPlacemarkXML(a[d]));
    b.appendChild(c);
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      b
    ])
  },
  createFolderXML: function () {
    var a = this.createElementNS(this.kmlns, 'Folder');
    if (this.foldersName) {
      var b = this.createElementNS(this.kmlns, 'name'),
      c = this.createTextNode(this.foldersName);
      b.appendChild(c);
      a.appendChild(b)
    }
    this.foldersDesc && (b = this.createElementNS(this.kmlns, 'description'), c = this.createTextNode(this.foldersDesc), b.appendChild(c), a.appendChild(b));
    return a
  },
  createPlacemarkXML: function (a) {
    var b = this.createElementNS(this.kmlns, 'name');
    b.appendChild(this.createTextNode(a.style && a.style.label ? a.style.label : a.attributes.name || a.id));
    var c = this.createElementNS(this.kmlns, 'description');
    c.appendChild(this.createTextNode(a.attributes.description || this.placemarksDesc));
    var d = this.createElementNS(this.kmlns, 'Placemark');
    null !=
    a.fid && d.setAttribute('id', a.fid);
    d.appendChild(b);
    d.appendChild(c);
    b = this.buildGeometryNode(a.geometry);
    d.appendChild(b);
    a.attributes && (a = this.buildExtendedData(a.attributes)) && d.appendChild(a);
    return d
  },
  buildGeometryNode: function (a) {
    var b = a.CLASS_NAME,
    b = this.buildGeometry[b.substring(b.lastIndexOf('.') + 1).toLowerCase()],
    c = null;
    b && (c = b.apply(this, [
      a
    ]));
    return c
  },
  buildGeometry: {
    point: function (a) {
      var b = this.createElementNS(this.kmlns, 'Point');
      b.appendChild(this.buildCoordinatesNode(a));
      return b
    },
    multipoint: function (a) {
      return this.buildGeometry.collection.apply(this, [
        a
      ])
    },
    linestring: function (a) {
      var b = this.createElementNS(this.kmlns, 'LineString');
      b.appendChild(this.buildCoordinatesNode(a));
      return b
    },
    multilinestring: function (a) {
      return this.buildGeometry.collection.apply(this, [
        a
      ])
    },
    linearring: function (a) {
      var b = this.createElementNS(this.kmlns, 'LinearRing');
      b.appendChild(this.buildCoordinatesNode(a));
      return b
    },
    polygon: function (a) {
      for (var b = this.createElementNS(this.kmlns, 'Polygon'), a = a.components, c, d, e = 0, f = a.length; e < f; ++e) c = 0 == e ? 'outerBoundaryIs' : 'innerBoundaryIs',
      c = this.createElementNS(this.kmlns, c),
      d = this.buildGeometry.linearring.apply(this, [
        a[e]
      ]),
      c.appendChild(d),
      b.appendChild(c);
      return b
    },
    multipolygon: function (a) {
      return this.buildGeometry.collection.apply(this, [
        a
      ])
    },
    collection: function (a) {
      for (var b = this.createElementNS(this.kmlns, 'MultiGeometry'), c, d = 0, e = a.components.length; d < e; ++d) (c = this.buildGeometryNode.apply(this, [
        a.components[d]
      ])) && b.appendChild(c);
      return b
    }
  },
  buildCoordinatesNode: function (a) {
    var b = this.createElementNS(this.kmlns, 'coordinates'),
    c;
    if (c = a.components) {
      for (var d = c.length, e = Array(d), f = 0; f < d; ++f) a = c[f],
      e[f] = this.buildCoordinates(a);
      c = e.join(' ')
    } else c = this.buildCoordinates(a);
    c = this.createTextNode(c);
    b.appendChild(c);
    return b
  },
  buildCoordinates: function (a) {
    this.internalProjection && this.externalProjection && (a = a.clone(), a.transform(this.internalProjection, this.externalProjection));
    return a.x + ',' + a.y
  },
  buildExtendedData: function (a) {
    var b = this.createElementNS(this.kmlns, 'ExtendedData'),
    c;
    for (c in a) if (a[c] && 'name' != c && 'description' !=
    c && 'styleUrl' != c) {
      var d = this.createElementNS(this.kmlns, 'Data');
      d.setAttribute('name', c);
      var e = this.createElementNS(this.kmlns, 'value');
      if ('object' == typeof a[c]) {
        if (a[c].value && e.appendChild(this.createTextNode(a[c].value)), a[c].displayName) {
          var f = this.createElementNS(this.kmlns, 'displayName');
          f.appendChild(this.getXMLDoc().createCDATASection(a[c].displayName));
          d.appendChild(f)
        }
      } else e.appendChild(this.createTextNode(a[c]));
      d.appendChild(e);
      b.appendChild(d)
    }
    return this.isSimpleContent(b) ? null : b
  },
  CLASS_NAME: 'OpenLayers.Format.KML'
});
OpenLayers.Popup = OpenLayers.Class({
  events: null,
  id: '',
  lonlat: null,
  div: null,
  contentSize: null,
  size: null,
  contentHTML: null,
  backgroundColor: '',
  opacity: '',
  border: '',
  contentDiv: null,
  groupDiv: null,
  closeDiv: null,
  autoSize: !1,
  minSize: null,
  maxSize: null,
  displayClass: 'olPopup',
  contentDisplayClass: 'olPopupContent',
  padding: 0,
  disableFirefoxOverflowHack: !1,
  fixPadding: function () {
    'number' == typeof this.padding && (this.padding = new OpenLayers.Bounds(this.padding, this.padding, this.padding, this.padding))
  },
  panMapIfOutOfView: !1,
  keepInMap: !1,
  closeOnMove: !1,
  map: null,
  initialize: function (a, b, c, d, e, f) {
    null == a && (a = OpenLayers.Util.createUniqueID(this.CLASS_NAME + '_'));
    this.id = a;
    this.lonlat = b;
    this.contentSize = null != c ? c : new OpenLayers.Size(OpenLayers.Popup.WIDTH, OpenLayers.Popup.HEIGHT);
    null != d && (this.contentHTML = d);
    this.backgroundColor = OpenLayers.Popup.COLOR;
    this.opacity = OpenLayers.Popup.OPACITY;
    this.border = OpenLayers.Popup.BORDER;
    this.div = OpenLayers.Util.createDiv(this.id, null, null, null, null, null, 'hidden');
    this.div.className = this.displayClass;
    this.groupDiv = OpenLayers.Util.createDiv(this.id + '_GroupDiv', null, null, null, 'relative', null, 'hidden');
    a = this.div.id + '_contentDiv';
    this.contentDiv = OpenLayers.Util.createDiv(a, null, this.contentSize.clone(), null, 'relative');
    this.contentDiv.className = this.contentDisplayClass;
    this.groupDiv.appendChild(this.contentDiv);
    this.div.appendChild(this.groupDiv);
    e && this.addCloseBox(f);
    this.registerEvents()
  },
  destroy: function () {
    this.border = this.opacity = this.backgroundColor = this.contentHTML = this.size = this.lonlat = this.id = null;
    this.closeOnMove && this.map && this.map.events.unregister('movestart', this, this.hide);
    this.events.destroy();
    this.events = null;
    this.closeDiv && (OpenLayers.Event.stopObservingElement(this.closeDiv), this.groupDiv.removeChild(this.closeDiv));
    this.closeDiv = null;
    this.div.removeChild(this.groupDiv);
    this.groupDiv = null;
    null != this.map && this.map.removePopup(this);
    this.panMapIfOutOfView = this.padding = this.maxSize = this.minSize = this.autoSize = this.div = this.map = null
  },
  draw: function (a) {
    null == a && null != this.lonlat && null !=
    this.map && (a = this.map.getLayerPxFromLonLat(this.lonlat));
    this.closeOnMove && this.map.events.register('movestart', this, this.hide);
    !this.disableFirefoxOverflowHack && 'firefox' == OpenLayers.BROWSER_NAME && (this.map.events.register('movestart', this, function () {
      var a = document.defaultView.getComputedStyle(this.contentDiv, null).getPropertyValue('overflow');
      'hidden' != a && (this.contentDiv._oldOverflow = a, this.contentDiv.style.overflow = 'hidden')
    }), this.map.events.register('moveend', this, function () {
      var a = this.contentDiv._oldOverflow;
      a && (this.contentDiv.style.overflow = a, this.contentDiv._oldOverflow = null)
    }));
    this.moveTo(a);
    !this.autoSize && !this.size && this.setSize(this.contentSize);
    this.setBackgroundColor();
    this.setOpacity();
    this.setBorder();
    this.setContentHTML();
    this.panMapIfOutOfView && this.panIntoView();
    return this.div
  },
  updatePosition: function () {
    if (this.lonlat && this.map) {
      var a = this.map.getLayerPxFromLonLat(this.lonlat);
      a && this.moveTo(a)
    }
  },
  moveTo: function (a) {
    null != a && null != this.div && (this.div.style.left = a.x + 'px', this.div.style.top = a.y + 'px')
  },
  visible: function () {
    return OpenLayers.Element.visible(this.div)
  },
  toggle: function () {
    this.visible() ? this.hide()  : this.show()
  },
  show: function () {
    this.div.style.display = '';
    this.panMapIfOutOfView && this.panIntoView()
  },
  hide: function () {
    this.div.style.display = 'none'
  },
  setSize: function (a) {
    this.size = a.clone();
    var b = this.getContentDivPadding(),
    c = b.left + b.right,
    d = b.top + b.bottom;
    this.fixPadding();
    c += this.padding.left + this.padding.right;
    d += this.padding.top + this.padding.bottom;
    if (this.closeDiv) var e = parseInt(this.closeDiv.style.width),
    c = c + (e + b.right);
    this.size.w += c;
    this.size.h += d;
    'msie' == OpenLayers.BROWSER_NAME && (this.contentSize.w += b.left + b.right, this.contentSize.h += b.bottom + b.top);
    null != this.div && (this.div.style.width = this.size.w + 'px', this.div.style.height = this.size.h + 'px');
    null != this.contentDiv && (this.contentDiv.style.width = a.w + 'px', this.contentDiv.style.height = a.h + 'px')
  },
  updateSize: function () {
    var a = '<div class=\'' + this.contentDisplayClass + '\'>' + this.contentDiv.innerHTML + '</div>',
    b = this.map ? this.map.div : document.body,
    c = OpenLayers.Util.getRenderedDimensions(a, null, {
      displayClass: this.displayClass,
      containerElement: b
    }),
    d = this.getSafeContentSize(c),
    e = null;
    d.equals(c) ? e = c : (c = {
      w: d.w < c.w ? d.w : null,
      h: d.h < c.h ? d.h : null
    }, c.w && c.h ? e = d : (a = OpenLayers.Util.getRenderedDimensions(a, c, {
      displayClass: this.contentDisplayClass,
      containerElement: b
    }), 'hidden' != OpenLayers.Element.getStyle(this.contentDiv, 'overflow') && a.equals(d) && (d = OpenLayers.Util.getScrollbarWidth(), c.w ? a.h += d : a.w += d), e = this.getSafeContentSize(a)));
    this.setSize(e)
  },
  setBackgroundColor: function (a) {
    void 0 != a && (this.backgroundColor = a);
    null != this.div && (this.div.style.backgroundColor = this.backgroundColor)
  },
  setOpacity: function (a) {
    void 0 != a && (this.opacity = a);
    null != this.div && (this.div.style.opacity = this.opacity, this.div.style.filter = 'alpha(opacity=' + 100 * this.opacity + ')')
  },
  setBorder: function (a) {
    void 0 != a && (this.border = a);
    null != this.div && (this.div.style.border = this.border)
  },
  setContentHTML: function (a) {
    null != a && (this.contentHTML = a);
    null != this.contentDiv && (null != this.contentHTML && this.contentHTML != this.contentDiv.innerHTML) && (this.contentDiv.innerHTML = this.contentHTML, this.autoSize && (this.registerImageListeners(), this.updateSize()))
  },
  registerImageListeners: function () {
    for (var a = function () {
      null !== this.popup.id && (this.popup.updateSize(), this.popup.visible() && this.popup.panMapIfOutOfView && this.popup.panIntoView(), OpenLayers.Event.stopObserving(this.img, 'load', this.img._onImageLoad))
    }, b = this.contentDiv.getElementsByTagName('img'), c = 0, d = b.length; c < d; c++) {
      var e = b[c];
      if (0 == e.width || 0 == e.height) e._onImgLoad = OpenLayers.Function.bind(a, {
        popup: this,
        img: e
      }),
      OpenLayers.Event.observe(e, 'load', e._onImgLoad)
    }
  },
  getSafeContentSize: function (a) {
    var a = a.clone(),
    b = this.getContentDivPadding(),
    c = b.left + b.right,
    d = b.top + b.bottom;
    this.fixPadding();
    c += this.padding.left + this.padding.right;
    d += this.padding.top + this.padding.bottom;
    if (this.closeDiv) var e = parseInt(this.closeDiv.style.width),
    c = c + (e + b.right);
    this.minSize && (a.w = Math.max(a.w, this.minSize.w - c), a.h = Math.max(a.h, this.minSize.h - d));
    this.maxSize && (a.w = Math.min(a.w, this.maxSize.w - c), a.h = Math.min(a.h, this.maxSize.h -
    d));
    if (this.map && this.map.size) {
      e = b = 0;
      if (this.keepInMap && !this.panMapIfOutOfView) switch (e = this.map.getPixelFromLonLat(this.lonlat), this.relativePosition) {
        case 'tr':
          b = e.x;
          e = this.map.size.h - e.y;
          break;
        case 'tl':
          b = this.map.size.w - e.x;
          e = this.map.size.h - e.y;
          break;
        case 'bl':
          b = this.map.size.w - e.x;
          e = e.y;
          break;
        case 'br':
          b = e.x;
          e = e.y;
          break;
        default:
          b = e.x,
          e = this.map.size.h - e.y
      }
      d = this.map.size.h - this.map.paddingForPopups.top - this.map.paddingForPopups.bottom - d - e;
      a.w = Math.min(a.w, this.map.size.w - this.map.paddingForPopups.left -
      this.map.paddingForPopups.right - c - b);
      a.h = Math.min(a.h, d)
    }
    return a
  },
  getContentDivPadding: function () {
    var a = this._contentDivPadding;
    if (!a && (null == this.div.parentNode && (this.div.style.display = 'none', document.body.appendChild(this.div)), this._contentDivPadding = a = new OpenLayers.Bounds(OpenLayers.Element.getStyle(this.contentDiv, 'padding-left'), OpenLayers.Element.getStyle(this.contentDiv, 'padding-bottom'), OpenLayers.Element.getStyle(this.contentDiv, 'padding-right'), OpenLayers.Element.getStyle(this.contentDiv, 'padding-top')), this.div.parentNode == document.body)) document.body.removeChild(this.div),
    this.div.style.display = '';
    return a
  },
  addCloseBox: function (a) {
    this.closeDiv = OpenLayers.Util.createDiv(this.id + '_close', null, {
      w: 17,
      h: 17
    });
    this.closeDiv.className = 'olPopupCloseBox';
    var b = this.getContentDivPadding();
    this.closeDiv.style.right = b.right + 'px';
    this.closeDiv.style.top = b.top + 'px';
    this.groupDiv.appendChild(this.closeDiv);
    a = a || function (a) {
      this.hide();
      OpenLayers.Event.stop(a)
    };
    OpenLayers.Event.observe(this.closeDiv, 'touchend', OpenLayers.Function.bindAsEventListener(a, this));
    OpenLayers.Event.observe(this.closeDiv, 'click', OpenLayers.Function.bindAsEventListener(a, this))
  },
  panIntoView: function () {
    var a = this.map.getSize(),
    b = this.map.getViewPortPxFromLayerPx(new OpenLayers.Pixel(parseInt(this.div.style.left), parseInt(this.div.style.top))),
    c = b.clone();
    b.x < this.map.paddingForPopups.left ? c.x = this.map.paddingForPopups.left : b.x + this.size.w > a.w - this.map.paddingForPopups.right && (c.x = a.w - this.map.paddingForPopups.right - this.size.w);
    b.y < this.map.paddingForPopups.top ? c.y = this.map.paddingForPopups.top : b.y + this.size.h > a.h - this.map.paddingForPopups.bottom && (c.y = a.h - this.map.paddingForPopups.bottom - this.size.h);
    this.map.pan(b.x - c.x, b.y - c.y)
  },
  registerEvents: function () {
    this.events = new OpenLayers.Events(this, this.div, null, !0);
    this.events.on({
      mousedown: this.onmousedown,
      mousemove: this.onmousemove,
      mouseup: this.onmouseup,
      click: this.onclick,
      mouseout: this.onmouseout,
      dblclick: this.ondblclick,
      touchstart: function (a) {
        OpenLayers.Event.stop(a, !0)
      },
      scope: this
    })
  },
  onmousedown: function (a) {
    this.mousedown = !0;
    OpenLayers.Event.stop(a, !0)
  },
  onmousemove: function (a) {
    this.mousedown && OpenLayers.Event.stop(a, !0)
  },
  onmouseup: function (a) {
    this.mousedown && (this.mousedown = !1, OpenLayers.Event.stop(a, !0))
  },
  onclick: function (a) {
    OpenLayers.Event.stop(a, !0)
  },
  onmouseout: function () {
    this.mousedown = !1
  },
  ondblclick: function (a) {
    OpenLayers.Event.stop(a, !0)
  },
  CLASS_NAME: 'OpenLayers.Popup'
});
OpenLayers.Popup.WIDTH = 200;
OpenLayers.Popup.HEIGHT = 200;
OpenLayers.Popup.COLOR = 'white';
OpenLayers.Popup.OPACITY = 1;
OpenLayers.Popup.BORDER = '0px';
OpenLayers.Popup.Anchored = OpenLayers.Class(OpenLayers.Popup, {
  relativePosition: null,
  keepInMap: !0,
  anchor: null,
  initialize: function (a, b, c, d, e, f, g) {
    OpenLayers.Popup.prototype.initialize.apply(this, [
      a,
      b,
      c,
      d,
      f,
      g
    ]);
    this.anchor = null != e ? e : {
      size: new OpenLayers.Size(0, 0),
      offset: new OpenLayers.Pixel(0, 0)
    }
  },
  destroy: function () {
    this.relativePosition = this.anchor = null;
    OpenLayers.Popup.prototype.destroy.apply(this, arguments)
  },
  show: function () {
    this.updatePosition();
    OpenLayers.Popup.prototype.show.apply(this, arguments)
  },
  moveTo: function (a) {
    var b = this.relativePosition;
    this.relativePosition = this.calculateRelativePosition(a);
    a = this.calculateNewPx(a);
    OpenLayers.Popup.prototype.moveTo.apply(this, Array(a));
    this.relativePosition != b && this.updateRelativePosition()
  },
  setSize: function (a) {
    OpenLayers.Popup.prototype.setSize.apply(this, arguments);
    this.lonlat && this.map && this.moveTo(this.map.getLayerPxFromLonLat(this.lonlat))
  },
  calculateRelativePosition: function (a) {
    a = this.map.getLonLatFromLayerPx(a);
    a = this.map.getExtent().determineQuadrant(a);
    return OpenLayers.Bounds.oppositeQuadrant(a)
  },
  updateRelativePosition: function () {
  },
  calculateNewPx: function (a) {
    var a = a.offset(this.anchor.offset),
    b = this.size || this.contentSize,
    c = 't' == this.relativePosition.charAt(0);
    a.y += c ? - b.h : this.anchor.size.h;
    c = 'l' == this.relativePosition.charAt(1);
    a.x += c ? - b.w : this.anchor.size.w;
    return a
  },
  CLASS_NAME: 'OpenLayers.Popup.Anchored'
}); /*
 Apache 2 

 Contains portions of Rico <http://openrico.org/>

 Copyright 2005 Sabre Airline Solutions  

 Licensed under the Apache License, Version 2.0 (the "License"); you
 may not use this file except in compliance with the License. You
 may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0  

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 implied. See the License for the specific language governing
 permissions and limitations under the License. 
*/
OpenLayers.Console.warn('OpenLayers.Rico is deprecated');
OpenLayers.Rico = OpenLayers.Rico || {
};
OpenLayers.Rico.Color = OpenLayers.Class({
  initialize: function (a, b, c) {
    this.rgb = {
      r: a,
      g: b,
      b: c
    }
  },
  setRed: function (a) {
    this.rgb.r = a
  },
  setGreen: function (a) {
    this.rgb.g = a
  },
  setBlue: function (a) {
    this.rgb.b = a
  },
  setHue: function (a) {
    var b = this.asHSB();
    b.h = a;
    this.rgb = OpenLayers.Rico.Color.HSBtoRGB(b.h, b.s, b.b)
  },
  setSaturation: function (a) {
    var b = this.asHSB();
    b.s = a;
    this.rgb = OpenLayers.Rico.Color.HSBtoRGB(b.h, b.s, b.b)
  },
  setBrightness: function (a) {
    var b = this.asHSB();
    b.b = a;
    this.rgb = OpenLayers.Rico.Color.HSBtoRGB(b.h, b.s, b.b)
  },
  darken: function (a) {
    var b = this.asHSB();
    this.rgb = OpenLayers.Rico.Color.HSBtoRGB(b.h, b.s, Math.max(b.b - a, 0))
  },
  brighten: function (a) {
    var b = this.asHSB();
    this.rgb = OpenLayers.Rico.Color.HSBtoRGB(b.h, b.s, Math.min(b.b + a, 1))
  },
  blend: function (a) {
    this.rgb.r = Math.floor((this.rgb.r + a.rgb.r) / 2);
    this.rgb.g = Math.floor((this.rgb.g + a.rgb.g) / 2);
    this.rgb.b = Math.floor((this.rgb.b + a.rgb.b) / 2)
  },
  isBright: function () {
    this.asHSB();
    return 0.5 < this.asHSB().b
  },
  isDark: function () {
    return !this.isBright()
  },
  asRGB: function () {
    return 'rgb(' +
    this.rgb.r + ',' + this.rgb.g + ',' + this.rgb.b + ')'
  },
  asHex: function () {
    return '#' + this.rgb.r.toColorPart() + this.rgb.g.toColorPart() + this.rgb.b.toColorPart()
  },
  asHSB: function () {
    return OpenLayers.Rico.Color.RGBtoHSB(this.rgb.r, this.rgb.g, this.rgb.b)
  },
  toString: function () {
    return this.asHex()
  }
});
OpenLayers.Rico.Color.createFromHex = function (a) {
  if (4 == a.length) for (var b = a, a = '#', c = 1; 4 > c; c++) a += b.charAt(c) + b.charAt(c);
  0 == a.indexOf('#') && (a = a.substring(1));
  b = a.substring(0, 2);
  c = a.substring(2, 4);
  a = a.substring(4, 6);
  return new OpenLayers.Rico.Color(parseInt(b, 16), parseInt(c, 16), parseInt(a, 16))
};
OpenLayers.Rico.Color.createColorFromBackground = function (a) {
  var b = OpenLayers.Element.getStyle(OpenLayers.Util.getElement(a), 'backgroundColor');
  return 'transparent' == b && a.parentNode ? OpenLayers.Rico.Color.createColorFromBackground(a.parentNode)  : null == b ? new OpenLayers.Rico.Color(255, 255, 255)  : 0 == b.indexOf('rgb(') ? (a = b.substring(4, b.length - 1).split(','), new OpenLayers.Rico.Color(parseInt(a[0]), parseInt(a[1]), parseInt(a[2])))  : 0 == b.indexOf('#') ? OpenLayers.Rico.Color.createFromHex(b)  : new OpenLayers.Rico.Color(255, 255, 255)
};
OpenLayers.Rico.Color.HSBtoRGB = function (a, b, c) {
  var d = 0,
  e = 0,
  f = 0;
  if (0 == b) f = e = d = parseInt(255 * c + 0.5);
   else {
    var a = 6 * (a - Math.floor(a)),
    g = a - Math.floor(a),
    h = c * (1 - b),
    i = c * (1 - b * g),
    b = c * (1 - b * (1 - g));
    switch (parseInt(a)) {
      case 0:
        d = 255 * c + 0.5;
        e = 255 * b + 0.5;
        f = 255 * h + 0.5;
        break;
      case 1:
        d = 255 * i + 0.5;
        e = 255 * c + 0.5;
        f = 255 * h + 0.5;
        break;
      case 2:
        d = 255 * h + 0.5;
        e = 255 * c + 0.5;
        f = 255 * b + 0.5;
        break;
      case 3:
        d = 255 * h + 0.5;
        e = 255 * i + 0.5;
        f = 255 * c + 0.5;
        break;
      case 4:
        d = 255 * b + 0.5;
        e = 255 * h + 0.5;
        f = 255 * c + 0.5;
        break;
      case 5:
        d = 255 * c + 0.5,
        e = 255 * h + 0.5,
        f = 255 * i + 0.5
    }
  }
  return {
    r: parseInt(d),
    g: parseInt(e),
    b: parseInt(f)
  }
};
OpenLayers.Rico.Color.RGBtoHSB = function (a, b, c) {
  var d,
  e = a > b ? a : b;
  c > e && (e = c);
  var f = a < b ? a : b;
  c < f && (f = c);
  d = 0 != e ? (e - f) / e : 0;
  if (0 == d) a = 0;
   else {
    var g = (e - a) / (e - f),
    h = (e - b) / (e - f),
    c = (e - c) / (e - f),
    a = (a == e ? c - h : b == e ? 2 + g - c : 4 + h - g) / 6;
    0 > a && (a += 1)
  }
  return {
    h: a,
    s: d,
    b: e / 255
  }
};
OpenLayers.Console.warn('OpenLayers.Rico is deprecated');
OpenLayers.Rico = OpenLayers.Rico || {
};
OpenLayers.Rico.Corner = {
  round: function (a, b) {
    a = OpenLayers.Util.getElement(a);
    this._setOptions(b);
    var c = this.options.color;
    'fromElement' == this.options.color && (c = this._background(a));
    var d = this.options.bgColor;
    'fromParent' == this.options.bgColor && (d = this._background(a.offsetParent));
    this._roundCornersImpl(a, c, d)
  },
  changeColor: function (a, b) {
    a.style.backgroundColor = b;
    for (var c = a.parentNode.getElementsByTagName('span'), d = 0; d < c.length; d++) c[d].style.backgroundColor = b
  },
  changeOpacity: function (a, b) {
    var c = 'alpha(opacity=' +
    100 * b + ')';
    a.style.opacity = b;
    a.style.filter = c;
    for (var d = a.parentNode.getElementsByTagName('span'), e = 0; e < d.length; e++) d[e].style.opacity = b,
    d[e].style.filter = c
  },
  reRound: function (a, b) {
    var c = a.parentNode.childNodes[2];
    a.parentNode.removeChild(a.parentNode.childNodes[0]);
    a.parentNode.removeChild(c);
    this.round(a.parentNode, b)
  },
  _roundCornersImpl: function (a, b, c) {
    this.options.border && this._renderBorder(a, c);
    this._isTopRounded() && this._roundTopCorners(a, b, c);
    this._isBottomRounded() && this._roundBottomCorners(a, b, c)
  },
  _renderBorder: function (a, b) {
    var c = '1px solid ' + this._borderColor(b);
    a.innerHTML = '<div ' + ('style=\'border-left: ' + c + ';' + ('border-right: ' + c) + '\'') + '>' + a.innerHTML + '</div>'
  },
  _roundTopCorners: function (a, b, c) {
    for (var d = this._createCorner(c), e = 0; e < this.options.numSlices; e++) d.appendChild(this._createCornerSlice(b, c, e, 'top'));
    a.style.paddingTop = 0;
    a.insertBefore(d, a.firstChild)
  },
  _roundBottomCorners: function (a, b, c) {
    for (var d = this._createCorner(c), e = this.options.numSlices - 1; 0 <= e; e--) d.appendChild(this._createCornerSlice(b, c, e, 'bottom'));
    a.style.paddingBottom = 0;
    a.appendChild(d)
  },
  _createCorner: function (a) {
    var b = document.createElement('div');
    b.style.backgroundColor = this._isTransparent() ? 'transparent' : a;
    return b
  },
  _createCornerSlice: function (a, b, c, d) {
    var e = document.createElement('span'),
    f = e.style;
    f.backgroundColor = a;
    f.display = 'block';
    f.height = '1px';
    f.overflow = 'hidden';
    f.fontSize = '1px';
    a = this._borderColor(a, b);
    this.options.border && 0 == c ? (f.borderTopStyle = 'solid', f.borderTopWidth = '1px', f.borderLeftWidth = '0px', f.borderRightWidth = '0px', f.borderBottomWidth = '0px', f.height = '0px', f.borderColor = a)  : a && (f.borderColor = a, f.borderStyle = 'solid', f.borderWidth = '0px 1px');
    !this.options.compact && c == this.options.numSlices - 1 && (f.height = '2px');
    this._setMargin(e, c, d);
    this._setBorder(e, c, d);
    return e
  },
  _setOptions: function (a) {
    this.options = {
      corners: 'all',
      color: 'fromElement',
      bgColor: 'fromParent',
      blend: !0,
      border: !1,
      compact: !1
    };
    OpenLayers.Util.extend(this.options, a || {
    });
    this.options.numSlices = this.options.compact ? 2 : 4;
    this._isTransparent() && (this.options.blend = !1)
  },
  _whichSideTop: function () {
    return this._hasString(this.options.corners, 'all', 'top') || 0 <= this.options.corners.indexOf('tl') && 0 <= this.options.corners.indexOf('tr') ? '' : 0 <= this.options.corners.indexOf('tl') ? 'left' : 0 <= this.options.corners.indexOf('tr') ? 'right' : ''
  },
  _whichSideBottom: function () {
    return this._hasString(this.options.corners, 'all', 'bottom') || 0 <= this.options.corners.indexOf('bl') && 0 <= this.options.corners.indexOf('br') ? '' : 0 <= this.options.corners.indexOf('bl') ? 'left' : 0 <= this.options.corners.indexOf('br') ?
    'right' : ''
  },
  _borderColor: function (a, b) {
    return 'transparent' == a ? b : this.options.border ? this.options.border : this.options.blend ? this._blend(b, a)  : ''
  },
  _setMargin: function (a, b, c) {
    b = this._marginSize(b);
    c = 'top' == c ? this._whichSideTop()  : this._whichSideBottom();
    'left' == c ? (a.style.marginLeft = b + 'px', a.style.marginRight = '0px')  : 'right' == c ? (a.style.marginRight = b + 'px', a.style.marginLeft = '0px')  : (a.style.marginLeft = b + 'px', a.style.marginRight = b + 'px')
  },
  _setBorder: function (a, b, c) {
    b = this._borderSize(b);
    c = 'top' == c ? this._whichSideTop()  :
    this._whichSideBottom();
    'left' == c ? (a.style.borderLeftWidth = b + 'px', a.style.borderRightWidth = '0px')  : 'right' == c ? (a.style.borderRightWidth = b + 'px', a.style.borderLeftWidth = '0px')  : (a.style.borderLeftWidth = b + 'px', a.style.borderRightWidth = b + 'px');
    !1 != this.options.border && (a.style.borderLeftWidth = b + 'px', a.style.borderRightWidth = b + 'px')
  },
  _marginSize: function (a) {
    if (this._isTransparent()) return 0;
    var b = [
      5,
      3,
      2,
      1
    ],
    c = [
      3,
      2,
      1,
      0
    ],
    d = [
      2,
      1
    ],
    e = [
      1,
      0
    ];
    return this.options.compact && this.options.blend ? e[a] : this.options.compact ?
    d[a] : this.options.blend ? c[a] : b[a]
  },
  _borderSize: function (a) {
    var b = [
      5,
      3,
      2,
      1
    ],
    c = [
      2,
      1,
      1,
      1
    ],
    d = [
      1,
      0
    ],
    e = [
      0,
      2,
      0,
      0
    ];
    return this.options.compact && (this.options.blend || this._isTransparent()) ? 1 : this.options.compact ? d[a] : this.options.blend ? c[a] : this.options.border ? e[a] : this._isTransparent() ? b[a] : 0
  },
  _hasString: function (a) {
    for (var b = 1; b < arguments.length; b++) if (0 <= a.indexOf(arguments[b])) return !0;
    return !1
  },
  _blend: function (a, b) {
    var c = OpenLayers.Rico.Color.createFromHex(a);
    c.blend(OpenLayers.Rico.Color.createFromHex(b));
    return c
  },
  _background: function (a) {
    try {
      return OpenLayers.Rico.Color.createColorFromBackground(a).asHex()
    } catch (b) {
      return '#ffffff'
    }
  },
  _isTransparent: function () {
    return 'transparent' == this.options.color
  },
  _isTopRounded: function () {
    return this._hasString(this.options.corners, 'all', 'top', 'tl', 'tr')
  },
  _isBottomRounded: function () {
    return this._hasString(this.options.corners, 'all', 'bottom', 'bl', 'br')
  },
  _hasSingleTextChild: function (a) {
    return 1 == a.childNodes.length && 3 == a.childNodes[0].nodeType
  }
};
OpenLayers.Popup.AnchoredBubble = OpenLayers.Class(OpenLayers.Popup.Anchored, {
  rounded: !1,
  initialize: function (a, b, c, d, e, f, g) {
    OpenLayers.Console.warn('AnchoredBubble is deprecated');
    this.padding = new OpenLayers.Bounds(0, OpenLayers.Popup.AnchoredBubble.CORNER_SIZE, 0, OpenLayers.Popup.AnchoredBubble.CORNER_SIZE);
    OpenLayers.Popup.Anchored.prototype.initialize.apply(this, arguments)
  },
  draw: function (a) {
    OpenLayers.Popup.Anchored.prototype.draw.apply(this, arguments);
    this.setContentHTML();
    this.setBackgroundColor();
    this.setOpacity();
    return this.div
  },
  updateRelativePosition: function () {
    this.setRicoCorners()
  },
  setSize: function (a) {
    OpenLayers.Popup.Anchored.prototype.setSize.apply(this, arguments);
    this.setRicoCorners()
  },
  setBackgroundColor: function (a) {
    void 0 != a && (this.backgroundColor = a);
    null != this.div && null != this.contentDiv && (this.div.style.background = 'transparent', OpenLayers.Rico.Corner.changeColor(this.groupDiv, this.backgroundColor))
  },
  setOpacity: function (a) {
    OpenLayers.Popup.Anchored.prototype.setOpacity.call(this, a);
    null != this.div && null != this.groupDiv && OpenLayers.Rico.Corner.changeOpacity(this.groupDiv, this.opacity)
  },
  setBorder: function () {
    this.border = 0
  },
  setRicoCorners: function () {
    var a = {
      corners: this.getCornersToRound(this.relativePosition),
      color: this.backgroundColor,
      bgColor: 'transparent',
      blend: !1
    };
    this.rounded ? (OpenLayers.Rico.Corner.reRound(this.groupDiv, a), this.setBackgroundColor(), this.setOpacity())  : (OpenLayers.Rico.Corner.round(this.div, a), this.rounded = !0)
  },
  getCornersToRound: function () {
    var a = [
      'tl',
      'tr',
      'bl',
      'br'
    ],
    b = OpenLayers.Bounds.oppositeQuadrant(this.relativePosition);
    OpenLayers.Util.removeItem(a, b);
    return a.join(' ')
  },
  CLASS_NAME: 'OpenLayers.Popup.AnchoredBubble'
});
OpenLayers.Popup.AnchoredBubble.CORNER_SIZE = 5;
OpenLayers.Protocol.WFS.v1 = OpenLayers.Class(OpenLayers.Protocol, {
  version: null,
  srsName: 'EPSG:4326',
  featureType: null,
  featureNS: null,
  geometryName: 'the_geom',
  schema: null,
  featurePrefix: 'feature',
  formatOptions: null,
  readFormat: null,
  readOptions: null,
  initialize: function (a) {
    OpenLayers.Protocol.prototype.initialize.apply(this, [
      a
    ]);
    a.format || (this.format = OpenLayers.Format.WFST(OpenLayers.Util.extend({
      version: this.version,
      featureType: this.featureType,
      featureNS: this.featureNS,
      featurePrefix: this.featurePrefix,
      geometryName: this.geometryName,
      srsName: this.srsName,
      schema: this.schema
    }, this.formatOptions)));
    !a.geometryName && 1 < parseFloat(this.format.version) && this.setGeometryName(null)
  },
  destroy: function () {
    this.options && !this.options.format && this.format.destroy();
    this.format = null;
    OpenLayers.Protocol.prototype.destroy.apply(this)
  },
  read: function (a) {
    OpenLayers.Protocol.prototype.read.apply(this, arguments);
    a = OpenLayers.Util.extend({
    }, a);
    OpenLayers.Util.applyDefaults(a, this.options || {
    });
    var b = new OpenLayers.Protocol.Response({
      requestType: 'read'
    }),
    c = OpenLayers.Format.XML.prototype.write.apply(this.format, [
      this.format.writeNode('wfs:GetFeature', a)
    ]);
    b.priv = OpenLayers.Request.POST({
      url: a.url,
      callback: this.createCallback(this.handleRead, b, a),
      params: a.params,
      headers: a.headers,
      data: c
    });
    return b
  },
  setFeatureType: function (a) {
    this.featureType = a;
    this.format.featureType = a
  },
  setGeometryName: function (a) {
    this.geometryName = a;
    this.format.geometryName = a
  },
  handleRead: function (a, b) {
    b = OpenLayers.Util.extend({
    }, b);
    OpenLayers.Util.applyDefaults(b, this.options);
    if (b.callback) {
      var c = a.priv;
      200 <= c.status && 300 > c.status ? (c = this.parseResponse(c, b.readOptions)) && !1 !== c.success ? (b.readOptions && 'object' == b.readOptions.output ? OpenLayers.Util.extend(a, c)  : a.features = c, a.code = OpenLayers.Protocol.Response.SUCCESS)  : (a.code = OpenLayers.Protocol.Response.FAILURE, a.error = c)  : a.code = OpenLayers.Protocol.Response.FAILURE;
      b.callback.call(b.scope, a)
    }
  },
  parseResponse: function (a, b) {
    var c = a.responseXML;
    if (!c || !c.documentElement) c = a.responseText;
    if (!c || 0 >= c.length) return null;
    c = null !== this.readFormat ? this.readFormat.read(c)  :
    this.format.read(c, b);
    if (!this.featureNS) {
      var d = this.readFormat || this.format;
      this.featureNS = d.featureNS;
      d.autoConfig = !1;
      this.geometryName || this.setGeometryName(d.geometryName)
    }
    return c
  },
  commit: function (a, b) {
    b = OpenLayers.Util.extend({
    }, b);
    OpenLayers.Util.applyDefaults(b, this.options);
    var c = new OpenLayers.Protocol.Response({
      requestType: 'commit',
      reqFeatures: a
    });
    c.priv = OpenLayers.Request.POST({
      url: b.url,
      headers: b.headers,
      data: this.format.write(a, b),
      callback: this.createCallback(this.handleCommit, c, b)
    });
    return c
  },
  handleCommit: function (a, b) {
    if (b.callback) {
      var c = a.priv,
      d = c.responseXML;
      if (!d || !d.documentElement) d = c.responseText;
      c = this.format.read(d) || {
      };
      a.insertIds = c.insertIds || [
      ];
      c.success ? a.code = OpenLayers.Protocol.Response.SUCCESS : (a.code = OpenLayers.Protocol.Response.FAILURE, a.error = c);
      b.callback.call(b.scope, a)
    }
  },
  filterDelete: function (a, b) {
    b = OpenLayers.Util.extend({
    }, b);
    OpenLayers.Util.applyDefaults(b, this.options);
    new OpenLayers.Protocol.Response({
      requestType: 'commit'
    });
    var c = this.format.createElementNSPlus('wfs:Transaction', {
      attributes: {
        service: 'WFS',
        version: this.version
      }
    }),
    d = this.format.createElementNSPlus('wfs:Delete', {
      attributes: {
        typeName: (b.featureNS ? this.featurePrefix + ':' : '') + b.featureType
      }
    });
    b.featureNS && d.setAttribute('xmlns:' + this.featurePrefix, b.featureNS);
    var e = this.format.writeNode('ogc:Filter', a);
    d.appendChild(e);
    c.appendChild(d);
    c = OpenLayers.Format.XML.prototype.write.apply(this.format, [
      c
    ]);
    return OpenLayers.Request.POST({
      url: this.url,
      callback: b.callback || function () {
      },
      data: c
    })
  },
  abort: function (a) {
    a && a.priv.abort()
  },
  CLASS_NAME: 'OpenLayers.Protocol.WFS.v1'
});
OpenLayers.Spherical = OpenLayers.Spherical || {
};
OpenLayers.Spherical.DEFAULT_RADIUS = 6378137;
OpenLayers.Spherical.computeDistanceBetween = function (a, b, c) {
  var c = c || OpenLayers.Spherical.DEFAULT_RADIUS,
  d = Math.sin(Math.PI * (b.lon - a.lon) / 360),
  e = Math.sin(Math.PI * (b.lat - a.lat) / 360),
  a = e * e + d * d * Math.cos(Math.PI * a.lat / 180) * Math.cos(Math.PI * b.lat / 180);
  return 2 * c * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
};
OpenLayers.Spherical.computeHeading = function (a, b) {
  var c = Math.sin(Math.PI * (a.lon - b.lon) / 180) * Math.cos(Math.PI * b.lat / 180),
  d = Math.cos(Math.PI * a.lat / 180) * Math.sin(Math.PI * b.lat / 180) - Math.sin(Math.PI * a.lat / 180) * Math.cos(Math.PI * b.lat / 180) * Math.cos(Math.PI * (a.lon - b.lon) / 180);
  return 180 * Math.atan2(c, d) / Math.PI
};
OpenLayers.Control.CacheWrite = OpenLayers.Class(OpenLayers.Control, {
  layers: null,
  imageFormat: 'image/png',
  quotaRegEx: /quota/i,
  setMap: function (a) {
    OpenLayers.Control.prototype.setMap.apply(this, arguments);
    var b,
    c = this.layers || a.layers;
    for (b = c.length - 1; 0 <= b; --b) this.addLayer({
      layer: c[b]
    });
    if (!this.layers) a.events.on({
      addlayer: this.addLayer,
      removeLayer: this.removeLayer,
      scope: this
    })
  },
  addLayer: function (a) {
    a.layer.events.on({
      tileloadstart: this.makeSameOrigin,
      tileloaded: this.cache,
      scope: this
    })
  },
  removeLayer: function (a) {
    a.layer.events.un({
      tileloadstart: this.makeSameOrigin,
      tileloaded: this.cache,
      scope: this
    })
  },
  makeSameOrigin: function (a) {
    if (this.active && (a = a.tile, a instanceof OpenLayers.Tile.Image && !a.crossOriginKeyword && 'data:' !== a.url.substr(0, 5))) {
      var b = OpenLayers.Request.makeSameOrigin(a.url, OpenLayers.ProxyHost);
      OpenLayers.Control.CacheWrite.urlMap[b] = a.url;
      a.url = b
    }
  },
  cache: function (a) {
    if (this.active && window.localStorage && (a = a.tile, a instanceof OpenLayers.Tile.Image && 'data:' !== a.url.substr(0, 5))) try {
      var b = a.getCanvasContext();
      if (b) {
        var c = OpenLayers.Control.CacheWrite.urlMap;
        window.localStorage.setItem('olCache_' + (c[a.url] || a.url), b.canvas.toDataURL(this.imageFormat));
        delete c[a.url]
      }
    } catch (d) {
      (b = d.name || d.message) && this.quotaRegEx.test(b) ? this.events.triggerEvent('cachefull', {
        tile: a
      })  : OpenLayers.Console.error(d.toString())
    }
  },
  destroy: function () {
    if (this.layers || this.map) {
      var a,
      b = this.layers || this.map.layers;
      for (a = b.length - 1; 0 <= a; --a) this.removeLayer({
        layer: b[a]
      })
    }
    this.map && this.map.events.un({
      addlayer: this.addLayer,
      removeLayer: this.removeLayer,
      scope: this
    });
    OpenLayers.Control.prototype.destroy.apply(this, arguments)
  },
  CLASS_NAME: 'OpenLayers.Control.CacheWrite'
});
OpenLayers.Control.CacheWrite.clearCache = function () {
  if (window.localStorage) {
    var a,
    b;
    for (a = window.localStorage.length - 1; 0 <= a; --a) b = window.localStorage.key(a),
    'olCache_' === b.substr(0, 8) && window.localStorage.removeItem(b)
  }
};
OpenLayers.Control.CacheWrite.urlMap = {
};
OpenLayers.Format.Context = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
  layerOptions: null,
  layerParams: null,
  read: function (a, b) {
    var c = OpenLayers.Format.XML.VersionedOGC.prototype.read.apply(this, arguments);
    if (b && b.map) if (this.context = c, b.map instanceof OpenLayers.Map) c = this.mergeContextToMap(c, b.map);
     else {
      var d = b.map;
      if (OpenLayers.Util.isElement(d) || 'string' == typeof d) d = {
        div: d
      };
      c = this.contextToMap(c, d)
    }
    return c
  },
  getLayerFromContext: function (a) {
    var b,
    c,
    d = {
      queryable: a.queryable,
      visibility: a.visibility,
      maxExtent: a.maxExtent,
      metadata: OpenLayers.Util.applyDefaults(a.metadata, {
        styles: a.styles,
        formats: a.formats,
        'abstract': a['abstract'],
        dataURL: a.dataURL
      }),
      numZoomLevels: a.numZoomLevels,
      units: a.units,
      isBaseLayer: a.isBaseLayer,
      opacity: a.opacity,
      displayInLayerSwitcher: a.displayInLayerSwitcher,
      singleTile: a.singleTile,
      tileSize: a.tileSize ? new OpenLayers.Size(a.tileSize.width, a.tileSize.height)  : void 0,
      minScale: a.minScale || a.maxScaleDenominator,
      maxScale: a.maxScale || a.minScaleDenominator,
      srs: a.srs,
      dimensions: a.dimensions,
      metadataURL: a.metadataURL
    };
    this.layerOptions && OpenLayers.Util.applyDefaults(d, this.layerOptions);
    var e = {
      layers: a.name,
      transparent: a.transparent,
      version: a.version
    };
    if (a.formats && 0 < a.formats.length) {
      e.format = a.formats[0].value;
      b = 0;
      for (c = a.formats.length; b < c; b++) {
        var f = a.formats[b];
        if (!0 == f.current) {
          e.format = f.value;
          break
        }
      }
    }
    if (a.styles && 0 < a.styles.length) {
      b = 0;
      for (c = a.styles.length; b < c; b++) if (f = a.styles[b], !0 == f.current) {
        f.href ? e.sld = f.href : f.body ? e.sld_body = f.body : e.styles = f.name;
        break
      }
    }
    this.layerParams && OpenLayers.Util.applyDefaults(e, this.layerParams);
    b = null;
    c = a.service;
    c == OpenLayers.Format.Context.serviceTypes.WFS ? (d.strategies = [
      new OpenLayers.Strategy.BBOX
    ], d.protocol = new OpenLayers.Protocol.WFS({
      url: a.url,
      featurePrefix: a.name.split(':') [0],
      featureType: a.name.split(':').pop()
    }), b = new OpenLayers.Layer.Vector(a.title || a.name, d))  : c == OpenLayers.Format.Context.serviceTypes.KML ? (d.strategies = [
      new OpenLayers.Strategy.Fixed
    ], d.protocol = new OpenLayers.Protocol.HTTP({
      url: a.url,
      format: new OpenLayers.Format.KML
    }), b = new OpenLayers.Layer.Vector(a.title || a.name, d))  : c == OpenLayers.Format.Context.serviceTypes.GML ? (d.strategies = [
      new OpenLayers.Strategy.Fixed
    ], d.protocol = new OpenLayers.Protocol.HTTP({
      url: a.url,
      format: new OpenLayers.Format.GML
    }), b = new OpenLayers.Layer.Vector(a.title || a.name, d))  : a.features ? (b = new OpenLayers.Layer.Vector(a.title || a.name, d), b.addFeatures(a.features))  : !0 !== a.categoryLayer && (b = new OpenLayers.Layer.WMS(a.title || a.name, a.url, e, d));
    return b
  },
  getLayersFromContext: function (a) {
    for (var b = [
    ], c = 0, d = a.length; c < d; c++) {
      var e = this.getLayerFromContext(a[c]);
      null !== e && b.push(e)
    }
    return b
  },
  contextToMap: function (a, b) {
    b = OpenLayers.Util.applyDefaults({
      maxExtent: a.maxExtent,
      projection: a.projection,
      units: a.units
    }, b);
    b.maxExtent && (b.maxResolution = b.maxExtent.getWidth() / OpenLayers.Map.TILE_WIDTH);
    b.metadata = {
      contactInformation: a.contactInformation,
      'abstract': a['abstract'],
      keywords: a.keywords,
      logo: a.logo,
      descriptionURL: a.descriptionURL
    };
    var c = new OpenLayers.Map(b);
    c.addLayers(this.getLayersFromContext(a.layersContext));
    c.setCenter(a.bounds.getCenterLonLat(), c.getZoomForExtent(a.bounds, !0));
    return c
  },
  mergeContextToMap: function (a, b) {
    b.addLayers(this.getLayersFromContext(a.layersContext));
    return b
  },
  write: function (a, b) {
    a = this.toContext(a);
    return OpenLayers.Format.XML.VersionedOGC.prototype.write.apply(this, arguments)
  },
  CLASS_NAME: 'OpenLayers.Format.Context'
});
OpenLayers.Format.Context.serviceTypes = {
  WMS: 'urn:ogc:serviceType:WMS',
  WFS: 'urn:ogc:serviceType:WFS',
  WCS: 'urn:ogc:serviceType:WCS',
  GML: 'urn:ogc:serviceType:GML',
  SLD: 'urn:ogc:serviceType:SLD',
  FES: 'urn:ogc:serviceType:FES',
  KML: 'urn:ogc:serviceType:KML'
};
OpenLayers.Format.WMC = OpenLayers.Class(OpenLayers.Format.Context, {
  defaultVersion: '1.1.0',
  layerToContext: function (a) {
    var b = this.getParser(),
    c = {
      queryable: a.queryable,
      visibility: a.visibility,
      name: a.params.LAYERS,
      title: a.name,
      'abstract': a.metadata['abstract'],
      dataURL: a.metadata.dataURL,
      metadataURL: a.metadataURL,
      server: {
        version: a.params.VERSION,
        url: a.url
      },
      maxExtent: a.maxExtent,
      transparent: a.params.TRANSPARENT,
      numZoomLevels: a.numZoomLevels,
      units: a.units,
      isBaseLayer: a.isBaseLayer,
      opacity: 1 == a.opacity ? void 0 :
      a.opacity,
      displayInLayerSwitcher: a.displayInLayerSwitcher,
      singleTile: a.singleTile,
      tileSize: a.singleTile || !a.tileSize ? void 0 : {
        width: a.tileSize.w,
        height: a.tileSize.h
      },
      minScale: a.options.resolutions || a.options.scales || a.options.maxResolution || a.options.minScale ? a.minScale : void 0,
      maxScale: a.options.resolutions || a.options.scales || a.options.minResolution || a.options.maxScale ? a.maxScale : void 0,
      formats: [
      ],
      styles: [
      ],
      srs: a.srs,
      dimensions: a.dimensions
    };
    a.metadata.servertitle && (c.server.title = a.metadata.servertitle);
    if (a.metadata.formats && 0 < a.metadata.formats.length) for (var d = 0, e = a.metadata.formats.length; d < e; d++) {
      var f = a.metadata.formats[d];
      c.formats.push({
        value: f.value,
        current: f.value == a.params.FORMAT
      })
    } else c.formats.push({
      value: a.params.FORMAT,
      current: !0
    });
    if (a.metadata.styles && 0 < a.metadata.styles.length) {
      d = 0;
      for (e = a.metadata.styles.length; d < e; d++) b = a.metadata.styles[d],
      b.current = b.href == a.params.SLD || b.body == a.params.SLD_BODY || b.name == a.params.STYLES ? !0 : !1,
      c.styles.push(b)
    } else c.styles.push({
      href: a.params.SLD,
      body: a.params.SLD_BODY,
      name: a.params.STYLES || b.defaultStyleName,
      title: b.defaultStyleTitle,
      current: !0
    });
    return c
  },
  toContext: function (a) {
    var b = {
    },
    c = a.layers;
    if ('OpenLayers.Map' == a.CLASS_NAME) {
      var d = a.metadata || {
      };
      b.size = a.getSize();
      b.bounds = a.getExtent();
      b.projection = a.projection;
      b.title = a.title;
      b.keywords = d.keywords;
      b['abstract'] = d['abstract'];
      b.logo = d.logo;
      b.descriptionURL = d.descriptionURL;
      b.contactInformation = d.contactInformation;
      b.maxExtent = a.maxExtent
    } else OpenLayers.Util.applyDefaults(b, a),
    void 0 !=
    b.layers && delete b.layers;
    void 0 == b.layersContext && (b.layersContext = [
    ]);
    if (void 0 != c && OpenLayers.Util.isArray(c)) {
      a = 0;
      for (d = c.length; a < d; a++) {
        var e = c[a];
        e instanceof OpenLayers.Layer.WMS && b.layersContext.push(this.layerToContext(e))
      }
    }
    return b
  },
  CLASS_NAME: 'OpenLayers.Format.WMC'
});
OpenLayers.Format.WMC.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
  namespaces: {
    ol: 'http://openlayers.org/context',
    wmc: 'http://www.opengis.net/context',
    sld: 'http://www.opengis.net/sld',
    xlink: 'http://www.w3.org/1999/xlink',
    xsi: 'http://www.w3.org/2001/XMLSchema-instance'
  },
  schemaLocation: '',
  getNamespacePrefix: function (a) {
    var b = null;
    if (null == a) b = this.namespaces[this.defaultPrefix];
     else for (b in this.namespaces) if (this.namespaces[b] == a) break;
    return b
  },
  defaultPrefix: 'wmc',
  rootPrefix: null,
  defaultStyleName: '',
  defaultStyleTitle: 'Default',
  initialize: function (a) {
    OpenLayers.Format.XML.prototype.initialize.apply(this, [
      a
    ])
  },
  read: function (a) {
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    a = a.documentElement;
    this.rootPrefix = a.prefix;
    var b = {
      version: a.getAttribute('version')
    };
    this.runChildNodes(b, a);
    return b
  },
  runChildNodes: function (a, b) {
    for (var c = b.childNodes, d, e, f, g = 0, h = c.length; g < h; ++g) d = c[g],
    1 == d.nodeType && (e = this.getNamespacePrefix(d.namespaceURI), f = d.nodeName.split(':').pop(), (e = this['read_' + e + '_' + f]) && e.apply(this, [
      a,
      d
    ]))
  },
  read_wmc_General: function (a, b) {
    this.runChildNodes(a, b)
  },
  read_wmc_BoundingBox: function (a, b) {
    a.projection = b.getAttribute('SRS');
    a.bounds = new OpenLayers.Bounds(b.getAttribute('minx'), b.getAttribute('miny'), b.getAttribute('maxx'), b.getAttribute('maxy'))
  },
  read_wmc_LayerList: function (a, b) {
    a.layersContext = [
    ];
    this.runChildNodes(a, b)
  },
  read_wmc_Layer: function (a, b) {
    var c = {
      visibility: '1' != b.getAttribute('hidden'),
      queryable: '1' == b.getAttribute('queryable'),
      formats: [
      ],
      styles: [
      ],
      metadata: {
      }
    };
    this.runChildNodes(c, b);
    a.layersContext.push(c)
  },
  read_wmc_Extension: function (a, b) {
    this.runChildNodes(a, b)
  },
  read_ol_units: function (a, b) {
    a.units = this.getChildValue(b)
  },
  read_ol_maxExtent: function (a, b) {
    var c = new OpenLayers.Bounds(b.getAttribute('minx'), b.getAttribute('miny'), b.getAttribute('maxx'), b.getAttribute('maxy'));
    a.maxExtent = c
  },
  read_ol_transparent: function (a, b) {
    a.transparent = this.getChildValue(b)
  },
  read_ol_numZoomLevels: function (a, b) {
    a.numZoomLevels = parseInt(this.getChildValue(b))
  },
  read_ol_opacity: function (a, b) {
    a.opacity = parseFloat(this.getChildValue(b))
  },
  read_ol_singleTile: function (a, b) {
    a.singleTile = 'true' == this.getChildValue(b)
  },
  read_ol_tileSize: function (a, b) {
    var c = {
      width: b.getAttribute('width'),
      height: b.getAttribute('height')
    };
    a.tileSize = c
  },
  read_ol_isBaseLayer: function (a, b) {
    a.isBaseLayer = 'true' == this.getChildValue(b)
  },
  read_ol_displayInLayerSwitcher: function (a, b) {
    a.displayInLayerSwitcher = 'true' == this.getChildValue(b)
  },
  read_wmc_Server: function (a, b) {
    a.version = b.getAttribute('version');
    a.url = this.getOnlineResource_href(b);
    a.metadata.servertitle = b.getAttribute('title')
  },
  read_wmc_FormatList: function (a, b) {
    this.runChildNodes(a, b)
  },
  read_wmc_Format: function (a, b) {
    var c = {
      value: this.getChildValue(b)
    };
    '1' == b.getAttribute('current') && (c.current = !0);
    a.formats.push(c)
  },
  read_wmc_StyleList: function (a, b) {
    this.runChildNodes(a, b)
  },
  read_wmc_Style: function (a, b) {
    var c = {
    };
    this.runChildNodes(c, b);
    '1' == b.getAttribute('current') && (c.current = !0);
    a.styles.push(c)
  },
  read_wmc_SLD: function (a, b) {
    this.runChildNodes(a, b)
  },
  read_sld_StyledLayerDescriptor: function (a, b) {
    var c = OpenLayers.Format.XML.prototype.write.apply(this, [
      b
    ]);
    a.body = c
  },
  read_sld_FeatureTypeStyle: function (a, b) {
    var c = OpenLayers.Format.XML.prototype.write.apply(this, [
      b
    ]);
    a.body = c
  },
  read_wmc_OnlineResource: function (a, b) {
    a.href = this.getAttributeNS(b, this.namespaces.xlink, 'href')
  },
  read_wmc_Name: function (a, b) {
    var c = this.getChildValue(b);
    c && (a.name = c)
  },
  read_wmc_Title: function (a, b) {
    var c = this.getChildValue(b);
    c && (a.title = c)
  },
  read_wmc_MetadataURL: function (a, b) {
    a.metadataURL = this.getOnlineResource_href(b)
  },
  read_wmc_KeywordList: function (a, b) {
    a.keywords = [
    ];
    this.runChildNodes(a.keywords, b)
  },
  read_wmc_Keyword: function (a, b) {
    a.push(this.getChildValue(b))
  },
  read_wmc_Abstract: function (a, b) {
    var c = this.getChildValue(b);
    c && (a['abstract'] = c)
  },
  read_wmc_LogoURL: function (a, b) {
    a.logo = {
      width: b.getAttribute('width'),
      height: b.getAttribute('height'),
      format: b.getAttribute('format'),
      href: this.getOnlineResource_href(b)
    }
  },
  read_wmc_DescriptionURL: function (a, b) {
    a.descriptionURL = this.getOnlineResource_href(b)
  },
  read_wmc_ContactInformation: function (a, b) {
    var c = {
    };
    this.runChildNodes(c, b);
    a.contactInformation = c
  },
  read_wmc_ContactPersonPrimary: function (a, b) {
    var c = {
    };
    this.runChildNodes(c, b);
    a.personPrimary = c
  },
  read_wmc_ContactPerson: function (a, b) {
    var c = this.getChildValue(b);
    c && (a.person = c)
  },
  read_wmc_ContactOrganization: function (a, b) {
    var c = this.getChildValue(b);
    c && (a.organization = c)
  },
  read_wmc_ContactPosition: function (a, b) {
    var c = this.getChildValue(b);
    c && (a.position = c)
  },
  read_wmc_ContactAddress: function (a, b) {
    var c = {
    };
    this.runChildNodes(c, b);
    a.contactAddress = c
  },
  read_wmc_AddressType: function (a, b) {
    var c = this.getChildValue(b);
    c && (a.type = c)
  },
  read_wmc_Address: function (a, b) {
    var c = this.getChildValue(b);
    c && (a.address = c)
  },
  read_wmc_City: function (a, b) {
    var c = this.getChildValue(b);
    c && (a.city = c)
  },
  read_wmc_StateOrProvince: function (a, b) {
    var c = this.getChildValue(b);
    c && (a.stateOrProvince = c)
  },
  read_wmc_PostCode: function (a, b) {
    var c = this.getChildValue(b);
    c && (a.postcode = c)
  },
  read_wmc_Country: function (a, b) {
    var c = this.getChildValue(b);
    c && (a.country = c)
  },
  read_wmc_ContactVoiceTelephone: function (a, b) {
    var c = this.getChildValue(b);
    c && (a.phone = c)
  },
  read_wmc_ContactFacsimileTelephone: function (a, b) {
    var c = this.getChildValue(b);
    c && (a.fax = c)
  },
  read_wmc_ContactElectronicMailAddress: function (a, b) {
    var c = this.getChildValue(b);
    c && (a.email = c)
  },
  read_wmc_DataURL: function (a, b) {
    a.dataURL = this.getOnlineResource_href(b)
  },
  read_wmc_LegendURL: function (a, b) {
    var c = {
      width: b.getAttribute('width'),
      height: b.getAttribute('height'),
      format: b.getAttribute('format'),
      href: this.getOnlineResource_href(b)
    };
    a.legend = c
  },
  read_wmc_DimensionList: function (a, b) {
    a.dimensions = {
    };
    this.runChildNodes(a.dimensions, b)
  },
  read_wmc_Dimension: function (a, b) {
    var c = {
      name: b.getAttribute('name').toLowerCase(),
      units: b.getAttribute('units') || '',
      unitSymbol: b.getAttribute('unitSymbol') || '',
      userValue: b.getAttribute('userValue') || '',
      nearestValue: '1' === b.getAttribute('nearestValue'),
      multipleValues: '1' === b.getAttribute('multipleValues'),
      current: '1' === b.getAttribute('current'),
      'default': b.getAttribute('default') || ''
    },
    d = this.getChildValue(b);
    c.values = d.split(',');
    a[c.name] = c
  },
  write: function (a, b) {
    var c = this.createElementDefaultNS('ViewContext');
    this.setAttributes(c, {
      version: this.VERSION,
      id: b && 'string' == typeof b.id ? b.id : OpenLayers.Util.createUniqueID('OpenLayers_Context_')
    });
    this.setAttributeNS(c, this.namespaces.xsi, 'xsi:schemaLocation', this.schemaLocation);
    c.appendChild(this.write_wmc_General(a));
    c.appendChild(this.write_wmc_LayerList(a));
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      c
    ])
  },
  createElementDefaultNS: function (a, b, c) {
    a = this.createElementNS(this.namespaces[this.defaultPrefix], a);
    b && a.appendChild(this.createTextNode(b));
    c && this.setAttributes(a, c);
    return a
  },
  setAttributes: function (a, b) {
    var c,
    d;
    for (d in b) c = b[d].toString(),
    c.match(/[A-Z]/) ? this.setAttributeNS(a, null, d, c)  : a.setAttribute(d, c)
  },
  write_wmc_General: function (a) {
    var b = this.createElementDefaultNS('General');
    a.size && b.appendChild(this.createElementDefaultNS('Window', null, {
      width: a.size.w,
      height: a.size.h
    }));
    var c = a.bounds;
    b.appendChild(this.createElementDefaultNS('BoundingBox', null, {
      minx: c.left.toPrecision(18),
      miny: c.bottom.toPrecision(18),
      maxx: c.right.toPrecision(18),
      maxy: c.top.toPrecision(18),
      SRS: a.projection
    }));
    b.appendChild(this.createElementDefaultNS('Title', a.title));
    a.keywords && b.appendChild(this.write_wmc_KeywordList(a.keywords));
    a['abstract'] && b.appendChild(this.createElementDefaultNS('Abstract', a['abstract']));
    a.logo && b.appendChild(this.write_wmc_URLType('LogoURL', a.logo.href, a.logo));
    a.descriptionURL && b.appendChild(this.write_wmc_URLType('DescriptionURL', a.descriptionURL));
    a.contactInformation && b.appendChild(this.write_wmc_ContactInformation(a.contactInformation));
    b.appendChild(this.write_ol_MapExtension(a));
    return b
  },
  write_wmc_KeywordList: function (a) {
    for (var b = this.createElementDefaultNS('KeywordList'), c = 0, d = a.length; c < d; c++) b.appendChild(this.createElementDefaultNS('Keyword', a[c]));
    return b
  },
  write_wmc_ContactInformation: function (a) {
    var b = this.createElementDefaultNS('ContactInformation');
    a.personPrimary && b.appendChild(this.write_wmc_ContactPersonPrimary(a.personPrimary));
    a.position && b.appendChild(this.createElementDefaultNS('ContactPosition', a.position));
    a.contactAddress && b.appendChild(this.write_wmc_ContactAddress(a.contactAddress));
    a.phone && b.appendChild(this.createElementDefaultNS('ContactVoiceTelephone', a.phone));
    a.fax && b.appendChild(this.createElementDefaultNS('ContactFacsimileTelephone', a.fax));
    a.email && b.appendChild(this.createElementDefaultNS('ContactElectronicMailAddress', a.email));
    return b
  },
  write_wmc_ContactPersonPrimary: function (a) {
    var b = this.createElementDefaultNS('ContactPersonPrimary');
    a.person && b.appendChild(this.createElementDefaultNS('ContactPerson', a.person));
    a.organization && b.appendChild(this.createElementDefaultNS('ContactOrganization', a.organization));
    return b
  },
  write_wmc_ContactAddress: function (a) {
    var b = this.createElementDefaultNS('ContactAddress');
    a.type && b.appendChild(this.createElementDefaultNS('AddressType', a.type));
    a.address && b.appendChild(this.createElementDefaultNS('Address', a.address));
    a.city && b.appendChild(this.createElementDefaultNS('City', a.city));
    a.stateOrProvince && b.appendChild(this.createElementDefaultNS('StateOrProvince', a.stateOrProvince));
    a.postcode && b.appendChild(this.createElementDefaultNS('PostCode', a.postcode));
    a.country && b.appendChild(this.createElementDefaultNS('Country', a.country));
    return b
  },
  write_ol_MapExtension: function (a) {
    var b = this.createElementDefaultNS('Extension');
    if (a = a.maxExtent) {
      var c = this.createElementNS(this.namespaces.ol, 'ol:maxExtent');
      this.setAttributes(c, {
        minx: a.left.toPrecision(18),
        miny: a.bottom.toPrecision(18),
        maxx: a.right.toPrecision(18),
        maxy: a.top.toPrecision(18)
      });
      b.appendChild(c)
    }
    return b
  },
  write_wmc_LayerList: function (a) {
    for (var b = this.createElementDefaultNS('LayerList'), c = 0, d = a.layersContext.length; c < d; ++c) b.appendChild(this.write_wmc_Layer(a.layersContext[c]));
    return b
  },
  write_wmc_Layer: function (a) {
    var b = this.createElementDefaultNS('Layer', null, {
      queryable: a.queryable ? '1' : '0',
      hidden: a.visibility ? '0' : '1'
    });
    b.appendChild(this.write_wmc_Server(a));
    b.appendChild(this.createElementDefaultNS('Name', a.name));
    b.appendChild(this.createElementDefaultNS('Title', a.title));
    a['abstract'] && b.appendChild(this.createElementDefaultNS('Abstract', a['abstract']));
    a.dataURL && b.appendChild(this.write_wmc_URLType('DataURL', a.dataURL));
    a.metadataURL && b.appendChild(this.write_wmc_URLType('MetadataURL', a.metadataURL));
    return b
  },
  write_wmc_LayerExtension: function (a) {
    var b = this.createElementDefaultNS('Extension'),
    c = a.maxExtent,
    d = this.createElementNS(this.namespaces.ol, 'ol:maxExtent');
    this.setAttributes(d, {
      minx: c.left.toPrecision(18),
      miny: c.bottom.toPrecision(18),
      maxx: c.right.toPrecision(18),
      maxy: c.top.toPrecision(18)
    });
    b.appendChild(d);
    a.tileSize && !a.singleTile && (c = this.createElementNS(this.namespaces.ol, 'ol:tileSize'), this.setAttributes(c, a.tileSize), b.appendChild(c));
    for (var c = 'transparent numZoomLevels units isBaseLayer opacity displayInLayerSwitcher singleTile'.split(' '), e = 0, f = c.length; e < f; ++e) (d = this.createOLPropertyNode(a, c[e])) && b.appendChild(d);
    return b
  },
  createOLPropertyNode: function (a, b) {
    var c = null;
    null != a[b] && (c = this.createElementNS(this.namespaces.ol, 'ol:' + b), c.appendChild(this.createTextNode(a[b].toString())));
    return c
  },
  write_wmc_Server: function (a) {
    var a = a.server,
    b = this.createElementDefaultNS('Server'),
    c = {
      service: 'OGC:WMS',
      version: a.version
    };
    a.title && (c.title = a.title);
    this.setAttributes(b, c);
    b.appendChild(this.write_wmc_OnlineResource(a.url));
    return b
  },
  write_wmc_URLType: function (a, b, c) {
    a = this.createElementDefaultNS(a);
    a.appendChild(this.write_wmc_OnlineResource(b));
    if (c) for (var b = [
      'width',
      'height',
      'format'
    ], d = 0; d < b.length; d++) b[d] in c && a.setAttribute(b[d], c[b[d]]);
    return a
  },
  write_wmc_DimensionList: function (a) {
    var b = this.createElementDefaultNS('DimensionList'),
    c;
    for (c in a.dimensions) {
      var d = {
      },
      e = a.dimensions[c],
      f;
      for (f in e) d[f] = 'boolean' == typeof e[f] ? Number(e[f])  : e[f];
      e = '';
      d.values && (e = d.values.join(','), delete d.values);
      b.appendChild(this.createElementDefaultNS('Dimension', e, d))
    }
    return b
  },
  write_wmc_FormatList: function (a) {
    for (var b = this.createElementDefaultNS('FormatList'), c = 0, d = a.formats.length; c < d; c++) {
      var e = a.formats[c];
      b.appendChild(this.createElementDefaultNS('Format', e.value, e.current && !0 == e.current ? {
        current: '1'
      }
       :
      null))
    }
    return b
  },
  write_wmc_StyleList: function (a) {
    var b = this.createElementDefaultNS('StyleList');
    if ((a = a.styles) && OpenLayers.Util.isArray(a)) for (var c, d = 0, e = a.length; d < e; d++) {
      var f = a[d],
      g = this.createElementDefaultNS('Style', null, f.current && !0 == f.current ? {
        current: '1'
      }
       : null);
      f.href ? (c = this.createElementDefaultNS('SLD'), f.name && c.appendChild(this.createElementDefaultNS('Name', f.name)), f.title && c.appendChild(this.createElementDefaultNS('Title', f.title)), f.legend && c.appendChild(this.write_wmc_URLType('LegendURL', f.legend.href, f.legend)), f = this.write_wmc_OnlineResource(f.href), c.appendChild(f), g.appendChild(c))  : f.body ? (c = this.createElementDefaultNS('SLD'), f.name && c.appendChild(this.createElementDefaultNS('Name', f.name)), f.title && c.appendChild(this.createElementDefaultNS('Title', f.title)), f.legend && c.appendChild(this.write_wmc_URLType('LegendURL', f.legend.href, f.legend)), f = OpenLayers.Format.XML.prototype.read.apply(this, [
        f.body
      ]).documentElement, c.ownerDocument && c.ownerDocument.importNode && (f = c.ownerDocument.importNode(f, !0)), c.appendChild(f), g.appendChild(c))  : (g.appendChild(this.createElementDefaultNS('Name', f.name)), g.appendChild(this.createElementDefaultNS('Title', f.title)), f['abstract'] && g.appendChild(this.createElementDefaultNS('Abstract', f['abstract'])), f.legend && g.appendChild(this.write_wmc_URLType('LegendURL', f.legend.href, f.legend)));
      b.appendChild(g)
    }
    return b
  },
  write_wmc_OnlineResource: function (a) {
    var b = this.createElementDefaultNS('OnlineResource');
    this.setAttributeNS(b, this.namespaces.xlink, 'xlink:type', 'simple');
    this.setAttributeNS(b, this.namespaces.xlink, 'xlink:href', a);
    return b
  },
  getOnlineResource_href: function (a) {
    var b = {
    },
    a = a.getElementsByTagName('OnlineResource');
    0 < a.length && this.read_wmc_OnlineResource(b, a[0]);
    return b.href
  },
  CLASS_NAME: 'OpenLayers.Format.WMC.v1'
});
OpenLayers.Control.PanPanel = OpenLayers.Class(OpenLayers.Control.Panel, {
  slideFactor: 50,
  slideRatio: null,
  initialize: function (a) {
    OpenLayers.Control.Panel.prototype.initialize.apply(this, [
      a
    ]);
    a = {
      slideFactor: this.slideFactor,
      slideRatio: this.slideRatio
    };
    this.addControls([new OpenLayers.Control.Pan(OpenLayers.Control.Pan.NORTH, a),
    new OpenLayers.Control.Pan(OpenLayers.Control.Pan.SOUTH, a),
    new OpenLayers.Control.Pan(OpenLayers.Control.Pan.EAST, a),
    new OpenLayers.Control.Pan(OpenLayers.Control.Pan.WEST, a)])
  },
  CLASS_NAME: 'OpenLayers.Control.PanPanel'
});
OpenLayers.Kinetic = OpenLayers.Class({
  threshold: 0,
  deceleration: 0.0035,
  nbPoints: 100,
  delay: 200,
  points: void 0,
  timerId: void 0,
  initialize: function (a) {
    OpenLayers.Util.extend(this, a)
  },
  begin: function () {
    OpenLayers.Animation.stop(this.timerId);
    this.timerId = void 0;
    this.points = [
    ]
  },
  update: function (a) {
    this.points.unshift({
      xy: a,
      tick: (new Date).getTime()
    });
    this.points.length > this.nbPoints && this.points.pop()
  },
  end: function (a) {
    for (var b, c = (new Date).getTime(), d = 0, e = this.points.length, f; d < e; d++) {
      f = this.points[d];
      if (c -
      f.tick > this.delay) break;
      b = f
    }
    if (b && (d = (new Date).getTime() - b.tick, c = Math.sqrt(Math.pow(a.x - b.xy.x, 2) + Math.pow(a.y - b.xy.y, 2)), d = c / d, !(0 == d || d < this.threshold))) return c = Math.asin((a.y - b.xy.y) / c),
    b.xy.x <= a.x && (c = Math.PI - c),
    {
      speed: d,
      theta: c
    }
  },
  move: function (a, b) {
    var c = a.speed,
    d = Math.cos(a.theta),
    e = - Math.sin(a.theta),
    f = (new Date).getTime(),
    g = 0,
    h = 0;
    this.timerId = OpenLayers.Animation.start(OpenLayers.Function.bind(function () {
      if (null != this.timerId) {
        var a = (new Date).getTime() - f,
        j = - this.deceleration * Math.pow(a, 2) / 2 + c * a,
        k = j * d,
        j = j * e,
        l,
        m;
        l = !1;
        0 >= - this.deceleration * a + c && (OpenLayers.Animation.stop(this.timerId), this.timerId = null, l = !0);
        a = k - g;
        m = j - h;
        g = k;
        h = j;
        b(a, m, l)
      }
    }, this))
  },
  CLASS_NAME: 'OpenLayers.Kinetic'
});
OpenLayers.Layer.GeoRSS = OpenLayers.Class(OpenLayers.Layer.Markers, {
  location: null,
  features: null,
  formatOptions: null,
  selectedFeature: null,
  icon: null,
  popupSize: null,
  useFeedTitle: !0,
  initialize: function (a, b, c) {
    OpenLayers.Layer.Markers.prototype.initialize.apply(this, [
      a,
      c
    ]);
    this.location = b;
    this.features = [
    ]
  },
  destroy: function () {
    OpenLayers.Layer.Markers.prototype.destroy.apply(this, arguments);
    this.clearFeatures();
    this.features = null
  },
  loadRSS: function () {
    this.loaded || (this.events.triggerEvent('loadstart'), OpenLayers.Request.GET({
      url: this.location,
      success: this.parseData,
      scope: this
    }), this.loaded = !0)
  },
  moveTo: function (a, b, c) {
    OpenLayers.Layer.Markers.prototype.moveTo.apply(this, arguments);
    this.visibility && !this.loaded && this.loadRSS()
  },
  parseData: function (a) {
    var b = a.responseXML;
    if (!b || !b.documentElement) b = OpenLayers.Format.XML.prototype.read(a.responseText);
    if (this.useFeedTitle) {
      a = null;
      try {
        a = b.getElementsByTagNameNS('*', 'title') [0].firstChild.nodeValue
      } catch (c) {
        a = b.getElementsByTagName('title') [0].firstChild.nodeValue
      }
      a && this.setName(a)
    }
    a = {
    };
    OpenLayers.Util.extend(a, this.formatOptions);
    this.map && !this.projection.equals(this.map.getProjectionObject()) && (a.externalProjection = this.projection, a.internalProjection = this.map.getProjectionObject());
    for (var b = (new OpenLayers.Format.GeoRSS(a)).read(b), a = 0, d = b.length; a < d; a++) {
      var e = {
      },
      f = b[a];
      if (f.geometry) {
        var g = f.attributes.title ? f.attributes.title : 'Untitled',
        h = f.attributes.description ? f.attributes.description : 'No description.',
        i = f.attributes.link ? f.attributes.link : '',
        f = f.geometry.getBounds().getCenterLonLat();
        e.icon = null == this.icon ? OpenLayers.Marker.defaultIcon()  : this.icon.clone();
        e.popupSize = this.popupSize ? this.popupSize.clone()  : new OpenLayers.Size(250, 120);
        if (g || h) {
          e.title = g;
          e.description = h;
          var j = '<div class="olLayerGeoRSSClose">[x]</div>',
          j = j + '<div class="olLayerGeoRSSTitle">';
          i && (j += '<a class="link" href="' + i + '" target="_blank">');
          j += g;
          i && (j += '</a>');
          j += '</div>';
          j += '<div style="" class="olLayerGeoRSSDescription">';
          j += h;
          j += '</div>';
          e.popupContentHTML = j
        }
        f = new OpenLayers.Feature(this, f, e);
        this.features.push(f);
        e = f.createMarker();
        e.events.register('click', f, this.markerClick);
        this.addMarker(e)
      }
    }
    this.events.triggerEvent('loadend')
  },
  markerClick: function (a) {
    var b = this == this.layer.selectedFeature;
    this.layer.selectedFeature = !b ? this : null;
    for (var c = 0, d = this.layer.map.popups.length; c < d; c++) this.layer.map.removePopup(this.layer.map.popups[c]);
    b || (b = this.createPopup(), OpenLayers.Event.observe(b.div, 'click', OpenLayers.Function.bind(function () {
      for (var a = 0, b = this.layer.map.popups.length; a < b; a++) this.layer.map.removePopup(this.layer.map.popups[a])
    }, this)), this.layer.map.addPopup(b));
    OpenLayers.Event.stop(a)
  },
  clearFeatures: function () {
    if (null != this.features) for (; 0 < this.features.length; ) {
      var a = this.features[0];
      OpenLayers.Util.removeItem(this.features, a);
      a.destroy()
    }
  },
  CLASS_NAME: 'OpenLayers.Layer.GeoRSS'
});
OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
  namespaces: {
    sld: 'http://www.opengis.net/sld',
    ogc: 'http://www.opengis.net/ogc',
    gml: 'http://www.opengis.net/gml',
    xlink: 'http://www.w3.org/1999/xlink',
    xsi: 'http://www.w3.org/2001/XMLSchema-instance'
  },
  defaultPrefix: 'sld',
  schemaLocation: null,
  multipleSymbolizers: !1,
  featureTypeCounter: null,
  defaultSymbolizer: {
    fillColor: '#808080',
    fillOpacity: 1,
    strokeColor: '#000000',
    strokeOpacity: 1,
    strokeWidth: 1,
    strokeDashstyle: 'solid',
    pointRadius: 3,
    graphicName: 'square'
  },
  read: function (a, b) {
    var b = OpenLayers.Util.applyDefaults(b, this.options),
    c = {
      namedLayers: !0 === b.namedLayersAsArray ? [
      ] : {
      }
    };
    this.readChildNodes(a, c);
    return c
  },
  readers: OpenLayers.Util.applyDefaults({
    sld: {
      StyledLayerDescriptor: function (a, b) {
        b.version = a.getAttribute('version');
        this.readChildNodes(a, b)
      },
      Name: function (a, b) {
        b.name = this.getChildValue(a)
      },
      Title: function (a, b) {
        b.title = this.getChildValue(a)
      },
      Abstract: function (a, b) {
        b.description = this.getChildValue(a)
      },
      NamedLayer: function (a, b) {
        var c = {
          userStyles: [
          ],
          namedStyles: [
          ]
        };
        this.readChildNodes(a, c);
        for (var d = 0, e = c.userStyles.length; d < e; ++d) c.userStyles[d].layerName = c.name;
        OpenLayers.Util.isArray(b.namedLayers) ? b.namedLayers.push(c)  : b.namedLayers[c.name] = c
      },
      NamedStyle: function (a, b) {
        b.namedStyles.push(this.getChildName(a.firstChild))
      },
      UserStyle: function (a, b) {
        var c = {
          defaultsPerSymbolizer: !0,
          rules: [
          ]
        };
        this.featureTypeCounter = - 1;
        this.readChildNodes(a, c);
        this.multipleSymbolizers ? (delete c.defaultsPerSymbolizer, c = new OpenLayers.Style2(c))  : c = new OpenLayers.Style(this.defaultSymbolizer, c);
        b.userStyles.push(c)
      },
      IsDefault: function (a, b) {
        '1' == this.getChildValue(a) && (b.isDefault = !0)
      },
      FeatureTypeStyle: function (a, b) {
        ++this.featureTypeCounter;
        var c = {
          rules: this.multipleSymbolizers ? b.rules : [
          ]
        };
        this.readChildNodes(a, c);
        this.multipleSymbolizers || (b.rules = c.rules)
      },
      Rule: function (a, b) {
        var c;
        this.multipleSymbolizers && (c = {
          symbolizers: [
          ]
        });
        c = new OpenLayers.Rule(c);
        this.readChildNodes(a, c);
        b.rules.push(c)
      },
      ElseFilter: function (a, b) {
        b.elseFilter = !0
      },
      MinScaleDenominator: function (a, b) {
        b.minScaleDenominator = parseFloat(this.getChildValue(a))
      },
      MaxScaleDenominator: function (a, b) {
        b.maxScaleDenominator = parseFloat(this.getChildValue(a))
      },
      TextSymbolizer: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        this.multipleSymbolizers ? (c.zIndex = this.featureTypeCounter, b.symbolizers.push(new OpenLayers.Symbolizer.Text(c)))  : b.symbolizer.Text = OpenLayers.Util.applyDefaults(c, b.symbolizer.Text)
      },
      LabelPlacement: function (a, b) {
        this.readChildNodes(a, b)
      },
      PointPlacement: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        c.labelRotation = c.rotation;
        delete c.rotation;
        var d,
        e = b.labelAnchorPointX,
        f = b.labelAnchorPointY;
        e <= 1 / 3 ? d = 'l' : e > 1 / 3 && e < 2 / 3 ? d = 'c' : e >= 2 / 3 && (d = 'r');
        f <= 1 / 3 ? d += 'b' : f > 1 / 3 && f < 2 / 3 ? d += 'm' : f >= 2 / 3 && (d += 't');
        c.labelAlign = d;
        OpenLayers.Util.applyDefaults(b, c)
      },
      AnchorPoint: function (a, b) {
        this.readChildNodes(a, b)
      },
      AnchorPointX: function (a, b) {
        var c = this.readers.ogc._expression.call(this, a);
        c && (b.labelAnchorPointX = c)
      },
      AnchorPointY: function (a, b) {
        var c = this.readers.ogc._expression.call(this, a);
        c && (b.labelAnchorPointY = c)
      },
      Displacement: function (a, b) {
        this.readChildNodes(a, b)
      },
      DisplacementX: function (a, b) {
        var c = this.readers.ogc._expression.call(this, a);
        c && (b.labelXOffset = c)
      },
      DisplacementY: function (a, b) {
        var c = this.readers.ogc._expression.call(this, a);
        c && (b.labelYOffset = c)
      },
      LinePlacement: function (a, b) {
        this.readChildNodes(a, b)
      },
      PerpendicularOffset: function (a, b) {
        var c = this.readers.ogc._expression.call(this, a);
        c && (b.labelPerpendicularOffset = c)
      },
      Label: function (a, b) {
        var c = this.readers.ogc._expression.call(this, a);
        c && (b.label = c)
      },
      Font: function (a, b) {
        this.readChildNodes(a, b)
      },
      Halo: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        b.haloRadius = c.haloRadius;
        b.haloColor = c.fillColor;
        b.haloOpacity = c.fillOpacity
      },
      Radius: function (a, b) {
        var c = this.readers.ogc._expression.call(this, a);
        null != c && (b.haloRadius = c)
      },
      RasterSymbolizer: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        this.multipleSymbolizers ? (c.zIndex = this.featureTypeCounter, b.symbolizers.push(new OpenLayers.Symbolizer.Raster(c)))  : b.symbolizer.Raster = OpenLayers.Util.applyDefaults(c, b.symbolizer.Raster)
      },
      Geometry: function (a, b) {
        b.geometry = {
        };
        this.readChildNodes(a, b.geometry)
      },
      ColorMap: function (a, b) {
        b.colorMap = [
        ];
        this.readChildNodes(a, b.colorMap)
      },
      ColorMapEntry: function (a, b) {
        var c = a.getAttribute('quantity'),
        d = a.getAttribute('opacity');
        b.push({
          color: a.getAttribute('color'),
          quantity: null !== c ? parseFloat(c)  : void 0,
          label: a.getAttribute('label') || void 0,
          opacity: null !== d ? parseFloat(d)  : void 0
        })
      },
      LineSymbolizer: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        this.multipleSymbolizers ? (c.zIndex = this.featureTypeCounter, b.symbolizers.push(new OpenLayers.Symbolizer.Line(c)))  :
        b.symbolizer.Line = OpenLayers.Util.applyDefaults(c, b.symbolizer.Line)
      },
      PolygonSymbolizer: function (a, b) {
        var c = {
          fill: !1,
          stroke: !1
        };
        this.multipleSymbolizers || (c = b.symbolizer.Polygon || c);
        this.readChildNodes(a, c);
        this.multipleSymbolizers ? (c.zIndex = this.featureTypeCounter, b.symbolizers.push(new OpenLayers.Symbolizer.Polygon(c)))  : b.symbolizer.Polygon = c
      },
      PointSymbolizer: function (a, b) {
        var c = {
          fill: !1,
          stroke: !1,
          graphic: !1
        };
        this.multipleSymbolizers || (c = b.symbolizer.Point || c);
        this.readChildNodes(a, c);
        this.multipleSymbolizers ? (c.zIndex = this.featureTypeCounter, b.symbolizers.push(new OpenLayers.Symbolizer.Point(c)))  : b.symbolizer.Point = c
      },
      Stroke: function (a, b) {
        b.stroke = !0;
        this.readChildNodes(a, b)
      },
      Fill: function (a, b) {
        b.fill = !0;
        this.readChildNodes(a, b)
      },
      CssParameter: function (a, b) {
        var c = a.getAttribute('name'),
        d = this.cssMap[c];
        b.label && ('fill' === c ? d = 'fontColor' : 'fill-opacity' === c && (d = 'fontOpacity'));
        d && (c = this.readers.ogc._expression.call(this, a)) && (b[d] = c)
      },
      Graphic: function (a, b) {
        b.graphic = !0;
        var c = {
        };
        this.readChildNodes(a, c);
        for (var d = 'stroke strokeColor strokeWidth strokeOpacity strokeLinecap fill fillColor fillOpacity graphicName rotation graphicFormat'.split(' '), e, f, g = 0, h = d.length; g < h; ++g) e = d[g],
        f = c[e],
        void 0 != f && (b[e] = f);
        void 0 != c.opacity && (b.graphicOpacity = c.opacity);
        void 0 != c.size && (isNaN(c.size / 2) ? b.graphicWidth = c.size : b.pointRadius = c.size / 2);
        void 0 != c.href && (b.externalGraphic = c.href);
        void 0 != c.rotation && (b.rotation = c.rotation)
      },
      ExternalGraphic: function (a, b) {
        this.readChildNodes(a, b)
      },
      Mark: function (a, b) {
        this.readChildNodes(a, b)
      },
      WellKnownName: function (a, b) {
        b.graphicName = this.getChildValue(a)
      },
      Opacity: function (a, b) {
        var c = this.readers.ogc._expression.call(this, a);
        c && (b.opacity = c)
      },
      Size: function (a, b) {
        var c = this.readers.ogc._expression.call(this, a);
        c && (b.size = c)
      },
      Rotation: function (a, b) {
        var c = this.readers.ogc._expression.call(this, a);
        c && (b.rotation = c)
      },
      OnlineResource: function (a, b) {
        b.href = this.getAttributeNS(a, this.namespaces.xlink, 'href')
      },
      Format: function (a, b) {
        b.graphicFormat = this.getChildValue(a)
      }
    }
  }, OpenLayers.Format.Filter.v1_0_0.prototype.readers),
  cssMap: {
    stroke: 'strokeColor',
    'stroke-opacity': 'strokeOpacity',
    'stroke-width': 'strokeWidth',
    'stroke-linecap': 'strokeLinecap',
    'stroke-dasharray': 'strokeDashstyle',
    fill: 'fillColor',
    'fill-opacity': 'fillOpacity',
    'font-family': 'fontFamily',
    'font-size': 'fontSize',
    'font-weight': 'fontWeight',
    'font-style': 'fontStyle'
  },
  getCssProperty: function (a) {
    var b = null,
    c;
    for (c in this.cssMap) if (this.cssMap[c] == a) {
      b = c;
      break
    }
    return b
  },
  getGraphicFormat: function (a) {
    var b,
    c;
    for (c in this.graphicFormats) if (this.graphicFormats[c].test(a)) {
      b = c;
      break
    }
    return b || this.defaultGraphicFormat
  },
  defaultGraphicFormat: 'image/png',
  graphicFormats: {
    'image/jpeg': /\.jpe?g$/i,
    'image/gif': /\.gif$/i,
    'image/png': /\.png$/i
  },
  write: function (a) {
    return this.writers.sld.StyledLayerDescriptor.apply(this, [
      a
    ])
  },
  writers: OpenLayers.Util.applyDefaults({
    sld: {
      _OGCExpression: function (a, b) {
        var c = this.createElementNSPlus(a),
        d = 'string' == typeof b ? b.split('${')  : [
          b
        ];
        c.appendChild(this.createTextNode(d[0]));
        for (var e, f, g = 1, h = d.length; g < h; g++) e = d[g],
        f = e.indexOf('}'),
        0 < f ? (this.writeNode('ogc:PropertyName', {
          property: e.substring(0, f)
        }, c), c.appendChild(this.createTextNode(e.substring(++f))))  : c.appendChild(this.createTextNode('${' + e));
        return c
      },
      StyledLayerDescriptor: function (a) {
        var b = this.createElementNSPlus('sld:StyledLayerDescriptor', {
          attributes: {
            version: this.VERSION,
            'xsi:schemaLocation': this.schemaLocation
          }
        });
        b.setAttribute('xmlns:ogc', this.namespaces.ogc);
        b.setAttribute('xmlns:gml', this.namespaces.gml);
        a.name && this.writeNode('Name', a.name, b);
        a.title && this.writeNode('Title', a.title, b);
        a.description && this.writeNode('Abstract', a.description, b);
        if (OpenLayers.Util.isArray(a.namedLayers)) for (var c = 0, d = a.namedLayers.length; c < d; ++c) this.writeNode('NamedLayer', a.namedLayers[c], b);
         else for (c in a.namedLayers) this.writeNode('NamedLayer', a.namedLayers[c], b);
        return b
      },
      Name: function (a) {
        return this.createElementNSPlus('sld:Name', {
          value: a
        })
      },
      Title: function (a) {
        return this.createElementNSPlus('sld:Title', {
          value: a
        })
      },
      Abstract: function (a) {
        return this.createElementNSPlus('sld:Abstract', {
          value: a
        })
      },
      NamedLayer: function (a) {
        var b = this.createElementNSPlus('sld:NamedLayer');
        this.writeNode('Name', a.name, b);
        if (a.namedStyles) for (var c = 0, d = a.namedStyles.length; c < d; ++c) this.writeNode('NamedStyle', a.namedStyles[c], b);
        if (a.userStyles) {
          c = 0;
          for (d = a.userStyles.length; c < d; ++c) this.writeNode('UserStyle', a.userStyles[c], b)
        }
        return b
      },
      NamedStyle: function (a) {
        var b = this.createElementNSPlus('sld:NamedStyle');
        this.writeNode('Name', a, b);
        return b
      },
      UserStyle: function (a) {
        var b = this.createElementNSPlus('sld:UserStyle');
        a.name && this.writeNode('Name', a.name, b);
        a.title && this.writeNode('Title', a.title, b);
        a.description && this.writeNode('Abstract', a.description, b);
        a.isDefault && this.writeNode('IsDefault', a.isDefault, b);
        if (this.multipleSymbolizers && a.rules) {
          for (var c = {
            '0': [
            ]
          }, d = [
            0
          ], e, f, g, h, i, j = 0, k = a.rules.length; j < k; ++j) if (e = a.rules[j], e.symbolizers) {
            f = {
            };
            for (var l = 0, m = e.symbolizers.length; l < m; ++l) g = e.symbolizers[l],
            h = g.zIndex,
            h in f || (i = e.clone(), i.symbolizers = [
            ], f[h] = i),
            f[h].symbolizers.push(g.clone());
            for (h in f) h in c || (d.push(h), c[h] = [
            ]),
            c[h].push(f[h])
          } else c[0].push(e.clone());
          d.sort();
          j = 0;
          for (k = d.length; j < k; ++j) e = c[d[j]],
          0 < e.length && (i = a.clone(), i.rules = c[d[j]], this.writeNode('FeatureTypeStyle', i, b))
        } else this.writeNode('FeatureTypeStyle', a, b);
        return b
      },
      IsDefault: function (a) {
        return this.createElementNSPlus('sld:IsDefault', {
          value: a ? '1' : '0'
        })
      },
      FeatureTypeStyle: function (a) {
        for (var b = this.createElementNSPlus('sld:FeatureTypeStyle'), c = 0, d = a.rules.length; c < d; ++c) this.writeNode('Rule', a.rules[c], b);
        return b
      },
      Rule: function (a) {
        var b = this.createElementNSPlus('sld:Rule');
        a.name && this.writeNode('Name', a.name, b);
        a.title && this.writeNode('Title', a.title, b);
        a.description && this.writeNode('Abstract', a.description, b);
        a.elseFilter ? this.writeNode('ElseFilter', null, b)  : a.filter && this.writeNode('ogc:Filter', a.filter, b);
        void 0 != a.minScaleDenominator && this.writeNode('MinScaleDenominator', a.minScaleDenominator, b);
        void 0 != a.maxScaleDenominator && this.writeNode('MaxScaleDenominator', a.maxScaleDenominator, b);
        var c,
        d;
        if (this.multipleSymbolizers && a.symbolizers) for (var e = 0, f = a.symbolizers.length; e <
        f; ++e) d = a.symbolizers[e],
        c = d.CLASS_NAME.split('.').pop(),
        this.writeNode(c + 'Symbolizer', d, b);
         else for (var f = OpenLayers.Style.SYMBOLIZER_PREFIXES, e = 0, g = f.length; e < g; ++e) c = f[e],
        (d = a.symbolizer[c]) && this.writeNode(c + 'Symbolizer', d, b);
        return b
      },
      ElseFilter: function () {
        return this.createElementNSPlus('sld:ElseFilter')
      },
      MinScaleDenominator: function (a) {
        return this.createElementNSPlus('sld:MinScaleDenominator', {
          value: a
        })
      },
      MaxScaleDenominator: function (a) {
        return this.createElementNSPlus('sld:MaxScaleDenominator', {
          value: a
        })
      },
      LineSymbolizer: function (a) {
        var b = this.createElementNSPlus('sld:LineSymbolizer');
        this.writeNode('Stroke', a, b);
        return b
      },
      Stroke: function (a) {
        var b = this.createElementNSPlus('sld:Stroke');
        void 0 != a.strokeColor && this.writeNode('CssParameter', {
          symbolizer: a,
          key: 'strokeColor'
        }, b);
        void 0 != a.strokeOpacity && this.writeNode('CssParameter', {
          symbolizer: a,
          key: 'strokeOpacity'
        }, b);
        void 0 != a.strokeWidth && this.writeNode('CssParameter', {
          symbolizer: a,
          key: 'strokeWidth'
        }, b);
        void 0 != a.strokeDashstyle && 'solid' !==
        a.strokeDashstyle && this.writeNode('CssParameter', {
          symbolizer: a,
          key: 'strokeDashstyle'
        }, b);
        void 0 != a.strokeLinecap && this.writeNode('CssParameter', {
          symbolizer: a,
          key: 'strokeLinecap'
        }, b);
        return b
      },
      CssParameter: function (a) {
        return this.createElementNSPlus('sld:CssParameter', {
          attributes: {
            name: this.getCssProperty(a.key)
          },
          value: a.symbolizer[a.key]
        })
      },
      TextSymbolizer: function (a) {
        var b = this.createElementNSPlus('sld:TextSymbolizer');
        null != a.label && this.writeNode('Label', a.label, b);
        (null != a.fontFamily || null != a.fontSize || null != a.fontWeight || null != a.fontStyle) && this.writeNode('Font', a, b);
        (null != a.labelAnchorPointX || null != a.labelAnchorPointY || null != a.labelAlign || null != a.labelXOffset || null != a.labelYOffset || null != a.labelRotation || null != a.labelPerpendicularOffset) && this.writeNode('LabelPlacement', a, b);
        (null != a.haloRadius || null != a.haloColor || null != a.haloOpacity) && this.writeNode('Halo', a, b);
        (null != a.fontColor || null != a.fontOpacity) && this.writeNode('Fill', {
          fillColor: a.fontColor,
          fillOpacity: a.fontOpacity
        }, b);
        return b
      },
      LabelPlacement: function (a) {
        var b = this.createElementNSPlus('sld:LabelPlacement');
        (null != a.labelAnchorPointX || null != a.labelAnchorPointY || null != a.labelAlign || null != a.labelXOffset || null != a.labelYOffset || null != a.labelRotation) && null == a.labelPerpendicularOffset && this.writeNode('PointPlacement', a, b);
        null != a.labelPerpendicularOffset && this.writeNode('LinePlacement', a, b);
        return b
      },
      LinePlacement: function (a) {
        var b = this.createElementNSPlus('sld:LinePlacement');
        this.writeNode('PerpendicularOffset', a.labelPerpendicularOffset, b);
        return b
      },
      PerpendicularOffset: function (a) {
        return this.createElementNSPlus('sld:PerpendicularOffset', {
          value: a
        })
      },
      PointPlacement: function (a) {
        var b = this.createElementNSPlus('sld:PointPlacement');
        (null != a.labelAnchorPointX || null != a.labelAnchorPointY || null != a.labelAlign) && this.writeNode('AnchorPoint', a, b);
        (null != a.labelXOffset || null != a.labelYOffset) && this.writeNode('Displacement', a, b);
        null != a.labelRotation && this.writeNode('Rotation', a.labelRotation, b);
        return b
      },
      AnchorPoint: function (a) {
        var b = this.createElementNSPlus('sld:AnchorPoint'),
        c = a.labelAnchorPointX,
        d = a.labelAnchorPointY;
        null != c && this.writeNode('AnchorPointX', c, b);
        null != d && this.writeNode('AnchorPointY', d, b);
        if (null == c && null == d) {
          var e = a.labelAlign.substr(0, 1),
          a = a.labelAlign.substr(1, 1);
          'l' === e ? c = 0 : 'c' === e ? c = 0.5 : 'r' === e && (c = 1);
          'b' === a ? d = 0 : 'm' === a ? d = 0.5 : 't' === a && (d = 1);
          this.writeNode('AnchorPointX', c, b);
          this.writeNode('AnchorPointY', d, b)
        }
        return b
      },
      AnchorPointX: function (a) {
        return this.createElementNSPlus('sld:AnchorPointX', {
          value: a
        })
      },
      AnchorPointY: function (a) {
        return this.createElementNSPlus('sld:AnchorPointY', {
          value: a
        })
      },
      Displacement: function (a) {
        var b = this.createElementNSPlus('sld:Displacement');
        null != a.labelXOffset && this.writeNode('DisplacementX', a.labelXOffset, b);
        null != a.labelYOffset && this.writeNode('DisplacementY', a.labelYOffset, b);
        return b
      },
      DisplacementX: function (a) {
        return this.createElementNSPlus('sld:DisplacementX', {
          value: a
        })
      },
      DisplacementY: function (a) {
        return this.createElementNSPlus('sld:DisplacementY', {
          value: a
        })
      },
      Font: function (a) {
        var b = this.createElementNSPlus('sld:Font');
        a.fontFamily && this.writeNode('CssParameter', {
          symbolizer: a,
          key: 'fontFamily'
        }, b);
        a.fontSize && this.writeNode('CssParameter', {
          symbolizer: a,
          key: 'fontSize'
        }, b);
        a.fontWeight && this.writeNode('CssParameter', {
          symbolizer: a,
          key: 'fontWeight'
        }, b);
        a.fontStyle && this.writeNode('CssParameter', {
          symbolizer: a,
          key: 'fontStyle'
        }, b);
        return b
      },
      Label: function (a) {
        return this.writers.sld._OGCExpression.call(this, 'sld:Label', a)
      },
      Halo: function (a) {
        var b = this.createElementNSPlus('sld:Halo');
        a.haloRadius && this.writeNode('Radius', a.haloRadius, b);
        (a.haloColor || a.haloOpacity) && this.writeNode('Fill', {
          fillColor: a.haloColor,
          fillOpacity: a.haloOpacity
        }, b);
        return b
      },
      Radius: function (a) {
        return this.createElementNSPlus('sld:Radius', {
          value: a
        })
      },
      RasterSymbolizer: function (a) {
        var b = this.createElementNSPlus('sld:RasterSymbolizer');
        a.geometry && this.writeNode('Geometry', a.geometry, b);
        a.opacity && this.writeNode('Opacity', a.opacity, b);
        a.colorMap && this.writeNode('ColorMap', a.colorMap, b);
        return b
      },
      Geometry: function (a) {
        var b = this.createElementNSPlus('sld:Geometry');
        a.property && this.writeNode('ogc:PropertyName', a, b);
        return b
      },
      ColorMap: function (a) {
        for (var b = this.createElementNSPlus('sld:ColorMap'), c = 0, d = a.length; c < d; ++c) this.writeNode('ColorMapEntry', a[c], b);
        return b
      },
      ColorMapEntry: function (a) {
        var b = this.createElementNSPlus('sld:ColorMapEntry');
        b.setAttribute('color', a.color);
        void 0 !== a.opacity && b.setAttribute('opacity', parseFloat(a.opacity));
        void 0 !== a.quantity && b.setAttribute('quantity', parseFloat(a.quantity));
        void 0 !== a.label && b.setAttribute('label', a.label);
        return b
      },
      PolygonSymbolizer: function (a) {
        var b = this.createElementNSPlus('sld:PolygonSymbolizer');
        !1 !== a.fill && this.writeNode('Fill', a, b);
        !1 !== a.stroke && this.writeNode('Stroke', a, b);
        return b
      },
      Fill: function (a) {
        var b = this.createElementNSPlus('sld:Fill');
        a.fillColor && this.writeNode('CssParameter', {
          symbolizer: a,
          key: 'fillColor'
        }, b);
        null != a.fillOpacity && this.writeNode('CssParameter', {
          symbolizer: a,
          key: 'fillOpacity'
        }, b);
        return b
      },
      PointSymbolizer: function (a) {
        var b = this.createElementNSPlus('sld:PointSymbolizer');
        this.writeNode('Graphic', a, b);
        return b
      },
      Graphic: function (a) {
        var b = this.createElementNSPlus('sld:Graphic');
        void 0 != a.externalGraphic ?
        this.writeNode('ExternalGraphic', a, b)  : this.writeNode('Mark', a, b);
        void 0 != a.graphicOpacity && this.writeNode('Opacity', a.graphicOpacity, b);
        void 0 != a.pointRadius ? this.writeNode('Size', 2 * a.pointRadius, b)  : void 0 != a.graphicWidth && this.writeNode('Size', a.graphicWidth, b);
        void 0 != a.rotation && this.writeNode('Rotation', a.rotation, b);
        return b
      },
      ExternalGraphic: function (a) {
        var b = this.createElementNSPlus('sld:ExternalGraphic');
        this.writeNode('OnlineResource', a.externalGraphic, b);
        this.writeNode('Format', a.graphicFormat || this.getGraphicFormat(a.externalGraphic), b);
        return b
      },
      Mark: function (a) {
        var b = this.createElementNSPlus('sld:Mark');
        a.graphicName && this.writeNode('WellKnownName', a.graphicName, b);
        !1 !== a.fill && this.writeNode('Fill', a, b);
        !1 !== a.stroke && this.writeNode('Stroke', a, b);
        return b
      },
      WellKnownName: function (a) {
        return this.createElementNSPlus('sld:WellKnownName', {
          value: a
        })
      },
      Opacity: function (a) {
        return this.createElementNSPlus('sld:Opacity', {
          value: a
        })
      },
      Size: function (a) {
        return this.writers.sld._OGCExpression.call(this, 'sld:Size', a)
      },
      Rotation: function (a) {
        return this.createElementNSPlus('sld:Rotation', {
          value: a
        })
      },
      OnlineResource: function (a) {
        return this.createElementNSPlus('sld:OnlineResource', {
          attributes: {
            'xlink:type': 'simple',
            'xlink:href': a
          }
        })
      },
      Format: function (a) {
        return this.createElementNSPlus('sld:Format', {
          value: a
        })
      }
    }
  }, OpenLayers.Format.Filter.v1_0_0.prototype.writers),
  CLASS_NAME: 'OpenLayers.Format.SLD.v1'
});
OpenLayers.Format.WMC.v1_1_0 = OpenLayers.Class(OpenLayers.Format.WMC.v1, {
  VERSION: '1.1.0',
  schemaLocation: 'http://www.opengis.net/context http://schemas.opengis.net/context/1.1.0/context.xsd',
  initialize: function (a) {
    OpenLayers.Format.WMC.v1.prototype.initialize.apply(this, [
      a
    ])
  },
  read_sld_MinScaleDenominator: function (a, b) {
    var c = parseFloat(this.getChildValue(b));
    0 < c && (a.maxScale = c)
  },
  read_sld_MaxScaleDenominator: function (a, b) {
    a.minScale = parseFloat(this.getChildValue(b))
  },
  read_wmc_SRS: function (a, b) {
    'srs' in a || (a.srs = {
    });
    a.srs[this.getChildValue(b)] = !0
  },
  write_wmc_Layer: function (a) {
    var b = OpenLayers.Format.WMC.v1.prototype.write_wmc_Layer.apply(this, [
      a
    ]);
    if (a.maxScale) {
      var c = this.createElementNS(this.namespaces.sld, 'sld:MinScaleDenominator');
      c.appendChild(this.createTextNode(a.maxScale.toPrecision(16)));
      b.appendChild(c)
    }
    a.minScale && (c = this.createElementNS(this.namespaces.sld, 'sld:MaxScaleDenominator'), c.appendChild(this.createTextNode(a.minScale.toPrecision(16))), b.appendChild(c));
    if (a.srs) for (var d in a.srs) b.appendChild(this.createElementDefaultNS('SRS', d));
    b.appendChild(this.write_wmc_FormatList(a));
    b.appendChild(this.write_wmc_StyleList(a));
    a.dimensions && b.appendChild(this.write_wmc_DimensionList(a));
    b.appendChild(this.write_wmc_LayerExtension(a));
    return b
  },
  CLASS_NAME: 'OpenLayers.Format.WMC.v1_1_0'
});
OpenLayers.Format.XLS = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
  defaultVersion: '1.1.0',
  stringifyOutput: !0,
  CLASS_NAME: 'OpenLayers.Format.XLS'
});
OpenLayers.Format.XLS.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
  namespaces: {
    xls: 'http://www.opengis.net/xls',
    gml: 'http://www.opengis.net/gml',
    xsi: 'http://www.w3.org/2001/XMLSchema-instance'
  },
  regExes: {
    trimSpace: /^\s*|\s*$/g,
    removeSpace: /\s*/g,
    splitSpace: /\s+/,
    trimComma: /\s*,\s*/g
  },
  xy: !0,
  defaultPrefix: 'xls',
  schemaLocation: null,
  read: function (a, b) {
    OpenLayers.Util.applyDefaults(b, this.options);
    var c = {
    };
    this.readChildNodes(a, c);
    return c
  },
  readers: {
    xls: {
      XLS: function (a, b) {
        b.version = a.getAttribute('version');
        this.readChildNodes(a, b)
      },
      Response: function (a, b) {
        this.readChildNodes(a, b)
      },
      GeocodeResponse: function (a, b) {
        b.responseLists = [
        ];
        this.readChildNodes(a, b)
      },
      GeocodeResponseList: function (a, b) {
        var c = {
          features: [
          ],
          numberOfGeocodedAddresses: parseInt(a.getAttribute('numberOfGeocodedAddresses'))
        };
        b.responseLists.push(c);
        this.readChildNodes(a, c)
      },
      GeocodedAddress: function (a, b) {
        var c = new OpenLayers.Feature.Vector;
        b.features.push(c);
        this.readChildNodes(a, c);
        c.geometry = c.components[0]
      },
      GeocodeMatchCode: function (a, b) {
        b.attributes.matchCode = {
          accuracy: parseFloat(a.getAttribute('accuracy')),
          matchType: a.getAttribute('matchType')
        }
      },
      Address: function (a, b) {
        var c = {
          countryCode: a.getAttribute('countryCode'),
          addressee: a.getAttribute('addressee'),
          street: [
          ],
          place: [
          ]
        };
        b.attributes.address = c;
        this.readChildNodes(a, c)
      },
      freeFormAddress: function (a, b) {
        b.freeFormAddress = this.getChildValue(a)
      },
      StreetAddress: function (a, b) {
        this.readChildNodes(a, b)
      },
      Building: function (a, b) {
        b.building = {
          number: a.getAttribute('number'),
          subdivision: a.getAttribute('subdivision'),
          buildingName: a.getAttribute('buildingName')
        }
      },
      Street: function (a, b) {
        b.street.push(this.getChildValue(a))
      },
      Place: function (a, b) {
        b.place[a.getAttribute('type')] = this.getChildValue(a)
      },
      PostalCode: function (a, b) {
        b.postalCode = this.getChildValue(a)
      }
    },
    gml: OpenLayers.Format.GML.v3.prototype.readers.gml
  },
  write: function (a) {
    return this.writers.xls.XLS.apply(this, [
      a
    ])
  },
  writers: {
    xls: {
      XLS: function (a) {
        var b = this.createElementNSPlus('xls:XLS', {
          attributes: {
            version: this.VERSION,
            'xsi:schemaLocation': this.schemaLocation
          }
        });
        this.writeNode('RequestHeader', a.header, b);
        this.writeNode('Request', a, b);
        return b
      },
      RequestHeader: function () {
        return this.createElementNSPlus('xls:RequestHeader')
      },
      Request: function (a) {
        var b = this.createElementNSPlus('xls:Request', {
          attributes: {
            methodName: 'GeocodeRequest',
            requestID: a.requestID || '',
            version: this.VERSION
          }
        });
        this.writeNode('GeocodeRequest', a.addresses, b);
        return b
      },
      GeocodeRequest: function (a) {
        for (var b = this.createElementNSPlus('xls:GeocodeRequest'), c = 0, d = a.length; c < d; c++) this.writeNode('Address', a[c], b);
        return b
      },
      Address: function (a) {
        var b = this.createElementNSPlus('xls:Address', {
          attributes: {
            countryCode: a.countryCode
          }
        });
        a.freeFormAddress ? this.writeNode('freeFormAddress', a.freeFormAddress, b)  : (a.street && this.writeNode('StreetAddress', a, b), a.municipality && this.writeNode('Municipality', a.municipality, b), a.countrySubdivision && this.writeNode('CountrySubdivision', a.countrySubdivision, b), a.postalCode && this.writeNode('PostalCode', a.postalCode, b));
        return b
      },
      freeFormAddress: function (a) {
        return this.createElementNSPlus('freeFormAddress', {
          value: a
        })
      },
      StreetAddress: function (a) {
        var b = this.createElementNSPlus('xls:StreetAddress');
        a.building && this.writeNode(b, 'Building', a.building);
        a = a.street;
        OpenLayers.Util.isArray(a) || (a = [
          a
        ]);
        for (var c = 0, d = a.length; c < d; c++) this.writeNode('Street', a[c], b);
        return b
      },
      Building: function (a) {
        return this.createElementNSPlus('xls:Building', {
          attributes: {
            number: a.number,
            subdivision: a.subdivision,
            buildingName: a.buildingName
          }
        })
      },
      Street: function (a) {
        return this.createElementNSPlus('xls:Street', {
          value: a
        })
      },
      Municipality: function (a) {
        return this.createElementNSPlus('xls:Place', {
          attributes: {
            type: 'Municipality'
          },
          value: a
        })
      },
      CountrySubdivision: function (a) {
        return this.createElementNSPlus('xls:Place', {
          attributes: {
            type: 'CountrySubdivision'
          },
          value: a
        })
      },
      PostalCode: function (a) {
        return this.createElementNSPlus('xls:PostalCode', {
          value: a
        })
      }
    }
  },
  CLASS_NAME: 'OpenLayers.Format.XLS.v1'
});
OpenLayers.Format.XLS.v1_1_0 = OpenLayers.Class(OpenLayers.Format.XLS.v1, {
  VERSION: '1.1',
  schemaLocation: 'http://www.opengis.net/xls http://schemas.opengis.net/ols/1.1.0/LocationUtilityService.xsd',
  CLASS_NAME: 'OpenLayers.Format.XLS.v1_1_0'
});
OpenLayers.Format.XLS.v1_1 = OpenLayers.Format.XLS.v1_1_0;
OpenLayers.Format.SLD.v1_0_0 = OpenLayers.Class(OpenLayers.Format.SLD.v1, {
  VERSION: '1.0.0',
  schemaLocation: 'http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd',
  CLASS_NAME: 'OpenLayers.Format.SLD.v1_0_0'
});
OpenLayers.Format.OWSContext = OpenLayers.Class(OpenLayers.Format.Context, {
  defaultVersion: '0.3.1',
  getVersion: function (a, b) {
    var c = OpenLayers.Format.XML.VersionedOGC.prototype.getVersion.apply(this, arguments);
    '0.3.0' === c && (c = this.defaultVersion);
    return c
  },
  toContext: function (a) {
    var b = {
    };
    'OpenLayers.Map' == a.CLASS_NAME && (b.bounds = a.getExtent(), b.maxExtent = a.maxExtent, b.projection = a.projection, b.size = a.getSize(), b.layers = a.layers);
    return b
  },
  CLASS_NAME: 'OpenLayers.Format.OWSContext'
});
OpenLayers.Format.OWSContext.v0_3_1 = OpenLayers.Class(OpenLayers.Format.XML, {
  namespaces: {
    owc: 'http://www.opengis.net/ows-context',
    gml: 'http://www.opengis.net/gml',
    kml: 'http://www.opengis.net/kml/2.2',
    ogc: 'http://www.opengis.net/ogc',
    ows: 'http://www.opengis.net/ows',
    sld: 'http://www.opengis.net/sld',
    xlink: 'http://www.w3.org/1999/xlink',
    xsi: 'http://www.w3.org/2001/XMLSchema-instance'
  },
  VERSION: '0.3.1',
  schemaLocation: 'http://www.opengis.net/ows-context http://www.ogcnetwork.net/schemas/owc/0.3.1/owsContext.xsd',
  defaultPrefix: 'owc',
  extractAttributes: !0,
  xy: !0,
  regExes: {
    trimSpace: /^\s*|\s*$/g,
    removeSpace: /\s*/g,
    splitSpace: /\s+/,
    trimComma: /\s*,\s*/g
  },
  featureNS: 'http://mapserver.gis.umn.edu/mapserver',
  featureType: 'vector',
  geometryName: 'geometry',
  nestingLayerLookup: null,
  initialize: function (a) {
    OpenLayers.Format.XML.prototype.initialize.apply(this, [
      a
    ]);
    OpenLayers.Format.GML.v2.prototype.setGeometryTypes.call(this)
  },
  setNestingPath: function (a) {
    if (a.layersContext) for (var b = 0, c = a.layersContext.length; b < c; b++) {
      var d = a.layersContext[b],
      e = [
      ],
      f = a.title || '';
      a.metadata && a.metadata.nestingPath && (e = a.metadata.nestingPath.slice());
      '' != f && e.push(f);
      d.metadata.nestingPath = e;
      d.layersContext && this.setNestingPath(d)
    }
  },
  decomposeNestingPath: function (a) {
    var b = [
    ];
    if (OpenLayers.Util.isArray(a)) {
      for (a = a.slice(); 0 < a.length; ) b.push(a.slice()),
      a.pop();
      b.reverse()
    }
    return b
  },
  read: function (a) {
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    a && 9 == a.nodeType && (a = a.documentElement);
    var b = {
    };
    this.readNode(a, b);
    this.setNestingPath({
      layersContext: b.layersContext
    });
    a = [
    ];
    this.processLayer(a, b);
    delete b.layersContext;
    b.layersContext = a;
    return b
  },
  processLayer: function (a, b) {
    if (b.layersContext) for (var c = 0, d = b.layersContext.length; c < d; c++) {
      var e = b.layersContext[c];
      a.push(e);
      e.layersContext && this.processLayer(a, e)
    }
  },
  write: function (a, b) {
    this.nestingLayerLookup = {
    };
    b = b || {
    };
    OpenLayers.Util.applyDefaults(b, a);
    var c = this.writeNode('OWSContext', b);
    this.nestingLayerLookup = null;
    this.setAttributeNS(c, this.namespaces.xsi, 'xsi:schemaLocation', this.schemaLocation);
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      c
    ])
  },
  readers: {
    kml: {
      Document: function (a, b) {
        b.features = (new OpenLayers.Format.KML({
          kmlns: this.namespaces.kml,
          extractStyles: !0
        })).read(a)
      }
    },
    owc: {
      OWSContext: function (a, b) {
        this.readChildNodes(a, b)
      },
      General: function (a, b) {
        this.readChildNodes(a, b)
      },
      ResourceList: function (a, b) {
        this.readChildNodes(a, b)
      },
      Layer: function (a, b) {
        var c = {
          metadata: {
          },
          visibility: '1' != a.getAttribute('hidden'),
          queryable: '1' == a.getAttribute('queryable'),
          opacity: null != a.getAttribute('opacity') ? parseFloat(a.getAttribute('opacity'))  : null,
          name: a.getAttribute('name'),
          categoryLayer: null == a.getAttribute('name'),
          formats: [
          ],
          styles: [
          ]
        };
        b.layersContext || (b.layersContext = [
        ]);
        b.layersContext.push(c);
        this.readChildNodes(a, c)
      },
      InlineGeometry: function (a, b) {
        b.features = [
        ];
        var c = this.getElementsByTagNameNS(a, this.namespaces.gml, 'featureMember'),
        d;
        1 <= c.length && (d = c[0]);
        d && d.firstChild && (c = d.firstChild.nextSibling ? d.firstChild.nextSibling : d.firstChild, this.setNamespace('feature', c.namespaceURI), this.featureType = c.localName || c.nodeName.split(':').pop(), this.readChildNodes(a, b))
      },
      Server: function (a, b) {
        if (!b.service && !b.version || b.service != OpenLayers.Format.Context.serviceTypes.WMS) b.service = a.getAttribute('service'),
        b.version = a.getAttribute('version'),
        this.readChildNodes(a, b)
      },
      Name: function (a, b) {
        b.name = this.getChildValue(a);
        this.readChildNodes(a, b)
      },
      Title: function (a, b) {
        b.title = this.getChildValue(a);
        this.readChildNodes(a, b)
      },
      StyleList: function (a, b) {
        this.readChildNodes(a, b.styles)
      },
      Style: function (a, b) {
        var c = {
        };
        b.push(c);
        this.readChildNodes(a, c)
      },
      LegendURL: function (a, b) {
        var c = {
        };
        b.legend = c;
        this.readChildNodes(a, c)
      },
      OnlineResource: function (a, b) {
        b.url = this.getAttributeNS(a, this.namespaces.xlink, 'href');
        this.readChildNodes(a, b)
      }
    },
    ows: OpenLayers.Format.OWSCommon.v1_0_0.prototype.readers.ows,
    gml: OpenLayers.Format.GML.v2.prototype.readers.gml,
    sld: OpenLayers.Format.SLD.v1_0_0.prototype.readers.sld,
    feature: OpenLayers.Format.GML.v2.prototype.readers.feature
  },
  writers: {
    owc: {
      OWSContext: function (a) {
        var b = this.createElementNSPlus('OWSContext', {
          attributes: {
            version: this.VERSION,
            id: a.id || OpenLayers.Util.createUniqueID('OpenLayers_OWSContext_')
          }
        });
        this.writeNode('General', a, b);
        this.writeNode('ResourceList', a, b);
        return b
      },
      General: function (a) {
        var b = this.createElementNSPlus('General');
        this.writeNode('ows:BoundingBox', a, b);
        this.writeNode('ows:Title', a.title || 'OpenLayers OWSContext', b);
        return b
      },
      ResourceList: function (a) {
        for (var b = this.createElementNSPlus('ResourceList'), c = 0, d = a.layers.length; c < d; c++) {
          var e = a.layers[c],
          f = this.decomposeNestingPath(e.metadata.nestingPath);
          this.writeNode('_Layer', {
            layer: e,
            subPaths: f
          }, b)
        }
        return b
      },
      Server: function (a) {
        var b = this.createElementNSPlus('Server', {
          attributes: {
            version: a.version,
            service: a.service
          }
        });
        this.writeNode('OnlineResource', a, b);
        return b
      },
      OnlineResource: function (a) {
        return this.createElementNSPlus('OnlineResource', {
          attributes: {
            'xlink:href': a.url
          }
        })
      },
      InlineGeometry: function (a) {
        var b = this.createElementNSPlus('InlineGeometry');
        this.writeNode('gml:boundedBy', a.getDataExtent(), b);
        for (var c = 0, d = a.features.length; c < d; c++) this.writeNode('gml:featureMember', a.features[c], b);
        return b
      },
      StyleList: function (a) {
        for (var b = this.createElementNSPlus('StyleList'), c = 0, d = a.length; c < d; c++) this.writeNode('Style', a[c], b);
        return b
      },
      Style: function (a) {
        var b = this.createElementNSPlus('Style');
        this.writeNode('Name', a, b);
        this.writeNode('Title', a, b);
        a.legend && this.writeNode('LegendURL', a, b);
        return b
      },
      Name: function (a) {
        return this.createElementNSPlus('Name', {
          value: a.name
        })
      },
      Title: function (a) {
        return this.createElementNSPlus('Title', {
          value: a.title
        })
      },
      LegendURL: function (a) {
        var b = this.createElementNSPlus('LegendURL');
        this.writeNode('OnlineResource', a.legend, b);
        return b
      },
      _WMS: function (a) {
        var b = this.createElementNSPlus('Layer', {
          attributes: {
            name: a.params.LAYERS,
            queryable: a.queryable ? '1' : '0',
            hidden: a.visibility ? '0' : '1',
            opacity: a.hasOwnProperty('opacity') ? a.opacity : null
          }
        });
        this.writeNode('ows:Title', a.name, b);
        this.writeNode('ows:OutputFormat', a.params.FORMAT, b);
        this.writeNode('Server', {
          service: OpenLayers.Format.Context.serviceTypes.WMS,
          version: a.params.VERSION,
          url: a.url
        }, b);
        a.metadata.styles && 0 < a.metadata.styles.length && this.writeNode('StyleList', a.metadata.styles, b);
        return b
      },
      _Layer: function (a) {
        var b,
        c,
        d;
        b = a.layer;
        c = a.subPaths;
        d = null;
        0 < c.length ? (b = c[0].join('/'), c = b.lastIndexOf('/'), d = this.nestingLayerLookup[b], c = 0 < c ? b.substring(c + 1, b.length)  : b, d || (d = this.createElementNSPlus('Layer'), this.writeNode('ows:Title', c, d), this.nestingLayerLookup[b] = d), a.subPaths.shift(), this.writeNode('_Layer', a, d))  : (b instanceof OpenLayers.Layer.WMS ?
        d = this.writeNode('_WMS', b)  : b instanceof OpenLayers.Layer.Vector && (b.protocol instanceof OpenLayers.Protocol.WFS.v1 ? d = this.writeNode('_WFS', b)  : b.protocol instanceof OpenLayers.Protocol.HTTP ? b.protocol.format instanceof OpenLayers.Format.GML ? (b.protocol.format.version = '2.1.2', d = this.writeNode('_GML', b))  : b.protocol.format instanceof OpenLayers.Format.KML && (b.protocol.format.version = '2.2', d = this.writeNode('_KML', b))  : (this.setNamespace('feature', this.featureNS), d = this.writeNode('_InlineGeometry', b))), b.options.maxScale && this.writeNode('sld:MinScaleDenominator', b.options.maxScale, d), b.options.minScale && this.writeNode('sld:MaxScaleDenominator', b.options.minScale, d), this.nestingLayerLookup[b.name] = d);
        return d
      },
      _WFS: function (a) {
        var b = this.createElementNSPlus('Layer', {
          attributes: {
            name: a.protocol.featurePrefix + ':' + a.protocol.featureType,
            hidden: a.visibility ? '0' : '1'
          }
        });
        this.writeNode('ows:Title', a.name, b);
        this.writeNode('Server', {
          service: OpenLayers.Format.Context.serviceTypes.WFS,
          version: a.protocol.version,
          url: a.protocol.url
        }, b);
        return b
      },
      _InlineGeometry: function (a) {
        var b = this.createElementNSPlus('Layer', {
          attributes: {
            name: this.featureType,
            hidden: a.visibility ? '0' : '1'
          }
        });
        this.writeNode('ows:Title', a.name, b);
        this.writeNode('InlineGeometry', a, b);
        return b
      },
      _GML: function (a) {
        var b = this.createElementNSPlus('Layer');
        this.writeNode('ows:Title', a.name, b);
        this.writeNode('Server', {
          service: OpenLayers.Format.Context.serviceTypes.GML,
          url: a.protocol.url,
          version: a.protocol.format.version
        }, b);
        return b
      },
      _KML: function (a) {
        var b = this.createElementNSPlus('Layer');
        this.writeNode('ows:Title', a.name, b);
        this.writeNode('Server', {
          service: OpenLayers.Format.Context.serviceTypes.KML,
          version: a.protocol.format.version,
          url: a.protocol.url
        }, b);
        return b
      }
    },
    gml: OpenLayers.Util.applyDefaults({
      boundedBy: function (a) {
        var b = this.createElementNSPlus('gml:boundedBy');
        this.writeNode('gml:Box', a, b);
        return b
      }
    }, OpenLayers.Format.GML.v2.prototype.writers.gml),
    ows: OpenLayers.Format.OWSCommon.v1_0_0.prototype.writers.ows,
    sld: OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld,
    feature: OpenLayers.Format.GML.v2.prototype.writers.feature
  },
  CLASS_NAME: 'OpenLayers.Format.OWSContext.v0_3_1'
});
OpenLayers.Icon = OpenLayers.Class({
  url: null,
  size: null,
  offset: null,
  calculateOffset: null,
  imageDiv: null,
  px: null,
  initialize: function (a, b, c, d) {
    this.url = a;
    this.size = b || {
      w: 20,
      h: 20
    };
    this.offset = c || {
      x: - (this.size.w / 2),
      y: - (this.size.h / 2)
    };
    this.calculateOffset = d;
    a = OpenLayers.Util.createUniqueID('OL_Icon_');
    this.imageDiv = OpenLayers.Util.createAlphaImageDiv(a)
  },
  destroy: function () {
    this.erase();
    OpenLayers.Event.stopObservingElement(this.imageDiv.firstChild);
    this.imageDiv.innerHTML = '';
    this.imageDiv = null
  },
  clone: function () {
    return new OpenLayers.Icon(this.url, this.size, this.offset, this.calculateOffset)
  },
  setSize: function (a) {
    null != a && (this.size = a);
    this.draw()
  },
  setUrl: function (a) {
    null != a && (this.url = a);
    this.draw()
  },
  draw: function (a) {
    OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, null, this.size, this.url, 'absolute');
    this.moveTo(a);
    return this.imageDiv
  },
  erase: function () {
    null != this.imageDiv && null != this.imageDiv.parentNode && OpenLayers.Element.remove(this.imageDiv)
  },
  setOpacity: function (a) {
    OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, null, null, null, null, null, null, a)
  },
  moveTo: function (a) {
    null != a && (this.px = a);
    null != this.imageDiv && (null == this.px ? this.display(!1)  : (this.calculateOffset && (this.offset = this.calculateOffset(this.size)), OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, {
      x: this.px.x + this.offset.x,
      y: this.px.y + this.offset.y
    })))
  },
  display: function (a) {
    this.imageDiv.style.display = a ? '' : 'none'
  },
  isDrawn: function () {
    return this.imageDiv && this.imageDiv.parentNode && 11 != this.imageDiv.parentNode.nodeType
  },
  CLASS_NAME: 'OpenLayers.Icon'
});
OpenLayers.Layer.TileCache = OpenLayers.Class(OpenLayers.Layer.Grid, {
  isBaseLayer: !0,
  format: 'image/png',
  serverResolutions: null,
  initialize: function (a, b, c, d) {
    this.layername = c;
    OpenLayers.Layer.Grid.prototype.initialize.apply(this, [
      a,
      b,
      {
      },
      d
    ]);
    this.extension = this.format.split('/') [1].toLowerCase();
    this.extension = 'jpg' == this.extension ? 'jpeg' : this.extension
  },
  clone: function (a) {
    null == a && (a = new OpenLayers.Layer.TileCache(this.name, this.url, this.layername, this.getOptions()));
    return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [
      a
    ])
  },
  getURL: function (a) {
    function b(a, b) {
      for (var a = '' + a, c = [
      ], d = 0; d < b; ++d) c.push('0');
      return c.join('').substring(0, b - a.length) + a
    }
    var c = this.getServerResolution(),
    d = this.maxExtent,
    e = this.tileSize,
    f = Math.round((a.left - d.left) / (c * e.w)),
    a = Math.round((a.bottom - d.bottom) / (c * e.h)),
    c = null != this.serverResolutions ? OpenLayers.Util.indexOf(this.serverResolutions, c)  : this.map.getZoom(),
    f = [
      this.layername,
      b(c, 2),
      b(parseInt(f / 1000000), 3),
      b(parseInt(f / 1000) % 1000, 3),
      b(parseInt(f) % 1000, 3),
      b(parseInt(a / 1000000), 3),
      b(parseInt(a / 1000) % 1000, 3),
      b(parseInt(a) % 1000, 3) + '.' + this.extension
    ].join('/'),
    c = this.url;
    OpenLayers.Util.isArray(c) && (c = this.selectUrl(f, c));
    c = '/' == c.charAt(c.length - 1) ? c : c + '/';
    return c + f
  },
  CLASS_NAME: 'OpenLayers.Layer.TileCache'
});
OpenLayers.Layer.KaMap = OpenLayers.Class(OpenLayers.Layer.Grid, {
  isBaseLayer: !0,
  DEFAULT_PARAMS: {
    i: 'jpeg',
    map: ''
  },
  initialize: function (a, b, c, d) {
    OpenLayers.Layer.Grid.prototype.initialize.apply(this, arguments);
    this.params = OpenLayers.Util.applyDefaults(this.params, this.DEFAULT_PARAMS)
  },
  getURL: function (a) {
    var a = this.adjustBounds(a),
    b = this.map.getResolution(),
    c = Math.round(10000 * this.map.getScale()) / 10000,
    d = Math.round(a.left / b);
    return this.getFullRequestString({
      t: - Math.round(a.top / b),
      l: d,
      s: c
    })
  },
  calculateGridLayout: function (a, b, c) {
    var b = c * this.tileSize.w,
    c = c * this.tileSize.h,
    d = a.left,
    e = Math.floor(d / b) - this.buffer,
    d = - (d / b - e) * this.tileSize.w,
    e = e * b,
    a = a.top,
    f = Math.ceil(a / c) + this.buffer;
    return {
      tilelon: b,
      tilelat: c,
      tileoffsetlon: e,
      tileoffsetlat: f * c,
      tileoffsetx: d,
      tileoffsety: - (f - a / c + 1) * this.tileSize.h
    }
  },
  clone: function (a) {
    null == a && (a = new OpenLayers.Layer.KaMap(this.name, this.url, this.params, this.getOptions()));
    a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [
      a
    ]);
    null != this.tileSize && (a.tileSize = this.tileSize.clone());
    a.grid = [
    ];
    return a
  },
  getTileBounds: function (a) {
    var b = this.getResolution(),
    c = b * this.tileSize.w,
    b = b * this.tileSize.h,
    d = this.getLonLatFromViewPortPx(a),
    a = c * Math.floor(d.lon / c),
    d = b * Math.floor(d.lat / b);
    return new OpenLayers.Bounds(a, d, a + c, d + b)
  },
  CLASS_NAME: 'OpenLayers.Layer.KaMap'
});
OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
  geometryTypes: null,
  layer: null,
  preserveAspectRatio: !1,
  rotate: !0,
  feature: null,
  renderIntent: 'temporary',
  rotationHandleSymbolizer: null,
  box: null,
  center: null,
  scale: 1,
  ratio: 1,
  rotation: 0,
  handles: null,
  rotationHandles: null,
  dragControl: null,
  irregular: !1,
  initialize: function (a, b) {
    OpenLayers.Control.prototype.initialize.apply(this, [
      b
    ]);
    this.layer = a;
    this.rotationHandleSymbolizer || (this.rotationHandleSymbolizer = {
      stroke: !1,
      pointRadius: 10,
      fillOpacity: 0,
      cursor: 'pointer'
    });
    this.createBox();
    this.createControl()
  },
  activate: function () {
    var a = !1;
    OpenLayers.Control.prototype.activate.apply(this, arguments) && (this.dragControl.activate(), this.layer.addFeatures([this.box]), this.rotate && this.layer.addFeatures(this.rotationHandles), this.layer.addFeatures(this.handles), a = !0);
    return a
  },
  deactivate: function () {
    var a = !1;
    OpenLayers.Control.prototype.deactivate.apply(this, arguments) && (this.layer.removeFeatures(this.handles), this.rotate && this.layer.removeFeatures(this.rotationHandles), this.layer.removeFeatures([this.box]), this.dragControl.deactivate(), a = !0);
    return a
  },
  setMap: function (a) {
    this.dragControl.setMap(a);
    OpenLayers.Control.prototype.setMap.apply(this, arguments)
  },
  setFeature: function (a, b) {
    var b = OpenLayers.Util.applyDefaults(b, {
      rotation: 0,
      scale: 1,
      ratio: 1
    }),
    c = this.rotation,
    d = this.center;
    OpenLayers.Util.extend(this, b);
    if (!1 !== this.events.triggerEvent('beforesetfeature', {
      feature: a
    })) {
      this.feature = a;
      this.activate();
      this._setfeature = !0;
      var e = this.feature.geometry.getBounds();
      this.box.move(e.getCenterLonLat());
      this.box.geometry.rotate( - c, d);
      this._angle = 0;
      this.rotation ? (c = a.geometry.clone(), c.rotate( - this.rotation, this.center), c = new OpenLayers.Feature.Vector(c.getBounds().toGeometry()), c.geometry.rotate(this.rotation, this.center), this.box.geometry.rotate(this.rotation, this.center), this.box.move(c.geometry.getBounds().getCenterLonLat()), c = c.geometry.components[0].components[0].getBounds().getCenterLonLat())  : c = new OpenLayers.LonLat(e.left, e.bottom);
      this.handles[0].move(c);
      delete this._setfeature;
      this.events.triggerEvent('setfeature', {
        feature: a
      })
    }
  },
  unsetFeature: function () {
    this.active ? this.deactivate()  : (this.feature = null, this.rotation = 0, this.ratio = this.scale = 1)
  },
  createBox: function () {
    var a = this;
    this.center = new OpenLayers.Geometry.Point(0, 0);
    this.box = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString([new OpenLayers.Geometry.Point( - 1, - 1),
    new OpenLayers.Geometry.Point(0, - 1),
    new OpenLayers.Geometry.Point(1, - 1),
    new OpenLayers.Geometry.Point(1, 0),
    new OpenLayers.Geometry.Point(1, 1),
    new OpenLayers.Geometry.Point(0, 1),
    new OpenLayers.Geometry.Point( - 1, 1),
    new OpenLayers.Geometry.Point( - 1, 0),
    new OpenLayers.Geometry.Point( - 1, - 1)]), null, 'string' == typeof this.renderIntent ? null : this.renderIntent);
    this.box.geometry.move = function (b, c) {
      a._moving = !0;
      OpenLayers.Geometry.LineString.prototype.move.apply(this, arguments);
      a.center.move(b, c);
      delete a._moving
    };
    for (var b = function (a, b) {
      OpenLayers.Geometry.Point.prototype.move.apply(this, arguments);
      this._rotationHandle && this._rotationHandle.geometry.move(a, b);
      this._handle.geometry.move(a, b)
    }, c = function (a, b, c) {
      OpenLayers.Geometry.Point.prototype.resize.apply(this, arguments);
      this._rotationHandle && this._rotationHandle.geometry.resize(a, b, c);
      this._handle.geometry.resize(a, b, c)
    }, d = function (a, b) {
      OpenLayers.Geometry.Point.prototype.rotate.apply(this, arguments);
      this._rotationHandle && this._rotationHandle.geometry.rotate(a, b);
      this._handle.geometry.rotate(a, b)
    }, e = function (b, c) {
      var d = this.x,
      e = this.y;
      OpenLayers.Geometry.Point.prototype.move.call(this, b, c);
      if (!a._moving) {
        var f = a.dragControl.handlers.drag.evt,
        g = !(!a._setfeature && a.preserveAspectRatio) && !(f && f.shiftKey),
        h = new OpenLayers.Geometry.Point(d, e),
        f = a.center;
        this.rotate( - a.rotation, f);
        h.rotate( - a.rotation, f);
        var i = this.x - f.x,
        j = this.y - f.y,
        k = i - (this.x - h.x),
        l = j - (this.y - h.y);
        a.irregular && !a._setfeature && (i -= (this.x - h.x) / 2, j -= (this.y - h.y) / 2);
        this.x = d;
        this.y = e;
        h = 1;
        g ? (j = 0.00001 > Math.abs(l) ? 1 : j / l, h = (0.00001 > Math.abs(k) ? 1 : i / k) / j)  : (k = Math.sqrt(k * k + l * l), j = Math.sqrt(i * i + j * j) / k);
        a._moving = !0;
        a.box.geometry.rotate( - a.rotation, f);
        delete a._moving;
        a.box.geometry.resize(j, f, h);
        a.box.geometry.rotate(a.rotation, f);
        a.transformFeature({
          scale: j,
          ratio: h
        });
        a.irregular && !a._setfeature && (i = f.clone(), i.x += 0.00001 > Math.abs(d - f.x) ? 0 : this.x - d, i.y += 0.00001 > Math.abs(e - f.y) ? 0 : this.y - e, a.box.geometry.move(this.x - d, this.y - e), a.transformFeature({
          center: i
        }))
      }
    }, f = function (b, c) {
      var d = this.x,
      e = this.y;
      OpenLayers.Geometry.Point.prototype.move.call(this, b, c);
      if (!a._moving) {
        var f = a.dragControl.handlers.drag.evt,
        f = f && f.shiftKey ? 45 : 1,
        g = a.center,
        h = this.x - g.x,
        i = this.y - g.y;
        this.x = d;
        this.y = e;
        d = Math.atan2(i - c, h - b);
        d = Math.atan2(i, h) - d;
        d *= 180 / Math.PI;
        a._angle = (a._angle +
        d) % 360;
        d = a.rotation % f;
        if (Math.abs(a._angle) >= f || 0 !== d) d = Math.round(a._angle / f) * f - d,
        a._angle = 0,
        a.box.geometry.rotate(d, g),
        a.transformFeature({
          rotation: d
        })
      }
    }, g = Array(8), h = Array(4), i, j, k, l = 'sw s se e ne n nw w'.split(' '), m = 0; 8 > m; ++m) i = this.box.geometry.components[m],
    j = new OpenLayers.Feature.Vector(i.clone(), {
      role: l[m] + '-resize'
    }, 'string' == typeof this.renderIntent ? null : this.renderIntent),
    0 == m % 2 && (k = new OpenLayers.Feature.Vector(i.clone(), {
      role: l[m] + '-rotate'
    }, 'string' == typeof this.rotationHandleSymbolizer ?
    null : this.rotationHandleSymbolizer), k.geometry.move = f, i._rotationHandle = k, h[m / 2] = k),
    i.move = b,
    i.resize = c,
    i.rotate = d,
    j.geometry.move = e,
    i._handle = j,
    g[m] = j;
    this.rotationHandles = h;
    this.handles = g
  },
  createControl: function () {
    var a = this;
    this.dragControl = new OpenLayers.Control.DragFeature(this.layer, {
      documentDrag: !0,
      moveFeature: function (b) {
        this.feature === a.feature && (this.feature = a.box);
        OpenLayers.Control.DragFeature.prototype.moveFeature.apply(this, arguments)
      },
      onDrag: function (b) {
        b === a.box && a.transformFeature({
          center: a.center
        })
      },
      onStart: function (b) {
        var c = !a.geometryTypes || - 1 !== OpenLayers.Util.indexOf(a.geometryTypes, b.geometry.CLASS_NAME),
        d = OpenLayers.Util.indexOf(a.handles, b),
        d = d + OpenLayers.Util.indexOf(a.rotationHandles, b);
        b !== a.feature && (b !== a.box && - 2 == d && c) && a.setFeature(b)
      },
      onComplete: function () {
        a.events.triggerEvent('transformcomplete', {
          feature: a.feature
        })
      }
    })
  },
  drawHandles: function () {
    for (var a = this.layer, b = 0; 8 > b; ++b) this.rotate && 0 === b % 2 && a.drawFeature(this.rotationHandles[b / 2], this.rotationHandleSymbolizer),
    a.drawFeature(this.handles[b], this.renderIntent)
  },
  transformFeature: function (a) {
    if (!this._setfeature) {
      this.scale *= a.scale || 1;
      this.ratio *= a.ratio || 1;
      var b = this.rotation;
      this.rotation = (this.rotation + (a.rotation || 0)) % 360;
      if (!1 !== this.events.triggerEvent('beforetransform', a)) {
        var c = this.feature,
        d = c.geometry,
        e = this.center;
        d.rotate( - b, e);
        a.scale || a.ratio ? d.resize(a.scale, e, a.ratio)  : a.center && c.move(a.center.getBounds().getCenterLonLat());
        d.rotate(this.rotation, e);
        this.layer.drawFeature(c);
        c.toState(OpenLayers.State.UPDATE);
        this.events.triggerEvent('transform', a)
      }
    }
    this.layer.drawFeature(this.box, this.renderIntent);
    this.drawHandles()
  },
  destroy: function () {
    for (var a, b = 0; 8 > b; ++b) a = this.box.geometry.components[b],
    a._handle.destroy(),
    a._handle = null,
    a._rotationHandle && a._rotationHandle.destroy(),
    a._rotationHandle = null;
    this.rotationHandles = this.rotationHandleSymbolizer = this.handles = this.feature = this.center = null;
    this.box.destroy();
    this.layer = this.box = null;
    this.dragControl.destroy();
    this.dragControl = null;
    OpenLayers.Control.prototype.destroy.apply(this, arguments)
  },
  CLASS_NAME: 'OpenLayers.Control.TransformFeature'
});
OpenLayers.Control.EditingToolbar = OpenLayers.Class(OpenLayers.Control.Panel, {
  citeCompliant: !1,
  initialize: function (a, b) {
    OpenLayers.Control.Panel.prototype.initialize.apply(this, [
      b
    ]);
    this.addControls([new OpenLayers.Control.Navigation]);
    this.addControls([new OpenLayers.Control.DrawFeature(a, OpenLayers.Handler.Point, {
      displayClass: 'olControlDrawFeaturePoint',
      handlerOptions: {
        citeCompliant: this.citeCompliant
      }
    }),
    new OpenLayers.Control.DrawFeature(a, OpenLayers.Handler.Path, {
      displayClass: 'olControlDrawFeaturePath',
      handlerOptions: {
        citeCompliant: this.citeCompliant
      }
    }),
    new OpenLayers.Control.DrawFeature(a, OpenLayers.Handler.Polygon, {
      displayClass: 'olControlDrawFeaturePolygon',
      handlerOptions: {
        citeCompliant: this.citeCompliant
      }
    })])
  },
  draw: function () {
    var a = OpenLayers.Control.Panel.prototype.draw.apply(this, arguments);
    null === this.defaultControl && (this.defaultControl = this.controls[0]);
    return a
  },
  CLASS_NAME: 'OpenLayers.Control.EditingToolbar'
});
OpenLayers.Strategy.BBOX = OpenLayers.Class(OpenLayers.Strategy, {
  bounds: null,
  resolution: null,
  ratio: 2,
  resFactor: null,
  response: null,
  activate: function () {
    var a = OpenLayers.Strategy.prototype.activate.call(this);
    a && (this.layer.events.on({
      moveend: this.update,
      refresh: this.update,
      visibilitychanged: this.update,
      scope: this
    }), this.update());
    return a
  },
  deactivate: function () {
    var a = OpenLayers.Strategy.prototype.deactivate.call(this);
    a && this.layer.events.un({
      moveend: this.update,
      refresh: this.update,
      visibilitychanged: this.update,
      scope: this
    });
    return a
  },
  update: function (a) {
    var b = this.getMapBounds();
    if (null !== b && (a && a.force || this.layer.visibility && this.layer.calculateInRange() && this.invalidBounds(b))) this.calculateBounds(b),
    this.resolution = this.layer.map.getResolution(),
    this.triggerRead(a)
  },
  getMapBounds: function () {
    if (null === this.layer.map) return null;
    var a = this.layer.map.getExtent();
    a && !this.layer.projection.equals(this.layer.map.getProjectionObject()) && (a = a.clone().transform(this.layer.map.getProjectionObject(), this.layer.projection));
    return a
  },
  invalidBounds: function (a) {
    a || (a = this.getMapBounds());
    a = !this.bounds || !this.bounds.containsBounds(a);
    !a && this.resFactor && (a = this.resolution / this.layer.map.getResolution(), a = a >= this.resFactor || a <= 1 / this.resFactor);
    return a
  },
  calculateBounds: function (a) {
    a || (a = this.getMapBounds());
    var b = a.getCenterLonLat(),
    c = a.getWidth() * this.ratio,
    a = a.getHeight() * this.ratio;
    this.bounds = new OpenLayers.Bounds(b.lon - c / 2, b.lat - a / 2, b.lon + c / 2, b.lat + a / 2)
  },
  triggerRead: function (a) {
    this.response && !(a && !0 === a.noAbort) && (this.layer.protocol.abort(this.response), this.layer.events.triggerEvent('loadend'));
    this.layer.events.triggerEvent('loadstart');
    this.response = this.layer.protocol.read(OpenLayers.Util.applyDefaults({
      filter: this.createFilter(),
      callback: this.merge,
      scope: this
    }, a))
  },
  createFilter: function () {
    var a = new OpenLayers.Filter.Spatial({
      type: OpenLayers.Filter.Spatial.BBOX,
      value: this.bounds,
      projection: this.layer.projection
    });
    this.layer.filter && (a = new OpenLayers.Filter.Logical({
      type: OpenLayers.Filter.Logical.AND,
      filters: [
        this.layer.filter,
        a
      ]
    }));
    return a
  },
  merge: function (a) {
    this.layer.destroyFeatures();
    if ((a = a.features) && 0 < a.length) {
      var b = this.layer.projection,
      c = this.layer.map.getProjectionObject();
      if (!c.equals(b)) for (var d, e = 0, f = a.length; e < f; ++e) (d = a[e].geometry) && d.transform(b, c);
      this.layer.addFeatures(a)
    }
    this.response = null;
    this.layer.events.triggerEvent('loadend')
  },
  CLASS_NAME: 'OpenLayers.Strategy.BBOX'
});
OpenLayers.Layer.WorldWind = OpenLayers.Class(OpenLayers.Layer.Grid, {
  DEFAULT_PARAMS: {
  },
  isBaseLayer: !0,
  lzd: null,
  zoomLevels: null,
  initialize: function (a, b, c, d, e, f) {
    this.lzd = c;
    this.zoomLevels = d;
    c = [
    ];
    c.push(a, b, e, f);
    OpenLayers.Layer.Grid.prototype.initialize.apply(this, c);
    this.params = OpenLayers.Util.applyDefaults(this.params, this.DEFAULT_PARAMS)
  },
  getZoom: function () {
    var a = this.map.getZoom();
    this.map.getMaxExtent();
    return a -= Math.log(this.maxResolution / (this.lzd / 512)) / Math.log(2)
  },
  getURL: function (a) {
    var a = this.adjustBounds(a),
    b = this.getZoom(),
    c = this.map.getMaxExtent(),
    d = this.lzd / Math.pow(2, this.getZoom()),
    e = Math.floor((a.left - c.left) / d),
    a = Math.floor((a.bottom - c.bottom) / d);
    return this.map.getResolution() <= this.lzd / 512 && this.getZoom() <= this.zoomLevels ? this.getFullRequestString({
      L: b,
      X: e,
      Y: a
    })  : OpenLayers.Util.getImageLocation('blank.gif')
  },
  CLASS_NAME: 'OpenLayers.Layer.WorldWind'
});
OpenLayers.Protocol.CSW = function (a) {
  var a = OpenLayers.Util.applyDefaults(a, OpenLayers.Protocol.CSW.DEFAULTS),
  b = OpenLayers.Protocol.CSW['v' + a.version.replace(/\./g, '_')];
  if (!b) throw 'Unsupported CSW version: ' + a.version;
  return new b(a)
};
OpenLayers.Protocol.CSW.DEFAULTS = {
  version: '2.0.2'
};
OpenLayers.Format.WMTSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
  defaultVersion: '1.0.0',
  yx: {
    'urn:ogc:def:crs:EPSG::4326': !0
  },
  createLayer: function (a, b) {
    var c,
    d = {
      layer: !0,
      matrixSet: !0
    },
    e;
    for (e in d) if (!(e in b)) throw Error('Missing property \'' + e + '\' in layer configuration.');
    d = a.contents;
    e = d.tileMatrixSets[b.matrixSet];
    for (var f, g = 0, h = d.layers.length; g < h; ++g) if (d.layers[g].identifier === b.layer) {
      f = d.layers[g];
      break
    }
    if (f && e) {
      for (var i, g = 0, h = f.styles.length; g < h && !(i = f.styles[g], i.isDefault); ++g);
      c = new OpenLayers.Layer.WMTS(OpenLayers.Util.applyDefaults(b, {
        url: 'REST' === b.requestEncoding && f.resourceUrl ? f.resourceUrl.tile.template : a.operationsMetadata.GetTile.dcp.http.get[0].url,
        name: f.title,
        style: i.identifier,
        matrixIds: e.matrixIds,
        tileFullExtent: e.bounds
      }))
    }
    return c
  },
  CLASS_NAME: 'OpenLayers.Format.WMTSCapabilities'
});
OpenLayers.Layer.Google.v3 = {
  DEFAULTS: {
    sphericalMercator: !0,
    projection: 'EPSG:900913'
  },
  animationEnabled: !0,
  loadMapObject: function () {
    this.type || (this.type = google.maps.MapTypeId.ROADMAP);
    var a,
    b = OpenLayers.Layer.Google.cache[this.map.id];
    b ? (a = b.mapObject, ++b.count)  : (b = this.map.viewPortDiv, a = document.createElement('div'), a.id = this.map.id + '_GMapContainer', a.style.position = 'absolute', a.style.width = '100%', a.style.height = '100%', b.appendChild(a), b = this.map.getCenter(), a = new google.maps.Map(a, {
      center: b ? new google.maps.LatLng(b.lat, b.lon)  : new google.maps.LatLng(0, 0),
      zoom: this.map.getZoom() || 0,
      mapTypeId: this.type,
      disableDefaultUI: !0,
      keyboardShortcuts: !1,
      draggable: !1,
      disableDoubleClickZoom: !0,
      scrollwheel: !1,
      streetViewControl: !1
    }), b = {
      mapObject: a,
      count: 1
    }, OpenLayers.Layer.Google.cache[this.map.id] = b, this.repositionListener = google.maps.event.addListenerOnce(a, 'center_changed', OpenLayers.Function.bind(this.repositionMapElements, this)));
    this.mapObject = a;
    this.setGMapVisibility(this.visibility)
  },
  repositionMapElements: function () {
    google.maps.event.trigger(this.mapObject, 'resize');
    var a = this.mapObject.getDiv().firstChild;
    if (!a || 3 > a.childNodes.length) return this.repositionTimer = window.setTimeout(OpenLayers.Function.bind(this.repositionMapElements, this), 250),
    !1;
    for (var b = OpenLayers.Layer.Google.cache[this.map.id], c = this.map.viewPortDiv, d = a.children.length - 1; 0 <= d; --d) {
      if (1000001 == a.children[d].style.zIndex) {
        var e = a.children[d];
        c.appendChild(e);
        e.style.zIndex = '1100';
        e.style.bottom = '';
        e.className = 'olLayerGoogleCopyright olLayerGoogleV3';
        e.style.display = '';
        b.termsOfUse = e
      }
      1000000 == a.children[d].style.zIndex && (e = a.children[d], c.appendChild(e), e.style.zIndex = '1100', e.style.bottom = '', e.className = 'olLayerGooglePoweredBy olLayerGoogleV3 gmnoprint', e.style.display = '', b.poweredBy = e);
      10000002 == a.children[d].style.zIndex && c.appendChild(a.children[d])
    }
    this.setGMapVisibility(this.visibility)
  },
  onMapResize: function () {
    if (this.visibility) google.maps.event.trigger(this.mapObject, 'resize');
     else {
      var a = OpenLayers.Layer.Google.cache[this.map.id];
      if (!a.resized) {
        var b = this;
        google.maps.event.addListenerOnce(this.mapObject, 'tilesloaded', function () {
          google.maps.event.trigger(b.mapObject, 'resize');
          b.moveTo(b.map.getCenter(), b.map.getZoom());
          delete a.resized
        })
      }
      a.resized = !0
    }
  },
  setGMapVisibility: function (a) {
    var b = OpenLayers.Layer.Google.cache[this.map.id];
    if (b) {
      for (var c = this.type, d = this.map.layers, e, f = d.length - 1; 0 <= f; --f) if (e = d[f], e instanceof OpenLayers.Layer.Google && !0 === e.visibility && !0 === e.inRange) {
        c = e.type;
        a = !0;
        break
      }
      d = this.mapObject.getDiv();
      !0 === a ? (this.mapObject.setMapTypeId(c), d.style.left = '', b.termsOfUse && b.termsOfUse.style && (b.termsOfUse.style.left = '', b.termsOfUse.style.display = '', b.poweredBy.style.display = ''), b.displayed = this.id)  : (delete b.displayed, d.style.left = '-9999px', b.termsOfUse && b.termsOfUse.style && (b.termsOfUse.style.display = 'none', b.termsOfUse.style.left = '-9999px', b.poweredBy.style.display = 'none'))
    }
  },
  getMapContainer: function () {
    return this.mapObject.getDiv()
  },
  getMapObjectBoundsFromOLBounds: function (a) {
    var b = null;
    null != a && (b = this.sphericalMercator ? this.inverseMercator(a.bottom, a.left)  : new OpenLayers.LonLat(a.bottom, a.left), a = this.sphericalMercator ? this.inverseMercator(a.top, a.right)  : new OpenLayers.LonLat(a.top, a.right), b = new google.maps.LatLngBounds(new google.maps.LatLng(b.lat, b.lon), new google.maps.LatLng(a.lat, a.lon)));
    return b
  },
  getMapObjectLonLatFromMapObjectPixel: function (a) {
    var b = this.map.getSize(),
    c = this.getLongitudeFromMapObjectLonLat(this.mapObject.center),
    d = this.getLatitudeFromMapObjectLonLat(this.mapObject.center),
    e = this.map.getResolution(),
    a = new OpenLayers.LonLat(c + (a.x - b.w / 2) * e, d - (a.y - b.h / 2) * e);
    this.wrapDateLine && (a = a.wrapDateLine(this.maxExtent));
    return this.getMapObjectLonLatFromLonLat(a.lon, a.lat)
  },
  getMapObjectPixelFromMapObjectLonLat: function (a) {
    var b = this.getLongitudeFromMapObjectLonLat(a),
    a = this.getLatitudeFromMapObjectLonLat(a),
    c = this.map.getResolution(),
    d = this.map.getExtent();
    return this.getMapObjectPixelFromXY(1 / c * (b - d.left), 1 / c * (d.top - a))
  },
  setMapObjectCenter: function (a, b) {
    if (!1 === this.animationEnabled && b != this.mapObject.zoom) {
      var c = this.getMapContainer();
      google.maps.event.addListenerOnce(this.mapObject, 'idle', function () {
        c.style.visibility = ''
      });
      c.style.visibility = 'hidden'
    }
    this.mapObject.setOptions({
      center: a,
      zoom: b
    })
  },
  getMapObjectZoomFromMapObjectBounds: function (a) {
    return this.mapObject.getBoundsZoomLevel(a)
  },
  getMapObjectLonLatFromLonLat: function (a, b) {
    var c;
    this.sphericalMercator ? (c = this.inverseMercator(a, b), c = new google.maps.LatLng(c.lat, c.lon))  : c = new google.maps.LatLng(b, a);
    return c
  },
  getMapObjectPixelFromXY: function (a, b) {
    return new google.maps.Point(a, b)
  },
  destroy: function () {
    this.repositionListener && google.maps.event.removeListener(this.repositionListener);
    this.repositionTimer && window.clearTimeout(this.repositionTimer);
    OpenLayers.Layer.Google.prototype.destroy.apply(this, arguments)
  }
};
OpenLayers.Format.WPSDescribeProcess = OpenLayers.Class(OpenLayers.Format.XML, {
  VERSION: '1.0.0',
  namespaces: {
    wps: 'http://www.opengis.net/wps/1.0.0',
    ows: 'http://www.opengis.net/ows/1.1',
    xsi: 'http://www.w3.org/2001/XMLSchema-instance'
  },
  schemaLocation: 'http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd',
  defaultPrefix: 'wps',
  regExes: {
    trimSpace: /^\s*|\s*$/g,
    removeSpace: /\s*/g,
    splitSpace: /\s+/,
    trimComma: /\s*,\s*/g
  },
  read: function (a) {
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    a && 9 == a.nodeType && (a = a.documentElement);
    var b = {
    };
    this.readNode(a, b);
    return b
  },
  readers: {
    wps: {
      ProcessDescriptions: function (a, b) {
        b.processDescriptions = {
        };
        this.readChildNodes(a, b.processDescriptions)
      },
      ProcessDescription: function (a, b) {
        var c = {
          processVersion: this.getAttributeNS(a, this.namespaces.wps, 'processVersion'),
          statusSupported: 'true' === a.getAttribute('statusSupported'),
          storeSupported: 'true' === a.getAttribute('storeSupported')
        };
        this.readChildNodes(a, c);
        b[c.identifier] = c
      },
      DataInputs: function (a, b) {
        b.dataInputs = [
        ];
        this.readChildNodes(a, b.dataInputs)
      },
      ProcessOutputs: function (a, b) {
        b.processOutputs = [
        ];
        this.readChildNodes(a, b.processOutputs)
      },
      Output: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        b.push(c)
      },
      ComplexOutput: function (a, b) {
        b.complexOutput = {
        };
        this.readChildNodes(a, b.complexOutput)
      },
      Input: function (a, b) {
        var c = {
          maxOccurs: parseInt(a.getAttribute('maxOccurs')),
          minOccurs: parseInt(a.getAttribute('minOccurs'))
        };
        this.readChildNodes(a, c);
        b.push(c)
      },
      BoundingBoxData: function (a, b) {
        b.boundingBoxData = {
        };
        this.readChildNodes(a, b.boundingBoxData)
      },
      CRS: function (a, b) {
        b.CRSs || (b.CRSs = {
        });
        b.CRSs[this.getChildValue(a)] = !0
      },
      LiteralData: function (a, b) {
        b.literalData = {
        };
        this.readChildNodes(a, b.literalData)
      },
      ComplexData: function (a, b) {
        b.complexData = {
        };
        this.readChildNodes(a, b.complexData)
      },
      Default: function (a, b) {
        b['default'] = {
        };
        this.readChildNodes(a, b['default'])
      },
      Supported: function (a, b) {
        b.supported = {
        };
        this.readChildNodes(a, b.supported)
      },
      Format: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        b.formats || (b.formats = {
        });
        b.formats[c.mimeType] = !0
      },
      MimeType: function (a, b) {
        b.mimeType = this.getChildValue(a)
      }
    },
    ows: OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers.ows
  },
  CLASS_NAME: 'OpenLayers.Format.WPSDescribeProcess'
});
OpenLayers.Format.CSWGetRecords.v2_0_2 = OpenLayers.Class(OpenLayers.Format.XML, {
  namespaces: {
    csw: 'http://www.opengis.net/cat/csw/2.0.2',
    dc: 'http://purl.org/dc/elements/1.1/',
    dct: 'http://purl.org/dc/terms/',
    gmd: 'http://www.isotc211.org/2005/gmd',
    geonet: 'http://www.fao.org/geonetwork',
    ogc: 'http://www.opengis.net/ogc',
    ows: 'http://www.opengis.net/ows',
    xlink: 'http://www.w3.org/1999/xlink',
    xsi: 'http://www.w3.org/2001/XMLSchema-instance'
  },
  defaultPrefix: 'csw',
  version: '2.0.2',
  schemaLocation: 'http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd',
  requestId: null,
  resultType: null,
  outputFormat: null,
  outputSchema: null,
  startPosition: null,
  maxRecords: null,
  DistributedSearch: null,
  ResponseHandler: null,
  Query: null,
  regExes: {
    trimSpace: /^\s*|\s*$/g,
    removeSpace: /\s*/g,
    splitSpace: /\s+/,
    trimComma: /\s*,\s*/g
  },
  initialize: function (a) {
    OpenLayers.Format.XML.prototype.initialize.apply(this, [
      a
    ])
  },
  read: function (a) {
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    a && 9 == a.nodeType && (a = a.documentElement);
    var b = {
    };
    this.readNode(a, b);
    return b
  },
  readers: {
    csw: {
      GetRecordsResponse: function (a, b) {
        b.records = [
        ];
        this.readChildNodes(a, b);
        var c = this.getAttributeNS(a, '', 'version');
        '' != c && (b.version = c)
      },
      RequestId: function (a, b) {
        b.RequestId = this.getChildValue(a)
      },
      SearchStatus: function (a, b) {
        b.SearchStatus = {
        };
        var c = this.getAttributeNS(a, '', 'timestamp');
        '' != c && (b.SearchStatus.timestamp = c)
      },
      SearchResults: function (a, b) {
        this.readChildNodes(a, b);
        for (var c = a.attributes, d = {
        }, e = 0, f = c.length; e < f; ++e) d[c[e].name] = 'numberOfRecordsMatched' == c[e].name || 'numberOfRecordsReturned' ==
        c[e].name || 'nextRecord' == c[e].name ? parseInt(c[e].nodeValue)  : c[e].nodeValue;
        b.SearchResults = d
      },
      SummaryRecord: function (a, b) {
        var c = {
          type: 'SummaryRecord'
        };
        this.readChildNodes(a, c);
        b.records.push(c)
      },
      BriefRecord: function (a, b) {
        var c = {
          type: 'BriefRecord'
        };
        this.readChildNodes(a, c);
        b.records.push(c)
      },
      DCMIRecord: function (a, b) {
        var c = {
          type: 'DCMIRecord'
        };
        this.readChildNodes(a, c);
        b.records.push(c)
      },
      Record: function (a, b) {
        var c = {
          type: 'Record'
        };
        this.readChildNodes(a, c);
        b.records.push(c)
      },
      '*': function (a, b) {
        var c = a.localName || a.nodeName.split(':').pop();
        b[c] = this.getChildValue(a)
      }
    },
    geonet: {
      info: function (a, b) {
        var c = {
        };
        this.readChildNodes(a, c);
        b.gninfo = c
      }
    },
    dc: {
      '*': function (a, b) {
        var c = a.localName || a.nodeName.split(':').pop();
        OpenLayers.Util.isArray(b[c]) || (b[c] = [
        ]);
        for (var d = {
        }, e = a.attributes, f = 0, g = e.length; f < g; ++f) d[e[f].name] = e[f].nodeValue;
        d.value = this.getChildValue(a);
        '' != d.value && b[c].push(d)
      }
    },
    dct: {
      '*': function (a, b) {
        var c = a.localName || a.nodeName.split(':').pop();
        OpenLayers.Util.isArray(b[c]) || (b[c] = [
        ]);
        b[c].push(this.getChildValue(a))
      }
    },
    ows: OpenLayers.Util.applyDefaults({
      BoundingBox: function (a, b) {
        b.bounds && (b.BoundingBox = [
          {
            crs: b.projection,
            value: [
              b.bounds.left,
              b.bounds.bottom,
              b.bounds.right,
              b.bounds.top
            ]
          }
        ], delete b.projection, delete b.bounds);
        OpenLayers.Format.OWSCommon.v1_0_0.prototype.readers.ows.BoundingBox.apply(this, arguments)
      }
    }, OpenLayers.Format.OWSCommon.v1_0_0.prototype.readers.ows)
  },
  write: function (a) {
    a = this.writeNode('csw:GetRecords', a);
    a.setAttribute('xmlns:gmd', this.namespaces.gmd);
    return OpenLayers.Format.XML.prototype.write.apply(this, [
      a
    ])
  },
  writers: {
    csw: {
      GetRecords: function (a) {
        a || (a = {
        });
        var b = this.createElementNSPlus('csw:GetRecords', {
          attributes: {
            service: 'CSW',
            version: this.version,
            requestId: a.requestId || this.requestId,
            resultType: a.resultType || this.resultType,
            outputFormat: a.outputFormat || this.outputFormat,
            outputSchema: a.outputSchema || this.outputSchema,
            startPosition: a.startPosition || this.startPosition,
            maxRecords: a.maxRecords || this.maxRecords
          }
        });
        if (a.DistributedSearch || this.DistributedSearch) this.writeNode('csw:DistributedSearch', a.DistributedSearch || this.DistributedSearch, b);
        var c = a.ResponseHandler || this.ResponseHandler;
        if (OpenLayers.Util.isArray(c) && 0 < c.length) for (var d = 0, e = c.length; d < e; d++) this.writeNode('csw:ResponseHandler', c[d], b);
        this.writeNode('Query', a.Query || this.Query, b);
        return b
      },
      DistributedSearch: function (a) {
        return this.createElementNSPlus('csw:DistributedSearch', {
          attributes: {
            hopCount: a.hopCount
          }
        })
      },
      ResponseHandler: function (a) {
        return this.createElementNSPlus('csw:ResponseHandler', {
          value: a.value
        })
      },
      Query: function (a) {
        a || (a = {
        });
        var b = this.createElementNSPlus('csw:Query', {
          attributes: {
            typeNames: a.typeNames || 'csw:Record'
          }
        }),
        c = a.ElementName;
        if (OpenLayers.Util.isArray(c) && 0 < c.length) for (var d = 0, e = c.length; d < e; d++) this.writeNode('csw:ElementName', c[d], b);
         else this.writeNode('csw:ElementSetName', a.ElementSetName || {
          value: 'summary'
        }, b);
        a.Constraint && this.writeNode('csw:Constraint', a.Constraint, b);
        a.SortBy && this.writeNode('ogc:SortBy', a.SortBy, b);
        return b
      },
      ElementName: function (a) {
        return this.createElementNSPlus('csw:ElementName', {
          value: a.value
        })
      },
      ElementSetName: function (a) {
        return this.createElementNSPlus('csw:ElementSetName', {
          attributes: {
            typeNames: a.typeNames
          },
          value: a.value
        })
      },
      Constraint: function (a) {
        var b = this.createElementNSPlus('csw:Constraint', {
          attributes: {
            version: a.version
          }
        });
        if (a.Filter) {
          var c = new OpenLayers.Format.Filter({
            version: a.version
          });
          b.appendChild(c.write(a.Filter))
        } else a.CqlText && (a = this.createElementNSPlus('CqlText', {
          value: a.CqlText.value
        }), b.appendChild(a));
        return b
      }
    },
    ogc: OpenLayers.Format.Filter.v1_1_0.prototype.writers.ogc
  },
  CLASS_NAME: 'OpenLayers.Format.CSWGetRecords.v2_0_2'
});
OpenLayers.Marker.Box = OpenLayers.Class(OpenLayers.Marker, {
  bounds: null,
  div: null,
  initialize: function (a, b, c) {
    this.bounds = a;
    this.div = OpenLayers.Util.createDiv();
    this.div.style.overflow = 'hidden';
    this.events = new OpenLayers.Events(this, this.div);
    this.setBorder(b, c)
  },
  destroy: function () {
    this.div = this.bounds = null;
    OpenLayers.Marker.prototype.destroy.apply(this, arguments)
  },
  setBorder: function (a, b) {
    a || (a = 'red');
    b || (b = 2);
    this.div.style.border = b + 'px solid ' + a
  },
  draw: function (a, b) {
    OpenLayers.Util.modifyDOMElement(this.div, null, a, b);
    return this.div
  },
  onScreen: function () {
    var a = !1;
    this.map && (a = this.map.getExtent().containsBounds(this.bounds, !0, !0));
    return a
  },
  display: function (a) {
    this.div.style.display = a ? '' : 'none'
  },
  CLASS_NAME: 'OpenLayers.Marker.Box'
});
OpenLayers.Format.Text = OpenLayers.Class(OpenLayers.Format, {
  defaultStyle: null,
  extractStyles: !0,
  initialize: function (a) {
    a = a || {
    };
    !1 !== a.extractStyles && (a.defaultStyle = {
      externalGraphic: OpenLayers.Util.getImageLocation('marker.png'),
      graphicWidth: 21,
      graphicHeight: 25,
      graphicXOffset: - 10.5,
      graphicYOffset: - 12.5
    });
    OpenLayers.Format.prototype.initialize.apply(this, [
      a
    ])
  },
  read: function (a) {
    for (var a = a.split('\n'), b, c = [
    ], d = 0; d < a.length - 1; d++) {
      var e = a[d].replace(/^\s*/, '').replace(/\s*$/, '');
      if ('#' != e.charAt(0)) if (b) {
        for (var e = e.split('\t'), f = new OpenLayers.Geometry.Point(0, 0), g = {
        }, h = this.defaultStyle ? OpenLayers.Util.applyDefaults({
        }, this.defaultStyle)  : null, i = !1, j = 0; j < e.length; j++) if (e[j]) if ('point' == b[j]) i = e[j].split(','),
        f.y = parseFloat(i[0]),
        f.x = parseFloat(i[1]),
        i = !0;
         else if ('lat' == b[j]) f.y = parseFloat(e[j]),
        i = !0;
         else if ('lon' == b[j]) f.x = parseFloat(e[j]),
        i = !0;
         else if ('title' == b[j]) g.title = e[j];
         else if ('image' == b[j] || 'icon' == b[j] && h) h.externalGraphic = e[j];
         else if ('iconSize' == b[j] && h) {
          var k = e[j].split(',');
          h.graphicWidth = parseFloat(k[0]);
          h.graphicHeight = parseFloat(k[1])
        } else 'iconOffset' == b[j] && h ? (k = e[j].split(','), h.graphicXOffset = parseFloat(k[0]), h.graphicYOffset = parseFloat(k[1]))  : 'description' == b[j] ? g.description = e[j] : 'overflow' == b[j] ? g.overflow = e[j] : g[b[j]] = e[j];
        i && (this.internalProjection && this.externalProjection && f.transform(this.externalProjection, this.internalProjection), e = new OpenLayers.Feature.Vector(f, g, h), c.push(e))
      } else b = e.split('\t')
    }
    return c
  },
  CLASS_NAME: 'OpenLayers.Format.Text'
});
OpenLayers.Layer.Text = OpenLayers.Class(OpenLayers.Layer.Markers, {
  location: null,
  features: null,
  formatOptions: null,
  selectedFeature: null,
  initialize: function (a, b) {
    OpenLayers.Layer.Markers.prototype.initialize.apply(this, arguments);
    this.features = [
    ]
  },
  destroy: function () {
    OpenLayers.Layer.Markers.prototype.destroy.apply(this, arguments);
    this.clearFeatures();
    this.features = null
  },
  loadText: function () {
    !this.loaded && null != this.location && (this.events.triggerEvent('loadstart'), OpenLayers.Request.GET({
      url: this.location,
      success: this.parseData,
      failure: function () {
        this.events.triggerEvent('loadend')
      },
      scope: this
    }), this.loaded = !0)
  },
  moveTo: function (a, b, c) {
    OpenLayers.Layer.Markers.prototype.moveTo.apply(this, arguments);
    this.visibility && !this.loaded && this.loadText()
  },
  parseData: function (a) {
    var a = a.responseText,
    b = {
    };
    OpenLayers.Util.extend(b, this.formatOptions);
    this.map && !this.projection.equals(this.map.getProjectionObject()) && (b.externalProjection = this.projection, b.internalProjection = this.map.getProjectionObject());
    for (var a = (new OpenLayers.Format.Text(b)).read(a), b = 0, c = a.length; b < c; b++) {
      var d = {
      },
      e = a[b],
      f,
      g,
      h;
      f = new OpenLayers.LonLat(e.geometry.x, e.geometry.y);
      e.style.graphicWidth && e.style.graphicHeight && (g = new OpenLayers.Size(e.style.graphicWidth, e.style.graphicHeight));
      void 0 !== e.style.graphicXOffset && void 0 !== e.style.graphicYOffset && (h = new OpenLayers.Pixel(e.style.graphicXOffset, e.style.graphicYOffset));
      null != e.style.externalGraphic ? d.icon = new OpenLayers.Icon(e.style.externalGraphic, g, h)  : (d.icon = OpenLayers.Marker.defaultIcon(), null != g && d.icon.setSize(g));
      null != e.attributes.title && null != e.attributes.description && (d.popupContentHTML = '<h2>' + e.attributes.title + '</h2><p>' + e.attributes.description + '</p>');
      d.overflow = e.attributes.overflow || 'auto';
      d = new OpenLayers.Feature(this, f, d);
      this.features.push(d);
      f = d.createMarker();
      null != e.attributes.title && null != e.attributes.description && f.events.register('click', d, this.markerClick);
      this.addMarker(f)
    }
    this.events.triggerEvent('loadend')
  },
  markerClick: function (a) {
    var b = this == this.layer.selectedFeature;
    this.layer.selectedFeature = !b ? this : null;
    for (var c = 0, d = this.layer.map.popups.length; c < d; c++) this.layer.map.removePopup(this.layer.map.popups[c]);
    b || this.layer.map.addPopup(this.createPopup());
    OpenLayers.Event.stop(a)
  },
  clearFeatures: function () {
    if (null != this.features) for (; 0 < this.features.length; ) {
      var a = this.features[0];
      OpenLayers.Util.removeItem(this.features, a);
      a.destroy()
    }
  },
  CLASS_NAME: 'OpenLayers.Layer.Text'
});
OpenLayers.Control.SLDSelect = OpenLayers.Class(OpenLayers.Control, {
  clearOnDeactivate: !1,
  layers: null,
  callbacks: null,
  selectionSymbolizer: {
    Polygon: {
      fillColor: '#FF0000',
      stroke: !1
    },
    Line: {
      strokeColor: '#FF0000',
      strokeWidth: 2
    },
    Point: {
      graphicName: 'square',
      fillColor: '#FF0000',
      pointRadius: 5
    }
  },
  layerOptions: null,
  handlerOptions: null,
  sketchStyle: null,
  wfsCache: {
  },
  layerCache: {
  },
  initialize: function (a, b) {
    OpenLayers.Control.prototype.initialize.apply(this, [
      b
    ]);
    this.callbacks = OpenLayers.Util.extend({
      done: this.select,
      click: this.select
    }, this.callbacks);
    this.handlerOptions = this.handlerOptions || {
    };
    this.layerOptions = OpenLayers.Util.applyDefaults(this.layerOptions, {
      displayInLayerSwitcher: !1,
      tileOptions: {
        maxGetUrlLength: 2048
      }
    });
    this.sketchStyle && (this.handlerOptions.layerOptions = OpenLayers.Util.applyDefaults(this.handlerOptions.layerOptions, {
      styleMap: new OpenLayers.StyleMap({
        'default': this.sketchStyle
      })
    }));
    this.handler = new a(this, this.callbacks, this.handlerOptions)
  },
  destroy: function () {
    for (var a in this.layerCache) delete this.layerCache[a];
    for (a in this.wfsCache) delete this.wfsCache[a];
    OpenLayers.Control.prototype.destroy.apply(this, arguments)
  },
  coupleLayerVisiblity: function (a) {
    this.setVisibility(a.object.getVisibility())
  },
  createSelectionLayer: function (a) {
    var b;
    if (this.layerCache[a.id]) b = this.layerCache[a.id];
     else {
      b = new OpenLayers.Layer.WMS(a.name, a.url, a.params, OpenLayers.Util.applyDefaults(this.layerOptions, a.getOptions()));
      this.layerCache[a.id] = b;
      if (!1 === this.layerOptions.displayInLayerSwitcher) a.events.on({
        visibilitychanged: this.coupleLayerVisiblity,
        scope: b
      });
      this.map.addLayer(b)
    }
    return b
  },
  createSLD: function (a, b, c) {
    for (var d = {
      version: '1.0.0',
      namedLayers: {
      }
    }, e = ('' + a.params.LAYERS).split(','), f = 0, g = e.length; f < g; f++) {
      var h = e[f];
      d.namedLayers[h] = {
        name: h,
        userStyles: [
        ]
      };
      var i = this.selectionSymbolizer,
      j = c[f];
      0 <= j.type.indexOf('Polygon') ? i = {
        Polygon: this.selectionSymbolizer.Polygon
      }
       : 0 <= j.type.indexOf('LineString') ? i = {
        Line: this.selectionSymbolizer.Line
      }
       : 0 <= j.type.indexOf('Point') && (i = {
        Point: this.selectionSymbolizer.Point
      });
      d.namedLayers[h].userStyles.push({
        name: 'default',
        rules: [
          new OpenLayers.Rule({
            symbolizer: i,
            filter: b[f],
            maxScaleDenominator: a.options.minScale
          })
        ]
      })
    }
    return (new OpenLayers.Format.SLD({
      srsName: this.map.getProjection()
    })).write(d)
  },
  parseDescribeLayer: function (a) {
    var b = new OpenLayers.Format.WMSDescribeLayer,
    c = a.responseXML;
    if (!c || !c.documentElement) c = a.responseText;
    for (var a = b.read(c), b = [
    ], c = null, d = 0, e = a.length; d < e; d++) 'WFS' == a[d].owsType && (b.push(a[d].typeName), c = a[d].owsURL);
    OpenLayers.Request.GET({
      url: c,
      params: {
        SERVICE: 'WFS',
        TYPENAME: b.toString(),
        REQUEST: 'DescribeFeatureType',
        VERSION: '1.0.0'
      },
      callback: function (a) {
        var b = new OpenLayers.Format.WFSDescribeFeatureType,
        c = a.responseXML;
        if (!c || !c.documentElement) c = a.responseText;
        this.control.wfsCache[this.layer.id] = b.read(c);
        this.control._queue && this.control.applySelection()
      },
      scope: this
    })
  },
  getGeometryAttributes: function (a) {
    for (var b = [
    ], a = this.wfsCache[a.id], c = 0, d = a.featureTypes.length; c < d; c++) for (var e = a.featureTypes[c].properties, f = 0, g = e.length; f < g; f++) {
      var h = e[f],
      i = h.type;
      (0 <= i.indexOf('LineString') || 0 <= i.indexOf('GeometryAssociationType') || 0 <= i.indexOf('GeometryPropertyType') || 0 <= i.indexOf('Point') || 0 <= i.indexOf('Polygon')) && b.push(h)
    }
    return b
  },
  activate: function () {
    var a = OpenLayers.Control.prototype.activate.call(this);
    if (a) for (var b = 0, c = this.layers.length; b < c; b++) {
      var d = this.layers[b];
      d && !this.wfsCache[d.id] && OpenLayers.Request.GET({
        url: d.url,
        params: {
          SERVICE: 'WMS',
          VERSION: d.params.VERSION,
          LAYERS: d.params.LAYERS,
          REQUEST: 'DescribeLayer'
        },
        callback: this.parseDescribeLayer,
        scope: {
          layer: d,
          control: this
        }
      })
    }
    return a
  },
  deactivate: function () {
    var a = OpenLayers.Control.prototype.deactivate.call(this);
    if (a) for (var b = 0, c = this.layers.length; b < c; b++) {
      var d = this.layers[b];
      if (d && !0 === this.clearOnDeactivate) {
        var e = this.layerCache,
        f = e[d.id];
        f && (d.events.un({
          visibilitychanged: this.coupleLayerVisiblity,
          scope: f
        }), f.destroy(), delete e[d.id])
      }
    }
    return a
  },
  setLayers: function (a) {
    this.active ? (this.deactivate(), this.layers = a, this.activate())  : this.layers = a
  },
  createFilter: function (a, b) {
    var c = null;
    this.handler instanceof OpenLayers.Handler.RegularPolygon ? c = !0 === this.handler.irregular ?
    new OpenLayers.Filter.Spatial({
      type: OpenLayers.Filter.Spatial.BBOX,
      property: a.name,
      value: b.getBounds()
    })  : new OpenLayers.Filter.Spatial({
      type: OpenLayers.Filter.Spatial.INTERSECTS,
      property: a.name,
      value: b
    })  : this.handler instanceof OpenLayers.Handler.Polygon ? c = new OpenLayers.Filter.Spatial({
      type: OpenLayers.Filter.Spatial.INTERSECTS,
      property: a.name,
      value: b
    })  : this.handler instanceof OpenLayers.Handler.Path ? c = 0 <= a.type.indexOf('Point') ? new OpenLayers.Filter.Spatial({
      type: OpenLayers.Filter.Spatial.DWITHIN,
      property: a.name,
      distance: 0.01 * this.map.getExtent().getWidth(),
      distanceUnits: this.map.getUnits(),
      value: b
    })  : new OpenLayers.Filter.Spatial({
      type: OpenLayers.Filter.Spatial.INTERSECTS,
      property: a.name,
      value: b
    })  : this.handler instanceof OpenLayers.Handler.Click && (c = 0 <= a.type.indexOf('Polygon') ? new OpenLayers.Filter.Spatial({
      type: OpenLayers.Filter.Spatial.INTERSECTS,
      property: a.name,
      value: b
    })  : new OpenLayers.Filter.Spatial({
      type: OpenLayers.Filter.Spatial.DWITHIN,
      property: a.name,
      distance: 0.01 * this.map.getExtent().getWidth(),
      distanceUnits: this.map.getUnits(),
      value: b
    }));
    return c
  },
  select: function (a) {
    this._queue = function () {
      for (var b = 0, c = this.layers.length; b < c; b++) {
        for (var d = this.layers[b], e = this.getGeometryAttributes(d), f = [
        ], g = 0, h = e.length; g < h; g++) {
          var i = e[g];
          if (null !== i) {
            if (!(a instanceof OpenLayers.Geometry)) {
              var j = this.map.getLonLatFromPixel(a.xy);
              a = new OpenLayers.Geometry.Point(j.lon, j.lat)
            }
            i = this.createFilter(i, a);
            null !== i && f.push(i)
          }
        }
        g = this.createSelectionLayer(d);
        e = this.createSLD(d, f, e);
        this.events.triggerEvent('selected', {
          layer: d,
          filters: f
        });
        g.mergeNewParams({
          SLD_BODY: e
        });
        delete this._queue
      }
    };
    this.applySelection()
  },
  applySelection: function () {
    for (var a = !0, b = 0, c = this.layers.length; b < c; b++) if (!this.wfsCache[this.layers[b].id]) {
      a = !1;
      break
    }
    a && this._queue.call(this)
  },
  CLASS_NAME: 'OpenLayers.Control.SLDSelect'
});
OpenLayers.Control.Scale = OpenLayers.Class(OpenLayers.Control, {
  element: null,
  geodesic: !1,
  initialize: function (a, b) {
    OpenLayers.Control.prototype.initialize.apply(this, [
      b
    ]);
    this.element = OpenLayers.Util.getElement(a)
  },
  draw: function () {
    OpenLayers.Control.prototype.draw.apply(this, arguments);
    this.element || (this.element = document.createElement('div'), this.div.appendChild(this.element));
    this.map.events.register('moveend', this, this.updateScale);
    this.updateScale();
    return this.div
  },
  updateScale: function () {
    var a;
    if (!0 === this.geodesic) {
      if (!this.map.getUnits()) return;
      a = OpenLayers.INCHES_PER_UNIT;
      a = (this.map.getGeodesicPixelSize().w || 0.000001) * a.km * OpenLayers.DOTS_PER_INCH
    } else a = this.map.getScale();
    a && (a = 9500 <= a && 950000 >= a ? Math.round(a / 1000) + 'K' : 950000 <= a ? Math.round(a / 1000000) + 'M' : Math.round(a), this.element.innerHTML = OpenLayers.i18n('Scale = 1 : ${scaleDenom}', {
      scaleDenom: a
    }))
  },
  CLASS_NAME: 'OpenLayers.Control.Scale'
});
OpenLayers.Layer.MapGuide = OpenLayers.Class(OpenLayers.Layer.Grid, {
  isBaseLayer: !0,
  useHttpTile: !1,
  singleTile: !1,
  useOverlay: !1,
  useAsyncOverlay: !0,
  TILE_PARAMS: {
    operation: 'GETTILEIMAGE',
    version: '1.2.0'
  },
  SINGLE_TILE_PARAMS: {
    operation: 'GETMAPIMAGE',
    format: 'PNG',
    locale: 'en',
    clip: '1',
    version: '1.0.0'
  },
  OVERLAY_PARAMS: {
    operation: 'GETDYNAMICMAPOVERLAYIMAGE',
    format: 'PNG',
    locale: 'en',
    clip: '1',
    version: '2.0.0'
  },
  FOLDER_PARAMS: {
    tileColumnsPerFolder: 30,
    tileRowsPerFolder: 30,
    format: 'png',
    querystring: null
  },
  defaultSize: new OpenLayers.Size(300, 300),
  tileOriginCorner: 'tl',
  initialize: function (a, b, c, d) {
    OpenLayers.Layer.Grid.prototype.initialize.apply(this, arguments);
    if (null == d || null == d.isBaseLayer) this.isBaseLayer = 'true' != this.transparent && !0 != this.transparent;
    d && null != d.useOverlay && (this.useOverlay = d.useOverlay);
    this.singleTile ? this.useOverlay ? (OpenLayers.Util.applyDefaults(this.params, this.OVERLAY_PARAMS), this.useAsyncOverlay || (this.params.version = '1.0.0'))  : OpenLayers.Util.applyDefaults(this.params, this.SINGLE_TILE_PARAMS)  : (this.useHttpTile ?
    OpenLayers.Util.applyDefaults(this.params, this.FOLDER_PARAMS)  : OpenLayers.Util.applyDefaults(this.params, this.TILE_PARAMS), this.setTileSize(this.defaultSize))
  },
  clone: function (a) {
    null == a && (a = new OpenLayers.Layer.MapGuide(this.name, this.url, this.params, this.getOptions()));
    return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [
      a
    ])
  },
  getURL: function (a) {
    var b;
    b = a.getCenterLonLat();
    var c = this.map.getSize();
    this.singleTile ? (a = {
      setdisplaydpi: OpenLayers.DOTS_PER_INCH,
      setdisplayheight: c.h * this.ratio,
      setdisplaywidth: c.w * this.ratio,
      setviewcenterx: b.lon,
      setviewcentery: b.lat,
      setviewscale: this.map.getScale()
    }, this.useOverlay && !this.useAsyncOverlay && (b = {
    }, b = OpenLayers.Util.extend(b, a), b.operation = 'GETVISIBLEMAPEXTENT', b.version = '1.0.0', b.session = this.params.session, b.mapName = this.params.mapName, b.format = 'text/xml', b = this.getFullRequestString(b), OpenLayers.Request.GET({
      url: b,
      async: !1
    })), b = this.getFullRequestString(a))  : (c = this.map.getResolution(), b = Math.floor((a.left - this.maxExtent.left) / c), b = Math.round(b / this.tileSize.w), a = Math.floor((this.maxExtent.top - a.top) / c), a = Math.round(a / this.tileSize.h), b = this.useHttpTile ? this.getImageFilePath({
      tilecol: b,
      tilerow: a,
      scaleindex: this.resolutions.length - this.map.zoom - 1
    })  : this.getFullRequestString({
      tilecol: b,
      tilerow: a,
      scaleindex: this.resolutions.length - this.map.zoom - 1
    }));
    return b
  },
  getFullRequestString: function (a, b) {
    var c = null == b ? this.url : b;
    'object' == typeof c && (c = c[Math.floor(Math.random() * c.length)]);
    var d = c,
    e = OpenLayers.Util.extend({
    }, this.params),
    e = OpenLayers.Util.extend(e, a),
    f = OpenLayers.Util.upperCaseObject(OpenLayers.Util.getParameters(c)),
    g;
    for (g in e) g.toUpperCase() in f && delete e[g];
    e = OpenLayers.Util.getParameterString(e);
    e = e.replace(/,/g, '+');
    '' != e && (f = c.charAt(c.length - 1), d = '&' == f || '?' == f ? d + e : - 1 == c.indexOf('?') ? d + ('?' + e)  : d + ('&' + e));
    return d
  },
  getImageFilePath: function (a, b) {
    var c = null == b ? this.url : b;
    'object' == typeof c && (c = c[Math.floor(Math.random() * c.length)]);
    var d = '',
    e = '';
    0 > a.tilerow && (d = '-');
    d = 0 == a.tilerow ? d + '0' : d + Math.floor(Math.abs(a.tilerow / this.params.tileRowsPerFolder)) * this.params.tileRowsPerFolder;
    0 > a.tilecol && (e = '-');
    e = 0 == a.tilecol ? e + '0' : e + Math.floor(Math.abs(a.tilecol / this.params.tileColumnsPerFolder)) * this.params.tileColumnsPerFolder;
    d = '/S' + Math.floor(a.scaleindex) + '/' + this.params.basemaplayergroupname + '/R' + d + '/C' + e + '/' + a.tilerow % this.params.tileRowsPerFolder + '_' + a.tilecol % this.params.tileColumnsPerFolder + '.' + this.params.format;
    this.params.querystring && (d += '?' + this.params.querystring);
    return c + d
  },
  calculateGridLayout: function (a, b, c) {
    var d = c * this.tileSize.w,
    c = c * this.tileSize.h,
    e = a.left - b.lon,
    f = Math.floor(e / d) - this.buffer,
    a = b.lat - a.top + c,
    g = Math.floor(a / c) - this.buffer;
    return {
      tilelon: d,
      tilelat: c,
      tileoffsetlon: b.lon + f * d,
      tileoffsetlat: b.lat - c * g,
      tileoffsetx: - (e / d - f) * this.tileSize.w,
      tileoffsety: (g - a / c) * this.tileSize.h
    }
  },
  CLASS_NAME: 'OpenLayers.Layer.MapGuide'
});
OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, {
  handlerOptions: null,
  callbacks: null,
  displaySystem: 'metric',
  geodesic: !1,
  displaySystemUnits: {
    geographic: [
      'dd'
    ],
    english: [
      'mi',
      'ft',
      'in'
    ],
    metric: [
      'km',
      'm'
    ]
  },
  partialDelay: 300,
  delayedTrigger: null,
  persist: !1,
  immediate: !1,
  initialize: function (a, b) {
    OpenLayers.Control.prototype.initialize.apply(this, [
      b
    ]);
    var c = {
      done: this.measureComplete,
      point: this.measurePartial
    };
    this.immediate && (c.modify = this.measureImmediate);
    this.callbacks = OpenLayers.Util.extend(c, this.callbacks);
    this.handlerOptions = OpenLayers.Util.extend({
      persist: this.persist
    }, this.handlerOptions);
    this.handler = new a(this, this.callbacks, this.handlerOptions)
  },
  deactivate: function () {
    this.cancelDelay();
    return OpenLayers.Control.prototype.deactivate.apply(this, arguments)
  },
  cancel: function () {
    this.cancelDelay();
    this.handler.cancel()
  },
  setImmediate: function (a) {
    (this.immediate = a) ? this.callbacks.modify = this.measureImmediate : delete this.callbacks.modify
  },
  updateHandler: function (a, b) {
    var c = this.active;
    c && this.deactivate();
    this.handler = new a(this, this.callbacks, b);
    c && this.activate()
  },
  measureComplete: function (a) {
    this.cancelDelay();
    this.measure(a, 'measure')
  },
  measurePartial: function (a, b) {
    this.cancelDelay();
    b = b.clone();
    this.handler.freehandMode(this.handler.evt) ? this.measure(b, 'measurepartial')  : this.delayedTrigger = window.setTimeout(OpenLayers.Function.bind(function () {
      this.delayedTrigger = null;
      this.measure(b, 'measurepartial')
    }, this), this.partialDelay)
  },
  measureImmediate: function (a, b, c) {
    c && !this.handler.freehandMode(this.handler.evt) && (this.cancelDelay(), this.measure(b.geometry, 'measurepartial'))
  },
  cancelDelay: function () {
    null !== this.delayedTrigger && (window.clearTimeout(this.delayedTrigger), this.delayedTrigger = null)
  },
  measure: function (a, b) {
    var c,
    d;
    - 1 < a.CLASS_NAME.indexOf('LineString') ? (c = this.getBestLength(a), d = 1)  : (c = this.getBestArea(a), d = 2);
    this.events.triggerEvent(b, {
      measure: c[0],
      units: c[1],
      order: d,
      geometry: a
    })
  },
  getBestArea: function (a) {
    for (var b = this.displaySystemUnits[this.displaySystem], c, d, e = 0, f = b.length; e < f && !(c = b[e], d = this.getArea(a, c), 1 < d); ++e);
    return [d,
    c]
  },
  getArea: function (a, b) {
    var c,
    d;
    this.geodesic ? (c = a.getGeodesicArea(this.map.getProjectionObject()), d = 'm')  : (c = a.getArea(), d = this.map.getUnits());
    var e = OpenLayers.INCHES_PER_UNIT[b];
    e && (c *= Math.pow(OpenLayers.INCHES_PER_UNIT[d] / e, 2));
    return c
  },
  getBestLength: function (a) {
    for (var b = this.displaySystemUnits[this.displaySystem], c, d, e = 0, f = b.length; e < f && !(c = b[e], d = this.getLength(a, c), 1 < d); ++e);
    return [d,
    c]
  },
  getLength: function (a, b) {
    var c,
    d;
    this.geodesic ? (c = a.getGeodesicLength(this.map.getProjectionObject()), d = 'm')  : (c = a.getLength(), d = this.map.getUnits());
    var e = OpenLayers.INCHES_PER_UNIT[b];
    e && (c *= OpenLayers.INCHES_PER_UNIT[d] / e);
    return c
  },
  CLASS_NAME: 'OpenLayers.Control.Measure'
});
OpenLayers.Format.WMC.v1_0_0 = OpenLayers.Class(OpenLayers.Format.WMC.v1, {
  VERSION: '1.0.0',
  schemaLocation: 'http://www.opengis.net/context http://schemas.opengis.net/context/1.0.0/context.xsd',
  initialize: function (a) {
    OpenLayers.Format.WMC.v1.prototype.initialize.apply(this, [
      a
    ])
  },
  read_wmc_SRS: function (a, b) {
    var c = this.getChildValue(b);
    'object' != typeof a.projections && (a.projections = {
    });
    for (var c = c.split(/ +/), d = 0, e = c.length; d < e; d++) a.projections[c[d]] = !0
  },
  write_wmc_Layer: function (a) {
    var b = OpenLayers.Format.WMC.v1.prototype.write_wmc_Layer.apply(this, [
      a
    ]);
    if (a.srs) {
      var c = [
      ],
      d;
      for (d in a.srs) c.push(d);
      b.appendChild(this.createElementDefaultNS('SRS', c.join(' ')))
    }
    b.appendChild(this.write_wmc_FormatList(a));
    b.appendChild(this.write_wmc_StyleList(a));
    a.dimensions && b.appendChild(this.write_wmc_DimensionList(a));
    b.appendChild(this.write_wmc_LayerExtension(a))
  },
  CLASS_NAME: 'OpenLayers.Format.WMC.v1_0_0'
});
OpenLayers.Popup.Framed = OpenLayers.Class(OpenLayers.Popup.Anchored, {
  imageSrc: null,
  imageSize: null,
  isAlphaImage: !1,
  positionBlocks: null,
  blocks: null,
  fixedRelativePosition: !1,
  initialize: function (a, b, c, d, e, f, g) {
    OpenLayers.Popup.Anchored.prototype.initialize.apply(this, arguments);
    this.fixedRelativePosition && (this.updateRelativePosition(), this.calculateRelativePosition = function () {
      return this.relativePosition
    });
    this.contentDiv.style.position = 'absolute';
    this.contentDiv.style.zIndex = 1;
    f && (this.closeDiv.style.zIndex = 1);
    this.groupDiv.style.position = 'absolute';
    this.groupDiv.style.top = '0px';
    this.groupDiv.style.left = '0px';
    this.groupDiv.style.height = '100%';
    this.groupDiv.style.width = '100%'
  },
  destroy: function () {
    this.isAlphaImage = this.imageSize = this.imageSrc = null;
    this.fixedRelativePosition = !1;
    this.positionBlocks = null;
    for (var a = 0; a < this.blocks.length; a++) {
      var b = this.blocks[a];
      b.image && b.div.removeChild(b.image);
      b.image = null;
      b.div && this.groupDiv.removeChild(b.div);
      b.div = null
    }
    this.blocks = null;
    OpenLayers.Popup.Anchored.prototype.destroy.apply(this, arguments)
  },
  setBackgroundColor: function () {
  },
  setBorder: function () {
  },
  setOpacity: function () {
  },
  setSize: function (a) {
    OpenLayers.Popup.Anchored.prototype.setSize.apply(this, arguments);
    this.updateBlocks()
  },
  updateRelativePosition: function () {
    this.padding = this.positionBlocks[this.relativePosition].padding;
    if (this.closeDiv) {
      var a = this.getContentDivPadding();
      this.closeDiv.style.right = a.right + this.padding.right + 'px';
      this.closeDiv.style.top = a.top + this.padding.top + 'px'
    }
    this.updateBlocks()
  },
  calculateNewPx: function (a) {
    var b = OpenLayers.Popup.Anchored.prototype.calculateNewPx.apply(this, arguments);
    return b = b.offset(this.positionBlocks[this.relativePosition].offset)
  },
  createBlocks: function () {
    this.blocks = [
    ];
    var a = null,
    b;
    for (b in this.positionBlocks) {
      a = b;
      break
    }
    a = this.positionBlocks[a];
    for (b = 0; b < a.blocks.length; b++) {
      var c = {
      };
      this.blocks.push(c);
      c.div = OpenLayers.Util.createDiv(this.id + '_FrameDecorationDiv_' + b, null, null, null, 'absolute', null, 'hidden', null);
      c.image = (this.isAlphaImage ? OpenLayers.Util.createAlphaImageDiv : OpenLayers.Util.createImage) (this.id +
      '_FrameDecorationImg_' + b, null, this.imageSize, this.imageSrc, 'absolute', null, null, null);
      c.div.appendChild(c.image);
      this.groupDiv.appendChild(c.div)
    }
  },
  updateBlocks: function () {
    this.blocks || this.createBlocks();
    if (this.size && this.relativePosition) {
      for (var a = this.positionBlocks[this.relativePosition], b = 0; b < a.blocks.length; b++) {
        var c = a.blocks[b],
        d = this.blocks[b],
        e = c.anchor.left,
        f = c.anchor.bottom,
        g = c.anchor.right,
        h = c.anchor.top,
        i = isNaN(c.size.w) ? this.size.w - (g + e)  : c.size.w,
        j = isNaN(c.size.h) ? this.size.h - (f +
        h)  : c.size.h;
        d.div.style.width = (0 > i ? 0 : i) + 'px';
        d.div.style.height = (0 > j ? 0 : j) + 'px';
        d.div.style.left = null != e ? e + 'px' : '';
        d.div.style.bottom = null != f ? f + 'px' : '';
        d.div.style.right = null != g ? g + 'px' : '';
        d.div.style.top = null != h ? h + 'px' : '';
        d.image.style.left = c.position.x + 'px';
        d.image.style.top = c.position.y + 'px'
      }
      this.contentDiv.style.left = this.padding.left + 'px';
      this.contentDiv.style.top = this.padding.top + 'px'
    }
  },
  CLASS_NAME: 'OpenLayers.Popup.Framed'
});
OpenLayers.Popup.FramedCloud = OpenLayers.Class(OpenLayers.Popup.Framed, {
  contentDisplayClass: 'olFramedCloudPopupContent',
  autoSize: !0,
  panMapIfOutOfView: !0,
  imageSize: new OpenLayers.Size(1276, 736),
  isAlphaImage: !1,
  fixedRelativePosition: !1,
  positionBlocks: {
    tl: {
      offset: new OpenLayers.Pixel(44, 0),
      padding: new OpenLayers.Bounds(8, 40, 8, 9),
      blocks: [
        {
          size: new OpenLayers.Size('auto', 'auto'),
          anchor: new OpenLayers.Bounds(0, 51, 22, 0),
          position: new OpenLayers.Pixel(0, 0)
        },
        {
          size: new OpenLayers.Size(22, 'auto'),
          anchor: new OpenLayers.Bounds(null, 50, 0, 0),
          position: new OpenLayers.Pixel( - 1238, 0)
        },
        {
          size: new OpenLayers.Size('auto', 19),
          anchor: new OpenLayers.Bounds(0, 32, 22, null),
          position: new OpenLayers.Pixel(0, - 631)
        },
        {
          size: new OpenLayers.Size(22, 18),
          anchor: new OpenLayers.Bounds(null, 32, 0, null),
          position: new OpenLayers.Pixel( - 1238, - 632)
        },
        {
          size: new OpenLayers.Size(81, 35),
          anchor: new OpenLayers.Bounds(null, 0, 0, null),
          position: new OpenLayers.Pixel(0, - 688)
        }
      ]
    },
    tr: {
      offset: new OpenLayers.Pixel( - 45, 0),
      padding: new OpenLayers.Bounds(8, 40, 8, 9),
      blocks: [
        {
          size: new OpenLayers.Size('auto', 'auto'),
          anchor: new OpenLayers.Bounds(0, 51, 22, 0),
          position: new OpenLayers.Pixel(0, 0)
        },
        {
          size: new OpenLayers.Size(22, 'auto'),
          anchor: new OpenLayers.Bounds(null, 50, 0, 0),
          position: new OpenLayers.Pixel( - 1238, 0)
        },
        {
          size: new OpenLayers.Size('auto', 19),
          anchor: new OpenLayers.Bounds(0, 32, 22, null),
          position: new OpenLayers.Pixel(0, - 631)
        },
        {
          size: new OpenLayers.Size(22, 19),
          anchor: new OpenLayers.Bounds(null, 32, 0, null),
          position: new OpenLayers.Pixel( - 1238, - 631)
        },
        {
          size: new OpenLayers.Size(81, 35),
          anchor: new OpenLayers.Bounds(0, 0, null, null),
          position: new OpenLayers.Pixel( - 215, - 687)
        }
      ]
    },
    bl: {
      offset: new OpenLayers.Pixel(45, 0),
      padding: new OpenLayers.Bounds(8, 9, 8, 40),
      blocks: [
        {
          size: new OpenLayers.Size('auto', 'auto'),
          anchor: new OpenLayers.Bounds(0, 21, 22, 32),
          position: new OpenLayers.Pixel(0, 0)
        },
        {
          size: new OpenLayers.Size(22, 'auto'),
          anchor: new OpenLayers.Bounds(null, 21, 0, 32),
          position: new OpenLayers.Pixel( - 1238, 0)
        },
        {
          size: new OpenLayers.Size('auto', 21),
          anchor: new OpenLayers.Bounds(0, 0, 22, null),
          position: new OpenLayers.Pixel(0, - 629)
        },
        {
          size: new OpenLayers.Size(22, 21),
          anchor: new OpenLayers.Bounds(null, 0, 0, null),
          position: new OpenLayers.Pixel( - 1238, - 629)
        },
        {
          size: new OpenLayers.Size(81, 33),
          anchor: new OpenLayers.Bounds(null, null, 0, 0),
          position: new OpenLayers.Pixel( - 101, - 674)
        }
      ]
    },
    br: {
      offset: new OpenLayers.Pixel( - 44, 0),
      padding: new OpenLayers.Bounds(8, 9, 8, 40),
      blocks: [
        {
          size: new OpenLayers.Size('auto', 'auto'),
          anchor: new OpenLayers.Bounds(0, 21, 22, 32),
          position: new OpenLayers.Pixel(0, 0)
        },
        {
          size: new OpenLayers.Size(22, 'auto'),
          anchor: new OpenLayers.Bounds(null, 21, 0, 32),
          position: new OpenLayers.Pixel( - 1238, 0)
        },
        {
          size: new OpenLayers.Size('auto', 21),
          anchor: new OpenLayers.Bounds(0, 0, 22, null),
          position: new OpenLayers.Pixel(0, - 629)
        },
        {
          size: new OpenLayers.Size(22, 21),
          anchor: new OpenLayers.Bounds(null, 0, 0, null),
          position: new OpenLayers.Pixel( - 1238, - 629)
        },
        {
          size: new OpenLayers.Size(81, 33),
          anchor: new OpenLayers.Bounds(0, null, null, 0),
          position: new OpenLayers.Pixel( - 311, - 674)
        }
      ]
    }
  },
  minSize: new OpenLayers.Size(105, 10),
  maxSize: new OpenLayers.Size(1200, 660),
  initialize: function (a, b, c, d, e, f, g) {
    this.imageSrc = OpenLayers.Util.getImageLocation('cloud-popup-relative.png');
    OpenLayers.Popup.Framed.prototype.initialize.apply(this, arguments);
    this.contentDiv.className = this.contentDisplayClass
  },
  CLASS_NAME: 'OpenLayers.Popup.FramedCloud'
});
OpenLayers.Tile.Image.IFrame = {
  useIFrame: null,
  draw: function () {
    if (OpenLayers.Tile.Image.prototype.shouldDraw.call(this)) {
      var a = this.layer.getURL(this.bounds),
      b = this.useIFrame;
      this.useIFrame = null !== this.maxGetUrlLength && !this.layer.async && a.length > this.maxGetUrlLength;
      a = b && !this.useIFrame;
      b = !b && this.useIFrame;
      if (a || b) this.imgDiv && this.imgDiv.parentNode === this.frame && this.frame.removeChild(this.imgDiv),
      this.imgDiv = null,
      a ? (this.blankImageUrl = this._blankImageUrl, this.frame.removeChild(this.frame.firstChild))  : (this._blankImageUrl = this.blankImageUrl, this.blankImageUrl = 'about:blank')
    }
    return OpenLayers.Tile.Image.prototype.draw.apply(this, arguments)
  },
  getImage: function () {
    if (!0 === this.useIFrame) {
      if (!this.frame.childNodes.length) {
        var a = document.createElement('div'),
        b = a.style;
        b.position = 'absolute';
        b.width = '100%';
        b.height = '100%';
        b.zIndex = 1;
        b.backgroundImage = 'url(' + this._blankImageUrl + ')';
        this.frame.appendChild(a)
      }
      a = this.id + '_iFrame';
      9 > parseFloat(navigator.appVersion.split('MSIE') [1]) ? (b = document.createElement('<iframe name="' +
      a + '">'), b.style.backgroundColor = '#FFFFFF', b.style.filter = 'chroma(color=#FFFFFF)')  : (b = document.createElement('iframe'), b.style.backgroundColor = 'transparent', b.name = a);
      b.scrolling = 'no';
      b.marginWidth = '0px';
      b.marginHeight = '0px';
      b.frameBorder = '0';
      b.style.position = 'absolute';
      b.style.width = '100%';
      b.style.height = '100%';
      1 > this.layer.opacity && OpenLayers.Util.modifyDOMElement(b, null, null, null, null, null, null, this.layer.opacity);
      this.frame.appendChild(b);
      return this.imgDiv = b
    }
    return OpenLayers.Tile.Image.prototype.getImage.apply(this, arguments)
  },
  createRequestForm: function () {
    var a = document.createElement('form');
    a.method = 'POST';
    var b = this.layer.params._OLSALT,
    b = (b ? b + '_' : '') + this.bounds.toBBOX();
    a.action = OpenLayers.Util.urlAppend(this.layer.url, b);
    a.target = this.id + '_iFrame';
    this.layer.getImageSize();
    var b = OpenLayers.Util.getParameters(this.url),
    c,
    d;
    for (d in b) c = document.createElement('input'),
    c.type = 'hidden',
    c.name = d,
    c.value = b[d],
    a.appendChild(c);
    return a
  },
  setImgSrc: function (a) {
    if (!0 === this.useIFrame) if (a) {
      var b = this.createRequestForm();
      this.frame.appendChild(b);
      b.submit();
      this.frame.removeChild(b)
    } else this.imgDiv.parentNode === this.frame && (this.frame.removeChild(this.imgDiv), this.imgDiv = null);
     else OpenLayers.Tile.Image.prototype.setImgSrc.apply(this, arguments)
  },
  onImageLoad: function () {
    OpenLayers.Tile.Image.prototype.onImageLoad.apply(this, arguments);
    !0 === this.useIFrame && (this.imgDiv.style.opacity = 1, this.frame.style.opacity = this.layer.opacity)
  },
  createBackBuffer: function () {
    var a;
    !1 === this.useIFrame && (a = OpenLayers.Tile.Image.prototype.createBackBuffer.call(this));
    return a
  }
};
OpenLayers.Format.SOSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
  defaultVersion: '1.0.0',
  CLASS_NAME: 'OpenLayers.Format.SOSCapabilities'
});
OpenLayers.Format.SOSCapabilities.v1_0_0 = OpenLayers.Class(OpenLayers.Format.SOSCapabilities, {
  namespaces: {
    ows: 'http://www.opengis.net/ows/1.1',
    sos: 'http://www.opengis.net/sos/1.0',
    gml: 'http://www.opengis.net/gml',
    xlink: 'http://www.w3.org/1999/xlink'
  },
  regExes: {
    trimSpace: /^\s*|\s*$/g,
    removeSpace: /\s*/g,
    splitSpace: /\s+/,
    trimComma: /\s*,\s*/g
  },
  initialize: function (a) {
    OpenLayers.Format.XML.prototype.initialize.apply(this, [
      a
    ]);
    this.options = a
  },
  read: function (a) {
    'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
      a
    ]));
    a && 9 == a.nodeType && (a = a.documentElement);
    var b = {
    };
    this.readNode(a, b);
    return b
  },
  readers: {
    gml: OpenLayers.Util.applyDefaults({
      name: function (a, b) {
        b.name = this.getChildValue(a)
      },
      TimePeriod: function (a, b) {
        b.timePeriod = {
        };
        this.readChildNodes(a, b.timePeriod)
      },
      beginPosition: function (a, b) {
        b.beginPosition = this.getChildValue(a)
      },
      endPosition: function (a, b) {
        b.endPosition = this.getChildValue(a)
      }
    }, OpenLayers.Format.GML.v3.prototype.readers.gml),
    sos: {
      Capabilities: function (a, b) {
        this.readChildNodes(a, b)
      },
      Contents: function (a, b) {
        b.contents = {
        };
        this.readChildNodes(a, b.contents)
      },
      ObservationOfferingList: function (a, b) {
        b.offeringList = {
        };
        this.readChildNodes(a, b.offeringList)
      },
      ObservationOffering: function (a, b) {
        var c = this.getAttributeNS(a, this.namespaces.gml, 'id');
        b[c] = {
          procedures: [
          ],
          observedProperties: [
          ],
          featureOfInterestIds: [
          ],
          responseFormats: [
          ],
          resultModels: [
          ],
          responseModes: [
          ]
        };
        this.readChildNodes(a, b[c])
      },
      time: function (a, b) {
        b.time = {
        };
        this.readChildNodes(a, b.time)
      },
      procedure: function (a, b) {
        b.procedures.push(this.getAttributeNS(a, this.namespaces.xlink, 'href'))
      },
      observedProperty: function (a, b) {
        b.observedProperties.push(this.getAttributeNS(a, this.namespaces.xlink, 'href'))
      },
      featureOfInterest: function (a, b) {
        b.featureOfInterestIds.push(this.getAttributeNS(a, this.namespaces.xlink, 'href'))
      },
      responseFormat: function (a, b) {
        b.responseFormats.push(this.getChildValue(a))
      },
      resultModel: function (a, b) {
        b.resultModels.push(this.getChildValue(a))
      },
      responseMode: function (a, b) {
        b.responseModes.push(this.getChildValue(a))
      }
    },
    ows: OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers.ows
  },
  CLASS_NAME: 'OpenLayers.Format.SOSCapabilities.v1_0_0'
});
OpenLayers.Handler.Pinch = OpenLayers.Class(OpenLayers.Handler, {
  started: !1,
  stopDown: !1,
  pinching: !1,
  last: null,
  start: null,
  touchstart: function (a) {
    var b = !0;
    this.pinching = !1;
    OpenLayers.Event.isMultiTouch(a) ? (this.started = !0, this.last = this.start = {
      distance: this.getDistance(a.touches),
      delta: 0,
      scale: 1
    }, this.callback('start', [
      a,
      this.start
    ]), b = !this.stopDown)  : (this.started = !1, this.last = this.start = null);
    OpenLayers.Event.stop(a);
    return b
  },
  touchmove: function (a) {
    if (this.started && OpenLayers.Event.isMultiTouch(a)) {
      this.pinching = !0;
      var b = this.getPinchData(a);
      this.callback('move', [
        a,
        b
      ]);
      this.last = b;
      OpenLayers.Event.stop(a)
    }
    return !0
  },
  touchend: function (a) {
    this.started && (this.pinching = this.started = !1, this.callback('done', [
      a,
      this.start,
      this.last
    ]), this.last = this.start = null);
    return !0
  },
  activate: function () {
    var a = !1;
    OpenLayers.Handler.prototype.activate.apply(this, arguments) && (this.pinching = !1, a = !0);
    return a
  },
  deactivate: function () {
    var a = !1;
    OpenLayers.Handler.prototype.deactivate.apply(this, arguments) && (this.pinching = this.started = !1, this.last = this.start = null, a = !0);
    return a
  },
  getDistance: function (a) {
    var b = a[0],
    a = a[1];
    return Math.sqrt(Math.pow(b.clientX - a.clientX, 2) + Math.pow(b.clientY - a.clientY, 2))
  },
  getPinchData: function (a) {
    a = this.getDistance(a.touches);
    return {
      distance: a,
      delta: this.last.distance - a,
      scale: a / this.start.distance
    }
  },
  CLASS_NAME: 'OpenLayers.Handler.Pinch'
});
OpenLayers.Control.NavToolbar = OpenLayers.Class(OpenLayers.Control.Panel, {
  initialize: function (a) {
    OpenLayers.Control.Panel.prototype.initialize.apply(this, [
      a
    ]);
    this.addControls([new OpenLayers.Control.Navigation,
    new OpenLayers.Control.ZoomBox])
  },
  draw: function () {
    var a = OpenLayers.Control.Panel.prototype.draw.apply(this, arguments);
    null === this.defaultControl && (this.defaultControl = this.controls[0]);
    return a
  },
  CLASS_NAME: 'OpenLayers.Control.NavToolbar'
});
OpenLayers.Strategy.Refresh = OpenLayers.Class(OpenLayers.Strategy, {
  force: !1,
  interval: 0,
  timer: null,
  activate: function () {
    var a = OpenLayers.Strategy.prototype.activate.call(this);
    a && (!0 === this.layer.visibility && this.start(), this.layer.events.on({
      visibilitychanged: this.reset,
      scope: this
    }));
    return a
  },
  deactivate: function () {
    var a = OpenLayers.Strategy.prototype.deactivate.call(this);
    a && this.stop();
    return a
  },
  reset: function () {
    !0 === this.layer.visibility ? this.start()  : this.stop()
  },
  start: function () {
    this.interval && ('number' ===
    typeof this.interval && 0 < this.interval) && (this.timer = window.setInterval(OpenLayers.Function.bind(this.refresh, this), this.interval))
  },
  refresh: function () {
    this.layer && (this.layer.refresh && 'function' == typeof this.layer.refresh) && this.layer.refresh({
      force: this.force
    })
  },
  stop: function () {
    null !== this.timer && (window.clearInterval(this.timer), this.timer = null)
  },
  CLASS_NAME: 'OpenLayers.Strategy.Refresh'
});
OpenLayers.Layer.ArcGIS93Rest = OpenLayers.Class(OpenLayers.Layer.Grid, {
  DEFAULT_PARAMS: {
    format: 'png'
  },
  isBaseLayer: !0,
  initialize: function (a, b, c, d) {
    var e = [
    ],
    c = OpenLayers.Util.upperCaseObject(c);
    e.push(a, b, c, d);
    OpenLayers.Layer.Grid.prototype.initialize.apply(this, e);
    OpenLayers.Util.applyDefaults(this.params, OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS));
    if (this.params.TRANSPARENT && 'true' == this.params.TRANSPARENT.toString().toLowerCase()) {
      if (null == d || !d.isBaseLayer) this.isBaseLayer = !1;
      'jpg' == this.params.FORMAT && (this.params.FORMAT = OpenLayers.Util.alphaHack() ? 'gif' : 'png')
    }
  },
  clone: function (a) {
    null == a && (a = new OpenLayers.Layer.ArcGIS93Rest(this.name, this.url, this.params, this.getOptions()));
    return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [
      a
    ])
  },
  getURL: function (a) {
    var a = this.adjustBounds(a),
    b = this.projection.getCode().split(':'),
    b = b[b.length - 1],
    c = this.getImageSize(),
    a = {
      BBOX: a.toBBOX(),
      SIZE: c.w + ',' + c.h,
      F: 'image',
      BBOXSR: b,
      IMAGESR: b
    };
    if (this.layerDefs) {
      var b = [
      ],
      d;
      for (d in this.layerDefs) this.layerDefs.hasOwnProperty(d) && this.layerDefs[d] && (b.push(d), b.push(':'), b.push(this.layerDefs[d]), b.push(';'));
      0 < b.length && (a.LAYERDEFS = b.join(''))
    }
    return this.getFullRequestString(a)
  },
  setLayerFilter: function (a, b) {
    this.layerDefs || (this.layerDefs = {
    });
    b ? this.layerDefs[a] = b : delete this.layerDefs[a]
  },
  clearLayerFilter: function (a) {
    a ? delete this.layerDefs[a] : delete this.layerDefs
  },
  mergeNewParams: function (a) {
    a = [
      OpenLayers.Util.upperCaseObject(a)
    ];
    return OpenLayers.Layer.Grid.prototype.mergeNewParams.apply(this, a)
  },
  CLASS_NAME: 'OpenLayers.Layer.ArcGIS93Rest'
});
OpenLayers.Handler.Hover = OpenLayers.Class(OpenLayers.Handler, {
  delay: 500,
  pixelTolerance: null,
  stopMove: !1,
  px: null,
  timerId: null,
  mousemove: function (a) {
    this.passesTolerance(a.xy) && (this.clearTimer(), this.callback('move', [
      a
    ]), this.px = a.xy, a = OpenLayers.Util.extend({
    }, a), this.timerId = window.setTimeout(OpenLayers.Function.bind(this.delayedCall, this, a), this.delay));
    return !this.stopMove
  },
  mouseout: function (a) {
    OpenLayers.Util.mouseLeft(a, this.map.viewPortDiv) && (this.clearTimer(), this.callback('move', [
      a
    ]));
    return !0
  },
  passesTolerance: function (a) {
    var b = !0;
    this.pixelTolerance && this.px && Math.sqrt(Math.pow(this.px.x - a.x, 2) + Math.pow(this.px.y - a.y, 2)) < this.pixelTolerance && (b = !1);
    return b
  },
  clearTimer: function () {
    null != this.timerId && (window.clearTimeout(this.timerId), this.timerId = null)
  },
  delayedCall: function (a) {
    this.callback('pause', [
      a
    ])
  },
  deactivate: function () {
    var a = !1;
    OpenLayers.Handler.prototype.deactivate.apply(this, arguments) && (this.clearTimer(), a = !0);
    return a
  },
  CLASS_NAME: 'OpenLayers.Handler.Hover'
});
OpenLayers.Control.GetFeature = OpenLayers.Class(OpenLayers.Control, {
  protocol: null,
  multipleKey: null,
  toggleKey: null,
  modifiers: null,
  multiple: !1,
  click: !0,
  single: !0,
  clickout: !0,
  toggle: !1,
  clickTolerance: 5,
  hover: !1,
  box: !1,
  maxFeatures: 10,
  features: null,
  hoverFeature: null,
  handlerOptions: null,
  handlers: null,
  hoverResponse: null,
  filterType: OpenLayers.Filter.Spatial.BBOX,
  initialize: function (a) {
    a.handlerOptions = a.handlerOptions || {
    };
    OpenLayers.Control.prototype.initialize.apply(this, [
      a
    ]);
    this.features = {
    };
    this.handlers = {
    };
    this.click && (this.handlers.click = new OpenLayers.Handler.Click(this, {
      click: this.selectClick
    }, this.handlerOptions.click || {
    }));
    this.box && (this.handlers.box = new OpenLayers.Handler.Box(this, {
      done: this.selectBox
    }, OpenLayers.Util.extend(this.handlerOptions.box, {
      boxDivClassName: 'olHandlerBoxSelectFeature'
    })));
    this.hover && (this.handlers.hover = new OpenLayers.Handler.Hover(this, {
      move: this.cancelHover,
      pause: this.selectHover
    }, OpenLayers.Util.extend(this.handlerOptions.hover, {
      delay: 250,
      pixelTolerance: 2
    })))
  },
  activate: function () {
    if (!this.active) for (var a in this.handlers) this.handlers[a].activate();
    return OpenLayers.Control.prototype.activate.apply(this, arguments)
  },
  deactivate: function () {
    if (this.active) for (var a in this.handlers) this.handlers[a].deactivate();
    return OpenLayers.Control.prototype.deactivate.apply(this, arguments)
  },
  selectClick: function (a) {
    var b = this.pixelToBounds(a.xy);
    this.setModifiers(a);
    this.request(b, {
      single: this.single
    })
  },
  selectBox: function (a) {
    var b;
    if (a instanceof OpenLayers.Bounds) b = this.map.getLonLatFromPixel({
      x: a.left,
      y: a.bottom
    }),
    a = this.map.getLonLatFromPixel({
      x: a.right,
      y: a.top
    }),
    b = new OpenLayers.Bounds(b.lon, b.lat, a.lon, a.lat);
     else {
      if (this.click) return;
      b = this.pixelToBounds(a)
    }
    this.setModifiers(this.handlers.box.dragHandler.evt);
    this.request(b)
  },
  selectHover: function (a) {
    this.request(this.pixelToBounds(a.xy), {
      single: !0,
      hover: !0
    })
  },
  cancelHover: function () {
    this.hoverResponse && (this.protocol.abort(this.hoverResponse), this.hoverResponse = null, OpenLayers.Element.removeClass(this.map.viewPortDiv, 'olCursorWait'))
  },
  request: function (a, b) {
    var b = b || {
    },
    c = new OpenLayers.Filter.Spatial({
      type: this.filterType,
      value: a
    });
    OpenLayers.Element.addClass(this.map.viewPortDiv, 'olCursorWait');
    c = this.protocol.read({
      maxFeatures: !0 == b.single ? this.maxFeatures : void 0,
      filter: c,
      callback: function (c) {
        c.success() && (c.features.length ? !0 == b.single ? this.selectBestFeature(c.features, a.getCenterLonLat(), b)  : this.select(c.features)  : b.hover ? this.hoverSelect()  : (this.events.triggerEvent('clickout'), this.clickout && this.unselectAll()));
        OpenLayers.Element.removeClass(this.map.viewPortDiv, 'olCursorWait')
      },
      scope: this
    });
    !0 == b.hover && (this.hoverResponse = c)
  },
  selectBestFeature: function (a, b, c) {
    c = c || {
    };
    if (a.length) {
      for (var b = new OpenLayers.Geometry.Point(b.lon, b.lat), d, e, f, g = Number.MAX_VALUE, h = 0; h < a.length && !(d = a[h], d.geometry && (f = b.distanceTo(d.geometry, {
        edge: !1
      }), f < g && (g = f, e = d, 0 == g))); ++h);
      !0 == c.hover ? this.hoverSelect(e)  : this.select(e || a)
    }
  },
  setModifiers: function (a) {
    this.modifiers = {
      multiple: this.multiple || this.multipleKey && a[this.multipleKey],
      toggle: this.toggle || this.toggleKey && a[this.toggleKey]
    }
  },
  select: function (a) {
    !this.modifiers.multiple && !this.modifiers.toggle && this.unselectAll();
    OpenLayers.Util.isArray(a) || (a = [
      a
    ]);
    var b = this.events.triggerEvent('beforefeaturesselected', {
      features: a
    });
    if (!1 !== b) {
      for (var c = [
      ], d, e = 0, f = a.length; e < f; ++e) d = a[e],
      this.features[d.fid || d.id] ? this.modifiers.toggle && this.unselect(this.features[d.fid || d.id])  : (b = this.events.triggerEvent('beforefeatureselected', {
        feature: d
      }), !1 !== b && (this.features[d.fid || d.id] = d, c.push(d), this.events.triggerEvent('featureselected', {
        feature: d
      })));
      this.events.triggerEvent('featuresselected', {
        features: c
      })
    }
  },
  hoverSelect: function (a) {
    var b = a ? a.fid || a.id : null,
    c = this.hoverFeature ? this.hoverFeature.fid || this.hoverFeature.id : null;
    c && c != b && (this.events.triggerEvent('outfeature', {
      feature: this.hoverFeature
    }), this.hoverFeature = null);
    b && b != c && (this.events.triggerEvent('hoverfeature', {
      feature: a
    }), this.hoverFeature = a)
  },
  unselect: function (a) {
    delete this.features[a.fid || a.id];
    this.events.triggerEvent('featureunselected', {
      feature: a
    })
  },
  unselectAll: function () {
    for (var a in this.features) this.unselect(this.features[a])
  },
  setMap: function (a) {
    for (var b in this.handlers) this.handlers[b].setMap(a);
    OpenLayers.Control.prototype.setMap.apply(this, arguments)
  },
  pixelToBounds: function (a) {
    var b = a.add( - this.clickTolerance / 2, this.clickTolerance / 2),
    a = a.add(this.clickTolerance / 2, - this.clickTolerance / 2),
    b = this.map.getLonLatFromPixel(b),
    a = this.map.getLonLatFromPixel(a);
    return new OpenLayers.Bounds(b.lon, b.lat, a.lon, a.lat)
  },
  CLASS_NAME: 'OpenLayers.Control.GetFeature'
});
OpenLayers.Format.QueryStringFilter = function () {
  function a(a) {
    a = a.replace(/%/g, '\\%');
    a = a.replace(/\\\\\.(\*)?/g, function (a, b) {
      return b ? a : '\\\\_'
    });
    a = a.replace(/\\\\\.\*/g, '\\\\%');
    a = a.replace(/(\\)?\.(\*)?/g, function (a, b, c) {
      return b || c ? a : '_'
    });
    a = a.replace(/(\\)?\.\*/g, function (a, b) {
      return b ? a : '%'
    });
    a = a.replace(/\\\./g, '.');
    return a = a.replace(/(\\)?\\\*/g, function (a, b) {
      return b ? a : '*'
    })
  }
  var b = {
  };
  b[OpenLayers.Filter.Comparison.EQUAL_TO] = 'eq';
  b[OpenLayers.Filter.Comparison.NOT_EQUAL_TO] = 'ne';
  b[OpenLayers.Filter.Comparison.LESS_THAN] = 'lt';
  b[OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO] = 'lte';
  b[OpenLayers.Filter.Comparison.GREATER_THAN] = 'gt';
  b[OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO] = 'gte';
  b[OpenLayers.Filter.Comparison.LIKE] = 'ilike';
  return OpenLayers.Class(OpenLayers.Format, {
    wildcarded: !1,
    srsInBBOX: !1,
    write: function (c, d) {
      var d = d || {
      },
      e = c.CLASS_NAME,
      e = e.substring(e.lastIndexOf('.') + 1);
      switch (e) {
        case 'Spatial':
          switch (c.type) {
            case OpenLayers.Filter.Spatial.BBOX:
              d.bbox = c.value.toArray();
              this.srsInBBOX && c.projection && d.bbox.push(c.projection.getCode());
              break;
            case OpenLayers.Filter.Spatial.DWITHIN:
              d.tolerance = c.distance;
            case OpenLayers.Filter.Spatial.WITHIN:
              d.lon = c.value.x;
              d.lat = c.value.y;
              break;
            default:
              OpenLayers.Console.warn('Unknown spatial filter type ' + c.type)
          }
          break;
        case 'Comparison':
          e = b[c.type];
          if (void 0 !== e) {
            var f = c.value;
            c.type == OpenLayers.Filter.Comparison.LIKE && (f = a(f), this.wildcarded && (f = '%' + f + '%'));
            d[c.property + '__' + e] = f;
            d.queryable = d.queryable || [
            ];
            d.queryable.push(c.property)
        } else OpenLayers.Console.warn('Unknown comparison filter type ' +
        c.type);
        break;
      case 'Logical':
        if (c.type === OpenLayers.Filter.Logical.AND) {
          e = 0;
          for (f = c.filters.length; e < f; e++) d = this.write(c.filters[e], d)
      } else OpenLayers.Console.warn('Unsupported logical filter type ' + c.type);
      break;
    default:
      OpenLayers.Console.warn('Unknown filter type ' + e)
    }
    return d
},
CLASS_NAME: 'OpenLayers.Format.QueryStringFilter'
})
}();
OpenLayers.Control.Geolocate = OpenLayers.Class(OpenLayers.Control, {
geolocation: navigator.geolocation,
bind: !0,
watch: !1,
geolocationOptions: null,
destroy: function () {
this.deactivate();
OpenLayers.Control.prototype.destroy.apply(this, arguments)
},
activate: function () {
return !this.geolocation ? (this.events.triggerEvent('locationuncapable'), !1)  : OpenLayers.Control.prototype.activate.apply(this, arguments) ? (this.watch ? this.watchId = this.geolocation.watchPosition(OpenLayers.Function.bind(this.geolocate, this), OpenLayers.Function.bind(this.failure, this), this.geolocationOptions)  : this.getCurrentLocation(), !0)  : !1
},
deactivate: function () {
this.active && null !== this.watchId && this.geolocation.clearWatch(this.watchId);
return OpenLayers.Control.prototype.deactivate.apply(this, arguments)
},
geolocate: function (a) {
var b = (new OpenLayers.LonLat(a.coords.longitude, a.coords.latitude)).transform(new OpenLayers.Projection('EPSG:4326'), this.map.getProjectionObject());
this.bind && this.map.setCenter(b);
this.events.triggerEvent('locationupdated', {
  position: a,
  point: new OpenLayers.Geometry.Point(b.lon, b.lat)
})
},
getCurrentLocation: function () {
if (!this.active || this.watch) return !1;
this.geolocation.getCurrentPosition(OpenLayers.Function.bind(this.geolocate, this), OpenLayers.Function.bind(this.failure, this), this.geolocationOptions);
return !0
},
failure: function (a) {
this.events.triggerEvent('locationfailed', {
  error: a
})
},
CLASS_NAME: 'OpenLayers.Control.Geolocate'
});
OpenLayers.Tile.UTFGrid = OpenLayers.Class(OpenLayers.Tile, {
url: null,
utfgridResolution: 2,
json: null,
format: null,
destroy: function () {
this.clear();
OpenLayers.Tile.prototype.destroy.apply(this, arguments)
},
draw: function () {
var a = OpenLayers.Tile.prototype.draw.apply(this, arguments);
if (a) if (this.isLoading ? (this.abortLoading(), this.events.triggerEvent('reload'))  : (this.isLoading = !0, this.events.triggerEvent('loadstart')), this.url = this.layer.getURL(this.bounds), this.layer.useJSONP) {
  var b = new OpenLayers.Protocol.Script({
    url: this.url,
    callback: function (a) {
      this.isLoading = false;
      this.events.triggerEvent('loadend');
      this.json = a.data
    },
    scope: this
  });
  b.read();
  this.request = b
} else this.request = OpenLayers.Request.GET({
  url: this.url,
  callback: function (a) {
    this.isLoading = false;
    this.events.triggerEvent('loadend');
    a.status === 200 && this.parseData(a.responseText)
  },
  scope: this
});
 else this.unload();
return a
},
abortLoading: function () {
this.request && (this.request.abort(), delete this.request);
this.isLoading = !1
},
getFeatureInfo: function (a, b) {
var c = null;
if (this.json) {
  var d = this.getFeatureId(a, b);
  null !== d && (c = {
    id: d,
    data: this.json.data[d]
  })
}
return c
},
getFeatureId: function (a, b) {
var c = null;
if (this.json) {
  var d = this.utfgridResolution,
  d = this.indexFromCharCode(this.json.grid[Math.floor(b / d)].charCodeAt(Math.floor(a / d))),
  e = this.json.keys;
  !isNaN(d) && d in e && (c = e[d])
}
return c
},
indexFromCharCode: function (a) {
93 <= a && a--;
35 <= a && a--;
return a - 32
},
parseData: function (a) {
this.format || (this.format = new OpenLayers.Format.JSON);
this.json = this.format.read(a)
},
clear: function () {
this.json = null
},
CLASS_NAME: 'OpenLayers.Tile.UTFGrid'
});
OpenLayers.Control.NavigationHistory = OpenLayers.Class(OpenLayers.Control, {
type: OpenLayers.Control.TYPE_TOGGLE,
previous: null,
previousOptions: null,
next: null,
nextOptions: null,
limit: 50,
autoActivate: !0,
clearOnDeactivate: !1,
registry: null,
nextStack: null,
previousStack: null,
listeners: null,
restoring: !1,
initialize: function (a) {
OpenLayers.Control.prototype.initialize.apply(this, [
  a
]);
this.registry = OpenLayers.Util.extend({
  moveend: this.getState
}, this.registry);
a = {
  trigger: OpenLayers.Function.bind(this.previousTrigger, this),
  displayClass: this.displayClass + ' ' + this.displayClass + 'Previous'
};
OpenLayers.Util.extend(a, this.previousOptions);
this.previous = new OpenLayers.Control.Button(a);
a = {
  trigger: OpenLayers.Function.bind(this.nextTrigger, this),
  displayClass: this.displayClass + ' ' + this.displayClass + 'Next'
};
OpenLayers.Util.extend(a, this.nextOptions);
this.next = new OpenLayers.Control.Button(a);
this.clear()
},
onPreviousChange: function (a) {
a && !this.previous.active ? this.previous.activate()  : !a && this.previous.active && this.previous.deactivate()
},
onNextChange: function (a) {
a && !this.next.active ? this.next.activate()  : !a && this.next.active && this.next.deactivate()
},
destroy: function () {
OpenLayers.Control.prototype.destroy.apply(this);
this.previous.destroy();
this.next.destroy();
this.deactivate();
for (var a in this) this[a] = null
},
setMap: function (a) {
this.map = a;
this.next.setMap(a);
this.previous.setMap(a)
},
draw: function () {
OpenLayers.Control.prototype.draw.apply(this, arguments);
this.next.draw();
this.previous.draw()
},
previousTrigger: function () {
var a = this.previousStack.shift(),
b = this.previousStack.shift();
void 0 != b ? (this.nextStack.unshift(a), this.previousStack.unshift(b), this.restoring = !0, this.restore(b), this.restoring = !1, this.onNextChange(this.nextStack[0], this.nextStack.length), this.onPreviousChange(this.previousStack[1], this.previousStack.length - 1))  : this.previousStack.unshift(a);
return b
},
nextTrigger: function () {
var a = this.nextStack.shift();
void 0 != a && (this.previousStack.unshift(a), this.restoring = !0, this.restore(a), this.restoring = !1, this.onNextChange(this.nextStack[0], this.nextStack.length), this.onPreviousChange(this.previousStack[1], this.previousStack.length - 1));
return a
},
clear: function () {
this.previousStack = [
];
this.previous.deactivate();
this.nextStack = [
];
this.next.deactivate()
},
getState: function () {
return {
  center: this.map.getCenter(),
  resolution: this.map.getResolution(),
  projection: this.map.getProjectionObject(),
  units: this.map.getProjectionObject().getUnits() || this.map.units || this.map.baseLayer.units
}
},
restore: function (a) {
var b,
c;
if (this.map.getProjectionObject() ==
a.projection) c = this.map.getZoomForResolution(a.resolution),
b = a.center;
 else {
  b = a.center.clone();
  b.transform(a.projection, this.map.getProjectionObject());
  c = a.units;
  var d = this.map.getProjectionObject().getUnits() || this.map.units || this.map.baseLayer.units;
  c = this.map.getZoomForResolution((c && d ? OpenLayers.INCHES_PER_UNIT[c] / OpenLayers.INCHES_PER_UNIT[d] : 1) * a.resolution)
}
this.map.setCenter(b, c)
},
setListeners: function () {
this.listeners = {
};
for (var a in this.registry) this.listeners[a] = OpenLayers.Function.bind(function () {
  if (!this.restoring) {
    this.previousStack.unshift(this.registry[a].apply(this, arguments));
    if (1 < this.previousStack.length) this.onPreviousChange(this.previousStack[1], this.previousStack.length - 1);
    this.previousStack.length > this.limit + 1 && this.previousStack.pop();
    0 < this.nextStack.length && (this.nextStack = [
    ], this.onNextChange(null, 0))
  }
  return !0
}, this)
},
activate: function () {
var a = !1;
if (this.map && OpenLayers.Control.prototype.activate.apply(this)) {
  null == this.listeners && this.setListeners();
  for (var b in this.listeners) this.map.events.register(b, this, this.listeners[b]);
  a = !0;
  0 == this.previousStack.length && this.initStack()
}
return a
},
initStack: function () {
this.map.getCenter() && this.listeners.moveend()
},
deactivate: function () {
var a = !1;
if (this.map && OpenLayers.Control.prototype.deactivate.apply(this)) {
  for (var b in this.listeners) this.map.events.unregister(b, this, this.listeners[b]);
  this.clearOnDeactivate && this.clear();
  a = !0
}
return a
},
CLASS_NAME: 'OpenLayers.Control.NavigationHistory'
});
OpenLayers.Protocol.HTTP = OpenLayers.Class(OpenLayers.Protocol, {
url: null,
headers: null,
params: null,
callback: null,
scope: null,
readWithPOST: !1,
updateWithPOST: !1,
deleteWithPOST: !1,
wildcarded: !1,
srsInBBOX: !1,
initialize: function (a) {
a = a || {
};
this.params = {
};
this.headers = {
};
OpenLayers.Protocol.prototype.initialize.apply(this, arguments);
if (!this.filterToParams && OpenLayers.Format.QueryStringFilter) {
  var b = new OpenLayers.Format.QueryStringFilter({
    wildcarded: this.wildcarded,
    srsInBBOX: this.srsInBBOX
  });
  this.filterToParams = function (a, d) {
    return b.write(a, d)
  }
}
},
destroy: function () {
this.headers = this.params = null;
OpenLayers.Protocol.prototype.destroy.apply(this)
},
read: function (a) {
OpenLayers.Protocol.prototype.read.apply(this, arguments);
a = a || {
};
a.params = OpenLayers.Util.applyDefaults(a.params, this.options.params);
a = OpenLayers.Util.applyDefaults(a, this.options);
a.filter && this.filterToParams && (a.params = this.filterToParams(a.filter, a.params));
var b = void 0 !== a.readWithPOST ? a.readWithPOST : this.readWithPOST,
c = new OpenLayers.Protocol.Response({
  requestType: 'read'
});
b ? (b = a.headers || {
}, b['Content-Type'] = 'application/x-www-form-urlencoded', c.priv = OpenLayers.Request.POST({
  url: a.url,
  callback: this.createCallback(this.handleRead, c, a),
  data: OpenLayers.Util.getParameterString(a.params),
  headers: b
}))  : c.priv = OpenLayers.Request.GET({
  url: a.url,
  callback: this.createCallback(this.handleRead, c, a),
  params: a.params,
  headers: a.headers
});
return c
},
handleRead: function (a, b) {
this.handleResponse(a, b)
},
create: function (a, b) {
var b = OpenLayers.Util.applyDefaults(b, this.options),
c = new OpenLayers.Protocol.Response({
  reqFeatures: a,
  requestType: 'create'
});
c.priv = OpenLayers.Request.POST({
  url: b.url,
  callback: this.createCallback(this.handleCreate, c, b),
  headers: b.headers,
  data: this.format.write(a)
});
return c
},
handleCreate: function (a, b) {
this.handleResponse(a, b)
},
update: function (a, b) {
var b = b || {
},
c = b.url || a.url || this.options.url + '/' + a.fid,
b = OpenLayers.Util.applyDefaults(b, this.options),
d = new OpenLayers.Protocol.Response({
  reqFeatures: a,
  requestType: 'update'
});
d.priv = OpenLayers.Request[this.updateWithPOST ? 'POST' : 'PUT']({
  url: c,
  callback: this.createCallback(this.handleUpdate, d, b),
  headers: b.headers,
  data: this.format.write(a)
});
return d
},
handleUpdate: function (a, b) {
this.handleResponse(a, b)
},
'delete': function (a, b) {
var b = b || {
},
c = b.url || a.url || this.options.url + '/' + a.fid,
b = OpenLayers.Util.applyDefaults(b, this.options),
d = new OpenLayers.Protocol.Response({
  reqFeatures: a,
  requestType: 'delete'
}),
e = this.deleteWithPOST ? 'POST' : 'DELETE',
c = {
  url: c,
  callback: this.createCallback(this.handleDelete, d, b),
  headers: b.headers
};
this.deleteWithPOST && (c.data = this.format.write(a));
d.priv = OpenLayers.Request[e](c);
return d
},
handleDelete: function (a, b) {
this.handleResponse(a, b)
},
handleResponse: function (a, b) {
var c = a.priv;
b.callback && (200 <= c.status && 300 > c.status ? ('delete' != a.requestType && (a.features = this.parseFeatures(c)), a.code = OpenLayers.Protocol.Response.SUCCESS)  : a.code = OpenLayers.Protocol.Response.FAILURE, b.callback.call(b.scope, a))
},
parseFeatures: function (a) {
var b = a.responseXML;
if (!b || !b.documentElement) b = a.responseText;
return !b || 0 >= b.length ? null : this.format.read(b)
},
commit: function (a, b) {
function c(a) {
  for (var b = a.features ? a.features.length : 0, c = Array(b), e = 0; e < b; ++e) c[e] = a.features[e].fid;
  o.insertIds = c;
  d.apply(this, [
    a
  ])
}
function d(a) {
  this.callUserCallback(a, b);
  n = n && a.success();
  f++;
  f >= m && b.callback && (o.code = n ? OpenLayers.Protocol.Response.SUCCESS : OpenLayers.Protocol.Response.FAILURE, b.callback.apply(b.scope, [
    o
  ]))
}
var b = OpenLayers.Util.applyDefaults(b, this.options),
e = [
],
f = 0,
g = {
};
g[OpenLayers.State.INSERT] = [
];
g[OpenLayers.State.UPDATE] = [
];
g[OpenLayers.State.DELETE] = [
];
for (var h, i, j = [
], k = 0, l = a.length; k < l; ++k) if (h = a[k], i = g[h.state]) i.push(h),
j.push(h);
var m = (0 < g[OpenLayers.State.INSERT].length ? 1 : 0) + g[OpenLayers.State.UPDATE].length + g[OpenLayers.State.DELETE].length,
n = !0,
o = new OpenLayers.Protocol.Response({
  reqFeatures: j
});
h = g[OpenLayers.State.INSERT];
0 < h.length && e.push(this.create(h, OpenLayers.Util.applyDefaults({
  callback: c,
  scope: this
}, b.create)));
h = g[OpenLayers.State.UPDATE];
for (k = h.length - 1; 0 <= k; --k) e.push(this.update(h[k], OpenLayers.Util.applyDefaults({
  callback: d,
  scope: this
}, b.update)));
h = g[OpenLayers.State.DELETE];
for (k = h.length - 1; 0 <= k; --k) e.push(this['delete'](h[k], OpenLayers.Util.applyDefaults({
  callback: d,
  scope: this
}, b['delete'])));
return e
},
abort: function (a) {
a && a.priv.abort()
},
callUserCallback: function (a, b) {
var c = b[a.requestType];
c && c.callback && c.callback.call(c.scope, a)
},
CLASS_NAME: 'OpenLayers.Protocol.HTTP'
});
OpenLayers.Strategy.Cluster = OpenLayers.Class(OpenLayers.Strategy, {
distance: 20,
threshold: null,
features: null,
clusters: null,
clustering: !1,
resolution: null,
activate: function () {
var a = OpenLayers.Strategy.prototype.activate.call(this);
if (a) this.layer.events.on({
  beforefeaturesadded: this.cacheFeatures,
  moveend: this.cluster,
  scope: this
});
return a
},
deactivate: function () {
var a = OpenLayers.Strategy.prototype.deactivate.call(this);
a && (this.clearCache(), this.layer.events.un({
  beforefeaturesadded: this.cacheFeatures,
  moveend: this.cluster,
  scope: this
}));
return a
},
cacheFeatures: function (a) {
var b = !0;
this.clustering || (this.clearCache(), this.features = a.features, this.cluster(), b = !1);
return b
},
clearCache: function () {
this.features = null
},
cluster: function (a) {
if ((!a || a.zoomChanged) && this.features) if (a = this.layer.map.getResolution(), a != this.resolution || !this.clustersExist()) {
  this.resolution = a;
  for (var a = [
  ], b, c, d, e = 0; e < this.features.length; ++e) if (b = this.features[e], b.geometry) {
    c = !1;
    for (var f = a.length - 1; 0 <= f; --f) if (d = a[f], this.shouldCluster(d, b)) {
      this.addToCluster(d, b);
      c = !0;
      break
    }
    c || a.push(this.createCluster(this.features[e]))
  }
  this.layer.removeAllFeatures();
  if (0 < a.length) {
    if (1 < this.threshold) {
      b = a.slice();
      a = [
      ];
      e = 0;
      for (d = b.length; e < d; ++e) c = b[e],
      c.attributes.count < this.threshold ? Array.prototype.push.apply(a, c.cluster)  : a.push(c)
    }
    this.clustering = !0;
    this.layer.addFeatures(a);
    this.clustering = !1
  }
  this.clusters = a
}
},
clustersExist: function () {
var a = !1;
if (this.clusters && 0 < this.clusters.length && this.clusters.length == this.layer.features.length) for (var a = !0, b = 0; b < this.clusters.length; ++b) if (this.clusters[b] !=
this.layer.features[b]) {
  a = !1;
  break
}
return a
},
shouldCluster: function (a, b) {
var c = a.geometry.getBounds().getCenterLonLat(),
d = b.geometry.getBounds().getCenterLonLat();
return Math.sqrt(Math.pow(c.lon - d.lon, 2) + Math.pow(c.lat - d.lat, 2)) / this.resolution <= this.distance
},
addToCluster: function (a, b) {
a.cluster.push(b);
a.attributes.count += 1
},
createCluster: function (a) {
var b = a.geometry.getBounds().getCenterLonLat(),
b = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(b.lon, b.lat), {
  count: 1
});
b.cluster = [
  a
];
return b
},
CLASS_NAME: 'OpenLayers.Strategy.Cluster'
});
OpenLayers.Strategy.Filter = OpenLayers.Class(OpenLayers.Strategy, {
filter: null,
cache: null,
caching: !1,
activate: function () {
var a = OpenLayers.Strategy.prototype.activate.apply(this, arguments);
a && (this.cache = [
], this.layer.events.on({
  beforefeaturesadded: this.handleAdd,
  beforefeaturesremoved: this.handleRemove,
  scope: this
}));
return a
},
deactivate: function () {
this.cache = null;
this.layer && this.layer.events && this.layer.events.un({
  beforefeaturesadded: this.handleAdd,
  beforefeaturesremoved: this.handleRemove,
  scope: this
});
return OpenLayers.Strategy.prototype.deactivate.apply(this, arguments)
},
handleAdd: function (a) {
if (!this.caching && this.filter) {
  var b = a.features;
  a.features = [
  ];
  for (var c, d = 0, e = b.length; d < e; ++d) c = b[d],
  this.filter.evaluate(c) ? a.features.push(c)  : this.cache.push(c)
}
},
handleRemove: function () {
this.caching || (this.cache = [
])
},
setFilter: function (a) {
this.filter = a;
a = this.cache;
this.cache = [
];
this.handleAdd({
  features: this.layer.features
});
0 < this.cache.length && (this.caching = !0, this.layer.removeFeatures(this.cache.slice()), this.caching = !1);
0 < a.length && (a = {
  features: a
}, this.handleAdd(a), 0 < a.features.length && (this.caching = !0, this.layer.addFeatures(a.features), this.caching = !1))
},
CLASS_NAME: 'OpenLayers.Strategy.Filter'
});
OpenLayers.Protocol.SOS = function (a) {
var a = OpenLayers.Util.applyDefaults(a, OpenLayers.Protocol.SOS.DEFAULTS),
b = OpenLayers.Protocol.SOS['v' + a.version.replace(/\./g, '_')];
if (!b) throw 'Unsupported SOS version: ' + a.version;
return new b(a)
};
OpenLayers.Protocol.SOS.DEFAULTS = {
version: '1.0.0'
};
OpenLayers.Format.WFSDescribeFeatureType = OpenLayers.Class(OpenLayers.Format.XML, {
namespaces: {
xsd: 'http://www.w3.org/2001/XMLSchema'
},
readers: {
xsd: {
  schema: function (a, b) {
    var c = [
    ],
    d = {
    };
    this.readChildNodes(a, {
      complexTypes: c,
      customTypes: d
    });
    for (var e = a.attributes, f, g, h = 0, i = e.length; h < i; ++h) f = e[h],
    g = f.name,
    0 == g.indexOf('xmlns') ? this.setNamespace(g.split(':') [1] || '', f.value)  : b[g] = f.value;
    b.featureTypes = c;
    b.targetPrefix = this.namespaceAlias[b.targetNamespace];
    h = 0;
    for (i = c.length; h < i; ++h) e = c[h],
    f = d[e.typeName],
    d[e.typeName] && (e.typeName = f.name)
  },
  complexType: function (a, b) {
    var c = {
      typeName: a.getAttribute('name')
    };
    this.readChildNodes(a, c);
    b.complexTypes.push(c)
  },
  complexContent: function (a, b) {
    this.readChildNodes(a, b)
  },
  extension: function (a, b) {
    this.readChildNodes(a, b)
  },
  sequence: function (a, b) {
    var c = {
      elements: [
      ]
    };
    this.readChildNodes(a, c);
    b.properties = c.elements
  },
  element: function (a, b) {
    if (b.elements) {
      for (var c = {
      }, d = a.attributes, e, f = 0, g = d.length; f < g; ++f) e = d[f],
      c[e.name] = e.value;
      d = c.type;
      d || (d = {
      }, this.readChildNodes(a, d), c.restriction = d, c.type = d.base);
      c.localType = (d.base || d).split(':').pop();
      b.elements.push(c)
    }
    b.complexTypes && (d = a.getAttribute('type'), c = d.split(':').pop(), b.customTypes[c] = {
      name: a.getAttribute('name'),
      type: d
    })
  },
  simpleType: function (a, b) {
    this.readChildNodes(a, b)
  },
  restriction: function (a, b) {
    b.base = a.getAttribute('base');
    this.readRestriction(a, b)
  }
}
},
readRestriction: function (a, b) {
for (var c = a.childNodes, d, e, f = 0, g = c.length; f < g; ++f) d = c[f],
1 == d.nodeType && (e = d.nodeName.split(':').pop(), d = d.getAttribute('value'), b[e] ? ('string' == typeof b[e] && (b[e] = [
  b[e]
]), b[e].push(d))  : b[e] = d)
},
read: function (a) {
'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
  a
]));
a && 9 == a.nodeType && (a = a.documentElement);
var b = {
};
this.readNode(a, b);
return b
},
CLASS_NAME: 'OpenLayers.Format.WFSDescribeFeatureType'
});
OpenLayers.Format.GeoRSS = OpenLayers.Class(OpenLayers.Format.XML, {
rssns: 'http://backend.userland.com/rss2',
featureNS: 'http://mapserver.gis.umn.edu/mapserver',
georssns: 'http://www.georss.org/georss',
geons: 'http://www.w3.org/2003/01/geo/wgs84_pos#',
featureTitle: 'Untitled',
featureDescription: 'No Description',
gmlParser: null,
xy: !1,
createGeometryFromItem: function (a) {
var b = this.getElementsByTagNameNS(a, this.georssns, 'point'),
c = this.getElementsByTagNameNS(a, this.geons, 'lat'),
d = this.getElementsByTagNameNS(a, this.geons, 'long'),
e = this.getElementsByTagNameNS(a, this.georssns, 'line'),
f = this.getElementsByTagNameNS(a, this.georssns, 'polygon'),
g = this.getElementsByTagNameNS(a, this.georssns, 'where'),
a = this.getElementsByTagNameNS(a, this.georssns, 'box');
if (0 < b.length || 0 < c.length && 0 < d.length) {
  0 < b.length ? (c = OpenLayers.String.trim(b[0].firstChild.nodeValue).split(/\s+/), 2 != c.length && (c = OpenLayers.String.trim(b[0].firstChild.nodeValue).split(/\s*,\s*/)))  : c = [
    parseFloat(c[0].firstChild.nodeValue),
    parseFloat(d[0].firstChild.nodeValue)
  ];
  var h = new OpenLayers.Geometry.Point(c[1], c[0])
} else if (0 < e.length) {
  c = OpenLayers.String.trim(this.getChildValue(e[0])).split(/\s+/);
  d = [
  ];
  e = 0;
  for (f = c.length; e < f; e += 2) b = new OpenLayers.Geometry.Point(c[e + 1], c[e]),
  d.push(b);
  h = new OpenLayers.Geometry.LineString(d)
} else if (0 < f.length) {
  c = OpenLayers.String.trim(this.getChildValue(f[0])).split(/\s+/);
  d = [
  ];
  e = 0;
  for (f = c.length; e < f; e += 2) b = new OpenLayers.Geometry.Point(c[e + 1], c[e]),
  d.push(b);
  h = new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(d)])
} else 0 <
g.length ? (this.gmlParser || (this.gmlParser = new OpenLayers.Format.GML({
  xy: this.xy
})), h = this.gmlParser.parseFeature(g[0]).geometry)  : 0 < a.length && (c = OpenLayers.String.trim(a[0].firstChild.nodeValue).split(/\s+/), d = [
], 3 < c.length && (b = new OpenLayers.Geometry.Point(c[1], c[0]), d.push(b), b = new OpenLayers.Geometry.Point(c[1], c[2]), d.push(b), b = new OpenLayers.Geometry.Point(c[3], c[2]), d.push(b), b = new OpenLayers.Geometry.Point(c[3], c[0]), d.push(b), b = new OpenLayers.Geometry.Point(c[1], c[0]), d.push(b)), h = new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(d)]));
h && (this.internalProjection && this.externalProjection) && h.transform(this.externalProjection, this.internalProjection);
return h
},
createFeatureFromItem: function (a) {
var b = this.createGeometryFromItem(a),
c = this._getChildValue(a, '*', 'title', this.featureTitle),
d = this._getChildValue(a, '*', 'description', this._getChildValue(a, '*', 'content', this._getChildValue(a, '*', 'summary', this.featureDescription))),
e = this._getChildValue(a, '*', 'link');
if (!e) try {
  e = this.getElementsByTagNameNS(a, '*', 'link') [0].getAttribute('href')
} catch (f) {
  e = null
}
a = this._getChildValue(a, '*', 'id', null);
b = new OpenLayers.Feature.Vector(b, {
  title: c,
  description: d,
  link: e
});
b.fid = a;
return b
},
_getChildValue: function (a, b, c, d) {
return (a = this.getElementsByTagNameNS(a, b, c)) && a[0] && a[0].firstChild && a[0].firstChild.nodeValue ? this.getChildValue(a[0])  : void 0 == d ? '' : d
},
read: function (a) {
'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
  a
]));
var b = null,
b = this.getElementsByTagNameNS(a, '*', 'item');
0 == b.length && (b = this.getElementsByTagNameNS(a, '*', 'entry'));
for (var a = b.length, c = Array(a), d = 0; d < a; d++) c[d] = this.createFeatureFromItem(b[d]);
return c
},
write: function (a) {
var b;
if (OpenLayers.Util.isArray(a)) {
  b = this.createElementNS(this.rssns, 'rss');
  for (var c = 0, d = a.length; c < d; c++) b.appendChild(this.createFeatureXML(a[c]))
} else b = this.createFeatureXML(a);
return OpenLayers.Format.XML.prototype.write.apply(this, [
  b
])
},
createFeatureXML: function (a) {
var b = this.buildGeometryNode(a.geometry),
c = this.createElementNS(this.rssns, 'item'),
d = this.createElementNS(this.rssns, 'title');
d.appendChild(this.createTextNode(a.attributes.title ? a.attributes.title : ''));
var e = this.createElementNS(this.rssns, 'description');
e.appendChild(this.createTextNode(a.attributes.description ? a.attributes.description : ''));
c.appendChild(d);
c.appendChild(e);
a.attributes.link && (d = this.createElementNS(this.rssns, 'link'), d.appendChild(this.createTextNode(a.attributes.link)), c.appendChild(d));
for (var f in a.attributes) 'link' == f || ('title' == f || 'description' == f) || (d = this.createTextNode(a.attributes[f]), e = f, - 1 !=
f.search(':') && (e = f.split(':') [1]), e = this.createElementNS(this.featureNS, 'feature:' + e), e.appendChild(d), c.appendChild(e));
c.appendChild(b);
return c
},
buildGeometryNode: function (a) {
this.internalProjection && this.externalProjection && (a = a.clone(), a.transform(this.internalProjection, this.externalProjection));
var b;
if ('OpenLayers.Geometry.Polygon' == a.CLASS_NAME) b = this.createElementNS(this.georssns, 'georss:polygon'),
b.appendChild(this.buildCoordinatesNode(a.components[0]));
 else if ('OpenLayers.Geometry.LineString' ==
a.CLASS_NAME) b = this.createElementNS(this.georssns, 'georss:line'),
b.appendChild(this.buildCoordinatesNode(a));
 else if ('OpenLayers.Geometry.Point' == a.CLASS_NAME) b = this.createElementNS(this.georssns, 'georss:point'),
b.appendChild(this.buildCoordinatesNode(a));
 else throw 'Couldn\'t parse ' + a.CLASS_NAME;
return b
},
buildCoordinatesNode: function (a) {
var b = null;
a.components && (b = a.components);
if (b) {
  for (var a = b.length, c = Array(a), d = 0; d < a; d++) c[d] = b[d].y + ' ' + b[d].x;
  b = c.join(' ')
} else b = a.y + ' ' + a.x;
return this.createTextNode(b)
},
CLASS_NAME: 'OpenLayers.Format.GeoRSS'
});
OpenLayers.Format.WPSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
defaultVersion: '1.0.0',
CLASS_NAME: 'OpenLayers.Format.WPSCapabilities'
});
OpenLayers.Format.WPSCapabilities.v1_0_0 = OpenLayers.Class(OpenLayers.Format.XML, {
namespaces: {
ows: 'http://www.opengis.net/ows/1.1',
wps: 'http://www.opengis.net/wps/1.0.0',
xlink: 'http://www.w3.org/1999/xlink'
},
regExes: {
trimSpace: /^\s*|\s*$/g,
removeSpace: /\s*/g,
splitSpace: /\s+/,
trimComma: /\s*,\s*/g
},
initialize: function (a) {
OpenLayers.Format.XML.prototype.initialize.apply(this, [
  a
])
},
read: function (a) {
'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
  a
]));
a && 9 == a.nodeType && (a = a.documentElement);
var b = {
};
this.readNode(a, b);
return b
},
readers: {
wps: {
  Capabilities: function (a, b) {
    this.readChildNodes(a, b)
  },
  ProcessOfferings: function (a, b) {
    b.processOfferings = {
    };
    this.readChildNodes(a, b.processOfferings)
  },
  Process: function (a, b) {
    var c = {
      processVersion: this.getAttributeNS(a, this.namespaces.wps, 'processVersion')
    };
    this.readChildNodes(a, c);
    b[c.identifier] = c
  },
  Languages: function (a, b) {
    b.languages = [
    ];
    this.readChildNodes(a, b.languages)
  },
  Default: function (a, b) {
    var c = {
      isDefault: !0
    };
    this.readChildNodes(a, c);
    b.push(c)
  },
  Supported: function (a, b) {
    var c = {
    };
    this.readChildNodes(a, c);
    b.push(c)
  }
},
ows: OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers.ows
},
CLASS_NAME: 'OpenLayers.Format.WPSCapabilities.v1_0_0'
});
OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control, {
type: OpenLayers.Control.TYPE_TOOL,
containerCenter: null,
pinchOrigin: null,
currentCenter: null,
autoActivate: !0,
initialize: function (a) {
OpenLayers.Control.prototype.initialize.apply(this, arguments);
this.handler = new OpenLayers.Handler.Pinch(this, {
  start: this.pinchStart,
  move: this.pinchMove,
  done: this.pinchDone
}, this.handlerOptions)
},
activate: function () {
var a = OpenLayers.Control.prototype.activate.apply(this, arguments);
a && (this.map.events.on({
  moveend: this.updateContainerCenter,
  scope: this
}), this.updateContainerCenter());
return a
},
deactivate: function () {
var a = OpenLayers.Control.prototype.deactivate.apply(this, arguments);
this.map && this.map.events && this.map.events.un({
  moveend: this.updateContainerCenter,
  scope: this
});
return a
},
updateContainerCenter: function () {
var a = this.map.layerContainerDiv;
this.containerCenter = {
  x: parseInt(a.style.left, 10) + 50,
  y: parseInt(a.style.top, 10) + 50
}
},
pinchStart: function (a) {
this.currentCenter = this.pinchOrigin = a.xy
},
pinchMove: function (a, b) {
var c = b.scale,
d = this.containerCenter,
e = this.pinchOrigin,
f = a.xy,
g = Math.round(f.x - e.x + (c - 1) * (d.x - e.x)),
d = Math.round(f.y - e.y + (c - 1) * (d.y - e.y));
this.applyTransform('translate(' + g + 'px, ' + d + 'px) scale(' + c + ')');
this.currentCenter = f
},
applyTransform: function (a) {
var b = this.map.layerContainerDiv.style;
b['-webkit-transform'] = a;
b['-moz-transform'] = a
},
pinchDone: function (a, b, c) {
this.applyTransform('');
a = this.map.getZoomForResolution(this.map.getResolution() / c.scale, !0);
if (a !== this.map.getZoom() || !this.currentCenter.equals(this.pinchOrigin)) {
  var b = this.map.getResolutionForZoom(a),
  c = this.map.getLonLatFromPixel(this.pinchOrigin),
  d = this.currentCenter,
  e = this.map.getSize();
  c.lon += b * (e.w / 2 - d.x);
  c.lat -= b * (e.h / 2 - d.y);
  this.map.div.clientWidth = this.map.div.clientWidth;
  this.map.setCenter(c, a)
}
},
CLASS_NAME: 'OpenLayers.Control.PinchZoom'
});
OpenLayers.Control.TouchNavigation = OpenLayers.Class(OpenLayers.Control, {
dragPan: null,
dragPanOptions: null,
pinchZoom: null,
pinchZoomOptions: null,
clickHandlerOptions: null,
documentDrag: !1,
autoActivate: !0,
initialize: function (a) {
this.handlers = {
};
OpenLayers.Control.prototype.initialize.apply(this, arguments)
},
destroy: function () {
this.deactivate();
this.dragPan && this.dragPan.destroy();
this.dragPan = null;
this.pinchZoom && (this.pinchZoom.destroy(), delete this.pinchZoom);
OpenLayers.Control.prototype.destroy.apply(this, arguments)
},
activate: function () {
return OpenLayers.Control.prototype.activate.apply(this, arguments) ? (this.dragPan.activate(), this.handlers.click.activate(), this.pinchZoom.activate(), !0)  : !1
},
deactivate: function () {
return OpenLayers.Control.prototype.deactivate.apply(this, arguments) ? (this.dragPan.deactivate(), this.handlers.click.deactivate(), this.pinchZoom.deactivate(), !0)  : !1
},
draw: function () {
var a = {
  click: this.defaultClick,
  dblclick: this.defaultDblClick
},
b = OpenLayers.Util.extend({
  'double': !0,
  stopDouble: !0,
  pixelTolerance: 2
}, this.clickHandlerOptions);
this.handlers.click = new OpenLayers.Handler.Click(this, a, b);
this.dragPan = new OpenLayers.Control.DragPan(OpenLayers.Util.extend({
  map: this.map,
  documentDrag: this.documentDrag
}, this.dragPanOptions));
this.dragPan.draw();
this.pinchZoom = new OpenLayers.Control.PinchZoom(OpenLayers.Util.extend({
  map: this.map
}, this.pinchZoomOptions))
},
defaultClick: function (a) {
a.lastTouches && 2 == a.lastTouches.length && this.map.zoomOut()
},
defaultDblClick: function (a) {
this.map.setCenter(this.map.getLonLatFromViewPortPx(a.xy), this.map.zoom + 1)
},
CLASS_NAME: 'OpenLayers.Control.TouchNavigation'
});
OpenLayers.Style2 = OpenLayers.Class({
id: null,
name: null,
title: null,
description: null,
layerName: null,
isDefault: !1,
rules: null,
initialize: function (a) {
OpenLayers.Util.extend(this, a);
this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + '_')
},
destroy: function () {
for (var a = 0, b = this.rules.length; a < b; a++) this.rules[a].destroy();
delete this.rules
},
clone: function () {
var a = OpenLayers.Util.extend({
}, this);
if (this.rules) {
  a.rules = [
  ];
  for (var b = 0, c = this.rules.length; b < c; ++b) a.rules.push(this.rules[b].clone())
}
return new OpenLayers.Style2(a)
},
CLASS_NAME: 'OpenLayers.Style2'
});
OpenLayers.Format.WFS = OpenLayers.Class(OpenLayers.Format.GML, {
layer: null,
wfsns: 'http://www.opengis.net/wfs',
ogcns: 'http://www.opengis.net/ogc',
initialize: function (a, b) {
OpenLayers.Format.GML.prototype.initialize.apply(this, [
  a
]);
this.layer = b;
this.layer.featureNS && (this.featureNS = this.layer.featureNS);
this.layer.options.geometry_column && (this.geometryName = this.layer.options.geometry_column);
this.layer.options.typename && (this.featureName = this.layer.options.typename)
},
write: function (a) {
var b = this.createElementNS(this.wfsns, 'wfs:Transaction');
b.setAttribute('version', '1.0.0');
b.setAttribute('service', 'WFS');
for (var c = 0; c < a.length; c++) switch (a[c].state) {
  case OpenLayers.State.INSERT:
    b.appendChild(this.insert(a[c]));
    break;
  case OpenLayers.State.UPDATE:
    b.appendChild(this.update(a[c]));
    break;
  case OpenLayers.State.DELETE:
    b.appendChild(this.remove(a[c]))
}
return OpenLayers.Format.XML.prototype.write.apply(this, [
  b
])
},
createFeatureXML: function (a) {
var b = this.buildGeometryNode(a.geometry),
c = this.createElementNS(this.featureNS, 'feature:' +
this.geometryName);
c.appendChild(b);
b = this.createElementNS(this.featureNS, 'feature:' + this.featureName);
b.appendChild(c);
for (var d in a.attributes) {
  var c = this.createTextNode(a.attributes[d]),
  e = d;
  - 1 != d.search(':') && (e = d.split(':') [1]);
  e = this.createElementNS(this.featureNS, 'feature:' + e);
  e.appendChild(c);
  b.appendChild(e)
}
return b
},
insert: function (a) {
var b = this.createElementNS(this.wfsns, 'wfs:Insert');
b.appendChild(this.createFeatureXML(a));
return b
},
update: function (a) {
a.fid || OpenLayers.Console.userError(OpenLayers.i18n('noFID'));
var b = this.createElementNS(this.wfsns, 'wfs:Update');
b.setAttribute('typeName', this.featurePrefix + ':' + this.featureName);
b.setAttribute('xmlns:' + this.featurePrefix, this.featureNS);
var c = this.createElementNS(this.wfsns, 'wfs:Property'),
d = this.createElementNS(this.wfsns, 'wfs:Name'),
e = this.createTextNode(this.geometryName);
d.appendChild(e);
c.appendChild(d);
d = this.createElementNS(this.wfsns, 'wfs:Value');
e = this.buildGeometryNode(a.geometry);
a.layer && e.setAttribute('srsName', a.layer.projection.getCode());
d.appendChild(e);
c.appendChild(d);
b.appendChild(c);
for (var f in a.attributes) c = this.createElementNS(this.wfsns, 'wfs:Property'),
d = this.createElementNS(this.wfsns, 'wfs:Name'),
d.appendChild(this.createTextNode(f)),
c.appendChild(d),
d = this.createElementNS(this.wfsns, 'wfs:Value'),
d.appendChild(this.createTextNode(a.attributes[f])),
c.appendChild(d),
b.appendChild(c);
c = this.createElementNS(this.ogcns, 'ogc:Filter');
f = this.createElementNS(this.ogcns, 'ogc:FeatureId');
f.setAttribute('fid', a.fid);
c.appendChild(f);
b.appendChild(c);
return b
},
remove: function (a) {
if (!a.fid) return OpenLayers.Console.userError(OpenLayers.i18n('noFID')),
!1;
var b = this.createElementNS(this.wfsns, 'wfs:Delete');
b.setAttribute('typeName', this.featurePrefix + ':' + this.featureName);
b.setAttribute('xmlns:' + this.featurePrefix, this.featureNS);
var c = this.createElementNS(this.ogcns, 'ogc:Filter'),
d = this.createElementNS(this.ogcns, 'ogc:FeatureId');
d.setAttribute('fid', a.fid);
c.appendChild(d);
b.appendChild(c);
return b
},
destroy: function () {
this.layer = null
},
CLASS_NAME: 'OpenLayers.Format.WFS'
});
OpenLayers.Format.SLD.v1_0_0_GeoServer = OpenLayers.Class(OpenLayers.Format.SLD.v1_0_0, {
version: '1.0.0',
profile: 'GeoServer',
readers: OpenLayers.Util.applyDefaults({
sld: OpenLayers.Util.applyDefaults({
  Priority: function (a, b) {
    var c = this.readers.ogc._expression.call(this, a);
    c && (b.priority = c)
  },
  VendorOption: function (a, b) {
    b.vendorOptions || (b.vendorOptions = {
    });
    b.vendorOptions[a.getAttribute('name')] = this.getChildValue(a)
  }
}, OpenLayers.Format.SLD.v1_0_0.prototype.readers.sld)
}, OpenLayers.Format.SLD.v1_0_0.prototype.readers),
writers: OpenLayers.Util.applyDefaults({
sld: OpenLayers.Util.applyDefaults({
  Priority: function (a) {
    return this.writers.sld._OGCExpression.call(this, 'sld:Priority', a)
  },
  VendorOption: function (a) {
    return this.createElementNSPlus('sld:VendorOption', {
      attributes: {
        name: a.name
      },
      value: a.value
    })
  },
  TextSymbolizer: function (a) {
    var b = OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld.TextSymbolizer.apply(this, arguments);
    !1 !== a.graphic && (a.externalGraphic || a.graphicName) && this.writeNode('Graphic', a, b);
    'priority' in a && this.writeNode('Priority', a.priority, b);
    return this.addVendorOptions(b, a)
  },
  PointSymbolizer: function (a) {
    return this.addVendorOptions(OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld.PointSymbolizer.apply(this, arguments), a)
  },
  LineSymbolizer: function (a) {
    return this.addVendorOptions(OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld.LineSymbolizer.apply(this, arguments), a)
  },
  PolygonSymbolizer: function (a) {
    return this.addVendorOptions(OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld.PolygonSymbolizer.apply(this, arguments), a)
  }
}, OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld)
}, OpenLayers.Format.SLD.v1_0_0.prototype.writers),
addVendorOptions: function (a, b) {
if (b.vendorOptions) for (var c in b.vendorOptions) this.writeNode('VendorOption', {
  name: c,
  value: b.vendorOptions[c]
}, a);
return a
},
CLASS_NAME: 'OpenLayers.Format.SLD.v1_0_0_GeoServer'
});
OpenLayers.Layer.Boxes = OpenLayers.Class(OpenLayers.Layer.Markers, {
drawMarker: function (a) {
var b = this.map.getLayerPxFromLonLat({
  lon: a.bounds.left,
  lat: a.bounds.top
}),
c = this.map.getLayerPxFromLonLat({
  lon: a.bounds.right,
  lat: a.bounds.bottom
});
null == c || null == b ? a.display(!1)  : (b = a.draw(b, {
  w: Math.max(1, c.x - b.x),
  h: Math.max(1, c.y - b.y)
}), a.drawn || (this.div.appendChild(b), a.drawn = !0))
},
removeMarker: function (a) {
OpenLayers.Util.removeItem(this.markers, a);
null != a.div && a.div.parentNode == this.div && this.div.removeChild(a.div)
},
CLASS_NAME: 'OpenLayers.Layer.Boxes'
});
OpenLayers.Format.WFSCapabilities.v1_0_0 = OpenLayers.Class(OpenLayers.Format.WFSCapabilities.v1, {
readers: {
wfs: OpenLayers.Util.applyDefaults({
  Service: function (a, b) {
    b.service = {
    };
    this.readChildNodes(a, b.service)
  },
  Fees: function (a, b) {
    var c = this.getChildValue(a);
    c && 'none' != c.toLowerCase() && (b.fees = c)
  },
  AccessConstraints: function (a, b) {
    var c = this.getChildValue(a);
    c && 'none' != c.toLowerCase() && (b.accessConstraints = c)
  },
  OnlineResource: function (a, b) {
    var c = this.getChildValue(a);
    c && 'none' != c.toLowerCase() && (b.onlineResource = c)
  },
  Keywords: function (a, b) {
    var c = this.getChildValue(a);
    c && 'none' != c.toLowerCase() && (b.keywords = c.split(', '))
  },
  Capability: function (a, b) {
    b.capability = {
    };
    this.readChildNodes(a, b.capability)
  },
  Request: function (a, b) {
    b.request = {
    };
    this.readChildNodes(a, b.request)
  },
  GetFeature: function (a, b) {
    b.getfeature = {
      href: {
      },
      formats: [
      ]
    };
    this.readChildNodes(a, b.getfeature)
  },
  ResultFormat: function (a, b) {
    for (var c = a.childNodes, d, e = 0; e < c.length; e++) d = c[e],
    1 == d.nodeType && b.formats.push(d.nodeName)
  },
  DCPType: function (a, b) {
    this.readChildNodes(a, b)
  },
  HTTP: function (a, b) {
    this.readChildNodes(a, b.href)
  },
  Get: function (a, b) {
    b.get = a.getAttribute('onlineResource')
  },
  Post: function (a, b) {
    b.post = a.getAttribute('onlineResource')
  },
  SRS: function (a, b) {
    var c = this.getChildValue(a);
    c && (b.srs = c)
  }
}, OpenLayers.Format.WFSCapabilities.v1.prototype.readers.wfs)
},
CLASS_NAME: 'OpenLayers.Format.WFSCapabilities.v1_0_0'
});
OpenLayers.Format.WMSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, {
defaultVersion: '1.1.1',
profile: null,
CLASS_NAME: 'OpenLayers.Format.WMSCapabilities'
});
OpenLayers.Format.WMSCapabilities.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
namespaces: {
wms: 'http://www.opengis.net/wms',
xlink: 'http://www.w3.org/1999/xlink',
xsi: 'http://www.w3.org/2001/XMLSchema-instance'
},
defaultPrefix: 'wms',
read: function (a) {
'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
  a
]));
var b = a;
a && 9 == a.nodeType && (a = a.documentElement);
var c = {
};
this.readNode(a, c);
void 0 === c.service && (a = new OpenLayers.Format.OGCExceptionReport, c.error = a.read(b));
return c
},
readers: {
wms: {
  Service: function (a, b) {
    b.service = {
    };
    this.readChildNodes(a, b.service)
  },
  Name: function (a, b) {
    b.name = this.getChildValue(a)
  },
  Title: function (a, b) {
    b.title = this.getChildValue(a)
  },
  Abstract: function (a, b) {
    b['abstract'] = this.getChildValue(a)
  },
  BoundingBox: function (a) {
    var b = {
    };
    b.bbox = [
      parseFloat(a.getAttribute('minx')),
      parseFloat(a.getAttribute('miny')),
      parseFloat(a.getAttribute('maxx')),
      parseFloat(a.getAttribute('maxy'))
    ];
    a = {
      x: parseFloat(a.getAttribute('resx')),
      y: parseFloat(a.getAttribute('resy'))
    };
    if (!isNaN(a.x) || !isNaN(a.y)) b.res = a;
    return b
  },
  OnlineResource: function (a, b) {
    b.href = this.getAttributeNS(a, this.namespaces.xlink, 'href')
  },
  ContactInformation: function (a, b) {
    b.contactInformation = {
    };
    this.readChildNodes(a, b.contactInformation)
  },
  ContactPersonPrimary: function (a, b) {
    b.personPrimary = {
    };
    this.readChildNodes(a, b.personPrimary)
  },
  ContactPerson: function (a, b) {
    b.person = this.getChildValue(a)
  },
  ContactOrganization: function (a, b) {
    b.organization = this.getChildValue(a)
  },
  ContactPosition: function (a, b) {
    b.position = this.getChildValue(a)
  },
  ContactAddress: function (a, b) {
    b.contactAddress = {
    };
    this.readChildNodes(a, b.contactAddress)
  },
  AddressType: function (a, b) {
    b.type = this.getChildValue(a)
  },
  Address: function (a, b) {
    b.address = this.getChildValue(a)
  },
  City: function (a, b) {
    b.city = this.getChildValue(a)
  },
  StateOrProvince: function (a, b) {
    b.stateOrProvince = this.getChildValue(a)
  },
  PostCode: function (a, b) {
    b.postcode = this.getChildValue(a)
  },
  Country: function (a, b) {
    b.country = this.getChildValue(a)
  },
  ContactVoiceTelephone: function (a, b) {
    b.phone = this.getChildValue(a)
  },
  ContactFacsimileTelephone: function (a, b) {
    b.fax = this.getChildValue(a)
  },
  ContactElectronicMailAddress: function (a, b) {
    b.email = this.getChildValue(a)
  },
  Fees: function (a, b) {
    var c = this.getChildValue(a);
    c && 'none' != c.toLowerCase() && (b.fees = c)
  },
  AccessConstraints: function (a, b) {
    var c = this.getChildValue(a);
    c && 'none' != c.toLowerCase() && (b.accessConstraints = c)
  },
  Capability: function (a, b) {
    b.capability = {
      nestedLayers: [
      ],
      layers: [
      ]
    };
    this.readChildNodes(a, b.capability)
  },
  Request: function (a, b) {
    b.request = {
    };
    this.readChildNodes(a, b.request)
  },
  GetCapabilities: function (a, b) {
    b.getcapabilities = {
      formats: [
      ]
    };
    this.readChildNodes(a, b.getcapabilities)
  },
  Format: function (a, b) {
    OpenLayers.Util.isArray(b.formats) ? b.formats.push(this.getChildValue(a))  : b.format = this.getChildValue(a)
  },
  DCPType: function (a, b) {
    this.readChildNodes(a, b)
  },
  HTTP: function (a, b) {
    this.readChildNodes(a, b)
  },
  Get: function (a, b) {
    b.get = {
    };
    this.readChildNodes(a, b.get);
    b.href || (b.href = b.get.href)
  },
  Post: function (a, b) {
    b.post = {
    };
    this.readChildNodes(a, b.post);
    b.href || (b.href = b.get.href)
  },
  GetMap: function (a, b) {
    b.getmap = {
      formats: [
      ]
    };
    this.readChildNodes(a, b.getmap)
  },
  GetFeatureInfo: function (a, b) {
    b.getfeatureinfo = {
      formats: [
      ]
    };
    this.readChildNodes(a, b.getfeatureinfo)
  },
  Exception: function (a, b) {
    b.exception = {
      formats: [
      ]
    };
    this.readChildNodes(a, b.exception)
  },
  Layer: function (a, b) {
    var c,
    d;
    b.capability ? (d = b.capability, c = b)  : d = b;
    var e = a.getAttributeNode('queryable'),
    f = e && e.specified ? a.getAttribute('queryable')  : null,
    g = (e = a.getAttributeNode('cascaded')) && e.specified ? a.getAttribute('cascaded')  : null,
    e = (e = a.getAttributeNode('opaque')) && e.specified ?
    a.getAttribute('opaque')  : null,
    h = a.getAttribute('noSubsets'),
    i = a.getAttribute('fixedWidth'),
    j = a.getAttribute('fixedHeight'),
    k = c || {
    },
    l = OpenLayers.Util.extend;
    c = {
      nestedLayers: [
      ],
      styles: c ? [
      ].concat(c.styles)  : [
      ],
      srs: c ? l({
      }, k.srs)  : {
      },
      metadataURLs: [
      ],
      bbox: c ? l({
      }, k.bbox)  : {
      },
      llbbox: k.llbbox,
      dimensions: c ? l({
      }, k.dimensions)  : {
      },
      authorityURLs: c ? l({
      }, k.authorityURLs)  : {
      },
      identifiers: {
      },
      keywords: [
      ],
      queryable: f && '' !== f ? '1' === f || 'true' === f : k.queryable || !1,
      cascaded: null !== g ? parseInt(g)  : k.cascaded || 0,
      opaque: e ? '1' ===
      e || 'true' === e : k.opaque || !1,
      noSubsets: null !== h ? '1' === h || 'true' === h : k.noSubsets || !1,
      fixedWidth: null != i ? parseInt(i)  : k.fixedWidth || 0,
      fixedHeight: null != j ? parseInt(j)  : k.fixedHeight || 0,
      minScale: k.minScale,
      maxScale: k.maxScale,
      attribution: k.attribution
    };
    b.nestedLayers.push(c);
    c.capability = d;
    this.readChildNodes(a, c);
    delete c.capability;
    if (c.name && (f = c.name.split(':'), g = d.request, e = g.getfeatureinfo, 0 < f.length && (c.prefix = f[0]), d.layers.push(c), void 0 === c.formats && (c.formats = g.getmap.formats), void 0 === c.infoFormats && e)) c.infoFormats = e.formats
  },
  Attribution: function (a, b) {
    b.attribution = {
    };
    this.readChildNodes(a, b.attribution)
  },
  LogoURL: function (a, b) {
    b.logo = {
      width: a.getAttribute('width'),
      height: a.getAttribute('height')
    };
    this.readChildNodes(a, b.logo)
  },
  Style: function (a, b) {
    var c = {
    };
    b.styles.push(c);
    this.readChildNodes(a, c)
  },
  LegendURL: function (a, b) {
    var c = {
      width: a.getAttribute('width'),
      height: a.getAttribute('height')
    };
    b.legend = c;
    this.readChildNodes(a, c)
  },
  MetadataURL: function (a, b) {
    var c = {
      type: a.getAttribute('type')
    };
    b.metadataURLs.push(c);
    this.readChildNodes(a, c)
  },
  DataURL: function (a, b) {
    b.dataURL = {
    };
    this.readChildNodes(a, b.dataURL)
  },
  FeatureListURL: function (a, b) {
    b.featureListURL = {
    };
    this.readChildNodes(a, b.featureListURL)
  },
  AuthorityURL: function (a, b) {
    var c = a.getAttribute('name'),
    d = {
    };
    this.readChildNodes(a, d);
    b.authorityURLs[c] = d.href
  },
  Identifier: function (a, b) {
    var c = a.getAttribute('authority');
    b.identifiers[c] = this.getChildValue(a)
  },
  KeywordList: function (a, b) {
    this.readChildNodes(a, b)
  },
  SRS: function (a, b) {
    b.srs[this.getChildValue(a)] = !0
  }
}
},
CLASS_NAME: 'OpenLayers.Format.WMSCapabilities.v1'
});
OpenLayers.Format.WMSCapabilities.v1_3 = OpenLayers.Class(OpenLayers.Format.WMSCapabilities.v1, {
readers: {
wms: OpenLayers.Util.applyDefaults({
  WMS_Capabilities: function (a, b) {
    this.readChildNodes(a, b)
  },
  LayerLimit: function (a, b) {
    b.layerLimit = parseInt(this.getChildValue(a))
  },
  MaxWidth: function (a, b) {
    b.maxWidth = parseInt(this.getChildValue(a))
  },
  MaxHeight: function (a, b) {
    b.maxHeight = parseInt(this.getChildValue(a))
  },
  BoundingBox: function (a, b) {
    var c = OpenLayers.Format.WMSCapabilities.v1.prototype.readers.wms.BoundingBox.apply(this, [
      a,
      b
    ]);
    c.srs = a.getAttribute('CRS');
    b.bbox[c.srs] = c
  },
  CRS: function (a, b) {
    this.readers.wms.SRS.apply(this, [
      a,
      b
    ])
  },
  EX_GeographicBoundingBox: function (a, b) {
    b.llbbox = [
    ];
    this.readChildNodes(a, b.llbbox)
  },
  westBoundLongitude: function (a, b) {
    b[0] = this.getChildValue(a)
  },
  eastBoundLongitude: function (a, b) {
    b[2] = this.getChildValue(a)
  },
  southBoundLatitude: function (a, b) {
    b[1] = this.getChildValue(a)
  },
  northBoundLatitude: function (a, b) {
    b[3] = this.getChildValue(a)
  },
  MinScaleDenominator: function (a, b) {
    b.maxScale = parseFloat(this.getChildValue(a)).toPrecision(16)
  },
  MaxScaleDenominator: function (a, b) {
    b.minScale = parseFloat(this.getChildValue(a)).toPrecision(16)
  },
  Dimension: function (a, b) {
    var c = {
      name: a.getAttribute('name').toLowerCase(),
      units: a.getAttribute('units'),
      unitsymbol: a.getAttribute('unitSymbol'),
      nearestVal: '1' === a.getAttribute('nearestValue'),
      multipleVal: '1' === a.getAttribute('multipleValues'),
      'default': a.getAttribute('default') || '',
      current: '1' === a.getAttribute('current'),
      values: this.getChildValue(a).split(',')
    };
    b.dimensions[c.name] = c
  },
  Keyword: function (a, b) {
    var c = {
      value: this.getChildValue(a),
      vocabulary: a.getAttribute('vocabulary')
    };
    b.keywords && b.keywords.push(c)
  }
}, OpenLayers.Format.WMSCapabilities.v1.prototype.readers.wms),
sld: {
  UserDefinedSymbolization: function (a, b) {
    this.readers.wms.UserDefinedSymbolization.apply(this, [
      a,
      b
    ]);
    b.userSymbols.inlineFeature = 1 == parseInt(a.getAttribute('InlineFeature'));
    b.userSymbols.remoteWCS = 1 == parseInt(a.getAttribute('RemoteWCS'))
  },
  DescribeLayer: function (a, b) {
    this.readers.wms.DescribeLayer.apply(this, [
      a,
      b
    ])
  },
  GetLegendGraphic: function (a, b) {
    this.readers.wms.GetLegendGraphic.apply(this, [
      a,
      b
    ])
  }
}
},
CLASS_NAME: 'OpenLayers.Format.WMSCapabilities.v1_3'
});
OpenLayers.Layer.Zoomify = OpenLayers.Class(OpenLayers.Layer.Grid, {
size: null,
isBaseLayer: !0,
standardTileSize: 256,
tileOriginCorner: 'tl',
numberOfTiers: 0,
tileCountUpToTier: null,
tierSizeInTiles: null,
tierImageSize: null,
initialize: function (a, b, c, d) {
this.initializeZoomify(c);
OpenLayers.Layer.Grid.prototype.initialize.apply(this, [
  a,
  b,
  c,
  {
  },
  d
])
},
initializeZoomify: function (a) {
var a = a.clone(),
b = new OpenLayers.Size(Math.ceil(a.w / this.standardTileSize), Math.ceil(a.h / this.standardTileSize));
this.tierSizeInTiles = [
  b
];
for (this.tierImageSize = [
  a
]; a.w > this.standardTileSize || a.h > this.standardTileSize; ) a = new OpenLayers.Size(Math.floor(a.w / 2), Math.floor(a.h / 2)),
b = new OpenLayers.Size(Math.ceil(a.w / this.standardTileSize), Math.ceil(a.h / this.standardTileSize)),
this.tierSizeInTiles.push(b),
this.tierImageSize.push(a);
this.tierSizeInTiles.reverse();
this.tierImageSize.reverse();
this.numberOfTiers = this.tierSizeInTiles.length;
this.tileCountUpToTier = [
  0
];
for (a = 1; a < this.numberOfTiers; a++) this.tileCountUpToTier.push(this.tierSizeInTiles[a -
1].w * this.tierSizeInTiles[a - 1].h + this.tileCountUpToTier[a - 1])
},
destroy: function () {
OpenLayers.Layer.Grid.prototype.destroy.apply(this, arguments);
this.tileCountUpToTier.length = 0;
this.tierSizeInTiles.length = 0;
this.tierImageSize.length = 0
},
clone: function (a) {
null == a && (a = new OpenLayers.Layer.Zoomify(this.name, this.url, this.size, this.options));
return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [
  a
])
},
getURL: function (a) {
var a = this.adjustBounds(a),
b = this.map.getResolution(),
c = Math.round((a.left - this.tileOrigin.lon) / (b * this.tileSize.w)),
a = Math.round((this.tileOrigin.lat - a.top) / (b * this.tileSize.h)),
b = this.map.getZoom(),
c = 'TileGroup' + Math.floor((c + a * this.tierSizeInTiles[b].w + this.tileCountUpToTier[b]) / 256) + '/' + b + '-' + c + '-' + a + '.jpg',
a = this.url;
OpenLayers.Util.isArray(a) && (a = this.selectUrl(c, a));
return a + c
},
getImageSize: function () {
if (0 < arguments.length) {
  var a = this.adjustBounds(arguments[0]),
  b = this.map.getResolution(),
  c = Math.round((a.left - this.tileOrigin.lon) / (b * this.tileSize.w)),
  a = Math.round((this.tileOrigin.lat -
  a.top) / (b * this.tileSize.h)),
  b = this.map.getZoom(),
  d = this.standardTileSize,
  e = this.standardTileSize;
  c == this.tierSizeInTiles[b].w - 1 && (d = this.tierImageSize[b].w % this.standardTileSize);
  a == this.tierSizeInTiles[b].h - 1 && (e = this.tierImageSize[b].h % this.standardTileSize);
  return new OpenLayers.Size(d, e)
}
return this.tileSize
},
setMap: function (a) {
OpenLayers.Layer.Grid.prototype.setMap.apply(this, arguments);
this.tileOrigin = new OpenLayers.LonLat(this.map.maxExtent.left, this.map.maxExtent.top)
},
calculateGridLayout: function (a, b, c) {
var d = c * this.tileSize.w,
c = c * this.tileSize.h,
e = a.left - b.lon,
f = Math.floor(e / d) - this.buffer,
a = b.lat - a.top + c,
g = Math.floor(a / c) - this.buffer;
return {
  tilelon: d,
  tilelat: c,
  tileoffsetlon: b.lon + f * d,
  tileoffsetlat: b.lat - c * g,
  tileoffsetx: - (e / d - f) * this.tileSize.w,
  tileoffsety: (g - a / c) * this.tileSize.h
}
},
CLASS_NAME: 'OpenLayers.Layer.Zoomify'
});
OpenLayers.Layer.MapServer = OpenLayers.Class(OpenLayers.Layer.Grid, {
DEFAULT_PARAMS: {
mode: 'map',
map_imagetype: 'png'
},
initialize: function (a, b, c, d) {
OpenLayers.Layer.Grid.prototype.initialize.apply(this, arguments);
this.params = OpenLayers.Util.applyDefaults(this.params, this.DEFAULT_PARAMS);
if (null == d || null == d.isBaseLayer) this.isBaseLayer = 'true' != this.params.transparent && !0 != this.params.transparent
},
clone: function (a) {
null == a && (a = new OpenLayers.Layer.MapServer(this.name, this.url, this.params, this.getOptions()));
return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [
  a
])
},
getURL: function (a) {
var a = this.adjustBounds(a),
a = [
  a.left,
  a.bottom,
  a.right,
  a.top
],
b = this.getImageSize();
return this.getFullRequestString({
  mapext: a,
  imgext: a,
  map_size: [
    b.w,
    b.h
  ],
  imgx: b.w / 2,
  imgy: b.h / 2,
  imgxy: [
    b.w,
    b.h
  ]
})
},
getFullRequestString: function (a, b) {
var c = null == b ? this.url : b,
d = OpenLayers.Util.extend({
}, this.params),
d = OpenLayers.Util.extend(d, a),
e = OpenLayers.Util.getParameterString(d);
OpenLayers.Util.isArray(c) && (c = this.selectUrl(e, c));
var e = OpenLayers.Util.upperCaseObject(OpenLayers.Util.getParameters(c)),
f;
for (f in d) f.toUpperCase() in e && delete d[f];
e = OpenLayers.Util.getParameterString(d);
d = c;
e = e.replace(/,/g, '+');
'' != e && (f = c.charAt(c.length - 1), d = '&' == f || '?' == f ? d + e : - 1 == c.indexOf('?') ? d + ('?' + e)  : d + ('&' + e));
return d
},
CLASS_NAME: 'OpenLayers.Layer.MapServer'
});
OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
xmlns: 'urn:schemas-microsoft-com:vml',
symbolCache: {
},
offset: null,
initialize: function (a) {
if (this.supported()) {
  if (!document.namespaces.olv) {
    document.namespaces.add('olv', this.xmlns);
    for (var b = document.createStyleSheet(), c = 'shape rect oval fill stroke imagedata group textbox'.split(' '), d = 0, e = c.length; d < e; d++) b.addRule('olv\\:' + c[d], 'behavior: url(#default#VML); position: absolute; display: inline-block;')
  }
  OpenLayers.Renderer.Elements.prototype.initialize.apply(this, arguments)
}
},
supported: function () {
return !!document.namespaces
},
setExtent: function (a, b) {
var c = OpenLayers.Renderer.Elements.prototype.setExtent.apply(this, arguments),
d = this.getResolution(),
e = a.left / d | 0,
d = a.top / d - this.size.h | 0;
b || !this.offset ? (this.offset = {
  x: e,
  y: d
}, d = e = 0)  : (e -= this.offset.x, d -= this.offset.y);
this.root.coordorigin = e - this.xOffset + ' ' + d;
for (var e = [
  this.root,
  this.vectorRoot,
  this.textRoot
], f = 0, g = e.length; f < g; ++f) d = e[f],
d.coordsize = this.size.w + ' ' + this.size.h;
this.root.style.flip = 'y';
return c
},
setSize: function (a) {
OpenLayers.Renderer.prototype.setSize.apply(this, arguments);
for (var b = [
  this.rendererRoot,
  this.root,
  this.vectorRoot,
  this.textRoot
], c = this.size.w + 'px', d = this.size.h + 'px', e, f = 0, g = b.length; f < g; ++f) e = b[f],
e.style.width = c,
e.style.height = d
},
getNodeType: function (a, b) {
var c = null;
switch (a.CLASS_NAME) {
  case 'OpenLayers.Geometry.Point':
    c = b.externalGraphic ? 'olv:rect' : this.isComplexSymbol(b.graphicName) ? 'olv:shape' : 'olv:oval';
    break;
  case 'OpenLayers.Geometry.Rectangle':
    c = 'olv:rect';
    break;
  case 'OpenLayers.Geometry.LineString':
  case 'OpenLayers.Geometry.LinearRing':
  case 'OpenLayers.Geometry.Polygon':
  case 'OpenLayers.Geometry.Curve':
    c = 'olv:shape'
}
return c
},
setStyle: function (a, b, c, d) {
var b = b || a._style,
c = c || a._options,
e = b.fillColor;
if ('OpenLayers.Geometry.Point' === a._geometryClass) if (b.externalGraphic) {
  c.isFilled = !0;
  b.graphicTitle && (a.title = b.graphicTitle);
  var e = b.graphicWidth || b.graphicHeight,
  f = b.graphicHeight || b.graphicWidth,
  e = e ? e : 2 * b.pointRadius,
  f = f ? f : 2 * b.pointRadius,
  g = this.getResolution(),
  h = void 0 != b.graphicXOffset ? b.graphicXOffset : - (0.5 * e),
  i = void 0 != b.graphicYOffset ? b.graphicYOffset : - (0.5 * f);
  a.style.left = ((d.x - this.featureDx) / g - this.offset.x + h | 0) + 'px';
  a.style.top = (d.y / g - this.offset.y - (i + f) | 0) + 'px';
  a.style.width = e + 'px';
  a.style.height = f + 'px';
  a.style.flip = 'y';
  e = 'none';
  c.isStroked = !1
} else this.isComplexSymbol(b.graphicName) ? (f = this.importSymbol(b.graphicName), a.path = f.path, a.coordorigin = f.left + ',' + f.bottom, f = f.size, a.coordsize = f + ',' + f, this.drawCircle(a, d, b.pointRadius), a.style.flip = 'y')  : this.drawCircle(a, d, b.pointRadius);
c.isFilled ? a.fillcolor = e : a.filled = 'false';
d = a.getElementsByTagName('fill');
d = 0 == d.length ? null : d[0];
if (c.isFilled) {
  d || (d = this.createNode('olv:fill', a.id + '_fill'));
  d.opacity = b.fillOpacity;
  if ('OpenLayers.Geometry.Point' === a._geometryClass && b.externalGraphic && (b.graphicOpacity && (d.opacity = b.graphicOpacity), d.src = b.externalGraphic, d.type = 'frame', !b.graphicWidth || !b.graphicHeight)) d.aspect = 'atmost';
  d.parentNode != a && a.appendChild(d)
} else d && a.removeChild(d);
e = b.rotation;
if (void 0 !== e || void 0 !== a._rotation) a._rotation = e,
b.externalGraphic ? (this.graphicRotate(a, h, i, b), d.opacity = 0)  : 'OpenLayers.Geometry.Point' === a._geometryClass && (a.style.rotation = e || 0);
h = a.getElementsByTagName('stroke');
h = 0 == h.length ? null : h[0];
if (c.isStroked) {
  if (h || (h = this.createNode('olv:stroke', a.id + '_stroke'), a.appendChild(h)), h.on = !0, h.color = b.strokeColor, h.weight = b.strokeWidth + 'px', h.opacity = b.strokeOpacity, h.endcap = 'butt' == b.strokeLinecap ? 'flat' : b.strokeLinecap || 'round', b.strokeDashstyle) h.dashstyle = this.dashStyle(b)
} else a.stroked = !1,
h && (h.on = !1);
'inherit' != b.cursor && null != b.cursor && (a.style.cursor = b.cursor);
return a
},
graphicRotate: function (a, b, c, d) {
var d = d || a._style,
e = d.rotation || 0,
f,
g;
if (!d.graphicWidth || !d.graphicHeight) {
  var h = new Image;
  h.onreadystatechange = OpenLayers.Function.bind(function () {
    if ('complete' == h.readyState || 'interactive' == h.readyState) f = h.width / h.height,
    g = Math.max(2 * d.pointRadius, d.graphicWidth || 0, d.graphicHeight || 0),
    b *= f,
    d.graphicWidth = g * f,
    d.graphicHeight = g,
    this.graphicRotate(a, b, c, d)
  }, this);
  h.src = d.externalGraphic
} else {
  g = Math.max(d.graphicWidth, d.graphicHeight);
  f = d.graphicWidth / d.graphicHeight;
  var i = Math.round(d.graphicWidth || g * f),
  j = Math.round(d.graphicHeight || g);
  a.style.width = i + 'px';
  a.style.height = j + 'px';
  var k = document.getElementById(a.id + '_image');
  k || (k = this.createNode('olv:imagedata', a.id + '_image'), a.appendChild(k));
  k.style.width = i + 'px';
  k.style.height = j + 'px';
  k.src = d.externalGraphic;
  k.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'\', sizingMethod=\'scale\')';
  k = e * Math.PI / 180;
  e = Math.sin(k);
  k = Math.cos(k);
  e = 'progid:DXImageTransform.Microsoft.Matrix(M11=' + k + ',M12=' + - e + ',M21=' + e + ',M22=' + k + ',SizingMethod=\'auto expand\')\n';
  (k = d.graphicOpacity || d.fillOpacity) && 1 != k && (e += 'progid:DXImageTransform.Microsoft.BasicImage(opacity=' + k + ')\n');
  a.style.filter = e;
  e = new OpenLayers.Geometry.Point( - b, - c);
  i = (new OpenLayers.Bounds(0, 0, i, j)).toGeometry();
  i.rotate(d.rotation, e);
  i = i.getBounds();
  a.style.left = Math.round(parseInt(a.style.left) + i.left) + 'px';
  a.style.top = Math.round(parseInt(a.style.top) - i.bottom) + 'px'
}
},
postDraw: function (a) {
a.style.visibility = 'visible';
var b = a._style.fillColor,
c = a._style.strokeColor;
'none' == b && a.fillcolor != b && (a.fillcolor = b);
'none' == c && a.strokecolor != c && (a.strokecolor = c)
},
setNodeDimension: function (a, b) {
var c = b.getBounds();
if (c) {
  var d = this.getResolution(),
  c = new OpenLayers.Bounds((c.left - this.featureDx) / d - this.offset.x | 0, c.bottom / d - this.offset.y | 0, (c.right - this.featureDx) / d - this.offset.x | 0, c.top / d - this.offset.y | 0);
  a.style.left = c.left + 'px';
  a.style.top = c.top + 'px';
  a.style.width = c.getWidth() + 'px';
  a.style.height = c.getHeight() + 'px';
  a.coordorigin = c.left + ' ' + c.top;
  a.coordsize = c.getWidth() + ' ' + c.getHeight()
}
},
dashStyle: function (a) {
a = a.strokeDashstyle;
switch (a) {
  case 'solid':
  case 'dot':
  case 'dash':
  case 'dashdot':
  case 'longdash':
  case 'longdashdot':
    return a;
  default:
    return a = a.split(/[ ,]/),
    2 == a.length ? 1 * a[0] >= 2 * a[1] ? 'longdash' : 1 == a[0] || 1 == a[1] ? 'dot' : 'dash' : 4 == a.length ? 1 * a[0] >= 2 * a[1] ? 'longdashdot' : 'dashdot' : 'solid'
}
},
createNode: function (a, b) {
var c = document.createElement(a);
b && (c.id = b);
c.unselectable = 'on';
c.onselectstart = OpenLayers.Function.False;
return c
},
nodeTypeCompare: function (a, b) {
var c = b,
d = c.indexOf(':');
- 1 != d && (c = c.substr(d +
1));
var e = a.nodeName,
d = e.indexOf(':');
- 1 != d && (e = e.substr(d + 1));
return c == e
},
createRenderRoot: function () {
return this.nodeFactory(this.container.id + '_vmlRoot', 'div')
},
createRoot: function (a) {
return this.nodeFactory(this.container.id + a, 'olv:group')
},
drawPoint: function (a, b) {
return this.drawCircle(a, b, 1)
},
drawCircle: function (a, b, c) {
if (!isNaN(b.x) && !isNaN(b.y)) {
  var d = this.getResolution();
  a.style.left = ((b.x - this.featureDx) / d - this.offset.x | 0) - c + 'px';
  a.style.top = (b.y / d - this.offset.y | 0) - c + 'px';
  b = 2 * c;
  a.style.width = b + 'px';
  a.style.height = b + 'px';
  return a
}
return !1
},
drawLineString: function (a, b) {
return this.drawLine(a, b, !1)
},
drawLinearRing: function (a, b) {
return this.drawLine(a, b, !0)
},
drawLine: function (a, b, c) {
this.setNodeDimension(a, b);
for (var d = this.getResolution(), e = b.components.length, f = Array(e), g, h, i = 0; i < e; i++) g = b.components[i],
h = (g.x - this.featureDx) / d - this.offset.x | 0,
g = g.y / d - this.offset.y | 0,
f[i] = ' ' + h + ',' + g + ' l ';
a.path = 'm' + f.join('') + (c ? ' x e' : ' e');
return a
},
drawPolygon: function (a, b) {
this.setNodeDimension(a, b);
var c = this.getResolution(),
d = [
],
e,
f,
g,
h,
i,
j,
k,
l,
m,
n;
e = 0;
for (f = b.components.length; e < f; e++) {
  d.push('m');
  g = b.components[e].components;
  h = 0 === e;
  j = i = null;
  k = 0;
  for (l = g.length; k < l; k++) m = g[k],
  n = (m.x - this.featureDx) / c - this.offset.x | 0,
  m = m.y / c - this.offset.y | 0,
  n = ' ' + n + ',' + m,
  d.push(n),
  0 == k && d.push(' l'),
  h || (i ? i != n && (j ? j != n && (h = !0)  : j = n)  : i = n);
  d.push(h ? ' x ' : ' ')
}
d.push('e');
a.path = d.join('');
return a
},
drawRectangle: function (a, b) {
var c = this.getResolution();
a.style.left = ((b.x - this.featureDx) / c - this.offset.x | 0) +
'px';
a.style.top = (b.y / c - this.offset.y | 0) + 'px';
a.style.width = (b.width / c | 0) + 'px';
a.style.height = (b.height / c | 0) + 'px';
return a
},
drawText: function (a, b, c) {
var d = this.nodeFactory(a + this.LABEL_ID_SUFFIX, 'olv:rect'),
e = this.nodeFactory(a + this.LABEL_ID_SUFFIX + '_textbox', 'olv:textbox'),
f = this.getResolution();
d.style.left = ((c.x - this.featureDx) / f - this.offset.x | 0) + 'px';
d.style.top = (c.y / f - this.offset.y | 0) + 'px';
d.style.flip = 'y';
e.innerText = b.label;
'inherit' != b.cursor && null != b.cursor && (e.style.cursor = b.cursor);
b.fontColor && (e.style.color = b.fontColor);
b.fontOpacity && (e.style.filter = 'alpha(opacity=' + 100 * b.fontOpacity + ')');
b.fontFamily && (e.style.fontFamily = b.fontFamily);
b.fontSize && (e.style.fontSize = b.fontSize);
b.fontWeight && (e.style.fontWeight = b.fontWeight);
b.fontStyle && (e.style.fontStyle = b.fontStyle);
!0 === b.labelSelect && (d._featureId = a, e._featureId = a, e._geometry = c, e._geometryClass = c.CLASS_NAME);
e.style.whiteSpace = 'nowrap';
e.inset = '1px,0px,0px,0px';
d.parentNode || (d.appendChild(e), this.textRoot.appendChild(d));
b = b.labelAlign || 'cm';
1 == b.length && (b += 'm');
a = e.clientWidth * OpenLayers.Renderer.VML.LABEL_SHIFT[b.substr(0, 1)];
e = e.clientHeight * OpenLayers.Renderer.VML.LABEL_SHIFT[b.substr(1, 1)];
d.style.left = parseInt(d.style.left) - a - 1 + 'px';
d.style.top = parseInt(d.style.top) + e + 'px'
},
moveRoot: function (a) {
var b = this.map.getLayer(a.container.id);
b instanceof OpenLayers.Layer.Vector.RootContainer && (b = this.map.getLayer(this.container.id));
b && b.renderer.clear();
OpenLayers.Renderer.Elements.prototype.moveRoot.apply(this, arguments);
b && b.redraw()
},
importSymbol: function (a) {
var b = this.container.id + '-' + a,
c = this.symbolCache[b];
if (c) return c;
c = OpenLayers.Renderer.symbol[a];
if (!c) throw Error(a + ' is not a valid symbol name');
for (var a = new OpenLayers.Bounds(Number.MAX_VALUE, Number.MAX_VALUE, 0, 0), d = [
  'm'
], e = 0; e < c.length; e += 2) {
  var f = c[e],
  g = c[e + 1];
  a.left = Math.min(a.left, f);
  a.bottom = Math.min(a.bottom, g);
  a.right = Math.max(a.right, f);
  a.top = Math.max(a.top, g);
  d.push(f);
  d.push(g);
  0 == e && d.push('l')
}
d.push('x e');
c = d.join(' ');
d = (a.getWidth() - a.getHeight()) / 2;
0 < d ? (a.bottom -= d, a.top += d)  : (a.left += d, a.right -= d);
c = {
  path: c,
  size: a.getWidth(),
  left: a.left,
  bottom: a.bottom
};
return this.symbolCache[b] = c
},
CLASS_NAME: 'OpenLayers.Renderer.VML'
});
OpenLayers.Renderer.VML.LABEL_SHIFT = {
l: 0,
c: 0.5,
r: 1,
t: 0,
m: 0.5,
b: 1
};
OpenLayers.Control.CacheRead = OpenLayers.Class(OpenLayers.Control, {
fetchEvent: 'tileloadstart',
layers: null,
autoActivate: !0,
setMap: function (a) {
OpenLayers.Control.prototype.setMap.apply(this, arguments);
var b,
c = this.layers || a.layers;
for (b = c.length - 1; 0 <= b; --b) this.addLayer({
  layer: c[b]
});
if (!this.layers) a.events.on({
  addlayer: this.addLayer,
  removeLayer: this.removeLayer,
  scope: this
})
},
addLayer: function (a) {
a.layer.events.register(this.fetchEvent, this, this.fetch)
},
removeLayer: function (a) {
a.layer.events.unregister(this.fetchEvent, this, this.fetch)
},
fetch: function (a) {
if (this.active && window.localStorage && a.tile instanceof OpenLayers.Tile.Image) {
  var b = a.tile,
  c = b.url;
  !b.layer.crossOriginKeyword && (OpenLayers.ProxyHost && 0 === c.indexOf(OpenLayers.ProxyHost)) && (c = OpenLayers.Control.CacheWrite.urlMap[c]);
  if (c = window.localStorage.getItem('olCache_' + c)) b.url = c,
  'tileerror' === a.type && b.setImgSrc(c)
}
},
destroy: function () {
if (this.layers || this.map) {
  var a,
  b = this.layers || this.map.layers;
  for (a = b.length - 1; 0 <= a; --a) this.removeLayer({
    layer: b[a]
  })
}
this.map && this.map.events.un({
  addlayer: this.addLayer,
  removeLayer: this.removeLayer,
  scope: this
});
OpenLayers.Control.prototype.destroy.apply(this, arguments)
},
CLASS_NAME: 'OpenLayers.Control.CacheRead'
});
OpenLayers.Protocol.WFS.v1_0_0 = OpenLayers.Class(OpenLayers.Protocol.WFS.v1, {
version: '1.0.0',
CLASS_NAME: 'OpenLayers.Protocol.WFS.v1_0_0'
});
OpenLayers.Format.WMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Format.XML, {
layerIdentifier: '_layer',
featureIdentifier: '_feature',
regExes: {
trimSpace: /^\s*|\s*$/g,
removeSpace: /\s*/g,
splitSpace: /\s+/,
trimComma: /\s*,\s*/g
},
gmlFormat: null,
read: function (a) {
'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
  a
]));
var b = a.documentElement;
if (b) var c = this['read_' + b.nodeName],
a = c ? c.call(this, b)  : (new OpenLayers.Format.GML(this.options ? this.options : {
})).read(a);
return a
},
read_msGMLOutput: function (a) {
var b = [
];
if (a = this.getSiblingNodesByTagCriteria(a, this.layerIdentifier)) for (var c = 0, d = a.length; c < d; ++c) {
  var e = a[c],
  f = e.nodeName;
  e.prefix && (f = f.split(':') [1]);
  f = f.replace(this.layerIdentifier, '');
  if (e = this.getSiblingNodesByTagCriteria(e, this.featureIdentifier)) for (var g = 0; g < e.length; g++) {
    var h = e[g],
    i = this.parseGeometry(h),
    h = this.parseAttributes(h),
    h = new OpenLayers.Feature.Vector(i.geometry, h, null);
    h.bounds = i.bounds;
    h.type = f;
    b.push(h)
  }
}
return b
},
read_FeatureInfoResponse: function (a) {
for (var b = [
], a = this.getElementsByTagNameNS(a, '*', 'FIELDS'), c = 0, d = a.length; c < d; c++) {
  var e = a[c],
  f = {
  },
  g,
  h = e.attributes.length;
  if (0 < h) for (g = 0; g < h; g++) {
    var i = e.attributes[g];
    f[i.nodeName] = i.nodeValue
  } else {
    e = e.childNodes;
    g = 0;
    for (h = e.length; g < h; ++g) i = e[g],
    3 != i.nodeType && (f[i.getAttribute('name')] = i.getAttribute('value'))
  }
  b.push(new OpenLayers.Feature.Vector(null, f, null))
}
return b
},
getSiblingNodesByTagCriteria: function (a, b) {
var c = [
],
d,
e,
f,
g;
if (a && a.hasChildNodes()) {
  d = a.childNodes;
  f = d.length;
  for (var h = 0; h < f; h++) {
    for (g = d[h]; g && 1 != g.nodeType; ) g = g.nextSibling,
    h++;
    e = g ? g.nodeName : '';
    0 < e.length && - 1 < e.indexOf(b) ? c.push(g)  : (e = this.getSiblingNodesByTagCriteria(g, b), 0 < e.length && (0 == c.length ? c = e : c.push(e)))
  }
}
return c
},
parseAttributes: function (a) {
var b = {
};
if (1 == a.nodeType) for (var a = a.childNodes, c = a.length, d = 0; d < c; ++d) {
  var e = a[d];
  if (1 == e.nodeType) {
    var f = e.childNodes,
    e = e.prefix ? e.nodeName.split(':') [1] : e.nodeName;
    if (0 == f.length) b[e] = null;
     else if (1 == f.length && (f = f[0], 3 == f.nodeType || 4 == f.nodeType)) f = f.nodeValue.replace(this.regExes.trimSpace, ''),
    b[e] = f
  }
}
return b
},
parseGeometry: function (a) {
this.gmlFormat || (this.gmlFormat = new OpenLayers.Format.GML);
var a = this.gmlFormat.parseFeature(a),
b,
c = null;
a && (b = a.geometry && a.geometry.clone(), c = a.bounds && a.bounds.clone(), a.destroy());
return {
  geometry: b,
  bounds: c
}
},
CLASS_NAME: 'OpenLayers.Format.WMSGetFeatureInfo'
});
OpenLayers.Control.WMTSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, {
hover: !1,
requestEncoding: 'KVP',
drillDown: !1,
maxFeatures: 10,
clickCallback: 'click',
layers: null,
queryVisible: !0,
infoFormat: 'text/html',
vendorParams: {
},
format: null,
formatOptions: null,
handlerOptions: null,
handler: null,
hoverRequest: null,
pending: 0,
initialize: function (a) {
a = a || {
};
a.handlerOptions = a.handlerOptions || {
};
OpenLayers.Control.prototype.initialize.apply(this, [
  a
]);
this.format || (this.format = new OpenLayers.Format.WMSGetFeatureInfo(a.formatOptions));
!0 === this.drillDown && (this.hover = !1);
this.hover ? this.handler = new OpenLayers.Handler.Hover(this, {
  move: this.cancelHover,
  pause: this.getInfoForHover
}, OpenLayers.Util.extend(this.handlerOptions.hover || {
}, {
  delay: 250
}))  : (a = {
}, a[this.clickCallback] = this.getInfoForClick, this.handler = new OpenLayers.Handler.Click(this, a, this.handlerOptions.click || {
}))
},
getInfoForClick: function (a) {
this.request(a.xy, {
})
},
getInfoForHover: function (a) {
this.request(a.xy, {
  hover: !0
})
},
cancelHover: function () {
this.hoverRequest && (--this.pending, 0 >= this.pending && (OpenLayers.Element.removeClass(this.map.viewPortDiv, 'olCursorWait'), this.pending = 0), this.hoverRequest.abort(), this.hoverRequest = null)
},
findLayers: function () {
for (var a = this.layers || this.map.layers, b = [
], c, d = a.length - 1; 0 <= d; --d) if (c = a[d], c instanceof OpenLayers.Layer.WMTS && c.requestEncoding === this.requestEncoding && (!this.queryVisible || c.getVisibility())) if (b.push(c), !this.drillDown || this.hover) break;
return b
},
buildRequestOptions: function (a, b) {
var c = this.map.getLonLatFromPixel(b),
d = a.getURL(new OpenLayers.Bounds(c.lon, c.lat, c.lon, c.lat)),
d = OpenLayers.Util.getParameters(d),
c = a.getTileInfo(c);
OpenLayers.Util.extend(d, {
  service: 'WMTS',
  version: a.version,
  request: 'GetFeatureInfo',
  infoFormat: this.infoFormat,
  i: c.i,
  j: c.j
});
OpenLayers.Util.applyDefaults(d, this.vendorParams);
return {
  url: OpenLayers.Util.isArray(a.url) ? a.url[0] : a.url,
  params: OpenLayers.Util.upperCaseObject(d),
  callback: function (c) {
    this.handleResponse(b, c, a)
  },
  scope: this
}
},
request: function (a, b) {
var b = b || {
},
c = this.findLayers();
if (0 < c.length) {
  for (var d, e, f = 0, g = c.length; f < g; f++) e = c[f],
  d = this.events.triggerEvent('beforegetfeatureinfo', {
    xy: a,
    layer: e
  }),
  !1 !== d && (++this.pending, d = this.buildRequestOptions(e, a), d = OpenLayers.Request.GET(d), !0 === b.hover && (this.hoverRequest = d));
  0 < this.pending && OpenLayers.Element.addClass(this.map.viewPortDiv, 'olCursorWait')
}
},
handleResponse: function (a, b, c) {
--this.pending;
0 >= this.pending && (OpenLayers.Element.removeClass(this.map.viewPortDiv, 'olCursorWait'), this.pending = 0);
if (b.status && (200 > b.status || 300 <= b.status)) this.events.triggerEvent('exception', {
  xy: a,
  request: b,
  layer: c
});
 else {
  var d = b.responseXML;
  if (!d || !d.documentElement) d = b.responseText;
  var e,
  f;
  try {
    e = this.format.read(d)
  } catch (g) {
    f = !0,
    this.events.triggerEvent('exception', {
      xy: a,
      request: b,
      error: g,
      layer: c
    })
  }
  f || this.events.triggerEvent('getfeatureinfo', {
    text: b.responseText,
    features: e,
    request: b,
    xy: a,
    layer: c
  })
}
},
CLASS_NAME: 'OpenLayers.Control.WMTSGetFeatureInfo'
});
OpenLayers.Strategy.Paging = OpenLayers.Class(OpenLayers.Strategy, {
features: null,
length: 10,
num: null,
paging: !1,
activate: function () {
var a = OpenLayers.Strategy.prototype.activate.call(this);
if (a) this.layer.events.on({
  beforefeaturesadded: this.cacheFeatures,
  scope: this
});
return a
},
deactivate: function () {
var a = OpenLayers.Strategy.prototype.deactivate.call(this);
a && (this.clearCache(), this.layer.events.un({
  beforefeaturesadded: this.cacheFeatures,
  scope: this
}));
return a
},
cacheFeatures: function (a) {
this.paging || (this.clearCache(), this.features = a.features, this.pageNext(a))
},
clearCache: function () {
if (this.features) for (var a = 0; a < this.features.length; ++a) this.features[a].destroy();
this.num = this.features = null
},
pageCount: function () {
return Math.ceil((this.features ? this.features.length : 0) / this.length)
},
pageNum: function () {
return this.num
},
pageLength: function (a) {
a && 0 < a && (this.length = a);
return this.length
},
pageNext: function (a) {
var b = !1;
this.features && (null === this.num && (this.num = - 1), b = this.page((this.num + 1) * this.length, a));
return b
},
pagePrevious: function () {
var a = !1;
this.features && (null === this.num && (this.num = this.pageCount()), a = this.page((this.num - 1) * this.length));
return a
},
page: function (a, b) {
var c = !1;
if (this.features && 0 <= a && a < this.features.length) {
  var d = Math.floor(a / this.length);
  d != this.num && (this.paging = !0, c = this.features.slice(a, a + this.length), this.layer.removeFeatures(this.layer.features), this.num = d, b && b.features ? b.features = c : this.layer.addFeatures(c), this.paging = !1, c = !0)
}
return c
},
CLASS_NAME: 'OpenLayers.Strategy.Paging'
});
OpenLayers.Protocol.CSW.v2_0_2 = OpenLayers.Class(OpenLayers.Protocol, {
formatOptions: null,
initialize: function (a) {
OpenLayers.Protocol.prototype.initialize.apply(this, [
  a
]);
a.format || (this.format = new OpenLayers.Format.CSWGetRecords.v2_0_2(OpenLayers.Util.extend({
}, this.formatOptions)))
},
destroy: function () {
this.options && !this.options.format && this.format.destroy();
this.format = null;
OpenLayers.Protocol.prototype.destroy.apply(this)
},
read: function (a) {
a = OpenLayers.Util.extend({
}, a);
OpenLayers.Util.applyDefaults(a, this.options || {
});
var b = new OpenLayers.Protocol.Response({
  requestType: 'read'
}),
c = this.format.write(a.params);
b.priv = OpenLayers.Request.POST({
  url: a.url,
  callback: this.createCallback(this.handleRead, b, a),
  params: a.params,
  headers: a.headers,
  data: c
});
return b
},
handleRead: function (a, b) {
if (b.callback) {
  var c = a.priv;
  200 <= c.status && 300 > c.status ? (a.data = this.parseData(c), a.code = OpenLayers.Protocol.Response.SUCCESS)  : a.code = OpenLayers.Protocol.Response.FAILURE;
  b.callback.call(b.scope, a)
}
},
parseData: function (a) {
var b = a.responseXML;
if (!b || !b.documentElement) b = a.responseText;
return !b || 0 >= b.length ? null : this.format.read(b)
},
CLASS_NAME: 'OpenLayers.Protocol.CSW.v2_0_2'
});
OpenLayers.Format.WMSCapabilities.v1_1 = OpenLayers.Class(OpenLayers.Format.WMSCapabilities.v1, {
readers: {
wms: OpenLayers.Util.applyDefaults({
  WMT_MS_Capabilities: function (a, b) {
    this.readChildNodes(a, b)
  },
  Keyword: function (a, b) {
    b.keywords && b.keywords.push(this.getChildValue(a))
  },
  DescribeLayer: function (a, b) {
    b.describelayer = {
      formats: [
      ]
    };
    this.readChildNodes(a, b.describelayer)
  },
  GetLegendGraphic: function (a, b) {
    b.getlegendgraphic = {
      formats: [
      ]
    };
    this.readChildNodes(a, b.getlegendgraphic)
  },
  GetStyles: function (a, b) {
    b.getstyles = {
      formats: [
      ]
    };
    this.readChildNodes(a, b.getstyles)
  },
  PutStyles: function (a, b) {
    b.putstyles = {
      formats: [
      ]
    };
    this.readChildNodes(a, b.putstyles)
  },
  UserDefinedSymbolization: function (a, b) {
    var c = {
      supportSLD: 1 == parseInt(a.getAttribute('SupportSLD')),
      userLayer: 1 == parseInt(a.getAttribute('UserLayer')),
      userStyle: 1 == parseInt(a.getAttribute('UserStyle')),
      remoteWFS: 1 == parseInt(a.getAttribute('RemoteWFS'))
    };
    b.userSymbols = c
  },
  LatLonBoundingBox: function (a, b) {
    b.llbbox = [
      parseFloat(a.getAttribute('minx')),
      parseFloat(a.getAttribute('miny')),
      parseFloat(a.getAttribute('maxx')),
      parseFloat(a.getAttribute('maxy'))
    ]
  },
  BoundingBox: function (a, b) {
    var c = OpenLayers.Format.WMSCapabilities.v1.prototype.readers.wms.BoundingBox.apply(this, [
      a,
      b
    ]);
    c.srs = a.getAttribute('SRS');
    b.bbox[c.srs] = c
  },
  ScaleHint: function (a, b) {
    var c = a.getAttribute('min'),
    d = a.getAttribute('max'),
    e = Math.pow(2, 0.5),
    f = OpenLayers.INCHES_PER_UNIT.m;
    b.maxScale = parseFloat((c / e * f * OpenLayers.DOTS_PER_INCH).toPrecision(13));
    b.minScale = parseFloat((d / e * f * OpenLayers.DOTS_PER_INCH).toPrecision(13))
  },
  Dimension: function (a, b) {
    var c = {
      name: a.getAttribute('name').toLowerCase(),
      units: a.getAttribute('units'),
      unitsymbol: a.getAttribute('unitSymbol')
    };
    b.dimensions[c.name] = c
  },
  Extent: function (a, b) {
    var c = a.getAttribute('name').toLowerCase();
    if (c in b.dimensions) {
      c = b.dimensions[c];
      c.nearestVal = '1' === a.getAttribute('nearestValue');
      c.multipleVal = '1' === a.getAttribute('multipleValues');
      c.current = '1' === a.getAttribute('current');
      c['default'] = a.getAttribute('default') || '';
      var d = this.getChildValue(a);
      c.values = d.split(',')
    }
  }
}, OpenLayers.Format.WMSCapabilities.v1.prototype.readers.wms)
},
CLASS_NAME: 'OpenLayers.Format.WMSCapabilities.v1_1'
});
OpenLayers.Control.Graticule = OpenLayers.Class(OpenLayers.Control, {
autoActivate: !0,
intervals: [
45,
30,
20,
10,
5,
2,
1,
0.5,
0.2,
0.1,
0.05,
0.01,
0.005,
0.002,
0.001
],
displayInLayerSwitcher: !0,
visible: !0,
numPoints: 50,
targetSize: 200,
layerName: null,
labelled: !0,
labelFormat: 'dm',
lineSymbolizer: {
strokeColor: '#333',
strokeWidth: 1,
strokeOpacity: 0.5
},
labelSymbolizer: {
},
gratLayer: null,
initialize: function (a) {
a = a || {
};
a.layerName = a.layerName || OpenLayers.i18n('Graticule');
OpenLayers.Control.prototype.initialize.apply(this, [
  a
]);
this.labelSymbolizer.stroke = !1;
this.labelSymbolizer.fill = !1;
this.labelSymbolizer.label = '${label}';
this.labelSymbolizer.labelAlign = '${labelAlign}';
this.labelSymbolizer.labelXOffset = '${xOffset}';
this.labelSymbolizer.labelYOffset = '${yOffset}'
},
destroy: function () {
this.deactivate();
OpenLayers.Control.prototype.destroy.apply(this, arguments);
this.gratLayer && (this.gratLayer.destroy(), this.gratLayer = null)
},
draw: function () {
OpenLayers.Control.prototype.draw.apply(this, arguments);
if (!this.gratLayer) {
  var a = new OpenLayers.Style({
  }, {
    rules: [
      new OpenLayers.Rule({
        symbolizer: {
          Point: this.labelSymbolizer,
          Line: this.lineSymbolizer
        }
      })
    ]
  });
  this.gratLayer = new OpenLayers.Layer.Vector(this.layerName, {
    styleMap: new OpenLayers.StyleMap({
      'default': a
    }),
    visibility: this.visible,
    displayInLayerSwitcher: this.displayInLayerSwitcher
  })
}
return this.div
},
activate: function () {
return OpenLayers.Control.prototype.activate.apply(this, arguments) ? (this.map.addLayer(this.gratLayer), this.map.events.register('moveend', this, this.update), this.update(), !0)  : !1
},
deactivate: function () {
return OpenLayers.Control.prototype.deactivate.apply(this, arguments) ? (this.map.events.unregister('moveend', this, this.update), this.map.removeLayer(this.gratLayer), !0)  : !1
},
update: function () {
var a = this.map.getExtent();
if (a) {
  this.gratLayer.destroyFeatures();
  var b = new OpenLayers.Projection('EPSG:4326'),
  c = this.map.getProjectionObject(),
  d = this.map.getResolution();
  c.proj && 'longlat' == c.proj.projName && (this.numPoints = 1);
  var e = this.map.getCenter(),
  f = new OpenLayers.Pixel(e.lon, e.lat);
  OpenLayers.Projection.transform(f, c, b);
  for (var e = this.targetSize * d, e = e * e, g, d = 0; d < this.intervals.length; ++d) {
    g = this.intervals[d];
    var h = g / 2,
    i = f.offset({
      x: - h,
      y: - h
    }),
    h = f.offset({
      x: h,
      y: h
    });
    OpenLayers.Projection.transform(i, b, c);
    OpenLayers.Projection.transform(h, b, c);
    if ((i.x - h.x) * (i.x - h.x) + (i.y - h.y) * (i.y - h.y) <= e) break
  }
  f.x = Math.floor(f.x / g) * g;
  f.y = Math.floor(f.y / g) * g;
  var d = 0,
  e = [
    f.clone()
  ],
  h = f.clone(),
  j;
  do h = h.offset({
    x: 0,
    y: g
  }),
  j = OpenLayers.Projection.transform(h.clone(), b, c),
  e.unshift(h);
  while (a.containsPixel(j) && 1000 > ++d);
  h = f.clone();
  do h = h.offset({
    x: 0,
    y: - g
  }),
  j = OpenLayers.Projection.transform(h.clone(), b, c),
  e.push(h);
  while (a.containsPixel(j) && 1000 > ++d);
  d = 0;
  i = [
    f.clone()
  ];
  h = f.clone();
  do h = h.offset({
    x: - g,
    y: 0
  }),
  j = OpenLayers.Projection.transform(h.clone(), b, c),
  i.unshift(h);
  while (a.containsPixel(j) && 1000 > ++d);
  h = f.clone();
  do h = h.offset({
    x: g,
    y: 0
  }),
  j = OpenLayers.Projection.transform(h.clone(), b, c),
  i.push(h);
  while (a.containsPixel(j) && 1000 > ++d);
  g = [
  ];
  for (d = 0; d < i.length; ++d) {
    j = i[d].x;
    for (var f = [
    ], k = null, l = Math.min(e[0].y, 90), h = Math.max(e[e.length - 1].y, - 90), m = (l - h) / this.numPoints, l = h, h = 0; h <= this.numPoints; ++h) {
      var n = new OpenLayers.Geometry.Point(j, l);
      n.transform(b, c);
      f.push(n);
      l += m;
      n.y >= a.bottom && !k && (k = n)
    }
    this.labelled && (k = new OpenLayers.Geometry.Point(k.x, a.bottom), j = {
      value: j,
      label: this.labelled ? OpenLayers.Util.getFormattedLonLat(j, 'lon', this.labelFormat)  : '',
      labelAlign: 'cb',
      xOffset: 0,
      yOffset: 2
    }, this.gratLayer.addFeatures(new OpenLayers.Feature.Vector(k, j)));
    f = new OpenLayers.Geometry.LineString(f);
    g.push(new OpenLayers.Feature.Vector(f))
  }
  for (h = 0; h < e.length; ++h) if (l = e[h].y, !( - 90 > l || 90 < l)) {
    f = [
    ];
    d = i[0].x;
    m = (i[i.length - 1].x - d) / this.numPoints;
    j = d;
    k = null;
    for (d = 0; d <= this.numPoints; ++d) n = new OpenLayers.Geometry.Point(j, l),
    n.transform(b, c),
    f.push(n),
    j += m,
    n.x < a.right && (k = n);
    this.labelled && (k = new OpenLayers.Geometry.Point(a.right, k.y), j = {
      value: l,
      label: this.labelled ? OpenLayers.Util.getFormattedLonLat(l, 'lat', this.labelFormat)  : '',
      labelAlign: 'rb',
      xOffset: - 2,
      yOffset: 2
    }, this.gratLayer.addFeatures(new OpenLayers.Feature.Vector(k, j)));
    f = new OpenLayers.Geometry.LineString(f);
    g.push(new OpenLayers.Feature.Vector(f))
  }
  this.gratLayer.addFeatures(g)
}
},
CLASS_NAME: 'OpenLayers.Control.Graticule'
});
OpenLayers.Layer.UTFGrid = OpenLayers.Class(OpenLayers.Layer.XYZ, {
isBaseLayer: !1,
projection: new OpenLayers.Projection('EPSG:900913'),
useJSONP: !1,
tileClass: OpenLayers.Tile.UTFGrid,
initialize: function (a) {
OpenLayers.Layer.Grid.prototype.initialize.apply(this, [
  a.name,
  a.url,
  {
  },
  a
]);
this.tileOptions = OpenLayers.Util.extend({
  utfgridResolution: this.utfgridResolution
}, this.tileOptions)
},
clone: function (a) {
null == a && (a = new OpenLayers.Layer.UTFGrid(this.getOptions()));
return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [
  a
])
},
getFeatureInfo: function (a) {
var b = null,
a = this.getTileData(a);
a.tile && (b = a.tile.getFeatureInfo(a.i, a.j));
return b
},
getFeatureId: function (a) {
var b = null,
a = this.getTileData(a);
a.tile && (b = a.tile.getFeatureId(a.i, a.j));
return b
},
CLASS_NAME: 'OpenLayers.Layer.UTFGrid'
});
OpenLayers.Layer.ArcGISCache = OpenLayers.Class(OpenLayers.Layer.XYZ, {
url: null,
tileOrigin: null,
tileSize: new OpenLayers.Size(256, 256),
useArcGISServer: !0,
type: 'png',
useScales: !1,
overrideDPI: !1,
initialize: function (a, b, c) {
OpenLayers.Layer.XYZ.prototype.initialize.apply(this, arguments);
this.resolutions && (this.serverResolutions = this.resolutions, this.maxExtent = this.getMaxExtentForResolution(this.resolutions[0]));
if (this.layerInfo) {
  var d = this.layerInfo,
  e = new OpenLayers.Bounds(d.fullExtent.xmin, d.fullExtent.ymin, d.fullExtent.xmax, d.fullExtent.ymax);
  this.projection = 'EPSG:' + d.spatialReference.wkid;
  this.sphericalMercator = 102100 == d.spatialReference.wkid;
  this.units = 'esriFeet' == d.units ? 'ft' : 'm';
  if (d.tileInfo) {
    this.tileSize = new OpenLayers.Size(d.tileInfo.width || d.tileInfo.cols, d.tileInfo.height || d.tileInfo.rows);
    this.tileOrigin = new OpenLayers.LonLat(d.tileInfo.origin.x, d.tileInfo.origin.y);
    var f = new OpenLayers.Geometry.Point(e.left, e.top),
    e = new OpenLayers.Geometry.Point(e.right, e.bottom);
    this.useScales ? this.scales = [
    ] : this.resolutions = [
    ];
    this.lods = [
    ];
    for (var g in d.tileInfo.lods) if (d.tileInfo.lods.hasOwnProperty(g)) {
      var h = d.tileInfo.lods[g];
      this.useScales ? this.scales.push(h.scale)  : this.resolutions.push(h.resolution);
      var i = this.getContainingTileCoords(f, h.resolution);
      h.startTileCol = i.x;
      h.startTileRow = i.y;
      i = this.getContainingTileCoords(e, h.resolution);
      h.endTileCol = i.x;
      h.endTileRow = i.y;
      this.lods.push(h)
    }
    this.maxExtent = this.calculateMaxExtentWithLOD(this.lods[0]);
    this.serverResolutions = this.resolutions;
    this.overrideDPI && d.tileInfo.dpi && (OpenLayers.DOTS_PER_INCH = d.tileInfo.dpi)
  }
}
},
getContainingTileCoords: function (a, b) {
return new OpenLayers.Pixel(Math.max(Math.floor((a.x - this.tileOrigin.lon) / (this.tileSize.w * b)), 0), Math.max(Math.floor((this.tileOrigin.lat - a.y) / (this.tileSize.h * b)), 0))
},
calculateMaxExtentWithLOD: function (a) {
var b = this.tileOrigin.lon + a.startTileCol * this.tileSize.w * a.resolution,
c = this.tileOrigin.lat - a.startTileRow * this.tileSize.h * a.resolution;
return new OpenLayers.Bounds(b, c - (a.endTileRow - a.startTileRow +
1) * this.tileSize.h * a.resolution, b + (a.endTileCol - a.startTileCol + 1) * this.tileSize.w * a.resolution, c)
},
calculateMaxExtentWithExtent: function (a, b) {
var c = new OpenLayers.Geometry.Point(a.left, a.top),
d = new OpenLayers.Geometry.Point(a.right, a.bottom),
c = this.getContainingTileCoords(c, b),
d = this.getContainingTileCoords(d, b);
return this.calculateMaxExtentWithLOD({
  resolution: b,
  startTileCol: c.x,
  startTileRow: c.y,
  endTileCol: d.x,
  endTileRow: d.y
})
},
getUpperLeftTileCoord: function (a) {
return this.getContainingTileCoords(new OpenLayers.Geometry.Point(this.maxExtent.left, this.maxExtent.top), a)
},
getLowerRightTileCoord: function (a) {
return this.getContainingTileCoords(new OpenLayers.Geometry.Point(this.maxExtent.right, this.maxExtent.bottom), a)
},
getMaxExtentForResolution: function (a) {
var b = this.getUpperLeftTileCoord(a),
c = this.getLowerRightTileCoord(a),
d = this.tileOrigin.lon + b.x * this.tileSize.w * a,
e = this.tileOrigin.lat - b.y * this.tileSize.h * a;
return new OpenLayers.Bounds(d, e - (c.y - b.y + 1) * this.tileSize.h * a, d + (c.x - b.x + 1) * this.tileSize.w * a, e)
},
clone: function (a) {
null == a && (a = new OpenLayers.Layer.ArcGISCache(this.name, this.url, this.options));
return OpenLayers.Layer.XYZ.prototype.clone.apply(this, [
  a
])
},
getMaxExtent: function () {
return this.maxExtent = this.getMaxExtentForResolution(this.map.getResolution())
},
getTileOrigin: function () {
var a = this.getMaxExtent();
return new OpenLayers.LonLat(a.left, a.bottom)
},
getURL: function (a) {
var b = this.getResolution(),
c = this.tileOrigin.lon + b * this.tileSize.w / 2,
d = this.tileOrigin.lat - b * this.tileSize.h / 2,
a = a.getCenterLonLat(),
c = Math.round(Math.abs((a.lon - c) / (b * this.tileSize.w))),
d = Math.round(Math.abs((d -
a.lat) / (b * this.tileSize.h))),
a = this.map.getZoom();
if (this.lods) {
  if (b = this.lods[this.map.getZoom()], c < b.startTileCol || c > b.endTileCol || d < b.startTileRow || d > b.endTileRow) return null
} else {
  var e = this.getUpperLeftTileCoord(b),
  b = this.getLowerRightTileCoord(b);
  if (c < e.x || c >= b.x || d < e.y || d >= b.y) return null
}
b = this.url;
e = '' + c + d + a;
OpenLayers.Util.isArray(b) && (b = this.selectUrl(e, b));
this.useArcGISServer ? b += '/tile/${z}/${y}/${x}' : (c = 'C' + this.zeroPad(c, 8, 16), d = 'R' + this.zeroPad(d, 8, 16), a = 'L' + this.zeroPad(a, 2, 16), b = b + '/${z}/${y}/${x}.' + this.type);
b = OpenLayers.String.format(b, {
  x: c,
  y: d,
  z: a
});
return OpenLayers.Util.urlAppend(b, OpenLayers.Util.getParameterString(this.params))
},
zeroPad: function (a, b, c) {
for (a = a.toString(c || 10); a.length < b; ) a = '0' + a;
return a
},
CLASS_NAME: 'OpenLayers.Layer.ArcGISCache'
});
OpenLayers.Control.WMSGetFeatureInfo = OpenLayers.Class(OpenLayers.Control, {
hover: !1,
drillDown: !1,
maxFeatures: 10,
clickCallback: 'click',
output: 'features',
layers: null,
queryVisible: !1,
url: null,
layerUrls: null,
infoFormat: 'text/html',
vendorParams: {
},
format: null,
formatOptions: null,
handlerOptions: null,
handler: null,
hoverRequest: null,
initialize: function (a) {
a = a || {
};
a.handlerOptions = a.handlerOptions || {
};
OpenLayers.Control.prototype.initialize.apply(this, [
  a
]);
this.format || (this.format = new OpenLayers.Format.WMSGetFeatureInfo(a.formatOptions));
!0 === this.drillDown && (this.hover = !1);
this.hover ? this.handler = new OpenLayers.Handler.Hover(this, {
  move: this.cancelHover,
  pause: this.getInfoForHover
}, OpenLayers.Util.extend(this.handlerOptions.hover || {
}, {
  delay: 250
}))  : (a = {
}, a[this.clickCallback] = this.getInfoForClick, this.handler = new OpenLayers.Handler.Click(this, a, this.handlerOptions.click || {
}))
},
getInfoForClick: function (a) {
this.events.triggerEvent('beforegetfeatureinfo', {
  xy: a.xy
});
OpenLayers.Element.addClass(this.map.viewPortDiv, 'olCursorWait');
this.request(a.xy, {
})
},
getInfoForHover: function (a) {
this.events.triggerEvent('beforegetfeatureinfo', {
  xy: a.xy
});
this.request(a.xy, {
  hover: !0
})
},
cancelHover: function () {
this.hoverRequest && (this.hoverRequest.abort(), this.hoverRequest = null)
},
findLayers: function () {
for (var a = this.layers || this.map.layers, b = [
], c, d, e = a.length - 1; 0 <= e; --e) if (c = a[e], c instanceof OpenLayers.Layer.WMS && (!this.queryVisible || c.getVisibility())) d = OpenLayers.Util.isArray(c.url) ? c.url[0] : c.url,
!1 === this.drillDown && !this.url && (this.url = d),
(!0 === this.drillDown || this.urlMatches(d)) && b.push(c);
return b
},
urlMatches: function (a) {
var b = OpenLayers.Util.isEquivalentUrl(this.url, a);
if (!b && this.layerUrls) for (var c = 0, d = this.layerUrls.length; c < d; ++c) if (OpenLayers.Util.isEquivalentUrl(this.layerUrls[c], a)) {
  b = !0;
  break
}
return b
},
buildWMSOptions: function (a, b, c, d) {
for (var e = [
], f = [
], g = 0, h = b.length; g < h; g++) null != b[g].params.LAYERS && (e = e.concat(b[g].params.LAYERS), f = f.concat(this.getStyleNames(b[g])));
b = b[0];
g = this.map.getProjection();
(h = b.projection) && h.equals(this.map.getProjectionObject()) && (g = h.getCode());
d = OpenLayers.Util.extend({
  service: 'WMS',
  version: b.params.VERSION,
  request: 'GetFeatureInfo',
  exceptions: b.params.EXCEPTIONS,
  bbox: this.map.getExtent().toBBOX(null, b.reverseAxisOrder()),
  feature_count: this.maxFeatures,
  height: this.map.getSize().h,
  width: this.map.getSize().w,
  format: d,
  info_format: b.params.INFO_FORMAT || this.infoFormat
}, 1.3 <= parseFloat(b.params.VERSION) ? {
  crs: g,
  i: parseInt(c.x),
  j: parseInt(c.y)
}
 : {
  srs: g,
  x: parseInt(c.x),
  y: parseInt(c.y)
});
0 != e.length && (d = OpenLayers.Util.extend({
  layers: e,
  query_layers: e,
  styles: f
}, d));
OpenLayers.Util.applyDefaults(d, this.vendorParams);
return {
  url: a,
  params: OpenLayers.Util.upperCaseObject(d),
  callback: function (b) {
    this.handleResponse(c, b, a)
  },
  scope: this
}
},
getStyleNames: function (a) {
return a.params.STYLES ? a.params.STYLES : OpenLayers.Util.isArray(a.params.LAYERS) ? Array(a.params.LAYERS.length)  : a.params.LAYERS.replace(/[^,]/g, '')
},
request: function (a, b) {
var c = this.findLayers();
if (0 == c.length) this.events.triggerEvent('nogetfeatureinfo'),
OpenLayers.Element.removeClass(this.map.viewPortDiv, 'olCursorWait');
 else if (b = b || {
}, !1 === this.drillDown) {
  var c = this.buildWMSOptions(this.url, c, a, c[0].params.FORMAT),
  d = OpenLayers.Request.GET(c);
  !0 === b.hover && (this.hoverRequest = d)
} else {
  this._numRequests = this._requestCount = 0;
  this.features = [
  ];
  for (var d = {
  }, e, f = 0, g = c.length; f < g; f++) {
    var h = c[f];
    e = OpenLayers.Util.isArray(h.url) ? h.url[0] : h.url;
    e in d ? d[e].push(h)  : (this._numRequests++, d[e] = [
      h
    ])
  }
  for (e in d) c = d[e],
  c = this.buildWMSOptions(e, c, a, c[0].params.FORMAT),
  OpenLayers.Request.GET(c)
}
},
triggerGetFeatureInfo: function (a, b, c) {
this.events.triggerEvent('getfeatureinfo', {
  text: a.responseText,
  features: c,
  request: a,
  xy: b
});
OpenLayers.Element.removeClass(this.map.viewPortDiv, 'olCursorWait')
},
handleResponse: function (a, b, c) {
var d = b.responseXML;
if (!d || !d.documentElement) d = b.responseText;
d = this.format.read(d);
!1 === this.drillDown ? this.triggerGetFeatureInfo(b, a, d)  : (this._requestCount++, this._features = 'object' === this.output ? (this._features || [
]).concat({
  url: c,
  features: d
})  : (this._features || [
]).concat(d), this._requestCount === this._numRequests && (this.triggerGetFeatureInfo(b, a, this._features.concat()), delete this._features, delete this._requestCount, delete this._numRequests))
},
CLASS_NAME: 'OpenLayers.Control.WMSGetFeatureInfo'
});
OpenLayers.Format.WMSCapabilities.v1_3_0 = OpenLayers.Class(OpenLayers.Format.WMSCapabilities.v1_3, {
version: '1.3.0',
CLASS_NAME: 'OpenLayers.Format.WMSCapabilities.v1_3_0'
});
OpenLayers.Format.SOSGetFeatureOfInterest = OpenLayers.Class(OpenLayers.Format.XML, {
VERSION: '1.0.0',
namespaces: {
sos: 'http://www.opengis.net/sos/1.0',
gml: 'http://www.opengis.net/gml',
sa: 'http://www.opengis.net/sampling/1.0',
xsi: 'http://www.w3.org/2001/XMLSchema-instance'
},
schemaLocation: 'http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosAll.xsd',
defaultPrefix: 'sos',
regExes: {
trimSpace: /^\s*|\s*$/g,
removeSpace: /\s*/g,
splitSpace: /\s+/,
trimComma: /\s*,\s*/g
},
read: function (a) {
'string' ==
typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
  a
]));
a && 9 == a.nodeType && (a = a.documentElement);
var b = {
  features: [
  ]
};
this.readNode(a, b);
for (var a = [
], c = 0, d = b.features.length; c < d; c++) {
  var e = b.features[c];
  this.internalProjection && (this.externalProjection && e.components[0]) && e.components[0].transform(this.externalProjection, this.internalProjection);
  e = new OpenLayers.Feature.Vector(e.components[0], e.attributes);
  a.push(e)
}
return a
},
readers: {
sa: {
  SamplingPoint: function (a, b) {
    if (!b.attributes) {
      var c = {
        attributes: {
        }
      };
      b.features.push(c);
      b = c
    }
    b.attributes.id = this.getAttributeNS(a, this.namespaces.gml, 'id');
    this.readChildNodes(a, b)
  },
  position: function (a, b) {
    this.readChildNodes(a, b)
  }
},
gml: OpenLayers.Util.applyDefaults({
  FeatureCollection: function (a, b) {
    this.readChildNodes(a, b)
  },
  featureMember: function (a, b) {
    var c = {
      attributes: {
      }
    };
    b.features.push(c);
    this.readChildNodes(a, c)
  },
  name: function (a, b) {
    b.attributes.name = this.getChildValue(a)
  },
  pos: function (a, b) {
    this.externalProjection || (this.externalProjection = new OpenLayers.Projection(a.getAttribute('srsName')));
    OpenLayers.Format.GML.v3.prototype.readers.gml.pos.apply(this, [
      a,
      b
    ])
  }
}, OpenLayers.Format.GML.v3.prototype.readers.gml)
},
writers: {
sos: {
  GetFeatureOfInterest: function (a) {
    for (var b = this.createElementNSPlus('GetFeatureOfInterest', {
      attributes: {
        version: this.VERSION,
        service: 'SOS',
        'xsi:schemaLocation': this.schemaLocation
      }
    }), c = 0, d = a.fois.length; c < d; c++) this.writeNode('FeatureOfInterestId', {
      foi: a.fois[c]
    }, b);
    return b
  },
  FeatureOfInterestId: function (a) {
    return this.createElementNSPlus('FeatureOfInterestId', {
      value: a.foi
    })
  }
}
},
CLASS_NAME: 'OpenLayers.Format.SOSGetFeatureOfInterest'
});
OpenLayers.Format.SOSGetObservation = OpenLayers.Class(OpenLayers.Format.XML, {
namespaces: {
ows: 'http://www.opengis.net/ows',
gml: 'http://www.opengis.net/gml',
sos: 'http://www.opengis.net/sos/1.0',
ogc: 'http://www.opengis.net/ogc',
om: 'http://www.opengis.net/om/1.0',
sa: 'http://www.opengis.net/sampling/1.0',
xlink: 'http://www.w3.org/1999/xlink',
xsi: 'http://www.w3.org/2001/XMLSchema-instance'
},
regExes: {
trimSpace: /^\s*|\s*$/g,
removeSpace: /\s*/g,
splitSpace: /\s+/,
trimComma: /\s*,\s*/g
},
VERSION: '1.0.0',
schemaLocation: 'http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosGetObservation.xsd',
defaultPrefix: 'sos',
read: function (a) {
'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
  a
]));
a && 9 == a.nodeType && (a = a.documentElement);
var b = {
  measurements: [
  ],
  observations: [
  ]
};
this.readNode(a, b);
return b
},
write: function (a) {
a = this.writeNode('sos:GetObservation', a);
a.setAttribute('xmlns:om', this.namespaces.om);
a.setAttribute('xmlns:ogc', this.namespaces.ogc);
this.setAttributeNS(a, this.namespaces.xsi, 'xsi:schemaLocation', this.schemaLocation);
return OpenLayers.Format.XML.prototype.write.apply(this, [
  a
])
},
readers: {
om: {
  ObservationCollection: function (a, b) {
    b.id = this.getAttributeNS(a, this.namespaces.gml, 'id');
    this.readChildNodes(a, b)
  },
  member: function (a, b) {
    this.readChildNodes(a, b)
  },
  Measurement: function (a, b) {
    var c = {
    };
    b.measurements.push(c);
    this.readChildNodes(a, c)
  },
  Observation: function (a, b) {
    var c = {
    };
    b.observations.push(c);
    this.readChildNodes(a, c)
  },
  samplingTime: function (a, b) {
    var c = {
    };
    b.samplingTime = c;
    this.readChildNodes(a, c)
  },
  observedProperty: function (a, b) {
    b.observedProperty = this.getAttributeNS(a, this.namespaces.xlink, 'href');
    this.readChildNodes(a, b)
  },
  procedure: function (a, b) {
    b.procedure = this.getAttributeNS(a, this.namespaces.xlink, 'href');
    this.readChildNodes(a, b)
  },
  featureOfInterest: function (a, b) {
    var c = {
      features: [
      ]
    };
    b.fois = [
    ];
    b.fois.push(c);
    this.readChildNodes(a, c);
    for (var d = [
    ], e = 0, f = c.features.length; e < f; e++) {
      var g = c.features[e];
      d.push(new OpenLayers.Feature.Vector(g.components[0], g.attributes))
    }
    c.features = d
  },
  result: function (a, b) {
    var c = {
    };
    b.result = c;
    '' !== this.getChildValue(a) ? (c.value = this.getChildValue(a), c.uom = a.getAttribute('uom'))  : this.readChildNodes(a, c)
  }
},
sa: OpenLayers.Format.SOSGetFeatureOfInterest.prototype.readers.sa,
gml: OpenLayers.Util.applyDefaults({
  TimeInstant: function (a, b) {
    var c = {
    };
    b.timeInstant = c;
    this.readChildNodes(a, c)
  },
  timePosition: function (a, b) {
    b.timePosition = this.getChildValue(a)
  }
}, OpenLayers.Format.SOSGetFeatureOfInterest.prototype.readers.gml)
},
writers: {
sos: {
  GetObservation: function (a) {
    var b = this.createElementNSPlus('GetObservation', {
      attributes: {
        version: this.VERSION,
        service: 'SOS'
      }
    });
    this.writeNode('offering', a, b);
    a.eventTime && this.writeNode('eventTime', a, b);
    for (var c in a.procedures) this.writeNode('procedure', a.procedures[c], b);
    for (var d in a.observedProperties) this.writeNode('observedProperty', a.observedProperties[d], b);
    a.foi && this.writeNode('featureOfInterest', a.foi, b);
    this.writeNode('responseFormat', a, b);
    a.resultModel && this.writeNode('resultModel', a, b);
    a.responseMode && this.writeNode('responseMode', a, b);
    return b
  },
  featureOfInterest: function (a) {
    var b = this.createElementNSPlus('featureOfInterest');
    this.writeNode('ObjectID', a.objectId, b);
    return b
  },
  ObjectID: function (a) {
    return this.createElementNSPlus('ObjectID', {
      value: a
    })
  },
  responseFormat: function (a) {
    return this.createElementNSPlus('responseFormat', {
      value: a.responseFormat
    })
  },
  procedure: function (a) {
    return this.createElementNSPlus('procedure', {
      value: a
    })
  },
  offering: function (a) {
    return this.createElementNSPlus('offering', {
      value: a.offering
    })
  },
  observedProperty: function (a) {
    return this.createElementNSPlus('observedProperty', {
      value: a
    })
  },
  eventTime: function (a) {
    var b = this.createElementNSPlus('eventTime');
    'latest' === a.eventTime && this.writeNode('ogc:TM_Equals', a, b);
    return b
  },
  resultModel: function (a) {
    return this.createElementNSPlus('resultModel', {
      value: a.resultModel
    })
  },
  responseMode: function (a) {
    return this.createElementNSPlus('responseMode', {
      value: a.responseMode
    })
  }
},
ogc: {
  TM_Equals: function (a) {
    var b = this.createElementNSPlus('ogc:TM_Equals');
    this.writeNode('ogc:PropertyName', {
      property: 'urn:ogc:data:time:iso8601'
    }, b);
    'latest' === a.eventTime && this.writeNode('gml:TimeInstant', {
      value: 'latest'
    }, b);
    return b
  },
  PropertyName: function (a) {
    return this.createElementNSPlus('ogc:PropertyName', {
      value: a.property
    })
  }
},
gml: {
  TimeInstant: function (a) {
    var b = this.createElementNSPlus('gml:TimeInstant');
    this.writeNode('gml:timePosition', a, b);
    return b
  },
  timePosition: function (a) {
    return this.createElementNSPlus('gml:timePosition', {
      value: a.value
    })
  }
}
},
CLASS_NAME: 'OpenLayers.Format.SOSGetObservation'
});
OpenLayers.Control.UTFGrid = OpenLayers.Class(OpenLayers.Control, {
autoActivate: !0,
layers: null,
defaultHandlerOptions: {
delay: 300,
pixelTolerance: 4,
stopMove: !1,
single: !0,
'double': !1,
stopSingle: !1,
stopDouble: !1
},
handlerMode: 'click',
setHandler: function (a) {
this.handlerMode = a;
this.resetHandler()
},
resetHandler: function () {
this.handler && (this.handler.deactivate(), this.handler.destroy(), this.handler = null);
'hover' == this.handlerMode ? this.handler = new OpenLayers.Handler.Hover(this, {
  pause: this.handleEvent,
  move: this.reset
}, this.handlerOptions)  : 'click' == this.handlerMode ? this.handler = new OpenLayers.Handler.Click(this, {
  click: this.handleEvent
}, this.handlerOptions)  : 'move' == this.handlerMode && (this.handler = new OpenLayers.Handler.Hover(this, {
  pause: this.handleEvent,
  move: this.handleEvent
}, this.handlerOptions));
return this.handler ? !0 : !1
},
initialize: function (a) {
a = a || {
};
a.handlerOptions = a.handlerOptions || this.defaultHandlerOptions;
OpenLayers.Control.prototype.initialize.apply(this, [
  a
]);
this.resetHandler()
},
handleEvent: function (a) {
if (null ==
a) this.reset();
 else {
  var b = this.map.getLonLatFromPixel(a.xy);
  if (b) {
    var c = this.findLayers();
    if (0 < c.length) {
      for (var d = {
      }, e, f, g = 0, h = c.length; g < h; g++) e = c[g],
      f = OpenLayers.Util.indexOf(this.map.layers, e),
      d[f] = e.getFeatureInfo(b);
      this.callback(d, b, a.xy)
    }
  }
}
},
callback: function () {
},
reset: function () {
this.callback(null)
},
findLayers: function () {
for (var a = this.layers || this.map.layers, b = [
], c, d = a.length - 1; 0 <= d; --d) c = a[d],
c instanceof OpenLayers.Layer.UTFGrid && b.push(c);
return b
},
CLASS_NAME: 'OpenLayers.Control.UTFGrid'
});
OpenLayers.Format.CQL = function () {
function a(a) {
function b() {
  var a = e.pop();
  switch (a.type) {
    case 'LOGICAL':
      var c = b(),
      g = b();
      return new OpenLayers.Filter.Logical({
        filters: [
          g,
          c
        ],
        type: f[a.text.toUpperCase()]
      });
    case 'NOT':
      return c = b(),
      new OpenLayers.Filter.Logical({
        filters: [
          c
        ],
        type: OpenLayers.Filter.Logical.NOT
      });
    case 'BETWEEN':
      return e.pop(),
      g = b(),
      a = b(),
      c = b(),
      new OpenLayers.Filter.Comparison({
        property: c,
        lowerBoundary: a,
        upperBoundary: g,
        type: OpenLayers.Filter.Comparison.BETWEEN
      });
    case 'COMPARISON':
      return g = b(),
      c = b(),
      new OpenLayers.Filter.Comparison({
        property: c,
        value: g,
        type: d[a.text.toUpperCase()]
      });
    case 'VALUE':
      return /^'.*'$/.test(a.text) ? a.text.substr(1, a.text.length - 2)  : Number(a.text);
    case 'SPATIAL':
      switch (a.text.toUpperCase()) {
        case 'BBOX':
          var c = b(),
          a = b(),
          g = b(),
          h = b(),
          i = b();
          return new OpenLayers.Filter.Spatial({
            type: OpenLayers.Filter.Spatial.BBOX,
            property: i,
            value: OpenLayers.Bounds.fromArray([h,
            g,
            a,
            c])
          });
        case 'INTERSECTS':
          return g = b(),
          c = b(),
          new OpenLayers.Filter.Spatial({
            type: OpenLayers.Filter.Spatial.INTERSECTS,
            property: c,
            value: g
          });
        case 'WITHIN':
          return g = b(),
          c = b(),
          new OpenLayers.Filter.Spatial({
            type: OpenLayers.Filter.Spatial.WITHIN,
            property: c,
            value: g
          });
        case 'CONTAINS':
          return g = b(),
          c = b(),
          new OpenLayers.Filter.Spatial({
            type: OpenLayers.Filter.Spatial.CONTAINS,
            property: c,
            value: g
          });
        case 'DWITHIN':
          return a = b(),
          g = b(),
          c = b(),
          new OpenLayers.Filter.Spatial({
            type: OpenLayers.Filter.Spatial.DWITHIN,
            value: g,
            property: c,
            distance: Number(a)
          })
      }
    case 'GEOMETRY':
      return OpenLayers.Geometry.fromWKT(a.text);
    default:
      return a.text
    }
}
for (var c = [
], e = [
]; a.length; ) {
  var g = a.shift();
  switch (g.type) {
    case 'PROPERTY':
    case 'GEOMETRY':
    case 'VALUE':
      e.push(g);
      break;
    case 'COMPARISON':
    case 'BETWEEN':
    case 'LOGICAL':
      for (var i = h[g.type]; 0 < c.length && h[c[c.length - 1].type] <= i; ) e.push(c.pop());
      c.push(g);
      break;
    case 'SPATIAL':
    case 'NOT':
    case 'LPAREN':
      c.push(g);
      break;
    case 'RPAREN':
      for (; 0 < c.length && 'LPAREN' != c[c.length - 1].type; ) e.push(c.pop());
      c.pop();
      0 < c.length && 'SPATIAL' == c[c.length - 1].type && e.push(c.pop());
    case 'COMMA':
    case 'END':
      break;
    default:
      throw Error('Unknown token type ' +
      g.type);
  }
}
for (; 0 < c.length; ) e.push(c.pop());
a = b();
if (0 < e.length) {
  a = 'Remaining tokens after building AST: \n';
  for (c = e.length - 1; 0 <= c; c--) a += e[c].type + ': ' + e[c].text + '\n';
  throw Error(a);
}
return a
}
var b = {
PROPERTY: /^[_a-zA-Z]\w*/,
COMPARISON: /^(=|<>|<=|<|>=|>|LIKE)/i,
COMMA: /^,/,
LOGICAL: /^(AND|OR)/i,
VALUE: /^('\w+'|\d+(\.\d*)?|\.\d+)/,
LPAREN: /^\(/,
RPAREN: /^\)/,
SPATIAL: /^(BBOX|INTERSECTS|DWITHIN|WITHIN|CONTAINS)/i,
NOT: /^NOT/i,
BETWEEN: /^BETWEEN/i,
GEOMETRY: function (a) {
var b = /^(POINT|LINESTRING|POLYGON|MULTIPOINT|MULTILINESTRING|MULTIPOLYGON|GEOMETRYCOLLECTION)/.exec(a);
if (b) {
  var c = a.length,
  b = a.indexOf('(', b[0].length);
  if ( - 1 < b) for (var d = 1; b < c && 0 < d; ) switch (b++, a.charAt(b)) {
    case '(':
      d++;
      break;
    case ')':
      d--
  }
  return [a.substr(0, b + 1)]
}
},
END: /^$/
},
c = {
LPAREN: [
'GEOMETRY',
'SPATIAL',
'PROPERTY',
'VALUE',
'LPAREN'
],
RPAREN: [
'NOT',
'LOGICAL',
'END',
'RPAREN'
],
PROPERTY: [
'COMPARISON',
'BETWEEN',
'COMMA'
],
BETWEEN: [
'VALUE'
],
COMPARISON: [
'VALUE'
],
COMMA: [
'GEOMETRY',
'VALUE',
'PROPERTY'
],
VALUE: [
'LOGICAL',
'COMMA',
'RPAREN',
'END'
],
SPATIAL: [
'LPAREN'
],
LOGICAL: [
'NOT',
'VALUE',
'SPATIAL',
'PROPERTY',
'LPAREN'
],
NOT: [
'PROPERTY',
'LPAREN'
],
GEOMETRY: [
'COMMA',
'RPAREN'
]
},
d = {
'=': OpenLayers.Filter.Comparison.EQUAL_TO,
'<>': OpenLayers.Filter.Comparison.NOT_EQUAL_TO,
'<': OpenLayers.Filter.Comparison.LESS_THAN,
'<=': OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO,
'>': OpenLayers.Filter.Comparison.GREATER_THAN,
'>=': OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO,
LIKE: OpenLayers.Filter.Comparison.LIKE,
BETWEEN: OpenLayers.Filter.Comparison.BETWEEN
},
e = {
},
f = {
AND: OpenLayers.Filter.Logical.AND,
OR: OpenLayers.Filter.Logical.OR
},
g = {
},
h = {
RPAREN: 3,
LOGICAL: 2,
COMPARISON: 1
},
i;
for (i in d) d.hasOwnProperty(i) && (e[d[i]] = i);
for (i in f) f.hasOwnProperty(i) && (g[f[i]] = i);
return OpenLayers.Class(OpenLayers.Format, {
read: function (d) {
var e = d,
d = [
],
f,
g = [
  'NOT',
  'GEOMETRY',
  'SPATIAL',
  'PROPERTY',
  'LPAREN'
];
do {
  a: {
    f = g;
    for (var h = void 0, g = void 0, i = f.length, h = 0; h < i; h++) {
      var g = f[h],
      p = b[g] instanceof RegExp ? b[g].exec(e)  : (0, b[g]) (e);
      if (p) {
        f = p[0];
        e = e.substr(f.length).replace(/^\s*/, '');
        f = {
          type: g,
          text: f,
          remainder: e
        };
        break a
      }
    }
    d = 'ERROR: In parsing: [' + e + '], expected one of: ';
    for (h = 0; h < i; h++) g = f[h],
    d += '\n    ' + g + ': ' + b[g];
    throw Error(d);
  }
  e = f.remainder;
  g = c[f.type];
  if ('END' != f.type && !g) throw Error('No follows list for ' + f.type);
  d.push(f)
} while ('END' != f.type);
d = a(d);
this.keepData && (this.data = d);
return d
},
write: function (a) {
if (a instanceof OpenLayers.Geometry) return a.toString();
switch (a.CLASS_NAME) {
  case 'OpenLayers.Filter.Spatial':
    switch (a.type) {
      case OpenLayers.Filter.Spatial.BBOX:
        return 'BBOX(' + a.property + ',' + a.value.toBBOX() + ')';
      case OpenLayers.Filter.Spatial.DWITHIN:
        return 'DWITHIN(' +
        a.property + ', ' + this.write(a.value) + ', ' + a.distance + ')';
      case OpenLayers.Filter.Spatial.WITHIN:
        return 'WITHIN(' + a.property + ', ' + this.write(a.value) + ')';
      case OpenLayers.Filter.Spatial.INTERSECTS:
        return 'INTERSECTS(' + a.property + ', ' + this.write(a.value) + ')';
      case OpenLayers.Filter.Spatial.CONTAINS:
        return 'CONTAINS(' + a.property + ', ' + this.write(a.value) + ')';
      default:
        throw Error('Unknown spatial filter type: ' + a.type);
    }
  case 'OpenLayers.Filter.Logical':
    if (a.type == OpenLayers.Filter.Logical.NOT) return 'NOT (' + this.write(a.filters[0]) +
    ')';
    for (var b = '(', c = !0, d = 0; d < a.filters.length; d++) c ? c = !1 : b += ') ' + g[a.type] + ' (',
    b += this.write(a.filters[d]);
    return b + ')';
  case 'OpenLayers.Filter.Comparison':
    return a.type == OpenLayers.Filter.Comparison.BETWEEN ? a.property + ' BETWEEN ' + this.write(a.lowerBoundary) + ' AND ' + this.write(a.upperBoundary)  : a.property + ' ' + e[a.type] + ' ' + this.write(a.value);
  case void 0:
    if ('string' === typeof a) return '\'' + a + '\'';
    if ('number' === typeof a) return '' + a;
  default:
    throw Error('Can\'t encode: ' + a.CLASS_NAME + ' ' + a);
  }
},
CLASS_NAME: 'OpenLayers.Format.CQL'
})
}();
OpenLayers.Control.Split = OpenLayers.Class(OpenLayers.Control, {
layer: null,
source: null,
sourceOptions: null,
tolerance: null,
edge: !0,
deferDelete: !1,
mutual: !0,
targetFilter: null,
sourceFilter: null,
handler: null,
initialize: function (a) {
OpenLayers.Control.prototype.initialize.apply(this, [
a
]);
this.options = a || {
};
this.options.source && this.setSource(this.options.source)
},
setSource: function (a) {
this.active ? (this.deactivate(), this.handler && (this.handler.destroy(), delete this.handler), this.source = a, this.activate())  : this.source = a
},
activate: function () {
var a = OpenLayers.Control.prototype.activate.call(this);
if (a) if (this.source) {
if (this.source.events) this.source.events.on({
  sketchcomplete: this.onSketchComplete,
  afterfeaturemodified: this.afterFeatureModified,
  scope: this
})
} else this.handler || (this.handler = new OpenLayers.Handler.Path(this, {
done: function (a) {
  this.onSketchComplete({
    feature: new OpenLayers.Feature.Vector(a)
  })
}
}, {
layerOptions: this.sourceOptions
})),
this.handler.activate();
return a
},
deactivate: function () {
var a = OpenLayers.Control.prototype.deactivate.call(this);
a && this.source && this.source.events && this.layer.events.un({
sketchcomplete: this.onSketchComplete,
afterfeaturemodified: this.afterFeatureModified,
scope: this
});
return a
},
onSketchComplete: function (a) {
this.feature = null;
return !this.considerSplit(a.feature)
},
afterFeatureModified: function (a) {
a.modified && 'function' === typeof a.feature.geometry.split && (this.feature = a.feature, this.considerSplit(a.feature))
},
removeByGeometry: function (a, b) {
for (var c = 0, d = a.length; c < d; ++c) if (a[c].geometry === b) {
a.splice(c, 1);
break
}
},
isEligible: function (a) {
return a.geometry ? a.state !== OpenLayers.State.DELETE && 'function' === typeof a.geometry.split && this.feature !== a && (!this.targetFilter || this.targetFilter.evaluate(a.attributes))  : !1
},
considerSplit: function (a) {
var b = !1,
c = !1;
if (!this.sourceFilter || this.sourceFilter.evaluate(a.attributes)) {
for (var d = this.layer && this.layer.features || [
], e, f, g = [
], h = [
], i = this.layer === this.source && this.mutual, j = {
  edge: this.edge,
  tolerance: this.tolerance,
  mutual: i
}, k = [
  a.geometry
], l, m, n, o = 0, p = d.length; o < p; ++o) if (l = d[o], this.isEligible(l)) {
  m = [
    l.geometry
  ];
  for (var q = 0; q < k.length; ++q) {
    n = k[q];
    for (var r = 0; r < m.length; ++r) if (e = m[r], n.getBounds().intersectsBounds(e.getBounds()) && (e = n.split(e, j))) if (f = this.events.triggerEvent('beforesplit', {
      source: a,
      target: l
    }), !1 !== f && (i && (f = e[0], 1 < f.length && (f.unshift(q, 1), Array.prototype.splice.apply(k, f), q += f.length - 3), e = e[1]), 1 < e.length)) e.unshift(r, 1),
    Array.prototype.splice.apply(m, e),
    r += e.length - 3
  }
  m && 1 < m.length && (this.geomsToFeatures(l, m), this.events.triggerEvent('split', {
    original: l,
    features: m
  }), Array.prototype.push.apply(g, m), h.push(l), c = !0)
}
k && 1 < k.length && (this.geomsToFeatures(a, k), this.events.triggerEvent('split', {
  original: a,
  features: k
}), Array.prototype.push.apply(g, k), h.push(a), b = !0);
if (b || c) {
  if (this.deferDelete) {
    d = [
    ];
    o = 0;
    for (p = h.length; o < p; ++o) c = h[o],
    c.state === OpenLayers.State.INSERT ? d.push(c)  : (c.state = OpenLayers.State.DELETE, this.layer.drawFeature(c));
    this.layer.destroyFeatures(d, {
      silent: !0
    });
    o = 0;
    for (p = g.length; o < p; ++o) g[o].state = OpenLayers.State.INSERT
  } else this.layer.destroyFeatures(h, {
    silent: !0
  });
  this.layer.addFeatures(g, {
    silent: !0
  });
  this.events.triggerEvent('aftersplit', {
    source: a,
    features: g
  })
}
}
return b
},
geomsToFeatures: function (a, b) {
var c = a.clone();
delete c.geometry;
for (var d, e = 0, f = b.length; e < f; ++e) d = c.clone(),
d.geometry = b[e],
d.state = OpenLayers.State.INSERT,
b[e] = d
},
destroy: function () {
this.active && this.deactivate();
OpenLayers.Control.prototype.destroy.call(this)
},
CLASS_NAME: 'OpenLayers.Control.Split'
});
OpenLayers.Layer.WMTS = OpenLayers.Class(OpenLayers.Layer.Grid, {
isBaseLayer: !0,
version: '1.0.0',
requestEncoding: 'KVP',
url: null,
layer: null,
matrixSet: null,
style: null,
format: 'image/jpeg',
tileOrigin: null,
tileFullExtent: null,
formatSuffix: null,
matrixIds: null,
dimensions: null,
params: null,
zoomOffset: 0,
serverResolutions: null,
formatSuffixMap: {
'image/png': 'png',
'image/png8': 'png',
'image/png24': 'png',
'image/png32': 'png',
png: 'png',
'image/jpeg': 'jpg',
'image/jpg': 'jpg',
jpeg: 'jpg',
jpg: 'jpg'
},
matrix: null,
initialize: function (a) {
var b = {
url: !0,
layer: !0,
style: !0,
matrixSet: !0
},
c;
for (c in b) if (!(c in a)) throw Error('Missing property \'' + c + '\' in layer configuration.');
a.params = OpenLayers.Util.upperCaseObject(a.params);
OpenLayers.Layer.Grid.prototype.initialize.apply(this, [
a.name,
a.url,
a.params,
a
]);
this.formatSuffix || (this.formatSuffix = this.formatSuffixMap[this.format] || this.format.split('/').pop());
if (this.matrixIds && (a = this.matrixIds.length) && 'string' === typeof this.matrixIds[0]) {
b = this.matrixIds;
this.matrixIds = Array(a);
for (c = 0; c < a; ++c) this.matrixIds[c] = {
  identifier: b[c]
}
}
},
setMap: function () {
OpenLayers.Layer.Grid.prototype.setMap.apply(this, arguments);
this.updateMatrixProperties()
},
updateMatrixProperties: function () {
if (this.matrix = this.getMatrix()) if (this.matrix.topLeftCorner && (this.tileOrigin = this.matrix.topLeftCorner), this.matrix.tileWidth && this.matrix.tileHeight && (this.tileSize = new OpenLayers.Size(this.matrix.tileWidth, this.matrix.tileHeight)), this.tileOrigin || (this.tileOrigin = new OpenLayers.LonLat(this.maxExtent.left, this.maxExtent.top)), !this.tileFullExtent) this.tileFullExtent = this.maxExtent
},
moveTo: function (a, b, c) {
(b || !this.matrix) && this.updateMatrixProperties();
return OpenLayers.Layer.Grid.prototype.moveTo.apply(this, arguments)
},
clone: function (a) {
null == a && (a = new OpenLayers.Layer.WMTS(this.options));
return a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [
a
])
},
getIdentifier: function () {
return this.getServerZoom()
},
getMatrix: function () {
var a;
if (!this.matrixIds || 0 === this.matrixIds.length) a = {
identifier: this.getIdentifier()
};
 else if ('scaleDenominator' in this.matrixIds[0]) for (var b = OpenLayers.METERS_PER_INCH * OpenLayers.INCHES_PER_UNIT[this.units] * this.getServerResolution() / 0.00028, c = Number.POSITIVE_INFINITY, d, e = 0, f = this.matrixIds.length; e < f; ++e) d = Math.abs(1 - this.matrixIds[e].scaleDenominator / b),
d < c && (c = d, a = this.matrixIds[e]);
 else a = this.matrixIds[this.getIdentifier()];
return a
},
getTileInfo: function (a) {
var b = this.getServerResolution(),
c = (a.lon - this.tileOrigin.lon) / (b * this.tileSize.w),
a = (this.tileOrigin.lat - a.lat) / (b * this.tileSize.h),
b = Math.floor(c),
d = Math.floor(a);
return {
col: b,
row: d,
i: Math.floor((c - b) * this.tileSize.w),
j: Math.floor((a - d) * this.tileSize.h)
}
},
getURL: function (a) {
var a = this.adjustBounds(a),
b = '';
if (!this.tileFullExtent || this.tileFullExtent.intersectsBounds(a)) {
var c = this.getTileInfo(a.getCenterLonLat()),
a = this.dimensions;
if ('REST' === this.requestEncoding.toUpperCase()) if (b = this.params, 'string' === typeof this.url && - 1 !== this.url.indexOf('{')) {
  var d = this.url.replace(/\{/g, '${'),
  c = {
    style: this.style,
    Style: this.style,
    TileMatrixSet: this.matrixSet,
    TileMatrix: this.matrix.identifier,
    TileRow: c.row,
    TileCol: c.col
  };
  if (a) {
    var e,
    f;
    for (f = a.length - 1; 0 <= f; --f) e = a[f],
    c[e] = b[e.toUpperCase()]
  }
  b = OpenLayers.String.format(d, c)
} else {
  d = this.version + '/' + this.layer + '/' + this.style + '/';
  if (a) for (f = 0; f < a.length; f++) b[a[f]] && (d = d + b[a[f]] + '/');
  d = d + this.matrixSet + '/' + this.matrix.identifier + '/' + c.row + '/' + c.col + '.' + this.formatSuffix;
  b = OpenLayers.Util.isArray(this.url) ? this.selectUrl(d, this.url)  : this.url;
  b.match(/\/$/) || (b += '/');
  b += d
} else 'KVP' === this.requestEncoding.toUpperCase() && (b = {
  SERVICE: 'WMTS',
  REQUEST: 'GetTile',
  VERSION: this.version,
  LAYER: this.layer,
  STYLE: this.style,
  TILEMATRIXSET: this.matrixSet,
  TILEMATRIX: this.matrix.identifier,
  TILEROW: c.row,
  TILECOL: c.col,
  FORMAT: this.format
}, b = OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(this, [
  b
]))
}
return b
},
mergeNewParams: function (a) {
if ('KVP' === this.requestEncoding.toUpperCase()) return OpenLayers.Layer.Grid.prototype.mergeNewParams.apply(this, [
OpenLayers.Util.upperCaseObject(a)
])
},
CLASS_NAME: 'OpenLayers.Layer.WMTS'
});
OpenLayers.Protocol.SOS.v1_0_0 = OpenLayers.Class(OpenLayers.Protocol, {
fois: null,
formatOptions: null,
initialize: function (a) {
OpenLayers.Protocol.prototype.initialize.apply(this, [
a
]);
a.format || (this.format = new OpenLayers.Format.SOSGetFeatureOfInterest(this.formatOptions))
},
destroy: function () {
this.options && !this.options.format && this.format.destroy();
this.format = null;
OpenLayers.Protocol.prototype.destroy.apply(this)
},
read: function (a) {
a = OpenLayers.Util.extend({
}, a);
OpenLayers.Util.applyDefaults(a, this.options || {
});
var b = new OpenLayers.Protocol.Response({
requestType: 'read'
}),
c = this.format,
c = OpenLayers.Format.XML.prototype.write.apply(c, [
c.writeNode('sos:GetFeatureOfInterest', {
  fois: this.fois
})
]);
b.priv = OpenLayers.Request.POST({
url: a.url,
callback: this.createCallback(this.handleRead, b, a),
data: c
});
return b
},
handleRead: function (a, b) {
if (b.callback) {
var c = a.priv;
200 <= c.status && 300 > c.status ? (a.features = this.parseFeatures(c), a.code = OpenLayers.Protocol.Response.SUCCESS)  : a.code = OpenLayers.Protocol.Response.FAILURE;
b.callback.call(b.scope, a)
}
},
parseFeatures: function (a) {
var b = a.responseXML;
if (!b || !b.documentElement) b = a.responseText;
return !b || 0 >= b.length ? null : this.format.read(b)
},
CLASS_NAME: 'OpenLayers.Protocol.SOS.v1_0_0'
});
OpenLayers.Layer.KaMapCache = OpenLayers.Class(OpenLayers.Layer.KaMap, {
IMAGE_EXTENSIONS: {
jpeg: 'jpg',
gif: 'gif',
png: 'png',
png8: 'png',
png24: 'png',
dithered: 'png'
},
DEFAULT_FORMAT: 'jpeg',
initialize: function (a, b, c, d) {
OpenLayers.Layer.KaMap.prototype.initialize.apply(this, arguments);
this.extension = this.IMAGE_EXTENSIONS[this.params.i.toLowerCase() || this.DEFAULT_FORMAT]
},
getURL: function (a) {
var a = this.adjustBounds(a),
b = this.map.getResolution(),
c = Math.round(10000 * this.map.getScale()) / 10000,
d = Math.round(a.left / b),
a = - Math.round(a.top / b),
b = Math.floor(d / this.tileSize.w / this.params.metaTileSize.w) * this.tileSize.w * this.params.metaTileSize.w,
e = Math.floor(a / this.tileSize.h / this.params.metaTileSize.h) * this.tileSize.h * this.params.metaTileSize.h,
c = [
'/',
this.params.map,
'/',
c,
'/',
this.params.g.replace(/\s/g, '_'),
'/def/t',
e,
'/l',
b,
'/t',
a,
'l',
d,
'.',
this.extension
],
d = this.url;
OpenLayers.Util.isArray(d) && (d = this.selectUrl(c.join(''), d));
return d + c.join('')
},
CLASS_NAME: 'OpenLayers.Layer.KaMapCache'
});
OpenLayers.Protocol.WFS.v1_1_0 = OpenLayers.Class(OpenLayers.Protocol.WFS.v1, {
version: '1.1.0',
initialize: function (a) {
OpenLayers.Protocol.WFS.v1.prototype.initialize.apply(this, arguments);
this.outputFormat && !this.readFormat && ('gml2' == this.outputFormat.toLowerCase() ? this.readFormat = new OpenLayers.Format.GML.v2({
featureType: this.featureType,
featureNS: this.featureNS,
geometryName: this.geometryName
})  : 'json' == this.outputFormat.toLowerCase() && (this.readFormat = new OpenLayers.Format.GeoJSON))
},
CLASS_NAME: 'OpenLayers.Protocol.WFS.v1_1_0'
});
OpenLayers.Format.WMSCapabilities.v1_1_1 = OpenLayers.Class(OpenLayers.Format.WMSCapabilities.v1_1, {
version: '1.1.1',
readers: {
wms: OpenLayers.Util.applyDefaults({
SRS: function (a, b) {
  b.srs[this.getChildValue(a)] = !0
}
}, OpenLayers.Format.WMSCapabilities.v1_1.prototype.readers.wms)
},
CLASS_NAME: 'OpenLayers.Format.WMSCapabilities.v1_1_1'
});
OpenLayers.Format.WMSCapabilities.v1_1_1_WMSC = OpenLayers.Class(OpenLayers.Format.WMSCapabilities.v1_1_1, {
version: '1.1.1',
profile: 'WMSC',
readers: {
wms: OpenLayers.Util.applyDefaults({
VendorSpecificCapabilities: function (a, b) {
  b.vendorSpecific = {
    tileSets: [
    ]
  };
  this.readChildNodes(a, b.vendorSpecific)
},
TileSet: function (a, b) {
  var c = {
    srs: {
    },
    bbox: {
    },
    resolutions: [
    ]
  };
  this.readChildNodes(a, c);
  b.tileSets.push(c)
},
Resolutions: function (a, b) {
  for (var c = this.getChildValue(a).split(' '), d = 0, e = c.length; d < e; d++) '' != c[d] && b.resolutions.push(parseFloat(c[d]))
},
Width: function (a, b) {
  b.width = parseInt(this.getChildValue(a))
},
Height: function (a, b) {
  b.height = parseInt(this.getChildValue(a))
},
Layers: function (a, b) {
  b.layers = this.getChildValue(a)
},
Styles: function (a, b) {
  b.styles = this.getChildValue(a)
}
}, OpenLayers.Format.WMSCapabilities.v1_1_1.prototype.readers.wms)
},
CLASS_NAME: 'OpenLayers.Format.WMSCapabilities.v1_1_1_WMSC'
});
OpenLayers.Format.WMSCapabilities.v1_1_0 = OpenLayers.Class(OpenLayers.Format.WMSCapabilities.v1_1, {
version: '1.1.0',
readers: {
wms: OpenLayers.Util.applyDefaults({
SRS: function (a, b) {
  for (var c = this.getChildValue(a).split(/ +/), d = 0, e = c.length; d < e; d++) b.srs[c[d]] = !0
}
}, OpenLayers.Format.WMSCapabilities.v1_1.prototype.readers.wms)
},
CLASS_NAME: 'OpenLayers.Format.WMSCapabilities.v1_1_0'
});
OpenLayers.Control.LayerSwitcher = OpenLayers.Class(OpenLayers.Control, {
roundedCorner: !1,
roundedCornerColor: 'darkblue',
layerStates: null,
layersDiv: null,
baseLayersDiv: null,
baseLayers: null,
dataLbl: null,
dataLayersDiv: null,
dataLayers: null,
minimizeDiv: null,
maximizeDiv: null,
ascending: !0,
initialize: function (a) {
OpenLayers.Control.prototype.initialize.apply(this, arguments);
this.layerStates = [
];
this.roundedCorner && OpenLayers.Console.warn('roundedCorner option is deprecated')
},
destroy: function () {
this.clearLayersArray('base');
this.clearLayersArray('data');
this.map.events.un({
buttonclick: this.onButtonClick,
addlayer: this.redraw,
changelayer: this.redraw,
removelayer: this.redraw,
changebaselayer: this.redraw,
scope: this
});
this.events.unregister('buttonclick', this, this.onButtonClick);
OpenLayers.Control.prototype.destroy.apply(this, arguments)
},
setMap: function (a) {
OpenLayers.Control.prototype.setMap.apply(this, arguments);
this.map.events.on({
addlayer: this.redraw,
changelayer: this.redraw,
removelayer: this.redraw,
changebaselayer: this.redraw,
scope: this
});
this.outsideViewport ? (this.events.attachToElement(this.div), this.events.register('buttonclick', this, this.onButtonClick))  : this.map.events.register('buttonclick', this, this.onButtonClick)
},
draw: function () {
OpenLayers.Control.prototype.draw.apply(this);
this.loadContents();
this.outsideViewport || this.minimizeControl();
this.redraw();
return this.div
},
onButtonClick: function (a) {
a = a.buttonElement;
a === this.minimizeDiv ? this.minimizeControl()  : a === this.maximizeDiv ? this.maximizeControl()  : a._layerSwitcher ===
this.id && (a['for'] && (a = document.getElementById(a['for'])), a.disabled || ('radio' == a.type ? (a.checked = !0, this.map.setBaseLayer(this.map.getLayer(a._layer)))  : (a.checked = !a.checked, this.updateMap())))
},
clearLayersArray: function (a) {
this[a + 'LayersDiv'].innerHTML = '';
this[a + 'Layers'] = [
]
},
checkRedraw: function () {
var a = !1;
if (!this.layerStates.length || this.map.layers.length != this.layerStates.length) a = !0;
 else for (var b = 0, c = this.layerStates.length; b < c; b++) {
var d = this.layerStates[b],
e = this.map.layers[b];
if (d.name !=
e.name || d.inRange != e.inRange || d.id != e.id || d.visibility != e.visibility) {
  a = !0;
  break
}
}
return a
},
redraw: function () {
if (!this.checkRedraw()) return this.div;
this.clearLayersArray('base');
this.clearLayersArray('data');
var a = !1,
b = !1,
c = this.map.layers.length;
this.layerStates = Array(c);
for (var d = 0; d < c; d++) {
var e = this.map.layers[d];
this.layerStates[d] = {
  name: e.name,
  visibility: e.visibility,
  inRange: e.inRange,
  id: e.id
}
}
var f = this.map.layers.slice();
this.ascending || f.reverse();
d = 0;
for (c = f.length; d < c; d++) {
var e = f[d],
g = e.isBaseLayer;
if (e.displayInLayerSwitcher) {
  g ? b = !0 : a = !0;
  var h = g ? e == this.map.baseLayer : e.getVisibility(),
  i = document.createElement('input');
  i.id = this.id + '_input_' + e.name;
  i.name = g ? this.id + '_baseLayers' : e.name;
  i.type = g ? 'radio' : 'checkbox';
  i.value = e.name;
  i.checked = h;
  i.defaultChecked = h;
  i.className = 'olButton';
  i._layer = e.id;
  i._layerSwitcher = this.id;
  !g && !e.inRange && (i.disabled = !0);
  h = document.createElement('label');
  h['for'] = i.id;
  OpenLayers.Element.addClass(h, 'labelSpan olButton');
  h._layer = e.id;
  h._layerSwitcher = this.id;
  !g && !e.inRange && (h.style.color = 'gray');
  h.innerHTML = e.name;
  h.style.verticalAlign = g ? 'bottom' : 'baseline';
  var j = document.createElement('br');
  (g ? this.baseLayers : this.dataLayers).push({
    layer: e,
    inputElem: i,
    labelSpan: h
  });
  e = g ? this.baseLayersDiv : this.dataLayersDiv;
  e.appendChild(i);
  e.appendChild(h);
  e.appendChild(j)
}
}
this.dataLbl.style.display = a ? '' : 'none';
this.baseLbl.style.display = b ? '' : 'none';
return this.div
},
updateMap: function () {
for (var a = 0, b = this.baseLayers.length; a < b; a++) {
var c = this.baseLayers[a];
c.inputElem.checked && this.map.setBaseLayer(c.layer, !1)
}
a = 0;
for (b = this.dataLayers.length; a < b; a++) c = this.dataLayers[a],
c.layer.setVisibility(c.inputElem.checked)
},
maximizeControl: function (a) {
this.div.style.width = '';
this.div.style.height = '';
this.showControls(!1);
null != a && OpenLayers.Event.stop(a)
},
minimizeControl: function (a) {
this.div.style.width = '0px';
this.div.style.height = '0px';
this.showControls(!0);
null != a && OpenLayers.Event.stop(a)
},
showControls: function (a) {
this.maximizeDiv.style.display = a ? '' : 'none';
this.minimizeDiv.style.display = a ? 'none' : '';
this.layersDiv.style.display = a ? 'none' : ''
},
loadContents: function () {
this.layersDiv = document.createElement('div');
this.layersDiv.id = this.id + '_layersDiv';
OpenLayers.Element.addClass(this.layersDiv, 'layersDiv');
this.baseLbl = document.createElement('div');
this.baseLbl.innerHTML = OpenLayers.i18n('Base Layer');
OpenLayers.Element.addClass(this.baseLbl, 'baseLbl');
this.baseLayersDiv = document.createElement('div');
OpenLayers.Element.addClass(this.baseLayersDiv, 'baseLayersDiv');
this.dataLbl = document.createElement('div');
this.dataLbl.innerHTML = OpenLayers.i18n('Overlays');
OpenLayers.Element.addClass(this.dataLbl, 'dataLbl');
this.dataLayersDiv = document.createElement('div');
OpenLayers.Element.addClass(this.dataLayersDiv, 'dataLayersDiv');
this.ascending ? (this.layersDiv.appendChild(this.baseLbl), this.layersDiv.appendChild(this.baseLayersDiv), this.layersDiv.appendChild(this.dataLbl), this.layersDiv.appendChild(this.dataLayersDiv))  : (this.layersDiv.appendChild(this.dataLbl), this.layersDiv.appendChild(this.dataLayersDiv), this.layersDiv.appendChild(this.baseLbl), this.layersDiv.appendChild(this.baseLayersDiv));
this.div.appendChild(this.layersDiv);
this.roundedCorner && (OpenLayers.Rico.Corner.round(this.div, {
corners: 'tl bl',
bgColor: 'transparent',
color: this.roundedCornerColor,
blend: !1
}), OpenLayers.Rico.Corner.changeOpacity(this.layersDiv, 0.75));
var a = OpenLayers.Util.getImageLocation('layer-switcher-maximize.png');
this.maximizeDiv = OpenLayers.Util.createAlphaImageDiv('OpenLayers_Control_MaximizeDiv', null, null, a, 'absolute');
OpenLayers.Element.addClass(this.maximizeDiv, 'maximizeDiv olButton');
this.maximizeDiv.style.display = 'none';
this.div.appendChild(this.maximizeDiv);
a = OpenLayers.Util.getImageLocation('layer-switcher-minimize.png');
this.minimizeDiv = OpenLayers.Util.createAlphaImageDiv('OpenLayers_Control_MinimizeDiv', null, null, a, 'absolute');
OpenLayers.Element.addClass(this.minimizeDiv, 'minimizeDiv olButton');
this.minimizeDiv.style.display = 'none';
this.div.appendChild(this.minimizeDiv)
},
CLASS_NAME: 'OpenLayers.Control.LayerSwitcher'
});
OpenLayers.Format.Atom = OpenLayers.Class(OpenLayers.Format.XML, {
namespaces: {
atom: 'http://www.w3.org/2005/Atom',
georss: 'http://www.georss.org/georss'
},
feedTitle: 'untitled',
defaultEntryTitle: 'untitled',
gmlParser: null,
xy: !1,
read: function (a) {
'string' == typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
a
]));
return this.parseFeatures(a)
},
write: function (a) {
var b;
if (OpenLayers.Util.isArray(a)) {
b = this.createElementNSPlus('atom:feed');
b.appendChild(this.createElementNSPlus('atom:title', {
  value: this.feedTitle
}));
for (var c = 0, d = a.length; c < d; c++) b.appendChild(this.buildEntryNode(a[c]))
} else b = this.buildEntryNode(a);
return OpenLayers.Format.XML.prototype.write.apply(this, [
b
])
},
buildContentNode: function (a) {
var b = this.createElementNSPlus('atom:content', {
attributes: {
  type: a.type || null
}
});
if (a.src) b.setAttribute('src', a.src);
 else if ('text' == a.type || null == a.type) b.appendChild(this.createTextNode(a.value));
 else if ('html' == a.type) {
if ('string' != typeof a.value) throw 'HTML content must be in form of an escaped string';
b.appendChild(this.createTextNode(a.value))
} else 'xhtml' ==
a.type ? b.appendChild(a.value)  : 'xhtml' == a.type || a.type.match(/(\+|\/)xml$/) ? b.appendChild(a.value)  : b.appendChild(this.createTextNode(a.value));
return b
},
buildEntryNode: function (a) {
var b = a.attributes,
c = b.atom || {
},
d = this.createElementNSPlus('atom:entry');
if (c.authors) for (var e = OpenLayers.Util.isArray(c.authors) ? c.authors : [
c.authors
], f = 0, g = e.length; f < g; f++) d.appendChild(this.buildPersonConstructNode('author', e[f]));
if (c.categories) for (var e = OpenLayers.Util.isArray(c.categories) ? c.categories : [
c.categories
], h, f = 0, g = e.length; f < g; f++) h = e[f],
d.appendChild(this.createElementNSPlus('atom:category', {
attributes: {
  term: h.term,
  scheme: h.scheme || null,
  label: h.label || null
}
}));
c.content && d.appendChild(this.buildContentNode(c.content));
if (c.contributors) {
e = OpenLayers.Util.isArray(c.contributors) ? c.contributors : [
  c.contributors
];
f = 0;
for (g = e.length; f < g; f++) d.appendChild(this.buildPersonConstructNode('contributor', e[f]))
}
a.fid && d.appendChild(this.createElementNSPlus('atom:id', {
value: a.fid
}));
if (c.links) {
e = OpenLayers.Util.isArray(c.links) ?
c.links : [
  c.links
];
f = 0;
for (g = e.length; f < g; f++) h = e[f],
d.appendChild(this.createElementNSPlus('atom:link', {
  attributes: {
    href: h.href,
    rel: h.rel || null,
    type: h.type || null,
    hreflang: h.hreflang || null,
    title: h.title || null,
    length: h.length || null
  }
}))
}
c.published && d.appendChild(this.createElementNSPlus('atom:published', {
value: c.published
}));
c.rights && d.appendChild(this.createElementNSPlus('atom:rights', {
value: c.rights
}));
if (c.summary || b.description) d.appendChild(this.createElementNSPlus('atom:summary', {
value: c.summary || b.description
}));
d.appendChild(this.createElementNSPlus('atom:title', {
value: c.title || b.title || this.defaultEntryTitle
}));
c.updated && d.appendChild(this.createElementNSPlus('atom:updated', {
value: c.updated
}));
a.geometry && (b = this.createElementNSPlus('georss:where'), b.appendChild(this.buildGeometryNode(a.geometry)), d.appendChild(b));
return d
},
initGmlParser: function () {
this.gmlParser = new OpenLayers.Format.GML.v3({
xy: this.xy,
featureNS: 'http://example.com#feature',
internalProjection: this.internalProjection,
externalProjection: this.externalProjection
})
},
buildGeometryNode: function (a) {
this.gmlParser || this.initGmlParser();
return this.gmlParser.writeNode('feature:_geometry', a).firstChild
},
buildPersonConstructNode: function (a, b) {
var c = [
'uri',
'email'
],
d = this.createElementNSPlus('atom:' + a);
d.appendChild(this.createElementNSPlus('atom:name', {
value: b.name
}));
for (var e = 0, f = c.length; e < f; e++) b[c[e]] && d.appendChild(this.createElementNSPlus('atom:' + c[e], {
value: b[c[e]]
}));
return d
},
getFirstChildValue: function (a, b, c, d) {
return (a = this.getElementsByTagNameNS(a, b, c)) && 0 < a.length ? this.getChildValue(a[0], d)  : d
},
parseFeature: function (a) {
var b = {
},
c = null,
d = null,
e = null,
f = this.namespaces.atom;
this.parsePersonConstructs(a, 'author', b);
d = this.getElementsByTagNameNS(a, f, 'category');
0 < d.length && (b.categories = [
]);
for (var g = 0, h = d.length; g < h; g++) {
c = {
};
c.term = d[g].getAttribute('term');
if (e = d[g].getAttribute('scheme')) c.scheme = e;
if (e = d[g].getAttribute('label')) c.label = e;
b.categories.push(c)
}
d = this.getElementsByTagNameNS(a, f, 'content');
if (0 < d.length) {
c = {
};
if (e = d[0].getAttribute('type')) c.type = e;
(e = d[0].getAttribute('src')) ? c.src = e : (c.value = 'text' == c.type || 'html' == c.type || null == c.type ? this.getFirstChildValue(a, f, 'content', null)  : 'xhtml' == c.type || c.type.match(/(\+|\/)xml$/) ? this.getChildEl(d[0])  : this.getFirstChildValue(a, f, 'content', null), b.content = c)
}
this.parsePersonConstructs(a, 'contributor', b);
b.id = this.getFirstChildValue(a, f, 'id', null);
d = this.getElementsByTagNameNS(a, f, 'link');
0 < d.length && (b.links = Array(d.length));
for (var i = [
'rel',
'type',
'hreflang',
'title',
'length'
], g = 0, h = d.length; g < h; g++) {
c = {
};
c.href = d[g].getAttribute('href');
for (var j = 0, k = i.length; j < k; j++) (e = d[g].getAttribute(i[j])) && (c[i[j]] = e);
b.links[g] = c
}
if (c = this.getFirstChildValue(a, f, 'published', null)) b.published = c;
if (c = this.getFirstChildValue(a, f, 'rights', null)) b.rights = c;
if (c = this.getFirstChildValue(a, f, 'summary', null)) b.summary = c;
b.title = this.getFirstChildValue(a, f, 'title', null);
b.updated = this.getFirstChildValue(a, f, 'updated', null);
c = {
title: b.title,
description: b.summary,
atom: b
};
a = this.parseLocations(a) [0];
a = new OpenLayers.Feature.Vector(a, c);
a.fid = b.id;
return a
},
parseFeatures: function (a) {
var b = [
],
c = this.getElementsByTagNameNS(a, this.namespaces.atom, 'entry');
0 == c.length && (c = [
a
]);
for (var a = 0, d = c.length; a < d; a++) b.push(this.parseFeature(c[a]));
return b
},
parseLocations: function (a) {
var b = this.namespaces.georss,
c = {
components: [
]
},
d = this.getElementsByTagNameNS(a, b, 'where');
if (d && 0 < d.length) {
this.gmlParser || this.initGmlParser();
for (var e = 0, f = d.length; e < f; e++) this.gmlParser.readChildNodes(d[e], c)
}
c = c.components;
if ((d = this.getElementsByTagNameNS(a, b, 'point')) && 0 < d.length) {
e = 0;
for (f = d.length; e < f; e++) {
  var g = OpenLayers.String.trim(d[e].firstChild.nodeValue).split(/\s+/);
  2 != g.length && (g = OpenLayers.String.trim(d[e].firstChild.nodeValue).split(/\s*,\s*/));
  c.push(new OpenLayers.Geometry.Point(g[1], g[0]))
}
}
var h = this.getElementsByTagNameNS(a, b, 'line');
if (h && 0 < h.length) for (var i, e = 0, f = h.length; e < f; e++) {
d = OpenLayers.String.trim(h[e].firstChild.nodeValue).split(/\s+/);
i = [
];
for (var j = 0, k = d.length; j <
k; j += 2) g = new OpenLayers.Geometry.Point(d[j + 1], d[j]),
i.push(g);
c.push(new OpenLayers.Geometry.LineString(i))
}
if ((a = this.getElementsByTagNameNS(a, b, 'polygon')) && 0 < a.length) {
e = 0;
for (f = a.length; e < f; e++) {
  d = OpenLayers.String.trim(a[e].firstChild.nodeValue).split(/\s+/);
  i = [
  ];
  j = 0;
  for (k = d.length; j < k; j += 2) g = new OpenLayers.Geometry.Point(d[j + 1], d[j]),
  i.push(g);
  c.push(new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(c)]))
}
}
if (this.internalProjection && this.externalProjection) {
e = 0;
for (f = c.length; e <
f; e++) c[e] && c[e].transform(this.externalProjection, this.internalProjection)
}
return c
},
parsePersonConstructs: function (a, b, c) {
for (var d = [
], e = this.namespaces.atom, a = this.getElementsByTagNameNS(a, e, b), f = [
'uri',
'email'
], g = 0, h = a.length; g < h; g++) {
var i = {
};
i.name = this.getFirstChildValue(a[g], e, 'name', null);
for (var j = 0, k = f.length; j < k; j++) {
  var l = this.getFirstChildValue(a[g], e, f[j], null);
  l && (i[f[j]] = l)
}
d.push(i)
}
0 < d.length && (c[b + 's'] = d)
},
CLASS_NAME: 'OpenLayers.Format.Atom'
});
OpenLayers.Control.KeyboardDefaults = OpenLayers.Class(OpenLayers.Control, {
autoActivate: !0,
slideFactor: 75,
observeElement: null,
draw: function () {
this.handler = new OpenLayers.Handler.Keyboard(this, {
keydown: this.defaultKeyPress
}, {
observeElement: this.observeElement || document
})
},
defaultKeyPress: function (a) {
var b,
c = !0;
switch (a.keyCode) {
case OpenLayers.Event.KEY_LEFT:
  this.map.pan( - this.slideFactor, 0);
  break;
case OpenLayers.Event.KEY_RIGHT:
  this.map.pan(this.slideFactor, 0);
  break;
case OpenLayers.Event.KEY_UP:
  this.map.pan(0, - this.slideFactor);
  break;
case OpenLayers.Event.KEY_DOWN:
  this.map.pan(0, this.slideFactor);
  break;
case 33:
  b = this.map.getSize();
  this.map.pan(0, - 0.75 * b.h);
  break;
case 34:
  b = this.map.getSize();
  this.map.pan(0, 0.75 * b.h);
  break;
case 35:
  b = this.map.getSize();
  this.map.pan(0.75 * b.w, 0);
  break;
case 36:
  b = this.map.getSize();
  this.map.pan( - 0.75 * b.w, 0);
  break;
case 43:
case 61:
case 187:
case 107:
  this.map.zoomIn();
  break;
case 45:
case 109:
case 189:
case 95:
  this.map.zoomOut();
  break;
default:
  c = !1
}
c && OpenLayers.Event.stop(a)
},
CLASS_NAME: 'OpenLayers.Control.KeyboardDefaults'
});
OpenLayers.Format.WMTSCapabilities.v1_0_0 = OpenLayers.Class(OpenLayers.Format.OWSCommon.v1_1_0, {
version: '1.0.0',
namespaces: {
ows: 'http://www.opengis.net/ows/1.1',
wmts: 'http://www.opengis.net/wmts/1.0',
xlink: 'http://www.w3.org/1999/xlink'
},
yx: null,
defaultPrefix: 'wmts',
initialize: function (a) {
OpenLayers.Format.XML.prototype.initialize.apply(this, [
a
]);
this.options = a;
a = OpenLayers.Util.extend({
}, OpenLayers.Format.WMTSCapabilities.prototype.yx);
this.yx = OpenLayers.Util.extend(a, this.yx)
},
read: function (a) {
'string' ==
typeof a && (a = OpenLayers.Format.XML.prototype.read.apply(this, [
a
]));
a && 9 == a.nodeType && (a = a.documentElement);
var b = {
};
this.readNode(a, b);
b.version = this.version;
return b
},
readers: {
wmts: {
Capabilities: function (a, b) {
  this.readChildNodes(a, b)
},
Contents: function (a, b) {
  b.contents = {
  };
  b.contents.layers = [
  ];
  b.contents.tileMatrixSets = {
  };
  this.readChildNodes(a, b.contents)
},
Layer: function (a, b) {
  var c = {
    styles: [
    ],
    formats: [
    ],
    dimensions: [
    ],
    tileMatrixSetLinks: [
    ],
    layers: [
    ]
  };
  this.readChildNodes(a, c);
  b.layers.push(c)
},
Style: function (a, b) {
  var c = {
  };
  c.isDefault = 'true' === a.getAttribute('isDefault');
  this.readChildNodes(a, c);
  b.styles.push(c)
},
Format: function (a, b) {
  b.formats.push(this.getChildValue(a))
},
TileMatrixSetLink: function (a, b) {
  var c = {
  };
  this.readChildNodes(a, c);
  b.tileMatrixSetLinks.push(c)
},
TileMatrixSet: function (a, b) {
  if (b.layers) {
    var c = {
      matrixIds: [
      ]
    };
    this.readChildNodes(a, c);
    b.tileMatrixSets[c.identifier] = c
  } else b.tileMatrixSet = this.getChildValue(a)
},
TileMatrix: function (a, b) {
  var c = {
    supportedCRS: b.supportedCRS
  };
  this.readChildNodes(a, c);
  b.matrixIds.push(c)
},
ScaleDenominator: function (a, b) {
  b.scaleDenominator = parseFloat(this.getChildValue(a))
},
TopLeftCorner: function (a, b) {
  var c = this.getChildValue(a).split(' '),
  d;
  b.supportedCRS && (d = !!this.yx[b.supportedCRS.replace(/urn:ogc:def:crs:(\w+):.+:(\w+)$/, 'urn:ogc:def:crs:$1::$2')]);
  b.topLeftCorner = d ? new OpenLayers.LonLat(c[1], c[0])  : new OpenLayers.LonLat(c[0], c[1])
},
TileWidth: function (a, b) {
  b.tileWidth = parseInt(this.getChildValue(a))
},
TileHeight: function (a, b) {
  b.tileHeight = parseInt(this.getChildValue(a))
},
MatrixWidth: function (a, b) {
  b.matrixWidth = parseInt(this.getChildValue(a))
},
MatrixHeight: function (a, b) {
  b.matrixHeight = parseInt(this.getChildValue(a))
},
ResourceURL: function (a, b) {
  b.resourceUrl = b.resourceUrl || {
  };
  b.resourceUrl[a.getAttribute('resourceType')] = {
    format: a.getAttribute('format'),
    template: a.getAttribute('template')
  }
},
WSDL: function (a, b) {
  b.wsdl = {
  };
  b.wsdl.href = a.getAttribute('xlink:href')
},
ServiceMetadataURL: function (a, b) {
  b.serviceMetadataUrl = {
  };
  b.serviceMetadataUrl.href = a.getAttribute('xlink:href')
},
LegendURL: function (a, b) {
  b.legend = {
  };
  b.legend.href = a.getAttribute('xlink:href');
  b.legend.format = a.getAttribute('format')
},
Dimension: function (a, b) {
  var c = {
    values: [
    ]
  };
  this.readChildNodes(a, c);
  b.dimensions.push(c)
},
Default: function (a, b) {
  b['default'] = this.getChildValue(a)
},
Value: function (a, b) {
  b.values.push(this.getChildValue(a))
}
},
ows: OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers.ows
},
CLASS_NAME: 'OpenLayers.Format.WMTSCapabilities.v1_0_0'
});