/*

  OpenLayers.js -- OpenLayers Map Viewer Library

  Copyright (c) 2006-2013 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>)

*/

/**
 * Contains XMLHttpRequest.js <http://code.google.com/p/xmlhttprequest/>
 * Copyright 2007 Sergey Ilinsky (http://www.ilinsky.com)
 *
 * 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
 */

/**
 * OpenLayers.Util.pagePosition is based on Yahoo's getXY method, which is
 * Copyright (c) 2006, Yahoo! Inc.
 * All rights reserved.
 *
 * Redistribution and use of this software in source and binary forms, with or
 * without modification, are permitted provided that the following conditions
 * are met:
 *
 * * Redistributions of source code must retain the above copyright notice,
 *   this list of conditions and the following disclaimer.
 *
 * * Redistributions in binary form must reproduce the above copyright notice,
 *   this list of conditions and the following disclaimer in the documentation
 *   and/or other materials provided with the distribution.
 *
 * * Neither the name of Yahoo! Inc. nor the names of its contributors may be
 *   used to endorse or promote products derived from this software without
 *   specific prior written permission of Yahoo! Inc.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
 var OpenLayers = {
  VERSION_NUMBER: "Release 2.13.1",
  singleFile: !0,
  _getScriptLocation: (function () {
      for (var a = /(^|(.*?\/))(OpenLayers[^\/]*?\.js)(\?|$)/, b = document.getElementsByTagName("script"), c, d = "", e = 0, f = b.length; e < f; e++)
          if ((c = b[e].getAttribute("src")))
              if ((c = c.match(a))) {
                  d = c[1];
                  break;
              }
      return function () {
          return d;
      };
  })(),
  ImgPath: "",
};
OpenLayers.Class = function () {
  var a = arguments.length,
      b = arguments[0],
      c = arguments[a - 1],
      d =
          "function" == typeof c.initialize
              ? c.initialize
              : function () {
                    b.prototype.initialize.apply(this, arguments);
                };
  1 < a ? ((a = [d, b].concat(Array.prototype.slice.call(arguments).slice(1, a - 1), c)), OpenLayers.inherit.apply(null, a)) : (d.prototype = c);
  return d;
};
OpenLayers.inherit = function (a, b) {
  var c = function () {};
  c.prototype = b.prototype;
  a.prototype = new c();
  var d,
      e,
      c = 2;
  for (d = arguments.length; c < d; c++) (e = arguments[c]), "function" === typeof e && (e = e.prototype), OpenLayers.Util.extend(a.prototype, e);
};
OpenLayers.Util = OpenLayers.Util || {};
OpenLayers.Util.extend = function (a, b) {
  a = a || {};
  if (b) {
      for (var c in b) {
          var d = b[c];
          void 0 !== d && (a[c] = d);
      }
      ("function" == typeof window.Event && b instanceof window.Event) || !b.hasOwnProperty || !b.hasOwnProperty("toString") || (a.toString = b.toString);
  }
  return a;
};
OpenLayers.String = {
  startsWith: function (a, b) {
      return 0 == a.indexOf(b);
  },
  contains: function (a, b) {
      return -1 != a.indexOf(b);
  },
  trim: function (a) {
      return a.replace(/^\s\s*/, "").replace(/\s\s*$/, "");
  },
  camelize: function (a) {
      a = a.split("-");
      for (var b = a[0], c = 1, d = a.length; c < d; c++) var e = a[c], b = b + (e.charAt(0).toUpperCase() + e.substring(1));
      return b;
  },
  format: function (a, b, c) {
      b || (b = window);
      return a.replace(OpenLayers.String.tokenRegEx, function (a, e) {
          for (var f, g = e.split(/\.+/), h = 0; h < g.length; h++) {
              0 == h && (f = b);
              if (void 0 === f) break;
              f = f[g[h]];
          }
          "function" == typeof f && (f = c ? f.apply(null, c) : f());
          return "undefined" == typeof f ? "undefined" : f;
      });
  },
  tokenRegEx: /\$\{([\w.]+?)\}/g,
  numberRegEx: /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/,
  isNumeric: function (a) {
      return OpenLayers.String.numberRegEx.test(a);
  },
  numericIf: function (a, b) {
      var c = a;
      !0 === b && null != a && a.replace && (a = a.replace(/^\s*|\s*$/g, ""));
      return OpenLayers.String.isNumeric(a) ? parseFloat(a) : c;
  },
};
OpenLayers.Number = {
  decimalSeparator: ".",
  thousandsSeparator: ",",
  limitSigDigs: function (a, b) {
      var c = 0;
      0 < b && (c = parseFloat(a.toPrecision(b)));
      return c;
  },
  format: function (a, b, c, d) {
      b = "undefined" != typeof b ? b : 0;
      c = "undefined" != typeof c ? c : OpenLayers.Number.thousandsSeparator;
      d = "undefined" != typeof d ? d : OpenLayers.Number.decimalSeparator;
      null != b && (a = parseFloat(a.toFixed(b)));
      var e = a.toString().split(".");
      1 == e.length && null == b && (b = 0);
      a = e[0];
      if (c) for (var f = /(-?[0-9]+)([0-9]{3})/; f.test(a); ) a = a.replace(f, "$1" + c + "$2");
      0 == b ? (b = a) : ((c = 1 < e.length ? e[1] : "0"), null != b && (c += Array(b - c.length + 1).join("0")), (b = a + d + c));
      return b;
  },
  zeroPad: function (a, b, c) {
      for (a = a.toString(c || 10); a.length < b; ) a = "0" + a;
      return a;
  },
};
OpenLayers.Function = {
  bind: function (a, b) {
      var c = Array.prototype.slice.apply(arguments, [2]);
      return function () {
          var d = c.concat(Array.prototype.slice.apply(arguments, [0]));
          return a.apply(b, d);
      };
  },
  bindAsEventListener: function (a, b) {
      return function (c) {
          return a.call(b, c || window.event);
      };
  },
  False: function () {
      return !1;
  },
  True: function () {
      return !0;
  },
  Void: function () {},
};
OpenLayers.Array = {
  filter: function (a, b, c) {
      var d = [];
      if (Array.prototype.filter) d = a.filter(b, c);
      else {
          var e = a.length;
          if ("function" != typeof b) throw new TypeError();
          for (var f = 0; f < e; f++)
              if (f in a) {
                  var g = a[f];
                  b.call(c, g, f, a) && d.push(g);
              }
      }
      return d;
  },
};
OpenLayers.Bounds = OpenLayers.Class({
  left: null,
  bottom: null,
  right: null,
  top: null,
  centerLonLat: null,
  initialize: function (a, b, c, d) {
      OpenLayers.Util.isArray(a) && ((d = a[3]), (c = a[2]), (b = a[1]), (a = a[0]));
      null != a && (this.left = OpenLayers.Util.toFloat(a));
      null != b && (this.bottom = OpenLayers.Util.toFloat(b));
      null != c && (this.right = OpenLayers.Util.toFloat(c));
      null != d && (this.top = OpenLayers.Util.toFloat(d));
  },
  clone: function () {
      return new OpenLayers.Bounds(this.left, this.bottom, this.right, this.top);
  },
  equals: function (a) {
      var b = !1;
      null != a && (b = this.left == a.left && this.right == a.right && this.top == a.top && this.bottom == a.bottom);
      return b;
  },
  toString: function () {
      return [this.left, this.bottom, this.right, this.top].join();
  },
  toArray: function (a) {
      return !0 === a ? [this.bottom, this.left, this.top, this.right] : [this.left, this.bottom, this.right, this.top];
  },
  toBBOX: function (a, b) {
      null == a && (a = 6);
      var c = Math.pow(10, a),
          d = Math.round(this.left * c) / c,
          e = Math.round(this.bottom * c) / c,
          f = Math.round(this.right * c) / c,
          c = Math.round(this.top * c) / c;
      return !0 === b ? e + "," + d + "," + c + "," + f : d + "," + e + "," + f + "," + c;
  },
  toGeometry: function () {
      return new OpenLayers.Geometry.Polygon([
          new OpenLayers.Geometry.LinearRing([
              new OpenLayers.Geometry.Point(this.left, this.bottom),
              new OpenLayers.Geometry.Point(this.right, this.bottom),
              new OpenLayers.Geometry.Point(this.right, this.top),
              new OpenLayers.Geometry.Point(this.left, this.top),
          ]),
      ]);
  },
  getWidth: function () {
      return this.right - this.left;
  },
  getHeight: function () {
      return this.top - this.bottom;
  },
  getSize: function () {
      return new OpenLayers.Size(this.getWidth(), this.getHeight());
  },
  getCenterPixel: function () {
      return new OpenLayers.Pixel((this.left + this.right) / 2, (this.bottom + this.top) / 2);
  },
  getCenterLonLat: function () {
      this.centerLonLat || (this.centerLonLat = new OpenLayers.LonLat((this.left + this.right) / 2, (this.bottom + this.top) / 2));
      return this.centerLonLat;
  },
  scale: function (a, b) {
      null == b && (b = this.getCenterLonLat());
      var c, d;
      "OpenLayers.LonLat" == b.CLASS_NAME ? ((c = b.lon), (d = b.lat)) : ((c = b.x), (d = b.y));
      return new OpenLayers.Bounds((this.left - c) * a + c, (this.bottom - d) * a + d, (this.right - c) * a + c, (this.top - d) * a + d);
  },
  add: function (a, b) {
      if (null == a || null == b) throw new TypeError("Bounds.add cannot receive null values");
      return new OpenLayers.Bounds(this.left + a, this.bottom + b, this.right + a, this.top + b);
  },
  extend: function (a) {
      if (a)
          switch (a.CLASS_NAME) {
              case "OpenLayers.LonLat":
                  this.extendXY(a.lon, a.lat);
                  break;
              case "OpenLayers.Geometry.Point":
                  this.extendXY(a.x, a.y);
                  break;
              case "OpenLayers.Bounds":
                  this.centerLonLat = null;
                  if (null == this.left || a.left < this.left) this.left = a.left;
                  if (null == this.bottom || a.bottom < this.bottom) this.bottom = a.bottom;
                  if (null == this.right || a.right > this.right) this.right = a.right;
                  if (null == this.top || a.top > this.top) this.top = a.top;
          }
  },
  extendXY: function (a, b) {
      this.centerLonLat = null;
      if (null == this.left || a < this.left) this.left = a;
      if (null == this.bottom || b < this.bottom) this.bottom = b;
      if (null == this.right || a > this.right) this.right = a;
      if (null == this.top || b > this.top) this.top = b;
  },
  containsLonLat: function (a, b) {
      "boolean" === typeof b && (b = { inclusive: b });
      b = b || {};
      var c = this.contains(a.lon, a.lat, b.inclusive),
          d = b.worldBounds;
      d && !c && ((c = d.getWidth()), (d = Math.round((a.lon - (d.left + d.right) / 2) / c)), (c = this.containsLonLat({ lon: a.lon - d * c, lat: a.lat }, { inclusive: b.inclusive })));
      return c;
  },
  containsPixel: function (a, b) {
      return this.contains(a.x, a.y, b);
  },
  contains: function (a, b, c) {
      null == c && (c = !0);
      if (null == a || null == b) return !1;
      a = OpenLayers.Util.toFloat(a);
      b = OpenLayers.Util.toFloat(b);
      var d = !1;
      return (d = c ? a >= this.left && a <= this.right && b >= this.bottom && b <= this.top : a > this.left && a < this.right && b > this.bottom && b < this.top);
  },
  intersectsBounds: function (a, b) {
      "boolean" === typeof b && (b = { inclusive: b });
      b = b || {};
      if (b.worldBounds) {
          var c = this.wrapDateLine(b.worldBounds);
          a = a.wrapDateLine(b.worldBounds);
      } else c = this;
      null == b.inclusive && (b.inclusive = !0);
      var d = !1,
          e = c.left == a.right || c.right == a.left || c.top == a.bottom || c.bottom == a.top;
      if (b.inclusive || !e)
          var d = (a.top >= c.bottom && a.top <= c.top) || (c.top > a.bottom && c.top < a.top),
              e = (a.left >= c.left && a.left <= c.right) || (c.left >= a.left && c.left <= a.right),
              f = (a.right >= c.left && a.right <= c.right) || (c.right >= a.left && c.right <= a.right),
              d = ((a.bottom >= c.bottom && a.bottom <= c.top) || (c.bottom >= a.bottom && c.bottom <= a.top) || d) && (e || f);
      if (b.worldBounds && !d) {
          var g = b.worldBounds,
              e = g.getWidth(),
              f = !g.containsBounds(c),
              g = !g.containsBounds(a);
          f && !g ? ((a = a.add(-e, 0)), (d = c.intersectsBounds(a, { inclusive: b.inclusive }))) : g && !f && ((c = c.add(-e, 0)), (d = a.intersectsBounds(c, { inclusive: b.inclusive })));
      }
      return d;
  },
  containsBounds: function (a, b, c) {
      null == b && (b = !1);
      null == c && (c = !0);
      var d = this.contains(a.left, a.bottom, c),
          e = this.contains(a.right, a.bottom, c),
          f = this.contains(a.left, a.top, c);
      a = this.contains(a.right, a.top, c);
      return b ? d || e || f || a : d && e && f && a;
  },
  determineQuadrant: function (a) {
      var b = "",
          c = this.getCenterLonLat(),
          b = b + (a.lat < c.lat ? "b" : "t");
      return (b += a.lon < c.lon ? "l" : "r");
  },
  transform: function (a, b) {
      this.centerLonLat = null;
      var c = OpenLayers.Projection.transform({ x: this.left, y: this.bottom }, a, b),
          d = OpenLayers.Projection.transform({ x: this.right, y: this.bottom }, a, b),
          e = OpenLayers.Projection.transform({ x: this.left, y: this.top }, a, b),
          f = OpenLayers.Projection.transform({ x: this.right, y: this.top }, a, b);
      this.left = Math.min(c.x, e.x);
      this.bottom = Math.min(c.y, d.y);
      this.right = Math.max(d.x, f.x);
      this.top = Math.max(e.y, f.y);
      return this;
  },
  wrapDateLine: function (a, b) {
      b = b || {};
      var c = b.leftTolerance || 0,
          d = b.rightTolerance || 0,
          e = this.clone();
      if (a) {
          for (var f = a.getWidth(); e.left < a.left && e.right - d <= a.left; ) e = e.add(f, 0);
          for (; e.left + c >= a.right && e.right > a.right; ) e = e.add(-f, 0);
          c = e.left + c;
          c < a.right && c > a.left && e.right - d > a.right && (e = e.add(-f, 0));
      }
      return e;
  },
  CLASS_NAME: "OpenLayers.Bounds",
});
OpenLayers.Bounds.fromString = function (a, b) {
  var c = a.split(",");
  return OpenLayers.Bounds.fromArray(c, b);
};
OpenLayers.Bounds.fromArray = function (a, b) {
  return !0 === b ? new OpenLayers.Bounds(a[1], a[0], a[3], a[2]) : new OpenLayers.Bounds(a[0], a[1], a[2], a[3]);
};
OpenLayers.Bounds.fromSize = function (a) {
  return new OpenLayers.Bounds(0, a.h, a.w, 0);
};
OpenLayers.Bounds.oppositeQuadrant = function (a) {
  var b;
  b = "" + ("t" == a.charAt(0) ? "b" : "t");
  return (b += "l" == a.charAt(1) ? "r" : "l");
};
OpenLayers.Element = {
  visible: function (a) {
      return "none" != OpenLayers.Util.getElement(a).style.display;
  },
  toggle: function () {
      for (var a = 0, b = arguments.length; a < b; a++) {
          var c = OpenLayers.Util.getElement(arguments[a]),
              d = OpenLayers.Element.visible(c) ? "none" : "";
          c.style.display = d;
      }
  },
  remove: function (a) {
      a = OpenLayers.Util.getElement(a);
      a.parentNode.removeChild(a);
  },
  getHeight: function (a) {
      a = OpenLayers.Util.getElement(a);
      return a.offsetHeight;
  },
  hasClass: function (a, b) {
      var c = a.className;
      return !!c && RegExp("(^|\\s)" + b + "(\\s|$)").test(c);
  },
  addClass: function (a, b) {
      OpenLayers.Element.hasClass(a, b) || (a.className += (a.className ? " " : "") + b);
      return a;
  },
  removeClass: function (a, b) {
      var c = a.className;
      c && (a.className = OpenLayers.String.trim(c.replace(RegExp("(^|\\s+)" + b + "(\\s+|$)"), " ")));
      return a;
  },
  toggleClass: function (a, b) {
      OpenLayers.Element.hasClass(a, b) ? OpenLayers.Element.removeClass(a, b) : OpenLayers.Element.addClass(a, b);
      return a;
  },
  getStyle: function (a, b) {
      a = OpenLayers.Util.getElement(a);
      var c = null;
      if (a && a.style) {
          c = a.style[OpenLayers.String.camelize(b)];
          c ||
              (document.defaultView && document.defaultView.getComputedStyle
                  ? (c = (c = document.defaultView.getComputedStyle(a, null)) ? c.getPropertyValue(b) : null)
                  : a.currentStyle && (c = a.currentStyle[OpenLayers.String.camelize(b)]));
          var d = ["left", "top", "right", "bottom"];
          window.opera && -1 != OpenLayers.Util.indexOf(d, b) && "static" == OpenLayers.Element.getStyle(a, "position") && (c = "auto");
      }
      return "auto" == c ? null : c;
  },
};
OpenLayers.LonLat = OpenLayers.Class({
  lon: 0,
  lat: 0,
  initialize: function (a, b) {
      OpenLayers.Util.isArray(a) && ((b = a[1]), (a = a[0]));
      this.lon = OpenLayers.Util.toFloat(a);
      this.lat = OpenLayers.Util.toFloat(b);
  },
  toString: function () {
      return "lon=" + this.lon + ",lat=" + this.lat;
  },
  toShortString: function () {
      return this.lon + ", " + this.lat;
  },
  clone: function () {
      return new OpenLayers.LonLat(this.lon, this.lat);
  },
  add: function (a, b) {
      if (null == a || null == b) throw new TypeError("LonLat.add cannot receive null values");
      return new OpenLayers.LonLat(this.lon + OpenLayers.Util.toFloat(a), this.lat + OpenLayers.Util.toFloat(b));
  },
  equals: function (a) {
      var b = !1;
      null != a && (b = (this.lon == a.lon && this.lat == a.lat) || (isNaN(this.lon) && isNaN(this.lat) && isNaN(a.lon) && isNaN(a.lat)));
      return b;
  },
  transform: function (a, b) {
      var c = OpenLayers.Projection.transform({ x: this.lon, y: this.lat }, a, b);
      this.lon = c.x;
      this.lat = c.y;
      return this;
  },
  wrapDateLine: function (a) {
      var b = this.clone();
      if (a) {
          for (; b.lon < a.left; ) b.lon += a.getWidth();
          for (; b.lon > a.right; ) b.lon -= a.getWidth();
      }
      return b;
  },
  CLASS_NAME: "OpenLayers.LonLat",
});
OpenLayers.LonLat.fromString = function (a) {
  a = a.split(",");
  return new OpenLayers.LonLat(a[0], a[1]);
};
OpenLayers.LonLat.fromArray = function (a) {
  var b = OpenLayers.Util.isArray(a);
  return new OpenLayers.LonLat(b && a[0], b && a[1]);
};
OpenLayers.Pixel = OpenLayers.Class({
  x: 0,
  y: 0,
  initialize: function (a, b) {
      this.x = parseFloat(a);
      this.y = parseFloat(b);
  },
  toString: function () {
      return "x=" + this.x + ",y=" + this.y;
  },
  clone: function () {
      return new OpenLayers.Pixel(this.x, this.y);
  },
  equals: function (a) {
      var b = !1;
      null != a && (b = (this.x == a.x && this.y == a.y) || (isNaN(this.x) && isNaN(this.y) && isNaN(a.x) && isNaN(a.y)));
      return b;
  },
  distanceTo: function (a) {
      return Math.sqrt(Math.pow(this.x - a.x, 2) + Math.pow(this.y - a.y, 2));
  },
  add: function (a, b) {
      if (null == a || null == b) throw new TypeError("Pixel.add cannot receive null values");
      return new OpenLayers.Pixel(this.x + a, this.y + b);
  },
  offset: function (a) {
      var b = this.clone();
      a && (b = this.add(a.x, a.y));
      return b;
  },
  CLASS_NAME: "OpenLayers.Pixel",
});
OpenLayers.Size = OpenLayers.Class({
  w: 0,
  h: 0,
  initialize: function (a, b) {
      this.w = parseFloat(a);
      this.h = parseFloat(b);
  },
  toString: function () {
      return "w=" + this.w + ",h=" + this.h;
  },
  clone: function () {
      return new OpenLayers.Size(this.w, this.h);
  },
  equals: function (a) {
      var b = !1;
      null != a && (b = (this.w == a.w && this.h == a.h) || (isNaN(this.w) && isNaN(this.h) && isNaN(a.w) && isNaN(a.h)));
      return b;
  },
  CLASS_NAME: "OpenLayers.Size",
});
OpenLayers.Console = {
  log: function () {},
  debug: function () {},
  info: function () {},
  warn: function () {},
  error: function () {},
  userError: function (a) {
      alert(a);
  },
  assert: function () {},
  dir: function () {},
  dirxml: function () {},
  trace: function () {},
  group: function () {},
  groupEnd: function () {},
  time: function () {},
  timeEnd: function () {},
  profile: function () {},
  profileEnd: function () {},
  count: function () {},
  CLASS_NAME: "OpenLayers.Console",
};
(function () {
  for (var a = document.getElementsByTagName("script"), b = 0, c = a.length; b < c; ++b)
      if (-1 != a[b].src.indexOf("firebug.js") && console) {
          OpenLayers.Util.extend(OpenLayers.Console, console);
          break;
      }
})();
OpenLayers.Lang = {
  code: null,
  defaultCode: "en",
  getCode: function () {
      OpenLayers.Lang.code || OpenLayers.Lang.setCode();
      return OpenLayers.Lang.code;
  },
  setCode: function (a) {
      var b;
      a || (a = "msie" == OpenLayers.BROWSER_NAME ? navigator.userLanguage : navigator.language);
      a = a.split("-");
      a[0] = a[0].toLowerCase();
      "object" == typeof OpenLayers.Lang[a[0]] && (b = a[0]);
      if (a[1]) {
          var c = a[0] + "-" + a[1].toUpperCase();
          "object" == typeof OpenLayers.Lang[c] && (b = c);
      }
      b || (OpenLayers.Console.warn("Failed to find OpenLayers.Lang." + a.join("-") + " dictionary, falling back to default language"), (b = OpenLayers.Lang.defaultCode));
      OpenLayers.Lang.code = b;
  },
  translate: function (a, b) {
      var c = OpenLayers.Lang[OpenLayers.Lang.getCode()];
      (c = c && c[a]) || (c = a);
      b && (c = OpenLayers.String.format(c, b));
      return c;
  },
};
OpenLayers.i18n = OpenLayers.Lang.translate;
OpenLayers.Util = OpenLayers.Util || {};
OpenLayers.Util.getElement = function () {
  for (var a = [], b = 0, c = arguments.length; b < c; b++) {
      var d = arguments[b];
      "string" == typeof d && (d = document.getElementById(d));
      if (1 == arguments.length) return d;
      a.push(d);
  }
  return a;
};
OpenLayers.Util.isElement = function (a) {
  return !(!a || 1 !== a.nodeType);
};
OpenLayers.Util.isArray = function (a) {
  return "[object Array]" === Object.prototype.toString.call(a);
};
OpenLayers.Util.removeItem = function (a, b) {
  for (var c = a.length - 1; 0 <= c; c--) a[c] == b && a.splice(c, 1);
  return a;
};
OpenLayers.Util.indexOf = function (a, b) {
  if ("function" == typeof a.indexOf) return a.indexOf(b);
  for (var c = 0, d = a.length; c < d; c++) if (a[c] == b) return c;
  return -1;
};
OpenLayers.Util.dotless = /\./g;
OpenLayers.Util.modifyDOMElement = function (a, b, c, d, e, f, g, h) {
  b && (a.id = b.replace(OpenLayers.Util.dotless, "_"));
  c && ((a.style.left = c.x + "px"), (a.style.top = c.y + "px"));
  d && ((a.style.width = d.w + "px"), (a.style.height = d.h + "px"));
  e && (a.style.position = e);
  f && (a.style.border = f);
  g && (a.style.overflow = g);
  0 <= parseFloat(h) && 1 > parseFloat(h) ? ((a.style.filter = "alpha(opacity=" + 100 * h + ")"), (a.style.opacity = h)) : 1 == parseFloat(h) && ((a.style.filter = ""), (a.style.opacity = ""));
};
OpenLayers.Util.createDiv = function (a, b, c, d, e, f, g, h) {
  var k = document.createElement("div");
  d && (k.style.backgroundImage = "url(" + d + ")");
  a || (a = OpenLayers.Util.createUniqueID("OpenLayersDiv"));
  e || (e = "absolute");
  OpenLayers.Util.modifyDOMElement(k, a, b, c, e, f, g, h);
  return k;
};
OpenLayers.Util.createImage = function (a, b, c, d, e, f, g, h) {
  var k = document.createElement("img");
  a || (a = OpenLayers.Util.createUniqueID("OpenLayersDiv"));
  e || (e = "relative");
  OpenLayers.Util.modifyDOMElement(k, a, b, c, e, f, null, g);
  h &&
      ((k.style.display = "none"),
      (b = function () {
          k.style.display = "";
          OpenLayers.Event.stopObservingElement(k);
      }),
      OpenLayers.Event.observe(k, "load", b),
      OpenLayers.Event.observe(k, "error", b));
  k.style.alt = a;
  k.galleryImg = "no";
  d && (k.src = d);
  return k;
};
OpenLayers.IMAGE_RELOAD_ATTEMPTS = 0;
OpenLayers.Util.alphaHackNeeded = null;
OpenLayers.Util.alphaHack = function () {
  if (null == OpenLayers.Util.alphaHackNeeded) {
      var a = navigator.appVersion.split("MSIE"),
          a = parseFloat(a[1]),
          b = !1;
      try {
          b = !!document.body.filters;
      } catch (c) {}
      OpenLayers.Util.alphaHackNeeded = b && 5.5 <= a && 7 > a;
  }
  return OpenLayers.Util.alphaHackNeeded;
};
OpenLayers.Util.modifyAlphaImageDiv = function (a, b, c, d, e, f, g, h, k) {
  OpenLayers.Util.modifyDOMElement(a, b, c, d, f, null, null, k);
  b = a.childNodes[0];
  e && (b.src = e);
  OpenLayers.Util.modifyDOMElement(b, a.id + "_innerImage", null, d, "relative", g);
  OpenLayers.Util.alphaHack() &&
      ("none" != a.style.display && (a.style.display = "inline-block"),
      null == h && (h = "scale"),
      (a.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + b.src + "', sizingMethod='" + h + "')"),
      0 <= parseFloat(a.style.opacity) && 1 > parseFloat(a.style.opacity) && (a.style.filter += " alpha(opacity=" + 100 * a.style.opacity + ")"),
      (b.style.filter = "alpha(opacity=0)"));
};
OpenLayers.Util.createAlphaImageDiv = function (a, b, c, d, e, f, g, h, k) {
  var l = OpenLayers.Util.createDiv();
  k = OpenLayers.Util.createImage(null, null, null, null, null, null, null, k);
  k.className = "olAlphaImg";
  l.appendChild(k);
  OpenLayers.Util.modifyAlphaImageDiv(l, a, b, c, d, e, f, g, h);
  return l;
};
OpenLayers.Util.upperCaseObject = function (a) {
  var b = {},
      c;
  for (c in a) b[c.toUpperCase()] = a[c];
  return b;
};
OpenLayers.Util.applyDefaults = function (a, b) {
  a = a || {};
  var c = "function" == typeof window.Event && b instanceof window.Event,
      d;
  for (d in b) if (void 0 === a[d] || (!c && b.hasOwnProperty && b.hasOwnProperty(d) && !a.hasOwnProperty(d))) a[d] = b[d];
  !c && b && b.hasOwnProperty && b.hasOwnProperty("toString") && !a.hasOwnProperty("toString") && (a.toString = b.toString);
  return a;
};
OpenLayers.Util.getParameterString = function (a) {
  var b = [],
      c;
  for (c in a) {
      var d = a[c];
      if (null != d && "function" != typeof d) {
          if ("object" == typeof d && d.constructor == Array) {
              for (var e = [], f, g = 0, h = d.length; g < h; g++) (f = d[g]), e.push(encodeURIComponent(null === f || void 0 === f ? "" : f));
              d = e.join(",");
          } else d = encodeURIComponent(d);
          b.push(encodeURIComponent(c) + "=" + d);
      }
  }
  return b.join("&");
};
OpenLayers.Util.urlAppend = function (a, b) {
  var c = a;
  if (b)
      var d = (a + " ").split(/[?&]/),
          c = c + (" " === d.pop() ? b : d.length ? "&" + b : "?" + b);
  return c;
};
OpenLayers.Util.getImagesLocation = function () {
  return OpenLayers.ImgPath || OpenLayers._getScriptLocation() + "img/";
};
OpenLayers.Util.getImageLocation = function (a) {
  return OpenLayers.Util.getImagesLocation() + a;
};
OpenLayers.Util.Try = function () {
  for (var a = null, b = 0, c = arguments.length; b < c; b++) {
      var d = arguments[b];
      try {
          a = d();
          break;
      } catch (e) {}
  }
  return a;
};
OpenLayers.Util.getXmlNodeValue = function (a) {
  var b = null;
  OpenLayers.Util.Try(
      function () {
          b = a.text;
          b || (b = a.textContent);
          b || (b = a.firstChild.nodeValue);
      },
      function () {
          b = a.textContent;
      }
  );
  return b;
};
OpenLayers.Util.mouseLeft = function (a, b) {
  for (var c = a.relatedTarget ? a.relatedTarget : a.toElement; c != b && null != c; ) c = c.parentNode;
  return c != b;
};
OpenLayers.Util.DEFAULT_PRECISION = 14;
OpenLayers.Util.toFloat = function (a, b) {
  null == b && (b = OpenLayers.Util.DEFAULT_PRECISION);
  "number" !== typeof a && (a = parseFloat(a));
  return 0 === b ? a : parseFloat(a.toPrecision(b));
};
OpenLayers.Util.rad = function (a) {
  return (a * Math.PI) / 180;
};
OpenLayers.Util.deg = function (a) {
  return (180 * a) / Math.PI;
};
OpenLayers.Util.VincentyConstants = { a: 6378137, b: 6356752.3142, f: 1 / 298.257223563 };
OpenLayers.Util.distVincenty = function (a, b) {
  for (
      var c = OpenLayers.Util.VincentyConstants,
          d = c.a,
          e = c.b,
          c = c.f,
          f = OpenLayers.Util.rad(b.lon - a.lon),
          g = Math.atan((1 - c) * Math.tan(OpenLayers.Util.rad(a.lat))),
          h = Math.atan((1 - c) * Math.tan(OpenLayers.Util.rad(b.lat))),
          k = Math.sin(g),
          g = Math.cos(g),
          l = Math.sin(h),
          h = Math.cos(h),
          m = f,
          n = 2 * Math.PI,
          p = 20;
      1e-12 < Math.abs(m - n) && 0 < --p;

  ) {
      var q = Math.sin(m),
          r = Math.cos(m),
          s = Math.sqrt(h * q * h * q + (g * l - k * h * r) * (g * l - k * h * r));
      if (0 == s) return 0;
      var r = k * l + g * h * r,
          t = Math.atan2(s, r),
          u = Math.asin((g * h * q) / s),
          v = Math.cos(u) * Math.cos(u),
          q = r - (2 * k * l) / v,
          w = (c / 16) * v * (4 + c * (4 - 3 * v)),
          n = m,
          m = f + (1 - w) * c * Math.sin(u) * (t + w * s * (q + w * r * (-1 + 2 * q * q)));
  }
  if (0 == p) return NaN;
  d = (v * (d * d - e * e)) / (e * e);
  c = (d / 1024) * (256 + d * (-128 + d * (74 - 47 * d)));
  return (e * (1 + (d / 16384) * (4096 + d * (-768 + d * (320 - 175 * d)))) * (t - c * s * (q + (c / 4) * (r * (-1 + 2 * q * q) - (c / 6) * q * (-3 + 4 * s * s) * (-3 + 4 * q * q))))).toFixed(3) / 1e3;
};
OpenLayers.Util.destinationVincenty = function (a, b, c) {
  var d = OpenLayers.Util,
      e = d.VincentyConstants,
      f = e.a,
      g = e.b,
      h = e.f,
      e = a.lon;
  a = a.lat;
  var k = d.rad(b);
  b = Math.sin(k);
  k = Math.cos(k);
  a = (1 - h) * Math.tan(d.rad(a));
  var l = 1 / Math.sqrt(1 + a * a),
      m = a * l,
      n = Math.atan2(a, k);
  a = l * b;
  for (
      var p = 1 - a * a, f = (p * (f * f - g * g)) / (g * g), q = 1 + (f / 16384) * (4096 + f * (-768 + f * (320 - 175 * f))), r = (f / 1024) * (256 + f * (-128 + f * (74 - 47 * f))), f = c / (g * q), s = 2 * Math.PI;
      1e-12 < Math.abs(f - s);

  )
      var t = Math.cos(2 * n + f), u = Math.sin(f), v = Math.cos(f), w = r * u * (t + (r / 4) * (v * (-1 + 2 * t * t) - (r / 6) * t * (-3 + 4 * u * u) * (-3 + 4 * t * t))), s = f, f = c / (g * q) + w;
  c = m * u - l * v * k;
  g = Math.atan2(m * v + l * u * k, (1 - h) * Math.sqrt(a * a + c * c));
  b = Math.atan2(u * b, l * v - m * u * k);
  k = (h / 16) * p * (4 + h * (4 - 3 * p));
  t = b - (1 - k) * h * a * (f + k * u * (t + k * v * (-1 + 2 * t * t)));
  Math.atan2(a, -c);
  return new OpenLayers.LonLat(e + d.deg(t), d.deg(g));
};
OpenLayers.Util.getParameters = function (a, b) {
  b = b || {};
  a = null === a || void 0 === a ? window.location.href : a;
  var c = "";
  if (OpenLayers.String.contains(a, "?"))
      var d = a.indexOf("?") + 1,
          c = OpenLayers.String.contains(a, "#") ? a.indexOf("#") : a.length,
          c = a.substring(d, c);
  for (var d = {}, c = c.split(/[&;]/), e = 0, f = c.length; e < f; ++e) {
      var g = c[e].split("=");
      if (g[0]) {
          var h = g[0];
          try {
              h = decodeURIComponent(h);
          } catch (k) {
              h = unescape(h);
          }
          g = (g[1] || "").replace(/\+/g, " ");
          try {
              g = decodeURIComponent(g);
          } catch (l) {
              g = unescape(g);
          }
          !1 !== b.splitArgs && (g = g.split(","));
          1 == g.length && (g = g[0]);
          d[h] = g;
      }
  }
  return d;
};
OpenLayers.Util.lastSeqID = 0;
OpenLayers.Util.createUniqueID = function (a) {
  a = null == a ? "id_" : a.replace(OpenLayers.Util.dotless, "_");
  OpenLayers.Util.lastSeqID += 1;
  return a + OpenLayers.Util.lastSeqID;
};
OpenLayers.INCHES_PER_UNIT = { inches: 1, ft: 12, mi: 63360, m: 39.37, km: 39370, dd: 4374754, yd: 36 };
OpenLayers.INCHES_PER_UNIT["in"] = OpenLayers.INCHES_PER_UNIT.inches;
OpenLayers.INCHES_PER_UNIT.degrees = OpenLayers.INCHES_PER_UNIT.dd;
OpenLayers.INCHES_PER_UNIT.nmi = 1852 * OpenLayers.INCHES_PER_UNIT.m;
OpenLayers.METERS_PER_INCH = 0.0254000508001016;
OpenLayers.Util.extend(OpenLayers.INCHES_PER_UNIT, {
  Inch: OpenLayers.INCHES_PER_UNIT.inches,
  Meter: 1 / OpenLayers.METERS_PER_INCH,
  Foot: 0.3048006096012192 / OpenLayers.METERS_PER_INCH,
  IFoot: 0.3048 / OpenLayers.METERS_PER_INCH,
  ClarkeFoot: 0.3047972651151 / OpenLayers.METERS_PER_INCH,
  SearsFoot: 0.30479947153867626 / OpenLayers.METERS_PER_INCH,
  GoldCoastFoot: 0.3047997101815088 / OpenLayers.METERS_PER_INCH,
  IInch: 0.0254 / OpenLayers.METERS_PER_INCH,
  MicroInch: 2.54e-5 / OpenLayers.METERS_PER_INCH,
  Mil: 2.54e-8 / OpenLayers.METERS_PER_INCH,
  Centimeter: 0.01 / OpenLayers.METERS_PER_INCH,
  Kilometer: 1e3 / OpenLayers.METERS_PER_INCH,
  Yard: 0.9144018288036576 / OpenLayers.METERS_PER_INCH,
  SearsYard: 0.914398414616029 / OpenLayers.METERS_PER_INCH,
  IndianYard: 0.9143985307444408 / OpenLayers.METERS_PER_INCH,
  IndianYd37: 0.91439523 / OpenLayers.METERS_PER_INCH,
  IndianYd62: 0.9143988 / OpenLayers.METERS_PER_INCH,
  IndianYd75: 0.9143985 / OpenLayers.METERS_PER_INCH,
  IndianFoot: 0.30479951 / OpenLayers.METERS_PER_INCH,
  IndianFt37: 0.30479841 / OpenLayers.METERS_PER_INCH,
  IndianFt62: 0.3047996 / OpenLayers.METERS_PER_INCH,
  IndianFt75: 0.3047995 / OpenLayers.METERS_PER_INCH,
  Mile: 1609.3472186944373 / OpenLayers.METERS_PER_INCH,
  IYard: 0.9144 / OpenLayers.METERS_PER_INCH,
  IMile: 1609.344 / OpenLayers.METERS_PER_INCH,
  NautM: 1852 / OpenLayers.METERS_PER_INCH,
  "Lat-66": 110943.31648893273 / OpenLayers.METERS_PER_INCH,
  "Lat-83": 110946.25736872235 / OpenLayers.METERS_PER_INCH,
  Decimeter: 0.1 / OpenLayers.METERS_PER_INCH,
  Millimeter: 0.001 / OpenLayers.METERS_PER_INCH,
  Dekameter: 10 / OpenLayers.METERS_PER_INCH,
  Decameter: 10 / OpenLayers.METERS_PER_INCH,
  Hectometer: 100 / OpenLayers.METERS_PER_INCH,
  GermanMeter: 1.0000135965 / OpenLayers.METERS_PER_INCH,
  CaGrid: 0.999738 / OpenLayers.METERS_PER_INCH,
  ClarkeChain: 20.1166194976 / OpenLayers.METERS_PER_INCH,
  GunterChain: 20.11684023368047 / OpenLayers.METERS_PER_INCH,
  BenoitChain: 20.116782494375872 / OpenLayers.METERS_PER_INCH,
  SearsChain: 20.11676512155 / OpenLayers.METERS_PER_INCH,
  ClarkeLink: 0.201166194976 / OpenLayers.METERS_PER_INCH,
  GunterLink: 0.2011684023368047 / OpenLayers.METERS_PER_INCH,
  BenoitLink: 0.20116782494375873 / OpenLayers.METERS_PER_INCH,
  SearsLink: 0.2011676512155 / OpenLayers.METERS_PER_INCH,
  Rod: 5.02921005842012 / OpenLayers.METERS_PER_INCH,
  IntnlChain: 20.1168 / OpenLayers.METERS_PER_INCH,
  IntnlLink: 0.201168 / OpenLayers.METERS_PER_INCH,
  Perch: 5.02921005842012 / OpenLayers.METERS_PER_INCH,
  Pole: 5.02921005842012 / OpenLayers.METERS_PER_INCH,
  Furlong: 201.1684023368046 / OpenLayers.METERS_PER_INCH,
  Rood: 3.778266898 / OpenLayers.METERS_PER_INCH,
  CapeFoot: 0.3047972615 / OpenLayers.METERS_PER_INCH,
  Brealey: 375 / OpenLayers.METERS_PER_INCH,
  ModAmFt: 0.304812252984506 / OpenLayers.METERS_PER_INCH,
  Fathom: 1.8288 / OpenLayers.METERS_PER_INCH,
  "NautM-UK": 1853.184 / OpenLayers.METERS_PER_INCH,
  "50kilometers": 5e4 / OpenLayers.METERS_PER_INCH,
  "150kilometers": 15e4 / OpenLayers.METERS_PER_INCH,
});
OpenLayers.Util.extend(OpenLayers.INCHES_PER_UNIT, {
  mm: OpenLayers.INCHES_PER_UNIT.Meter / 1e3,
  cm: OpenLayers.INCHES_PER_UNIT.Meter / 100,
  dm: 100 * OpenLayers.INCHES_PER_UNIT.Meter,
  km: 1e3 * OpenLayers.INCHES_PER_UNIT.Meter,
  kmi: OpenLayers.INCHES_PER_UNIT.nmi,
  fath: OpenLayers.INCHES_PER_UNIT.Fathom,
  ch: OpenLayers.INCHES_PER_UNIT.IntnlChain,
  link: OpenLayers.INCHES_PER_UNIT.IntnlLink,
  "us-in": OpenLayers.INCHES_PER_UNIT.inches,
  "us-ft": OpenLayers.INCHES_PER_UNIT.Foot,
  "us-yd": OpenLayers.INCHES_PER_UNIT.Yard,
  "us-ch": OpenLayers.INCHES_PER_UNIT.GunterChain,
  "us-mi": OpenLayers.INCHES_PER_UNIT.Mile,
  "ind-yd": OpenLayers.INCHES_PER_UNIT.IndianYd37,
  "ind-ft": OpenLayers.INCHES_PER_UNIT.IndianFt37,
  "ind-ch": 20.11669506 / OpenLayers.METERS_PER_INCH,
});
OpenLayers.DOTS_PER_INCH = 72;
OpenLayers.Util.normalizeScale = function (a) {
  return 1 < a ? 1 / a : a;
};
OpenLayers.Util.getResolutionFromScale = function (a, b) {
  var c;
  a && (null == b && (b = "degrees"), (c = 1 / (OpenLayers.Util.normalizeScale(a) * OpenLayers.INCHES_PER_UNIT[b] * OpenLayers.DOTS_PER_INCH)));
  return c;
};
OpenLayers.Util.getScaleFromResolution = function (a, b) {
  null == b && (b = "degrees");
  return a * OpenLayers.INCHES_PER_UNIT[b] * OpenLayers.DOTS_PER_INCH;
};
OpenLayers.Util.pagePosition = function (a) {
  var b = [0, 0],
      c = OpenLayers.Util.getViewportElement();
  if (!a || a == window || a == c) return b;
  var d = OpenLayers.IS_GECKO && document.getBoxObjectFor && "absolute" == OpenLayers.Element.getStyle(a, "position") && ("" == a.style.top || "" == a.style.left),
      e = null;
  if (a.getBoundingClientRect) (a = a.getBoundingClientRect()), (e = window.pageYOffset || c.scrollTop), (b[0] = a.left + (window.pageXOffset || c.scrollLeft)), (b[1] = a.top + e);
  else if (document.getBoxObjectFor && !d) (a = document.getBoxObjectFor(a)), (c = document.getBoxObjectFor(c)), (b[0] = a.screenX - c.screenX), (b[1] = a.screenY - c.screenY);
  else {
      b[0] = a.offsetLeft;
      b[1] = a.offsetTop;
      e = a.offsetParent;
      if (e != a) for (; e; ) (b[0] += e.offsetLeft), (b[1] += e.offsetTop), (e = e.offsetParent);
      c = OpenLayers.BROWSER_NAME;
      if ("opera" == c || ("safari" == c && "absolute" == OpenLayers.Element.getStyle(a, "position"))) b[1] -= document.body.offsetTop;
      for (e = a.offsetParent; e && e != document.body; ) {
          b[0] -= e.scrollLeft;
          if ("opera" != c || "TR" != e.tagName) b[1] -= e.scrollTop;
          e = e.offsetParent;
      }
  }
  return b;
};
OpenLayers.Util.getViewportElement = function () {
  var a = arguments.callee.viewportElement;
  void 0 == a && ((a = "msie" == OpenLayers.BROWSER_NAME && "CSS1Compat" != document.compatMode ? document.body : document.documentElement), (arguments.callee.viewportElement = a));
  return a;
};
OpenLayers.Util.isEquivalentUrl = function (a, b, c) {
  c = c || {};
  OpenLayers.Util.applyDefaults(c, { ignoreCase: !0, ignorePort80: !0, ignoreHash: !0, splitArgs: !1 });
  a = OpenLayers.Util.createUrlObject(a, c);
  b = OpenLayers.Util.createUrlObject(b, c);
  for (var d in a) if ("args" !== d && a[d] != b[d]) return !1;
  for (d in a.args) {
      if (a.args[d] != b.args[d]) return !1;
      delete b.args[d];
  }
  for (d in b.args) return !1;
  return !0;
};
OpenLayers.Util.createUrlObject = function (a, b) {
  b = b || {};
  if (!/^\w+:\/\//.test(a)) {
      var c = window.location,
          d = c.port ? ":" + c.port : "",
          d = c.protocol + "//" + c.host.split(":").shift() + d;
      0 === a.indexOf("/") ? (a = d + a) : ((c = c.pathname.split("/")), c.pop(), (a = d + c.join("/") + "/" + a));
  }
  b.ignoreCase && (a = a.toLowerCase());
  c = document.createElement("a");
  c.href = a;
  d = {};
  d.host = c.host.split(":").shift();
  d.protocol = c.protocol;
  d.port = b.ignorePort80 ? ("80" == c.port || "0" == c.port ? "" : c.port) : "" == c.port || "0" == c.port ? "80" : c.port;
  d.hash = b.ignoreHash || "#" === c.hash ? "" : c.hash;
  var e = c.search;
  e || ((e = a.indexOf("?")), (e = -1 != e ? a.substr(e) : ""));
  d.args = OpenLayers.Util.getParameters(e, { splitArgs: b.splitArgs });
  d.pathname = "/" == c.pathname.charAt(0) ? c.pathname : "/" + c.pathname;
  return d;
};
OpenLayers.Util.removeTail = function (a) {
  var b = null,
      b = a.indexOf("?"),
      c = a.indexOf("#");
  return (b = -1 == b ? (-1 != c ? a.substr(0, c) : a) : -1 != c ? a.substr(0, Math.min(b, c)) : a.substr(0, b));
};
OpenLayers.IS_GECKO = (function () {
  var a = navigator.userAgent.toLowerCase();
  return -1 == a.indexOf("webkit") && -1 != a.indexOf("gecko");
})();
OpenLayers.CANVAS_SUPPORTED = (function () {
  var a = document.createElement("canvas");
  return !(!a.getContext || !a.getContext("2d"));
})();
OpenLayers.BROWSER_NAME = (function () {
  var a = "",
      b = navigator.userAgent.toLowerCase();
  -1 != b.indexOf("opera") ? (a = "opera") : -1 != b.indexOf("msie") ? (a = "msie") : -1 != b.indexOf("safari") ? (a = "safari") : -1 != b.indexOf("mozilla") && (a = -1 != b.indexOf("firefox") ? "firefox" : "mozilla");
  return a;
})();
OpenLayers.Util.getBrowserName = function () {
  return OpenLayers.BROWSER_NAME;
};
OpenLayers.Util.getRenderedDimensions = function (a, b, c) {
  var d,
      e,
      f = document.createElement("div");
  f.style.visibility = "hidden";
  for (var g = c && c.containerElement ? c.containerElement : document.body, h = !1, k = null, l = g; l && "body" != l.tagName.toLowerCase(); ) {
      var m = OpenLayers.Element.getStyle(l, "position");
      if ("absolute" == m) {
          h = !0;
          break;
      } else if (m && "static" != m) break;
      l = l.parentNode;
  }
  !h ||
      (0 !== g.clientHeight && 0 !== g.clientWidth) ||
      ((k = document.createElement("div")),
      (k.style.visibility = "hidden"),
      (k.style.position = "absolute"),
      (k.style.overflow = "visible"),
      (k.style.width = document.body.clientWidth + "px"),
      (k.style.height = document.body.clientHeight + "px"),
      k.appendChild(f));
  f.style.position = "absolute";
  b && (b.w ? ((d = b.w), (f.style.width = d + "px")) : b.h && ((e = b.h), (f.style.height = e + "px")));
  c && c.displayClass && (f.className = c.displayClass);
  b = document.createElement("div");
  b.innerHTML = a;
  b.style.overflow = "visible";
  if (b.childNodes) for (a = 0, c = b.childNodes.length; a < c; a++) b.childNodes[a].style && (b.childNodes[a].style.overflow = "visible");
  f.appendChild(b);
  k ? g.appendChild(k) : g.appendChild(f);
  d || ((d = parseInt(b.scrollWidth)), (f.style.width = d + "px"));
  e || (e = parseInt(b.scrollHeight));
  f.removeChild(b);
  k ? (k.removeChild(f), g.removeChild(k)) : g.removeChild(f);
  return new OpenLayers.Size(d, e);
};
OpenLayers.Util.getScrollbarWidth = function () {
  var a = OpenLayers.Util._scrollbarWidth;
  if (null == a) {
      var b = null,
          c = null,
          b = (a = 0),
          b = document.createElement("div");
      b.style.position = "absolute";
      b.style.top = "-1000px";
      b.style.left = "-1000px";
      b.style.width = "100px";
      b.style.height = "50px";
      b.style.overflow = "hidden";
      c = document.createElement("div");
      c.style.width = "100%";
      c.style.height = "200px";
      b.appendChild(c);
      document.body.appendChild(b);
      a = c.offsetWidth;
      b.style.overflow = "scroll";
      b = c.offsetWidth;
      document.body.removeChild(document.body.lastChild);
      OpenLayers.Util._scrollbarWidth = a - b;
      a = OpenLayers.Util._scrollbarWidth;
  }
  return a;
};
OpenLayers.Util.getFormattedLonLat = function (a, b, c) {
  c || (c = "dms");
  a = ((a + 540) % 360) - 180;
  var d = Math.abs(a),
      e = Math.floor(d),
      f = (d = (d - e) / (1 / 60)),
      d = Math.floor(d),
      f = Math.round(10 * ((f - d) / (1 / 60))),
      f = f / 10;
  60 <= f && ((f -= 60), (d += 1), 60 <= d && ((d -= 60), (e += 1)));
  10 > e && (e = "0" + e);
  e += "\u00b0";
  0 <= c.indexOf("dm") && (10 > d && (d = "0" + d), (e += d + "'"), 0 <= c.indexOf("dms") && (10 > f && (f = "0" + f), (e += f + '"')));
  return (e = "lon" == b ? e + (0 > a ? OpenLayers.i18n("W") : OpenLayers.i18n("E")) : e + (0 > a ? OpenLayers.i18n("S") : OpenLayers.i18n("N")));
};
OpenLayers.Format = OpenLayers.Class({
  options: null,
  externalProjection: null,
  internalProjection: null,
  data: null,
  keepData: !1,
  initialize: function (a) {
      OpenLayers.Util.extend(this, a);
      this.options = a;
  },
  destroy: function () {},
  read: function (a) {
      throw Error("Read not implemented.");
  },
  write: function (a) {
      throw Error("Write not implemented.");
  },
  CLASS_NAME: "OpenLayers.Format",
});
OpenLayers.Format.CSWGetRecords = function (a) {
  a = OpenLayers.Util.applyDefaults(a, OpenLayers.Format.CSWGetRecords.DEFAULTS);
  var 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.Control = OpenLayers.Class({
  id: null,
  map: null,
  div: null,
  type: null,
  allowSelection: !1,
  displayClass: "",
  title: "",
  autoActivate: !1,
  active: null,
  handlerOptions: null,
  handler: null,
  eventListeners: null,
  events: null,
  initialize: function (a) {
      this.displayClass = this.CLASS_NAME.replace("OpenLayers.", "ol").replace(/\./g, "");
      OpenLayers.Util.extend(this, a);
      this.events = new OpenLayers.Events(this);
      if (this.eventListeners instanceof Object) this.events.on(this.eventListeners);
      null == this.id && (this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_"));
  },
  destroy: function () {
      this.events && (this.eventListeners && this.events.un(this.eventListeners), this.events.destroy(), (this.events = null));
      this.eventListeners = null;
      this.handler && (this.handler.destroy(), (this.handler = null));
      if (this.handlers) {
          for (var a in this.handlers) this.handlers.hasOwnProperty(a) && "function" == typeof this.handlers[a].destroy && this.handlers[a].destroy();
          this.handlers = null;
      }
      this.map && (this.map.removeControl(this), (this.map = null));
      this.div = null;
  },
  setMap: function (a) {
      this.map = a;
      this.handler && this.handler.setMap(a);
  },
  draw: function (a) {
      null == this.div &&
          ((this.div = OpenLayers.Util.createDiv(this.id)),
          (this.div.className = this.displayClass),
          this.allowSelection || ((this.div.className += " olControlNoSelect"), this.div.setAttribute("unselectable", "on", 0), (this.div.onselectstart = OpenLayers.Function.False)),
          "" != this.title && (this.div.title = this.title));
      null != a && (this.position = a.clone());
      this.moveTo(this.position);
      return this.div;
  },
  moveTo: function (a) {
      null != a && null != this.div && ((this.div.style.left = a.x + "px"), (this.div.style.top = a.y + "px"));
  },
  activate: function () {
      if (this.active) return !1;
      this.handler && this.handler.activate();
      this.active = !0;
      this.map && OpenLayers.Element.addClass(this.map.viewPortDiv, this.displayClass.replace(/ /g, "") + "Active");
      this.events.triggerEvent("activate");
      return !0;
  },
  deactivate: function () {
      return this.active
          ? (this.handler && this.handler.deactivate(), (this.active = !1), this.map && OpenLayers.Element.removeClass(this.map.viewPortDiv, this.displayClass.replace(/ /g, "") + "Active"), this.events.triggerEvent("deactivate"), !0)
          : !1;
  },
  CLASS_NAME: "OpenLayers.Control",
});
OpenLayers.Control.TYPE_BUTTON = 1;
OpenLayers.Control.TYPE_TOGGLE = 2;
OpenLayers.Control.TYPE_TOOL = 3;
OpenLayers.Event = {
  observers: !1,
  KEY_SPACE: 32,
  KEY_BACKSPACE: 8,
  KEY_TAB: 9,
  KEY_RETURN: 13,
  KEY_ESC: 27,
  KEY_LEFT: 37,
  KEY_UP: 38,
  KEY_RIGHT: 39,
  KEY_DOWN: 40,
  KEY_DELETE: 46,
  element: function (a) {
      return a.target || a.srcElement;
  },
  isSingleTouch: function (a) {
      return a.touches && 1 == a.touches.length;
  },
  isMultiTouch: function (a) {
      return a.touches && 1 < a.touches.length;
  },
  isLeftClick: function (a) {
      return (a.which && 1 == a.which) || (a.button && 1 == a.button);
  },
  isRightClick: function (a) {
      return (a.which && 3 == a.which) || (a.button && 2 == a.button);
  },
  stop: function (a, b) {
      b || OpenLayers.Event.preventDefault(a);
      a.stopPropagation ? a.stopPropagation() : (a.cancelBubble = !0);
  },
  preventDefault: function (a) {
      a.preventDefault ? a.preventDefault() : (a.returnValue = !1);
  },
  findElement: function (a, b) {
      for (var c = OpenLayers.Event.element(a); c.parentNode && (!c.tagName || c.tagName.toUpperCase() != b.toUpperCase()); ) c = c.parentNode;
      return c;
  },
  observe: function (a, b, c, d) {
      a = OpenLayers.Util.getElement(a);
      d = d || !1;
      "keypress" == b && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || a.attachEvent) && (b = "keydown");
      this.observers || (this.observers = {});
      if (!a._eventCacheID) {
          var e = "eventCacheID_";
          a.id && (e = a.id + "_" + e);
          a._eventCacheID = OpenLayers.Util.createUniqueID(e);
      }
      e = a._eventCacheID;
      this.observers[e] || (this.observers[e] = []);
      this.observers[e].push({ element: a, name: b, observer: c, useCapture: d });
      a.addEventListener ? a.addEventListener(b, c, d) : a.attachEvent && a.attachEvent("on" + b, c);
  },
  stopObservingElement: function (a) {
      a = OpenLayers.Util.getElement(a)._eventCacheID;
      this._removeElementObservers(OpenLayers.Event.observers[a]);
  },
  _removeElementObservers: function (a) {
      if (a)
          for (var b = a.length - 1; 0 <= b; b--) {
              var c = a[b];
              OpenLayers.Event.stopObserving.apply(this, [c.element, c.name, c.observer, c.useCapture]);
          }
  },
  stopObserving: function (a, b, c, d) {
      d = d || !1;
      a = OpenLayers.Util.getElement(a);
      var e = a._eventCacheID;
      "keypress" == b && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || a.detachEvent) && (b = "keydown");
      var f = !1,
          g = OpenLayers.Event.observers[e];
      if (g)
          for (var h = 0; !f && h < g.length; ) {
              var k = g[h];
              if (k.name == b && k.observer == c && k.useCapture == d) {
                  g.splice(h, 1);
                  0 == g.length && delete OpenLayers.Event.observers[e];
                  f = !0;
                  break;
              }
              h++;
          }
      f && (a.removeEventListener ? a.removeEventListener(b, c, d) : a && a.detachEvent && a.detachEvent("on" + b, c));
      return f;
  },
  unloadCache: function () {
      if (OpenLayers.Event && OpenLayers.Event.observers) {
          for (var a in OpenLayers.Event.observers) OpenLayers.Event._removeElementObservers.apply(this, [OpenLayers.Event.observers[a]]);
          OpenLayers.Event.observers = !1;
      }
  },
  CLASS_NAME: "OpenLayers.Event",
};
OpenLayers.Event.observe(window, "unload", OpenLayers.Event.unloadCache, !1);
OpenLayers.Events = OpenLayers.Class({
  BROWSER_EVENTS: "mouseover mouseout mousedown mouseup mousemove click dblclick rightclick dblrightclick resize focus blur touchstart touchmove touchend keydown".split(" "),
  listeners: null,
  object: null,
  element: null,
  eventHandler: null,
  fallThrough: null,
  includeXY: !1,
  extensions: null,
  extensionCount: null,
  clearMouseListener: null,
  initialize: function (a, b, c, d, e) {
      OpenLayers.Util.extend(this, e);
      this.object = a;
      this.fallThrough = d;
      this.listeners = {};
      this.extensions = {};
      this.extensionCount = {};
      this._msTouches = [];
      null != b && this.attachToElement(b);
  },
  destroy: function () {
      for (var a in this.extensions) "boolean" !== typeof this.extensions[a] && this.extensions[a].destroy();
      this.extensions = null;
      this.element && (OpenLayers.Event.stopObservingElement(this.element), this.element.hasScrollEvent && OpenLayers.Event.stopObserving(window, "scroll", this.clearMouseListener));
      this.eventHandler = this.fallThrough = this.object = this.listeners = this.element = null;
  },
  addEventType: function (a) {},
  attachToElement: function (a) {
      this.element
          ? OpenLayers.Event.stopObservingElement(this.element)
          : ((this.eventHandler = OpenLayers.Function.bindAsEventListener(this.handleBrowserEvent, this)), (this.clearMouseListener = OpenLayers.Function.bind(this.clearMouseCache, this)));
      this.element = a;
      for (var b = !!window.navigator.msMaxTouchPoints, c, d = 0, e = this.BROWSER_EVENTS.length; d < e; d++)
          (c = this.BROWSER_EVENTS[d]), OpenLayers.Event.observe(a, c, this.eventHandler), b && 0 === c.indexOf("touch") && this.addMsTouchListener(a, c, this.eventHandler);
      OpenLayers.Event.observe(a, "dragstart", OpenLayers.Event.stop);
  },
  on: function (a) {
      for (var b in a) "scope" != b && a.hasOwnProperty(b) && this.register(b, a.scope, a[b]);
  },
  register: function (a, b, c, d) {
      a in OpenLayers.Events && !this.extensions[a] && (this.extensions[a] = new OpenLayers.Events[a](this));
      if (null != c) {
          null == b && (b = this.object);
          var e = this.listeners[a];
          e || ((e = []), (this.listeners[a] = e), (this.extensionCount[a] = 0));
          b = { obj: b, func: c };
          d ? (e.splice(this.extensionCount[a], 0, b), "object" === typeof d && d.extension && this.extensionCount[a]++) : e.push(b);
      }
  },
  registerPriority: function (a, b, c) {
      this.register(a, b, c, !0);
  },
  un: function (a) {
      for (var b in a) "scope" != b && a.hasOwnProperty(b) && this.unregister(b, a.scope, a[b]);
  },
  unregister: function (a, b, c) {
      null == b && (b = this.object);
      a = this.listeners[a];
      if (null != a)
          for (var d = 0, e = a.length; d < e; d++)
              if (a[d].obj == b && a[d].func == c) {
                  a.splice(d, 1);
                  break;
              }
  },
  remove: function (a) {
      null != this.listeners[a] && (this.listeners[a] = []);
  },
  triggerEvent: function (a, b) {
      var c = this.listeners[a];
      if (c && 0 != c.length) {
          null == b && (b = {});
          b.object = this.object;
          b.element = this.element;
          b.type || (b.type = a);
          for (var c = c.slice(), d, e = 0, f = c.length; e < f && ((d = c[e]), (d = d.func.apply(d.obj, [b])), void 0 == d || !1 != d); e++);
          this.fallThrough || OpenLayers.Event.stop(b, !0);
          return d;
      }
  },
  handleBrowserEvent: function (a) {
      var b = a.type,
          c = this.listeners[b];
      if (c && 0 != c.length) {
          if ((c = a.touches) && c[0]) {
              for (var d = 0, e = 0, f = c.length, g, h = 0; h < f; ++h) (g = this.getTouchClientXY(c[h])), (d += g.clientX), (e += g.clientY);
              a.clientX = d / f;
              a.clientY = e / f;
          }
          this.includeXY && (a.xy = this.getMousePosition(a));
          this.triggerEvent(b, a);
      }
  },
  getTouchClientXY: function (a) {
      var b = window.olMockWin || window,
          c = b.pageXOffset,
          b = b.pageYOffset,
          d = a.clientX,
          e = a.clientY;
      if ((0 === a.pageY && Math.floor(e) > Math.floor(a.pageY)) || (0 === a.pageX && Math.floor(d) > Math.floor(a.pageX))) (d -= c), (e -= b);
      else if (e < a.pageY - b || d < a.pageX - c) (d = a.pageX - c), (e = a.pageY - b);
      a.olClientX = d;
      a.olClientY = e;
      return { clientX: d, clientY: e };
  },
  clearMouseCache: function () {
      this.element.scrolls = null;
      this.element.lefttop = null;
      this.element.offsets = null;
  },
  getMousePosition: function (a) {
      this.includeXY ? this.element.hasScrollEvent || (OpenLayers.Event.observe(window, "scroll", this.clearMouseListener), (this.element.hasScrollEvent = !0)) : this.clearMouseCache();
      if (!this.element.scrolls) {
          var b = OpenLayers.Util.getViewportElement();
          this.element.scrolls = [window.pageXOffset || b.scrollLeft, window.pageYOffset || b.scrollTop];
      }
      this.element.lefttop || (this.element.lefttop = [document.documentElement.clientLeft || 0, document.documentElement.clientTop || 0]);
      this.element.offsets || (this.element.offsets = OpenLayers.Util.pagePosition(this.element));
      return new OpenLayers.Pixel(a.clientX + this.element.scrolls[0] - this.element.offsets[0] - this.element.lefttop[0], a.clientY + this.element.scrolls[1] - this.element.offsets[1] - this.element.lefttop[1]);
  },
  addMsTouchListener: function (a, b, c) {
      function d(a) {
          c(
              OpenLayers.Util.applyDefaults(
                  {
                      stopPropagation: function () {
                          for (var a = e.length - 1; 0 <= a; --a) e[a].stopPropagation();
                      },
                      preventDefault: function () {
                          for (var a = e.length - 1; 0 <= a; --a) e[a].preventDefault();
                      },
                      type: b,
                  },
                  a
              )
          );
      }
      var e = this._msTouches;
      switch (b) {
          case "touchstart":
              return this.addMsTouchListenerStart(a, b, d);
          case "touchend":
              return this.addMsTouchListenerEnd(a, b, d);
          case "touchmove":
              return this.addMsTouchListenerMove(a, b, d);
          default:
              throw "Unknown touch event type";
      }
  },
  addMsTouchListenerStart: function (a, b, c) {
      var d = this._msTouches;
      OpenLayers.Event.observe(a, "MSPointerDown", function (a) {
          for (var b = !1, g = 0, h = d.length; g < h; ++g)
              if (d[g].pointerId == a.pointerId) {
                  b = !0;
                  break;
              }
          b || d.push(a);
          a.touches = d.slice();
          c(a);
      });
      OpenLayers.Event.observe(a, "MSPointerUp", function (a) {
          for (var b = 0, c = d.length; b < c; ++b)
              if (d[b].pointerId == a.pointerId) {
                  d.splice(b, 1);
                  break;
              }
      });
  },
  addMsTouchListenerMove: function (a, b, c) {
      var d = this._msTouches;
      OpenLayers.Event.observe(a, "MSPointerMove", function (a) {
          if (a.pointerType != a.MSPOINTER_TYPE_MOUSE || 0 != a.buttons)
              if (1 != d.length || d[0].pageX != a.pageX || d[0].pageY != a.pageY) {
                  for (var b = 0, g = d.length; b < g; ++b)
                      if (d[b].pointerId == a.pointerId) {
                          d[b] = a;
                          break;
                      }
                  a.touches = d.slice();
                  c(a);
              }
      });
  },
  addMsTouchListenerEnd: function (a, b, c) {
      var d = this._msTouches;
      OpenLayers.Event.observe(a, "MSPointerUp", function (a) {
          for (var b = 0, g = d.length; b < g; ++b)
              if (d[b].pointerId == a.pointerId) {
                  d.splice(b, 1);
                  break;
              }
          a.touches = d.slice();
          c(a);
      });
  },
  CLASS_NAME: "OpenLayers.Events",
});
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;
  },
  ignore: function (a) {
      var b = 3,
          c = !1;
      do {
          if ("a" === a.nodeName.toLowerCase()) {
              c = !0;
              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 if (this.startEvt) {
                  if (this.completeRegEx.test(a.type)) {
                      var b = OpenLayers.Util.pagePosition(c),
                          d = OpenLayers.Util.getViewportElement(),
                          e = window.pageYOffset || d.scrollTop;
                      b[0] -= window.pageXOffset || d.scrollLeft;
                      b[1] -= e;
                      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 (b = !this.ignore(OpenLayers.Event.element(a))), delete this.startEvt;
      return b;
  },
});
OpenLayers.Util = OpenLayers.Util || {};
OpenLayers.Util.vendorPrefix = (function () {
  function a(a) {
      return a
          ? a
                .replace(/([A-Z])/g, function (a) {
                    return "-" + a.toLowerCase();
                })
                .replace(/^ms-/, "-ms-")
          : null;
  }
  function b(a, b) {
      if (void 0 === g[b]) {
          var c,
              e = 0,
              f = d.length,
              p = "undefined" !== typeof a.cssText;
          for (g[b] = null; e < f; e++)
              if (((c = d[e]) ? (p || (c = c.toLowerCase()), (c = c + b.charAt(0).toUpperCase() + b.slice(1))) : (c = b), void 0 !== a[c])) {
                  g[b] = c;
                  break;
              }
      }
      return g[b];
  }
  function c(a) {
      return b(e, a);
  }
  var d = ["", "O", "ms", "Moz", "Webkit"],
      e = document.createElement("div").style,
      f = {},
      g = {};
  return {
      css: function (b) {
          if (void 0 === f[b]) {
              var d = b.replace(/(-[\s\S])/g, function (a) {
                      return a.charAt(1).toUpperCase();
                  }),
                  d = c(d);
              f[b] = a(d);
          }
          return f[b];
      },
      js: b,
      style: c,
      cssCache: f,
      jsCache: g,
  };
})();
OpenLayers.Animation = (function (a) {
  var b = OpenLayers.Util.vendorPrefix.js(a, "requestAnimationFrame"),
      c = !!b,
      d = (function () {
          var c =
              a[b] ||
              function (b, c) {
                  a.setTimeout(b, 16);
              };
          return function (b, d) {
              c.apply(a, [b, d]);
          };
      })(),
      e = 0,
      f = {};
  return {
      isNative: c,
      requestFrame: d,
      start: function (a, b, c) {
          b = 0 < b ? b : Number.POSITIVE_INFINITY;
          var l = ++e,
              m = +new Date();
          f[l] = function () {
              f[l] && +new Date() - m <= b ? (a(), f[l] && d(f[l], c)) : delete f[l];
          };
          d(f[l], c);
          return l;
      },
      stop: function (a) {
          delete f[a];
      },
  };
})(window);
OpenLayers.Tween = OpenLayers.Class({
  easing: null,
  begin: null,
  finish: null,
  duration: null,
  callbacks: null,
  time: null,
  minFrameRate: null,
  startTime: null,
  animationId: null,
  playing: !1,
  initialize: function (a) {
      this.easing = a ? a : OpenLayers.Easing.Expo.easeOut;
  },
  start: function (a, b, c, d) {
      this.playing = !0;
      this.begin = a;
      this.finish = b;
      this.duration = c;
      this.callbacks = d.callbacks;
      this.minFrameRate = d.minFrameRate || 30;
      this.time = 0;
      this.startTime = new Date().getTime();
      OpenLayers.Animation.stop(this.animationId);
      this.animationId = null;
      this.callbacks && this.callbacks.start && this.callbacks.start.call(this, this.begin);
      this.animationId = OpenLayers.Animation.start(OpenLayers.Function.bind(this.play, this));
  },
  stop: function () {
      this.playing && (this.callbacks && this.callbacks.done && this.callbacks.done.call(this, this.finish), OpenLayers.Animation.stop(this.animationId), (this.animationId = null), (this.playing = !1));
  },
  play: function () {
      var a = {},
          b;
      for (b in this.begin) {
          var c = this.begin[b],
              d = this.finish[b];
          if (null == c || null == d || isNaN(c) || isNaN(d)) throw new TypeError("invalid value for Tween");
          a[b] = this.easing.apply(this, [this.time, c, d - c, this.duration]);
      }
      this.time++;
      this.callbacks && this.callbacks.eachStep && (new Date().getTime() - this.startTime) / this.time <= 1e3 / this.minFrameRate && this.callbacks.eachStep.call(this, a);
      this.time > this.duration && this.stop();
  },
  CLASS_NAME: "OpenLayers.Tween",
});
OpenLayers.Easing = { CLASS_NAME: "OpenLayers.Easing" };
OpenLayers.Easing.Linear = {
  easeIn: function (a, b, c, d) {
      return (c * a) / d + b;
  },
  easeOut: function (a, b, c, d) {
      return (c * a) / d + b;
  },
  easeInOut: function (a, b, c, d) {
      return (c * a) / d + b;
  },
  CLASS_NAME: "OpenLayers.Easing.Linear",
};
OpenLayers.Easing.Expo = {
  easeIn: function (a, b, c, d) {
      return 0 == a ? b : c * Math.pow(2, 10 * (a / d - 1)) + b;
  },
  easeOut: function (a, b, c, d) {
      return a == d ? b + c : c * (-Math.pow(2, (-10 * a) / d) + 1) + b;
  },
  easeInOut: function (a, b, c, d) {
      return 0 == a ? b : a == d ? b + c : 1 > (a /= d / 2) ? (c / 2) * Math.pow(2, 10 * (a - 1)) + b : (c / 2) * (-Math.pow(2, -10 * --a) + 2) + b;
  },
  CLASS_NAME: "OpenLayers.Easing.Expo",
};
OpenLayers.Easing.Quad = {
  easeIn: function (a, b, c, d) {
      return c * (a /= d) * a + b;
  },
  easeOut: function (a, b, c, d) {
      return -c * (a /= d) * (a - 2) + b;
  },
  easeInOut: function (a, b, c, d) {
      return 1 > (a /= d / 2) ? (c / 2) * a * a + b : (-c / 2) * (--a * (a - 2) - 1) + b;
  },
  CLASS_NAME: "OpenLayers.Easing.Quad",
};
OpenLayers.Projection = OpenLayers.Class({
  proj: null,
  projCode: null,
  titleRegEx: /\+title=[^\+]*/,
  initialize: function (a, b) {
      OpenLayers.Util.extend(this, b);
      this.projCode = a;
      "object" == typeof Proj4js && (this.proj = new Proj4js.Proj(a));
  },
  getCode: function () {
      return this.proj ? this.proj.srsCode : this.projCode;
  },
  getUnits: function () {
      return this.proj ? this.proj.units : null;
  },
  toString: function () {
      return this.getCode();
  },
  equals: function (a) {
      var b = !1;
      a &&
          (a instanceof OpenLayers.Projection || (a = new OpenLayers.Projection(a)),
          "object" == typeof Proj4js && this.proj.defData && a.proj.defData
              ? (b = this.proj.defData.replace(this.titleRegEx, "") == a.proj.defData.replace(this.titleRegEx, ""))
              : a.getCode && ((b = this.getCode()), (a = a.getCode()), (b = b == a || (!!OpenLayers.Projection.transforms[b] && OpenLayers.Projection.transforms[b][a] === OpenLayers.Projection.nullTransform))));
      return b;
  },
  destroy: function () {
      delete this.proj;
      delete this.projCode;
  },
  CLASS_NAME: "OpenLayers.Projection",
});
OpenLayers.Projection.transforms = {};
OpenLayers.Projection.defaults = {
  "EPSG:4326": { units: "degrees", maxExtent: [-180, -90, 180, 90], yx: !0 },
  "CRS:84": { units: "degrees", maxExtent: [-180, -90, 180, 90] },
  "EPSG:900913": { units: "m", maxExtent: [-2.003750834e7, -2.003750834e7, 2.003750834e7, 2.003750834e7] },
};
OpenLayers.Projection.addTransform = function (a, b, c) {
  if (c === OpenLayers.Projection.nullTransform) {
      var d = OpenLayers.Projection.defaults[a];
      d && !OpenLayers.Projection.defaults[b] && (OpenLayers.Projection.defaults[b] = d);
  }
  OpenLayers.Projection.transforms[a] || (OpenLayers.Projection.transforms[a] = {});
  OpenLayers.Projection.transforms[a][b] = c;
};
OpenLayers.Projection.transform = function (a, b, c) {
  if (b && c)
      if ((b instanceof OpenLayers.Projection || (b = new OpenLayers.Projection(b)), c instanceof OpenLayers.Projection || (c = new OpenLayers.Projection(c)), b.proj && c.proj)) a = Proj4js.transform(b.proj, c.proj, a);
      else {
          b = b.getCode();
          c = c.getCode();
          var d = OpenLayers.Projection.transforms;
          if (d[b] && d[b][c]) d[b][c](a);
      }
  return a;
};
OpenLayers.Projection.nullTransform = function (a) {
  return a;
};
(function () {
  function a(a) {
      a.x = (180 * a.x) / d;
      a.y = (180 / Math.PI) * (2 * Math.atan(Math.exp((a.y / d) * Math.PI)) - Math.PI / 2);
      return a;
  }
  function b(a) {
      a.x = (a.x * d) / 180;
      var b = (Math.log(Math.tan(((90 + a.y) * Math.PI) / 360)) / Math.PI) * d;
      a.y = Math.max(-2.003750834e7, Math.min(b, 2.003750834e7));
      return a;
  }
  function c(c, d) {
      var e = OpenLayers.Projection.addTransform,
          f = OpenLayers.Projection.nullTransform,
          g,
          p,
          q,
          r,
          s;
      g = 0;
      for (p = d.length; g < p; ++g) for (q = d[g], e(c, q, b), e(q, c, a), s = g + 1; s < p; ++s) (r = d[s]), e(q, r, f), e(r, q, f);
  }
  var d = 2.003750834e7,
      e = ["EPSG:900913", "EPSG:3857", "EPSG:102113", "EPSG:102100"],
      f = ["CRS:84", "urn:ogc:def:crs:EPSG:6.6:4326", "EPSG:4326"],
      g;
  for (g = e.length - 1; 0 <= g; --g) c(e[g], f);
  for (g = f.length - 1; 0 <= g; --g) c(f[g], e);
})();
OpenLayers.Map = OpenLayers.Class({
  Z_INDEX_BASE: { BaseLayer: 100, Overlay: 325, Feature: 725, Popup: 750, Control: 1e3 },
  id: null,
  fractionalZoom: !1,
  events: null,
  allOverlays: !1,
  div: null,
  dragging: !1,
  size: null,
  viewPortDiv: null,
  layerContainerOrigin: null,
  layerContainerDiv: null,
  layers: null,
  controls: null,
  popups: null,
  baseLayer: null,
  center: null,
  resolution: null,
  zoom: 0,
  panRatio: 1.5,
  options: null,
  tileSize: null,
  projection: "EPSG:4326",
  units: null,
  resolutions: null,
  maxResolution: null,
  minResolution: null,
  maxScale: null,
  minScale: null,
  maxExtent: null,
  minExtent: null,
  restrictedExtent: null,
  numZoomLevels: 16,
  theme: null,
  displayProjection: null,
  fallThrough: !1,
  autoUpdateSize: !0,
  eventListeners: null,
  panTween: null,
  panMethod: OpenLayers.Easing.Expo.easeOut,
  panDuration: 50,
  zoomTween: null,
  zoomMethod: OpenLayers.Easing.Quad.easeOut,
  zoomDuration: 20,
  paddingForPopups: null,
  layerContainerOriginPx: null,
  minPx: null,
  maxPx: null,
  initialize: function (a, b) {
      1 === arguments.length && "object" === typeof a && (a = (b = a) && b.div);
      this.tileSize = new OpenLayers.Size(OpenLayers.Map.TILE_WIDTH, OpenLayers.Map.TILE_HEIGHT);
      this.paddingForPopups = new OpenLayers.Bounds(15, 15, 15, 15);
      this.theme = OpenLayers._getScriptLocation() + "theme/default/style.css";
      this.options = OpenLayers.Util.extend({}, b);
      OpenLayers.Util.extend(this, b);
      OpenLayers.Util.applyDefaults(this, OpenLayers.Projection.defaults[this.projection instanceof OpenLayers.Projection ? this.projection.projCode : this.projection]);
      !this.maxExtent || this.maxExtent instanceof OpenLayers.Bounds || (this.maxExtent = new OpenLayers.Bounds(this.maxExtent));
      !this.minExtent || this.minExtent instanceof OpenLayers.Bounds || (this.minExtent = new OpenLayers.Bounds(this.minExtent));
      !this.restrictedExtent || this.restrictedExtent instanceof OpenLayers.Bounds || (this.restrictedExtent = new OpenLayers.Bounds(this.restrictedExtent));
      !this.center || this.center instanceof OpenLayers.LonLat || (this.center = new OpenLayers.LonLat(this.center));
      this.layers = [];
      this.id = OpenLayers.Util.createUniqueID("OpenLayers.Map_");
      this.div = OpenLayers.Util.getElement(a);
      this.div || ((this.div = document.createElement("div")), (this.div.style.height = "1px"), (this.div.style.width = "1px"));
      OpenLayers.Element.addClass(this.div, "olMap");
      var c = this.id + "_OpenLayers_ViewPort";
      this.viewPortDiv = OpenLayers.Util.createDiv(c, null, null, null, "relative", null, "hidden");
      this.viewPortDiv.style.width = "100%";
      this.viewPortDiv.style.height = "100%";
      this.viewPortDiv.className = "olMapViewport";
      this.div.appendChild(this.viewPortDiv);
      this.events = new OpenLayers.Events(this, this.viewPortDiv, null, this.fallThrough, { includeXY: !0 });
      OpenLayers.TileManager && null !== this.tileManager && (this.tileManager instanceof OpenLayers.TileManager || (this.tileManager = new OpenLayers.TileManager(this.tileManager)), this.tileManager.addMap(this));
      c = this.id + "_OpenLayers_Container";
      this.layerContainerDiv = OpenLayers.Util.createDiv(c);
      this.layerContainerDiv.style.zIndex = this.Z_INDEX_BASE.Popup - 1;
      this.layerContainerOriginPx = { x: 0, y: 0 };
      this.applyTransform();
      this.viewPortDiv.appendChild(this.layerContainerDiv);
      this.updateSize();
      if (this.eventListeners instanceof Object) this.events.on(this.eventListeners);
      !0 === this.autoUpdateSize && ((this.updateSizeDestroy = OpenLayers.Function.bind(this.updateSize, this)), OpenLayers.Event.observe(window, "resize", this.updateSizeDestroy));
      if (this.theme) {
          for (var c = !0, d = document.getElementsByTagName("link"), e = 0, f = d.length; e < f; ++e)
              if (OpenLayers.Util.isEquivalentUrl(d.item(e).href, this.theme)) {
                  c = !1;
                  break;
              }
          c && ((c = document.createElement("link")), c.setAttribute("rel", "stylesheet"), c.setAttribute("type", "text/css"), c.setAttribute("href", this.theme), document.getElementsByTagName("head")[0].appendChild(c));
      }
      null == this.controls &&
          ((this.controls = []),
          null != OpenLayers.Control &&
              (OpenLayers.Control.Navigation ? this.controls.push(new OpenLayers.Control.Navigation()) : OpenLayers.Control.TouchNavigation && this.controls.push(new OpenLayers.Control.TouchNavigation()),
              OpenLayers.Control.Zoom ? this.controls.push(new OpenLayers.Control.Zoom()) : OpenLayers.Control.PanZoom && this.controls.push(new OpenLayers.Control.PanZoom()),
              OpenLayers.Control.ArgParser && this.controls.push(new OpenLayers.Control.ArgParser()),
              OpenLayers.Control.Attribution && this.controls.push(new OpenLayers.Control.Attribution())));
      e = 0;
      for (f = this.controls.length; e < f; e++) this.addControlToMap(this.controls[e]);
      this.popups = [];
      this.unloadDestroy = OpenLayers.Function.bind(this.destroy, this);
      OpenLayers.Event.observe(window, "unload", this.unloadDestroy);
      b && b.layers && (delete this.center, delete this.zoom, this.addLayers(b.layers), b.center && !this.getCenter() && this.setCenter(b.center, b.zoom));
      this.panMethod && (this.panTween = new OpenLayers.Tween(this.panMethod));
      this.zoomMethod && this.applyTransform.transform && (this.zoomTween = new OpenLayers.Tween(this.zoomMethod));
  },
  getViewport: function () {
      return this.viewPortDiv;
  },
  render: function (a) {
      this.div = OpenLayers.Util.getElement(a);
      OpenLayers.Element.addClass(this.div, "olMap");
      this.viewPortDiv.parentNode.removeChild(this.viewPortDiv);
      this.div.appendChild(this.viewPortDiv);
      this.updateSize();
  },
  unloadDestroy: null,
  updateSizeDestroy: null,
  destroy: function () {
      if (!this.unloadDestroy) return !1;
      this.panTween && (this.panTween.stop(), (this.panTween = null));
      this.zoomTween && (this.zoomTween.stop(), (this.zoomTween = null));
      OpenLayers.Event.stopObserving(window, "unload", this.unloadDestroy);
      this.unloadDestroy = null;
      this.updateSizeDestroy && OpenLayers.Event.stopObserving(window, "resize", this.updateSizeDestroy);
      this.paddingForPopups = null;
      if (null != this.controls) {
          for (var a = this.controls.length - 1; 0 <= a; --a) this.controls[a].destroy();
          this.controls = null;
      }
      if (null != this.layers) {
          for (a = this.layers.length - 1; 0 <= a; --a) this.layers[a].destroy(!1);
          this.layers = null;
      }
      this.viewPortDiv && this.viewPortDiv.parentNode && this.viewPortDiv.parentNode.removeChild(this.viewPortDiv);
      this.viewPortDiv = null;
      this.tileManager && (this.tileManager.removeMap(this), (this.tileManager = null));
      this.eventListeners && (this.events.un(this.eventListeners), (this.eventListeners = null));
      this.events.destroy();
      this.options = this.events = null;
  },
  setOptions: function (a) {
      var b = this.minPx && a.restrictedExtent != this.restrictedExtent;
      OpenLayers.Util.extend(this, a);
      b && this.moveTo(this.getCachedCenter(), this.zoom, { forceZoomChange: !0 });
  },
  getTileSize: function () {
      return this.tileSize;
  },
  getBy: function (a, b, c) {
      var d = "function" == typeof c.test;
      return OpenLayers.Array.filter(this[a], function (a) {
          return a[b] == c || (d && c.test(a[b]));
      });
  },
  getLayersBy: function (a, b) {
      return this.getBy("layers", a, b);
  },
  getLayersByName: function (a) {
      return this.getLayersBy("name", a);
  },
  getLayersByClass: function (a) {
      return this.getLayersBy("CLASS_NAME", a);
  },
  getControlsBy: function (a, b) {
      return this.getBy("controls", a, b);
  },
  getControlsByClass: function (a) {
      return this.getControlsBy("CLASS_NAME", a);
  },
  getLayer: function (a) {
      for (var b = null, c = 0, d = this.layers.length; c < d; c++) {
          var e = this.layers[c];
          if (e.id == a) {
              b = e;
              break;
          }
      }
      return b;
  },
  setLayerZIndex: function (a, b) {
      a.setZIndex(this.Z_INDEX_BASE[a.isBaseLayer ? "BaseLayer" : "Overlay"] + 5 * b);
  },
  resetLayersZIndex: function () {
      for (var a = 0, b = this.layers.length; a < b; a++) this.setLayerZIndex(this.layers[a], a);
  },
  addLayer: function (a) {
      for (var b = 0, c = this.layers.length; b < c; b++) if (this.layers[b] == a) return !1;
      if (!1 === this.events.triggerEvent("preaddlayer", { layer: a })) return !1;
      this.allOverlays && (a.isBaseLayer = !1);
      a.div.className = "olLayerDiv";
      a.div.style.overflow = "";
      this.setLayerZIndex(a, this.layers.length);
      a.isFixed ? this.viewPortDiv.appendChild(a.div) : this.layerContainerDiv.appendChild(a.div);
      this.layers.push(a);
      a.setMap(this);
      a.isBaseLayer || (this.allOverlays && !this.baseLayer) ? (null == this.baseLayer ? this.setBaseLayer(a) : a.setVisibility(!1)) : a.redraw();
      this.events.triggerEvent("addlayer", { layer: a });
      a.events.triggerEvent("added", { map: this, layer: a });
      a.afterAdd();
      return !0;
  },
  addLayers: function (a) {
      for (var b = 0, c = a.length; b < c; b++) this.addLayer(a[b]);
  },
  removeLayer: function (a, b) {
      if (!1 !== this.events.triggerEvent("preremovelayer", { layer: a })) {
          null == b && (b = !0);
          a.isFixed ? this.viewPortDiv.removeChild(a.div) : this.layerContainerDiv.removeChild(a.div);
          OpenLayers.Util.removeItem(this.layers, a);
          a.removeMap(this);
          a.map = null;
          if (this.baseLayer == a && ((this.baseLayer = null), b))
              for (var c = 0, d = this.layers.length; c < d; c++) {
                  var e = this.layers[c];
                  if (e.isBaseLayer || this.allOverlays) {
                      this.setBaseLayer(e);
                      break;
                  }
              }
          this.resetLayersZIndex();
          this.events.triggerEvent("removelayer", { layer: a });
          a.events.triggerEvent("removed", { map: this, layer: a });
      }
  },
  getNumLayers: function () {
      return this.layers.length;
  },
  getLayerIndex: function (a) {
      return OpenLayers.Util.indexOf(this.layers, a);
  },
  setLayerIndex: function (a, b) {
      var c = this.getLayerIndex(a);
      0 > b ? (b = 0) : b > this.layers.length && (b = this.layers.length);
      if (c != b) {
          this.layers.splice(c, 1);
          this.layers.splice(b, 0, a);
          for (var c = 0, d = this.layers.length; c < d; c++) this.setLayerZIndex(this.layers[c], c);
          this.events.triggerEvent("changelayer", { layer: a, property: "order" });
          this.allOverlays && (0 === b ? this.setBaseLayer(a) : this.baseLayer !== this.layers[0] && this.setBaseLayer(this.layers[0]));
      }
  },
  raiseLayer: function (a, b) {
      var c = this.getLayerIndex(a) + b;
      this.setLayerIndex(a, c);
  },
  setBaseLayer: function (a) {
      if (a != this.baseLayer && -1 != OpenLayers.Util.indexOf(this.layers, a)) {
          var b = this.getCachedCenter(),
              c = OpenLayers.Util.getResolutionFromScale(this.getScale(), a.units);
          null == this.baseLayer || this.allOverlays || this.baseLayer.setVisibility(!1);
          this.baseLayer = a;
          if (!this.allOverlays || this.baseLayer.visibility) this.baseLayer.setVisibility(!0), !1 === this.baseLayer.inRange && this.baseLayer.redraw();
          null != b && ((a = this.getZoomForResolution(c || this.resolution, !0)), this.setCenter(b, a, !1, !0));
          this.events.triggerEvent("changebaselayer", { layer: this.baseLayer });
      }
  },
  addControl: function (a, b) {
      this.controls.push(a);
      this.addControlToMap(a, b);
  },
  addControls: function (a, b) {
      for (var c = 1 === arguments.length ? [] : b, d = 0, e = a.length; d < e; d++) this.addControl(a[d], c[d] ? c[d] : null);
  },
  addControlToMap: function (a, b) {
      a.outsideViewport = null != a.div;
      this.displayProjection && !a.displayProjection && (a.displayProjection = this.displayProjection);
      a.setMap(this);
      var c = a.draw(b);
      c && !a.outsideViewport && ((c.style.zIndex = this.Z_INDEX_BASE.Control + this.controls.length), this.viewPortDiv.appendChild(c));
      a.autoActivate && a.activate();
  },
  getControl: function (a) {
      for (var b = null, c = 0, d = this.controls.length; c < d; c++) {
          var e = this.controls[c];
          if (e.id == a) {
              b = e;
              break;
          }
      }
      return b;
  },
  removeControl: function (a) {
      a && a == this.getControl(a.id) && (a.div && a.div.parentNode == this.viewPortDiv && this.viewPortDiv.removeChild(a.div), OpenLayers.Util.removeItem(this.controls, a));
  },
  addPopup: function (a, b) {
      if (b) for (var c = this.popups.length - 1; 0 <= c; --c) this.removePopup(this.popups[c]);
      a.map = this;
      this.popups.push(a);
      if ((c = a.draw())) (c.style.zIndex = this.Z_INDEX_BASE.Popup + this.popups.length), this.layerContainerDiv.appendChild(c);
  },
  removePopup: function (a) {
      OpenLayers.Util.removeItem(this.popups, a);
      if (a.div)
          try {
              this.layerContainerDiv.removeChild(a.div);
          } catch (b) {}
      a.map = null;
  },
  getSize: function () {
      var a = null;
      null != this.size && (a = this.size.clone());
      return a;
  },
  updateSize: function () {
      var a = this.getCurrentSize();
      if (a && !isNaN(a.h) && !isNaN(a.w)) {
          this.events.clearMouseCache();
          var b = this.getSize();
          null == b && (this.size = b = a);
          if (!a.equals(b)) {
              this.size = a;
              a = 0;
              for (b = this.layers.length; a < b; a++) this.layers[a].onMapResize();
              a = this.getCachedCenter();
              null != this.baseLayer && null != a && ((b = this.getZoom()), (this.zoom = null), this.setCenter(a, b));
          }
      }
      this.events.triggerEvent("updatesize");
  },
  getCurrentSize: function () {
      var a = new OpenLayers.Size(this.div.clientWidth, this.div.clientHeight);
      if ((0 == a.w && 0 == a.h) || (isNaN(a.w) && isNaN(a.h))) (a.w = this.div.offsetWidth), (a.h = this.div.offsetHeight);
      if ((0 == a.w && 0 == a.h) || (isNaN(a.w) && isNaN(a.h))) (a.w = parseInt(this.div.style.width)), (a.h = parseInt(this.div.style.height));
      return a;
  },
  calculateBounds: function (a, b) {
      var c = null;
      null == a && (a = this.getCachedCenter());
      null == b && (b = this.getResolution());
      if (null != a && null != b)
          var c = (this.size.w * b) / 2,
              d = (this.size.h * b) / 2,
              c = new OpenLayers.Bounds(a.lon - c, a.lat - d, a.lon + c, a.lat + d);
      return c;
  },
  getCenter: function () {
      var a = null,
          b = this.getCachedCenter();
      b && (a = b.clone());
      return a;
  },
  getCachedCenter: function () {
      !this.center && this.size && (this.center = this.getLonLatFromViewPortPx({ x: this.size.w / 2, y: this.size.h / 2 }));
      return this.center;
  },
  getZoom: function () {
      return this.zoom;
  },
  pan: function (a, b, c) {
      c = OpenLayers.Util.applyDefaults(c, { animate: !0, dragging: !1 });
      if (c.dragging) (0 == a && 0 == b) || this.moveByPx(a, b);
      else {
          var d = this.getViewPortPxFromLonLat(this.getCachedCenter());
          a = d.add(a, b);
          if (this.dragging || !a.equals(d)) (d = this.getLonLatFromViewPortPx(a)), c.animate ? this.panTo(d) : (this.moveTo(d), this.dragging && ((this.dragging = !1), this.events.triggerEvent("moveend")));
      }
  },
  panTo: function (a) {
      if (this.panTween && this.getExtent().scale(this.panRatio).containsLonLat(a)) {
          var b = this.getCachedCenter();
          if (!a.equals(b)) {
              var b = this.getPixelFromLonLat(b),
                  c = this.getPixelFromLonLat(a),
                  d = 0,
                  e = 0;
              this.panTween.start({ x: 0, y: 0 }, { x: c.x - b.x, y: c.y - b.y }, this.panDuration, {
                  callbacks: {
                      eachStep: OpenLayers.Function.bind(function (a) {
                          this.moveByPx(a.x - d, a.y - e);
                          d = Math.round(a.x);
                          e = Math.round(a.y);
                      }, this),
                      done: OpenLayers.Function.bind(function (b) {
                          this.moveTo(a);
                          this.dragging = !1;
                          this.events.triggerEvent("moveend");
                      }, this),
                  },
              });
          }
      } else this.setCenter(a);
  },
  setCenter: function (a, b, c, d) {
      this.panTween && this.panTween.stop();
      this.zoomTween && this.zoomTween.stop();
      this.moveTo(a, b, { dragging: c, forceZoomChange: d });
  },
  moveByPx: function (a, b) {
      var c = this.size.w / 2,
          d = this.size.h / 2,
          e = c + a,
          f = d + b,
          g = this.baseLayer.wrapDateLine,
          h = 0,
          k = 0;
      this.restrictedExtent && ((h = c), (k = d), (g = !1));
      a = g || (e <= this.maxPx.x - h && e >= this.minPx.x + h) ? Math.round(a) : 0;
      b = f <= this.maxPx.y - k && f >= this.minPx.y + k ? Math.round(b) : 0;
      if (a || b) {
          this.dragging || ((this.dragging = !0), this.events.triggerEvent("movestart"));
          this.center = null;
          a && ((this.layerContainerOriginPx.x -= a), (this.minPx.x -= a), (this.maxPx.x -= a));
          b && ((this.layerContainerOriginPx.y -= b), (this.minPx.y -= b), (this.maxPx.y -= b));
          this.applyTransform();
          d = 0;
          for (e = this.layers.length; d < e; ++d) (c = this.layers[d]), c.visibility && (c === this.baseLayer || c.inRange) && (c.moveByPx(a, b), c.events.triggerEvent("move"));
          this.events.triggerEvent("move");
      }
  },
  adjustZoom: function (a) {
      if (this.baseLayer && this.baseLayer.wrapDateLine) {
          var b = this.baseLayer.resolutions,
              c = this.getMaxExtent().getWidth() / this.size.w;
          if (this.getResolutionForZoom(a) > c)
              if (this.fractionalZoom) a = this.getZoomForResolution(c);
              else
                  for (var d = a | 0, e = b.length; d < e; ++d)
                      if (b[d] <= c) {
                          a = d;
                          break;
                      }
      }
      return a;
  },
  getMinZoom: function () {
      return this.adjustZoom(0);
  },
  moveTo: function (a, b, c) {
      null == a || a instanceof OpenLayers.LonLat || (a = new OpenLayers.LonLat(a));
      c || (c = {});
      null != b && ((b = parseFloat(b)), this.fractionalZoom || (b = Math.round(b)));
      var d = b;
      b = this.adjustZoom(b);
      b !== d && (a = this.getCenter());
      var d = c.dragging || this.dragging,
          e = c.forceZoomChange;
      this.getCachedCenter() || this.isValidLonLat(a) || ((a = this.maxExtent.getCenterLonLat()), (this.center = a.clone()));
      if (null != this.restrictedExtent) {
          null == a && (a = this.center);
          null == b && (b = this.getZoom());
          var f = this.getResolutionForZoom(b),
              f = this.calculateBounds(a, f);
          if (!this.restrictedExtent.containsBounds(f)) {
              var g = this.restrictedExtent.getCenterLonLat();
              f.getWidth() > this.restrictedExtent.getWidth()
                  ? (a = new OpenLayers.LonLat(g.lon, a.lat))
                  : f.left < this.restrictedExtent.left
                  ? (a = a.add(this.restrictedExtent.left - f.left, 0))
                  : f.right > this.restrictedExtent.right && (a = a.add(this.restrictedExtent.right - f.right, 0));
              f.getHeight() > this.restrictedExtent.getHeight()
                  ? (a = new OpenLayers.LonLat(a.lon, g.lat))
                  : f.bottom < this.restrictedExtent.bottom
                  ? (a = a.add(0, this.restrictedExtent.bottom - f.bottom))
                  : f.top > this.restrictedExtent.top && (a = a.add(0, this.restrictedExtent.top - f.top));
          }
      }
      e = e || (this.isValidZoomLevel(b) && b != this.getZoom());
      f = this.isValidLonLat(a) && !a.equals(this.center);
      if (e || f || d) {
          d || this.events.triggerEvent("movestart", { zoomChanged: e });
          f && (!e && this.center && this.centerLayerContainer(a), (this.center = a.clone()));
          a = e ? this.getResolutionForZoom(b) : this.getResolution();
          if (e || null == this.layerContainerOrigin) {
              this.layerContainerOrigin = this.getCachedCenter();
              this.layerContainerOriginPx.x = 0;
              this.layerContainerOriginPx.y = 0;
              this.applyTransform();
              var f = this.getMaxExtent({ restricted: !0 }),
                  h = f.getCenterLonLat(),
                  g = this.center.lon - h.lon,
                  h = h.lat - this.center.lat,
                  k = Math.round(f.getWidth() / a),
                  l = Math.round(f.getHeight() / a);
              this.minPx = { x: (this.size.w - k) / 2 - g / a, y: (this.size.h - l) / 2 - h / a };
              this.maxPx = { x: this.minPx.x + Math.round(f.getWidth() / a), y: this.minPx.y + Math.round(f.getHeight() / a) };
          }
          e && ((this.zoom = b), (this.resolution = a));
          a = this.getExtent();
          this.baseLayer.visibility && (this.baseLayer.moveTo(a, e, c.dragging), c.dragging || this.baseLayer.events.triggerEvent("moveend", { zoomChanged: e }));
          a = this.baseLayer.getExtent();
          for (b = this.layers.length - 1; 0 <= b; --b)
              (f = this.layers[b]),
                  f === this.baseLayer ||
                      f.isBaseLayer ||
                      ((g = f.calculateInRange()),
                      f.inRange != g && ((f.inRange = g) || f.display(!1), this.events.triggerEvent("changelayer", { layer: f, property: "visibility" })),
                      g && f.visibility && (f.moveTo(a, e, c.dragging), c.dragging || f.events.triggerEvent("moveend", { zoomChanged: e })));
          this.events.triggerEvent("move");
          d || this.events.triggerEvent("moveend");
          if (e) {
              b = 0;
              for (c = this.popups.length; b < c; b++) this.popups[b].updatePosition();
              this.events.triggerEvent("zoomend");
          }
      }
  },
  centerLayerContainer: function (a) {
      var b = this.getViewPortPxFromLonLat(this.layerContainerOrigin),
          c = this.getViewPortPxFromLonLat(a);
      if (null != b && null != c) {
          var d = this.layerContainerOriginPx.x;
          a = this.layerContainerOriginPx.y;
          var e = Math.round(b.x - c.x),
              b = Math.round(b.y - c.y);
          this.applyTransform((this.layerContainerOriginPx.x = e), (this.layerContainerOriginPx.y = b));
          d -= e;
          a -= b;
          this.minPx.x -= d;
          this.maxPx.x -= d;
          this.minPx.y -= a;
          this.maxPx.y -= a;
      }
  },
  isValidZoomLevel: function (a) {
      return null != a && 0 <= a && a < this.getNumZoomLevels();
  },
  isValidLonLat: function (a) {
      var b = !1;
      null != a && ((b = this.getMaxExtent()), (b = b.containsLonLat(a, { worldBounds: this.baseLayer.wrapDateLine && b })));
      return b;
  },
  getProjection: function () {
      var a = this.getProjectionObject();
      return a ? a.getCode() : null;
  },
  getProjectionObject: function () {
      var a = null;
      null != this.baseLayer && (a = this.baseLayer.projection);
      return a;
  },
  getMaxResolution: function () {
      var a = null;
      null != this.baseLayer && (a = this.baseLayer.maxResolution);
      return a;
  },
  getMaxExtent: function (a) {
      var b = null;
      a && a.restricted && this.restrictedExtent ? (b = this.restrictedExtent) : null != this.baseLayer && (b = this.baseLayer.maxExtent);
      return b;
  },
  getNumZoomLevels: function () {
      var a = null;
      null != this.baseLayer && (a = this.baseLayer.numZoomLevels);
      return a;
  },
  getExtent: function () {
      var a = null;
      null != this.baseLayer && (a = this.baseLayer.getExtent());
      return a;
  },
  getResolution: function () {
      var a = null;
      null != this.baseLayer ? (a = this.baseLayer.getResolution()) : !0 === this.allOverlays && 0 < this.layers.length && (a = this.layers[0].getResolution());
      return a;
  },
  getUnits: function () {
      var a = null;
      null != this.baseLayer && (a = this.baseLayer.units);
      return a;
  },
  getScale: function () {
      var a = null;
      null != this.baseLayer && ((a = this.getResolution()), (a = OpenLayers.Util.getScaleFromResolution(a, this.baseLayer.units)));
      return a;
  },
  getZoomForExtent: function (a, b) {
      var c = null;
      null != this.baseLayer && (c = this.baseLayer.getZoomForExtent(a, b));
      return c;
  },
  getResolutionForZoom: function (a) {
      var b = null;
      this.baseLayer && (b = this.baseLayer.getResolutionForZoom(a));
      return b;
  },
  getZoomForResolution: function (a, b) {
      var c = null;
      null != this.baseLayer && (c = this.baseLayer.getZoomForResolution(a, b));
      return c;
  },
  zoomTo: function (a, b) {
      var c = this;
      if (c.isValidZoomLevel(a))
          if ((c.baseLayer.wrapDateLine && (a = c.adjustZoom(a)), c.zoomTween)) {
              var d = c.getResolution(),
                  e = c.getResolutionForZoom(a),
                  f = { scale: 1 },
                  d = { scale: d / e };
              c.zoomTween.playing && c.zoomTween.duration < 3 * c.zoomDuration
                  ? (c.zoomTween.finish = { scale: c.zoomTween.finish.scale * d.scale })
                  : (b || ((e = c.getSize()), (b = { x: e.w / 2, y: e.h / 2 })),
                    c.zoomTween.start(f, d, c.zoomDuration, {
                        minFrameRate: 50,
                        callbacks: {
                            eachStep: function (a) {
                                var d = c.layerContainerOriginPx;
                                a = a.scale;
                                c.applyTransform(d.x + (((a - 1) * (d.x - b.x)) | 0), d.y + (((a - 1) * (d.y - b.y)) | 0), a);
                            },
                            done: function (a) {
                                c.applyTransform();
                                a = c.getResolution() / a.scale;
                                var d = c.getZoomForResolution(a, !0);
                                c.moveTo(c.getZoomTargetCenter(b, a), d, !0);
                            },
                        },
                    }));
          } else (f = b ? c.getZoomTargetCenter(b, c.getResolutionForZoom(a)) : null), c.setCenter(f, a);
  },
  zoomIn: function () {
      this.zoomTo(this.getZoom() + 1);
  },
  zoomOut: function () {
      this.zoomTo(this.getZoom() - 1);
  },
  zoomToExtent: function (a, b) {
      a instanceof OpenLayers.Bounds || (a = new OpenLayers.Bounds(a));
      var c = a.getCenterLonLat();
      if (this.baseLayer.wrapDateLine) {
          c = this.getMaxExtent();
          for (a = a.clone(); a.right < a.left; ) a.right += c.getWidth();
          c = a.getCenterLonLat().wrapDateLine(c);
      }
      this.setCenter(c, this.getZoomForExtent(a, b));
  },
  zoomToMaxExtent: function (a) {
      a = this.getMaxExtent({ restricted: a ? a.restricted : !0 });
      this.zoomToExtent(a);
  },
  zoomToScale: function (a, b) {
      var c = OpenLayers.Util.getResolutionFromScale(a, this.baseLayer.units),
          d = (this.size.w * c) / 2,
          c = (this.size.h * c) / 2,
          e = this.getCachedCenter(),
          d = new OpenLayers.Bounds(e.lon - d, e.lat - c, e.lon + d, e.lat + c);
      this.zoomToExtent(d, b);
  },
  getLonLatFromViewPortPx: function (a) {
      var b = null;
      null != this.baseLayer && (b = this.baseLayer.getLonLatFromViewPortPx(a));
      return b;
  },
  getViewPortPxFromLonLat: function (a) {
      var b = null;
      null != this.baseLayer && (b = this.baseLayer.getViewPortPxFromLonLat(a));
      return b;
  },
  getZoomTargetCenter: function (a, b) {
      var c = null,
          d = this.getSize(),
          e = d.w / 2 - a.x,
          d = a.y - d.h / 2,
          f = this.getLonLatFromPixel(a);
      f && (c = new OpenLayers.LonLat(f.lon + e * b, f.lat + d * b));
      return c;
  },
  getLonLatFromPixel: function (a) {
      return this.getLonLatFromViewPortPx(a);
  },
  getPixelFromLonLat: function (a) {
      a = this.getViewPortPxFromLonLat(a);
      a.x = Math.round(a.x);
      a.y = Math.round(a.y);
      return a;
  },
  getGeodesicPixelSize: function (a) {
      var b = a ? this.getLonLatFromPixel(a) : this.getCachedCenter() || new OpenLayers.LonLat(0, 0),
          c = this.getResolution();
      a = b.add(-c / 2, 0);
      var d = b.add(c / 2, 0),
          e = b.add(0, -c / 2),
          b = b.add(0, c / 2),
          c = new OpenLayers.Projection("EPSG:4326"),
          f = this.getProjectionObject() || c;
      f.equals(c) || (a.transform(f, c), d.transform(f, c), e.transform(f, c), b.transform(f, c));
      return new OpenLayers.Size(OpenLayers.Util.distVincenty(a, d), OpenLayers.Util.distVincenty(e, b));
  },
  getViewPortPxFromLayerPx: function (a) {
      var b = null;
      null != a && (b = a.add(this.layerContainerOriginPx.x, this.layerContainerOriginPx.y));
      return b;
  },
  getLayerPxFromViewPortPx: function (a) {
      var b = null;
      null != a && ((b = a.add(-this.layerContainerOriginPx.x, -this.layerContainerOriginPx.y)), isNaN(b.x) || isNaN(b.y)) && (b = null);
      return b;
  },
  getLonLatFromLayerPx: function (a) {
      a = this.getViewPortPxFromLayerPx(a);
      return this.getLonLatFromViewPortPx(a);
  },
  getLayerPxFromLonLat: function (a) {
      a = this.getPixelFromLonLat(a);
      return this.getLayerPxFromViewPortPx(a);
  },
  applyTransform: function (a, b, c) {
      c = c || 1;
      var d = this.layerContainerOriginPx,
          e = 1 !== c;
      a = a || d.x;
      b = b || d.y;
      var f = this.layerContainerDiv.style,
          g = this.applyTransform.transform,
          h = this.applyTransform.template;
      if (void 0 === g && ((g = OpenLayers.Util.vendorPrefix.style("transform")), (this.applyTransform.transform = g))) {
          var k = OpenLayers.Element.getStyle(this.viewPortDiv, OpenLayers.Util.vendorPrefix.css("transform"));
          (k && "none" === k) || ((h = ["translate3d(", ",0) ", "scale3d(", ",1)"]), (f[g] = [h[0], "0,0", h[1]].join("")));
          (h && ~f[g].indexOf(h[0])) || (h = ["translate(", ") ", "scale(", ")"]);
          this.applyTransform.template = h;
      }
      null === g || ("translate3d(" !== h[0] && !0 !== e)
          ? ((f.left = a + "px"), (f.top = b + "px"), null !== g && (f[g] = ""))
          : (!0 === e && "translate(" === h[0] && ((a -= d.x), (b -= d.y), (f.left = d.x + "px"), (f.top = d.y + "px")), (f[g] = [h[0], a, "px,", b, "px", h[1], h[2], c, ",", c, h[3]].join("")));
  },
  CLASS_NAME: "OpenLayers.Map",
});
OpenLayers.Map.TILE_WIDTH = 256;
OpenLayers.Map.TILE_HEIGHT = 256;
OpenLayers.Handler = OpenLayers.Class({
  id: null,
  control: null,
  map: null,
  keyMask: null,
  active: !1,
  evt: null,
  touch: !1,
  initialize: function (a, b, c) {
      OpenLayers.Util.extend(this, c);
      this.control = a;
      this.callbacks = b;
      (a = this.map || a.map) && this.setMap(a);
      this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_");
  },
  setMap: function (a) {
      this.map = a;
  },
  checkModifiers: function (a) {
      return null == this.keyMask
          ? !0
          : ((a.shiftKey ? OpenLayers.Handler.MOD_SHIFT : 0) | (a.ctrlKey ? OpenLayers.Handler.MOD_CTRL : 0) | (a.altKey ? OpenLayers.Handler.MOD_ALT : 0) | (a.metaKey ? OpenLayers.Handler.MOD_META : 0)) == this.keyMask;
  },
  activate: function () {
      if (this.active) return !1;
      for (var a = OpenLayers.Events.prototype.BROWSER_EVENTS, b = 0, c = a.length; b < c; b++) this[a[b]] && this.register(a[b], this[a[b]]);
      return (this.active = !0);
  },
  deactivate: function () {
      if (!this.active) return !1;
      for (var a = OpenLayers.Events.prototype.BROWSER_EVENTS, b = 0, c = a.length; b < c; b++) this[a[b]] && this.unregister(a[b], this[a[b]]);
      this.active = this.touch = !1;
      return !0;
  },
  startTouch: function () {
      if (!this.touch) {
          this.touch = !0;
          for (var a = "mousedown mouseup mousemove click dblclick mouseout".split(" "), b = 0, c = a.length; b < c; b++) this[a[b]] && this.unregister(a[b], this[a[b]]);
      }
  },
  callback: function (a, b) {
      a && this.callbacks[a] && this.callbacks[a].apply(this.control, b);
  },
  register: function (a, b) {
      this.map.events.registerPriority(a, this, b);
      this.map.events.registerPriority(a, this, this.setEvent);
  },
  unregister: function (a, b) {
      this.map.events.unregister(a, this, b);
      this.map.events.unregister(a, this, this.setEvent);
  },
  setEvent: function (a) {
      this.evt = a;
      return !0;
  },
  destroy: function () {
      this.deactivate();
      this.control = this.map = null;
  },
  CLASS_NAME: "OpenLayers.Handler",
});
OpenLayers.Handler.MOD_NONE = 0;
OpenLayers.Handler.MOD_SHIFT = 1;
OpenLayers.Handler.MOD_CTRL = 2;
OpenLayers.Handler.MOD_ALT = 4;
OpenLayers.Handler.MOD_META = 8;
OpenLayers.Handler.Click = OpenLayers.Class(OpenLayers.Handler, {
  delay: 300,
  single: !0,
  double: !1,
  pixelTolerance: 0,
  dblclickTolerance: 13,
  stopSingle: !1,
  stopDouble: !1,
  timerId: null,
  down: null,
  last: null,
  first: null,
  rightclickTimerId: null,
  touchstart: function (a) {
      this.startTouch();
      this.down = this.getEventInfo(a);
      this.last = this.getEventInfo(a);
      return !0;
  },
  touchmove: function (a) {
      this.last = this.getEventInfo(a);
      return !0;
  },
  touchend: function (a) {
      this.down && ((a.xy = this.last.xy), (a.lastTouches = this.last.touches), this.handleSingle(a), (this.down = null));
      return !0;
  },
  mousedown: function (a) {
      this.down = this.getEventInfo(a);
      this.last = this.getEventInfo(a);
      return !0;
  },
  mouseup: function (a) {
      var b = !0;
      this.checkModifiers(a) && this.control.handleRightClicks && OpenLayers.Event.isRightClick(a) && (b = this.rightclick(a));
      return b;
  },
  rightclick: function (a) {
      if (this.passesTolerance(a)) {
          if (null != this.rightclickTimerId) return this.clearTimer(), this.callback("dblrightclick", [a]), !this.stopDouble;
          a = this["double"] ? OpenLayers.Util.extend({}, a) : this.callback("rightclick", [a]);
          a = OpenLayers.Function.bind(this.delayedRightCall, this, a);
          this.rightclickTimerId = window.setTimeout(a, this.delay);
      }
      return !this.stopSingle;
  },
  delayedRightCall: function (a) {
      this.rightclickTimerId = null;
      a && this.callback("rightclick", [a]);
  },
  click: function (a) {
      this.last || (this.last = this.getEventInfo(a));
      this.handleSingle(a);
      return !this.stopSingle;
  },
  dblclick: function (a) {
      this.handleDouble(a);
      return !this.stopDouble;
  },
  handleDouble: function (a) {
      this.passesDblclickTolerance(a) && (this["double"] && this.callback("dblclick", [a]), this.clearTimer());
  },
  handleSingle: function (a) {
      this.passesTolerance(a) &&
          (null != this.timerId
              ? (this.last.touches && 1 === this.last.touches.length && (this["double"] && OpenLayers.Event.preventDefault(a), this.handleDouble(a)), (this.last.touches && 2 === this.last.touches.length) || this.clearTimer())
              : ((this.first = this.getEventInfo(a)), (a = this.single ? OpenLayers.Util.extend({}, a) : null), this.queuePotentialClick(a)));
  },
  queuePotentialClick: function (a) {
      this.timerId = window.setTimeout(OpenLayers.Function.bind(this.delayedCall, this, a), this.delay);
  },
  passesTolerance: function (a) {
      var b = !0;
      if (null != this.pixelTolerance && this.down && this.down.xy && (b = this.pixelTolerance >= this.down.xy.distanceTo(a.xy)) && this.touch && this.down.touches.length === this.last.touches.length) {
          a = 0;
          for (var c = this.down.touches.length; a < c; ++a)
              if (this.getTouchDistance(this.down.touches[a], this.last.touches[a]) > this.pixelTolerance) {
                  b = !1;
                  break;
              }
      }
      return b;
  },
  getTouchDistance: function (a, b) {
      return Math.sqrt(Math.pow(a.clientX - b.clientX, 2) + Math.pow(a.clientY - b.clientY, 2));
  },
  passesDblclickTolerance: function (a) {
      a = !0;
      this.down && this.first && (a = this.down.xy.distanceTo(this.first.xy) <= this.dblclickTolerance);
      return a;
  },
  clearTimer: function () {
      null != this.timerId && (window.clearTimeout(this.timerId), (this.timerId = null));
      null != this.rightclickTimerId && (window.clearTimeout(this.rightclickTimerId), (this.rightclickTimerId = null));
  },
  delayedCall: function (a) {
      this.timerId = null;
      a && this.callback("click", [a]);
  },
  getEventInfo: function (a) {
      var b;
      if (a.touches) {
          var c = a.touches.length;
          b = Array(c);
          for (var d, e = 0; e < c; e++) (d = a.touches[e]), (b[e] = { clientX: d.olClientX, clientY: d.olClientY });
      }
      return { xy: a.xy, touches: b };
  },
  deactivate: function () {
      var a = !1;
      OpenLayers.Handler.prototype.deactivate.apply(this, arguments) && (this.clearTimer(), (this.last = this.first = this.down = null), (a = !0));
      return a;
  },
  CLASS_NAME: "OpenLayers.Handler.Click",
});
OpenLayers.Handler.Drag = OpenLayers.Class(OpenLayers.Handler, {
  started: !1,
  stopDown: !0,
  dragging: !1,
  last: null,
  start: null,
  lastMoveEvt: null,
  oldOnselectstart: null,
  interval: 0,
  timeoutId: null,
  documentDrag: !1,
  documentEvents: null,
  initialize: function (a, b, c) {
      OpenLayers.Handler.prototype.initialize.apply(this, arguments);
      if (!0 === this.documentDrag) {
          var d = this;
          this._docMove = function (a) {
              d.mousemove({ xy: { x: a.clientX, y: a.clientY }, element: document });
          };
          this._docUp = function (a) {
              d.mouseup({ xy: { x: a.clientX, y: a.clientY } });
          };
      }
  },
  dragstart: function (a) {
      var b = !0;
      this.dragging = !1;
      this.checkModifiers(a) && (OpenLayers.Event.isLeftClick(a) || OpenLayers.Event.isSingleTouch(a))
          ? ((this.started = !0),
            (this.last = this.start = a.xy),
            OpenLayers.Element.addClass(this.map.viewPortDiv, "olDragDown"),
            this.down(a),
            this.callback("down", [a.xy]),
            OpenLayers.Event.preventDefault(a),
            this.oldOnselectstart || (this.oldOnselectstart = document.onselectstart ? document.onselectstart : OpenLayers.Function.True),
            (document.onselectstart = OpenLayers.Function.False),
            (b = !this.stopDown))
          : ((this.started = !1), (this.last = this.start = null));
      return b;
  },
  dragmove: function (a) {
      this.lastMoveEvt = a;
      !this.started ||
          this.timeoutId ||
          (a.xy.x == this.last.x && a.xy.y == this.last.y) ||
          (!0 === this.documentDrag && this.documentEvents && (a.element === document ? (this.adjustXY(a), this.setEvent(a)) : this.removeDocumentEvents()),
          0 < this.interval && (this.timeoutId = setTimeout(OpenLayers.Function.bind(this.removeTimeout, this), this.interval)),
          (this.dragging = !0),
          this.move(a),
          this.callback("move", [a.xy]),
          this.oldOnselectstart || ((this.oldOnselectstart = document.onselectstart), (document.onselectstart = OpenLayers.Function.False)),
          (this.last = a.xy));
      return !0;
  },
  dragend: function (a) {
      if (this.started) {
          !0 === this.documentDrag && this.documentEvents && (this.adjustXY(a), this.removeDocumentEvents());
          var b = this.start != this.last;
          this.dragging = this.started = !1;
          OpenLayers.Element.removeClass(this.map.viewPortDiv, "olDragDown");
          this.up(a);
          this.callback("up", [a.xy]);
          b && this.callback("done", [a.xy]);
          document.onselectstart = this.oldOnselectstart;
      }
      return !0;
  },
  down: function (a) {},
  move: function (a) {},
  up: function (a) {},
  out: function (a) {},
  mousedown: function (a) {
      return this.dragstart(a);
  },
  touchstart: function (a) {
      this.startTouch();
      return this.dragstart(a);
  },
  mousemove: function (a) {
      return this.dragmove(a);
  },
  touchmove: function (a) {
      return this.dragmove(a);
  },
  removeTimeout: function () {
      this.timeoutId = null;
      this.dragging && this.mousemove(this.lastMoveEvt);
  },
  mouseup: function (a) {
      return this.dragend(a);
  },
  touchend: function (a) {
      a.xy = this.last;
      return this.dragend(a);
  },
  mouseout: function (a) {
      if (this.started && OpenLayers.Util.mouseLeft(a, this.map.viewPortDiv))
          if (!0 === this.documentDrag) this.addDocumentEvents();
          else {
              var b = this.start != this.last;
              this.dragging = this.started = !1;
              OpenLayers.Element.removeClass(this.map.viewPortDiv, "olDragDown");
              this.out(a);
              this.callback("out", []);
              b && this.callback("done", [a.xy]);
              document.onselectstart && (document.onselectstart = this.oldOnselectstart);
          }
      return !0;
  },
  click: function (a) {
      return this.start == this.last;
  },
  activate: function () {
      var a = !1;
      OpenLayers.Handler.prototype.activate.apply(this, arguments) && ((this.dragging = !1), (a = !0));
      return a;
  },
  deactivate: function () {
      var a = !1;
      OpenLayers.Handler.prototype.deactivate.apply(this, arguments) && ((this.dragging = this.started = !1), (this.last = this.start = null), (a = !0), OpenLayers.Element.removeClass(this.map.viewPortDiv, "olDragDown"));
      return a;
  },
  adjustXY: function (a) {
      var b = OpenLayers.Util.pagePosition(this.map.viewPortDiv);
      a.xy.x -= b[0];
      a.xy.y -= b[1];
  },
  addDocumentEvents: function () {
      OpenLayers.Element.addClass(document.body, "olDragDown");
      this.documentEvents = !0;
      OpenLayers.Event.observe(document, "mousemove", this._docMove);
      OpenLayers.Event.observe(document, "mouseup", this._docUp);
  },
  removeDocumentEvents: function () {
      OpenLayers.Element.removeClass(document.body, "olDragDown");
      this.documentEvents = !1;
      OpenLayers.Event.stopObserving(document, "mousemove", this._docMove);
      OpenLayers.Event.stopObserving(document, "mouseup", this._docUp);
  },
  CLASS_NAME: "OpenLayers.Handler.Drag",
});
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,
  maximizeTitle: "",
  minimizeTitle: "",
  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 = 1e3;
      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.maximizeTitle && (this.maximizeDiv.title = this.maximizeTitle);
          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.minimizeTitle && (this.minimizeDiv.title = this.minimizeTitle);
          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());
          var 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 && (this.maximizeDiv.style.display = a ? "" : "none");
      this.minimizeDiv && (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.getMaxExtent(),
          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 (a) {
          this.handlers.drag.active || this.map.dragging || this.handlers.drag.activate();
      });
      this.rectEvents.register("mouseout", this, function (a) {
          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;
      a = this.ovmap.getProjection() != this.map.getProjection() ? this.map.getExtent().transform(this.map.getProjectionObject(), this.ovmap.getProjectionObject()) : this.map.getExtent();
      (a = this.getRectBoundsFromMapBounds(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);
      var 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 });
      var 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 = OpenLayers.Class({
  id: null,
  name: null,
  div: null,
  opacity: 1,
  alwaysInRange: null,
  RESOLUTION_PROPERTIES: "scales resolutions maxScale minScale maxResolution minResolution numZoomLevels maxZoomLevel".split(" "),
  events: null,
  map: null,
  isBaseLayer: !1,
  alpha: !1,
  displayInLayerSwitcher: !0,
  visibility: !0,
  attribution: null,
  inRange: !1,
  imageSize: null,
  options: null,
  eventListeners: null,
  gutter: 0,
  projection: null,
  units: null,
  scales: null,
  resolutions: null,
  maxExtent: null,
  minExtent: null,
  maxResolution: null,
  minResolution: null,
  numZoomLevels: null,
  minScale: null,
  maxScale: null,
  displayOutsideMaxExtent: !1,
  wrapDateLine: !1,
  metadata: null,
  initialize: function (a, b) {
      this.metadata = {};
      b = OpenLayers.Util.extend({}, b);
      null != this.alwaysInRange && (b.alwaysInRange = this.alwaysInRange);
      this.addOptions(b);
      this.name = a;
      if (
          null == this.id &&
          ((this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_")),
          (this.div = OpenLayers.Util.createDiv(this.id)),
          (this.div.style.width = "100%"),
          (this.div.style.height = "100%"),
          (this.div.dir = "ltr"),
          (this.events = new OpenLayers.Events(this, this.div)),
          this.eventListeners instanceof Object)
      )
          this.events.on(this.eventListeners);
  },
  destroy: function (a) {
      null == a && (a = !0);
      null != this.map && this.map.removeLayer(this, a);
      this.options = this.div = this.name = this.map = this.projection = null;
      this.events && (this.eventListeners && this.events.un(this.eventListeners), this.events.destroy());
      this.events = this.eventListeners = null;
  },
  clone: function (a) {
      null == a && (a = new OpenLayers.Layer(this.name, this.getOptions()));
      OpenLayers.Util.applyDefaults(a, this);
      a.map = null;
      return a;
  },
  getOptions: function () {
      var a = {},
          b;
      for (b in this.options) a[b] = this[b];
      return a;
  },
  setName: function (a) {
      a != this.name && ((this.name = a), null != this.map && this.map.events.triggerEvent("changelayer", { layer: this, property: "name" }));
  },
  addOptions: function (a, b) {
      null == this.options && (this.options = {});
      a &&
          ("string" == typeof a.projection && (a.projection = new OpenLayers.Projection(a.projection)),
          a.projection && OpenLayers.Util.applyDefaults(a, OpenLayers.Projection.defaults[a.projection.getCode()]),
          !a.maxExtent || a.maxExtent instanceof OpenLayers.Bounds || (a.maxExtent = new OpenLayers.Bounds(a.maxExtent)),
          !a.minExtent || a.minExtent instanceof OpenLayers.Bounds || (a.minExtent = new OpenLayers.Bounds(a.minExtent)));
      OpenLayers.Util.extend(this.options, a);
      OpenLayers.Util.extend(this, a);
      this.projection && this.projection.getUnits() && (this.units = this.projection.getUnits());
      if (this.map) {
          var c = this.map.getResolution(),
              d = this.RESOLUTION_PROPERTIES.concat(["projection", "units", "minExtent", "maxExtent"]),
              e;
          for (e in a)
              if (a.hasOwnProperty(e) && 0 <= OpenLayers.Util.indexOf(d, e)) {
                  this.initResolutions();
                  b && this.map.baseLayer === this && (this.map.setCenter(this.map.getCenter(), this.map.getZoomForResolution(c), !1, !0), this.map.events.triggerEvent("changebaselayer", { layer: this }));
                  break;
              }
      }
  },
  onMapResize: function () {},
  redraw: function () {
      var a = !1;
      if (this.map) {
          this.inRange = this.calculateInRange();
          var b = this.getExtent();
          b && this.inRange && this.visibility && (this.moveTo(b, !0, !1), this.events.triggerEvent("moveend", { zoomChanged: !0 }), (a = !0));
      }
      return a;
  },
  moveTo: function (a, b, c) {
      a = this.visibility;
      this.isBaseLayer || (a = a && this.inRange);
      this.display(a);
  },
  moveByPx: function (a, b) {},
  setMap: function (a) {
      null == this.map &&
          ((this.map = a),
          (this.maxExtent = this.maxExtent || this.map.maxExtent),
          (this.minExtent = this.minExtent || this.map.minExtent),
          (this.projection = this.projection || this.map.projection),
          "string" == typeof this.projection && (this.projection = new OpenLayers.Projection(this.projection)),
          (this.units = this.projection.getUnits() || this.units || this.map.units),
          this.initResolutions(),
          this.isBaseLayer || ((this.inRange = this.calculateInRange()), (this.div.style.display = this.visibility && this.inRange ? "" : "none")),
          this.setTileSize());
  },
  afterAdd: function () {},
  removeMap: function (a) {},
  getImageSize: function (a) {
      return this.imageSize || this.tileSize;
  },
  setTileSize: function (a) {
      this.tileSize = a = a ? a : this.tileSize ? this.tileSize : this.map.getTileSize();
      this.gutter && (this.imageSize = new OpenLayers.Size(a.w + 2 * this.gutter, a.h + 2 * this.gutter));
  },
  getVisibility: function () {
      return this.visibility;
  },
  setVisibility: function (a) {
      a != this.visibility &&
          ((this.visibility = a), this.display(a), this.redraw(), null != this.map && this.map.events.triggerEvent("changelayer", { layer: this, property: "visibility" }), this.events.triggerEvent("visibilitychanged"));
  },
  display: function (a) {
      a != ("none" != this.div.style.display) && (this.div.style.display = a && this.calculateInRange() ? "block" : "none");
  },
  calculateInRange: function () {
      var a = !1;
      this.alwaysInRange ? (a = !0) : this.map && ((a = this.map.getResolution()), (a = a >= this.minResolution && a <= this.maxResolution));
      return a;
  },
  setIsBaseLayer: function (a) {
      a != this.isBaseLayer && ((this.isBaseLayer = a), null != this.map && this.map.events.triggerEvent("changebaselayer", { layer: this }));
  },
  initResolutions: function () {
      var a,
          b,
          c,
          d = {},
          e = !0;
      a = 0;
      for (b = this.RESOLUTION_PROPERTIES.length; a < b; a++) (c = this.RESOLUTION_PROPERTIES[a]), (d[c] = this.options[c]), e && this.options[c] && (e = !1);
      null == this.options.alwaysInRange && (this.alwaysInRange = e);
      null == d.resolutions && (d.resolutions = this.resolutionsFromScales(d.scales));
      null == d.resolutions && (d.resolutions = this.calculateResolutions(d));
      if (null == d.resolutions) {
          a = 0;
          for (b = this.RESOLUTION_PROPERTIES.length; a < b; a++) (c = this.RESOLUTION_PROPERTIES[a]), (d[c] = null != this.options[c] ? this.options[c] : this.map[c]);
          null == d.resolutions && (d.resolutions = this.resolutionsFromScales(d.scales));
          null == d.resolutions && (d.resolutions = this.calculateResolutions(d));
      }
      var f;
      this.options.maxResolution && "auto" !== this.options.maxResolution && (f = this.options.maxResolution);
      this.options.minScale && (f = OpenLayers.Util.getResolutionFromScale(this.options.minScale, this.units));
      var g;
      this.options.minResolution && "auto" !== this.options.minResolution && (g = this.options.minResolution);
      this.options.maxScale && (g = OpenLayers.Util.getResolutionFromScale(this.options.maxScale, this.units));
      d.resolutions &&
          (d.resolutions.sort(function (a, b) {
              return b - a;
          }),
          f || (f = d.resolutions[0]),
          g || (g = d.resolutions[d.resolutions.length - 1]));
      if ((this.resolutions = d.resolutions)) {
          b = this.resolutions.length;
          this.scales = Array(b);
          for (a = 0; a < b; a++) this.scales[a] = OpenLayers.Util.getScaleFromResolution(this.resolutions[a], this.units);
          this.numZoomLevels = b;
      }
      if ((this.minResolution = g)) this.maxScale = OpenLayers.Util.getScaleFromResolution(g, this.units);
      if ((this.maxResolution = f)) this.minScale = OpenLayers.Util.getScaleFromResolution(f, this.units);
  },
  resolutionsFromScales: function (a) {
      if (null != a) {
          var b, c, d;
          d = a.length;
          b = Array(d);
          for (c = 0; c < d; c++) b[c] = OpenLayers.Util.getResolutionFromScale(a[c], this.units);
          return b;
      }
  },
  calculateResolutions: function (a) {
      var b,
          c,
          d = a.maxResolution;
      null != a.minScale
          ? (d = OpenLayers.Util.getResolutionFromScale(a.minScale, this.units))
          : "auto" == d && null != this.maxExtent && ((b = this.map.getSize()), (c = this.maxExtent.getWidth() / b.w), (b = this.maxExtent.getHeight() / b.h), (d = Math.max(c, b)));
      c = a.minResolution;
      null != a.maxScale
          ? (c = OpenLayers.Util.getResolutionFromScale(a.maxScale, this.units))
          : "auto" == a.minResolution && null != this.minExtent && ((b = this.map.getSize()), (c = this.minExtent.getWidth() / b.w), (b = this.minExtent.getHeight() / b.h), (c = Math.max(c, b)));
      "number" !== typeof d && "number" !== typeof c && null != this.maxExtent && ((d = this.map.getTileSize()), (d = Math.max(this.maxExtent.getWidth() / d.w, this.maxExtent.getHeight() / d.h)));
      b = a.maxZoomLevel;
      a = a.numZoomLevels;
      "number" === typeof c && "number" === typeof d && void 0 === a ? (a = Math.floor(Math.log(d / c) / Math.log(2)) + 1) : void 0 === a && null != b && (a = b + 1);
      if (!("number" !== typeof a || 0 >= a || ("number" !== typeof d && "number" !== typeof c))) {
          b = Array(a);
          var e = 2;
          "number" == typeof c && "number" == typeof d && (e = Math.pow(d / c, 1 / (a - 1)));
          var f;
          if ("number" === typeof d) for (f = 0; f < a; f++) b[f] = d / Math.pow(e, f);
          else for (f = 0; f < a; f++) b[a - 1 - f] = c * Math.pow(e, f);
          return b;
      }
  },
  getResolution: function () {
      var a = this.map.getZoom();
      return this.getResolutionForZoom(a);
  },
  getExtent: function () {
      return this.map.calculateBounds();
  },
  getZoomForExtent: function (a, b) {
      var c = this.map.getSize(),
          c = Math.max(a.getWidth() / c.w, a.getHeight() / c.h);
      return this.getZoomForResolution(c, b);
  },
  getDataExtent: function () {},
  getResolutionForZoom: function (a) {
      a = Math.max(0, Math.min(a, this.resolutions.length - 1));
      if (this.map.fractionalZoom) {
          var b = Math.floor(a),
              c = Math.ceil(a);
          a = this.resolutions[b] - (a - b) * (this.resolutions[b] - this.resolutions[c]);
      } else a = this.resolutions[Math.round(a)];
      return a;
  },
  getZoomForResolution: function (a, b) {
      var c, d;
      if (this.map.fractionalZoom) {
          var e = 0,
              f = this.resolutions[e],
              g = this.resolutions[this.resolutions.length - 1],
              h;
          c = 0;
          for (d = this.resolutions.length; c < d; ++c)
              if (((h = this.resolutions[c]), h >= a && ((f = h), (e = c)), h <= a)) {
                  g = h;
                  break;
              }
          c = f - g;
          c = 0 < c ? e + (f - a) / c : e;
      } else {
          f = Number.POSITIVE_INFINITY;
          c = 0;
          for (d = this.resolutions.length; c < d; c++)
              if (b) {
                  e = Math.abs(this.resolutions[c] - a);
                  if (e > f) break;
                  f = e;
              } else if (this.resolutions[c] < a) break;
          c = Math.max(0, c - 1);
      }
      return c;
  },
  getLonLatFromViewPortPx: function (a) {
      var b = null,
          c = this.map;
      if (null != a && c.minPx) {
          var b = c.getResolution(),
              d = c.getMaxExtent({ restricted: !0 }),
              b = new OpenLayers.LonLat((a.x - c.minPx.x) * b + d.left, (c.minPx.y - a.y) * b + d.top);
          this.wrapDateLine && (b = b.wrapDateLine(this.maxExtent));
      }
      return b;
  },
  getViewPortPxFromLonLat: function (a, b) {
      var c = null;
      null != a && ((b = b || this.map.getResolution()), (c = this.map.calculateBounds(null, b)), (c = new OpenLayers.Pixel((1 / b) * (a.lon - c.left), (1 / b) * (c.top - a.lat))));
      return c;
  },
  setOpacity: function (a) {
      if (a != this.opacity) {
          this.opacity = a;
          for (var b = this.div.childNodes, c = 0, d = b.length; c < d; ++c) {
              var e = b[c].firstChild || b[c],
                  f = b[c].lastChild;
              f && "iframe" === f.nodeName.toLowerCase() && (e = f.parentNode);
              OpenLayers.Util.modifyDOMElement(e, null, null, null, null, null, null, a);
          }
          null != this.map && this.map.events.triggerEvent("changelayer", { layer: this, property: "opacity" });
      }
  },
  getZIndex: function () {
      return this.div.style.zIndex;
  },
  setZIndex: function (a) {
      this.div.style.zIndex = a;
  },
  adjustBounds: function (a) {
      if (this.gutter) {
          var b = this.gutter * this.map.getResolution();
          a = new OpenLayers.Bounds(a.left - b, a.bottom - b, a.right + b, a.top + b);
      }
      this.wrapDateLine && ((b = { rightTolerance: this.getResolution(), leftTolerance: this.getResolution() }), (a = a.wrapDateLine(this.maxExtent, b)));
      return a;
  },
  CLASS_NAME: "OpenLayers.Layer",
});
OpenLayers.Layer.SphericalMercator = {
  getExtent: function () {
      var a = null;
      return (a = this.sphericalMercator ? this.map.calculateBounds() : OpenLayers.Layer.FixedZoomLevels.prototype.getExtent.apply(this));
  },
  getLonLatFromViewPortPx: function (a) {
      return OpenLayers.Layer.prototype.getLonLatFromViewPortPx.apply(this, arguments);
  },
  getViewPortPxFromLonLat: function (a) {
      return OpenLayers.Layer.prototype.getViewPortPxFromLonLat.apply(this, arguments);
  },
  initMercatorParameters: function () {
      this.RESOLUTIONS = [];
      for (var a = 0; a <= this.MAX_ZOOM_LEVEL; ++a) this.RESOLUTIONS[a] = 156543.03390625 / Math.pow(2, a);
      this.units = "m";
      this.projection = this.projection || "EPSG:900913";
  },
  forwardMercator: (function () {
      var a = new OpenLayers.Projection("EPSG:4326"),
          b = new OpenLayers.Projection("EPSG:900913");
      return function (c, d) {
          var e = OpenLayers.Projection.transform({ x: c, y: d }, a, b);
          return new OpenLayers.LonLat(e.x, e.y);
      };
  })(),
  inverseMercator: (function () {
      var a = new OpenLayers.Projection("EPSG:4326"),
          b = new OpenLayers.Projection("EPSG:900913");
      return function (c, d) {
          var e = OpenLayers.Projection.transform({ x: c, y: d }, b, a);
          return new OpenLayers.LonLat(e.x, e.y);
      };
  })(),
};
OpenLayers.Layer.EventPane = OpenLayers.Class(OpenLayers.Layer, {
  smoothDragPan: !0,
  isBaseLayer: !0,
  isFixed: !0,
  pane: null,
  mapObject: null,
  initialize: function (a, b) {
      OpenLayers.Layer.prototype.initialize.apply(this, arguments);
      null == this.pane && (this.pane = OpenLayers.Util.createDiv(this.div.id + "_EventPane"));
  },
  destroy: function () {
      this.pane = this.mapObject = null;
      OpenLayers.Layer.prototype.destroy.apply(this, arguments);
  },
  setMap: function (a) {
      OpenLayers.Layer.prototype.setMap.apply(this, arguments);
      this.pane.style.zIndex = parseInt(this.div.style.zIndex) + 1;
      this.pane.style.display = this.div.style.display;
      this.pane.style.width = "100%";
      this.pane.style.height = "100%";
      "msie" == OpenLayers.BROWSER_NAME && (this.pane.style.background = "url(" + OpenLayers.Util.getImageLocation("blank.gif") + ")");
      this.isFixed ? this.map.viewPortDiv.appendChild(this.pane) : this.map.layerContainerDiv.appendChild(this.pane);
      this.loadMapObject();
      null == this.mapObject && this.loadWarningMessage();
  },
  removeMap: function (a) {
      this.pane && this.pane.parentNode && this.pane.parentNode.removeChild(this.pane);
      OpenLayers.Layer.prototype.removeMap.apply(this, arguments);
  },
  loadWarningMessage: function () {
      this.div.style.backgroundColor = "darkblue";
      var a = this.map.getSize(),
          b = Math.min(a.w, 300),
          c = Math.min(a.h, 200),
          b = new OpenLayers.Size(b, c),
          a = new OpenLayers.Pixel(a.w / 2, a.h / 2).add(-b.w / 2, -b.h / 2),
          a = OpenLayers.Util.createDiv(this.name + "_warning", a, b, null, null, null, "auto");
      a.style.padding = "7px";
      a.style.backgroundColor = "yellow";
      a.innerHTML = this.getWarningHTML();
      this.div.appendChild(a);
  },
  getWarningHTML: function () {
      return "";
  },
  display: function (a) {
      OpenLayers.Layer.prototype.display.apply(this, arguments);
      this.pane.style.display = this.div.style.display;
  },
  setZIndex: function (a) {
      OpenLayers.Layer.prototype.setZIndex.apply(this, arguments);
      this.pane.style.zIndex = parseInt(this.div.style.zIndex) + 1;
  },
  moveByPx: function (a, b) {
      OpenLayers.Layer.prototype.moveByPx.apply(this, arguments);
      this.dragPanMapObject ? this.dragPanMapObject(a, -b) : this.moveTo(this.map.getCachedCenter());
  },
  moveTo: function (a, b, c) {
      OpenLayers.Layer.prototype.moveTo.apply(this, arguments);
      if (null != this.mapObject) {
          var d = this.map.getCenter(),
              e = this.map.getZoom();
          if (null != d) {
              var f = this.getMapObjectCenter(),
                  f = this.getOLLonLatFromMapObjectLonLat(f),
                  g = this.getMapObjectZoom(),
                  g = this.getOLZoomFromMapObjectZoom(g);
              (d.equals(f) && e == g) ||
                  (!b && f && this.dragPanMapObject && this.smoothDragPan
                      ? ((e = this.map.getViewPortPxFromLonLat(f)), (d = this.map.getViewPortPxFromLonLat(d)), this.dragPanMapObject(d.x - e.x, e.y - d.y))
                      : ((d = this.getMapObjectLonLatFromOLLonLat(d)), (e = this.getMapObjectZoomFromOLZoom(e)), this.setMapObjectCenter(d, e, c)));
          }
      }
  },
  getLonLatFromViewPortPx: function (a) {
      var b = null;
      null != this.mapObject && null != this.getMapObjectCenter() && ((a = this.getMapObjectPixelFromOLPixel(a)), (a = this.getMapObjectLonLatFromMapObjectPixel(a)), (b = this.getOLLonLatFromMapObjectLonLat(a)));
      return b;
  },
  getViewPortPxFromLonLat: function (a) {
      var b = null;
      null != this.mapObject && null != this.getMapObjectCenter() && ((a = this.getMapObjectLonLatFromOLLonLat(a)), (a = this.getMapObjectPixelFromMapObjectLonLat(a)), (b = this.getOLPixelFromMapObjectPixel(a)));
      return b;
  },
  getOLLonLatFromMapObjectLonLat: function (a) {
      var b = null;
      null != a && ((b = this.getLongitudeFromMapObjectLonLat(a)), (a = this.getLatitudeFromMapObjectLonLat(a)), (b = new OpenLayers.LonLat(b, a)));
      return b;
  },
  getMapObjectLonLatFromOLLonLat: function (a) {
      var b = null;
      null != a && (b = this.getMapObjectLonLatFromLonLat(a.lon, a.lat));
      return b;
  },
  getOLPixelFromMapObjectPixel: function (a) {
      var b = null;
      null != a && ((b = this.getXFromMapObjectPixel(a)), (a = this.getYFromMapObjectPixel(a)), (b = new OpenLayers.Pixel(b, a)));
      return b;
  },
  getMapObjectPixelFromOLPixel: function (a) {
      var b = null;
      null != a && (b = this.getMapObjectPixelFromXY(a.x, a.y));
      return b;
  },
  CLASS_NAME: "OpenLayers.Layer.EventPane",
});
OpenLayers.Layer.FixedZoomLevels = OpenLayers.Class({
  initialize: function () {},
  initResolutions: function () {
      for (var a = ["minZoomLevel", "maxZoomLevel", "numZoomLevels"], b = 0, c = a.length; b < c; b++) {
          var d = a[b];
          this[d] = null != this.options[d] ? this.options[d] : this.map[d];
      }
      if (null == this.minZoomLevel || this.minZoomLevel < this.MIN_ZOOM_LEVEL) this.minZoomLevel = this.MIN_ZOOM_LEVEL;
      a = this.MAX_ZOOM_LEVEL - this.minZoomLevel + 1;
      b = (null == this.options.numZoomLevels && null != this.options.maxZoomLevel) || (null == this.numZoomLevels && null != this.maxZoomLevel) ? this.maxZoomLevel - this.minZoomLevel + 1 : this.numZoomLevels;
      this.numZoomLevels = null != b ? Math.min(b, a) : a;
      this.maxZoomLevel = this.minZoomLevel + this.numZoomLevels - 1;
      if (null != this.RESOLUTIONS) {
          a = 0;
          this.resolutions = [];
          for (b = this.minZoomLevel; b <= this.maxZoomLevel; b++) this.resolutions[a++] = this.RESOLUTIONS[b];
          this.maxResolution = this.resolutions[0];
          this.minResolution = this.resolutions[this.resolutions.length - 1];
      }
  },
  getResolution: function () {
      if (null != this.resolutions) return OpenLayers.Layer.prototype.getResolution.apply(this, arguments);
      var a = null,
          b = this.map.getSize(),
          c = this.getExtent();
      null != b && null != c && (a = Math.max(c.getWidth() / b.w, c.getHeight() / b.h));
      return a;
  },
  getExtent: function () {
      var a = this.map.getSize(),
          b = this.getLonLatFromViewPortPx({ x: 0, y: 0 }),
          a = this.getLonLatFromViewPortPx({ x: a.w, y: a.h });
      return null != b && null != a ? new OpenLayers.Bounds(b.lon, a.lat, a.lon, b.lat) : null;
  },
  getZoomForResolution: function (a) {
      if (null != this.resolutions) return OpenLayers.Layer.prototype.getZoomForResolution.apply(this, arguments);
      var b = OpenLayers.Layer.prototype.getExtent.apply(this, []);
      return this.getZoomForExtent(b);
  },
  getOLZoomFromMapObjectZoom: function (a) {
      var b = null;
      null != a && ((b = a - this.minZoomLevel), this.map.baseLayer !== this && (b = this.map.baseLayer.getZoomForResolution(this.getResolutionForZoom(b))));
      return b;
  },
  getMapObjectZoomFromOLZoom: function (a) {
      var b = null;
      null != a && ((b = a + this.minZoomLevel), this.map.baseLayer !== this && (b = this.getZoomForResolution(this.map.baseLayer.getResolutionForZoom(b))));
      return b;
  },
  CLASS_NAME: "OpenLayers.Layer.FixedZoomLevels",
});
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,
      6.866455078125e-4,
      3.4332275390625e-4,
      1.71661376953125e-4,
      8.58306884765625e-5,
      4.291534423828125e-5,
      2.145767211914062e-5,
      1.072883605957031e-5,
      5.36441802978515e-6,
      2.68220901489257e-6,
      1.341104507446289e-6,
      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);
          this.mapObject && window.google && google.maps && google.maps.event && google.maps.event.clearListeners && google.maps.event.clearListeners(this.mapObject, "tilesloaded");
      }
  },
  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.XML = OpenLayers.Class(OpenLayers.Format, {
  namespaces: null,
  namespaceAlias: null,
  defaultPrefix: null,
  readers: {},
  writers: {},
  xmldom: null,
  initialize: function (a) {
      window.ActiveXObject && (this.xmldom = new ActiveXObject("Microsoft.XMLDOM"));
      OpenLayers.Format.prototype.initialize.apply(this, [a]);
      this.namespaces = OpenLayers.Util.extend({}, this.namespaces);
      this.namespaceAlias = {};
      for (var b in this.namespaces) this.namespaceAlias[this.namespaces[b]] = b;
  },
  destroy: function () {
      this.xmldom = null;
      OpenLayers.Format.prototype.destroy.apply(this, arguments);
  },
  setNamespace: function (a, b) {
      this.namespaces[a] = b;
      this.namespaceAlias[b] = a;
  },
  read: function (a) {
      var b = a.indexOf("<");
      0 < b && (a = a.substring(b));
      b = OpenLayers.Util.Try(
          OpenLayers.Function.bind(function () {
              var b;
              b = window.ActiveXObject && !this.xmldom ? new ActiveXObject("Microsoft.XMLDOM") : this.xmldom;
              b.loadXML(a);
              return b;
          }, this),
          function () {
              return new DOMParser().parseFromString(a, "text/xml");
          },
          function () {
              var b = new XMLHttpRequest();
              b.open("GET", "data:text/xml;charset=utf-8," + encodeURIComponent(a), !1);
              b.overrideMimeType && b.overrideMimeType("text/xml");
              b.send(null);
              return b.responseXML;
          }
      );
      this.keepData && (this.data = b);
      return b;
  },
  write: function (a) {
      if (this.xmldom) a = a.xml;
      else {
          var b = new XMLSerializer();
          if (1 == a.nodeType) {
              var c = document.implementation.createDocument("", "", null);
              c.importNode && (a = c.importNode(a, !0));
              c.appendChild(a);
              a = b.serializeToString(c);
          } else a = b.serializeToString(a);
      }
      return a;
  },
  createElementNS: function (a, b) {
      return this.xmldom ? ("string" == typeof a ? this.xmldom.createNode(1, b, a) : this.xmldom.createNode(1, b, "")) : document.createElementNS(a, b);
  },
  createDocumentFragment: function () {
      return this.xmldom ? this.xmldom.createDocumentFragment() : document.createDocumentFragment();
  },
  createTextNode: function (a) {
      "string" !== typeof a && (a = String(a));
      return this.xmldom ? this.xmldom.createTextNode(a) : document.createTextNode(a);
  },
  getElementsByTagNameNS: function (a, b, c) {
      var d = [];
      if (a.getElementsByTagNameNS) d = a.getElementsByTagNameNS(b, c);
      else {
          a = a.getElementsByTagName("*");
          for (var e, f, g = 0, h = a.length; g < h; ++g) if (((e = a[g]), (f = e.prefix ? e.prefix + ":" + c : c), "*" == c || f == e.nodeName)) ("*" != b && b != e.namespaceURI) || d.push(e);
      }
      return d;
  },
  getAttributeNodeNS: function (a, b, c) {
      var d = null;
      if (a.getAttributeNodeNS) d = a.getAttributeNodeNS(b, c);
      else {
          a = a.attributes;
          for (var e, f, g = 0, h = a.length; g < h; ++g)
              if (((e = a[g]), e.namespaceURI == b && ((f = e.prefix ? e.prefix + ":" + c : c), f == e.nodeName))) {
                  d = e;
                  break;
              }
      }
      return d;
  },
  getAttributeNS: function (a, b, c) {
      var d = "";
      if (a.getAttributeNS) d = a.getAttributeNS(b, c) || "";
      else if ((a = this.getAttributeNodeNS(a, b, c))) d = a.nodeValue;
      return d;
  },
  getChildValue: function (a, b) {
      var c = b || "";
      if (a)
          for (var d = a.firstChild; d; d = d.nextSibling)
              switch (d.nodeType) {
                  case 3:
                  case 4:
                      c += d.nodeValue;
              }
      return c;
  },
  isSimpleContent: function (a) {
      var b = !0;
      for (a = a.firstChild; a; a = a.nextSibling)
          if (1 === a.nodeType) {
              b = !1;
              break;
          }
      return b;
  },
  contentType: function (a) {
      var b = !1,
          c = !1,
          d = OpenLayers.Format.XML.CONTENT_TYPE.EMPTY;
      for (a = a.firstChild; a; a = a.nextSibling) {
          switch (a.nodeType) {
              case 1:
                  c = !0;
                  break;
              case 8:
                  break;
              default:
                  b = !0;
          }
          if (c && b) break;
      }
      if (c && b) d = OpenLayers.Format.XML.CONTENT_TYPE.MIXED;
      else {
          if (c) return OpenLayers.Format.XML.CONTENT_TYPE.COMPLEX;
          if (b) return OpenLayers.Format.XML.CONTENT_TYPE.SIMPLE;
      }
      return d;
  },
  hasAttributeNS: function (a, b, c) {
      var d = !1;
      return (d = a.hasAttributeNS ? a.hasAttributeNS(b, c) : !!this.getAttributeNodeNS(a, b, c));
  },
  setAttributeNS: function (a, b, c, d) {
      if (a.setAttributeNS) a.setAttributeNS(b, c, d);
      else if (this.xmldom) b ? ((b = a.ownerDocument.createNode(2, c, b)), (b.nodeValue = d), a.setAttributeNode(b)) : a.setAttribute(c, d);
      else throw "setAttributeNS not implemented";
  },
  createElementNSPlus: function (a, b) {
      b = b || {};
      var c = b.uri || this.namespaces[b.prefix];
      c || ((c = a.indexOf(":")), (c = this.namespaces[a.substring(0, c)]));
      c || (c = this.namespaces[this.defaultPrefix]);
      c = this.createElementNS(c, a);
      b.attributes && this.setAttributes(c, b.attributes);
      var d = b.value;
      null != d && c.appendChild(this.createTextNode(d));
      return c;
  },
  setAttributes: function (a, b) {
      var c, d, e;
      for (e in b) null != b[e] && b[e].toString && ((c = b[e].toString()), (d = this.namespaces[e.substring(0, e.indexOf(":"))] || null), this.setAttributeNS(a, d, e, c));
  },
  readNode: function (a, b) {
      b || (b = {});
      var c = this.readers[a.namespaceURI ? this.namespaceAlias[a.namespaceURI] : this.defaultPrefix];
      if (c) {
          var d = a.localName || a.nodeName.split(":").pop();
          (c = c[d] || c["*"]) && c.apply(this, [a, b]);
      }
      return b;
  },
  readChildNodes: function (a, b) {
      b || (b = {});
      for (var c = a.childNodes, d, e = 0, f = c.length; e < f; ++e) (d = c[e]), 1 == d.nodeType && this.readNode(d, b);
      return b;
  },
  writeNode: function (a, b, c) {
      var d,
          e = a.indexOf(":");
      0 < e ? ((d = a.substring(0, e)), (a = a.substring(e + 1))) : (d = c ? this.namespaceAlias[c.namespaceURI] : this.defaultPrefix);
      b = this.writers[d][a].apply(this, [b]);
      c && c.appendChild(b);
      return b;
  },
  getChildEl: function (a, b, c) {
      return a && this.getThisOrNextEl(a.firstChild, b, c);
  },
  getNextEl: function (a, b, c) {
      return a && this.getThisOrNextEl(a.nextSibling, b, c);
  },
  getThisOrNextEl: function (a, b, c) {
      a: for (; a; a = a.nextSibling)
          switch (a.nodeType) {
              case 1:
                  if (!((b && b !== (a.localName || a.nodeName.split(":").pop())) || (c && c !== a.namespaceURI))) break a;
                  a = null;
                  break a;
              case 3:
                  if (/^\s*$/.test(a.nodeValue)) break;
              case 4:
              case 6:
              case 12:
              case 10:
              case 11:
                  a = null;
                  break a;
          }
      return a || null;
  },
  lookupNamespaceURI: function (a, b) {
      var c = null;
      if (a)
          if (a.lookupNamespaceURI) c = a.lookupNamespaceURI(b);
          else
              a: switch (a.nodeType) {
                  case 1:
                      if (null !== a.namespaceURI && a.prefix === b) {
                          c = a.namespaceURI;
                          break a;
                      }
                      if ((c = a.attributes.length))
                          for (var d, e = 0; e < c; ++e)
                              if (((d = a.attributes[e]), "xmlns" === d.prefix && d.name === "xmlns:" + b)) {
                                  c = d.value || null;
                                  break a;
                              } else if ("xmlns" === d.name && null === b) {
                                  c = d.value || null;
                                  break a;
                              }
                      c = this.lookupNamespaceURI(a.parentNode, b);
                      break a;
                  case 2:
                      c = this.lookupNamespaceURI(a.ownerElement, b);
                      break a;
                  case 9:
                      c = this.lookupNamespaceURI(a.documentElement, b);
                      break a;
                  case 6:
                  case 12:
                  case 10:
                  case 11:
                      break a;
                  default:
                      c = this.lookupNamespaceURI(a.parentNode, b);
              }
      return c;
  },
  getXMLDoc: function () {
      OpenLayers.Format.XML.document ||
          this.xmldom ||
          (document.implementation && document.implementation.createDocument
              ? (OpenLayers.Format.XML.document = document.implementation.createDocument("", "", null))
              : !this.xmldom && window.ActiveXObject && (this.xmldom = new ActiveXObject("Microsoft.XMLDOM")));
      return OpenLayers.Format.XML.document || this.xmldom;
  },
  CLASS_NAME: "OpenLayers.Format.XML",
});
OpenLayers.Format.XML.CONTENT_TYPE = { EMPTY: 0, SIMPLE: 1, COMPLEX: 2, MIXED: 3 };
OpenLayers.Format.XML.lookupNamespaceURI = OpenLayers.Function.bind(OpenLayers.Format.XML.prototype.lookupNamespaceURI, OpenLayers.Format.XML.prototype);
OpenLayers.Format.XML.document = null;
OpenLayers.Format.WFST = function (a) {
  a = OpenLayers.Util.applyDefaults(a, OpenLayers.Format.WFST.DEFAULTS);
  var 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.Feature = OpenLayers.Class({
  layer: null,
  id: null,
  lonlat: null,
  data: null,
  marker: null,
  popupClass: null,
  popup: null,
  initialize: function (a, b, c) {
      this.layer = a;
      this.lonlat = b;
      this.data = null != c ? c : {};
      this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_");
  },
  destroy: function () {
      null != this.layer && null != this.layer.map && null != this.popup && this.layer.map.removePopup(this.popup);
      null != this.layer && null != this.marker && this.layer.removeMarker(this.marker);
      this.data = this.lonlat = this.id = this.layer = null;
      null != this.marker && (this.destroyMarker(this.marker), (this.marker = null));
      null != this.popup && (this.destroyPopup(this.popup), (this.popup = null));
  },
  onScreen: function () {
      var a = !1;
      null != this.layer && null != this.layer.map && (a = this.layer.map.getExtent().containsLonLat(this.lonlat));
      return a;
  },
  createMarker: function () {
      null != this.lonlat && (this.marker = new OpenLayers.Marker(this.lonlat, this.data.icon));
      return this.marker;
  },
  destroyMarker: function () {
      this.marker.destroy();
  },
  createPopup: function (a) {
      null != this.lonlat &&
          (this.popup || (this.popup = new (this.popupClass ? this.popupClass : OpenLayers.Popup.Anchored)(this.id + "_popup", this.lonlat, this.data.popupSize, this.data.popupContentHTML, this.marker ? this.marker.icon : null, a)),
          null != this.data.overflow && (this.popup.contentDiv.style.overflow = this.data.overflow),
          (this.popup.feature = this));
      return this.popup;
  },
  destroyPopup: function () {
      this.popup && ((this.popup.feature = null), this.popup.destroy(), (this.popup = null));
  },
  CLASS_NAME: "OpenLayers.Feature",
});
OpenLayers.State = { UNKNOWN: "Unknown", INSERT: "Insert", UPDATE: "Update", DELETE: "Delete" };
OpenLayers.Feature.Vector = OpenLayers.Class(OpenLayers.Feature, {
  fid: null,
  geometry: null,
  attributes: null,
  bounds: null,
  state: null,
  style: null,
  url: null,
  renderIntent: "default",
  modified: null,
  initialize: function (a, b, c) {
      OpenLayers.Feature.prototype.initialize.apply(this, [null, null, b]);
      this.lonlat = null;
      this.geometry = a ? a : null;
      this.state = null;
      this.attributes = {};
      b && (this.attributes = OpenLayers.Util.extend(this.attributes, b));
      this.style = c ? c : null;
  },
  destroy: function () {
      this.layer && (this.layer.removeFeatures(this), (this.layer = null));
      this.modified = this.geometry = null;
      OpenLayers.Feature.prototype.destroy.apply(this, arguments);
  },
  clone: function () {
      return new OpenLayers.Feature.Vector(this.geometry ? this.geometry.clone() : null, this.attributes, this.style);
  },
  onScreen: function (a) {
      var b = !1;
      this.layer && this.layer.map && ((b = this.layer.map.getExtent()), a ? ((a = this.geometry.getBounds()), (b = b.intersectsBounds(a))) : (b = b.toGeometry().intersects(this.geometry)));
      return b;
  },
  getVisibility: function () {
      return !(
          (this.style && "none" == this.style.display) ||
          !this.layer ||
          (this.layer && this.layer.styleMap && "none" == this.layer.styleMap.createSymbolizer(this, this.renderIntent).display) ||
          (this.layer && !this.layer.getVisibility())
      );
  },
  createMarker: function () {
      return null;
  },
  destroyMarker: function () {},
  createPopup: function () {
      return null;
  },
  atPoint: function (a, b, c) {
      var d = !1;
      this.geometry && (d = this.geometry.atPoint(a, b, c));
      return d;
  },
  destroyPopup: function () {},
  move: function (a) {
      if (this.layer && this.geometry.move) {
          a = "OpenLayers.LonLat" == a.CLASS_NAME ? this.layer.getViewPortPxFromLonLat(a) : a;
          var b = this.layer.getViewPortPxFromLonLat(this.geometry.getBounds().getCenterLonLat()),
              c = this.layer.map.getResolution();
          this.geometry.move(c * (a.x - b.x), c * (b.y - a.y));
          this.layer.drawFeature(this);
          return b;
      }
  },
  toState: function (a) {
      if (a == OpenLayers.State.UPDATE)
          switch (this.state) {
              case OpenLayers.State.UNKNOWN:
              case OpenLayers.State.DELETE:
                  this.state = a;
          }
      else if (a == OpenLayers.State.INSERT)
          switch (this.state) {
              case OpenLayers.State.UNKNOWN:
                  break;
              default:
                  this.state = a;
          }
      else if (a == OpenLayers.State.DELETE)
          switch (this.state) {
              case OpenLayers.State.UNKNOWN:
              case OpenLayers.State.UPDATE:
                  this.state = a;
          }
      else a == OpenLayers.State.UNKNOWN && (this.state = a);
  },
  CLASS_NAME: "OpenLayers.Feature.Vector",
});
OpenLayers.Feature.Vector.style = {
  default: {
      fillColor: "#ee9900",
      fillOpacity: 0.4,
      hoverFillColor: "white",
      hoverFillOpacity: 0.8,
      strokeColor: "#ee9900",
      strokeOpacity: 1,
      strokeWidth: 1,
      strokeLinecap: "round",
      strokeDashstyle: "solid",
      hoverStrokeColor: "red",
      hoverStrokeOpacity: 1,
      hoverStrokeWidth: 0.2,
      pointRadius: 6,
      hoverPointRadius: 1,
      hoverPointUnit: "%",
      pointerEvents: "visiblePainted",
      cursor: "inherit",
      fontColor: "#000000",
      labelAlign: "cm",
      labelOutlineColor: "white",
      labelOutlineWidth: 3,
  },
  select: {
      fillColor: "blue",
      fillOpacity: 0.4,
      hoverFillColor: "white",
      hoverFillOpacity: 0.8,
      strokeColor: "blue",
      strokeOpacity: 1,
      strokeWidth: 2,
      strokeLinecap: "round",
      strokeDashstyle: "solid",
      hoverStrokeColor: "red",
      hoverStrokeOpacity: 1,
      hoverStrokeWidth: 0.2,
      pointRadius: 6,
      hoverPointRadius: 1,
      hoverPointUnit: "%",
      pointerEvents: "visiblePainted",
      cursor: "pointer",
      fontColor: "#000000",
      labelAlign: "cm",
      labelOutlineColor: "white",
      labelOutlineWidth: 3,
  },
  temporary: {
      fillColor: "#66cccc",
      fillOpacity: 0.2,
      hoverFillColor: "white",
      hoverFillOpacity: 0.8,
      strokeColor: "#66cccc",
      strokeOpacity: 1,
      strokeLinecap: "round",
      strokeWidth: 2,
      strokeDashstyle: "solid",
      hoverStrokeColor: "red",
      hoverStrokeOpacity: 1,
      hoverStrokeWidth: 0.2,
      pointRadius: 6,
      hoverPointRadius: 1,
      hoverPointUnit: "%",
      pointerEvents: "visiblePainted",
      cursor: "inherit",
      fontColor: "#000000",
      labelAlign: "cm",
      labelOutlineColor: "white",
      labelOutlineWidth: 3,
  },
  delete: { display: "none" },
};
OpenLayers.Style = OpenLayers.Class({
  id: null,
  name: null,
  title: null,
  description: null,
  layerName: null,
  isDefault: !1,
  rules: null,
  context: null,
  defaultStyle: null,
  defaultsPerSymbolizer: !1,
  propertyStyles: null,
  initialize: function (a, b) {
      OpenLayers.Util.extend(this, b);
      this.rules = [];
      b && b.rules && this.addRules(b.rules);
      this.setDefaultStyle(a || OpenLayers.Feature.Vector.style["default"]);
      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(), (this.rules[a] = null);
      this.defaultStyle = this.rules = null;
  },
  createSymbolizer: function (a) {
      for (var b = this.defaultsPerSymbolizer ? {} : this.createLiterals(OpenLayers.Util.extend({}, this.defaultStyle), a), c = this.rules, d, e = [], f = !1, g = 0, h = c.length; g < h; g++)
          (d = c[g]), d.evaluate(a) && (d instanceof OpenLayers.Rule && d.elseFilter ? e.push(d) : ((f = !0), this.applySymbolizer(d, b, a)));
      if (!1 == f && 0 < e.length) for (f = !0, g = 0, h = e.length; g < h; g++) this.applySymbolizer(e[g], b, a);
      0 < c.length && !1 == f && (b.display = "none");
      null != b.label && "string" !== typeof b.label && (b.label = String(b.label));
      return b;
  },
  applySymbolizer: function (a, b, c) {
      var d = c.geometry ? this.getSymbolizerPrefix(c.geometry) : OpenLayers.Style.SYMBOLIZER_PREFIXES[0];
      a = a.symbolizer[d] || a.symbolizer;
      !0 === this.defaultsPerSymbolizer &&
          ((d = this.defaultStyle),
          OpenLayers.Util.applyDefaults(a, { pointRadius: d.pointRadius }),
          (!0 !== a.stroke && !0 !== a.graphic) ||
              OpenLayers.Util.applyDefaults(a, { strokeWidth: d.strokeWidth, strokeColor: d.strokeColor, strokeOpacity: d.strokeOpacity, strokeDashstyle: d.strokeDashstyle, strokeLinecap: d.strokeLinecap }),
          (!0 !== a.fill && !0 !== a.graphic) || OpenLayers.Util.applyDefaults(a, { fillColor: d.fillColor, fillOpacity: d.fillOpacity }),
          !0 === a.graphic &&
              OpenLayers.Util.applyDefaults(a, {
                  pointRadius: this.defaultStyle.pointRadius,
                  externalGraphic: this.defaultStyle.externalGraphic,
                  graphicName: this.defaultStyle.graphicName,
                  graphicOpacity: this.defaultStyle.graphicOpacity,
                  graphicWidth: this.defaultStyle.graphicWidth,
                  graphicHeight: this.defaultStyle.graphicHeight,
                  graphicXOffset: this.defaultStyle.graphicXOffset,
                  graphicYOffset: this.defaultStyle.graphicYOffset,
              }));
      return this.createLiterals(OpenLayers.Util.extend(b, a), c);
  },
  createLiterals: function (a, b) {
      var c = OpenLayers.Util.extend({}, b.attributes || b.data);
      OpenLayers.Util.extend(c, this.context);
      for (var d in this.propertyStyles) a[d] = OpenLayers.Style.createLiteral(a[d], c, b, d);
      return a;
  },
  findPropertyStyles: function () {
      var a = {};
      this.addPropertyStyles(a, this.defaultStyle);
      for (var b = this.rules, c, d, e = 0, f = b.length; e < f; e++) {
          c = b[e].symbolizer;
          for (var g in c)
              if (((d = c[g]), "object" == typeof d)) this.addPropertyStyles(a, d);
              else {
                  this.addPropertyStyles(a, c);
                  break;
              }
      }
      return a;
  },
  addPropertyStyles: function (a, b) {
      var c, d;
      for (d in b) (c = b[d]), "string" == typeof c && c.match(/\$\{\w+\}/) && (a[d] = !0);
      return a;
  },
  addRules: function (a) {
      Array.prototype.push.apply(this.rules, a);
      this.propertyStyles = this.findPropertyStyles();
  },
  setDefaultStyle: function (a) {
      this.defaultStyle = a;
      this.propertyStyles = this.findPropertyStyles();
  },
  getSymbolizerPrefix: function (a) {
      for (var b = OpenLayers.Style.SYMBOLIZER_PREFIXES, c = 0, d = b.length; c < d; c++) if (-1 != a.CLASS_NAME.indexOf(b[c])) return b[c];
  },
  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());
      }
      a.context = this.context && OpenLayers.Util.extend({}, this.context);
      b = OpenLayers.Util.extend({}, this.defaultStyle);
      return new OpenLayers.Style(b, a);
  },
  CLASS_NAME: "OpenLayers.Style",
});
OpenLayers.Style.createLiteral = function (a, b, c, d) {
  "string" == typeof a && -1 != a.indexOf("${") && ((a = OpenLayers.String.format(a, b, [c, d])), (a = isNaN(a) || !a ? a : parseFloat(a)));
  return a;
};
OpenLayers.Style.SYMBOLIZER_PREFIXES = ["Point", "Line", "Polygon", "Text", "Raster"];
OpenLayers.Filter = OpenLayers.Class({
  initialize: function (a) {
      OpenLayers.Util.extend(this, a);
  },
  destroy: function () {},
  evaluate: function (a) {
      return !0;
  },
  clone: function () {
      return null;
  },
  toString: function () {
      return OpenLayers.Format && OpenLayers.Format.CQL ? OpenLayers.Format.CQL.prototype.write(this) : Object.prototype.toString.call(this);
  },
  CLASS_NAME: "OpenLayers.Filter",
});
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.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.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) {
              a = a || {};
              var 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) for (a = 0, 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;
              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) {
      a = OpenLayers.Util.extend({ featurePrefix: this.featurePrefix, schema: this.schema }, a);
      var b = OpenLayers.Util.extend({}, this.schemaLocations);
      a.schema && (b[a.featurePrefix] = a.schema);
      a = [];
      var 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,
  allowFallback: !1,
  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) {
      a = a || this.defaultVersion;
      var 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 && ("" !== b && this.allowFallback && ((b = ""), (c = OpenLayers.Format[this.name]["v" + a.replace(/\./g, "_")])), !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) {
      var c = this.getVersion(null, b);
      this.parser = this.getParser(c);
      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),
          e = this.parser.errorProperty || null;
      null !== e && void 0 === d[e] && ((e = new OpenLayers.Format.OGCExceptionReport()), (d.error = e.read(a)));
      d.version = c;
      return d;
  },
  CLASS_NAME: "OpenLayers.Format.XML.VersionedOGC",
});
OpenLayers.Filter.Logical = OpenLayers.Class(OpenLayers.Filter, {
  filters: null,
  type: null,
  initialize: function (a) {
      this.filters = [];
      OpenLayers.Filter.prototype.initialize.apply(this, [a]);
  },
  destroy: function () {
      this.filters = null;
      OpenLayers.Filter.prototype.destroy.apply(this);
  },
  evaluate: function (a) {
      var b, c;
      switch (this.type) {
          case OpenLayers.Filter.Logical.AND:
              b = 0;
              for (c = this.filters.length; b < c; b++) if (!1 == this.filters[b].evaluate(a)) return !1;
              return !0;
          case OpenLayers.Filter.Logical.OR:
              b = 0;
              for (c = this.filters.length; b < c; b++) if (!0 == this.filters[b].evaluate(a)) return !0;
              return !1;
          case OpenLayers.Filter.Logical.NOT:
              return !this.filters[0].evaluate(a);
      }
  },
  clone: function () {
      for (var a = [], b = 0, c = this.filters.length; b < c; ++b) a.push(this.filters[b].clone());
      return new OpenLayers.Filter.Logical({ type: this.type, filters: a });
  },
  CLASS_NAME: "OpenLayers.Filter.Logical",
});
OpenLayers.Filter.Logical.AND = "&&";
OpenLayers.Filter.Logical.OR = "||";
OpenLayers.Filter.Logical.NOT = "!";
OpenLayers.Filter.Comparison = OpenLayers.Class(OpenLayers.Filter, {
  type: null,
  property: null,
  value: null,
  matchCase: !0,
  lowerBoundary: null,
  upperBoundary: null,
  initialize: function (a) {
      OpenLayers.Filter.prototype.initialize.apply(this, [a]);
      this.type === OpenLayers.Filter.Comparison.LIKE && void 0 === a.matchCase && (this.matchCase = null);
  },
  evaluate: function (a) {
      a instanceof OpenLayers.Feature.Vector && (a = a.attributes);
      var b = !1;
      a = a[this.property];
      switch (this.type) {
          case OpenLayers.Filter.Comparison.EQUAL_TO:
              b = this.value;
              b = this.matchCase || "string" != typeof a || "string" != typeof b ? a == b : a.toUpperCase() == b.toUpperCase();
              break;
          case OpenLayers.Filter.Comparison.NOT_EQUAL_TO:
              b = this.value;
              b = this.matchCase || "string" != typeof a || "string" != typeof b ? a != b : a.toUpperCase() != b.toUpperCase();
              break;
          case OpenLayers.Filter.Comparison.LESS_THAN:
              b = a < this.value;
              break;
          case OpenLayers.Filter.Comparison.GREATER_THAN:
              b = a > this.value;
              break;
          case OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO:
              b = a <= this.value;
              break;
          case OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO:
              b = a >= this.value;
              break;
          case OpenLayers.Filter.Comparison.BETWEEN:
              b = a >= this.lowerBoundary && a <= this.upperBoundary;
              break;
          case OpenLayers.Filter.Comparison.LIKE:
              b = RegExp(this.value, "gi").test(a);
              break;
          case OpenLayers.Filter.Comparison.IS_NULL:
              b = null === a;
      }
      return b;
  },
  value2regex: function (a, b, c) {
      if ("." == a) throw Error("'.' is an unsupported wildCard character for OpenLayers.Filter.Comparison");
      a = a ? a : "*";
      b = b ? b : ".";
      this.value = this.value.replace(RegExp("\\" + (c ? c : "!") + "(.|$)", "g"), "\\$1");
      this.value = this.value.replace(RegExp("\\" + b, "g"), ".");
      this.value = this.value.replace(RegExp("\\" + a, "g"), ".*");
      this.value = this.value.replace(RegExp("\\\\.\\*", "g"), "\\" + a);
      return (this.value = this.value.replace(RegExp("\\\\\\.", "g"), "\\" + b));
  },
  regex2value: function () {
      var a = this.value,
          a = a.replace(/!/g, "!!"),
          a = a.replace(/(\\)?\\\./g, function (a, c) {
              return c ? a : "!.";
          }),
          a = a.replace(/(\\)?\\\*/g, function (a, c) {
              return c ? a : "!*";
          }),
          a = a.replace(/\\\\/g, "\\");
      return (a = a.replace(/\.\*/g, "*"));
  },
  clone: function () {
      return OpenLayers.Util.extend(new OpenLayers.Filter.Comparison(), this);
  },
  CLASS_NAME: "OpenLayers.Filter.Comparison",
});
OpenLayers.Filter.Comparison.EQUAL_TO = "==";
OpenLayers.Filter.Comparison.NOT_EQUAL_TO = "!=";
OpenLayers.Filter.Comparison.LESS_THAN = "<";
OpenLayers.Filter.Comparison.GREATER_THAN = ">";
OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO = "<=";
OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO = ">=";
OpenLayers.Filter.Comparison.BETWEEN = "..";
OpenLayers.Filter.Comparison.LIKE = "~";
OpenLayers.Filter.Comparison.IS_NULL = "NULL";
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.Date = {
  dateRegEx: /^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:(?:T(\d{1,2}):(\d{2}):(\d{2}(?:\.\d+)?)(Z|(?:[+-]\d{1,2}(?::(\d{2}))?)))|Z)?$/,
  toISOString: (function () {
      return "toISOString" in Date.prototype
          ? function (a) {
                return a.toISOString();
            }
          : function (a) {
                return isNaN(a.getTime())
                    ? "Invalid Date"
                    : a.getUTCFullYear() +
                          "-" +
                          OpenLayers.Number.zeroPad(a.getUTCMonth() + 1, 2) +
                          "-" +
                          OpenLayers.Number.zeroPad(a.getUTCDate(), 2) +
                          "T" +
                          OpenLayers.Number.zeroPad(a.getUTCHours(), 2) +
                          ":" +
                          OpenLayers.Number.zeroPad(a.getUTCMinutes(), 2) +
                          ":" +
                          OpenLayers.Number.zeroPad(a.getUTCSeconds(), 2) +
                          "." +
                          OpenLayers.Number.zeroPad(a.getUTCMilliseconds(), 3) +
                          "Z";
            };
  })(),
  parse: function (a) {
      var b;
      if ((a = a.match(this.dateRegEx)) && (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(1e3 * (f - g));
              b.setUTCHours(d, e, g, f);
              "Z" !== c && ((c = parseInt(c, 10)), (a = parseInt(a[8], 10) || 0), (a = -1e3 * (60 * 60 * c + 60 * a)), (b = new Date(b.getTime() + a)));
          }
      } else b = new Date("invalid");
      return b;
  },
};
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), !0);
          },
          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), !0);
          },
          UpperBoundary: function (a, b) {
              b.upperBoundary = OpenLayers.String.numericIf(this.readers.ogc._expression.call(this, a), !0);
          },
          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 (a, b) {},
          PropertyIsNull: function (a, b) {
              var c = new OpenLayers.Filter.Comparison({ type: OpenLayers.Filter.Comparison.IS_NULL });
              this.readChildNodes(a, c);
              b.filters.push(c);
          },
      },
  },
  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);
  },
  encodeLiteral: function (a) {
      a instanceof Date && (a = OpenLayers.Date.toISOString(a));
      return a;
  },
  writeOgcExpression: function (a, b) {
      a instanceof OpenLayers.Filter.Function ? this.writeNode("Function", a, b) : this.writeNode("Literal", a, b);
      return b;
  },
  write: function (a) {
      return this.writers.ogc.Filter.apply(this, [a]);
  },
  writers: {
      ogc: {
          Filter: function (a) {
              var b = this.createElementNSPlus("ogc:Filter");
              this.writeNode(this.getFilterType(a), a, b);
              return b;
          },
          _featureIds: function (a) {
              for (var b = this.createDocumentFragment(), c = 0, d = a.fids.length; c < d; ++c) this.writeNode("ogc:FeatureId", a.fids[c], 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]), 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]), this.writeNode(this.getFilterType(c), c, b);
              return b;
          },
          Not: function (a) {
              var b = this.createElementNSPlus("ogc:Not");
              a = a.filters[0];
              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: (this.encodeLiteral || OpenLayers.Format.Filter.v1.prototype.encodeLiteral)(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) {
              var b = this.createElementNSPlus("ogc:Function", { attributes: { name: a.name } });
              a = a.params;
              for (var c = 0, d = a.length; c < d; c++) this.writeOgcExpression(a[c], b);
              return b;
          },
          PropertyIsNull: function (a) {
              var b = this.createElementNSPlus("ogc:PropertyIsNull");
              this.writeNode("PropertyName", a, 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",
      NULL: "PropertyIsNull",
      BBOX: "BBOX",
      DWITHIN: "DWITHIN",
      WITHIN: "WITHIN",
      CONTAINS: "CONTAINS",
      INTERSECTS: "INTERSECTS",
      FID: "_featureIds",
  },
  CLASS_NAME: "OpenLayers.Format.Filter.v1",
});
OpenLayers.Geometry = OpenLayers.Class({
  id: null,
  parent: null,
  bounds: null,
  initialize: function () {
      this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_");
  },
  destroy: function () {
      this.bounds = this.id = null;
  },
  clone: function () {
      return new OpenLayers.Geometry();
  },
  setBounds: function (a) {
      a && (this.bounds = a.clone());
  },
  clearBounds: function () {
      this.bounds = null;
      this.parent && this.parent.clearBounds();
  },
  extendBounds: function (a) {
      this.getBounds() ? this.bounds.extend(a) : this.setBounds(a);
  },
  getBounds: function () {
      null == this.bounds && this.calculateBounds();
      return this.bounds;
  },
  calculateBounds: function () {},
  distanceTo: function (a, b) {},
  getVertices: function (a) {},
  atPoint: function (a, b, c) {
      var d = !1;
      null != this.getBounds() && null != a && ((b = null != b ? b : 0), (c = null != c ? c : 0), (d = new OpenLayers.Bounds(this.bounds.left - b, this.bounds.bottom - c, this.bounds.right + b, this.bounds.top + c).containsLonLat(a)));
      return d;
  },
  getLength: function () {
      return 0;
  },
  getArea: function () {
      return 0;
  },
  getCentroid: function () {
      return null;
  },
  toString: function () {
      return OpenLayers.Format && OpenLayers.Format.WKT ? OpenLayers.Format.WKT.prototype.write(new OpenLayers.Feature.Vector(this)) : Object.prototype.toString.call(this);
  },
  CLASS_NAME: "OpenLayers.Geometry",
});
OpenLayers.Geometry.fromWKT = function (a) {
  var b;
  if (OpenLayers.Format && OpenLayers.Format.WKT) {
      var c = OpenLayers.Geometry.fromWKT.format;
      c || ((c = new OpenLayers.Format.WKT()), (OpenLayers.Geometry.fromWKT.format = c));
      a = c.read(a);
      if (a instanceof OpenLayers.Feature.Vector) b = a.geometry;
      else if (OpenLayers.Util.isArray(a)) {
          b = a.length;
          for (var c = Array(b), d = 0; d < b; ++d) c[d] = a[d].geometry;
          b = new OpenLayers.Geometry.Collection(c);
      }
  }
  return b;
};
OpenLayers.Geometry.segmentsIntersect = function (a, b, c) {
  var d = c && c.point;
  c = c && c.tolerance;
  var e = !1,
      f = a.x1 - b.x1,
      g = a.y1 - b.y1,
      h = a.x2 - a.x1,
      k = a.y2 - a.y1,
      l = b.y2 - b.y1,
      m = b.x2 - b.x1,
      n = l * h - m * k,
      l = m * g - l * f,
      g = h * g - k * f;
  0 == n ? 0 == l && 0 == g && (e = !0) : ((f = l / n), (n = g / n), 0 <= f && 1 >= f && 0 <= n && 1 >= n && (d ? ((h = a.x1 + f * h), (n = a.y1 + f * k), (e = new OpenLayers.Geometry.Point(h, n))) : (e = !0)));
  if (c)
      if (e) {
          if (d)
              a: for (a = [a, b], b = 0; 2 > b; ++b)
                  for (f = a[b], k = 1; 3 > k; ++k)
                      if (((h = f["x" + k]), (n = f["y" + k]), (d = Math.sqrt(Math.pow(h - e.x, 2) + Math.pow(n - e.y, 2))), d < c)) {
                          e.x = h;
                          e.y = n;
                          break a;
                      }
      } else
          a: for (a = [a, b], b = 0; 2 > b; ++b)
              for (h = a[b], n = a[(b + 1) % 2], k = 1; 3 > k; ++k)
                  if (((f = { x: h["x" + k], y: h["y" + k] }), (g = OpenLayers.Geometry.distanceToSegment(f, n)), g.distance < c)) {
                      e = d ? new OpenLayers.Geometry.Point(f.x, f.y) : !0;
                      break a;
                  }
  return e;
};
OpenLayers.Geometry.distanceToSegment = function (a, b) {
  var c = OpenLayers.Geometry.distanceSquaredToSegment(a, b);
  c.distance = Math.sqrt(c.distance);
  return c;
};
OpenLayers.Geometry.distanceSquaredToSegment = function (a, b) {
  var c = a.x,
      d = a.y,
      e = b.x1,
      f = b.y1,
      g = b.x2,
      h = b.y2,
      k = g - e,
      l = h - f,
      m = (k * (c - e) + l * (d - f)) / (Math.pow(k, 2) + Math.pow(l, 2));
  0 >= m || (1 <= m ? ((e = g), (f = h)) : ((e += m * k), (f += m * l)));
  return { distance: Math.pow(e - c, 2) + Math.pow(f - d, 2), x: e, y: f, along: m };
};
OpenLayers.Geometry.Point = OpenLayers.Class(OpenLayers.Geometry, {
  x: null,
  y: null,
  initialize: function (a, b) {
      OpenLayers.Geometry.prototype.initialize.apply(this, arguments);
      this.x = parseFloat(a);
      this.y = parseFloat(b);
  },
  clone: function (a) {
      null == a && (a = new OpenLayers.Geometry.Point(this.x, this.y));
      OpenLayers.Util.applyDefaults(a, this);
      return a;
  },
  calculateBounds: function () {
      this.bounds = new OpenLayers.Bounds(this.x, this.y, this.x, this.y);
  },
  distanceTo: function (a, b) {
      var c = !(b && !1 === b.edge) && b && b.details,
          d,
          e,
          f,
          g,
          h;
      a instanceof OpenLayers.Geometry.Point
          ? ((e = this.x), (f = this.y), (g = a.x), (h = a.y), (d = Math.sqrt(Math.pow(e - g, 2) + Math.pow(f - h, 2))), (d = c ? { x0: e, y0: f, x1: g, y1: h, distance: d } : d))
          : ((d = a.distanceTo(this, b)), c && (d = { x0: d.x1, y0: d.y1, x1: d.x0, y1: d.y0, distance: d.distance }));
      return d;
  },
  equals: function (a) {
      var b = !1;
      null != a && (b = (this.x == a.x && this.y == a.y) || (isNaN(this.x) && isNaN(this.y) && isNaN(a.x) && isNaN(a.y)));
      return b;
  },
  toShortString: function () {
      return this.x + ", " + this.y;
  },
  move: function (a, b) {
      this.x += a;
      this.y += b;
      this.clearBounds();
  },
  rotate: function (a, b) {
      a *= Math.PI / 180;
      var c = this.distanceTo(b),
          d = a + Math.atan2(this.y - b.y, this.x - b.x);
      this.x = b.x + c * Math.cos(d);
      this.y = b.y + c * Math.sin(d);
      this.clearBounds();
  },
  getCentroid: function () {
      return new OpenLayers.Geometry.Point(this.x, this.y);
  },
  resize: function (a, b, c) {
      this.x = b.x + a * (void 0 == c ? 1 : c) * (this.x - b.x);
      this.y = b.y + a * (this.y - b.y);
      this.clearBounds();
      return this;
  },
  intersects: function (a) {
      var b = !1;
      return (b = "OpenLayers.Geometry.Point" == a.CLASS_NAME ? this.equals(a) : a.intersects(this));
  },
  transform: function (a, b) {
      a && b && (OpenLayers.Projection.transform(this, a, b), (this.bounds = null));
      return this;
  },
  getVertices: function (a) {
      return [this];
  },
  CLASS_NAME: "OpenLayers.Geometry.Point",
});
OpenLayers.Geometry.Collection = OpenLayers.Class(OpenLayers.Geometry, {
  components: null,
  componentTypes: null,
  initialize: function (a) {
      OpenLayers.Geometry.prototype.initialize.apply(this, arguments);
      this.components = [];
      null != a && this.addComponents(a);
  },
  destroy: function () {
      this.components.length = 0;
      this.components = null;
      OpenLayers.Geometry.prototype.destroy.apply(this, arguments);
  },
  clone: function () {
      for (var a = eval("new " + this.CLASS_NAME + "()"), b = 0, c = this.components.length; b < c; b++) a.addComponent(this.components[b].clone());
      OpenLayers.Util.applyDefaults(a, this);
      return a;
  },
  getComponentsString: function () {
      for (var a = [], b = 0, c = this.components.length; b < c; b++) a.push(this.components[b].toShortString());
      return a.join(",");
  },
  calculateBounds: function () {
      this.bounds = null;
      var a = new OpenLayers.Bounds(),
          b = this.components;
      if (b) for (var c = 0, d = b.length; c < d; c++) a.extend(b[c].getBounds());
      null != a.left && null != a.bottom && null != a.right && null != a.top && this.setBounds(a);
  },
  addComponents: function (a) {
      OpenLayers.Util.isArray(a) || (a = [a]);
      for (var b = 0, c = a.length; b < c; b++) this.addComponent(a[b]);
  },
  addComponent: function (a, b) {
      var c = !1;
      if (a && (null == this.componentTypes || -1 < OpenLayers.Util.indexOf(this.componentTypes, a.CLASS_NAME))) {
          if (null != b && b < this.components.length) {
              var c = this.components.slice(0, b),
                  d = this.components.slice(b, this.components.length);
              c.push(a);
              this.components = c.concat(d);
          } else this.components.push(a);
          a.parent = this;
          this.clearBounds();
          c = !0;
      }
      return c;
  },
  removeComponents: function (a) {
      var b = !1;
      OpenLayers.Util.isArray(a) || (a = [a]);
      for (var c = a.length - 1; 0 <= c; --c) b = this.removeComponent(a[c]) || b;
      return b;
  },
  removeComponent: function (a) {
      OpenLayers.Util.removeItem(this.components, a);
      this.clearBounds();
      return !0;
  },
  getLength: function () {
      for (var a = 0, b = 0, c = this.components.length; b < c; b++) a += this.components[b].getLength();
      return a;
  },
  getArea: function () {
      for (var a = 0, b = 0, c = this.components.length; b < c; b++) a += this.components[b].getArea();
      return a;
  },
  getGeodesicArea: function (a) {
      for (var b = 0, c = 0, d = this.components.length; c < d; c++) b += this.components[c].getGeodesicArea(a);
      return b;
  },
  getCentroid: function (a) {
      if (!a) return this.components.length && this.components[0].getCentroid();
      a = this.components.length;
      if (!a) return !1;
      for (var b = [], c = [], d = 0, e = Number.MAX_VALUE, f, g = 0; g < a; ++g) {
          f = this.components[g];
          var h = f.getArea();
          f = f.getCentroid(!0);
          isNaN(h) || isNaN(f.x) || isNaN(f.y) || (b.push(h), (d += h), (e = h < e && 0 < h ? h : e), c.push(f));
      }
      a = b.length;
      if (0 === d) {
          for (g = 0; g < a; ++g) b[g] = 1;
          d = b.length;
      } else {
          for (g = 0; g < a; ++g) b[g] /= e;
          d /= e;
      }
      for (var k = (e = 0), g = 0; g < a; ++g) (f = c[g]), (h = b[g]), (e += f.x * h), (k += f.y * h);
      return new OpenLayers.Geometry.Point(e / d, k / d);
  },
  getGeodesicLength: function (a) {
      for (var b = 0, c = 0, d = this.components.length; c < d; c++) b += this.components[c].getGeodesicLength(a);
      return b;
  },
  move: function (a, b) {
      for (var c = 0, d = this.components.length; c < d; c++) this.components[c].move(a, b);
  },
  rotate: function (a, b) {
      for (var c = 0, d = this.components.length; c < d; ++c) this.components[c].rotate(a, b);
  },
  resize: function (a, b, c) {
      for (var d = 0; d < this.components.length; ++d) this.components[d].resize(a, b, c);
      return this;
  },
  distanceTo: function (a, b) {
      for (
          var c = !(b && !1 === b.edge) && b && b.details, d, e, f, g = Number.POSITIVE_INFINITY, h = 0, k = this.components.length;
          h < k && !((d = this.components[h].distanceTo(a, b)), (f = c ? d.distance : d), f < g && ((g = f), (e = d), 0 == g));
          ++h
      );
      return e;
  },
  equals: function (a) {
      var b = !0;
      if (a && a.CLASS_NAME && this.CLASS_NAME == a.CLASS_NAME)
          if (OpenLayers.Util.isArray(a.components) && a.components.length == this.components.length)
              for (var c = 0, d = this.components.length; c < d; ++c) {
                  if (!this.components[c].equals(a.components[c])) {
                      b = !1;
                      break;
                  }
              }
          else b = !1;
      else b = !1;
      return b;
  },
  transform: function (a, b) {
      if (a && b) {
          for (var c = 0, d = this.components.length; c < d; c++) this.components[c].transform(a, b);
          this.bounds = null;
      }
      return this;
  },
  intersects: function (a) {
      for (var b = !1, c = 0, d = this.components.length; c < d && !(b = a.intersects(this.components[c])); ++c);
      return b;
  },
  getVertices: function (a) {
      for (var b = [], c = 0, d = this.components.length; c < d; ++c) Array.prototype.push.apply(b, this.components[c].getVertices(a));
      return b;
  },
  CLASS_NAME: "OpenLayers.Geometry.Collection",
});
OpenLayers.Geometry.MultiPoint = OpenLayers.Class(OpenLayers.Geometry.Collection, {
  componentTypes: ["OpenLayers.Geometry.Point"],
  addPoint: function (a, b) {
      this.addComponent(a, b);
  },
  removePoint: function (a) {
      this.removeComponent(a);
  },
  CLASS_NAME: "OpenLayers.Geometry.MultiPoint",
});
OpenLayers.Geometry.Curve = OpenLayers.Class(OpenLayers.Geometry.MultiPoint, {
  componentTypes: ["OpenLayers.Geometry.Point"],
  getLength: function () {
      var a = 0;
      if (this.components && 1 < this.components.length) for (var b = 1, c = this.components.length; b < c; b++) a += this.components[b - 1].distanceTo(this.components[b]);
      return a;
  },
  getGeodesicLength: function (a) {
      var b = this;
      if (a) {
          var c = new OpenLayers.Projection("EPSG:4326");
          c.equals(a) || (b = this.clone().transform(a, c));
      }
      a = 0;
      if (b.components && 1 < b.components.length)
          for (var d, e = 1, f = b.components.length; e < f; e++) (c = b.components[e - 1]), (d = b.components[e]), (a += OpenLayers.Util.distVincenty({ lon: c.x, lat: c.y }, { lon: d.x, lat: d.y }));
      return 1e3 * a;
  },
  CLASS_NAME: "OpenLayers.Geometry.Curve",
});
OpenLayers.Geometry.LineString = OpenLayers.Class(OpenLayers.Geometry.Curve, {
  removeComponent: function (a) {
      var b = this.components && 2 < this.components.length;
      b && OpenLayers.Geometry.Collection.prototype.removeComponent.apply(this, arguments);
      return b;
  },
  intersects: function (a) {
      var b = !1,
          c = a.CLASS_NAME;
      if ("OpenLayers.Geometry.LineString" == c || "OpenLayers.Geometry.LinearRing" == c || "OpenLayers.Geometry.Point" == c) {
          var d = this.getSortedSegments();
          a = "OpenLayers.Geometry.Point" == c ? [{ x1: a.x, y1: a.y, x2: a.x, y2: a.y }] : a.getSortedSegments();
          var e,
              f,
              g,
              h,
              k,
              l,
              m,
              n = 0,
              p = d.length;
          a: for (; n < p; ++n) {
              c = d[n];
              e = c.x1;
              f = c.x2;
              g = c.y1;
              h = c.y2;
              var q = 0,
                  r = a.length;
              for (; q < r; ++q) {
                  k = a[q];
                  if (k.x1 > f) break;
                  if (!(k.x2 < e || ((l = k.y1), (m = k.y2), Math.min(l, m) > Math.max(g, h) || Math.max(l, m) < Math.min(g, h) || !OpenLayers.Geometry.segmentsIntersect(c, k)))) {
                      b = !0;
                      break a;
                  }
              }
          }
      } else b = a.intersects(this);
      return b;
  },
  getSortedSegments: function () {
      for (var a = this.components.length - 1, b = Array(a), c, d, e = 0; e < a; ++e)
          (c = this.components[e]), (d = this.components[e + 1]), (b[e] = c.x < d.x ? { x1: c.x, y1: c.y, x2: d.x, y2: d.y } : { x1: d.x, y1: d.y, x2: c.x, y2: c.y });
      return b.sort(function (a, b) {
          return a.x1 - b.x1;
      });
  },
  splitWithSegment: function (a, b) {
      for (var c = !(b && !1 === b.edge), d = b && b.tolerance, e = [], f = this.getVertices(), g = [], h = [], k = !1, l, m, n, p = { point: !0, tolerance: d }, q = null, r = 0, s = f.length - 2; r <= s; ++r)
          if (
              ((d = f[r]),
              g.push(d.clone()),
              (l = f[r + 1]),
              (m = { x1: d.x, y1: d.y, x2: l.x, y2: l.y }),
              (m = OpenLayers.Geometry.segmentsIntersect(a, m, p)),
              m instanceof OpenLayers.Geometry.Point && ((n = (m.x === a.x1 && m.y === a.y1) || (m.x === a.x2 && m.y === a.y2) || m.equals(d) || m.equals(l) ? !0 : !1) || c))
          )
              m.equals(h[h.length - 1]) || h.push(m.clone()), (0 === r && m.equals(d)) || m.equals(l) || ((k = !0), m.equals(d) || g.push(m), e.push(new OpenLayers.Geometry.LineString(g)), (g = [m.clone()]));
      k && (g.push(l.clone()), e.push(new OpenLayers.Geometry.LineString(g)));
      if (0 < h.length)
          var t = a.x1 < a.x2 ? 1 : -1,
              u = a.y1 < a.y2 ? 1 : -1,
              q = {
                  lines: e,
                  points: h.sort(function (a, b) {
                      return t * a.x - t * b.x || u * a.y - u * b.y;
                  }),
              };
      return q;
  },
  split: function (a, b) {
      var c = null,
          d = b && b.mutual,
          e,
          f,
          g,
          h;
      if (a instanceof OpenLayers.Geometry.LineString) {
          var k = this.getVertices(),
              l,
              m,
              n,
              p,
              q,
              r = [];
          g = [];
          for (var s = 0, t = k.length - 2; s <= t; ++s) {
              l = k[s];
              m = k[s + 1];
              n = { x1: l.x, y1: l.y, x2: m.x, y2: m.y };
              h = h || [a];
              d && r.push(l.clone());
              for (var u = 0; u < h.length; ++u)
                  if ((p = h[u].splitWithSegment(n, b)))
                      if (((q = p.lines), 0 < q.length && (q.unshift(u, 1), Array.prototype.splice.apply(h, q), (u += q.length - 2)), d))
                          for (var v = 0, w = p.points.length; v < w; ++v) (q = p.points[v]), q.equals(l) || (r.push(q), g.push(new OpenLayers.Geometry.LineString(r)), (r = q.equals(m) ? [] : [q.clone()]));
          }
          d && 0 < g.length && 0 < r.length && (r.push(m.clone()), g.push(new OpenLayers.Geometry.LineString(r)));
      } else c = a.splitWith(this, b);
      h && 1 < h.length ? (f = !0) : (h = []);
      g && 1 < g.length ? (e = !0) : (g = []);
      if (f || e) c = d ? [g, h] : h;
      return c;
  },
  splitWith: function (a, b) {
      return a.split(this, b);
  },
  getVertices: function (a) {
      return !0 === a ? [this.components[0], this.components[this.components.length - 1]] : !1 === a ? this.components.slice(1, this.components.length - 1) : this.components.slice();
  },
  distanceTo: function (a, b) {
      var c = !(b && !1 === b.edge) && b && b.details,
          d,
          e = {},
          f = Number.POSITIVE_INFINITY;
      if (a instanceof OpenLayers.Geometry.Point) {
          for (var g = this.getSortedSegments(), h = a.x, k = a.y, l, m = 0, n = g.length; m < n; ++m)
              if (((l = g[m]), (d = OpenLayers.Geometry.distanceToSegment(a, l)), d.distance < f)) {
                  if (((f = d.distance), (e = d), 0 === f)) break;
              } else if (l.x2 > h && ((k > l.y1 && k < l.y2) || (k < l.y1 && k > l.y2))) break;
          e = c ? { distance: e.distance, x0: e.x, y0: e.y, x1: h, y1: k } : e.distance;
      } else if (a instanceof OpenLayers.Geometry.LineString) {
          var g = this.getSortedSegments(),
              h = a.getSortedSegments(),
              p,
              q,
              r = h.length,
              s = { point: !0 },
              m = 0,
              n = g.length;
          a: for (; m < n; ++m) {
              k = g[m];
              l = k.x1;
              q = k.y1;
              for (var t = 0; t < r; ++t)
                  if (((d = h[t]), (p = OpenLayers.Geometry.segmentsIntersect(k, d, s)))) {
                      f = 0;
                      e = { distance: 0, x0: p.x, y0: p.y, x1: p.x, y1: p.y };
                      break a;
                  } else (d = OpenLayers.Geometry.distanceToSegment({ x: l, y: q }, d)), d.distance < f && ((f = d.distance), (e = { distance: f, x0: l, y0: q, x1: d.x, y1: d.y }));
          }
          c || (e = e.distance);
          0 !== f && k && ((d = a.distanceTo(new OpenLayers.Geometry.Point(k.x2, k.y2), b)), (m = c ? d.distance : d), m < f && (e = c ? { distance: f, x0: d.x1, y0: d.y1, x1: d.x0, y1: d.y0 } : m));
      } else (e = a.distanceTo(this, b)), c && (e = { distance: e.distance, x0: e.x1, y0: e.y1, x1: e.x0, y1: e.y0 });
      return e;
  },
  simplify: function (a) {
      if (this && null !== this) {
          var b = this.getVertices();
          if (3 > b.length) return this;
          var c = function (a, b, d, k) {
                  for (var l = 0, m = 0, n = b, p; n < d; n++) {
                      p = a[b];
                      var q = a[d],
                          r = a[n],
                          r = Math.abs(0.5 * (p.x * q.y + q.x * r.y + r.x * p.y - q.x * p.y - r.x * q.y - p.x * r.y));
                      p = Math.sqrt(Math.pow(p.x - q.x, 2) + Math.pow(p.y - q.y, 2));
                      p = 2 * (r / p);
                      p > l && ((l = p), (m = n));
                  }
                  l > k && m != b && (e.push(m), c(a, b, m, k), c(a, m, d, k));
              },
              d = b.length - 1,
              e = [];
          e.push(0);
          for (e.push(d); b[0].equals(b[d]); ) d--, e.push(d);
          c(b, 0, d, a);
          a = [];
          e.sort(function (a, b) {
              return a - b;
          });
          for (d = 0; d < e.length; d++) a.push(b[e[d]]);
          return new OpenLayers.Geometry.LineString(a);
      }
      return this;
  },
  CLASS_NAME: "OpenLayers.Geometry.LineString",
});
OpenLayers.Geometry.MultiLineString = OpenLayers.Class(OpenLayers.Geometry.Collection, {
  componentTypes: ["OpenLayers.Geometry.LineString"],
  split: function (a, b) {
      for (var c = null, d = b && b.mutual, e, f, g, h, k = [], l = [a], m = 0, n = this.components.length; m < n; ++m) {
          f = this.components[m];
          g = !1;
          for (var p = 0; p < l.length; ++p)
              if ((e = f.split(l[p], b))) {
                  if (d) {
                      g = e[0];
                      for (var q = 0, r = g.length; q < r; ++q) 0 === q && k.length ? k[k.length - 1].addComponent(g[q]) : k.push(new OpenLayers.Geometry.MultiLineString([g[q]]));
                      g = !0;
                      e = e[1];
                  }
                  if (e.length) {
                      e.unshift(p, 1);
                      Array.prototype.splice.apply(l, e);
                      break;
                  }
              }
          g || (k.length ? k[k.length - 1].addComponent(f.clone()) : (k = [new OpenLayers.Geometry.MultiLineString(f.clone())]));
      }
      k && 1 < k.length ? (g = !0) : (k = []);
      l && 1 < l.length ? (h = !0) : (l = []);
      if (g || h) c = d ? [k, l] : l;
      return c;
  },
  splitWith: function (a, b) {
      var c = null,
          d = b && b.mutual,
          e,
          f,
          g,
          h,
          k,
          l;
      if (a instanceof OpenLayers.Geometry.LineString) {
          l = [];
          k = [a];
          for (var m = 0, n = this.components.length; m < n; ++m) {
              g = !1;
              f = this.components[m];
              for (var p = 0; p < k.length; ++p)
                  if ((e = k[p].split(f, b))) {
                      d && ((g = e[0]), g.length && (g.unshift(p, 1), Array.prototype.splice.apply(k, g), (p += g.length - 2)), (e = e[1]), 0 === e.length && (e = [f.clone()]));
                      g = 0;
                      for (var q = e.length; g < q; ++g) 0 === g && l.length ? l[l.length - 1].addComponent(e[g]) : l.push(new OpenLayers.Geometry.MultiLineString([e[g]]));
                      g = !0;
                  }
              g || (l.length ? l[l.length - 1].addComponent(f.clone()) : (l = [new OpenLayers.Geometry.MultiLineString([f.clone()])]));
          }
      } else c = a.split(this);
      k && 1 < k.length ? (h = !0) : (k = []);
      l && 1 < l.length ? (g = !0) : (l = []);
      if (h || g) c = d ? [k, l] : l;
      return c;
  },
  CLASS_NAME: "OpenLayers.Geometry.MultiLineString",
});
OpenLayers.Geometry.LinearRing = OpenLayers.Class(OpenLayers.Geometry.LineString, {
  componentTypes: ["OpenLayers.Geometry.Point"],
  addComponent: function (a, b) {
      var c = !1,
          d = this.components.pop();
      (null == b && a.equals(d)) || (c = OpenLayers.Geometry.Collection.prototype.addComponent.apply(this, arguments));
      OpenLayers.Geometry.Collection.prototype.addComponent.apply(this, [this.components[0]]);
      return c;
  },
  removeComponent: function (a) {
      var b = this.components && 3 < this.components.length;
      b && (this.components.pop(), OpenLayers.Geometry.Collection.prototype.removeComponent.apply(this, arguments), OpenLayers.Geometry.Collection.prototype.addComponent.apply(this, [this.components[0]]));
      return b;
  },
  move: function (a, b) {
      for (var c = 0, d = this.components.length; c < d - 1; c++) this.components[c].move(a, b);
  },
  rotate: function (a, b) {
      for (var c = 0, d = this.components.length; c < d - 1; ++c) this.components[c].rotate(a, b);
  },
  resize: function (a, b, c) {
      for (var d = 0, e = this.components.length; d < e - 1; ++d) this.components[d].resize(a, b, c);
      return this;
  },
  transform: function (a, b) {
      if (a && b) {
          for (var c = 0, d = this.components.length; c < d - 1; c++) this.components[c].transform(a, b);
          this.bounds = null;
      }
      return this;
  },
  getCentroid: function () {
      if (this.components) {
          var a = this.components.length;
          if (0 < a && 2 >= a) return this.components[0].clone();
          if (2 < a) {
              var b = 0,
                  c = 0,
                  d = this.components[0].x,
                  e = this.components[0].y,
                  f = -1 * this.getArea();
              if (0 != f) {
                  for (var g = 0; g < a - 1; g++)
                      var h = this.components[g], k = this.components[g + 1], b = b + (h.x + k.x - 2 * d) * ((h.x - d) * (k.y - e) - (k.x - d) * (h.y - e)), c = c + (h.y + k.y - 2 * e) * ((h.x - d) * (k.y - e) - (k.x - d) * (h.y - e));
                  b = d + b / (6 * f);
                  a = e + c / (6 * f);
              } else {
                  for (g = 0; g < a - 1; g++) (b += this.components[g].x), (c += this.components[g].y);
                  b /= a - 1;
                  a = c / (a - 1);
              }
              return new OpenLayers.Geometry.Point(b, a);
          }
          return null;
      }
  },
  getArea: function () {
      var a = 0;
      if (this.components && 2 < this.components.length) {
          for (var b = (a = 0), c = this.components.length; b < c - 1; b++) var d = this.components[b], e = this.components[b + 1], a = a + (d.x + e.x) * (e.y - d.y);
          a = -a / 2;
      }
      return a;
  },
  getGeodesicArea: function (a) {
      var b = this;
      if (a) {
          var c = new OpenLayers.Projection("EPSG:4326");
          c.equals(a) || (b = this.clone().transform(a, c));
      }
      a = 0;
      c = b.components && b.components.length;
      if (2 < c) {
          for (var d, e, f = 0; f < c - 1; f++) (d = b.components[f]), (e = b.components[f + 1]), (a += OpenLayers.Util.rad(e.x - d.x) * (2 + Math.sin(OpenLayers.Util.rad(d.y)) + Math.sin(OpenLayers.Util.rad(e.y))));
          a = (40680631590769 * a) / 2;
      }
      return a;
  },
  containsPoint: function (a) {
      var b = OpenLayers.Number.limitSigDigs,
          c = b(a.x, 14);
      a = b(a.y, 14);
      for (var d = this.components.length - 1, e, f, g, h, k, l = 0, m = 0; m < d; ++m)
          if (((e = this.components[m]), (g = b(e.x, 14)), (e = b(e.y, 14)), (f = this.components[m + 1]), (h = b(f.x, 14)), (f = b(f.y, 14)), e == f)) {
              if (a == e && ((g <= h && c >= g && c <= h) || (g >= h && c <= g && c >= h))) {
                  l = -1;
                  break;
              }
          } else {
              k = b((a - f) * ((h - g) / (f - e)) + h, 14);
              if (k == c && ((e < f && a >= e && a <= f) || (e > f && a <= e && a >= f))) {
                  l = -1;
                  break;
              }
              k <= c || (g != h && (k < Math.min(g, h) || k > Math.max(g, h))) || (((e < f && a >= e && a < f) || (e > f && a < e && a >= f)) && ++l);
          }
      return -1 == l ? 1 : !!(l & 1);
  },
  intersects: function (a) {
      var b = !1;
      if ("OpenLayers.Geometry.Point" == a.CLASS_NAME) b = this.containsPoint(a);
      else if ("OpenLayers.Geometry.LineString" == a.CLASS_NAME) b = a.intersects(this);
      else if ("OpenLayers.Geometry.LinearRing" == a.CLASS_NAME) b = OpenLayers.Geometry.LineString.prototype.intersects.apply(this, [a]);
      else for (var c = 0, d = a.components.length; c < d && !(b = a.components[c].intersects(this)); ++c);
      return b;
  },
  getVertices: function (a) {
      return !0 === a ? [] : this.components.slice(0, this.components.length - 1);
  },
  CLASS_NAME: "OpenLayers.Geometry.LinearRing",
});
OpenLayers.Geometry.Polygon = OpenLayers.Class(OpenLayers.Geometry.Collection, {
  componentTypes: ["OpenLayers.Geometry.LinearRing"],
  getArea: function () {
      var a = 0;
      if (this.components && 0 < this.components.length) for (var a = a + Math.abs(this.components[0].getArea()), b = 1, c = this.components.length; b < c; b++) a -= Math.abs(this.components[b].getArea());
      return a;
  },
  getGeodesicArea: function (a) {
      var b = 0;
      if (this.components && 0 < this.components.length) for (var b = b + Math.abs(this.components[0].getGeodesicArea(a)), c = 1, d = this.components.length; c < d; c++) b -= Math.abs(this.components[c].getGeodesicArea(a));
      return b;
  },
  containsPoint: function (a) {
      var b = this.components.length,
          c = !1;
      if (0 < b && ((c = this.components[0].containsPoint(a)), 1 !== c && c && 1 < b))
          for (var d, e = 1; e < b; ++e)
              if ((d = this.components[e].containsPoint(a))) {
                  c = 1 === d ? 1 : !1;
                  break;
              }
      return c;
  },
  intersects: function (a) {
      var b = !1,
          c,
          d;
      if ("OpenLayers.Geometry.Point" == a.CLASS_NAME) b = this.containsPoint(a);
      else if ("OpenLayers.Geometry.LineString" == a.CLASS_NAME || "OpenLayers.Geometry.LinearRing" == a.CLASS_NAME) {
          c = 0;
          for (d = this.components.length; c < d && !(b = a.intersects(this.components[c])); ++c);
          if (!b) for (c = 0, d = a.components.length; c < d && !(b = this.containsPoint(a.components[c])); ++c);
      } else for (c = 0, d = a.components.length; c < d && !(b = this.intersects(a.components[c])); ++c);
      if (!b && "OpenLayers.Geometry.Polygon" == a.CLASS_NAME) {
          var e = this.components[0];
          c = 0;
          for (d = e.components.length; c < d && !(b = a.containsPoint(e.components[c])); ++c);
      }
      return b;
  },
  distanceTo: function (a, b) {
      return b && !1 === b.edge && this.intersects(a) ? 0 : OpenLayers.Geometry.Collection.prototype.distanceTo.apply(this, [a, b]);
  },
  CLASS_NAME: "OpenLayers.Geometry.Polygon",
});
OpenLayers.Geometry.Polygon.createRegularPolygon = function (a, b, c, d) {
  var e = Math.PI * (1 / c - 0.5);
  d && (e += (d / 180) * Math.PI);
  for (var f, g = [], h = 0; h < c; ++h) (f = e + (2 * h * Math.PI) / c), (d = a.x + b * Math.cos(f)), (f = a.y + b * Math.sin(f)), g.push(new OpenLayers.Geometry.Point(d, f));
  a = new OpenLayers.Geometry.LinearRing(g);
  return new OpenLayers.Geometry.Polygon([a]);
};
OpenLayers.Geometry.MultiPolygon = OpenLayers.Class(OpenLayers.Geometry.Collection, { componentTypes: ["OpenLayers.Geometry.Polygon"], CLASS_NAME: "OpenLayers.Geometry.MultiPolygon" });
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]));
      a = this.getElementsByTagNameNS(a.documentElement, this.gmlns, this.featureName);
      for (var 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 };
      a = a.firstChild;
      for (var k; a && (1 != a.nodeType || !(k = a.getAttribute("fid") || a.getAttribute("id"))); ) a = a.nextSibling;
      h.fid = k;
      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) {
          a = this.getElementsByTagNameNS(a, this.gmlns, "Point");
          var 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,
                  k;
              for (c = 0; c < d.length / f; ++c) (g = c * f), (h = d[g]), (k = d[g + 1]), (g = 2 == f ? null : d[g + 2]), this.xy ? e.push(new OpenLayers.Geometry.Point(h, k, g)) : e.push(new OpenLayers.Geometry.Point(k, h, g));
          }
          if (0 == d.length && ((c = this.getElementsByTagNameNS(a, this.gmlns, "coordinates")), 0 < c.length))
              for (d = this.getChildValue(c[0]), d = d.replace(this.regExes.trimSpace, ""), d = d.replace(this.regExes.trimComma, ","), f = d.split(this.regExes.splitSpace), 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) {
          a = this.getElementsByTagNameNS(a, this.gmlns, "LineString");
          var 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) {
          a = this.getElementsByTagNameNS(a, this.gmlns, "LinearRing");
          var 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) {
          a = this.getElementsByTagNameNS(a, this.gmlns, "Polygon");
          var 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) {
      var b = {};
      a = a.firstChild;
      for (var 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 = e.substring(e.lastIndexOf(":") + 1),
              f = this.createElementNS(this.featureNS, this.featurePrefix + ":" + f);
          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,
          b = b.substring(b.lastIndexOf(".") + 1);
      return this.buildGeometry[b.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) {
          var b = this.createElementNS(this.gmlns, "gml:MultiPoint");
          a = a.components;
          for (var 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) {
          var b = this.createElementNS(this.gmlns, "gml:MultiLineString");
          a = a.components;
          for (var 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) {
          var b = this.createElementNS(this.gmlns, "gml:Polygon");
          a = a.components;
          for (var 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) {
          var b = this.createElementNS(this.gmlns, "gml:MultiPolygon");
          a = a.components;
          for (var 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 {
          a = a.components ? a.components : [a];
          for (var 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 || "string" === typeof a.featureType;
  },
  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, { features: b }, !0);
      if (0 == b.length) {
          var c = this.getElementsByTagNameNS(a, this.namespaces.gml, "featureMember");
          if (c.length) {
              a = 0;
              for (var d = c.length; a < d; ++a) this.readNode(c[a], { features: b }, !0);
          } else (c = this.getElementsByTagNameNS(a, this.namespaces.gml, "featureMembers")), c.length && this.readNode(c[0], { features: b }, !0);
      }
      return b;
  },
  readNode: function (a, b, c) {
      !0 === c && !0 === this.autoConfig && ((this.featureType = null), delete this.namespaceAlias[this.featureNS], delete this.namespaces.feature, (this.featureNS = null));
      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 = !0));
      return OpenLayers.Format.XML.prototype.readNode.apply(this, [a, b]);
  },
  readers: {
      gml: {
          _inherit: function (a, b, c) {},
          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);
              c.components && 0 < c.components.length && (b.bounds = c.components[0]);
          },
          Point: function (a, b) {
              var c = { points: [] };
              this.readChildNodes(a, c);
              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);
              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.readers.gml._inherit.apply(this, [a, c, b]);
              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.readers.gml._inherit.apply(this, [a, c, b]);
              this.readChildNodes(a, c);
              b.components || (b.components = []);
              b.components.push(new OpenLayers.Geometry.LineString(c.points));
          },
          MultiLineString: function (a, b) {
              var c = { components: [] };
              this.readers.gml._inherit.apply(this, [a, c, b]);
              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.readers.gml._inherit.apply(this, [a, c, b]);
              this.readChildNodes(a, c);
              c.inner.unshift(c.outer);
              b.components || (b.components = []);
              b.components.push(new OpenLayers.Geometry.Polygon(c.inner));
          },
          LinearRing: function (a, b) {
              var c = {};
              this.readers.gml._inherit.apply(this, [a, c]);
              this.readChildNodes(a, c);
              b.components = [new OpenLayers.Geometry.LinearRing(c.points)];
          },
          MultiPolygon: function (a, b) {
              var c = { components: [] };
              this.readers.gml._inherit.apply(this, [a, c, b]);
              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.readers.gml._inherit.apply(this, [a, c, b]);
              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 || -1 === OpenLayers.Util.indexOf(this.featureType, d)
                      ? d === this.featureType && (c = "_typeName")
                      : (c = "_typeName")
                  : 0 == a.childNodes.length || (1 == a.childNodes.length && 3 == a.firstChild.nodeType)
                  ? 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);
              c.name && (c.attributes.name = c.name);
              var d = new OpenLayers.Feature.Vector(c.components[0], c.attributes);
              this.singleFeatureType || ((d.type = a.nodeName.split(":").pop()), (d.namespace = a.namespaceURI));
              var e = a.getAttribute("fid") || this.getAttributeNS(a, this.namespaces.gml, "id");
              e && (d.fid = e);
              this.internalProjection && this.externalProjection && d.geometry && d.geometry.transform(this.externalProjection, this.internalProjection);
              c.bounds && (d.bounds = c.bounds);
              b.features.push(d);
          },
          _geometry: function (a, b) {
              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) {
      var b;
      b = OpenLayers.Util.isArray(a) ? "featureMembers" : "featureMember";
      a = this.writeNode("gml:" + b, 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) {
              var b = this.createElementNSPlus("gml:MultiPoint");
              a = a.components || [a];
              for (var 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) {
              var b = this.createElementNSPlus("gml:MultiLineString");
              a = a.components || [a];
              for (var 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) {
              var b = this.createElementNSPlus("gml:MultiPolygon");
              a = a.components || [a];
              for (var 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];
                  null != d && 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(
          {
              _inherit: function (a, b, c) {
                  if ((a = parseInt(a.getAttribute("srsDimension"), 10) || (c && c.srsDimension))) b.srsDimension = a;
              },
              featureMembers: function (a, b) {
                  this.readChildNodes(a, b);
              },
              Curve: function (a, b) {
                  var c = { points: [] };
                  this.readers.gml._inherit.apply(this, [a, c, b]);
                  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 = b.srsDimension || parseInt(a.getAttribute("srsDimension") || a.getAttribute("dimension"), 10) || 2,
                          e,
                          f,
                          g,
                          h = Array(c.length / d),
                          k = 0,
                          l = c.length;
                      k < l;
                      k += d
                  )
                      (e = c[k]), (f = c[k + 1]), (g = 2 == d ? void 0 : c[k + 2]), (h[k / 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.readers.gml._inherit.apply(this, [a, c, b]);
                  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.readers.gml._inherit.apply(this, [a, c, b]);
                  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) {
      var b;
      b = OpenLayers.Util.isArray(a) ? "featureMembers" : "featureMember";
      a = this.writeNode("gml:" + b, 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) {
                  var b = this.createElementNSPlus("gml:MultiCurve");
                  a = a.components || [a];
                  for (var 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) {
                  var b = this.createElementNSPlus("gml:MultiSurface");
                  a = a.components || [a];
                  for (var 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, b) {
      var c = this.version;
      if (!c) {
          var d = a.getAttribute("xmlns:ows");
          d && "1.1" === d.substring(d.lastIndexOf("/") + 1) && (c = "1.1.0");
          c || (c = this.defaultVersion);
      }
      return c;
  },
  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, b) {
              var c = this.createElementNSPlus(b || "ows:BoundingBox", { attributes: { crs: a.projection } });
              this.writeNode("ows:LowerCorner", a, c);
              this.writeNode("ows:UpperCorner", a, c);
              return c;
          },
          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, c) {
      return OpenLayers.Format.GML.v3.prototype.readNode.apply(this, arguments);
  },
  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) {
                  a = OpenLayers.Util.extend({ featureNS: this.featureNS, featurePrefix: this.featurePrefix, featureType: this.featureType, srsName: this.srsName }, a);
                  var 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 (a) {},
  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.Format.JSON = OpenLayers.Class(OpenLayers.Format, {
  indent: "    ",
  space: " ",
  newline: "\n",
  level: 0,
  pretty: !1,
  nativeJSON: (function () {
      return !(!window.JSON || "function" != typeof JSON.parse || "function" != typeof JSON.stringify);
  })(),
  read: function (a, b) {
      var c;
      if (this.nativeJSON) c = JSON.parse(a, b);
      else
          try {
              if (
                  /^[\],:{}\s]*$/.test(
                      a
                          .replace(/\\["\\\/bfnrtu]/g, "@")
                          .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
                          .replace(/(?:^|:|,)(?:\s*\[)+/g, "")
                  ) &&
                  ((c = eval("(" + a + ")")), "function" === typeof b)
              ) {
                  var d = function (a, c) {
                      if (c && "object" === typeof c) for (var e in c) c.hasOwnProperty(e) && (c[e] = d(e, c[e]));
                      return b(a, c);
                  };
                  c = d("", c);
              }
          } catch (e) {}
      this.keepData && (this.data = c);
      return c;
  },
  write: function (a, b) {
      this.pretty = !!b;
      var c = null,
          d = typeof a;
      if (this.serialize[d])
          try {
              c = !this.pretty && this.nativeJSON ? JSON.stringify(a) : this.serialize[d].apply(this, [a]);
          } catch (e) {
              OpenLayers.Console.error("Trouble serializing: " + e);
          }
      return c;
  },
  writeIndent: function () {
      var a = [];
      if (this.pretty) for (var b = 0; b < this.level; ++b) a.push(this.indent);
      return a.join("");
  },
  writeNewline: function () {
      return this.pretty ? this.newline : "";
  },
  writeSpace: function () {
      return this.pretty ? this.space : "";
  },
  serialize: {
      object: function (a) {
          if (null == a) return "null";
          if (a.constructor == Date) return this.serialize.date.apply(this, [a]);
          if (a.constructor == Array) return this.serialize.array.apply(this, [a]);
          var b = ["{"];
          this.level += 1;
          var c,
              d,
              e,
              f = !1;
          for (c in a)
              a.hasOwnProperty(c) &&
                  ((d = OpenLayers.Format.JSON.prototype.write.apply(this, [c, this.pretty])),
                  (e = OpenLayers.Format.JSON.prototype.write.apply(this, [a[c], this.pretty])),
                  null != d && null != e && (f && b.push(","), b.push(this.writeNewline(), this.writeIndent(), d, ":", this.writeSpace(), e), (f = !0)));
          this.level -= 1;
          b.push(this.writeNewline(), this.writeIndent(), "}");
          return b.join("");
      },
      array: function (a) {
          var b,
              c = ["["];
          this.level += 1;
          for (var d = 0, e = a.length; d < e; ++d) (b = OpenLayers.Format.JSON.prototype.write.apply(this, [a[d], this.pretty])), null != b && (0 < d && c.push(","), c.push(this.writeNewline(), this.writeIndent(), b));
          this.level -= 1;
          c.push(this.writeNewline(), this.writeIndent(), "]");
          return c.join("");
      },
      string: function (a) {
          var b = { "\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" };
          return /["\\\x00-\x1f]/.test(a)
              ? '"' +
                    a.replace(/([\x00-\x1f\\"])/g, function (a, d) {
                        var e = b[d];
                        if (e) return e;
                        e = d.charCodeAt();
                        return "\\u00" + Math.floor(e / 16).toString(16) + (e % 16).toString(16);
                    }) +
                    '"'
              : '"' + a + '"';
      },
      number: function (a) {
          return isFinite(a) ? String(a) : "null";
      },
      boolean: function (a) {
          return String(a);
      },
      date: function (a) {
          function b(a) {
              return 10 > a ? "0" + a : a;
          }
          return '"' + a.getFullYear() + "-" + b(a.getMonth() + 1) + "-" + b(a.getDate()) + "T" + b(a.getHours()) + ":" + b(a.getMinutes()) + ":" + b(a.getSeconds()) + '"';
      },
  },
  CLASS_NAME: "OpenLayers.Format.JSON",
});
OpenLayers.Format.GeoJSON = OpenLayers.Class(OpenLayers.Format.JSON, {
  ignoreExtraDims: !1,
  read: function (a, b, c) {
      b = b ? b : "FeatureCollection";
      var d = null,
          e = null,
          e = "string" == typeof a ? OpenLayers.Format.JSON.prototype.read.apply(this, [a, c]) : a;
      if (!e) OpenLayers.Console.error("Bad JSON: " + a);
      else if ("string" != typeof e.type) OpenLayers.Console.error("Bad GeoJSON - no type: " + a);
      else if (this.isValidType(e, b))
          switch (b) {
              case "Geometry":
                  try {
                      d = this.parseGeometry(e);
                  } catch (f) {
                      OpenLayers.Console.error(f);
                  }
                  break;
              case "Feature":
                  try {
                      (d = this.parseFeature(e)), (d.type = "Feature");
                  } catch (g) {
                      OpenLayers.Console.error(g);
                  }
                  break;
              case "FeatureCollection":
                  switch (((d = []), e.type)) {
                      case "Feature":
                          try {
                              d.push(this.parseFeature(e));
                          } catch (h) {
                              (d = null), OpenLayers.Console.error(h);
                          }
                          break;
                      case "FeatureCollection":
                          a = 0;
                          for (b = e.features.length; a < b; ++a)
                              try {
                                  d.push(this.parseFeature(e.features[a]));
                              } catch (k) {
                                  (d = null), OpenLayers.Console.error(k);
                              }
                          break;
                      default:
                          try {
                              var l = this.parseGeometry(e);
                              d.push(new OpenLayers.Feature.Vector(l));
                          } catch (m) {
                              (d = null), OpenLayers.Console.error(m);
                          }
                  }
          }
      return d;
  },
  isValidType: function (a, b) {
      var c = !1;
      switch (b) {
          case "Geometry":
              -1 == OpenLayers.Util.indexOf("Point MultiPoint LineString MultiLineString Polygon MultiPolygon Box GeometryCollection".split(" "), a.type) ? OpenLayers.Console.error("Unsupported geometry type: " + a.type) : (c = !0);
              break;
          case "FeatureCollection":
              c = !0;
              break;
          default:
              a.type == b ? (c = !0) : OpenLayers.Console.error("Cannot convert types from " + a.type + " to " + b);
      }
      return c;
  },
  parseFeature: function (a) {
      var b, c, d;
      c = a.properties ? a.properties : {};
      d = (a.geometry && a.geometry.bbox) || a.bbox;
      try {
          b = this.parseGeometry(a.geometry);
      } catch (e) {
          throw e;
      }
      b = new OpenLayers.Feature.Vector(b, c);
      d && (b.bounds = OpenLayers.Bounds.fromArray(d));
      a.id && (b.fid = a.id);
      return b;
  },
  parseGeometry: function (a) {
      if (null == a) return null;
      var b,
          c = !1;
      if ("GeometryCollection" == a.type) {
          if (!OpenLayers.Util.isArray(a.geometries)) throw "GeometryCollection must have geometries array: " + a;
          b = a.geometries.length;
          for (var c = Array(b), d = 0; d < b; ++d) c[d] = this.parseGeometry.apply(this, [a.geometries[d]]);
          b = new OpenLayers.Geometry.Collection(c);
          c = !0;
      } else {
          if (!OpenLayers.Util.isArray(a.coordinates)) throw "Geometry must have coordinates array: " + a;
          if (!this.parseCoords[a.type.toLowerCase()]) throw "Unsupported geometry type: " + a.type;
          try {
              b = this.parseCoords[a.type.toLowerCase()].apply(this, [a.coordinates]);
          } catch (e) {
              throw e;
          }
      }
      this.internalProjection && this.externalProjection && !c && b.transform(this.externalProjection, this.internalProjection);
      return b;
  },
  parseCoords: {
      point: function (a) {
          if (!1 == this.ignoreExtraDims && 2 != a.length) throw "Only 2D points are supported: " + a;
          return new OpenLayers.Geometry.Point(a[0], a[1]);
      },
      multipoint: function (a) {
          for (var b = [], c = null, d = 0, e = a.length; d < e; ++d) {
              try {
                  c = this.parseCoords.point.apply(this, [a[d]]);
              } catch (f) {
                  throw f;
              }
              b.push(c);
          }
          return new OpenLayers.Geometry.MultiPoint(b);
      },
      linestring: function (a) {
          for (var b = [], c = null, d = 0, e = a.length; d < e; ++d) {
              try {
                  c = this.parseCoords.point.apply(this, [a[d]]);
              } catch (f) {
                  throw f;
              }
              b.push(c);
          }
          return new OpenLayers.Geometry.LineString(b);
      },
      multilinestring: function (a) {
          for (var b = [], c = null, d = 0, e = a.length; d < e; ++d) {
              try {
                  c = this.parseCoords.linestring.apply(this, [a[d]]);
              } catch (f) {
                  throw f;
              }
              b.push(c);
          }
          return new OpenLayers.Geometry.MultiLineString(b);
      },
      polygon: function (a) {
          for (var b = [], c, d, e = 0, f = a.length; e < f; ++e) {
              try {
                  d = this.parseCoords.linestring.apply(this, [a[e]]);
              } catch (g) {
                  throw g;
              }
              c = new OpenLayers.Geometry.LinearRing(d.components);
              b.push(c);
          }
          return new OpenLayers.Geometry.Polygon(b);
      },
      multipolygon: function (a) {
          for (var b = [], c = null, d = 0, e = a.length; d < e; ++d) {
              try {
                  c = this.parseCoords.polygon.apply(this, [a[d]]);
              } catch (f) {
                  throw f;
              }
              b.push(c);
          }
          return new OpenLayers.Geometry.MultiPolygon(b);
      },
      box: function (a) {
          if (2 != a.length) throw "GeoJSON box coordinates must have 2 elements";
          return new OpenLayers.Geometry.Polygon([
              new OpenLayers.Geometry.LinearRing([
                  new OpenLayers.Geometry.Point(a[0][0], a[0][1]),
                  new OpenLayers.Geometry.Point(a[1][0], a[0][1]),
                  new OpenLayers.Geometry.Point(a[1][0], a[1][1]),
                  new OpenLayers.Geometry.Point(a[0][0], a[1][1]),
                  new OpenLayers.Geometry.Point(a[0][0], a[0][1]),
              ]),
          ]);
      },
  },
  write: function (a, b) {
      var c = { type: null };
      if (OpenLayers.Util.isArray(a)) {
          c.type = "FeatureCollection";
          var d = a.length;
          c.features = Array(d);
          for (var e = 0; e < d; ++e) {
              var f = a[e];
              if (!f instanceof OpenLayers.Feature.Vector) throw "FeatureCollection only supports collections of features: " + f;
              c.features[e] = this.extract.feature.apply(this, [f]);
          }
      } else
          0 == a.CLASS_NAME.indexOf("OpenLayers.Geometry")
              ? (c = this.extract.geometry.apply(this, [a]))
              : a instanceof OpenLayers.Feature.Vector && ((c = this.extract.feature.apply(this, [a])), a.layer && a.layer.projection && (c.crs = this.createCRSObject(a)));
      return OpenLayers.Format.JSON.prototype.write.apply(this, [c, b]);
  },
  createCRSObject: function (a) {
      a = a.layer.projection.toString();
      var b = {};
      a.match(/epsg:/i) && ((a = parseInt(a.substring(a.indexOf(":") + 1))), (b = 4326 == a ? { type: "name", properties: { name: "urn:ogc:def:crs:OGC:1.3:CRS84" } } : { type: "name", properties: { name: "EPSG:" + a } }));
      return b;
  },
  extract: {
      feature: function (a) {
          var b = this.extract.geometry.apply(this, [a.geometry]),
              b = { type: "Feature", properties: a.attributes, geometry: b };
          null != a.fid && (b.id = a.fid);
          return b;
      },
      geometry: function (a) {
          if (null == a) return null;
          this.internalProjection && this.externalProjection && ((a = a.clone()), a.transform(this.internalProjection, this.externalProjection));
          var b = a.CLASS_NAME.split(".")[2];
          a = this.extract[b.toLowerCase()].apply(this, [a]);
          return "Collection" == b ? { type: "GeometryCollection", geometries: a } : { type: b, coordinates: a };
      },
      point: function (a) {
          return [a.x, a.y];
      },
      multipoint: function (a) {
          for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push(this.extract.point.apply(this, [a.components[c]]));
          return b;
      },
      linestring: function (a) {
          for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push(this.extract.point.apply(this, [a.components[c]]));
          return b;
      },
      multilinestring: function (a) {
          for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push(this.extract.linestring.apply(this, [a.components[c]]));
          return b;
      },
      polygon: function (a) {
          for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push(this.extract.linestring.apply(this, [a.components[c]]));
          return b;
      },
      multipolygon: function (a) {
          for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push(this.extract.polygon.apply(this, [a.components[c]]));
          return b;
      },
      collection: function (a) {
          for (var b = a.components.length, c = Array(b), d = 0; d < b; ++d) c[d] = this.extract.geometry.apply(this, [a.components[d]]);
          return c;
      },
  },
  CLASS_NAME: "OpenLayers.Format.GeoJSON",
});
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) {
      c = OpenLayers.Protocol.Script.register(c);
      var 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.Format.EncodedPolyline = OpenLayers.Class(OpenLayers.Format, {
  geometryType: "linestring",
  initialize: function (a) {
      OpenLayers.Format.prototype.initialize.apply(this, [a]);
  },
  read: function (a) {
      var b;
      if ("linestring" == this.geometryType) b = OpenLayers.Geometry.LineString;
      else if ("linearring" == this.geometryType) b = OpenLayers.Geometry.LinearRing;
      else if ("multipoint" == this.geometryType) b = OpenLayers.Geometry.MultiPoint;
      else if ("point" != this.geometryType && "polygon" != this.geometryType) return null;
      a = this.decodeDeltas(a, 2);
      for (var c = a.length, d = [], e = 0; e + 1 < c; ) {
          var f = a[e++],
              g = a[e++];
          d.push(new OpenLayers.Geometry.Point(g, f));
      }
      return "point" == this.geometryType
          ? new OpenLayers.Feature.Vector(d[0])
          : "polygon" == this.geometryType
          ? new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(d)]))
          : new OpenLayers.Feature.Vector(new b(d));
  },
  decode: function (a, b, c) {
      a = this.decodeDeltas(a, b, c || 1e5);
      c = a.length;
      for (var d = [], e = 0; e + (b - 1) < c; ) {
          for (var f = [], g = 0; g < b; ++g) f.push(a[e++]);
          d.push(f);
      }
      return d;
  },
  write: function (a) {
      a = (a.constructor == Array ? a[0] : a).geometry;
      var b = a.CLASS_NAME.split(".")[2].toLowerCase();
      if ("point" == b) a = Array(a);
      else if ("linestring" == b || "linearring" == b || "multipoint" == b) a = a.components;
      else if ("polygon" == b) a = a.components[0].components;
      else return null;
      for (var b = [], c = a.length, d = 0; d < c; ++d) {
          var e = a[d];
          b.push(e.y);
          b.push(e.x);
      }
      return this.encodeDeltas(b, 2);
  },
  encode: function (a, b, c) {
      c = c || 1e5;
      for (var d = [], e = a.length, f = 0; f < e; ++f) for (var g = a[f], h = 0; h < b; ++h) d.push(g[h]);
      return this.encodeDeltas(d, b, c);
  },
  encodeDeltas: function (a, b, c) {
      var d,
          e = Array(b);
      for (d = 0; d < b; ++d) e[d] = 0;
      for (var f = a.length, g = 0; g < f; )
          for (d = 0; d < b; ++d, ++g) {
              var h = a[g],
                  k = h - e[d];
              e[d] = h;
              a[g] = k;
          }
      return this.encodeFloats(a, c || 1e5);
  },
  decodeDeltas: function (a, b, c) {
      var d,
          e = Array(b);
      for (d = 0; d < b; ++d) e[d] = 0;
      a = this.decodeFloats(a, c || 1e5);
      c = a.length;
      for (var f = 0; f < c; ) for (d = 0; d < b; ++d, ++f) (e[d] += a[f]), (a[f] = e[d]);
      return a;
  },
  encodeFloats: function (a, b) {
      for (var c = b || 1e5, d = a.length, e = 0; e < d; ++e) a[e] = Math.round(a[e] * c);
      return this.encodeSignedIntegers(a);
  },
  decodeFloats: function (a, b) {
      for (var c = b || 1e5, d = this.decodeSignedIntegers(a), e = d.length, f = 0; f < e; ++f) d[f] /= c;
      return d;
  },
  encodeSignedIntegers: function (a) {
      for (var b = a.length, c = 0; c < b; ++c) {
          var d = a[c],
              e = d << 1;
          0 > d && (e = ~e);
          a[c] = e;
      }
      return this.encodeUnsignedIntegers(a);
  },
  decodeSignedIntegers: function (a) {
      a = this.decodeUnsignedIntegers(a);
      for (var b = a.length, c = 0; c < b; ++c) {
          var d = a[c];
          a[c] = d & 1 ? ~(d >> 1) : d >> 1;
      }
      return a;
  },
  encodeUnsignedIntegers: function (a) {
      for (var b = "", c = a.length, d = 0; d < c; ++d) b += this.encodeUnsignedInteger(a[d]);
      return b;
  },
  decodeUnsignedIntegers: function (a) {
      for (var b = [], c = 0, d = 0, e = a.length, f = 0; f < e; ++f) {
          var g = a.charCodeAt(f) - 63,
              c = c | ((g & 31) << d);
          32 > g ? (b.push(c), (d = c = 0)) : (d += 5);
      }
      return b;
  },
  encodeFloat: function (a, b) {
      a = Math.round(a * (b || 1e5));
      return this.encodeSignedInteger(a);
  },
  decodeFloat: function (a, b) {
      return this.decodeSignedInteger(a) / (b || 1e5);
  },
  encodeSignedInteger: function (a) {
      var b = a << 1;
      0 > a && (b = ~b);
      return this.encodeUnsignedInteger(b);
  },
  decodeSignedInteger: function (a) {
      a = this.decodeUnsignedInteger(a);
      return a & 1 ? ~(a >> 1) : a >> 1;
  },
  encodeUnsignedInteger: function (a) {
      for (var b, c = ""; 32 <= a; ) (b = (32 | (a & 31)) + 63), (c += String.fromCharCode(b)), (a >>= 5);
      return (c += String.fromCharCode(a + 63));
  },
  decodeUnsignedInteger: function (a) {
      for (var b = 0, c = 0, d = a.length, e = 0; e < d; ++e) {
          var f = a.charCodeAt(e) - 63,
              b = b | ((f & 31) << c);
          if (32 > f) break;
          c += 5;
      }
      return b;
  },
  CLASS_NAME: "OpenLayers.Format.EncodedPolyline",
});
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 (a) {
      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) {
      var b = this.controls;
      a = a.buttonElement;
      for (var 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.Button = OpenLayers.Class(OpenLayers.Control, { type: OpenLayers.Control.TYPE_BUTTON, trigger: function () {}, CLASS_NAME: "OpenLayers.Control.Button" });
OpenLayers.Control.ZoomIn = OpenLayers.Class(OpenLayers.Control.Button, {
  trigger: function () {
      this.map && this.map.zoomIn();
  },
  CLASS_NAME: "OpenLayers.Control.ZoomIn",
});
OpenLayers.Control.ZoomOut = OpenLayers.Class(OpenLayers.Control.Button, {
  trigger: function () {
      this.map && this.map.zoomOut();
  },
  CLASS_NAME: "OpenLayers.Control.ZoomOut",
});
OpenLayers.Control.ZoomToMaxExtent = OpenLayers.Class(OpenLayers.Control.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.Layer.HTTPRequest = OpenLayers.Class(OpenLayers.Layer, {
  URL_HASH_FACTOR: (Math.sqrt(5) - 1) / 2,
  url: null,
  params: null,
  reproject: !1,
  initialize: function (a, b, c, d) {
      OpenLayers.Layer.prototype.initialize.apply(this, [a, d]);
      this.url = b;
      this.params || (this.params = OpenLayers.Util.extend({}, c));
  },
  destroy: function () {
      this.params = this.url = null;
      OpenLayers.Layer.prototype.destroy.apply(this, arguments);
  },
  clone: function (a) {
      null == a && (a = new OpenLayers.Layer.HTTPRequest(this.name, this.url, this.params, this.getOptions()));
      return (a = OpenLayers.Layer.prototype.clone.apply(this, [a]));
  },
  setUrl: function (a) {
      this.url = a;
  },
  mergeNewParams: function (a) {
      this.params = OpenLayers.Util.extend(this.params, a);
      a = this.redraw();
      null != this.map && this.map.events.triggerEvent("changelayer", { layer: this, property: "params" });
      return a;
  },
  redraw: function (a) {
      return a ? this.mergeNewParams({ _olSalt: Math.random() }) : OpenLayers.Layer.prototype.redraw.apply(this, []);
  },
  selectUrl: function (a, b) {
      for (var c = 1, d = 0, e = a.length; d < e; d++) (c *= a.charCodeAt(d) * this.URL_HASH_FACTOR), (c -= Math.floor(c));
      return b[Math.floor(c * b.length)];
  },
  getFullRequestString: function (a, b) {
      var c = b || this.url,
          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);
      return OpenLayers.Util.urlAppend(c, e);
  },
  CLASS_NAME: "OpenLayers.Layer.HTTPRequest",
});
OpenLayers.Tile = OpenLayers.Class({
  events: null,
  eventListeners: null,
  id: null,
  layer: null,
  url: null,
  bounds: null,
  size: null,
  position: null,
  isLoading: !1,
  initialize: function (a, b, c, d, e, f) {
      this.layer = a;
      this.position = b.clone();
      this.setBounds(c);
      this.url = d;
      e && (this.size = e.clone());
      this.id = OpenLayers.Util.createUniqueID("Tile_");
      OpenLayers.Util.extend(this, f);
      this.events = new OpenLayers.Events(this);
      if (this.eventListeners instanceof Object) this.events.on(this.eventListeners);
  },
  unload: function () {
      this.isLoading && ((this.isLoading = !1), this.events.triggerEvent("unload"));
  },
  destroy: function () {
      this.position = this.size = this.bounds = this.layer = null;
      this.eventListeners && this.events.un(this.eventListeners);
      this.events.destroy();
      this.events = this.eventListeners = null;
  },
  draw: function (a) {
      a || this.clear();
      var b = this.shouldDraw();
      b && !a && !1 === this.events.triggerEvent("beforedraw") && (b = null);
      return b;
  },
  shouldDraw: function () {
      var a = !1,
          b = this.layer.maxExtent;
      if (b) {
          var c = this.layer.map,
              c = c.baseLayer.wrapDateLine && c.getMaxExtent();
          this.bounds.intersectsBounds(b, { inclusive: !1, worldBounds: c }) && (a = !0);
      }
      return a || this.layer.displayOutsideMaxExtent;
  },
  setBounds: function (a) {
      a = a.clone();
      if (this.layer.map.baseLayer.wrapDateLine) {
          var b = this.layer.map.getMaxExtent(),
              c = this.layer.map.getResolution();
          a = a.wrapDateLine(b, { leftTolerance: c, rightTolerance: c });
      }
      this.bounds = a;
  },
  moveTo: function (a, b, c) {
      null == c && (c = !0);
      this.setBounds(a);
      this.position = b.clone();
      c && this.draw();
  },
  clear: function (a) {},
  CLASS_NAME: "OpenLayers.Tile",
});
OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, {
  url: null,
  imgDiv: null,
  frame: null,
  imageReloadAttempts: null,
  layerAlphaHack: null,
  asyncRequestId: null,
  maxGetUrlLength: null,
  canvasContext: null,
  crossOriginKeyword: null,
  initialize: function (a, b, c, d, e, f) {
      OpenLayers.Tile.prototype.initialize.apply(this, arguments);
      this.url = d;
      this.layerAlphaHack = this.layer.alpha && OpenLayers.Util.alphaHack();
      if (null != this.maxGetUrlLength || this.layer.gutter || this.layerAlphaHack) (this.frame = document.createElement("div")), (this.frame.style.position = "absolute"), (this.frame.style.overflow = "hidden");
      null != this.maxGetUrlLength && OpenLayers.Util.extend(this, OpenLayers.Tile.Image.IFrame);
  },
  destroy: function () {
      this.imgDiv && (this.clear(), (this.frame = this.imgDiv = null));
      this.asyncRequestId = null;
      OpenLayers.Tile.prototype.destroy.apply(this, arguments);
  },
  draw: function () {
      var a = OpenLayers.Tile.prototype.draw.apply(this, arguments);
      a
          ? (this.layer != this.layer.map.baseLayer && this.layer.reproject && (this.bounds = this.getBoundsFromBaseLayer(this.position)),
            this.isLoading ? (this._loadEvent = "reload") : ((this.isLoading = !0), (this._loadEvent = "loadstart")),
            this.renderTile(),
            this.positionTile())
          : !1 === a && this.unload();
      return a;
  },
  renderTile: function () {
      if (this.layer.async) {
          var a = (this.asyncRequestId = (this.asyncRequestId || 0) + 1);
          this.layer.getURLasync(
              this.bounds,
              function (b) {
                  a == this.asyncRequestId && ((this.url = b), this.initImage());
              },
              this
          );
      } else (this.url = this.layer.getURL(this.bounds)), this.initImage();
  },
  positionTile: function () {
      var a = this.getTile().style,
          b = this.frame ? this.size : this.layer.getImageSize(this.bounds),
          c = 1;
      this.layer instanceof OpenLayers.Layer.Grid && (c = this.layer.getServerResolution() / this.layer.map.getResolution());
      a.left = this.position.x + "px";
      a.top = this.position.y + "px";
      a.width = Math.round(c * b.w) + "px";
      a.height = Math.round(c * b.h) + "px";
  },
  clear: function () {
      OpenLayers.Tile.prototype.clear.apply(this, arguments);
      var a = this.imgDiv;
      if (a) {
          var b = this.getTile();
          b.parentNode === this.layer.div && this.layer.div.removeChild(b);
          this.setImgSrc();
          !0 === this.layerAlphaHack && (a.style.filter = "");
          OpenLayers.Element.removeClass(a, "olImageLoadError");
      }
      this.canvasContext = null;
  },
  getImage: function () {
      if (!this.imgDiv) {
          this.imgDiv = OpenLayers.Tile.Image.IMAGE.cloneNode(!1);
          var a = this.imgDiv.style;
          if (this.frame) {
              var b = 0,
                  c = 0;
              this.layer.gutter && ((b = 100 * (this.layer.gutter / this.layer.tileSize.w)), (c = 100 * (this.layer.gutter / this.layer.tileSize.h)));
              a.left = -b + "%";
              a.top = -c + "%";
              a.width = 2 * b + 100 + "%";
              a.height = 2 * c + 100 + "%";
          }
          a.visibility = "hidden";
          a.opacity = 0;
          1 > this.layer.opacity && (a.filter = "alpha(opacity=" + 100 * this.layer.opacity + ")");
          a.position = "absolute";
          this.layerAlphaHack && ((a.paddingTop = a.height), (a.height = "0"), (a.width = "100%"));
          this.frame && this.frame.appendChild(this.imgDiv);
      }
      return this.imgDiv;
  },
  setImage: function (a) {
      this.imgDiv = a;
  },
  initImage: function () {
      if (this.url || this.imgDiv) {
          this.events.triggerEvent("beforeload");
          this.layer.div.appendChild(this.getTile());
          this.events.triggerEvent(this._loadEvent);
          var a = this.getImage(),
              b = a.getAttribute("src") || "";
          this.url && OpenLayers.Util.isEquivalentUrl(b, this.url)
              ? (this._loadTimeout = window.setTimeout(OpenLayers.Function.bind(this.onImageLoad, this), 0))
              : (this.stopLoading(),
                this.crossOriginKeyword && a.removeAttribute("crossorigin"),
                OpenLayers.Event.observe(a, "load", OpenLayers.Function.bind(this.onImageLoad, this)),
                OpenLayers.Event.observe(a, "error", OpenLayers.Function.bind(this.onImageError, this)),
                (this.imageReloadAttempts = 0),
                this.setImgSrc(this.url));
      } else this.isLoading = !1;
  },
  setImgSrc: function (a) {
      var b = this.imgDiv;
      a
          ? ((b.style.visibility = "hidden"), (b.style.opacity = 0), this.crossOriginKeyword && ("data:" !== a.substr(0, 5) ? b.setAttribute("crossorigin", this.crossOriginKeyword) : b.removeAttribute("crossorigin")), (b.src = a))
          : (this.stopLoading(), (this.imgDiv = null), b.parentNode && b.parentNode.removeChild(b));
  },
  getTile: function () {
      return this.frame ? this.frame : this.getImage();
  },
  createBackBuffer: function () {
      if (this.imgDiv && !this.isLoading) {
          var a;
          this.frame ? ((a = this.frame.cloneNode(!1)), a.appendChild(this.imgDiv)) : (a = this.imgDiv);
          this.imgDiv = null;
          return a;
      }
  },
  onImageLoad: function () {
      var a = this.imgDiv;
      this.stopLoading();
      a.style.visibility = "inherit";
      a.style.opacity = this.layer.opacity;
      this.isLoading = !1;
      this.canvasContext = null;
      this.events.triggerEvent("loadend");
      !0 === this.layerAlphaHack && (a.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + a.src + "', sizingMethod='scale')");
  },
  onImageError: function () {
      var a = this.imgDiv;
      null != a.src &&
          (this.imageReloadAttempts++,
          this.imageReloadAttempts <= OpenLayers.IMAGE_RELOAD_ATTEMPTS ? this.setImgSrc(this.layer.getURL(this.bounds)) : (OpenLayers.Element.addClass(a, "olImageLoadError"), this.events.triggerEvent("loaderror"), this.onImageLoad()));
  },
  stopLoading: function () {
      OpenLayers.Event.stopObservingElement(this.imgDiv);
      window.clearTimeout(this._loadTimeout);
      delete this._loadTimeout;
  },
  getCanvasContext: function () {
      if (OpenLayers.CANVAS_SUPPORTED && this.imgDiv && !this.isLoading) {
          if (!this.canvasContext) {
              var a = document.createElement("canvas");
              a.width = this.size.w;
              a.height = this.size.h;
              this.canvasContext = a.getContext("2d");
              this.canvasContext.drawImage(this.imgDiv, 0, 0);
          }
          return this.canvasContext;
      }
  },
  CLASS_NAME: "OpenLayers.Tile.Image",
});
OpenLayers.Tile.Image.IMAGE = (function () {
  var a = new Image();
  a.className = "olTileImage";
  a.galleryImg = "no";
  return a;
})();
OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
  tileSize: null,
  tileOriginCorner: "bl",
  tileOrigin: null,
  tileOptions: null,
  tileClass: OpenLayers.Tile.Image,
  grid: null,
  singleTile: !1,
  ratio: 1.5,
  buffer: 0,
  transitionEffect: "resize",
  numLoadingTiles: 0,
  serverResolutions: null,
  loading: !1,
  backBuffer: null,
  gridResolution: null,
  backBufferResolution: null,
  backBufferLonLat: null,
  backBufferTimerId: null,
  removeBackBufferDelay: null,
  className: null,
  gridLayout: null,
  rowSign: null,
  transitionendEvents: ["transitionend", "webkitTransitionEnd", "otransitionend", "oTransitionEnd"],
  initialize: function (a, b, c, d) {
      OpenLayers.Layer.HTTPRequest.prototype.initialize.apply(this, arguments);
      this.grid = [];
      this._removeBackBuffer = OpenLayers.Function.bind(this.removeBackBuffer, this);
      this.initProperties();
      this.rowSign = "t" === this.tileOriginCorner.substr(0, 1) ? 1 : -1;
  },
  initProperties: function () {
      void 0 === this.options.removeBackBufferDelay && (this.removeBackBufferDelay = this.singleTile ? 0 : 2500);
      void 0 === this.options.className && (this.className = this.singleTile ? "olLayerGridSingleTile" : "olLayerGrid");
  },
  setMap: function (a) {
      OpenLayers.Layer.HTTPRequest.prototype.setMap.call(this, a);
      OpenLayers.Element.addClass(this.div, this.className);
  },
  removeMap: function (a) {
      this.removeBackBuffer();
  },
  destroy: function () {
      this.removeBackBuffer();
      this.clearGrid();
      this.tileSize = this.grid = null;
      OpenLayers.Layer.HTTPRequest.prototype.destroy.apply(this, arguments);
  },
  clearGrid: function () {
      if (this.grid) {
          for (var a = 0, b = this.grid.length; a < b; a++) for (var c = this.grid[a], d = 0, e = c.length; d < e; d++) this.destroyTile(c[d]);
          this.grid = [];
          this.gridLayout = this.gridResolution = null;
      }
  },
  addOptions: function (a, b) {
      var c = void 0 !== a.singleTile && a.singleTile !== this.singleTile;
      OpenLayers.Layer.HTTPRequest.prototype.addOptions.apply(this, arguments);
      this.map && c && (this.initProperties(), this.clearGrid(), (this.tileSize = this.options.tileSize), this.setTileSize(), this.moveTo(null, !0));
  },
  clone: function (a) {
      null == a && (a = new OpenLayers.Layer.Grid(this.name, this.url, this.params, this.getOptions()));
      a = OpenLayers.Layer.HTTPRequest.prototype.clone.apply(this, [a]);
      null != this.tileSize && (a.tileSize = this.tileSize.clone());
      a.grid = [];
      a.gridResolution = null;
      a.backBuffer = null;
      a.backBufferTimerId = null;
      a.loading = !1;
      a.numLoadingTiles = 0;
      return a;
  },
  moveTo: function (a, b, c) {
      OpenLayers.Layer.HTTPRequest.prototype.moveTo.apply(this, arguments);
      a = a || this.map.getExtent();
      if (null != a) {
          var d = !this.grid.length || b,
              e = this.getTilesBounds(),
              f = this.map.getResolution();
          this.getServerResolution(f);
          if (this.singleTile) {
              if (d || (!c && !e.containsBounds(a))) b && "resize" !== this.transitionEffect && this.removeBackBuffer(), (b && "resize" !== this.transitionEffect) || this.applyBackBuffer(f), this.initSingleTile(a);
          } else
              (d = d || !e.intersectsBounds(a, { worldBounds: this.map.baseLayer.wrapDateLine && this.map.getMaxExtent() }))
                  ? (!b || ("resize" !== this.transitionEffect && this.gridResolution !== f) || this.applyBackBuffer(f), this.initGriddedTiles(a))
                  : this.moveGriddedTiles();
      }
  },
  getTileData: function (a) {
      var b = null,
          c = a.lon,
          d = a.lat,
          e = this.grid.length;
      if (this.map && e) {
          var f = this.map.getResolution();
          a = this.tileSize.w;
          var g = this.tileSize.h,
              h = this.grid[0][0].bounds,
              k = h.left,
              h = h.top;
          if (c < k && this.map.baseLayer.wrapDateLine)
              var l = this.map.getMaxExtent().getWidth(),
                  m = Math.ceil((k - c) / l),
                  c = c + l * m;
          c = (c - k) / (f * a);
          d = (h - d) / (f * g);
          f = Math.floor(c);
          k = Math.floor(d);
          0 <= k && k < e && (e = this.grid[k][f]) && (b = { tile: e, i: Math.floor((c - f) * a), j: Math.floor((d - k) * g) });
      }
      return b;
  },
  destroyTile: function (a) {
      this.removeTileMonitoringHooks(a);
      a.destroy();
  },
  getServerResolution: function (a) {
      var b = Number.POSITIVE_INFINITY;
      a = a || this.map.getResolution();
      if (this.serverResolutions && -1 === OpenLayers.Util.indexOf(this.serverResolutions, a)) {
          var c, d, e, f;
          for (c = this.serverResolutions.length - 1; 0 <= c; c--) {
              e = this.serverResolutions[c];
              d = Math.abs(e - a);
              if (d > b) break;
              b = d;
              f = e;
          }
          a = f;
      }
      return a;
  },
  getServerZoom: function () {
      var a = this.getServerResolution();
      return this.serverResolutions ? OpenLayers.Util.indexOf(this.serverResolutions, a) : this.map.getZoomForResolution(a) + (this.zoomOffset || 0);
  },
  applyBackBuffer: function (a) {
      null !== this.backBufferTimerId && this.removeBackBuffer();
      var b = this.backBuffer;
      if (!b) {
          b = this.createBackBuffer();
          if (!b) return;
          a === this.gridResolution ? this.div.insertBefore(b, this.div.firstChild) : this.map.baseLayer.div.parentNode.insertBefore(b, this.map.baseLayer.div);
          this.backBuffer = b;
          var c = this.grid[0][0].bounds;
          this.backBufferLonLat = { lon: c.left, lat: c.top };
          this.backBufferResolution = this.gridResolution;
      }
      for (var c = this.backBufferResolution / a, d = b.childNodes, e, f = d.length - 1; 0 <= f; --f)
          (e = d[f]), (e.style.top = ((c * e._i * e._h) | 0) + "px"), (e.style.left = ((c * e._j * e._w) | 0) + "px"), (e.style.width = Math.round(c * e._w) + "px"), (e.style.height = Math.round(c * e._h) + "px");
      a = this.getViewPortPxFromLonLat(this.backBufferLonLat, a);
      c = this.map.layerContainerOriginPx.y;
      b.style.left = Math.round(a.x - this.map.layerContainerOriginPx.x) + "px";
      b.style.top = Math.round(a.y - c) + "px";
  },
  createBackBuffer: function () {
      var a;
      if (0 < this.grid.length) {
          a = document.createElement("div");
          a.id = this.div.id + "_bb";
          a.className = "olBackBuffer";
          a.style.position = "absolute";
          var b = this.map;
          a.style.zIndex = "resize" === this.transitionEffect ? this.getZIndex() - 1 : b.Z_INDEX_BASE.BaseLayer - (b.getNumLayers() - b.getLayerIndex(this));
          for (var b = 0, c = this.grid.length; b < c; b++)
              for (var d = 0, e = this.grid[b].length; d < e; d++) {
                  var f = this.grid[b][d],
                      g = this.grid[b][d].createBackBuffer();
                  g && ((g._i = b), (g._j = d), (g._w = f.size.w), (g._h = f.size.h), (g.id = f.id + "_bb"), a.appendChild(g));
              }
      }
      return a;
  },
  removeBackBuffer: function () {
      if (this._transitionElement) {
          for (var a = this.transitionendEvents.length - 1; 0 <= a; --a) OpenLayers.Event.stopObserving(this._transitionElement, this.transitionendEvents[a], this._removeBackBuffer);
          delete this._transitionElement;
      }
      this.backBuffer &&
          (this.backBuffer.parentNode && this.backBuffer.parentNode.removeChild(this.backBuffer),
          (this.backBufferResolution = this.backBuffer = null),
          null !== this.backBufferTimerId && (window.clearTimeout(this.backBufferTimerId), (this.backBufferTimerId = null)));
  },
  moveByPx: function (a, b) {
      this.singleTile || this.moveGriddedTiles();
  },
  setTileSize: function (a) {
      this.singleTile && ((a = this.map.getSize()), (a.h = parseInt(a.h * this.ratio, 10)), (a.w = parseInt(a.w * this.ratio, 10)));
      OpenLayers.Layer.HTTPRequest.prototype.setTileSize.apply(this, [a]);
  },
  getTilesBounds: function () {
      var a = null,
          b = this.grid.length;
      if (b)
          var a = this.grid[b - 1][0].bounds,
              b = this.grid[0].length * a.getWidth(),
              c = this.grid.length * a.getHeight(),
              a = new OpenLayers.Bounds(a.left, a.bottom, a.left + b, a.bottom + c);
      return a;
  },
  initSingleTile: function (a) {
      this.events.triggerEvent("retile");
      var b = a.getCenterLonLat(),
          c = a.getWidth() * this.ratio;
      a = a.getHeight() * this.ratio;
      b = new OpenLayers.Bounds(b.lon - c / 2, b.lat - a / 2, b.lon + c / 2, b.lat + a / 2);
      c = this.map.getLayerPxFromLonLat({ lon: b.left, lat: b.top });
      this.grid.length || (this.grid[0] = []);
      (a = this.grid[0][0]) ? a.moveTo(b, c) : ((a = this.addTile(b, c)), this.addTileMonitoringHooks(a), a.draw(), (this.grid[0][0] = a));
      this.removeExcessTiles(1, 1);
      this.gridResolution = this.getServerResolution();
  },
  calculateGridLayout: function (a, b, c) {
      var d = c * this.tileSize.w;
      c *= this.tileSize.h;
      var e = Math.floor((a.left - b.lon) / d) - this.buffer,
          f = this.rowSign;
      a = Math[~f ? "floor" : "ceil"]((f * (b.lat - a.top + c)) / c) - this.buffer * f;
      return { tilelon: d, tilelat: c, startcol: e, startrow: a };
  },
  getTileOrigin: function () {
      var a = this.tileOrigin;
      if (!a)
          var a = this.getMaxExtent(),
              b = { tl: ["left", "top"], tr: ["right", "top"], bl: ["left", "bottom"], br: ["right", "bottom"] }[this.tileOriginCorner],
              a = new OpenLayers.LonLat(a[b[0]], a[b[1]]);
      return a;
  },
  getTileBoundsForGridIndex: function (a, b) {
      var c = this.getTileOrigin(),
          d = this.gridLayout,
          e = d.tilelon,
          f = d.tilelat,
          g = d.startcol,
          d = d.startrow,
          h = this.rowSign;
      return new OpenLayers.Bounds(c.lon + (g + b) * e, c.lat - (d + a * h) * f * h, c.lon + (g + b + 1) * e, c.lat - (d + (a - 1) * h) * f * h);
  },
  initGriddedTiles: function (a) {
      this.events.triggerEvent("retile");
      var b = this.map.getSize(),
          c = this.getTileOrigin(),
          d = this.map.getResolution(),
          e = this.getServerResolution(),
          f = d / e,
          d = this.tileSize.w / f,
          f = this.tileSize.h / f,
          g = Math.ceil(b.h / f) + 2 * this.buffer + 1,
          b = Math.ceil(b.w / d) + 2 * this.buffer + 1;
      this.gridLayout = e = this.calculateGridLayout(a, c, e);
      var c = e.tilelon,
          h = e.tilelat,
          e = this.map.layerContainerOriginPx.x,
          k = this.map.layerContainerOriginPx.y,
          l = this.getTileBoundsForGridIndex(0, 0),
          m = this.map.getViewPortPxFromLonLat(new OpenLayers.LonLat(l.left, l.top));
      m.x = Math.round(m.x) - e;
      m.y = Math.round(m.y) - k;
      var e = [],
          k = this.map.getCenter(),
          n = 0;
      do {
          var p = this.grid[n];
          p || ((p = []), this.grid.push(p));
          var q = 0;
          do {
              var l = this.getTileBoundsForGridIndex(n, q),
                  r = m.clone();
              r.x += q * Math.round(d);
              r.y += n * Math.round(f);
              var s = p[q];
              s ? s.moveTo(l, r, !1) : ((s = this.addTile(l, r)), this.addTileMonitoringHooks(s), p.push(s));
              r = l.getCenterLonLat();
              e.push({ tile: s, distance: Math.pow(r.lon - k.lon, 2) + Math.pow(r.lat - k.lat, 2) });
              q += 1;
          } while (l.right <= a.right + c * this.buffer || q < b);
          n += 1;
      } while (l.bottom >= a.bottom - h * this.buffer || n < g);
      this.removeExcessTiles(n, q);
      this.gridResolution = d = this.getServerResolution();
      e.sort(function (a, b) {
          return a.distance - b.distance;
      });
      a = 0;
      for (d = e.length; a < d; ++a) e[a].tile.draw();
  },
  getMaxExtent: function () {
      return this.maxExtent;
  },
  addTile: function (a, b) {
      var c = new this.tileClass(this, b, a, null, this.tileSize, this.tileOptions);
      this.events.triggerEvent("addtile", { tile: c });
      return c;
  },
  addTileMonitoringHooks: function (a) {
      a.onLoadStart = function () {
          !1 === this.loading && ((this.loading = !0), this.events.triggerEvent("loadstart"));
          this.events.triggerEvent("tileloadstart", { tile: a });
          this.numLoadingTiles++;
          !this.singleTile && this.backBuffer && this.gridResolution === this.backBufferResolution && OpenLayers.Element.addClass(a.getTile(), "olTileReplacing");
      };
      a.onLoadEnd = function (b) {
          this.numLoadingTiles--;
          b = "unload" === b.type;
          this.events.triggerEvent("tileloaded", { tile: a, aborted: b });
          if (!this.singleTile && !b && this.backBuffer && this.gridResolution === this.backBufferResolution) {
              var c = a.getTile();
              if ("none" === OpenLayers.Element.getStyle(c, "display")) {
                  var d = document.getElementById(a.id + "_bb");
                  d && d.parentNode.removeChild(d);
              }
              OpenLayers.Element.removeClass(c, "olTileReplacing");
          }
          if (0 === this.numLoadingTiles) {
              if (this.backBuffer)
                  if (0 === this.backBuffer.childNodes.length) this.removeBackBuffer();
                  else {
                      this._transitionElement = b ? this.div.lastChild : a.imgDiv;
                      b = this.transitionendEvents;
                      for (c = b.length - 1; 0 <= c; --c) OpenLayers.Event.observe(this._transitionElement, b[c], this._removeBackBuffer);
                      this.backBufferTimerId = window.setTimeout(this._removeBackBuffer, this.removeBackBufferDelay);
                  }
              this.loading = !1;
              this.events.triggerEvent("loadend");
          }
      };
      a.onLoadError = function () {
          this.events.triggerEvent("tileerror", { tile: a });
      };
      a.events.on({ loadstart: a.onLoadStart, loadend: a.onLoadEnd, unload: a.onLoadEnd, loaderror: a.onLoadError, scope: this });
  },
  removeTileMonitoringHooks: function (a) {
      a.unload();
      a.events.un({ loadstart: a.onLoadStart, loadend: a.onLoadEnd, unload: a.onLoadEnd, loaderror: a.onLoadError, scope: this });
  },
  moveGriddedTiles: function () {
      for (var a = this.buffer + 1; ; ) {
          var b = this.grid[0][0],
              c = b.position.x + this.map.layerContainerOriginPx.x,
              b = b.position.y + this.map.layerContainerOriginPx.y,
              d = this.getServerResolution() / this.map.getResolution(),
              d = { w: Math.round(this.tileSize.w * d), h: Math.round(this.tileSize.h * d) };
          if (c > -d.w * (a - 1)) this.shiftColumn(!0, d);
          else if (c < -d.w * a) this.shiftColumn(!1, d);
          else if (b > -d.h * (a - 1)) this.shiftRow(!0, d);
          else if (b < -d.h * a) this.shiftRow(!1, d);
          else break;
      }
  },
  shiftRow: function (a, b) {
      var c = this.grid,
          d = a ? 0 : c.length - 1,
          e = a ? -1 : 1;
      this.gridLayout.startrow += e * this.rowSign;
      for (var f = c[d], g = c[a ? "pop" : "shift"](), h = 0, k = g.length; h < k; h++) {
          var l = g[h],
              m = f[h].position.clone();
          m.y += b.h * e;
          l.moveTo(this.getTileBoundsForGridIndex(d, h), m);
      }
      c[a ? "unshift" : "push"](g);
  },
  shiftColumn: function (a, b) {
      var c = this.grid,
          d = a ? 0 : c[0].length - 1,
          e = a ? -1 : 1;
      this.gridLayout.startcol += e;
      for (var f = 0, g = c.length; f < g; f++) {
          var h = c[f],
              k = h[d].position.clone(),
              l = h[a ? "pop" : "shift"]();
          k.x += b.w * e;
          l.moveTo(this.getTileBoundsForGridIndex(f, d), k);
          h[a ? "unshift" : "push"](l);
      }
  },
  removeExcessTiles: function (a, b) {
      for (var c, d; this.grid.length > a; ) {
          var e = this.grid.pop();
          c = 0;
          for (d = e.length; c < d; c++) {
              var f = e[c];
              this.destroyTile(f);
          }
      }
      c = 0;
      for (d = this.grid.length; c < d; c++) for (; this.grid[c].length > b; ) (e = this.grid[c]), (f = e.pop()), this.destroyTile(f);
  },
  onMapResize: function () {
      this.singleTile && (this.clearGrid(), this.setTileSize());
  },
  getTileBounds: function (a) {
      var b = this.maxExtent,
          c = this.getResolution(),
          d = c * this.tileSize.w,
          c = c * this.tileSize.h,
          e = this.getLonLatFromViewPortPx(a);
      a = b.left + d * Math.floor((e.lon - b.left) / d);
      b = b.bottom + c * Math.floor((e.lat - b.bottom) / c);
      return new OpenLayers.Bounds(a, b, a + d, b + c);
  },
  CLASS_NAME: "OpenLayers.Layer.Grid",
});
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)
              for (d = this.createElementNS("", "LAYERLIST"), e.appendChild(d), 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 && 2e3 > 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
          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, k = 0, l = h.length; k < l; k++) {
                          var m = h[k];
                          e.symbol[m] && g.setAttribute(m, e.symbol[m]);
                      }
                      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)
          for (c = 0, 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 k = e.components[g],
                  l = this.createElementNS("", "POINT");
              l.setAttribute("x", k.x);
              l.setAttribute("y", k.y);
              f.appendChild(l);
          }
          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))
                  for (c = a[0].getElementsByTagName("ENVELOPE"), b.features.envelope = this.parseAttributes(c[0], "number"), a = a[0].getElementsByTagName("FEATURE"), 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 k = e[g].getElementsByTagName("HOLE"), l = 0; l < k.length; l++) h.push(this.parsePointGeometry(k[l]));
                              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)
          for (a = this.getChildValue(c[0]), a = a.split(/;/), 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 (a) {
      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 (a) {
      return OpenLayers.Util.extend(this, { image: { envelope: null, output: "" }, features: { featurecount: 0, envelope: null, feature: [] }, error: "" });
  },
  CLASS_NAME: "OpenLayers.Format.ArcXML.Response",
});
(function () {
  function a() {
      this._object = f && !k ? 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 (k) {}
      try {
          a.statusText = a._object.statusText;
      } catch (u) {}
  }
  function e(a) {
      a._object.onreadystatechange = new window.Function();
  }
  var f = window.XMLHttpRequest,
      g = !!window.controllers,
      h = window.document.all && !window.opera,
      k = 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, k, p, q) {
      delete this._headers;
      3 > arguments.length && (k = !0);
      this._async = k;
      var r = this,
          s = this.readyState,
          t;
      h &&
          k &&
          ((t = function () {
              s != b.DONE && (e(r), r.abort());
          }),
          window.attachEvent("onunload", t));
      b.onopen && b.onopen.apply(this, arguments);
      4 < arguments.length ? this._object.open(a, f, k, p, q) : 3 < arguments.length ? this._object.open(a, f, k, p) : this._object.open(a, f, k);
      this.readyState = b.OPENED;
      c(this);
      this._object.onreadystatechange = function () {
          if (!g || k)
              (r.readyState = r._object.readyState),
                  d(r),
                  r._aborted ? (r.readyState = b.UNSENT) : (r.readyState == b.DONE && (delete r._data, e(r), h && k && window.detachEvent("onunload", t)), s != r.readyState && c(r), (s = r.readyState));
      };
  };
  b.prototype.send = function (a) {
      b.onsend && b.onsend.apply(this, arguments);
      arguments.length || (a = null);
      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: if ((this._object.send(this._data), g && !this._async)) for (this.readyState = b.OPENED, d(this); this.readyState < b.DONE; ) if ((this.readyState++, c(this), this._aborted)) break a;
  };
  b.prototype.abort = function () {
      b.onabort && b.onabort.apply(this, arguments);
      this.readyState > b.UNSENT && (this._aborted = !0);
      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) {
      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]) && (e[0] != a || e[1] != b || e[2] != c); d++);
      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 () {},
      };
      "readystatechange" == a.type && 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 || (OpenLayers.Request = {});
  OpenLayers.Request.XMLHttpRequest = b;
})();
OpenLayers.ProxyHost = "";
OpenLayers.Request || (OpenLayers.Request = {});
OpenLayers.Util.extend(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)));
      return a;
  },
  issue: function (a) {
      var b = OpenLayers.Util.extend(this.DEFAULT_CONFIG, { proxy: OpenLayers.ProxyHost });
      a = a || {};
      a.headers = a.headers || {};
      a = OpenLayers.Util.applyDefaults(a, b);
      a.headers = OpenLayers.Util.applyDefaults(a.headers, b.headers);
      var 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);
      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]);
      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 });
      null != a && ((b = a.responseXML), (b && b.documentElement) || (b = a.responseText), (b = new OpenLayers.Format.ArcXML().read(b)), (b = this.getUrlOrImage(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;
              (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.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, {
  slideFactor: 50,
  slideRatio: null,
  buttons: null,
  position: null,
  initialize: function (a) {
      this.position = new OpenLayers.Pixel(OpenLayers.Control.PanZoom.X, OpenLayers.Control.PanZoom.Y);
      OpenLayers.Control.prototype.initialize.apply(this, arguments);
  },
  destroy: function () {
      this.map && this.map.events.unregister("buttonclick", this, this.onButtonClick);
      this.removeButtons();
      this.position = this.buttons = null;
      OpenLayers.Control.prototype.destroy.apply(this, arguments);
  },
  setMap: function (a) {
      OpenLayers.Control.prototype.setMap.apply(this, arguments);
      this.map.events.register("buttonclick", this, this.onButtonClick);
  },
  draw: function (a) {
      OpenLayers.Control.prototype.draw.apply(this, arguments);
      a = this.position;
      this.buttons = [];
      var b = { w: 18, h: 18 },
          c = new OpenLayers.Pixel(a.x + b.w / 2, a.y);
      this._addButton("panup", "north-mini.png", c, b);
      a.y = c.y + b.h;
      this._addButton("panleft", "west-mini.png", a, b);
      this._addButton("panright", "east-mini.png", a.add(b.w, 0), b);
      this._addButton("pandown", "south-mini.png", c.add(0, 2 * b.h), b);
      this._addButton("zoomin", "zoom-plus-mini.png", c.add(0, 3 * b.h + 5), b);
      this._addButton("zoomworld", "zoom-world-mini.png", c.add(0, 4 * b.h + 5), b);
      this._addButton("zoomout", "zoom-minus-mini.png", c.add(0, 5 * b.h + 5), b);
      return this.div;
  },
  _addButton: function (a, b, c, d) {
      b = OpenLayers.Util.getImageLocation(b);
      c = OpenLayers.Util.createAlphaImageDiv(this.id + "_" + a, c, d, b, "absolute");
      c.style.cursor = "pointer";
      this.div.appendChild(c);
      c.action = a;
      c.className = "olButton";
      this.buttons.push(c);
      return c;
  },
  _removeButton: function (a) {
      this.div.removeChild(a);
      OpenLayers.Util.removeItem(this.buttons, a);
  },
  removeButtons: function () {
      for (var a = this.buttons.length - 1; 0 <= a; --a) this._removeButton(this.buttons[a]);
  },
  onButtonClick: function (a) {
      switch (a.buttonElement.action) {
          case "panup":
              this.map.pan(0, -this.getSlideFactor("h"));
              break;
          case "pandown":
              this.map.pan(0, this.getSlideFactor("h"));
              break;
          case "panleft":
              this.map.pan(-this.getSlideFactor("w"), 0);
              break;
          case "panright":
              this.map.pan(this.getSlideFactor("w"), 0);
              break;
          case "zoomin":
              this.map.zoomIn();
              break;
          case "zoomout":
              this.map.zoomOut();
              break;
          case "zoomworld":
              this.map.zoomToMaxExtent();
      }
  },
  getSlideFactor: function (a) {
      return this.slideRatio ? this.map.getSize()[a] * this.slideRatio : this.slideFactor;
  },
  CLASS_NAME: "OpenLayers.Control.PanZoom",
});
OpenLayers.Control.PanZoom.X = 4;
OpenLayers.Control.PanZoom.Y = 4;
OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
  zoomStopWidth: 18,
  zoomStopHeight: 11,
  slider: null,
  sliderEvents: null,
  zoombarDiv: null,
  zoomWorldIcon: !1,
  panIcons: !0,
  forceFixedZoomLevel: !1,
  mouseDragStart: null,
  deltaY: null,
  zoomStart: null,
  destroy: function () {
      this._removeZoomBar();
      this.map.events.un({ changebaselayer: this.redraw, updatesize: this.redraw, scope: this });
      OpenLayers.Control.PanZoom.prototype.destroy.apply(this, arguments);
      delete this.mouseDragStart;
      delete this.zoomStart;
  },
  setMap: function (a) {
      OpenLayers.Control.PanZoom.prototype.setMap.apply(this, arguments);
      this.map.events.on({ changebaselayer: this.redraw, updatesize: this.redraw, scope: this });
  },
  redraw: function () {
      null != this.div && (this.removeButtons(), this._removeZoomBar());
      this.draw();
  },
  draw: function (a) {
      OpenLayers.Control.prototype.draw.apply(this, arguments);
      a = this.position.clone();
      this.buttons = [];
      var b = { w: 18, h: 18 };
      if (this.panIcons) {
          var c = new OpenLayers.Pixel(a.x + b.w / 2, a.y),
              d = b.w;
          this.zoomWorldIcon && (c = new OpenLayers.Pixel(a.x + b.w, a.y));
          this._addButton("panup", "north-mini.png", c, b);
          a.y = c.y + b.h;
          this._addButton("panleft", "west-mini.png", a, b);
          this.zoomWorldIcon && (this._addButton("zoomworld", "zoom-world-mini.png", a.add(b.w, 0), b), (d *= 2));
          this._addButton("panright", "east-mini.png", a.add(d, 0), b);
          this._addButton("pandown", "south-mini.png", c.add(0, 2 * b.h), b);
          this._addButton("zoomin", "zoom-plus-mini.png", c.add(0, 3 * b.h + 5), b);
          c = this._addZoomBar(c.add(0, 4 * b.h + 5));
          this._addButton("zoomout", "zoom-minus-mini.png", c, b);
      } else
          this._addButton("zoomin", "zoom-plus-mini.png", a, b),
              (c = this._addZoomBar(a.add(0, b.h))),
              this._addButton("zoomout", "zoom-minus-mini.png", c, b),
              this.zoomWorldIcon && ((c = c.add(0, b.h + 3)), this._addButton("zoomworld", "zoom-world-mini.png", c, b));
      return this.div;
  },
  _addZoomBar: function (a) {
      var b = OpenLayers.Util.getImageLocation("slider.png"),
          c = this.id + "_" + this.map.id,
          d = this.map.getMinZoom(),
          e = this.map.getNumZoomLevels() - 1 - this.map.getZoom(),
          e = OpenLayers.Util.createAlphaImageDiv(c, a.add(-1, e * this.zoomStopHeight), { w: 20, h: 9 }, b, "absolute");
      e.style.cursor = "move";
      this.slider = e;
      this.sliderEvents = new OpenLayers.Events(this, e, null, !0, { includeXY: !0 });
      this.sliderEvents.on({ touchstart: this.zoomBarDown, touchmove: this.zoomBarDrag, touchend: this.zoomBarUp, mousedown: this.zoomBarDown, mousemove: this.zoomBarDrag, mouseup: this.zoomBarUp });
      var f = { w: this.zoomStopWidth, h: this.zoomStopHeight * (this.map.getNumZoomLevels() - d) },
          b = OpenLayers.Util.getImageLocation("zoombar.png"),
          c = null;
      OpenLayers.Util.alphaHack()
          ? ((c = this.id + "_" + this.map.id), (c = OpenLayers.Util.createAlphaImageDiv(c, a, { w: f.w, h: this.zoomStopHeight }, b, "absolute", null, "crop")), (c.style.height = f.h + "px"))
          : (c = OpenLayers.Util.createDiv("OpenLayers_Control_PanZoomBar_Zoombar" + this.map.id, a, f, b));
      c.style.cursor = "pointer";
      c.className = "olButton";
      this.zoombarDiv = c;
      this.div.appendChild(c);
      this.startTop = parseInt(c.style.top);
      this.div.appendChild(e);
      this.map.events.register("zoomend", this, this.moveZoomBar);
      return (a = a.add(0, this.zoomStopHeight * (this.map.getNumZoomLevels() - d)));
  },
  _removeZoomBar: function () {
      this.sliderEvents.un({ touchstart: this.zoomBarDown, touchmove: this.zoomBarDrag, touchend: this.zoomBarUp, mousedown: this.zoomBarDown, mousemove: this.zoomBarDrag, mouseup: this.zoomBarUp });
      this.sliderEvents.destroy();
      this.div.removeChild(this.zoombarDiv);
      this.zoombarDiv = null;
      this.div.removeChild(this.slider);
      this.slider = null;
      this.map.events.unregister("zoomend", this, this.moveZoomBar);
  },
  onButtonClick: function (a) {
      OpenLayers.Control.PanZoom.prototype.onButtonClick.apply(this, arguments);
      if (a.buttonElement === this.zoombarDiv) {
          var b = a.buttonXY.y / this.zoomStopHeight;
          if (this.forceFixedZoomLevel || !this.map.fractionalZoom) b = Math.floor(b);
          b = this.map.getNumZoomLevels() - 1 - b;
          b = Math.min(Math.max(b, 0), this.map.getNumZoomLevels() - 1);
          this.map.zoomTo(b);
      }
  },
  passEventToSlider: function (a) {
      this.sliderEvents.handleBrowserEvent(a);
  },
  zoomBarDown: function (a) {
      if (OpenLayers.Event.isLeftClick(a) || OpenLayers.Event.isSingleTouch(a))
          this.map.events.on({ touchmove: this.passEventToSlider, mousemove: this.passEventToSlider, mouseup: this.passEventToSlider, scope: this }),
              (this.mouseDragStart = a.xy.clone()),
              (this.zoomStart = a.xy.clone()),
              (this.div.style.cursor = "move"),
              (this.zoombarDiv.offsets = null),
              OpenLayers.Event.stop(a);
  },
  zoomBarDrag: function (a) {
      if (null != this.mouseDragStart) {
          var b = this.mouseDragStart.y - a.xy.y,
              c = OpenLayers.Util.pagePosition(this.zoombarDiv);
          0 < a.clientY - c[1] && a.clientY - c[1] < parseInt(this.zoombarDiv.style.height) - 2 && ((b = parseInt(this.slider.style.top) - b), (this.slider.style.top = b + "px"), (this.mouseDragStart = a.xy.clone()));
          this.deltaY = this.zoomStart.y - a.xy.y;
          OpenLayers.Event.stop(a);
      }
  },
  zoomBarUp: function (a) {
      if ((OpenLayers.Event.isLeftClick(a) || "touchend" === a.type) && this.mouseDragStart) {
          this.div.style.cursor = "";
          this.map.events.un({ touchmove: this.passEventToSlider, mouseup: this.passEventToSlider, mousemove: this.passEventToSlider, scope: this });
          var b = this.map.zoom;
          !this.forceFixedZoomLevel && this.map.fractionalZoom
              ? ((b += this.deltaY / this.zoomStopHeight), (b = Math.min(Math.max(b, 0), this.map.getNumZoomLevels() - 1)))
              : ((b += this.deltaY / this.zoomStopHeight), (b = Math.max(Math.round(b), 0)));
          this.map.zoomTo(b);
          this.zoomStart = this.mouseDragStart = null;
          this.deltaY = 0;
          OpenLayers.Event.stop(a);
      }
  },
  moveZoomBar: function () {
      var a = (this.map.getNumZoomLevels() - 1 - this.map.getZoom()) * this.zoomStopHeight + this.startTop + 1;
      this.slider.style.top = a + "px";
  },
  CLASS_NAME: "OpenLayers.Control.PanZoomBar",
});
OpenLayers.Format.WFSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, { defaultVersion: "1.1.0", 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" },
  errorProperty: "featureTypeList",
  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 (a) {
      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 ? !1 : (this.active = !0);
  },
  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), 1e3 * 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, k = c.length; h < k; ++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.Events.featureclick = OpenLayers.Class({
  cache: null,
  map: null,
  provides: ["featureclick", "nofeatureclick", "featureover", "featureout"],
  initialize: function (a) {
      this.target = a;
      if (a.object instanceof OpenLayers.Map) this.setMap(a.object);
      else if (a.object instanceof OpenLayers.Layer.Vector)
          a.object.map
              ? this.setMap(a.object.map)
              : a.object.events.register("added", this, function (b) {
                    this.setMap(a.object.map);
                });
      else throw "Listeners for '" + this.provides.join("', '") + "' events can only be registered for OpenLayers.Layer.Vector or OpenLayers.Map instances";
      for (var b = this.provides.length - 1; 0 <= b; --b) a.extensions[this.provides[b]] = !0;
  },
  setMap: function (a) {
      this.map = a;
      this.cache = {};
      a.events.register("mousedown", this, this.start, { extension: !0 });
      a.events.register("mouseup", this, this.onClick, { extension: !0 });
      a.events.register("touchstart", this, this.start, { extension: !0 });
      a.events.register("touchmove", this, this.cancel, { extension: !0 });
      a.events.register("touchend", this, this.onClick, { extension: !0 });
      a.events.register("mousemove", this, this.onMousemove, { extension: !0 });
  },
  start: function (a) {
      this.startEvt = a;
  },
  cancel: function (a) {
      delete this.startEvt;
  },
  onClick: function (a) {
      if (this.startEvt && ("touchend" === a.type || OpenLayers.Event.isLeftClick(a))) {
          a = this.getFeatures(this.startEvt);
          delete this.startEvt;
          for (var b, c, d = {}, e = 0, f = a.length; e < f && ((b = a[e]), (c = b.layer), (d[c.id] = !0), (b = this.triggerEvent("featureclick", { feature: b })), !1 !== b); ++e);
          e = 0;
          for (f = this.map.layers.length; e < f; ++e) (c = this.map.layers[e]), c instanceof OpenLayers.Layer.Vector && !d[c.id] && this.triggerEvent("nofeatureclick", { layer: c });
      }
  },
  onMousemove: function (a) {
      delete this.startEvt;
      var b = this.getFeatures(a),
          c = {};
      a = [];
      for (var d, e = 0, f = b.length; e < f; ++e) (d = b[e]), (c[d.id] = d), this.cache[d.id] || a.push(d);
      var b = [],
          g;
      for (g in this.cache) (d = this.cache[g]), d.layer && d.layer.map ? c[d.id] || b.push(d) : delete this.cache[g];
      e = 0;
      for (f = a.length; e < f && ((d = a[e]), (this.cache[d.id] = d), (g = this.triggerEvent("featureover", { feature: d })), !1 !== g); ++e);
      e = 0;
      for (f = b.length; e < f && ((d = b[e]), delete this.cache[d.id], (g = this.triggerEvent("featureout", { feature: d })), !1 !== g); ++e);
  },
  triggerEvent: function (a, b) {
      var c = b.feature ? b.feature.layer : b.layer,
          d = this.target.object;
      if (d instanceof OpenLayers.Map || d === c) return this.target.triggerEvent(a, b);
  },
  getFeatures: function (a) {
      var b = a.clientX,
          c = a.clientY,
          d = [],
          e = [],
          f = [],
          g,
          h,
          k,
          l;
      for (l = this.map.layers.length - 1; 0 <= l; --l)
          if (((g = this.map.layers[l]), "none" !== g.div.style.display))
              if (g.renderer instanceof OpenLayers.Renderer.Elements) {
                  if (g instanceof OpenLayers.Layer.Vector)
                      for (h = document.elementFromPoint(b, c); h && h._featureId; ) (k = g.getFeatureById(h._featureId)) ? (d.push(k), (h.style.display = "none"), e.push(h), (h = document.elementFromPoint(b, c))) : (h = !1);
                  f.push(g);
                  g.div.style.display = "none";
              } else g.renderer instanceof OpenLayers.Renderer.Canvas && (k = g.renderer.getFeatureIdFromEvent(a)) && (d.push(k), f.push(g));
      l = 0;
      for (a = e.length; l < a; ++l) e[l].style.display = "";
      for (l = f.length - 1; 0 <= l; --l) f[l].div.style.display = "block";
      return d;
  },
  destroy: function () {
      for (var a = this.provides.length - 1; 0 <= a; --a) delete this.target.extensions[this.provides[a]];
      this.map.events.un({ mousemove: this.onMousemove, mousedown: this.start, mouseup: this.onClick, touchstart: this.start, touchmove: this.cancel, touchend: this.onClick, scope: this });
      delete this.cache;
      delete this.map;
      delete this.target;
  },
});
OpenLayers.Events.nofeatureclick = OpenLayers.Events.featureclick;
OpenLayers.Events.featureover = OpenLayers.Events.featureclick;
OpenLayers.Events.featureout = OpenLayers.Events.featureclick;
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, k = g.length; h < k; h++) {
                  var l = this.extractSegment(g[h], "trkpt");
                  b.push(new OpenLayers.Feature.Vector(l, f));
              }
          }
      if (this.extractRoutes)
          for (e = a.getElementsByTagName("rte"), c = 0, 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)
          for (a = a.getElementsByTagName("wpt"), c = 0, 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) for (f = 0, 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) {
      var b = {};
      a = a.firstChild;
      for (var c, d; a; )
          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) {
      a = OpenLayers.Util.isArray(a) ? a : [a];
      var 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.createElementNS(this.namespaces.gpx, "metadata"), d = 0; d < b.length; d++) {
          var e = b[d];
          if (a[e]) {
              var f = this.createElementNS(this.namespaces.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.createElementNS(this.namespaces.gpx, "trk");
      this.appendAttributesNode(c, a);
      a = this.buildTrkSegNode(b);
      a = OpenLayers.Util.isArray(a) ? a : [a];
      for (var 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.createElementNS(this.namespaces.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.createElementNS(this.namespaces.gpx, "trkpt");
      b.setAttribute("lon", a.x);
      b.setAttribute("lat", a.y);
      return b;
  },
  buildWptNode: function (a) {
      var b = this.createElementNS(this.namespaces.gpx, "wpt");
      b.setAttribute("lon", a.x);
      b.setAttribute("lat", a.y);
      return b;
  },
  appendAttributesNode: function (a, b) {
      var c = this.createElementNS(this.namespaces.gpx, "name");
      c.appendChild(this.createTextNode(b.attributes.name || b.id));
      a.appendChild(c);
      c = this.createElementNS(this.namespaces.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", CLASS_NAME: "OpenLayers.Format.WMSDescribeLayer" });
OpenLayers.Format.WMSDescribeLayer.v1_1_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 b = a.documentElement.childNodes, c = { layerDescriptions: [] }, d, e, f = 0; f < b.length; ++f)
          if (((d = b[f]), (e = d.nodeName), "LayerDescription" == e)) {
              e = d.getAttribute("name");
              var g = "",
                  h = "",
                  k = "";
              d.getAttribute("owsType")
                  ? ((g = d.getAttribute("owsType")), (h = d.getAttribute("owsURL")))
                  : "" != d.getAttribute("wfs")
                  ? ((g = "WFS"), (h = d.getAttribute("wfs")))
                  : "" != d.getAttribute("wcs") && ((g = "WCS"), (h = d.getAttribute("wcs")));
              d = d.getElementsByTagName("Query");
              0 < d.length && ((k = d[0].getAttribute("typeName")) || (k = d[0].getAttribute("typename")));
              d = { layerName: e, owsType: g, owsURL: h, typeName: k };
              c.layerDescriptions.push(d);
              c.length = c.layerDescriptions.length;
              c[c.length - 1] = d;
          } else if ("ServiceException" == e) return { error: new OpenLayers.Format.OGCExceptionReport().read(a) };
      return c;
  },
  CLASS_NAME: "OpenLayers.Format.WMSDescribeLayer.v1_1_1",
});
OpenLayers.Format.WMSDescribeLayer.v1_1_0 = OpenLayers.Format.WMSDescribeLayer.v1_1_1;
OpenLayers.Layer.XYZ = OpenLayers.Class(OpenLayers.Layer.Grid, {
  isBaseLayer: !0,
  sphericalMercator: !1,
  zoomOffset: 0,
  serverResolutions: null,
  initialize: function (a, b, c) {
      if ((c && c.sphericalMercator) || this.sphericalMercator) c = OpenLayers.Util.extend({ projection: "EPSG:900913", numZoomLevels: 19 }, c);
      OpenLayers.Layer.Grid.prototype.initialize.apply(this, [a || this.name, b || this.url, {}, c]);
  },
  clone: function (a) {
      null == a && (a = new OpenLayers.Layer.XYZ(this.name, this.url, this.getOptions()));
      return (a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [a]));
  },
  getURL: function (a) {
      a = this.getXYZ(a);
      var b = this.url;
      OpenLayers.Util.isArray(b) && (b = this.selectUrl("" + a.x + a.y + a.z, b));
      return OpenLayers.String.format(b, a);
  },
  getXYZ: function (a) {
      var b = this.getServerResolution(),
          c = Math.round((a.left - this.maxExtent.left) / (b * this.tileSize.w));
      a = Math.round((this.maxExtent.top - a.top) / (b * this.tileSize.h));
      b = this.getServerZoom();
      if (this.wrapDateLine)
          var d = Math.pow(2, b),
              c = ((c % d) + d) % d;
      return { x: c, y: a, z: b };
  },
  setMap: function (a) {
      OpenLayers.Layer.Grid.prototype.setMap.apply(this, arguments);
      this.tileOrigin || (this.tileOrigin = new OpenLayers.LonLat(this.maxExtent.left, this.maxExtent.bottom));
  },
  CLASS_NAME: "OpenLayers.Layer.XYZ",
});
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: "&copy; <a href='http://www.openstreetmap.org/copyright'>OpenStreetMap</a> contributors",
  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 = OpenLayers.Class({
  container: null,
  root: null,
  extent: null,
  locked: !1,
  size: null,
  resolution: null,
  map: null,
  featureDx: 0,
  initialize: function (a, b) {
      this.container = OpenLayers.Util.getElement(a);
      OpenLayers.Util.extend(this, b);
  },
  destroy: function () {
      this.map = this.resolution = this.size = this.extent = this.container = null;
  },
  supported: function () {
      return !1;
  },
  setExtent: function (a, b) {
      this.extent = a.clone();
      if (this.map.baseLayer && this.map.baseLayer.wrapDateLine) {
          var c = a.getWidth() / this.map.getExtent().getWidth();
          a = a.scale(1 / c);
          this.extent = a.wrapDateLine(this.map.getMaxExtent()).scale(c);
      }
      b && (this.resolution = null);
      return !0;
  },
  setSize: function (a) {
      this.size = a.clone();
      this.resolution = null;
  },
  getResolution: function () {
      return (this.resolution = this.resolution || this.map.getResolution());
  },
  drawFeature: function (a, b) {
      null == b && (b = a.style);
      if (a.geometry) {
          var c = a.geometry.getBounds();
          if (c) {
              var d;
              this.map.baseLayer && this.map.baseLayer.wrapDateLine && (d = this.map.getMaxExtent());
              c.intersectsBounds(this.extent, { worldBounds: d }) ? this.calculateFeatureDx(c, d) : (b = { display: "none" });
              c = this.drawGeometry(a.geometry, b, a.id);
              if ("none" != b.display && b.label && !1 !== c) {
                  d = a.geometry.getCentroid();
                  if (b.labelXOffset || b.labelYOffset) {
                      var e = isNaN(b.labelXOffset) ? 0 : b.labelXOffset,
                          f = isNaN(b.labelYOffset) ? 0 : b.labelYOffset,
                          g = this.getResolution();
                      d.move(e * g, f * g);
                  }
                  this.drawText(a.id, b, d);
              } else this.removeText(a.id);
              return c;
          }
      }
  },
  calculateFeatureDx: function (a, b) {
      this.featureDx = 0;
      if (b) {
          var c = b.getWidth();
          this.featureDx = Math.round(((a.left + a.right) / 2 - (this.extent.left + this.extent.right) / 2) / c) * c;
      }
  },
  drawGeometry: function (a, b, c) {},
  drawText: function (a, b, c) {},
  removeText: function (a) {},
  clear: function () {},
  getFeatureIdFromEvent: function (a) {},
  eraseFeatures: function (a) {
      OpenLayers.Util.isArray(a) || (a = [a]);
      for (var b = 0, c = a.length; b < c; ++b) {
          var d = a[b];
          this.eraseGeometry(d.geometry, d.id);
          this.removeText(d.id);
      }
  },
  eraseGeometry: function (a, b) {},
  moveRoot: function (a) {},
  getRenderLayerId: function () {
      return this.container.id;
  },
  applyDefaultSymbolizer: function (a) {
      var b = OpenLayers.Util.extend({}, OpenLayers.Renderer.defaultSymbolizer);
      !1 === a.stroke && (delete b.strokeWidth, delete b.strokeColor);
      !1 === a.fill && delete b.fillColor;
      OpenLayers.Util.extend(b, a);
      return b;
  },
  CLASS_NAME: "OpenLayers.Renderer",
});
OpenLayers.Renderer.defaultSymbolizer = { fillColor: "#000000", strokeColor: "#000000", strokeWidth: 2, fillOpacity: 1, strokeOpacity: 1, pointRadius: 0, labelAlign: "cm" };
OpenLayers.Renderer.symbol = {
  star: [350, 75, 379, 161, 469, 161, 397, 215, 423, 301, 350, 250, 277, 301, 303, 215, 231, 161, 321, 161, 350, 75],
  cross: [4, 0, 6, 0, 6, 4, 10, 4, 10, 6, 6, 6, 6, 10, 4, 10, 4, 6, 0, 6, 0, 4, 4, 4, 4, 0],
  x: [0, 0, 25, 0, 50, 35, 75, 0, 100, 0, 65, 50, 100, 100, 75, 100, 50, 65, 25, 100, 0, 100, 35, 50, 0, 0],
  square: [0, 0, 0, 1, 1, 1, 1, 0, 0, 0],
  triangle: [0, 10, 10, 10, 5, 0, 0, 10],
};
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(),
          e = b.title || b.graphicTitle;
      e && (d.title = e);
      var f = b.graphicWidth || b.graphicHeight,
          g = b.graphicHeight || b.graphicWidth,
          f = f ? f : 2 * b.pointRadius,
          g = g ? g : 2 * b.pointRadius,
          h = void 0 != b.graphicXOffset ? b.graphicXOffset : -(0.5 * f),
          k = void 0 != b.graphicYOffset ? b.graphicYOffset : -(0.5 * g),
          l = b.graphicOpacity || b.fillOpacity;
      d.onload = OpenLayers.Function.bind(function () {
          if (this.features[c]) {
              var b = this.getLocalXY(a),
                  e = b[0],
                  b = b[1];
              if (!isNaN(e) && !isNaN(b)) {
                  var e = (e + h) | 0,
                      b = (b + k) | 0,
                      p = this.canvas;
                  p.globalAlpha = l;
                  var q = OpenLayers.Renderer.Canvas.drawImageScaleFactor || (OpenLayers.Renderer.Canvas.drawImageScaleFactor = /android 2.1/.test(navigator.userAgent.toLowerCase()) ? 320 / window.screen.width : 1);
                  p.drawImage(d, e * q, b * q, f * q, g * q);
                  this.hitDetection && (this.setHitContextStyle("fill", c), this.hitContext.fillRect(e, b, f, g));
              }
          }
      }, 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));
      a = "000000" + a.toString(16);
      var 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();
      d = this.getLocalXY(b[0]);
      var 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) {
      a = a.components;
      var 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.globalAlpha = b.labelOutlineOpacity || b.fontOpacity || 1),
                  (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 k = c[0] + h * this.canvas.mozMeasureText(e[g]),
                  l = c[1] + g * d;
              this.canvas.translate(k, l);
              this.canvas.mozDrawText(e[g]);
              this.canvas.translate(-k, -l);
          }
      }
      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) {
      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 = {};
      for (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]));
      var b = this.getNodes(a),
          c = this.getWays(a);
      a = Array(c.length);
      for (var 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]],
                  k = new OpenLayers.Geometry.Point(h.lon, h.lat);
              k.osm_id = parseInt(c[d].nodes[g]);
              e[g] = k;
              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 l in b) {
          h = b[l];
          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(l);
              e.fid = "node." + e.osm_id;
              a.push(e);
          }
          h.node = null;
      }
      return a;
  },
  getNodes: function (a) {
      a = a.getElementsByTagName("node");
      for (var 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) {
      a = a.getElementsByTagName("way");
      for (var 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.Handler.Keyboard = OpenLayers.Class(OpenLayers.Handler, {
  KEY_EVENTS: ["keydown", "keyup"],
  eventListener: null,
  observeElement: null,
  initialize: function (a, b, c) {
      OpenLayers.Handler.prototype.initialize.apply(this, arguments);
      this.eventListener = OpenLayers.Function.bindAsEventListener(this.handleKeyEvent, this);
  },
  destroy: function () {
      this.deactivate();
      this.eventListener = null;
      OpenLayers.Handler.prototype.destroy.apply(this, arguments);
  },
  activate: function () {
      if (OpenLayers.Handler.prototype.activate.apply(this, arguments)) {
          this.observeElement = this.observeElement || document;
          for (var a = 0, b = this.KEY_EVENTS.length; a < b; a++) OpenLayers.Event.observe(this.observeElement, this.KEY_EVENTS[a], this.eventListener);
          return !0;
      }
      return !1;
  },
  deactivate: function () {
      var a = !1;
      if (OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) {
          for (var a = 0, b = this.KEY_EVENTS.length; a < b; a++) OpenLayers.Event.stopObserving(this.observeElement, this.KEY_EVENTS[a], this.eventListener);
          a = !0;
      }
      return a;
  },
  handleKeyEvent: function (a) {
      this.checkModifiers(a) && this.callback(a.type, [a]);
  },
  CLASS_NAME: "OpenLayers.Handler.Keyboard",
});
OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
  documentDrag: !1,
  geometryTypes: null,
  clickout: !0,
  toggle: !0,
  standalone: !1,
  layer: null,
  feature: null,
  vertex: null,
  vertices: null,
  virtualVertices: null,
  handlers: null,
  deleteCodes: null,
  virtualStyle: null,
  vertexRenderIntent: null,
  mode: null,
  createVertices: !0,
  modified: !1,
  radiusHandle: null,
  dragHandle: null,
  onModificationStart: function () {},
  onModification: function () {},
  onModificationEnd: function () {},
  initialize: function (a, b) {
      b = b || {};
      this.layer = a;
      this.vertices = [];
      this.virtualVertices = [];
      this.virtualStyle = OpenLayers.Util.extend({}, this.layer.style || this.layer.styleMap.createSymbolizer(null, b.vertexRenderIntent));
      this.virtualStyle.fillOpacity = 0.3;
      this.virtualStyle.strokeOpacity = 0.3;
      this.deleteCodes = [46, 68];
      this.mode = OpenLayers.Control.ModifyFeature.RESHAPE;
      OpenLayers.Control.prototype.initialize.apply(this, [b]);
      OpenLayers.Util.isArray(this.deleteCodes) || (this.deleteCodes = [this.deleteCodes]);
      var c = { documentDrag: this.documentDrag, stopDown: !1 };
      this.handlers = {
          keyboard: new OpenLayers.Handler.Keyboard(this, { keydown: this.handleKeypress }),
          drag: new OpenLayers.Handler.Drag(
              this,
              {
                  down: function (a) {
                      this.vertex = null;
                      (a = this.layer.getFeatureFromEvent(this.handlers.drag.evt)) ? this.dragStart(a) : this.clickout && (this._unselect = this.feature);
                  },
                  move: function (a) {
                      delete this._unselect;
                      this.vertex && this.dragVertex(this.vertex, a);
                  },
                  up: function () {
                      this.handlers.drag.stopDown = !1;
                      this._unselect && (this.unselectFeature(this._unselect), delete this._unselect);
                  },
                  done: function (a) {
                      this.vertex && this.dragComplete(this.vertex);
                  },
              },
              c
          ),
      };
  },
  destroy: function () {
      this.map && this.map.events.un({ removelayer: this.handleMapEvents, changelayer: this.handleMapEvents, scope: this });
      this.layer = null;
      OpenLayers.Control.prototype.destroy.apply(this, []);
  },
  activate: function () {
      this.moveLayerToTop();
      this.map.events.on({ removelayer: this.handleMapEvents, changelayer: this.handleMapEvents, scope: this });
      return this.handlers.keyboard.activate() && this.handlers.drag.activate() && OpenLayers.Control.prototype.activate.apply(this, arguments);
  },
  deactivate: function () {
      var a = !1;
      OpenLayers.Control.prototype.deactivate.apply(this, arguments) &&
          (this.moveLayerBack(),
          this.map.events.un({ removelayer: this.handleMapEvents, changelayer: this.handleMapEvents, scope: this }),
          this.layer.removeFeatures(this.vertices, { silent: !0 }),
          this.layer.removeFeatures(this.virtualVertices, { silent: !0 }),
          (this.vertices = []),
          this.handlers.drag.deactivate(),
          this.handlers.keyboard.deactivate(),
          (a = this.feature) && a.geometry && a.layer && this.unselectFeature(a),
          (a = !0));
      return a;
  },
  beforeSelectFeature: function (a) {
      return this.layer.events.triggerEvent("beforefeaturemodified", { feature: a });
  },
  selectFeature: function (a) {
      if (!(this.feature === a || (this.geometryTypes && -1 == OpenLayers.Util.indexOf(this.geometryTypes, a.geometry.CLASS_NAME)))) {
          !1 !== this.beforeSelectFeature(a) &&
              (this.feature && this.unselectFeature(this.feature),
              (this.feature = a),
              this.layer.selectedFeatures.push(a),
              this.layer.drawFeature(a, "select"),
              (this.modified = !1),
              this.resetVertices(),
              this.onModificationStart(this.feature));
          var b = a.modified;
          !a.geometry || (b && b.geometry) || (this._originalGeometry = a.geometry.clone());
      }
  },
  unselectFeature: function (a) {
      this.layer.removeFeatures(this.vertices, { silent: !0 });
      this.vertices = [];
      this.layer.destroyFeatures(this.virtualVertices, { silent: !0 });
      this.virtualVertices = [];
      this.dragHandle && (this.layer.destroyFeatures([this.dragHandle], { silent: !0 }), delete this.dragHandle);
      this.radiusHandle && (this.layer.destroyFeatures([this.radiusHandle], { silent: !0 }), delete this.radiusHandle);
      this.layer.drawFeature(this.feature, "default");
      this.feature = null;
      OpenLayers.Util.removeItem(this.layer.selectedFeatures, a);
      this.onModificationEnd(a);
      this.layer.events.triggerEvent("afterfeaturemodified", { feature: a, modified: this.modified });
      this.modified = !1;
  },
  dragStart: function (a) {
      var b = "OpenLayers.Geometry.Point" == a.geometry.CLASS_NAME;
      this.standalone || ((a._sketch || !b) && a._sketch) || (this.toggle && this.feature === a && (this._unselect = a), this.selectFeature(a));
      if (a._sketch || b) (this.vertex = a), (this.handlers.drag.stopDown = !0);
  },
  dragVertex: function (a, b) {
      var c = this.map.getLonLatFromViewPortPx(b),
          d = a.geometry;
      d.move(c.lon - d.x, c.lat - d.y);
      this.modified = !0;
      "OpenLayers.Geometry.Point" == this.feature.geometry.CLASS_NAME
          ? this.layer.events.triggerEvent("vertexmodified", { vertex: a.geometry, feature: this.feature, pixel: b })
          : (a._index
                ? (a.geometry.parent.addComponent(a.geometry, a._index), delete a._index, OpenLayers.Util.removeItem(this.virtualVertices, a), this.vertices.push(a))
                : a == this.dragHandle
                ? (this.layer.removeFeatures(this.vertices, { silent: !0 }), (this.vertices = []), this.radiusHandle && (this.layer.destroyFeatures([this.radiusHandle], { silent: !0 }), (this.radiusHandle = null)))
                : a !== this.radiusHandle && this.layer.events.triggerEvent("vertexmodified", { vertex: a.geometry, feature: this.feature, pixel: b }),
            0 < this.virtualVertices.length && (this.layer.destroyFeatures(this.virtualVertices, { silent: !0 }), (this.virtualVertices = [])),
            this.layer.drawFeature(this.feature, this.standalone ? void 0 : "select"));
      this.layer.drawFeature(a);
  },
  dragComplete: function (a) {
      this.resetVertices();
      this.setFeatureState();
      this.onModification(this.feature);
      this.layer.events.triggerEvent("featuremodified", { feature: this.feature });
  },
  setFeatureState: function () {
      if (this.feature.state != OpenLayers.State.INSERT && this.feature.state != OpenLayers.State.DELETE && ((this.feature.state = OpenLayers.State.UPDATE), this.modified && this._originalGeometry)) {
          var a = this.feature;
          a.modified = OpenLayers.Util.extend(a.modified, { geometry: this._originalGeometry });
          delete this._originalGeometry;
      }
  },
  resetVertices: function () {
      0 < this.vertices.length && (this.layer.removeFeatures(this.vertices, { silent: !0 }), (this.vertices = []));
      0 < this.virtualVertices.length && (this.layer.removeFeatures(this.virtualVertices, { silent: !0 }), (this.virtualVertices = []));
      this.dragHandle && (this.layer.destroyFeatures([this.dragHandle], { silent: !0 }), (this.dragHandle = null));
      this.radiusHandle && (this.layer.destroyFeatures([this.radiusHandle], { silent: !0 }), (this.radiusHandle = null));
      this.feature &&
          "OpenLayers.Geometry.Point" != this.feature.geometry.CLASS_NAME &&
          (this.mode & OpenLayers.Control.ModifyFeature.DRAG && this.collectDragHandle(),
          this.mode & (OpenLayers.Control.ModifyFeature.ROTATE | OpenLayers.Control.ModifyFeature.RESIZE) && this.collectRadiusHandle(),
          this.mode & OpenLayers.Control.ModifyFeature.RESHAPE && (this.mode & OpenLayers.Control.ModifyFeature.RESIZE || this.collectVertices()));
  },
  handleKeypress: function (a) {
      var b = a.keyCode;
      this.feature &&
          -1 != OpenLayers.Util.indexOf(this.deleteCodes, b) &&
          (b = this.layer.getFeatureFromEvent(this.handlers.drag.evt)) &&
          -1 != OpenLayers.Util.indexOf(this.vertices, b) &&
          !this.handlers.drag.dragging &&
          b.geometry.parent &&
          (b.geometry.parent.removeComponent(b.geometry),
          this.layer.events.triggerEvent("vertexremoved", { vertex: b.geometry, feature: this.feature, pixel: a.xy }),
          this.layer.drawFeature(this.feature, this.standalone ? void 0 : "select"),
          (this.modified = !0),
          this.resetVertices(),
          this.setFeatureState(),
          this.onModification(this.feature),
          this.layer.events.triggerEvent("featuremodified", { feature: this.feature }));
  },
  collectVertices: function () {
      function a(c) {
          var d, e, f;
          if ("OpenLayers.Geometry.Point" == c.CLASS_NAME) (e = new OpenLayers.Feature.Vector(c)), (e._sketch = !0), (e.renderIntent = b.vertexRenderIntent), b.vertices.push(e);
          else {
              f = c.components.length;
              "OpenLayers.Geometry.LinearRing" == c.CLASS_NAME && (f -= 1);
              for (d = 0; d < f; ++d) (e = c.components[d]), "OpenLayers.Geometry.Point" == e.CLASS_NAME ? ((e = new OpenLayers.Feature.Vector(e)), (e._sketch = !0), (e.renderIntent = b.vertexRenderIntent), b.vertices.push(e)) : a(e);
              if (b.createVertices && "OpenLayers.Geometry.MultiPoint" != c.CLASS_NAME)
                  for (d = 0, f = c.components.length; d < f - 1; ++d) {
                      e = c.components[d];
                      var g = c.components[d + 1];
                      "OpenLayers.Geometry.Point" == e.CLASS_NAME &&
                          "OpenLayers.Geometry.Point" == g.CLASS_NAME &&
                          ((e = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point((e.x + g.x) / 2, (e.y + g.y) / 2), null, b.virtualStyle)),
                          (e.geometry.parent = c),
                          (e._index = d + 1),
                          (e._sketch = !0),
                          b.virtualVertices.push(e));
                  }
          }
      }
      this.vertices = [];
      this.virtualVertices = [];
      var b = this;
      a.call(this, this.feature.geometry);
      this.layer.addFeatures(this.virtualVertices, { silent: !0 });
      this.layer.addFeatures(this.vertices, { silent: !0 });
  },
  collectDragHandle: function () {
      var a = this.feature.geometry,
          b = a.getBounds().getCenterLonLat(),
          b = new OpenLayers.Geometry.Point(b.lon, b.lat),
          c = new OpenLayers.Feature.Vector(b);
      b.move = function (b, c) {
          OpenLayers.Geometry.Point.prototype.move.call(this, b, c);
          a.move(b, c);
      };
      c._sketch = !0;
      this.dragHandle = c;
      this.dragHandle.renderIntent = this.vertexRenderIntent;
      this.layer.addFeatures([this.dragHandle], { silent: !0 });
  },
  collectRadiusHandle: function () {
      var a = this.feature.geometry,
          b = a.getBounds(),
          c = b.getCenterLonLat(),
          d = new OpenLayers.Geometry.Point(c.lon, c.lat),
          b = new OpenLayers.Geometry.Point(b.right, b.bottom),
          c = new OpenLayers.Feature.Vector(b),
          e = this.mode & OpenLayers.Control.ModifyFeature.RESIZE,
          f = this.mode & OpenLayers.Control.ModifyFeature.RESHAPE,
          g = this.mode & OpenLayers.Control.ModifyFeature.ROTATE;
      b.move = function (b, c) {
          OpenLayers.Geometry.Point.prototype.move.call(this, b, c);
          var l = this.x - d.x,
              m = this.y - d.y,
              n = l - b,
              p = m - c;
          if (g) {
              var q = Math.atan2(p, n),
                  q = Math.atan2(m, l) - q,
                  q = q * (180 / Math.PI);
              a.rotate(q, d);
          }
          if (e) {
              var r;
              f ? ((m /= p), (r = l / n / m)) : ((n = Math.sqrt(n * n + p * p)), (m = Math.sqrt(l * l + m * m) / n));
              a.resize(m, d, r);
          }
      };
      c._sketch = !0;
      this.radiusHandle = c;
      this.radiusHandle.renderIntent = this.vertexRenderIntent;
      this.layer.addFeatures([this.radiusHandle], { silent: !0 });
  },
  setMap: function (a) {
      this.handlers.drag.setMap(a);
      OpenLayers.Control.prototype.setMap.apply(this, arguments);
  },
  handleMapEvents: function (a) {
      ("removelayer" != a.type && "order" != a.property) || this.moveLayerToTop();
  },
  moveLayerToTop: function () {
      var a = Math.max(this.map.Z_INDEX_BASE.Feature - 1, this.layer.getZIndex()) + 1;
      this.layer.setZIndex(a);
  },
  moveLayerBack: function () {
      var a = this.layer.getZIndex() - 1;
      a >= this.map.Z_INDEX_BASE.Feature ? this.layer.setZIndex(a) : this.map.setLayerZIndex(this.layer, this.map.getLayerIndex(this.layer));
  },
  CLASS_NAME: "OpenLayers.Control.ModifyFeature",
});
OpenLayers.Control.ModifyFeature.RESHAPE = 1;
OpenLayers.Control.ModifyFeature.RESIZE = 2;
OpenLayers.Control.ModifyFeature.ROTATE = 4;
OpenLayers.Control.ModifyFeature.DRAG = 8;
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,
  protocolRegex: /^http:/i,
  type: "Road",
  culture: "en-US",
  metadataParams: null,
  tileOptions: null,
  protocol: ~window.location.href.indexOf("http") ? "" : "http:",
  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 = this.protocol + "//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),
          b = b.replace(this.protocolRegex, this.protocol);
      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);
      this.isBaseLayer || this.redraw();
      this.updateAttribution();
  },
  getURL: function (a) {
      if (this.url) {
          var b = this.getXYZ(a);
          a = b.x;
          for (var 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")),
              d = b.imageryProviders || [],
              e = OpenLayers.Util.indexOf(this.serverResolutions, this.getServerResolution()),
              b = "",
              f,
              g,
              h,
              k,
              l,
              m,
              n;
          g = 0;
          for (h = d.length; g < h; ++g)
              for (f = d[g], k = 0, l = f.coverageAreas.length; k < l; ++k) (n = f.coverageAreas[k]), (m = OpenLayers.Bounds.fromArray(n.bbox, !0)), c.intersectsBounds(m) && e <= n.zoomMax && e >= n.zoomMin && (b += f.attribution + " ");
          a = a.brandLogoUri.replace(this.protocolRegex, this.protocol);
          this.attribution = OpenLayers.String.format(this.attributionTemplate, { type: this.type.toLowerCase(), logo: a, copyrights: b });
          this.map && this.map.events.triggerEvent("changelayer", { layer: this, property: "attribution" });
      }
  },
  setMap: function () {
      OpenLayers.Layer.XYZ.prototype.setMap.apply(this, arguments);
      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.StyleMap = OpenLayers.Class({
  styles: null,
  extendDefault: !0,
  initialize: function (a, b) {
      this.styles = {
          default: new OpenLayers.Style(OpenLayers.Feature.Vector.style["default"]),
          select: new OpenLayers.Style(OpenLayers.Feature.Vector.style.select),
          temporary: new OpenLayers.Style(OpenLayers.Feature.Vector.style.temporary),
          delete: new OpenLayers.Style(OpenLayers.Feature.Vector.style["delete"]),
      };
      if (a instanceof OpenLayers.Style) (this.styles["default"] = a), (this.styles.select = a), (this.styles.temporary = a), (this.styles["delete"] = a);
      else if ("object" == typeof a)
          for (var c in a)
              if (a[c] instanceof OpenLayers.Style) this.styles[c] = a[c];
              else if ("object" == typeof a[c]) this.styles[c] = new OpenLayers.Style(a[c]);
              else {
                  this.styles["default"] = new OpenLayers.Style(a);
                  this.styles.select = new OpenLayers.Style(a);
                  this.styles.temporary = new OpenLayers.Style(a);
                  this.styles["delete"] = new OpenLayers.Style(a);
                  break;
              }
      OpenLayers.Util.extend(this, b);
  },
  destroy: function () {
      for (var a in this.styles) this.styles[a].destroy();
      this.styles = null;
  },
  createSymbolizer: function (a, b) {
      a || (a = new OpenLayers.Feature.Vector());
      this.styles[b] || (b = "default");
      a.renderIntent = b;
      var c = {};
      this.extendDefault && "default" != b && (c = this.styles["default"].createSymbolizer(a));
      return OpenLayers.Util.extend(c, this.styles[b].createSymbolizer(a));
  },
  addUniqueValueRules: function (a, b, c, d) {
      var e = [],
          f;
      for (f in c) e.push(new OpenLayers.Rule({ symbolizer: c[f], context: d, filter: new OpenLayers.Filter.Comparison({ type: OpenLayers.Filter.Comparison.EQUAL_TO, property: b, value: f }) }));
      this.styles[a].addRules(e);
  },
  CLASS_NAME: "OpenLayers.StyleMap",
});
OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
  isBaseLayer: !1,
  isFixed: !1,
  features: null,
  filter: null,
  selectedFeatures: null,
  unrenderedFeatures: null,
  reportError: !0,
  style: null,
  styleMap: null,
  strategies: null,
  protocol: null,
  renderers: ["SVG", "VML", "Canvas"],
  renderer: null,
  rendererOptions: null,
  geometryType: null,
  drawn: !1,
  ratio: 1,
  initialize: function (a, b) {
      OpenLayers.Layer.prototype.initialize.apply(this, arguments);
      (this.renderer && this.renderer.supported()) || this.assignRenderer();
      (this.renderer && this.renderer.supported()) || ((this.renderer = null), this.displayError());
      this.styleMap || (this.styleMap = new OpenLayers.StyleMap());
      this.features = [];
      this.selectedFeatures = [];
      this.unrenderedFeatures = {};
      if (this.strategies) for (var c = 0, d = this.strategies.length; c < d; c++) this.strategies[c].setLayer(this);
  },
  destroy: function () {
      if (this.strategies) {
          var a, b, c;
          b = 0;
          for (c = this.strategies.length; b < c; b++) (a = this.strategies[b]), a.autoDestroy && a.destroy();
          this.strategies = null;
      }
      this.protocol && (this.protocol.autoDestroy && this.protocol.destroy(), (this.protocol = null));
      this.destroyFeatures();
      this.unrenderedFeatures = this.selectedFeatures = this.features = null;
      this.renderer && this.renderer.destroy();
      this.drawn = this.geometryType = this.renderer = null;
      OpenLayers.Layer.prototype.destroy.apply(this, arguments);
  },
  clone: function (a) {
      null == a && (a = new OpenLayers.Layer.Vector(this.name, this.getOptions()));
      a = OpenLayers.Layer.prototype.clone.apply(this, [a]);
      for (var b = this.features, c = b.length, d = Array(c), e = 0; e < c; ++e) d[e] = b[e].clone();
      a.features = d;
      return a;
  },
  refresh: function (a) {
      this.calculateInRange() && this.visibility && this.events.triggerEvent("refresh", a);
  },
  assignRenderer: function () {
      for (var a = 0, b = this.renderers.length; a < b; a++) {
          var c = this.renderers[a];
          if ((c = "function" == typeof c ? c : OpenLayers.Renderer[c]) && c.prototype.supported()) {
              this.renderer = new c(this.div, this.rendererOptions);
              break;
          }
      }
  },
  displayError: function () {
      this.reportError && OpenLayers.Console.userError(OpenLayers.i18n("browserNotSupported", { renderers: this.renderers.join("\n") }));
  },
  setMap: function (a) {
      OpenLayers.Layer.prototype.setMap.apply(this, arguments);
      if (this.renderer) {
          this.renderer.map = this.map;
          var b = this.map.getSize();
          b.w *= this.ratio;
          b.h *= this.ratio;
          this.renderer.setSize(b);
      } else this.map.removeLayer(this);
  },
  afterAdd: function () {
      if (this.strategies) {
          var a, b, c;
          b = 0;
          for (c = this.strategies.length; b < c; b++) (a = this.strategies[b]), a.autoActivate && a.activate();
      }
  },
  removeMap: function (a) {
      this.drawn = !1;
      if (this.strategies) {
          var b, c;
          b = 0;
          for (c = this.strategies.length; b < c; b++) (a = this.strategies[b]), a.autoActivate && a.deactivate();
      }
  },
  onMapResize: function () {
      OpenLayers.Layer.prototype.onMapResize.apply(this, arguments);
      var a = this.map.getSize();
      a.w *= this.ratio;
      a.h *= this.ratio;
      this.renderer.setSize(a);
  },
  moveTo: function (a, b, c) {
      OpenLayers.Layer.prototype.moveTo.apply(this, arguments);
      var d = !0;
      if (!c) {
          this.renderer.root.style.visibility = "hidden";
          var d = this.map.getSize(),
              e = d.w,
              d = d.h,
              e = (e / 2) * this.ratio - e / 2,
              d = (d / 2) * this.ratio - d / 2,
              e = e + this.map.layerContainerOriginPx.x,
              e = -Math.round(e),
              d = d + this.map.layerContainerOriginPx.y,
              d = -Math.round(d);
          this.div.style.left = e + "px";
          this.div.style.top = d + "px";
          e = this.map.getExtent().scale(this.ratio);
          d = this.renderer.setExtent(e, b);
          this.renderer.root.style.visibility = "visible";
          !0 === OpenLayers.IS_GECKO && (this.div.scrollLeft = this.div.scrollLeft);
          if (!b && d) for (var f in this.unrenderedFeatures) (e = this.unrenderedFeatures[f]), this.drawFeature(e);
      }
      if (!this.drawn || b || !d) for (this.drawn = !0, f = 0, d = this.features.length; f < d; f++) (this.renderer.locked = f !== d - 1), (e = this.features[f]), this.drawFeature(e);
  },
  display: function (a) {
      OpenLayers.Layer.prototype.display.apply(this, arguments);
      var b = this.div.style.display;
      b != this.renderer.root.style.display && (this.renderer.root.style.display = b);
  },
  addFeatures: function (a, b) {
      OpenLayers.Util.isArray(a) || (a = [a]);
      var c = !b || !b.silent;
      if (c) {
          var d = { features: a };
          if (!1 === this.events.triggerEvent("beforefeaturesadded", d)) return;
          a = d.features;
      }
      for (var d = [], e = 0, f = a.length; e < f; e++) {
          this.renderer.locked = e != a.length - 1 ? !0 : !1;
          var g = a[e];
          if (this.geometryType && !(g.geometry instanceof this.geometryType)) throw new TypeError("addFeatures: component should be an " + this.geometryType.prototype.CLASS_NAME);
          g.layer = this;
          !g.style && this.style && (g.style = OpenLayers.Util.extend({}, this.style));
          if (c) {
              if (!1 === this.events.triggerEvent("beforefeatureadded", { feature: g })) continue;
              this.preFeatureInsert(g);
          }
          d.push(g);
          this.features.push(g);
          this.drawFeature(g);
          c && (this.events.triggerEvent("featureadded", { feature: g }), this.onFeatureInsert(g));
      }
      c && this.events.triggerEvent("featuresadded", { features: d });
  },
  removeFeatures: function (a, b) {
      if (a && 0 !== a.length) {
          if (a === this.features) return this.removeAllFeatures(b);
          OpenLayers.Util.isArray(a) || (a = [a]);
          a === this.selectedFeatures && (a = a.slice());
          var c = !b || !b.silent;
          c && this.events.triggerEvent("beforefeaturesremoved", { features: a });
          for (var d = a.length - 1; 0 <= d; d--) {
              this.renderer.locked = 0 != d && a[d - 1].geometry ? !0 : !1;
              var e = a[d];
              delete this.unrenderedFeatures[e.id];
              c && this.events.triggerEvent("beforefeatureremoved", { feature: e });
              this.features = OpenLayers.Util.removeItem(this.features, e);
              e.layer = null;
              e.geometry && this.renderer.eraseFeatures(e);
              -1 != OpenLayers.Util.indexOf(this.selectedFeatures, e) && OpenLayers.Util.removeItem(this.selectedFeatures, e);
              c && this.events.triggerEvent("featureremoved", { feature: e });
          }
          c && this.events.triggerEvent("featuresremoved", { features: a });
      }
  },
  removeAllFeatures: function (a) {
      a = !a || !a.silent;
      var b = this.features;
      a && this.events.triggerEvent("beforefeaturesremoved", { features: b });
      for (var c, d = b.length - 1; 0 <= d; d--) (c = b[d]), a && this.events.triggerEvent("beforefeatureremoved", { feature: c }), (c.layer = null), a && this.events.triggerEvent("featureremoved", { feature: c });
      this.renderer.clear();
      this.features = [];
      this.unrenderedFeatures = {};
      this.selectedFeatures = [];
      a && this.events.triggerEvent("featuresremoved", { features: b });
  },
  destroyFeatures: function (a, b) {
      void 0 == a && (a = this.features);
      if (a) {
          this.removeFeatures(a, b);
          for (var c = a.length - 1; 0 <= c; c--) a[c].destroy();
      }
  },
  drawFeature: function (a, b) {
      if (this.drawn) {
          if ("object" != typeof b) {
              b || a.state !== OpenLayers.State.DELETE || (b = "delete");
              var c = b || a.renderIntent;
              (b = a.style || this.style) || (b = this.styleMap.createSymbolizer(a, c));
          }
          c = this.renderer.drawFeature(a, b);
          !1 === c || null === c ? (this.unrenderedFeatures[a.id] = a) : delete this.unrenderedFeatures[a.id];
      }
  },
  eraseFeatures: function (a) {
      this.renderer.eraseFeatures(a);
  },
  getFeatureFromEvent: function (a) {
      if (!this.renderer) throw Error("getFeatureFromEvent called on layer with no renderer. This usually means you destroyed a layer, but not some handler which is associated with it.");
      var b = null;
      (a = this.renderer.getFeatureIdFromEvent(a)) && (b = "string" === typeof a ? this.getFeatureById(a) : a);
      return b;
  },
  getFeatureBy: function (a, b) {
      for (var c = null, d = 0, e = this.features.length; d < e; ++d)
          if (this.features[d][a] == b) {
              c = this.features[d];
              break;
          }
      return c;
  },
  getFeatureById: function (a) {
      return this.getFeatureBy("id", a);
  },
  getFeatureByFid: function (a) {
      return this.getFeatureBy("fid", a);
  },
  getFeaturesByAttribute: function (a, b) {
      var c,
          d,
          e = this.features.length,
          f = [];
      for (c = 0; c < e; c++) (d = this.features[c]) && d.attributes && d.attributes[a] === b && f.push(d);
      return f;
  },
  onFeatureInsert: function (a) {},
  preFeatureInsert: function (a) {},
  getDataExtent: function () {
      var a = null,
          b = this.features;
      if (b && 0 < b.length) for (var c = null, d = 0, e = b.length; d < e; d++) if ((c = b[d].geometry)) null === a && (a = new OpenLayers.Bounds()), a.extend(c.getBounds());
      return a;
  },
  CLASS_NAME: "OpenLayers.Layer.Vector",
});
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);
          var 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,
                  k = 0;
              k < d;
              ++k
          )
              for (var f = e + k * this.dx, l = 0; l < b; ++l) (h = c + l * this.dy), (h = new OpenLayers.Geometry.Point(f, h)), this.rotation && h.rotate(this.rotation, a), (g[k * b + l] = 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.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
  wheelListener: null,
  interval: 0,
  maxDelta: Number.POSITIVE_INFINITY,
  delta: 0,
  cumulative: !0,
  initialize: function (a, b, c) {
      OpenLayers.Handler.prototype.initialize.apply(this, arguments);
      this.wheelListener = OpenLayers.Function.bindAsEventListener(this.onWheelEvent, this);
  },
  destroy: function () {
      OpenLayers.Handler.prototype.destroy.apply(this, arguments);
      this.wheelListener = null;
  },
  onWheelEvent: function (a) {
      if (this.map && this.checkModifiers(a)) {
          for (var b = !1, c = !1, d = !1, e = OpenLayers.Event.element(a); null != e && !d && !b; ) {
              if (!b)
                  try {
                      var f,
                          b = ((f = e.currentStyle ? e.currentStyle.overflow : document.defaultView.getComputedStyle(e, null).getPropertyValue("overflow")) && "auto" == f) || "scroll" == f;
                  } catch (g) {}
              if (!c && ((c = OpenLayers.Element.hasClass(e, "olScrollable")), !c))
                  for (var d = 0, h = this.map.layers.length; d < h; d++) {
                      var k = this.map.layers[d];
                      if (e == k.div || e == k.pane) {
                          c = !0;
                          break;
                      }
                  }
              d = e == this.map.div;
              e = e.parentNode;
          }
          if (!b && d) {
              if (c)
                  if (
                      ((b = 0),
                      a.wheelDelta ? ((b = a.wheelDelta), 0 === b % 160 && (b *= 0.75), (b /= 120)) : a.detail && (b = -(a.detail / Math.abs(a.detail))),
                      (this.delta += b),
                      window.clearTimeout(this._timeoutId),
                      this.interval && Math.abs(this.delta) < this.maxDelta)
                  ) {
                      var l = OpenLayers.Util.extend({}, a);
                      this._timeoutId = window.setTimeout(
                          OpenLayers.Function.bind(function () {
                              this.wheelZoom(l);
                          }, this),
                          this.interval
                      );
                  } else this.wheelZoom(a);
              OpenLayers.Event.stop(a);
          }
      }
  },
  wheelZoom: function (a) {
      var b = this.delta;
      this.delta = 0;
      b && ((a.xy = this.map.events.getMousePosition(a)), 0 > b ? this.callback("down", [a, this.cumulative ? Math.max(-this.maxDelta, b) : -1]) : this.callback("up", [a, this.cumulative ? Math.min(this.maxDelta, b) : 1]));
  },
  activate: function (a) {
      if (OpenLayers.Handler.prototype.activate.apply(this, arguments)) {
          var b = this.wheelListener;
          OpenLayers.Event.observe(window, "DOMMouseScroll", b);
          OpenLayers.Event.observe(window, "mousewheel", b);
          OpenLayers.Event.observe(document, "mousewheel", b);
          return !0;
      }
      return !1;
  },
  deactivate: function (a) {
      if (OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) {
          var b = this.wheelListener;
          OpenLayers.Event.stopObserving(window, "DOMMouseScroll", b);
          OpenLayers.Event.stopObserving(window, "mousewheel", b);
          OpenLayers.Event.stopObserving(document, "mousewheel", b);
          return !0;
      }
      return !1;
  },
  CLASS_NAME: "OpenLayers.Handler.MouseWheel",
});
OpenLayers.Symbolizer = OpenLayers.Class({
  zIndex: 0,
  initialize: function (a) {
      OpenLayers.Util.extend(this, a);
  },
  clone: function () {
      return new (eval(this.CLASS_NAME))(OpenLayers.Util.extend({}, this));
  },
  CLASS_NAME: "OpenLayers.Symbolizer",
});
OpenLayers.Symbolizer.Raster = OpenLayers.Class(OpenLayers.Symbolizer, {
  initialize: function (a) {
      OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments);
  },
  CLASS_NAME: "OpenLayers.Symbolizer.Raster",
});
OpenLayers.Rule = OpenLayers.Class({
  id: null,
  name: null,
  title: null,
  description: null,
  context: null,
  filter: null,
  elseFilter: !1,
  symbolizer: null,
  symbolizers: null,
  minScaleDenominator: null,
  maxScaleDenominator: null,
  initialize: function (a) {
      this.symbolizer = {};
      OpenLayers.Util.extend(this, a);
      this.symbolizers && delete this.symbolizer;
      this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_");
  },
  destroy: function () {
      for (var a in this.symbolizer) this.symbolizer[a] = null;
      this.symbolizer = null;
      delete this.symbolizers;
  },
  evaluate: function (a) {
      var b = this.getContext(a),
          c = !0;
      if (this.minScaleDenominator || this.maxScaleDenominator) var d = a.layer.map.getScale();
      this.minScaleDenominator && (c = d >= OpenLayers.Style.createLiteral(this.minScaleDenominator, b));
      c && this.maxScaleDenominator && (c = d < OpenLayers.Style.createLiteral(this.maxScaleDenominator, b));
      c && this.filter && (c = "OpenLayers.Filter.FeatureId" == this.filter.CLASS_NAME ? this.filter.evaluate(a) : this.filter.evaluate(b));
      return c;
  },
  getContext: function (a) {
      var b = this.context;
      b || (b = a.attributes || a.data);
      "function" == typeof this.context && (b = this.context(a));
      return b;
  },
  clone: function () {
      var a = OpenLayers.Util.extend({}, this);
      if (this.symbolizers) {
          var b = this.symbolizers.length;
          a.symbolizers = Array(b);
          for (var c = 0; c < b; ++c) a.symbolizers[c] = this.symbolizers[c].clone();
      } else {
          a.symbolizer = {};
          for (var d in this.symbolizer) (b = this.symbolizer[d]), (c = typeof b), "object" === c ? (a.symbolizer[d] = OpenLayers.Util.extend({}, b)) : "string" === c && (a.symbolizer[d] = b);
      }
      a.filter = this.filter && this.filter.clone();
      a.context = this.context && OpenLayers.Util.extend({}, this.context);
      return new OpenLayers.Rule(a);
  },
  CLASS_NAME: "OpenLayers.Rule",
});
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.Symbolizer.Polygon = OpenLayers.Class(OpenLayers.Symbolizer, {
  initialize: function (a) {
      OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments);
  },
  CLASS_NAME: "OpenLayers.Symbolizer.Polygon",
});
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) {
      var b;
      b = OpenLayers.Util.isArray(a) ? "wfs:FeatureCollection" : "gml:featureMember";
      a = this.writeNode(b, 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, c) {
      return OpenLayers.Format.GML.v2.prototype.readNode.apply(this, arguments);
  },
  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 = b.insertIds.concat(c.fids);
              },
              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) {
                  a = OpenLayers.Util.extend({ featureNS: this.featureNS, featurePrefix: this.featurePrefix, featureType: this.featureType, srsName: this.srsName, srsNameInQuery: this.srsNameInQuery }, a);
                  var 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.ElementsIndexer = OpenLayers.Class({
  maxZIndex: null,
  order: null,
  indices: null,
  compare: null,
  initialize: function (a) {
      this.compare = a ? OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER_Y_ORDER : OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER_DRAWING_ORDER;
      this.clear();
  },
  insert: function (a) {
      this.exists(a) && this.remove(a);
      var b = a.id;
      this.determineZIndex(a);
      for (var c = -1, d = this.order.length, e; 1 < d - c; ) (e = parseInt((c + d) / 2)), 0 < this.compare(this, a, OpenLayers.Util.getElement(this.order[e])) ? (c = e) : (d = e);
      this.order.splice(d, 0, b);
      this.indices[b] = this.getZIndex(a);
      return this.getNextElement(d);
  },
  remove: function (a) {
      a = a.id;
      var b = OpenLayers.Util.indexOf(this.order, a);
      0 <= b && (this.order.splice(b, 1), delete this.indices[a], (this.maxZIndex = 0 < this.order.length ? this.indices[this.order[this.order.length - 1]] : 0));
  },
  clear: function () {
      this.order = [];
      this.indices = {};
      this.maxZIndex = 0;
  },
  exists: function (a) {
      return null != this.indices[a.id];
  },
  getZIndex: function (a) {
      return a._style.graphicZIndex;
  },
  determineZIndex: function (a) {
      var b = a._style.graphicZIndex;
      null == b ? ((b = this.maxZIndex), (a._style.graphicZIndex = b)) : b > this.maxZIndex && (this.maxZIndex = b);
  },
  getNextElement: function (a) {
      a += 1;
      if (a < this.order.length) {
          var b = OpenLayers.Util.getElement(this.order[a]);
          void 0 == b && (b = this.getNextElement(a));
          return b;
      }
      return null;
  },
  CLASS_NAME: "OpenLayers.ElementsIndexer",
});
OpenLayers.ElementsIndexer.IndexingMethods = {
  Z_ORDER: function (a, b, c) {
      b = a.getZIndex(b);
      var d = 0;
      c && ((a = a.getZIndex(c)), (d = b - a));
      return d;
  },
  Z_ORDER_DRAWING_ORDER: function (a, b, c) {
      a = OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER(a, b, c);
      c && 0 == a && (a = 1);
      return a;
  },
  Z_ORDER_Y_ORDER: function (a, b, c) {
      a = OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER(a, b, c);
      c && 0 === a && ((b = c._boundsBottom - b._boundsBottom), (a = 0 === b ? 1 : b));
      return a;
  },
};
OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, {
  rendererRoot: null,
  root: null,
  vectorRoot: null,
  textRoot: null,
  xmlns: null,
  xOffset: 0,
  indexer: null,
  BACKGROUND_ID_SUFFIX: "_background",
  LABEL_ID_SUFFIX: "_label",
  LABEL_OUTLINE_SUFFIX: "_outline",
  initialize: function (a, b) {
      OpenLayers.Renderer.prototype.initialize.apply(this, arguments);
      this.rendererRoot = this.createRenderRoot();
      this.root = this.createRoot("_root");
      this.vectorRoot = this.createRoot("_vroot");
      this.textRoot = this.createRoot("_troot");
      this.root.appendChild(this.vectorRoot);
      this.root.appendChild(this.textRoot);
      this.rendererRoot.appendChild(this.root);
      this.container.appendChild(this.rendererRoot);
      b && (b.zIndexing || b.yOrdering) && (this.indexer = new OpenLayers.ElementsIndexer(b.yOrdering));
  },
  destroy: function () {
      this.clear();
      this.xmlns = this.root = this.rendererRoot = null;
      OpenLayers.Renderer.prototype.destroy.apply(this, arguments);
  },
  clear: function () {
      var a,
          b = this.vectorRoot;
      if (b) for (; (a = b.firstChild); ) b.removeChild(a);
      if ((b = this.textRoot)) for (; (a = b.firstChild); ) b.removeChild(a);
      this.indexer && this.indexer.clear();
  },
  setExtent: function (a, b) {
      var c = OpenLayers.Renderer.prototype.setExtent.apply(this, arguments),
          d = this.getResolution();
      if (this.map.baseLayer && this.map.baseLayer.wrapDateLine) {
          var e,
              f = a.getWidth() / this.map.getExtent().getWidth();
          a = a.scale(1 / f);
          f = this.map.getMaxExtent();
          f.right > a.left && f.right < a.right ? (e = !0) : f.left > a.left && f.left < a.right && (e = !1);
          if (e !== this.rightOfDateLine || b) (c = !1), (this.xOffset = !0 === e ? f.getWidth() / d : 0);
          this.rightOfDateLine = e;
      }
      return c;
  },
  getNodeType: function (a, b) {},
  drawGeometry: function (a, b, c) {
      var d = a.CLASS_NAME,
          e = !0;
      if ("OpenLayers.Geometry.Collection" == d || "OpenLayers.Geometry.MultiPoint" == d || "OpenLayers.Geometry.MultiLineString" == d || "OpenLayers.Geometry.MultiPolygon" == d) {
          for (var d = 0, f = a.components.length; d < f; d++) e = this.drawGeometry(a.components[d], b, c) && e;
          return e;
      }
      d = e = !1;
      "none" != b.display && (b.backgroundGraphic ? this.redrawBackgroundNode(a.id, a, b, c) : (d = !0), (e = this.redrawNode(a.id, a, b, c)));
      !1 == e && (b = document.getElementById(a.id)) && (b._style.backgroundGraphic && (d = !0), b.parentNode.removeChild(b));
      d && (b = document.getElementById(a.id + this.BACKGROUND_ID_SUFFIX)) && b.parentNode.removeChild(b);
      return e;
  },
  redrawNode: function (a, b, c, d) {
      c = this.applyDefaultSymbolizer(c);
      a = this.nodeFactory(a, this.getNodeType(b, c));
      a._featureId = d;
      a._boundsBottom = b.getBounds().bottom;
      a._geometryClass = b.CLASS_NAME;
      a._style = c;
      b = this.drawGeometryNode(a, b, c);
      if (!1 === b) return !1;
      a = b.node;
      this.indexer ? ((c = this.indexer.insert(a)) ? this.vectorRoot.insertBefore(a, c) : this.vectorRoot.appendChild(a)) : a.parentNode !== this.vectorRoot && this.vectorRoot.appendChild(a);
      this.postDraw(a);
      return b.complete;
  },
  redrawBackgroundNode: function (a, b, c, d) {
      c = OpenLayers.Util.extend({}, c);
      c.externalGraphic = c.backgroundGraphic;
      c.graphicXOffset = c.backgroundXOffset;
      c.graphicYOffset = c.backgroundYOffset;
      c.graphicZIndex = c.backgroundGraphicZIndex;
      c.graphicWidth = c.backgroundWidth || c.graphicWidth;
      c.graphicHeight = c.backgroundHeight || c.graphicHeight;
      c.backgroundGraphic = null;
      c.backgroundXOffset = null;
      c.backgroundYOffset = null;
      c.backgroundGraphicZIndex = null;
      return this.redrawNode(a + this.BACKGROUND_ID_SUFFIX, b, c, null);
  },
  drawGeometryNode: function (a, b, c) {
      c = c || a._style;
      var d = { isFilled: void 0 === c.fill ? !0 : c.fill, isStroked: void 0 === c.stroke ? !!c.strokeWidth : c.stroke },
          e;
      switch (b.CLASS_NAME) {
          case "OpenLayers.Geometry.Point":
              !1 === c.graphic && ((d.isFilled = !1), (d.isStroked = !1));
              e = this.drawPoint(a, b);
              break;
          case "OpenLayers.Geometry.LineString":
              d.isFilled = !1;
              e = this.drawLineString(a, b);
              break;
          case "OpenLayers.Geometry.LinearRing":
              e = this.drawLinearRing(a, b);
              break;
          case "OpenLayers.Geometry.Polygon":
              e = this.drawPolygon(a, b);
              break;
          case "OpenLayers.Geometry.Rectangle":
              e = this.drawRectangle(a, b);
      }
      a._options = d;
      return !1 != e ? { node: this.setStyle(a, c, d, b), complete: e } : !1;
  },
  postDraw: function (a) {},
  drawPoint: function (a, b) {},
  drawLineString: function (a, b) {},
  drawLinearRing: function (a, b) {},
  drawPolygon: function (a, b) {},
  drawRectangle: function (a, b) {},
  drawCircle: function (a, b) {},
  removeText: function (a) {
      var b = document.getElementById(a + this.LABEL_ID_SUFFIX);
      b && this.textRoot.removeChild(b);
      (a = document.getElementById(a + this.LABEL_OUTLINE_SUFFIX)) && this.textRoot.removeChild(a);
  },
  getFeatureIdFromEvent: function (a) {
      var b = a.target,
          c = b && b.correspondingUseElement;
      return (c ? c : b || a.srcElement)._featureId;
  },
  eraseGeometry: function (a, b) {
      if ("OpenLayers.Geometry.MultiPoint" == a.CLASS_NAME || "OpenLayers.Geometry.MultiLineString" == a.CLASS_NAME || "OpenLayers.Geometry.MultiPolygon" == a.CLASS_NAME || "OpenLayers.Geometry.Collection" == a.CLASS_NAME)
          for (var c = 0, d = a.components.length; c < d; c++) this.eraseGeometry(a.components[c], b);
      else
          (c = OpenLayers.Util.getElement(a.id)) &&
              c.parentNode &&
              (c.geometry && (c.geometry.destroy(), (c.geometry = null)),
              c.parentNode.removeChild(c),
              this.indexer && this.indexer.remove(c),
              c._style.backgroundGraphic && (c = OpenLayers.Util.getElement(a.id + this.BACKGROUND_ID_SUFFIX)) && c.parentNode && c.parentNode.removeChild(c));
  },
  nodeFactory: function (a, b) {
      var c = OpenLayers.Util.getElement(a);
      c ? this.nodeTypeCompare(c, b) || (c.parentNode.removeChild(c), (c = this.nodeFactory(a, b))) : (c = this.createNode(b, a));
      return c;
  },
  nodeTypeCompare: function (a, b) {},
  createNode: function (a, b) {},
  moveRoot: function (a) {
      var b = this.root;
      a.root.parentNode == this.rendererRoot && (b = a.root);
      b.parentNode.removeChild(b);
      a.rendererRoot.appendChild(b);
  },
  getRenderLayerId: function () {
      return this.root.parentNode.parentNode.id;
  },
  isComplexSymbol: function (a) {
      return "circle" != a && !!a;
  },
  CLASS_NAME: "OpenLayers.Renderer.Elements",
});
OpenLayers.Control.ArgParser = OpenLayers.Class(OpenLayers.Control, {
  center: null,
  zoom: null,
  layers: null,
  displayProjection: null,
  getParameters: function (a) {
      a = a || window.location.href;
      var b = OpenLayers.Util.getParameters(a),
          c = a.indexOf("#");
      0 < c && ((a = "?" + a.substring(c + 1, a.length)), OpenLayers.Util.extend(b, OpenLayers.Util.getParameters(a)));
      return b;
  },
  setMap: function (a) {
      OpenLayers.Control.prototype.setMap.apply(this, arguments);
      for (var b = 0, c = this.map.controls.length; b < c; b++) {
          var d = this.map.controls[b];
          if (d != this && "OpenLayers.Control.ArgParser" == d.CLASS_NAME) {
              d.displayProjection != this.displayProjection && (this.displayProjection = d.displayProjection);
              break;
          }
      }
      b == this.map.controls.length &&
          ((b = this.getParameters()),
          b.layers && ((this.layers = b.layers), this.map.events.register("addlayer", this, this.configureLayers), this.configureLayers()),
          b.lat && b.lon && ((this.center = new OpenLayers.LonLat(parseFloat(b.lon), parseFloat(b.lat))), b.zoom && (this.zoom = parseFloat(b.zoom)), this.map.events.register("changebaselayer", this, this.setCenter), this.setCenter()));
  },
  setCenter: function () {
      this.map.baseLayer &&
          (this.map.events.unregister("changebaselayer", this, this.setCenter), this.displayProjection && this.center.transform(this.displayProjection, this.map.getProjectionObject()), this.map.setCenter(this.center, this.zoom));
  },
  configureLayers: function () {
      if (this.layers.length == this.map.layers.length) {
          this.map.events.unregister("addlayer", this, this.configureLayers);
          for (var a = 0, b = this.layers.length; a < b; a++) {
              var c = this.map.layers[a],
                  d = this.layers.charAt(a);
              "B" == d ? this.map.setBaseLayer(c) : ("T" != d && "F" != d) || c.setVisibility("T" == d);
          }
      }
  },
  CLASS_NAME: "OpenLayers.Control.ArgParser",
});
OpenLayers.Control.Permalink = OpenLayers.Class(OpenLayers.Control, {
  argParserClass: OpenLayers.Control.ArgParser,
  element: null,
  anchor: !1,
  base: "",
  displayProjection: null,
  initialize: function (a, b, c) {
      null === a || "object" != typeof a || OpenLayers.Util.isElement(a)
          ? (OpenLayers.Control.prototype.initialize.apply(this, [c]), (this.element = OpenLayers.Util.getElement(a)), (this.base = b || document.location.href))
          : ((this.base = document.location.href), OpenLayers.Control.prototype.initialize.apply(this, [a]), null != this.element && (this.element = OpenLayers.Util.getElement(this.element)));
  },
  destroy: function () {
      this.element && this.element.parentNode == this.div && (this.div.removeChild(this.element), (this.element = null));
      this.map && this.map.events.unregister("moveend", this, this.updateLink);
      OpenLayers.Control.prototype.destroy.apply(this, arguments);
  },
  setMap: function (a) {
      OpenLayers.Control.prototype.setMap.apply(this, arguments);
      for (var b = 0, c = this.map.controls.length; b < c; b++) {
          var d = this.map.controls[b];
          if (d.CLASS_NAME == this.argParserClass.CLASS_NAME) {
              d.displayProjection != this.displayProjection && (this.displayProjection = d.displayProjection);
              break;
          }
      }
      b == this.map.controls.length && this.map.addControl(new this.argParserClass({ displayProjection: this.displayProjection }));
  },
  draw: function () {
      OpenLayers.Control.prototype.draw.apply(this, arguments);
      this.element || this.anchor || ((this.element = document.createElement("a")), (this.element.innerHTML = OpenLayers.i18n("Permalink")), (this.element.href = ""), this.div.appendChild(this.element));
      this.map.events.on({ moveend: this.updateLink, changelayer: this.updateLink, changebaselayer: this.updateLink, scope: this });
      this.updateLink();
      return this.div;
  },
  updateLink: function () {
      var a = this.anchor ? "#" : "?",
          b = this.base,
          c = null;
      -1 != b.indexOf("#") && !1 == this.anchor && (c = b.substring(b.indexOf("#"), b.length));
      -1 != b.indexOf(a) && (b = b.substring(0, b.indexOf(a)));
      b = b.split("#")[0] + a + OpenLayers.Util.getParameterString(this.createParams());
      c && (b += c);
      this.anchor && !this.element ? (window.location.href = b) : (this.element.href = b);
  },
  createParams: function (a, b, c) {
      a = a || this.map.getCenter();
      var d = OpenLayers.Util.getParameters(this.base);
      if (a)
          for (
              d.zoom = b || this.map.getZoom(),
                  b = a.lat,
                  a = a.lon,
                  this.displayProjection && ((b = OpenLayers.Projection.transform({ x: a, y: b }, this.map.getProjectionObject(), this.displayProjection)), (a = b.x), (b = b.y)),
                  d.lat = Math.round(1e5 * b) / 1e5,
                  d.lon = Math.round(1e5 * a) / 1e5,
                  c = c || this.map.layers,
                  d.layers = "",
                  a = 0,
                  b = c.length;
              a < b;
              a++
          ) {
              var e = c[a];
              d.layers = e.isBaseLayer ? d.layers + (e == this.map.baseLayer ? "B" : "0") : d.layers + (e.getVisibility() ? "T" : "F");
          }
      return d;
  },
  CLASS_NAME: "OpenLayers.Control.Permalink",
});
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) {
      a = this.adjustBounds(a);
      var 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));
      b = this.getServerZoom();
      c = this.serviceVersion + "/" + this.layername + "/" + b + "/" + 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.Format.WCSCapabilities = OpenLayers.Class(OpenLayers.Format.XML.VersionedOGC, { defaultVersion: "1.1.0", CLASS_NAME: "OpenLayers.Format.WCSCapabilities" });
OpenLayers.Format.WCSCapabilities.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
  regExes: { trimSpace: /^\s*|\s*$/g, splitSpace: /\s+/ },
  defaultPrefix: "wcs",
  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.WCSCapabilities.v1",
});
OpenLayers.Format.WCSCapabilities.v1_0_0 = OpenLayers.Class(OpenLayers.Format.WCSCapabilities.v1, {
  namespaces: { wcs: "http://www.opengis.net/wcs", xlink: "http://www.w3.org/1999/xlink", xsi: "http://www.w3.org/2001/XMLSchema-instance", ows: "http://www.opengis.net/ows" },
  errorProperty: "service",
  readers: {
      wcs: {
          WCS_Capabilities: function (a, b) {
              this.readChildNodes(a, b);
          },
          Service: function (a, b) {
              b.service = {};
              this.readChildNodes(a, b.service);
          },
          name: function (a, b) {
              b.name = this.getChildValue(a);
          },
          label: function (a, b) {
              b.label = this.getChildValue(a);
          },
          keywords: function (a, b) {
              b.keywords = [];
              this.readChildNodes(a, b.keywords);
          },
          keyword: function (a, b) {
              b.push(this.getChildValue(a));
          },
          responsibleParty: function (a, b) {
              b.responsibleParty = {};
              this.readChildNodes(a, b.responsibleParty);
          },
          individualName: function (a, b) {
              b.individualName = this.getChildValue(a);
          },
          organisationName: function (a, b) {
              b.organisationName = 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);
          },
          facsimile: function (a, b) {
              b.facsimile = 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);
          },
          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);
          },
          fees: function (a, b) {
              b.fees = this.getChildValue(a);
          },
          accessConstraints: function (a, b) {
              b.accessConstraints = this.getChildValue(a);
          },
          ContentMetadata: function (a, b) {
              b.contentMetadata = [];
              this.readChildNodes(a, b.contentMetadata);
          },
          CoverageOfferingBrief: function (a, b) {
              var c = {};
              this.readChildNodes(a, c);
              b.push(c);
          },
          name: function (a, b) {
              b.name = this.getChildValue(a);
          },
          label: function (a, b) {
              b.label = this.getChildValue(a);
          },
          lonLatEnvelope: function (a, b) {
              var c = this.getElementsByTagNameNS(a, "http://www.opengis.net/gml", "pos");
              if (2 == c.length) {
                  var d = {},
                      e = {};
                  OpenLayers.Format.GML.v3.prototype.readers.gml.pos.apply(this, [c[0], d]);
                  OpenLayers.Format.GML.v3.prototype.readers.gml.pos.apply(this, [c[1], e]);
                  b.lonLatEnvelope = {};
                  b.lonLatEnvelope.srsName = a.getAttribute("srsName");
                  b.lonLatEnvelope.min = d.points[0];
                  b.lonLatEnvelope.max = e.points[0];
              }
          },
      },
  },
  CLASS_NAME: "OpenLayers.Format.WCSCapabilities.v1_0_0",
});
OpenLayers.Strategy.Fixed = OpenLayers.Class(OpenLayers.Strategy, {
  preload: !1,
  activate: function () {
      var a = OpenLayers.Strategy.prototype.activate.apply(this, arguments);
      if (a)
          if ((this.layer.events.on({ refresh: this.load, scope: this }), !0 == this.layer.visibility || this.preload)) this.load();
          else this.layer.events.on({ visibilitychanged: this.load, scope: this });
      return a;
  },
  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", { filter: b.filter });
      b.protocol.read(OpenLayers.Util.applyDefaults({ callback: this.merge, filter: b.filter, scope: this }, a));
      b.events.un({ visibilitychanged: this.load, scope: this });
  },
  merge: function (a) {
      var b = this.layer;
      b.destroyFeatures();
      var c = a.features;
      if (c && 0 < c.length) {
          var d = b.projection,
              e = b.map.getProjectionObject();
          if (!e.equals(d)) for (var f, g = 0, h = c.length; g < h; ++g) (f = c[g].geometry) && f.transform(d, e);
          b.addFeatures(c);
      }
      b.events.triggerEvent("loadend", { response: a });
  },
  CLASS_NAME: "OpenLayers.Strategy.Fixed",
});
OpenLayers.Control.Zoom = OpenLayers.Class(OpenLayers.Control, {
  zoomInText: "+",
  zoomInId: "olZoomInLink",
  zoomOutText: "\u2212",
  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];
          f = d.geometry;
          if (!f) (f = d.lonlat), (f = new OpenLayers.Geometry.Point(f.lon, f.lat));
          else if ("OpenLayers.Geometry.Point" != f.CLASS_NAME) throw new TypeError("Only features with point geometries are supported.");
          if (0 < g) {
              d = null != this.dataFrom ? a[g + this.dataFrom].data || a[g + this.dataFrom].attributes : null;
              var k = 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, k);
          }
          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) {
  a = OpenLayers.Util.applyDefaults(a, OpenLayers.Protocol.WFS.DEFAULTS);
  var 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.Layer.Markers = OpenLayers.Class(OpenLayers.Layer, {
  isBaseLayer: !1,
  markers: null,
  drawn: !1,
  initialize: function (a, b) {
      OpenLayers.Layer.prototype.initialize.apply(this, arguments);
      this.markers = [];
  },
  destroy: function () {
      this.clearMarkers();
      this.markers = null;
      OpenLayers.Layer.prototype.destroy.apply(this, arguments);
  },
  setOpacity: function (a) {
      if (a != this.opacity) {
          this.opacity = a;
          a = 0;
          for (var b = this.markers.length; a < b; a++) this.markers[a].setOpacity(this.opacity);
      }
  },
  moveTo: function (a, b, c) {
      OpenLayers.Layer.prototype.moveTo.apply(this, arguments);
      if (b || !this.drawn) {
          for (var d = 0, e = this.markers.length; d < e; d++) this.drawMarker(this.markers[d]);
          this.drawn = !0;
      }
  },
  addMarker: function (a) {
      this.markers.push(a);
      1 > this.opacity && a.setOpacity(this.opacity);
      this.map && this.map.getExtent() && ((a.map = this.map), this.drawMarker(a));
  },
  removeMarker: function (a) {
      this.markers && this.markers.length && (OpenLayers.Util.removeItem(this.markers, a), a.erase());
  },
  clearMarkers: function () {
      if (null != this.markers) for (; 0 < this.markers.length; ) this.removeMarker(this.markers[0]);
  },
  drawMarker: function (a) {
      var b = this.map.getLayerPxFromLonLat(a.lonlat);
      null == b ? a.display(!1) : a.isDrawn() ? a.icon && a.icon.moveTo(b) : ((a = a.draw(b)), this.div.appendChild(a));
  },
  getDataExtent: function () {
      var a = null;
      if (this.markers && 0 < this.markers.length) for (var a = new OpenLayers.Bounds(), b = 0, c = this.markers.length; b < c; b++) a.extend(this.markers[b].lonlat);
      return a;
  },
  CLASS_NAME: "OpenLayers.Layer.Markers",
});
OpenLayers.Control.Pan = OpenLayers.Class(OpenLayers.Control.Button, {
  slideFactor: 50,
  slideRatio: null,
  direction: null,
  initialize: function (a, b) {
      this.direction = a;
      this.CLASS_NAME += this.direction;
      OpenLayers.Control.prototype.initialize.apply(this, [b]);
  },
  trigger: function () {
      if (this.map) {
          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) {
  a = OpenLayers.Util.applyDefaults(a, OpenLayers.Format.CSWGetDomain.DEFAULTS);
  var 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 } });
              a.PropertyName || this.PropertyName
                  ? this.writeNode("csw:PropertyName", a.PropertyName || this.PropertyName, b)
                  : (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.Control.Snapping = OpenLayers.Class(OpenLayers.Control, {
  DEFAULTS: { tolerance: 10, node: !0, edge: !0, vertex: !0 },
  greedy: !0,
  precedence: ["node", "vertex", "edge"],
  resolution: null,
  geoToleranceCache: null,
  layer: null,
  feature: null,
  point: null,
  initialize: function (a) {
      OpenLayers.Control.prototype.initialize.apply(this, [a]);
      this.options = a || {};
      this.options.layer && this.setLayer(this.options.layer);
      a = OpenLayers.Util.extend({}, this.options.defaults);
      this.defaults = OpenLayers.Util.applyDefaults(a, this.DEFAULTS);
      this.setTargets(this.options.targets);
      0 === this.targets.length && this.layer && this.addTargetLayer(this.layer);
      this.geoToleranceCache = {};
  },
  setLayer: function (a) {
      this.active ? (this.deactivate(), (this.layer = a), this.activate()) : (this.layer = a);
  },
  setTargets: function (a) {
      this.targets = [];
      if (a && a.length) for (var b, c = 0, d = a.length; c < d; ++c) (b = a[c]), b instanceof OpenLayers.Layer.Vector ? this.addTargetLayer(b) : this.addTarget(b);
  },
  addTargetLayer: function (a) {
      this.addTarget({ layer: a });
  },
  addTarget: function (a) {
      a = OpenLayers.Util.applyDefaults(a, this.defaults);
      a.nodeTolerance = a.nodeTolerance || a.tolerance;
      a.vertexTolerance = a.vertexTolerance || a.tolerance;
      a.edgeTolerance = a.edgeTolerance || a.tolerance;
      this.targets.push(a);
  },
  removeTargetLayer: function (a) {
      for (var b, c = this.targets.length - 1; 0 <= c; --c) (b = this.targets[c]), b.layer === a && this.removeTarget(b);
  },
  removeTarget: function (a) {
      return OpenLayers.Util.removeItem(this.targets, a);
  },
  activate: function () {
      var a = OpenLayers.Control.prototype.activate.call(this);
      if (a && this.layer && this.layer.events) this.layer.events.on({ sketchstarted: this.onSketchModified, sketchmodified: this.onSketchModified, vertexmodified: this.onVertexModified, scope: this });
      return a;
  },
  deactivate: function () {
      var a = OpenLayers.Control.prototype.deactivate.call(this);
      a && this.layer && this.layer.events && this.layer.events.un({ sketchstarted: this.onSketchModified, sketchmodified: this.onSketchModified, vertexmodified: this.onVertexModified, scope: this });
      this.point = this.feature = null;
      return a;
  },
  onSketchModified: function (a) {
      this.feature = a.feature;
      this.considerSnapping(a.vertex, a.vertex);
  },
  onVertexModified: function (a) {
      this.feature = a.feature;
      var b = this.layer.map.getLonLatFromViewPortPx(a.pixel);
      this.considerSnapping(a.vertex, new OpenLayers.Geometry.Point(b.lon, b.lat));
  },
  considerSnapping: function (a, b) {
      for (var c = { rank: Number.POSITIVE_INFINITY, dist: Number.POSITIVE_INFINITY, x: null, y: null }, d = !1, e, f, g = 0, h = this.targets.length; g < h; ++g)
          if (((f = this.targets[g]), (e = this.testTarget(f, b))))
              if (this.greedy) {
                  c = e;
                  c.target = f;
                  d = !0;
                  break;
              } else if (e.rank < c.rank || (e.rank === c.rank && e.dist < c.dist)) (c = e), (c.target = f), (d = !0);
      d &&
          (!1 !== this.events.triggerEvent("beforesnap", { point: a, x: c.x, y: c.y, distance: c.dist, layer: c.target.layer, snapType: this.precedence[c.rank] })
              ? ((a.x = c.x), (a.y = c.y), (this.point = a), this.events.triggerEvent("snap", { point: a, snapType: this.precedence[c.rank], layer: c.target.layer, distance: c.dist }))
              : (d = !1));
      this.point && !d && ((a.x = b.x), (a.y = b.y), (this.point = null), this.events.triggerEvent("unsnap", { point: a }));
  },
  testTarget: function (a, b) {
      var c = this.layer.map.getResolution();
      if (("minResolution" in a && c < a.minResolution) || ("maxResolution" in a && c >= a.maxResolution)) return null;
      for (
          var c = { node: this.getGeoTolerance(a.nodeTolerance, c), vertex: this.getGeoTolerance(a.vertexTolerance, c), edge: this.getGeoTolerance(a.edgeTolerance, c) },
              d = Math.max(c.node, c.vertex, c.edge),
              e = { rank: Number.POSITIVE_INFINITY, dist: Number.POSITIVE_INFINITY },
              f = !1,
              g = a.layer.features,
              h,
              k,
              l,
              m,
              n,
              p,
              q = this.precedence.length,
              r = new OpenLayers.LonLat(b.x, b.y),
              s = 0,
              t = g.length;
          s < t;
          ++s
      )
          if (((h = g[s]), h !== this.feature && !h._sketch && h.state !== OpenLayers.State.DELETE && (!a.filter || a.filter.evaluate(h)) && h.atPoint(r, d, d)))
              for (var u = 0, v = Math.min(e.rank + 1, q); u < v; ++u)
                  if (((k = this.precedence[u]), a[k]))
                      if ("edge" === k) {
                          if (((l = h.geometry.distanceTo(b, { details: !0 })), (n = l.distance), n <= c[k] && n < e.dist)) {
                              e = { rank: u, dist: n, x: l.x0, y: l.y0 };
                              f = !0;
                              break;
                          }
                      } else {
                          l = h.geometry.getVertices("node" === k);
                          p = !1;
                          for (var w = 0, x = l.length; w < x; ++w) (m = l[w]), (n = m.distanceTo(b)), n <= c[k] && (u < e.rank || (u === e.rank && n < e.dist)) && ((e = { rank: u, dist: n, x: m.x, y: m.y }), (p = f = !0));
                          if (p) break;
                      }
      return f ? e : null;
  },
  getGeoTolerance: function (a, b) {
      b !== this.resolution && ((this.resolution = b), (this.geoToleranceCache = {}));
      var c = this.geoToleranceCache[a];
      void 0 === c && ((c = a * b), (this.geoToleranceCache[a] = c));
      return c;
  },
  destroy: function () {
      this.active && this.deactivate();
      delete this.layer;
      delete this.targets;
      OpenLayers.Control.prototype.destroy.call(this);
  },
  CLASS_NAME: "OpenLayers.Control.Snapping",
});
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.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 k = 32 * h,
                          l = this.getElementsByTagNameNS(e, "*", "Icon")[0];
                      if (l) {
                          var m = this.parseProperty(l, "*", "href");
                          if (m) {
                              var n = this.parseProperty(l, "*", "w"),
                                  p = this.parseProperty(l, "*", "h");
                              !OpenLayers.String.startsWith(m, "http://maps.google.com/mapfiles/kml") || n || p || ((p = n = 64), (h /= 2));
                              n = n || p;
                              p = p || n;
                              n && (d = parseInt(n) * h);
                              p && (k = parseInt(p) * h);
                              if ((p = m.match(this.regExes.kmlIconPalette)))
                                  (n = p[1]),
                                      (p = p[2]),
                                      (m = this.parseProperty(l, "*", "x")),
                                      (l = this.parseProperty(l, "*", "y")),
                                      (m = "http://maps.google.com/mapfiles/kml/pal" + n + "/icon" + (8 * (l ? 7 - l / 32 : 7) + (m ? m / 32 : 0)) + p);
                              b.graphicOpacity = 1;
                              b.externalGraphic = m;
                          }
                      }
                      if ((e = this.getElementsByTagNameNS(e, "*", "hotSpot")[0]))
                          (m = parseFloat(e.getAttribute("x"))),
                              (l = parseFloat(e.getAttribute("y"))),
                              (n = e.getAttribute("xunits")),
                              "pixels" == n ? (b.graphicXOffset = -m * h) : "insetPixels" == n ? (b.graphicXOffset = -d + m * h) : "fraction" == n && (b.graphicXOffset = -d * m),
                              (e = e.getAttribute("yunits")),
                              "pixels" == e ? (b.graphicYOffset = -k + l * h + 1) : "insetPixels" == e ? (b.graphicYOffset = -(l * h) + 1) : "fraction" == e && (b.graphicYOffset = -k * (1 - l) + 1);
                      b.graphicWidth = d;
                      b.graphicHeight = k;
                      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);
      (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 k = f[g],
                  l = this.parseProperty(k, "*", "key");
              (k = this.parseProperty(k, "*", "styleUrl")) && "normal" == l && (this.styles[(b.styleBaseUrl || "") + "#" + e] = this.styles[(b.styleBaseUrl || "") + k]);
          }
  },
  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];
                  h && (h = this.parseStyle(h)) && (g.style = OpenLayers.Util.extend(g.style, h));
              }
              this.extractTracks
                  ? (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))
                  : 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, e = 0, f = c.whens.length; e < f; ++e) {
                  h = b.feature.clone();
                  h.fid = b.feature.fid || b.feature.id;
                  d = c.points[e];
                  h.geometry = d;
                  "z" in d && (h.attributes.altitude = d.z);
                  this.internalProjection && this.externalProjection && h.geometry.transform(this.externalProjection, this.internalProjection);
                  if (this.trackAttributes) for (var k = 0, l = this.trackAttributes.length; k < l; ++k) (d = this.trackAttributes[k]), (h.attributes[d] = c.attributes[d][e]);
                  h.attributes.when = c.whens[e];
                  h.attributes.trackId = b.feature.id;
                  g && ((d = c.angles[e]), (h.attributes.heading = parseFloat(d[0])), (h.attributes.tilt = parseFloat(d[1])), (h.attributes.roll = parseFloat(d[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, k = 0; k < e; ++k)
                  if (((g = d[k].split(",")), (h = g.length), 1 < h)) 2 == g.length && (g[2] = null), (f[k] = new OpenLayers.Geometry.Point(g[0], g[1], g[2]));
                  else throw "Bad LineString point coordinates: " + d[k];
              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) {
          a = this.getElementsByTagNameNS(a, this.internalns, "LinearRing");
          var 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 = a.prefix ? a.nodeName.split(":")[1] : a.nodeName), (b = this.parseGeometry[b.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]));
      var d, e, f;
      a = a.childNodes;
      for (var 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 = {},
              k = e.getElementsByTagName("value");
          k.length && (h.value = this.getChildValue(k[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"),
          c = a.style && a.style.label ? a.style.label : a.id;
      b.appendChild(this.createTextNode(a.attributes.name || c));
      var d = this.createElementNS(this.kmlns, "description");
      d.appendChild(this.createTextNode(a.attributes.description || this.placemarksDesc));
      c = this.createElementNS(this.kmlns, "Placemark");
      null != a.fid && c.setAttribute("id", a.fid);
      c.appendChild(b);
      c.appendChild(d);
      b = this.buildGeometryNode(a.geometry);
      c.appendChild(b);
      a.attributes && (a = this.buildExtendedData(a.attributes)) && c.appendChild(a);
      return c;
  },
  buildGeometryNode: function (a) {
      var b = a.CLASS_NAME,
          b = b.substring(b.lastIndexOf(".") + 1),
          b = this.buildGeometry[b.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) {
          var b = this.createElementNS(this.kmlns, "Polygon");
          a = a.components;
          for (var 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.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, b) {
              var c = {};
              c.bbox = [parseFloat(a.getAttribute("minx")), parseFloat(a.getAttribute("miny")), parseFloat(a.getAttribute("maxx")), parseFloat(a.getAttribute("maxy"))];
              var d = { x: parseFloat(a.getAttribute("resx")), y: parseFloat(a.getAttribute("resy")) };
              (isNaN(d.x) && isNaN(d.y)) || (c.res = d);
              return c;
          },
          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"),
                  k = a.getAttribute("fixedWidth"),
                  l = a.getAttribute("fixedHeight"),
                  m = c || {},
                  n = OpenLayers.Util.extend;
              c = {
                  nestedLayers: [],
                  styles: c ? [].concat(c.styles) : [],
                  srs: c ? n({}, m.srs) : {},
                  metadataURLs: [],
                  bbox: c ? n({}, m.bbox) : {},
                  llbbox: m.llbbox,
                  dimensions: c ? n({}, m.dimensions) : {},
                  authorityURLs: c ? n({}, m.authorityURLs) : {},
                  identifiers: {},
                  keywords: [],
                  queryable: f && "" !== f ? "1" === f || "true" === f : m.queryable || !1,
                  cascaded: null !== g ? parseInt(g) : m.cascaded || 0,
                  opaque: e ? "1" === e || "true" === e : m.opaque || !1,
                  noSubsets: null !== h ? "1" === h || "true" === h : m.noSubsets || !1,
                  fixedWidth: null != k ? parseInt(k) : m.fixedWidth || 0,
                  fixedHeight: null != l ? parseInt(l) : m.fixedHeight || 0,
                  minScale: m.minScale,
                  maxScale: m.maxScale,
                  attribution: m.attribution,
              };
              b.nestedLayers.push(c);
              c.capability = d;
              this.readChildNodes(a, c);
              delete c.capability;
              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_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;
                  0 != c && (b.maxScale = parseFloat(((c / e) * f * OpenLayers.DOTS_PER_INCH).toPrecision(13)));
                  d != Number.POSITIVE_INFINITY && (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.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.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;
      (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;
          (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.Handler.Feature = OpenLayers.Class(OpenLayers.Handler, {
  EVENTMAP: {
      click: { in: "click", out: "clickout" },
      mousemove: { in: "over", out: "out" },
      dblclick: { in: "dblclick", out: null },
      mousedown: { in: null, out: null },
      mouseup: { in: null, out: null },
      touchstart: { in: "click", out: "clickout" },
  },
  feature: null,
  lastFeature: null,
  down: null,
  up: null,
  clickTolerance: 4,
  geometryTypes: null,
  stopClick: !0,
  stopDown: !0,
  stopUp: !1,
  initialize: function (a, b, c, d) {
      OpenLayers.Handler.prototype.initialize.apply(this, [a, c, d]);
      this.layer = b;
  },
  touchstart: function (a) {
      this.startTouch();
      return OpenLayers.Event.isMultiTouch(a) ? !0 : this.mousedown(a);
  },
  touchmove: function (a) {
      OpenLayers.Event.preventDefault(a);
  },
  mousedown: function (a) {
      if (OpenLayers.Event.isLeftClick(a) || OpenLayers.Event.isSingleTouch(a)) this.down = a.xy;
      return this.handle(a) ? !this.stopDown : !0;
  },
  mouseup: function (a) {
      this.up = a.xy;
      return this.handle(a) ? !this.stopUp : !0;
  },
  click: function (a) {
      return this.handle(a) ? !this.stopClick : !0;
  },
  mousemove: function (a) {
      if (!this.callbacks.over && !this.callbacks.out) return !0;
      this.handle(a);
      return !0;
  },
  dblclick: function (a) {
      return !this.handle(a);
  },
  geometryTypeMatches: function (a) {
      return null == this.geometryTypes || -1 < OpenLayers.Util.indexOf(this.geometryTypes, a.geometry.CLASS_NAME);
  },
  handle: function (a) {
      this.feature && !this.feature.layer && (this.feature = null);
      var b = a.type,
          c = !1,
          d = !!this.feature,
          e = "click" == b || "dblclick" == b || "touchstart" == b;
      (this.feature = this.layer.getFeatureFromEvent(a)) && !this.feature.layer && (this.feature = null);
      this.lastFeature && !this.lastFeature.layer && (this.lastFeature = null);
      this.feature
          ? ("touchstart" === b && OpenLayers.Event.preventDefault(a),
            (a = this.feature != this.lastFeature),
            this.geometryTypeMatches(this.feature)
                ? (d && a ? (this.lastFeature && this.triggerCallback(b, "out", [this.lastFeature]), this.triggerCallback(b, "in", [this.feature])) : (d && !e) || this.triggerCallback(b, "in", [this.feature]),
                  (this.lastFeature = this.feature),
                  (c = !0))
                : (this.lastFeature && ((d && a) || e) && this.triggerCallback(b, "out", [this.lastFeature]), (this.feature = null)))
          : this.lastFeature && (d || e) && this.triggerCallback(b, "out", [this.lastFeature]);
      return c;
  },
  triggerCallback: function (a, b, c) {
      if ((b = this.EVENTMAP[a][b]))
          "click" == a && this.up && this.down ? (Math.sqrt(Math.pow(this.up.x - this.down.x, 2) + Math.pow(this.up.y - this.down.y, 2)) <= this.clickTolerance && this.callback(b, c), (this.up = this.down = null)) : this.callback(b, c);
  },
  activate: function () {
      var a = !1;
      OpenLayers.Handler.prototype.activate.apply(this, arguments) && (this.moveLayerToTop(), this.map.events.on({ removelayer: this.handleMapEvents, changelayer: this.handleMapEvents, scope: this }), (a = !0));
      return a;
  },
  deactivate: function () {
      var a = !1;
      OpenLayers.Handler.prototype.deactivate.apply(this, arguments) &&
          (this.moveLayerBack(), (this.up = this.down = this.lastFeature = this.feature = null), this.map.events.un({ removelayer: this.handleMapEvents, changelayer: this.handleMapEvents, scope: this }), (a = !0));
      return a;
  },
  handleMapEvents: function (a) {
      ("removelayer" != a.type && "order" != a.property) || this.moveLayerToTop();
  },
  moveLayerToTop: function () {
      var a = Math.max(this.map.Z_INDEX_BASE.Feature - 1, this.layer.getZIndex()) + 1;
      this.layer.setZIndex(a);
  },
  moveLayerBack: function () {
      var a = this.layer.getZIndex() - 1;
      a >= this.map.Z_INDEX_BASE.Feature ? this.layer.setZIndex(a) : this.map.setLayerZIndex(this.layer, this.map.getLayerIndex(this.layer));
  },
  CLASS_NAME: "OpenLayers.Handler.Feature",
});
OpenLayers.Layer.Vector.RootContainer = OpenLayers.Class(OpenLayers.Layer.Vector, {
  displayInLayerSwitcher: !1,
  layers: null,
  display: function () {},
  getFeatureFromEvent: function (a) {
      for (var b = this.layers, c, d = 0; d < b.length; d++) if ((c = b[d].getFeatureFromEvent(a))) return c;
  },
  setMap: function (a) {
      OpenLayers.Layer.Vector.prototype.setMap.apply(this, arguments);
      this.collectRoots();
      a.events.register("changelayer", this, this.handleChangeLayer);
  },
  removeMap: function (a) {
      a.events.unregister("changelayer", this, this.handleChangeLayer);
      this.resetRoots();
      OpenLayers.Layer.Vector.prototype.removeMap.apply(this, arguments);
  },
  collectRoots: function () {
      for (var a, b = 0; b < this.map.layers.length; ++b) (a = this.map.layers[b]), -1 != OpenLayers.Util.indexOf(this.layers, a) && a.renderer.moveRoot(this.renderer);
  },
  resetRoots: function () {
      for (var a, b = 0; b < this.layers.length; ++b) (a = this.layers[b]), this.renderer && a.renderer.getRenderLayerId() == this.id && this.renderer.moveRoot(a.renderer);
  },
  handleChangeLayer: function (a) {
      var b = a.layer;
      "order" == a.property && -1 != OpenLayers.Util.indexOf(this.layers, b) && (this.resetRoots(), this.collectRoots());
  },
  CLASS_NAME: "OpenLayers.Layer.Vector.RootContainer",
});
OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
  multipleKey: null,
  toggleKey: null,
  multiple: !1,
  clickout: !0,
  toggle: !1,
  hover: !1,
  highlightOnly: !1,
  box: !1,
  onBeforeSelect: function () {},
  onSelect: function () {},
  onUnselect: function () {},
  scope: null,
  geometryTypes: null,
  layer: null,
  layers: null,
  callbacks: null,
  selectStyle: null,
  renderIntent: "select",
  handlers: null,
  initialize: function (a, b) {
      OpenLayers.Control.prototype.initialize.apply(this, [b]);
      null === this.scope && (this.scope = this);
      this.initLayer(a);
      var c = { click: this.clickFeature, clickout: this.clickoutFeature };
      this.hover && ((c.over = this.overFeature), (c.out = this.outFeature));
      this.callbacks = OpenLayers.Util.extend(c, this.callbacks);
      this.handlers = { feature: new OpenLayers.Handler.Feature(this, this.layer, this.callbacks, { geometryTypes: this.geometryTypes }) };
      this.box && (this.handlers.box = new OpenLayers.Handler.Box(this, { done: this.selectBox }, { boxDivClassName: "olHandlerBoxSelectFeature" }));
  },
  initLayer: function (a) {
      OpenLayers.Util.isArray(a) ? ((this.layers = a), (this.layer = new OpenLayers.Layer.Vector.RootContainer(this.id + "_container", { layers: a }))) : (this.layer = a);
  },
  destroy: function () {
      this.active && this.layers && this.map.removeLayer(this.layer);
      OpenLayers.Control.prototype.destroy.apply(this, arguments);
      this.layers && this.layer.destroy();
  },
  activate: function () {
      this.active || (this.layers && this.map.addLayer(this.layer), this.handlers.feature.activate(), this.box && this.handlers.box && this.handlers.box.activate());
      return OpenLayers.Control.prototype.activate.apply(this, arguments);
  },
  deactivate: function () {
      this.active && (this.handlers.feature.deactivate(), this.handlers.box && this.handlers.box.deactivate(), this.layers && this.map.removeLayer(this.layer));
      return OpenLayers.Control.prototype.deactivate.apply(this, arguments);
  },
  unselectAll: function (a) {
      var b = this.layers || [this.layer],
          c,
          d,
          e,
          f;
      for (e = 0; e < b.length; ++e) if (((c = b[e]), (f = 0), null != c.selectedFeatures)) for (; c.selectedFeatures.length > f; ) (d = c.selectedFeatures[f]), a && a.except == d ? ++f : this.unselect(d);
  },
  clickFeature: function (a) {
      this.hover ||
          (-1 < OpenLayers.Util.indexOf(a.layer.selectedFeatures, a)
              ? this.toggleSelect()
                  ? this.unselect(a)
                  : this.multipleSelect() || this.unselectAll({ except: a })
              : (this.multipleSelect() || this.unselectAll({ except: a }), this.select(a)));
  },
  multipleSelect: function () {
      return this.multiple || (this.handlers.feature.evt && this.handlers.feature.evt[this.multipleKey]);
  },
  toggleSelect: function () {
      return this.toggle || (this.handlers.feature.evt && this.handlers.feature.evt[this.toggleKey]);
  },
  clickoutFeature: function (a) {
      !this.hover && this.clickout && this.unselectAll();
  },
  overFeature: function (a) {
      var b = a.layer;
      this.hover && (this.highlightOnly ? this.highlight(a) : -1 == OpenLayers.Util.indexOf(b.selectedFeatures, a) && this.select(a));
  },
  outFeature: function (a) {
      if (this.hover)
          if (this.highlightOnly) {
              if (a._lastHighlighter == this.id)
                  if (a._prevHighlighter && a._prevHighlighter != this.id) {
                      delete a._lastHighlighter;
                      var b = this.map.getControl(a._prevHighlighter);
                      b && b.highlight(a);
                  } else this.unhighlight(a);
          } else this.unselect(a);
  },
  highlight: function (a) {
      var b = a.layer;
      !1 !== this.events.triggerEvent("beforefeaturehighlighted", { feature: a }) &&
          ((a._prevHighlighter = a._lastHighlighter), (a._lastHighlighter = this.id), b.drawFeature(a, this.selectStyle || this.renderIntent), this.events.triggerEvent("featurehighlighted", { feature: a }));
  },
  unhighlight: function (a) {
      var b = a.layer;
      void 0 == a._prevHighlighter ? delete a._lastHighlighter : (a._prevHighlighter != this.id && (a._lastHighlighter = a._prevHighlighter), delete a._prevHighlighter);
      b.drawFeature(a, a.style || a.layer.style || "default");
      this.events.triggerEvent("featureunhighlighted", { feature: a });
  },
  select: function (a) {
      var b = this.onBeforeSelect.call(this.scope, a),
          c = a.layer;
      !1 !== b &&
          ((b = c.events.triggerEvent("beforefeatureselected", { feature: a })),
          !1 !== b &&
              (c.selectedFeatures.push(a),
              this.highlight(a),
              this.handlers.feature.lastFeature || (this.handlers.feature.lastFeature = c.selectedFeatures[0]),
              c.events.triggerEvent("featureselected", { feature: a }),
              this.onSelect.call(this.scope, a)));
  },
  unselect: function (a) {
      var b = a.layer;
      this.unhighlight(a);
      OpenLayers.Util.removeItem(b.selectedFeatures, a);
      b.events.triggerEvent("featureunselected", { feature: a });
      this.onUnselect.call(this.scope, a);
  },
  selectBox: function (a) {
      if (a instanceof OpenLayers.Bounds) {
          var 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);
          this.multipleSelect() || this.unselectAll();
          a = this.multiple;
          this.multiple = !0;
          var c = this.layers || [this.layer];
          this.events.triggerEvent("boxselectionstart", { layers: c });
          for (var d, e = 0; e < c.length; ++e) {
              d = c[e];
              for (var f = 0, g = d.features.length; f < g; ++f) {
                  var h = d.features[f];
                  h.getVisibility() &&
                      (null == this.geometryTypes || -1 < OpenLayers.Util.indexOf(this.geometryTypes, h.geometry.CLASS_NAME)) &&
                      b.toGeometry().intersects(h.geometry) &&
                      -1 == OpenLayers.Util.indexOf(d.selectedFeatures, h) &&
                      this.select(h);
              }
          }
          this.multiple = a;
          this.events.triggerEvent("boxselectionend", { layers: c });
      }
  },
  setMap: function (a) {
      this.handlers.feature.setMap(a);
      this.box && this.handlers.box.setMap(a);
      OpenLayers.Control.prototype.setMap.apply(this, arguments);
  },
  setLayer: function (a) {
      var b = this.active;
      this.unselectAll();
      this.deactivate();
      this.layers && (this.layer.destroy(), (this.layers = null));
      this.initLayer(a);
      this.handlers.feature.layer = this.layer;
      b && this.activate();
  },
  CLASS_NAME: "OpenLayers.Control.SelectFeature",
});
OpenLayers.Handler.Point = OpenLayers.Class(OpenLayers.Handler, {
  point: null,
  layer: null,
  multi: !1,
  citeCompliant: !1,
  mouseDown: !1,
  stoppedDown: null,
  lastDown: null,
  lastUp: null,
  persist: !1,
  stopDown: !1,
  stopUp: !1,
  layerOptions: null,
  pixelTolerance: 5,
  lastTouchPx: null,
  initialize: function (a, b, c) {
      (c && c.layerOptions && c.layerOptions.styleMap) || (this.style = OpenLayers.Util.extend(OpenLayers.Feature.Vector.style["default"], {}));
      OpenLayers.Handler.prototype.initialize.apply(this, arguments);
  },
  activate: function () {
      if (!OpenLayers.Handler.prototype.activate.apply(this, arguments)) return !1;
      var a = OpenLayers.Util.extend({ displayInLayerSwitcher: !1, calculateInRange: OpenLayers.Function.True, wrapDateLine: this.citeCompliant }, this.layerOptions);
      this.layer = new OpenLayers.Layer.Vector(this.CLASS_NAME, a);
      this.map.addLayer(this.layer);
      return !0;
  },
  createFeature: function (a) {
      a = this.layer.getLonLatFromViewPortPx(a);
      a = new OpenLayers.Geometry.Point(a.lon, a.lat);
      this.point = new OpenLayers.Feature.Vector(a);
      this.callback("create", [this.point.geometry, this.point]);
      this.point.geometry.clearBounds();
      this.layer.addFeatures([this.point], { silent: !0 });
  },
  deactivate: function () {
      if (!OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) return !1;
      this.cancel();
      null != this.layer.map && (this.destroyFeature(!0), this.layer.destroy(!1));
      this.layer = null;
      return !0;
  },
  destroyFeature: function (a) {
      !this.layer || (!a && this.persist) || this.layer.destroyFeatures();
      this.point = null;
  },
  destroyPersistedFeature: function () {
      var a = this.layer;
      a && 1 < a.features.length && this.layer.features[0].destroy();
  },
  finalize: function (a) {
      this.mouseDown = !1;
      this.lastTouchPx = this.lastUp = this.lastDown = null;
      this.callback(a ? "cancel" : "done", [this.geometryClone()]);
      this.destroyFeature(a);
  },
  cancel: function () {
      this.finalize(!0);
  },
  click: function (a) {
      OpenLayers.Event.stop(a);
      return !1;
  },
  dblclick: function (a) {
      OpenLayers.Event.stop(a);
      return !1;
  },
  modifyFeature: function (a) {
      this.point || this.createFeature(a);
      a = this.layer.getLonLatFromViewPortPx(a);
      this.point.geometry.x = a.lon;
      this.point.geometry.y = a.lat;
      this.callback("modify", [this.point.geometry, this.point, !1]);
      this.point.geometry.clearBounds();
      this.drawFeature();
  },
  drawFeature: function () {
      this.layer.drawFeature(this.point, this.style);
  },
  getGeometry: function () {
      var a = this.point && this.point.geometry;
      a && this.multi && (a = new OpenLayers.Geometry.MultiPoint([a]));
      return a;
  },
  geometryClone: function () {
      var a = this.getGeometry();
      return a && a.clone();
  },
  mousedown: function (a) {
      return this.down(a);
  },
  touchstart: function (a) {
      this.startTouch();
      this.lastTouchPx = a.xy;
      return this.down(a);
  },
  mousemove: function (a) {
      return this.move(a);
  },
  touchmove: function (a) {
      this.lastTouchPx = a.xy;
      return this.move(a);
  },
  mouseup: function (a) {
      return this.up(a);
  },
  touchend: function (a) {
      a.xy = this.lastTouchPx;
      return this.up(a);
  },
  down: function (a) {
      this.mouseDown = !0;
      this.lastDown = a.xy;
      this.touch || this.modifyFeature(a.xy);
      this.stoppedDown = this.stopDown;
      return !this.stopDown;
  },
  move: function (a) {
      this.touch || (this.mouseDown && !this.stoppedDown) || this.modifyFeature(a.xy);
      return !0;
  },
  up: function (a) {
      this.mouseDown = !1;
      this.stoppedDown = this.stopDown;
      if (!this.checkModifiers(a) || (this.lastUp && this.lastUp.equals(a.xy)) || !this.lastDown || !this.passesTolerance(this.lastDown, a.xy, this.pixelTolerance)) return !0;
      this.touch && this.modifyFeature(a.xy);
      this.persist && this.destroyPersistedFeature();
      this.lastUp = a.xy;
      this.finalize();
      return !this.stopUp;
  },
  mouseout: function (a) {
      OpenLayers.Util.mouseLeft(a, this.map.viewPortDiv) && ((this.stoppedDown = this.stopDown), (this.mouseDown = !1));
  },
  passesTolerance: function (a, b, c) {
      var d = !0;
      null != c && a && b && a.distanceTo(b) > c && (d = !1);
      return d;
  },
  CLASS_NAME: "OpenLayers.Handler.Point",
});
OpenLayers.Handler.Path = OpenLayers.Class(OpenLayers.Handler.Point, {
  line: null,
  maxVertices: null,
  doubleTouchTolerance: 20,
  freehand: !1,
  freehandToggle: "shiftKey",
  timerId: null,
  redoStack: null,
  createFeature: function (a) {
      a = this.layer.getLonLatFromViewPortPx(a);
      a = new OpenLayers.Geometry.Point(a.lon, a.lat);
      this.point = new OpenLayers.Feature.Vector(a);
      this.line = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString([this.point.geometry]));
      this.callback("create", [this.point.geometry, this.getSketch()]);
      this.point.geometry.clearBounds();
      this.layer.addFeatures([this.line, this.point], { silent: !0 });
  },
  destroyFeature: function (a) {
      OpenLayers.Handler.Point.prototype.destroyFeature.call(this, a);
      this.line = null;
  },
  destroyPersistedFeature: function () {
      var a = this.layer;
      a && 2 < a.features.length && this.layer.features[0].destroy();
  },
  removePoint: function () {
      this.point && this.layer.removeFeatures([this.point]);
  },
  addPoint: function (a) {
      this.layer.removeFeatures([this.point]);
      a = this.layer.getLonLatFromViewPortPx(a);
      this.point = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(a.lon, a.lat));
      this.line.geometry.addComponent(this.point.geometry, this.line.geometry.components.length);
      this.layer.addFeatures([this.point]);
      this.callback("point", [this.point.geometry, this.getGeometry()]);
      this.callback("modify", [this.point.geometry, this.getSketch()]);
      this.drawFeature();
      delete this.redoStack;
  },
  insertXY: function (a, b) {
      this.line.geometry.addComponent(new OpenLayers.Geometry.Point(a, b), this.getCurrentPointIndex());
      this.drawFeature();
      delete this.redoStack;
  },
  insertDeltaXY: function (a, b) {
      var c = this.getCurrentPointIndex() - 1,
          c = this.line.geometry.components[c];
      !c || isNaN(c.x) || isNaN(c.y) || this.insertXY(c.x + a, c.y + b);
  },
  insertDirectionLength: function (a, b) {
      a *= Math.PI / 180;
      var c = b * Math.cos(a),
          d = b * Math.sin(a);
      this.insertDeltaXY(c, d);
  },
  insertDeflectionLength: function (a, b) {
      var c = this.getCurrentPointIndex() - 1;
      if (0 < c) {
          var d = this.line.geometry.components[c],
              c = this.line.geometry.components[c - 1],
              d = Math.atan2(d.y - c.y, d.x - c.x);
          this.insertDirectionLength((180 * d) / Math.PI + a, b);
      }
  },
  getCurrentPointIndex: function () {
      return this.line.geometry.components.length - 1;
  },
  undo: function () {
      var a = this.line.geometry,
          b = a.components,
          c = this.getCurrentPointIndex() - 1,
          d = b[c],
          e = a.removeComponent(d);
      e && (this.touch && 0 < c && ((b = a.components), (a = b[c - 1]), (c = this.getCurrentPointIndex()), (b = b[c]), (b.x = a.x), (b.y = a.y)), this.redoStack || (this.redoStack = []), this.redoStack.push(d), this.drawFeature());
      return e;
  },
  redo: function () {
      var a = this.redoStack && this.redoStack.pop();
      a && (this.line.geometry.addComponent(a, this.getCurrentPointIndex()), this.drawFeature());
      return !!a;
  },
  freehandMode: function (a) {
      return this.freehandToggle && a[this.freehandToggle] ? !this.freehand : this.freehand;
  },
  modifyFeature: function (a, b) {
      this.line || this.createFeature(a);
      var c = this.layer.getLonLatFromViewPortPx(a);
      this.point.geometry.x = c.lon;
      this.point.geometry.y = c.lat;
      this.callback("modify", [this.point.geometry, this.getSketch(), b]);
      this.point.geometry.clearBounds();
      this.drawFeature();
  },
  drawFeature: function () {
      this.layer.drawFeature(this.line, this.style);
      this.layer.drawFeature(this.point, this.style);
  },
  getSketch: function () {
      return this.line;
  },
  getGeometry: function () {
      var a = this.line && this.line.geometry;
      a && this.multi && (a = new OpenLayers.Geometry.MultiLineString([a]));
      return a;
  },
  touchstart: function (a) {
      if (this.timerId && this.passesTolerance(this.lastTouchPx, a.xy, this.doubleTouchTolerance)) return this.finishGeometry(), window.clearTimeout(this.timerId), (this.timerId = null), !1;
      this.timerId && (window.clearTimeout(this.timerId), (this.timerId = null));
      this.timerId = window.setTimeout(
          OpenLayers.Function.bind(function () {
              this.timerId = null;
          }, this),
          300
      );
      return OpenLayers.Handler.Point.prototype.touchstart.call(this, a);
  },
  down: function (a) {
      var b = this.stopDown;
      this.freehandMode(a) && ((b = !0), this.touch && (this.modifyFeature(a.xy, !!this.lastUp), OpenLayers.Event.stop(a)));
      this.touch || (this.lastDown && this.passesTolerance(this.lastDown, a.xy, this.pixelTolerance)) || this.modifyFeature(a.xy, !!this.lastUp);
      this.mouseDown = !0;
      this.lastDown = a.xy;
      this.stoppedDown = b;
      return !b;
  },
  move: function (a) {
      if (this.stoppedDown && this.freehandMode(a))
          return this.persist && this.destroyPersistedFeature(), this.maxVertices && this.line && this.line.geometry.components.length === this.maxVertices ? (this.removePoint(), this.finalize()) : this.addPoint(a.xy), !1;
      this.touch || (this.mouseDown && !this.stoppedDown) || this.modifyFeature(a.xy, !!this.lastUp);
      return !0;
  },
  up: function (a) {
      !this.mouseDown ||
          (this.lastUp && this.lastUp.equals(a.xy)) ||
          (this.stoppedDown && this.freehandMode(a)
              ? (this.persist && this.destroyPersistedFeature(), this.removePoint(), this.finalize())
              : this.passesTolerance(this.lastDown, a.xy, this.pixelTolerance) &&
                (this.touch && this.modifyFeature(a.xy),
                null == this.lastUp && this.persist && this.destroyPersistedFeature(),
                this.addPoint(a.xy),
                (this.lastUp = a.xy),
                this.line.geometry.components.length === this.maxVertices + 1 && this.finishGeometry()));
      this.stoppedDown = this.stopDown;
      this.mouseDown = !1;
      return !this.stopUp;
  },
  finishGeometry: function () {
      this.line.geometry.removeComponent(this.line.geometry.components[this.line.geometry.components.length - 1]);
      this.removePoint();
      this.finalize();
  },
  dblclick: function (a) {
      this.freehandMode(a) || this.finishGeometry();
      return !1;
  },
  CLASS_NAME: "OpenLayers.Handler.Path",
});
OpenLayers.Spherical = OpenLayers.Spherical || {};
OpenLayers.Spherical.DEFAULT_RADIUS = 6378137;
OpenLayers.Spherical.computeDistanceBetween = function (a, b, c) {
  c = c || OpenLayers.Spherical.DEFAULT_RADIUS;
  var 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.onTileLoaded, scope: this });
  },
  removeLayer: function (a) {
      a.layer.events.un({ tileloadstart: this.makeSameOrigin, tileloaded: this.onTileLoaded, 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;
      }
  },
  onTileLoaded: function (a) {
      this.active && !a.aborted && a.tile instanceof OpenLayers.Tile.Image && "data:" !== a.tile.url.substr(0, 5) && (this.cache({ tile: a.tile }), delete OpenLayers.Control.CacheWrite.urlMap[a.tile.url]);
  },
  cache: function (a) {
      if (window.localStorage) {
          a = a.tile;
          try {
              var b = a.getCanvasContext();
              b && window.localStorage.setItem("olCache_" + (OpenLayers.Control.CacheWrite.urlMap[a.url] || a.url), b.canvas.toDataURL(this.imageFormat));
          } catch (c) {
              (b = c.name || c.message) && this.quotaRegEx.test(b) ? this.events.triggerEvent("cachefull", { tile: a }) : OpenLayers.Console.error(c.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)
          for (e.format = a.formats[0].value, b = 0, 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)
          for (b = 0, 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)
          for (d = 0, 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))
          for (a = 0, 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) {
      a = a.server;
      var 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) {
          b = ["width", "height", "format"];
          for (var 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.Control.Attribution = OpenLayers.Class(OpenLayers.Control, {
  separator: ", ",
  template: "${layers}",
  destroy: function () {
      this.map.events.un({ removelayer: this.updateAttribution, addlayer: this.updateAttribution, changelayer: this.updateAttribution, changebaselayer: this.updateAttribution, scope: this });
      OpenLayers.Control.prototype.destroy.apply(this, arguments);
  },
  draw: function () {
      OpenLayers.Control.prototype.draw.apply(this, arguments);
      this.map.events.on({ changebaselayer: this.updateAttribution, changelayer: this.updateAttribution, addlayer: this.updateAttribution, removelayer: this.updateAttribution, scope: this });
      this.updateAttribution();
      return this.div;
  },
  updateAttribution: function () {
      var a = [];
      if (this.map && this.map.layers) {
          for (var b = 0, c = this.map.layers.length; b < c; b++) {
              var d = this.map.layers[b];
              d.attribution && d.getVisibility() && -1 === OpenLayers.Util.indexOf(a, d.attribution) && a.push(d.attribution);
          }
          this.div.innerHTML = OpenLayers.String.format(this.template, { layers: a.join(this.separator) });
      }
  },
  CLASS_NAME: "OpenLayers.Control.Attribution",
});
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,
                      l = (-this.deceleration * Math.pow(a, 2)) / 2 + c * a,
                      m = l * d,
                      l = l * e,
                      n,
                      p;
                  n = !1;
                  0 >= -this.deceleration * a + c && (OpenLayers.Animation.stop(this.timerId), (this.timerId = null), (n = !0));
                  a = m - g;
                  p = l - h;
                  g = m;
                  h = l;
                  b(a, p, n);
              }
          }, this)
      );
  },
  CLASS_NAME: "OpenLayers.Kinetic",
});
OpenLayers.Format.WPSExecute = OpenLayers.Class(OpenLayers.Format.XML, OpenLayers.Format.Filter.v1_1_0, {
  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 (a) {},
  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]);
  },
  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;
  },
  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 } });
              if (a.outputs) for (var c = 0, d = a.outputs.length; c < d; c++) this.writeNode("wps:Output", a.outputs[c], b);
              return b;
          },
          Output: function (a) {
              var b = this.createElementNSPlus("wps:Output", { attributes: { asReference: a.asReference, mimeType: a.mimeType, encoding: a.encoding, schema: a.schema } });
              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, encoding: a.encoding, schema: a.schema } });
              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);
              a.boundingBoxData && this.writeNode("wps:BoundingBoxData", a.boundingBoxData, 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) : a.boundingBoxData && this.writeNode("ows:BoundingBox", a.boundingBoxData, 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;
          },
          BoundingBoxData: function (a, b) {
              this.writers.ows.BoundingBox.apply(this, [a, b, "wps:BoundingBoxData"]);
          },
          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,
  },
  readers: {
      wps: {
          ExecuteResponse: function (a, b) {
              b.executeResponse = { lang: a.getAttribute("lang"), statusLocation: a.getAttribute("statusLocation"), serviceInstance: a.getAttribute("serviceInstance"), service: a.getAttribute("service") };
              this.readChildNodes(a, b.executeResponse);
          },
          Process: function (a, b) {
              b.process = {};
              this.readChildNodes(a, b.process);
          },
          Status: function (a, b) {
              b.status = { creationTime: a.getAttribute("creationTime") };
              this.readChildNodes(a, b.status);
          },
          ProcessSucceeded: function (a, b) {
              b.processSucceeded = !0;
          },
          ProcessOutputs: function (a, b) {
              b.processOutputs = [];
              this.readChildNodes(a, b.processOutputs);
          },
          Output: function (a, b) {
              var c = {};
              this.readChildNodes(a, c);
              b.push(c);
          },
          Reference: function (a, b) {
              b.reference = { href: a.getAttribute("href"), mimeType: a.getAttribute("mimeType"), encoding: a.getAttribute("encoding"), schema: a.getAttribute("schema") };
          },
          Data: function (a, b) {
              b.data = {};
              this.readChildNodes(a, b);
          },
          LiteralData: function (a, b) {
              b.literalData = { dataType: a.getAttribute("dataType"), uom: a.getAttribute("uom"), value: this.getChildValue(a) };
          },
          ComplexData: function (a, b) {
              b.complexData = { mimeType: a.getAttribute("mimeType"), schema: a.getAttribute("schema"), encoding: a.getAttribute("encoding"), value: "" };
              if (this.isSimpleContent(a)) {
                  var c;
                  for (c = a.firstChild; c; c = c.nextSibling)
                      switch (c.nodeType) {
                          case 3:
                          case 4:
                              b.complexData.value += c.nodeValue;
                      }
              } else for (c = a.firstChild; c; c = c.nextSibling) 1 == c.nodeType && (b.complexData.value = c);
          },
          BoundingBox: function (a, b) {
              b.boundingBoxData = { dimensions: a.getAttribute("dimensions"), crs: a.getAttribute("crs") };
              this.readChildNodes(a, b.boundingBoxData);
          },
      },
      ows: OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers.ows,
  },
  CLASS_NAME: "OpenLayers.Format.WPSExecute",
});
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;
      (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()));
      b = new OpenLayers.Format.GeoRSS(a).read(b);
      a = 0;
      for (var 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.",
                  k = 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 l = '<div class="olLayerGeoRSSClose">[x]</div>',
                      l = l + '<div class="olLayerGeoRSSTitle">';
                  k && (l += '<a class="link" href="' + k + '" target="_blank">');
                  l += g;
                  k && (l += "</a>");
                  l += "</div>";
                  l += '<div style="" class="olLayerGeoRSSDescription">';
                  l += h;
                  l += "</div>";
                  e.popupContentHTML = l;
              }
              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 ? null : this;
      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.Symbolizer.Point = OpenLayers.Class(OpenLayers.Symbolizer, {
  initialize: function (a) {
      OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments);
  },
  CLASS_NAME: "OpenLayers.Symbolizer.Point",
});
OpenLayers.Symbolizer.Line = OpenLayers.Class(OpenLayers.Symbolizer, {
  initialize: function (a) {
      OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments);
  },
  CLASS_NAME: "OpenLayers.Symbolizer.Line",
});
OpenLayers.Symbolizer.Text = OpenLayers.Class(OpenLayers.Symbolizer, {
  initialize: function (a) {
      OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments);
  },
  CLASS_NAME: "OpenLayers.Symbolizer.Text",
});
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) {
      b = OpenLayers.Util.applyDefaults(b, this.options);
      var 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) for (c = 0, 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, k, l = 0, m = a.rules.length; l < m; ++l)
                          if (((e = a.rules[l]), e.symbolizers)) {
                              f = {};
                              for (var n = 0, p = e.symbolizers.length; n < p; ++n) (g = e.symbolizers[n]), (h = g.zIndex), h in f || ((k = e.clone()), (k.symbolizers = []), (f[h] = k)), 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();
                      l = 0;
                      for (m = d.length; l < m; ++l) (e = c[d[l]]), 0 < e.length && ((k = a.clone()), (k.rules = c[d[l]]), this.writeNode("FeatureTypeStyle", k, 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);
                  a = a.graphicFormat || this.getGraphicFormat(a.externalGraphic);
                  this.writeNode("Format", a, 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.Layer.WMS = OpenLayers.Class(OpenLayers.Layer.Grid, {
  DEFAULT_PARAMS: { service: "WMS", version: "1.1.1", request: "GetMap", styles: "", format: "image/jpeg" },
  isBaseLayer: !0,
  encodeBBOX: !1,
  noMagic: !1,
  yx: {},
  initialize: function (a, b, c, d) {
      var e = [];
      c = OpenLayers.Util.upperCaseObject(c);
      1.3 <= parseFloat(c.VERSION) && !c.EXCEPTIONS && (c.EXCEPTIONS = "INIMAGE");
      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));
      !this.noMagic &&
          this.params.TRANSPARENT &&
          "true" == this.params.TRANSPARENT.toString().toLowerCase() &&
          ((null != d && d.isBaseLayer) || (this.isBaseLayer = !1), "image/jpeg" == this.params.FORMAT && (this.params.FORMAT = OpenLayers.Util.alphaHack() ? "image/gif" : "image/png"));
  },
  clone: function (a) {
      null == a && (a = new OpenLayers.Layer.WMS(this.name, this.url, this.params, this.getOptions()));
      return (a = OpenLayers.Layer.Grid.prototype.clone.apply(this, [a]));
  },
  reverseAxisOrder: function () {
      var a = this.projection.getCode();
      return 1.3 <= parseFloat(this.params.VERSION) && !!(this.yx[a] || (OpenLayers.Projection.defaults[a] && OpenLayers.Projection.defaults[a].yx));
  },
  getURL: function (a) {
      a = this.adjustBounds(a);
      var b = this.getImageSize(),
          c = {},
          d = this.reverseAxisOrder();
      c.BBOX = this.encodeBBOX ? a.toBBOX(null, d) : a.toArray(d);
      c.WIDTH = b.w;
      c.HEIGHT = b.h;
      return this.getFullRequestString(c);
  },
  mergeNewParams: function (a) {
      a = [OpenLayers.Util.upperCaseObject(a)];
      return OpenLayers.Layer.Grid.prototype.mergeNewParams.apply(this, a);
  },
  getFullRequestString: function (a, b) {
      var c = this.map.getProjectionObject(),
          c = this.projection && this.projection.equals(c) ? this.projection.getCode() : c.getCode(),
          c = "none" == c ? null : c;
      1.3 <= parseFloat(this.params.VERSION) ? (this.params.CRS = c) : (this.params.SRS = c);
      "boolean" == typeof this.params.TRANSPARENT && (a.TRANSPARENT = this.params.TRANSPARENT ? "TRUE" : "FALSE");
      return OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(this, arguments);
  },
  CLASS_NAME: "OpenLayers.Layer.WMS",
});
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) {
      a = this.adjustBounds(a);
      var b = this.map.getResolution(),
          c = Math.round(1e4 * this.map.getScale()) / 1e4,
          d = Math.round(a.left / b);
      a = -Math.round(a.top / b);
      return this.getFullRequestString({ t: a, l: d, s: c });
  },
  calculateGridLayout: function (a, b, c) {
      b = c * this.tileSize.w;
      c *= this.tileSize.h;
      return { tilelon: b, tilelat: c, startcol: Math.floor(a.left / b) - this.buffer, startrow: Math.floor(a.top / c) + this.buffer };
  },
  getTileBoundsForGridIndex: function (a, b) {
      this.getTileOrigin();
      var c = this.gridLayout,
          d = c.tilelon,
          e = c.tilelat,
          f = (c.startcol + b) * d,
          c = (c.startrow - a) * e;
      return new OpenLayers.Bounds(f, c, f + d, c + e);
  },
  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.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 (a) {
              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.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
  xmlns: "http://www.w3.org/2000/svg",
  xlinkns: "http://www.w3.org/1999/xlink",
  MAX_PIXEL: 15e3,
  translationParameters: null,
  symbolMetrics: null,
  initialize: function (a) {
      this.supported() && (OpenLayers.Renderer.Elements.prototype.initialize.apply(this, arguments), (this.translationParameters = { x: 0, y: 0 }), (this.symbolMetrics = {}));
  },
  supported: function () {
      return (
          document.implementation &&
          (document.implementation.hasFeature("org.w3c.svg", "1.0") ||
              document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#SVG", "1.1") ||
              document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"))
      );
  },
  inValidRange: function (a, b, c) {
      a += c ? 0 : this.translationParameters.x;
      b += c ? 0 : this.translationParameters.y;
      return a >= -this.MAX_PIXEL && a <= this.MAX_PIXEL && b >= -this.MAX_PIXEL && b <= this.MAX_PIXEL;
  },
  setExtent: function (a, b) {
      var c = OpenLayers.Renderer.Elements.prototype.setExtent.apply(this, arguments),
          d = this.getResolution(),
          e = -a.left / d,
          d = a.top / d;
      if (b) return (this.left = e), (this.top = d), this.rendererRoot.setAttributeNS(null, "viewBox", "0 0 " + this.size.w + " " + this.size.h), this.translate(this.xOffset, 0), !0;
      (e = this.translate(e - this.left + this.xOffset, d - this.top)) || this.setExtent(a, !0);
      return c && e;
  },
  translate: function (a, b) {
      if (this.inValidRange(a, b, !0)) {
          var c = "";
          if (a || b) c = "translate(" + a + "," + b + ")";
          this.root.setAttributeNS(null, "transform", c);
          this.translationParameters = { x: a, y: b };
          return !0;
      }
      return !1;
  },
  setSize: function (a) {
      OpenLayers.Renderer.prototype.setSize.apply(this, arguments);
      this.rendererRoot.setAttributeNS(null, "width", this.size.w);
      this.rendererRoot.setAttributeNS(null, "height", this.size.h);
  },
  getNodeType: function (a, b) {
      var c = null;
      switch (a.CLASS_NAME) {
          case "OpenLayers.Geometry.Point":
              c = b.externalGraphic ? "image" : this.isComplexSymbol(b.graphicName) ? "svg" : "circle";
              break;
          case "OpenLayers.Geometry.Rectangle":
              c = "rect";
              break;
          case "OpenLayers.Geometry.LineString":
              c = "polyline";
              break;
          case "OpenLayers.Geometry.LinearRing":
              c = "polygon";
              break;
          case "OpenLayers.Geometry.Polygon":
          case "OpenLayers.Geometry.Curve":
              c = "path";
      }
      return c;
  },
  setStyle: function (a, b, c) {
      b = b || a._style;
      c = c || a._options;
      var d = b.title || b.graphicTitle;
      if (d) {
          a.setAttributeNS(null, "title", d);
          var e = a.getElementsByTagName("title");
          0 < e.length ? (e[0].firstChild.textContent = d) : ((e = this.nodeFactory(null, "title")), (e.textContent = d), a.appendChild(e));
      }
      var e = parseFloat(a.getAttributeNS(null, "r")),
          d = 1,
          f;
      if ("OpenLayers.Geometry.Point" == a._geometryClass && e) {
          a.style.visibility = "";
          if (!1 === b.graphic) a.style.visibility = "hidden";
          else if (b.externalGraphic) {
              f = this.getPosition(a);
              b.graphicWidth && b.graphicHeight && a.setAttributeNS(null, "preserveAspectRatio", "none");
              var e = b.graphicWidth || b.graphicHeight,
                  g = b.graphicHeight || b.graphicWidth,
                  e = e ? e : 2 * b.pointRadius,
                  g = g ? g : 2 * b.pointRadius,
                  h = void 0 != b.graphicYOffset ? b.graphicYOffset : -(0.5 * g),
                  k = b.graphicOpacity || b.fillOpacity;
              a.setAttributeNS(null, "x", (f.x + (void 0 != b.graphicXOffset ? b.graphicXOffset : -(0.5 * e))).toFixed());
              a.setAttributeNS(null, "y", (f.y + h).toFixed());
              a.setAttributeNS(null, "width", e);
              a.setAttributeNS(null, "height", g);
              a.setAttributeNS(this.xlinkns, "xlink:href", b.externalGraphic);
              a.setAttributeNS(null, "style", "opacity: " + k);
              a.onclick = OpenLayers.Event.preventDefault;
          } else if (this.isComplexSymbol(b.graphicName)) {
              var e = 3 * b.pointRadius,
                  g = 2 * e,
                  l = this.importSymbol(b.graphicName);
              f = this.getPosition(a);
              d = (3 * this.symbolMetrics[l.id][0]) / g;
              h = a.parentNode;
              k = a.nextSibling;
              h && h.removeChild(a);
              a.firstChild && a.removeChild(a.firstChild);
              a.appendChild(l.firstChild.cloneNode(!0));
              a.setAttributeNS(null, "viewBox", l.getAttributeNS(null, "viewBox"));
              a.setAttributeNS(null, "width", g);
              a.setAttributeNS(null, "height", g);
              a.setAttributeNS(null, "x", f.x - e);
              a.setAttributeNS(null, "y", f.y - e);
              k ? h.insertBefore(a, k) : h && h.appendChild(a);
          } else a.setAttributeNS(null, "r", b.pointRadius);
          e = b.rotation;
          (void 0 === e && void 0 === a._rotation) ||
              !f ||
              ((a._rotation = e),
              (e |= 0),
              "svg" !== a.nodeName
                  ? a.setAttributeNS(null, "transform", "rotate(" + e + " " + f.x + " " + f.y + ")")
                  : ((f = this.symbolMetrics[l.id]), a.firstChild.setAttributeNS(null, "transform", "rotate(" + e + " " + f[1] + " " + f[2] + ")")));
      }
      c.isFilled ? (a.setAttributeNS(null, "fill", b.fillColor), a.setAttributeNS(null, "fill-opacity", b.fillOpacity)) : a.setAttributeNS(null, "fill", "none");
      c.isStroked
          ? (a.setAttributeNS(null, "stroke", b.strokeColor),
            a.setAttributeNS(null, "stroke-opacity", b.strokeOpacity),
            a.setAttributeNS(null, "stroke-width", b.strokeWidth * d),
            a.setAttributeNS(null, "stroke-linecap", b.strokeLinecap || "round"),
            a.setAttributeNS(null, "stroke-linejoin", "round"),
            b.strokeDashstyle && a.setAttributeNS(null, "stroke-dasharray", this.dashStyle(b, d)))
          : a.setAttributeNS(null, "stroke", "none");
      b.pointerEvents && a.setAttributeNS(null, "pointer-events", b.pointerEvents);
      null != b.cursor && a.setAttributeNS(null, "cursor", b.cursor);
      return a;
  },
  dashStyle: function (a, b) {
      var c = a.strokeWidth * b,
          d = a.strokeDashstyle;
      switch (d) {
          case "solid":
              return "none";
          case "dot":
              return [1, 4 * c].join();
          case "dash":
              return [4 * c, 4 * c].join();
          case "dashdot":
              return [4 * c, 4 * c, 1, 4 * c].join();
          case "longdash":
              return [8 * c, 4 * c].join();
          case "longdashdot":
              return [8 * c, 4 * c, 1, 4 * c].join();
          default:
              return OpenLayers.String.trim(d).replace(/\s+/g, ",");
      }
  },
  createNode: function (a, b) {
      var c = document.createElementNS(this.xmlns, a);
      b && c.setAttributeNS(null, "id", b);
      return c;
  },
  nodeTypeCompare: function (a, b) {
      return b == a.nodeName;
  },
  createRenderRoot: function () {
      var a = this.nodeFactory(this.container.id + "_svgRoot", "svg");
      a.style.display = "block";
      return a;
  },
  createRoot: function (a) {
      return this.nodeFactory(this.container.id + a, "g");
  },
  createDefs: function () {
      var a = this.nodeFactory(this.container.id + "_defs", "defs");
      this.rendererRoot.appendChild(a);
      return a;
  },
  drawPoint: function (a, b) {
      return this.drawCircle(a, b, 1);
  },
  drawCircle: function (a, b, c) {
      var d = this.getResolution(),
          e = (b.x - this.featureDx) / d + this.left;
      b = this.top - b.y / d;
      return this.inValidRange(e, b) ? (a.setAttributeNS(null, "cx", e), a.setAttributeNS(null, "cy", b), a.setAttributeNS(null, "r", c), a) : !1;
  },
  drawLineString: function (a, b) {
      var c = this.getComponentsString(b.components);
      return c.path ? (a.setAttributeNS(null, "points", c.path), c.complete ? a : null) : !1;
  },
  drawLinearRing: function (a, b) {
      var c = this.getComponentsString(b.components);
      return c.path ? (a.setAttributeNS(null, "points", c.path), c.complete ? a : null) : !1;
  },
  drawPolygon: function (a, b) {
      for (var c = "", d = !0, e = !0, f, g, h = 0, k = b.components.length; h < k; h++) (c += " M"), (f = this.getComponentsString(b.components[h].components, " ")), (g = f.path) ? ((c += " " + g), (e = f.complete && e)) : (d = !1);
      return d ? (a.setAttributeNS(null, "d", c + " z"), a.setAttributeNS(null, "fill-rule", "evenodd"), e ? a : null) : !1;
  },
  drawRectangle: function (a, b) {
      var c = this.getResolution(),
          d = (b.x - this.featureDx) / c + this.left,
          e = this.top - b.y / c;
      return this.inValidRange(d, e) ? (a.setAttributeNS(null, "x", d), a.setAttributeNS(null, "y", e), a.setAttributeNS(null, "width", b.width / c), a.setAttributeNS(null, "height", b.height / c), a) : !1;
  },
  drawText: function (a, b, c) {
      var d = !!b.labelOutlineWidth;
      if (d) {
          var e = OpenLayers.Util.extend({}, b);
          e.fontColor = e.labelOutlineColor;
          e.fontStrokeColor = e.labelOutlineColor;
          e.fontStrokeWidth = b.labelOutlineWidth;
          b.labelOutlineOpacity && (e.fontOpacity = b.labelOutlineOpacity);
          delete e.labelOutlineWidth;
          this.drawText(a, e, c);
      }
      var f = this.getResolution(),
          e = (c.x - this.featureDx) / f + this.left,
          g = c.y / f - this.top,
          d = d ? this.LABEL_OUTLINE_SUFFIX : this.LABEL_ID_SUFFIX,
          f = this.nodeFactory(a + d, "text");
      f.setAttributeNS(null, "x", e);
      f.setAttributeNS(null, "y", -g);
      b.fontColor && f.setAttributeNS(null, "fill", b.fontColor);
      b.fontStrokeColor && f.setAttributeNS(null, "stroke", b.fontStrokeColor);
      b.fontStrokeWidth && f.setAttributeNS(null, "stroke-width", b.fontStrokeWidth);
      b.fontOpacity && f.setAttributeNS(null, "opacity", b.fontOpacity);
      b.fontFamily && f.setAttributeNS(null, "font-family", b.fontFamily);
      b.fontSize && f.setAttributeNS(null, "font-size", b.fontSize);
      b.fontWeight && f.setAttributeNS(null, "font-weight", b.fontWeight);
      b.fontStyle && f.setAttributeNS(null, "font-style", b.fontStyle);
      !0 === b.labelSelect ? (f.setAttributeNS(null, "pointer-events", "visible"), (f._featureId = a)) : f.setAttributeNS(null, "pointer-events", "none");
      g = b.labelAlign || OpenLayers.Renderer.defaultSymbolizer.labelAlign;
      f.setAttributeNS(null, "text-anchor", OpenLayers.Renderer.SVG.LABEL_ALIGN[g[0]] || "middle");
      !0 === OpenLayers.IS_GECKO && f.setAttributeNS(null, "dominant-baseline", OpenLayers.Renderer.SVG.LABEL_ALIGN[g[1]] || "central");
      for (var h = b.label.split("\n"), k = h.length; f.childNodes.length > k; ) f.removeChild(f.lastChild);
      for (var l = 0; l < k; l++) {
          var m = this.nodeFactory(a + d + "_tspan_" + l, "tspan");
          !0 === b.labelSelect && ((m._featureId = a), (m._geometry = c), (m._geometryClass = c.CLASS_NAME));
          !1 === OpenLayers.IS_GECKO && m.setAttributeNS(null, "baseline-shift", OpenLayers.Renderer.SVG.LABEL_VSHIFT[g[1]] || "-35%");
          m.setAttribute("x", e);
          if (0 == l) {
              var n = OpenLayers.Renderer.SVG.LABEL_VFACTOR[g[1]];
              null == n && (n = -0.5);
              m.setAttribute("dy", n * (k - 1) + "em");
          } else m.setAttribute("dy", "1em");
          m.textContent = "" === h[l] ? " " : h[l];
          m.parentNode || f.appendChild(m);
      }
      f.parentNode || this.textRoot.appendChild(f);
  },
  getComponentsString: function (a, b) {
      for (var c = [], d = !0, e = a.length, f = [], g, h = 0; h < e; h++)
          (g = a[h]),
              c.push(g),
              (g = this.getShortString(g)) ? f.push(g) : (0 < h && this.getShortString(a[h - 1]) && f.push(this.clipLine(a[h], a[h - 1])), h < e - 1 && this.getShortString(a[h + 1]) && f.push(this.clipLine(a[h], a[h + 1])), (d = !1));
      return { path: f.join(b || ","), complete: d };
  },
  clipLine: function (a, b) {
      if (b.equals(a)) return "";
      var c = this.getResolution(),
          d = this.MAX_PIXEL - this.translationParameters.x,
          e = this.MAX_PIXEL - this.translationParameters.y,
          f = (b.x - this.featureDx) / c + this.left,
          g = this.top - b.y / c,
          h = (a.x - this.featureDx) / c + this.left,
          c = this.top - a.y / c,
          k;
      if (h < -d || h > d) (k = (c - g) / (h - f)), (h = 0 > h ? -d : d), (c = g + (h - f) * k);
      if (c < -e || c > e) (k = (h - f) / (c - g)), (c = 0 > c ? -e : e), (h = f + (c - g) * k);
      return h + "," + c;
  },
  getShortString: function (a) {
      var b = this.getResolution(),
          c = (a.x - this.featureDx) / b + this.left;
      a = this.top - a.y / b;
      return this.inValidRange(c, a) ? c + "," + a : !1;
  },
  getPosition: function (a) {
      return { x: parseFloat(a.getAttributeNS(null, "cx")), y: parseFloat(a.getAttributeNS(null, "cy")) };
  },
  importSymbol: function (a) {
      this.defs || (this.defs = this.createDefs());
      var b = this.container.id + "-" + a,
          c = document.getElementById(b);
      if (null != c) return c;
      var d = OpenLayers.Renderer.symbol[a];
      if (!d) throw Error(a + " is not a valid symbol name");
      a = this.nodeFactory(b, "symbol");
      var e = this.nodeFactory(null, "polygon");
      a.appendChild(e);
      for (var c = new OpenLayers.Bounds(Number.MAX_VALUE, Number.MAX_VALUE, 0, 0), f = [], g, h, k = 0; k < d.length; k += 2)
          (g = d[k]), (h = d[k + 1]), (c.left = Math.min(c.left, g)), (c.bottom = Math.min(c.bottom, h)), (c.right = Math.max(c.right, g)), (c.top = Math.max(c.top, h)), f.push(g, ",", h);
      e.setAttributeNS(null, "points", f.join(" "));
      d = c.getWidth();
      e = c.getHeight();
      a.setAttributeNS(null, "viewBox", [c.left - d, c.bottom - e, 3 * d, 3 * e].join(" "));
      this.symbolMetrics[b] = [Math.max(d, e), c.getCenterLonLat().lon, c.getCenterLonLat().lat];
      this.defs.appendChild(a);
      return a;
  },
  getFeatureIdFromEvent: function (a) {
      var b = OpenLayers.Renderer.Elements.prototype.getFeatureIdFromEvent.apply(this, arguments);
      b || ((b = a.target), (b = b.parentNode && b != this.rendererRoot ? b.parentNode._featureId : void 0));
      return b;
  },
  CLASS_NAME: "OpenLayers.Renderer.SVG",
});
OpenLayers.Renderer.SVG.LABEL_ALIGN = { l: "start", r: "end", b: "bottom", t: "hanging" };
OpenLayers.Renderer.SVG.LABEL_VSHIFT = { t: "-70%", b: "0" };
OpenLayers.Renderer.SVG.LABEL_VFACTOR = { t: 0, b: -1 };
OpenLayers.Renderer.SVG.preventDefault = function (a) {
  OpenLayers.Event.preventDefault(a);
};
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"),
                  c = a.getDataExtent();
              null !== c && this.writeNode("gml:boundedBy", c, 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.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._onImgLoad));
              },
              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) {
      a = 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.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;
      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 (a) {
      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.Control.ScaleLine = OpenLayers.Class(OpenLayers.Control, {
  maxWidth: 100,
  topOutUnits: "km",
  topInUnits: "m",
  bottomOutUnits: "mi",
  bottomInUnits: "ft",
  eTop: null,
  eBottom: null,
  geodesic: !1,
  draw: function () {
      OpenLayers.Control.prototype.draw.apply(this, arguments);
      this.eTop ||
          ((this.eTop = document.createElement("div")),
          (this.eTop.className = this.displayClass + "Top"),
          this.div.appendChild(this.eTop),
          (this.eTop.style.visibility = "" == this.topOutUnits || "" == this.topInUnits ? "hidden" : "visible"),
          (this.eBottom = document.createElement("div")),
          (this.eBottom.className = this.displayClass + "Bottom"),
          this.div.appendChild(this.eBottom),
          (this.eBottom.style.visibility = "" == this.bottomOutUnits || "" == this.bottomInUnits ? "hidden" : "visible"));
      this.map.events.register("moveend", this, this.update);
      this.update();
      return this.div;
  },
  getBarLen: function (a) {
      var b = parseInt(Math.log(a) / Math.log(10)),
          b = Math.pow(10, b);
      a = parseInt(a / b);
      return (5 < a ? 5 : 2 < a ? 2 : 1) * b;
  },
  update: function () {
      var a = this.map.getResolution();
      if (a) {
          var b = this.map.getUnits(),
              c = OpenLayers.INCHES_PER_UNIT,
              d = this.maxWidth * a * c[b],
              e = 1;
          !0 === this.geodesic && ((e = ((this.map.getGeodesicPixelSize().w || 1e-6) * this.maxWidth) / (d / c.km)), (d *= e));
          var f, g;
          1e5 < d ? ((f = this.topOutUnits), (g = this.bottomOutUnits)) : ((f = this.topInUnits), (g = this.bottomInUnits));
          var h = d / c[f],
              k = d / c[g],
              d = this.getBarLen(h),
              l = this.getBarLen(k),
              h = (d / c[b]) * c[f],
              k = (l / c[b]) * c[g],
              b = h / a / e,
              a = k / a / e;
          "visible" == this.eBottom.style.visibility && ((this.eBottom.style.width = Math.round(a) + "px"), (this.eBottom.innerHTML = l + " " + g));
          "visible" == this.eTop.style.visibility && ((this.eTop.style.width = Math.round(b) + "px"), (this.eTop.innerHTML = d + " " + f));
      }
  },
  CLASS_NAME: "OpenLayers.Control.ScaleLine",
});
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.Marker = OpenLayers.Class({
  icon: null,
  lonlat: null,
  events: null,
  map: null,
  initialize: function (a, b) {
      this.lonlat = a;
      var c = b ? b : OpenLayers.Marker.defaultIcon();
      null == this.icon ? (this.icon = c) : ((this.icon.url = c.url), (this.icon.size = c.size), (this.icon.offset = c.offset), (this.icon.calculateOffset = c.calculateOffset));
      this.events = new OpenLayers.Events(this, this.icon.imageDiv);
  },
  destroy: function () {
      this.erase();
      this.map = null;
      this.events.destroy();
      this.events = null;
      null != this.icon && (this.icon.destroy(), (this.icon = null));
  },
  draw: function (a) {
      return this.icon.draw(a);
  },
  erase: function () {
      null != this.icon && this.icon.erase();
  },
  moveTo: function (a) {
      null != a && null != this.icon && this.icon.moveTo(a);
      this.lonlat = this.map.getLonLatFromLayerPx(a);
  },
  isDrawn: function () {
      return this.icon && this.icon.isDrawn();
  },
  onScreen: function () {
      var a = !1;
      this.map && (a = this.map.getExtent().containsLonLat(this.lonlat));
      return a;
  },
  inflate: function (a) {
      this.icon && this.icon.setSize({ w: this.icon.size.w * a, h: this.icon.size.h * a });
  },
  setOpacity: function (a) {
      this.icon.setOpacity(a);
  },
  setUrl: function (a) {
      this.icon.setUrl(a);
  },
  display: function (a) {
      this.icon.display(a);
  },
  CLASS_NAME: "OpenLayers.Marker",
});
OpenLayers.Marker.defaultIcon = function () {
  return new OpenLayers.Icon(OpenLayers.Util.getImageLocation("marker.png"), { w: 21, h: 25 }, { x: -10.5, y: -25 });
};
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) {
      var b = this.getServerResolution(),
          c = this.maxExtent,
          d = this.tileSize,
          e = Math.round((a.left - c.left) / (b * d.w));
      a = Math.round((a.bottom - c.bottom) / (b * d.h));
      b = null != this.serverResolutions ? OpenLayers.Util.indexOf(this.serverResolutions, b) : this.map.getZoom();
      e = [
          this.layername,
          OpenLayers.Number.zeroPad(b, 2),
          OpenLayers.Number.zeroPad(parseInt(e / 1e6), 3),
          OpenLayers.Number.zeroPad(parseInt(e / 1e3) % 1e3, 3),
          OpenLayers.Number.zeroPad(parseInt(e) % 1e3, 3),
          OpenLayers.Number.zeroPad(parseInt(a / 1e6), 3),
          OpenLayers.Number.zeroPad(parseInt(a / 1e3) % 1e3, 3),
          OpenLayers.Number.zeroPad(parseInt(a) % 1e3, 3) + "." + this.extension,
      ].join("/");
      b = this.url;
      OpenLayers.Util.isArray(b) && (b = this.selectUrl(e, b));
      b = "/" == b.charAt(b.length - 1) ? b : b + "/";
      return b + e;
  },
  CLASS_NAME: "OpenLayers.Layer.TileCache",
});
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.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
  geometryTypes: null,
  onStart: function (a, b) {},
  onDrag: function (a, b) {},
  onComplete: function (a, b) {},
  onEnter: function (a) {},
  onLeave: function (a) {},
  documentDrag: !1,
  layer: null,
  feature: null,
  dragCallbacks: {},
  featureCallbacks: {},
  lastPixel: null,
  initialize: function (a, b) {
      OpenLayers.Control.prototype.initialize.apply(this, [b]);
      this.layer = a;
      this.handlers = {
          drag: new OpenLayers.Handler.Drag(this, OpenLayers.Util.extend({ down: this.downFeature, move: this.moveFeature, up: this.upFeature, out: this.cancel, done: this.doneDragging }, this.dragCallbacks), {
              documentDrag: this.documentDrag,
          }),
          feature: new OpenLayers.Handler.Feature(this, this.layer, OpenLayers.Util.extend({ click: this.clickFeature, clickout: this.clickoutFeature, over: this.overFeature, out: this.outFeature }, this.featureCallbacks), {
              geometryTypes: this.geometryTypes,
          }),
      };
  },
  clickFeature: function (a) {
      this.handlers.feature.touch && !this.over && this.overFeature(a) && (this.handlers.drag.dragstart(this.handlers.feature.evt), (this.handlers.drag.stopDown = !1));
  },
  clickoutFeature: function (a) {
      this.handlers.feature.touch && this.over && (this.outFeature(a), (this.handlers.drag.stopDown = !0));
  },
  destroy: function () {
      this.layer = null;
      OpenLayers.Control.prototype.destroy.apply(this, []);
  },
  activate: function () {
      return this.handlers.feature.activate() && OpenLayers.Control.prototype.activate.apply(this, arguments);
  },
  deactivate: function () {
      this.handlers.drag.deactivate();
      this.handlers.feature.deactivate();
      this.feature = null;
      this.dragging = !1;
      this.lastPixel = null;
      OpenLayers.Element.removeClass(this.map.viewPortDiv, this.displayClass + "Over");
      return OpenLayers.Control.prototype.deactivate.apply(this, arguments);
  },
  overFeature: function (a) {
      var b = !1;
      this.handlers.drag.dragging
          ? (this.over = this.feature.id == a.id ? !0 : !1)
          : ((this.feature = a), this.handlers.drag.activate(), (this.over = b = !0), OpenLayers.Element.addClass(this.map.viewPortDiv, this.displayClass + "Over"), this.onEnter(a));
      return b;
  },
  downFeature: function (a) {
      this.lastPixel = a;
      this.onStart(this.feature, a);
  },
  moveFeature: function (a) {
      var b = this.map.getResolution();
      this.feature.geometry.move(b * (a.x - this.lastPixel.x), b * (this.lastPixel.y - a.y));
      this.layer.drawFeature(this.feature);
      this.lastPixel = a;
      this.onDrag(this.feature, a);
  },
  upFeature: function (a) {
      this.over || this.handlers.drag.deactivate();
  },
  doneDragging: function (a) {
      this.onComplete(this.feature, a);
  },
  outFeature: function (a) {
      this.handlers.drag.dragging
          ? this.feature.id == a.id && (this.over = !1)
          : ((this.over = !1), this.handlers.drag.deactivate(), OpenLayers.Element.removeClass(this.map.viewPortDiv, this.displayClass + "Over"), this.onLeave(a), (this.feature = null));
  },
  cancel: function () {
      this.handlers.drag.deactivate();
      this.over = !1;
  },
  setMap: function (a) {
      this.handlers.drag.setMap(a);
      this.handlers.feature.setMap(a);
      OpenLayers.Control.prototype.setMap.apply(this, arguments);
  },
  CLASS_NAME: "OpenLayers.Control.DragFeature",
});
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) {
      b = OpenLayers.Util.applyDefaults(b, { rotation: 0, scale: 1, ratio: 1 });
      var 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 k = this.x - f.x,
                          l = this.y - f.y,
                          m = k - (this.x - h.x),
                          n = l - (this.y - h.y);
                      a.irregular && !a._setfeature && ((k -= (this.x - h.x) / 2), (l -= (this.y - h.y) / 2));
                      this.x = d;
                      this.y = e;
                      h = 1;
                      g ? ((l = 1e-5 > Math.abs(n) ? 1 : l / n), (h = (1e-5 > Math.abs(m) ? 1 : k / m) / l)) : ((m = Math.sqrt(m * m + n * n)), (l = Math.sqrt(k * k + l * l) / m));
                      a._moving = !0;
                      a.box.geometry.rotate(-a.rotation, f);
                      delete a._moving;
                      a.box.geometry.resize(l, f, h);
                      a.box.geometry.rotate(a.rotation, f);
                      a.transformFeature({ scale: l, ratio: h });
                      a.irregular &&
                          !a._setfeature &&
                          ((k = f.clone()), (k.x += 1e-5 > Math.abs(d - f.x) ? 0 : this.x - d), (k.y += 1e-5 > Math.abs(e - f.y) ? 0 : this.y - e), a.box.geometry.move(this.x - d, this.y - e), a.transformFeature({ center: k }));
                  }
              },
              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,
                          k = this.y - g.y;
                      this.x = d;
                      this.y = e;
                      d = Math.atan2(k - c, h - b);
                      d = Math.atan2(k, 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),
              k,
              l,
              m,
              n = "sw s se e ne n nw w".split(" "),
              p = 0;
          8 > p;
          ++p
      )
          (k = this.box.geometry.components[p]),
              (l = new OpenLayers.Feature.Vector(k.clone(), { role: n[p] + "-resize" }, "string" == typeof this.renderIntent ? null : this.renderIntent)),
              0 == p % 2 &&
                  ((m = new OpenLayers.Feature.Vector(k.clone(), { role: n[p] + "-rotate" }, "string" == typeof this.rotationHandleSymbolizer ? null : this.rotationHandleSymbolizer)),
                  (m.geometry.move = f),
                  (k._rotationHandle = m),
                  (h[p / 2] = m)),
              (k.move = b),
              (k.resize = c),
              (k.rotate = d),
              (l.geometry.move = e),
              (k._handle = l),
              (g[p] = l);
      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, c) {
              b === a.box && a.transformFeature({ center: a.center });
          },
          onStart: function (b, c) {
              var d = !a.geometryTypes || -1 !== OpenLayers.Util.indexOf(a.geometryTypes, b.geometry.CLASS_NAME),
                  e = OpenLayers.Util.indexOf(a.handles, b),
                  e = e + OpenLayers.Util.indexOf(a.rotationHandles, b);
              b !== a.feature && b !== a.box && -2 == e && d && a.setFeature(b);
          },
          onComplete: function (b, c) {
              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.Handler.Box = OpenLayers.Class(OpenLayers.Handler, {
  dragHandler: null,
  boxDivClassName: "olHandlerBoxZoomBox",
  boxOffsets: null,
  initialize: function (a, b, c) {
      OpenLayers.Handler.prototype.initialize.apply(this, arguments);
      this.dragHandler = new OpenLayers.Handler.Drag(this, { down: this.startBox, move: this.moveBox, out: this.removeBox, up: this.endBox }, { keyMask: this.keyMask });
  },
  destroy: function () {
      OpenLayers.Handler.prototype.destroy.apply(this, arguments);
      this.dragHandler && (this.dragHandler.destroy(), (this.dragHandler = null));
  },
  setMap: function (a) {
      OpenLayers.Handler.prototype.setMap.apply(this, arguments);
      this.dragHandler && this.dragHandler.setMap(a);
  },
  startBox: function (a) {
      this.callback("start", []);
      this.zoomBox = OpenLayers.Util.createDiv("zoomBox", { x: -9999, y: -9999 });
      this.zoomBox.className = this.boxDivClassName;
      this.zoomBox.style.zIndex = this.map.Z_INDEX_BASE.Popup - 1;
      this.map.viewPortDiv.appendChild(this.zoomBox);
      OpenLayers.Element.addClass(this.map.viewPortDiv, "olDrawBox");
  },
  moveBox: function (a) {
      var b = this.dragHandler.start.x,
          c = this.dragHandler.start.y,
          d = Math.abs(b - a.x),
          e = Math.abs(c - a.y),
          f = this.getBoxOffsets();
      this.zoomBox.style.width = d + f.width + 1 + "px";
      this.zoomBox.style.height = e + f.height + 1 + "px";
      this.zoomBox.style.left = (a.x < b ? b - d - f.left : b - f.left) + "px";
      this.zoomBox.style.top = (a.y < c ? c - e - f.top : c - f.top) + "px";
  },
  endBox: function (a) {
      var b;
      if (5 < Math.abs(this.dragHandler.start.x - a.x) || 5 < Math.abs(this.dragHandler.start.y - a.y)) {
          var c = this.dragHandler.start;
          b = Math.min(c.y, a.y);
          var d = Math.max(c.y, a.y),
              e = Math.min(c.x, a.x);
          a = Math.max(c.x, a.x);
          b = new OpenLayers.Bounds(e, d, a, b);
      } else b = this.dragHandler.start.clone();
      this.removeBox();
      this.callback("done", [b]);
  },
  removeBox: function () {
      this.map.viewPortDiv.removeChild(this.zoomBox);
      this.boxOffsets = this.zoomBox = null;
      OpenLayers.Element.removeClass(this.map.viewPortDiv, "olDrawBox");
  },
  activate: function () {
      return OpenLayers.Handler.prototype.activate.apply(this, arguments) ? (this.dragHandler.activate(), !0) : !1;
  },
  deactivate: function () {
      return OpenLayers.Handler.prototype.deactivate.apply(this, arguments) ? (this.dragHandler.deactivate() && this.zoomBox && this.removeBox(), !0) : !1;
  },
  getBoxOffsets: function () {
      if (!this.boxOffsets) {
          var a = document.createElement("div");
          a.style.position = "absolute";
          a.style.border = "1px solid black";
          a.style.width = "3px";
          document.body.appendChild(a);
          var b = 3 == a.clientWidth;
          document.body.removeChild(a);
          var a = parseInt(OpenLayers.Element.getStyle(this.zoomBox, "border-left-width")),
              c = parseInt(OpenLayers.Element.getStyle(this.zoomBox, "border-right-width")),
              d = parseInt(OpenLayers.Element.getStyle(this.zoomBox, "border-top-width")),
              e = parseInt(OpenLayers.Element.getStyle(this.zoomBox, "border-bottom-width"));
          this.boxOffsets = { left: a, right: c, top: d, bottom: e, width: !1 === b ? a + c : 0, height: !1 === b ? d + e : 0 };
      }
      return this.boxOffsets;
  },
  CLASS_NAME: "OpenLayers.Handler.Box",
});
OpenLayers.Control.ZoomBox = OpenLayers.Class(OpenLayers.Control, {
  type: OpenLayers.Control.TYPE_TOOL,
  out: !1,
  keyMask: null,
  alwaysZoom: !1,
  zoomOnClick: !0,
  draw: function () {
      this.handler = new OpenLayers.Handler.Box(this, { done: this.zoomBox }, { keyMask: this.keyMask });
  },
  zoomBox: function (a) {
      if (a instanceof OpenLayers.Bounds) {
          var b,
              c = a.getCenterPixel();
          if (this.out) {
              b = Math.min(this.map.size.h / (a.bottom - a.top), this.map.size.w / (a.right - a.left));
              var d = this.map.getExtent(),
                  e = this.map.getLonLatFromPixel(c),
                  f = e.lon - (d.getWidth() / 2) * b;
              a = e.lon + (d.getWidth() / 2) * b;
              var g = e.lat - (d.getHeight() / 2) * b;
              b = e.lat + (d.getHeight() / 2) * b;
              b = new OpenLayers.Bounds(f, g, a, b);
          } else (f = this.map.getLonLatFromPixel({ x: a.left, y: a.bottom })), (a = this.map.getLonLatFromPixel({ x: a.right, y: a.top })), (b = new OpenLayers.Bounds(f.lon, f.lat, a.lon, a.lat));
          f = this.map.getZoom();
          g = this.map.getSize();
          a = g.w / 2;
          g = g.h / 2;
          b = this.map.getZoomForExtent(b);
          d = this.map.getResolution();
          e = this.map.getResolutionForZoom(b);
          d == e ? this.map.setCenter(this.map.getLonLatFromPixel(c)) : this.map.zoomTo(b, { x: (d * c.x - e * a) / (d - e), y: (d * c.y - e * g) / (d - e) });
          f == this.map.getZoom() && !0 == this.alwaysZoom && this.map.zoomTo(f + (this.out ? -1 : 1));
      } else this.zoomOnClick && (this.out ? this.map.zoomTo(this.map.getZoom() - 1, a) : this.map.zoomTo(this.map.getZoom() + 1, a));
  },
  CLASS_NAME: "OpenLayers.Control.ZoomBox",
});
OpenLayers.Control.DragPan = OpenLayers.Class(OpenLayers.Control, {
  type: OpenLayers.Control.TYPE_TOOL,
  panned: !1,
  interval: 0,
  documentDrag: !1,
  kinetic: null,
  enableKinetic: !0,
  kineticInterval: 10,
  draw: function () {
      if (this.enableKinetic && OpenLayers.Kinetic) {
          var a = { interval: this.kineticInterval };
          "object" === typeof this.enableKinetic && (a = OpenLayers.Util.extend(a, this.enableKinetic));
          this.kinetic = new OpenLayers.Kinetic(a);
      }
      this.handler = new OpenLayers.Handler.Drag(this, { move: this.panMap, done: this.panMapDone, down: this.panMapStart }, { interval: this.interval, documentDrag: this.documentDrag });
  },
  panMapStart: function () {
      this.kinetic && this.kinetic.begin();
  },
  panMap: function (a) {
      this.kinetic && this.kinetic.update(a);
      this.panned = !0;
      this.map.pan(this.handler.last.x - a.x, this.handler.last.y - a.y, { dragging: !0, animate: !1 });
  },
  panMapDone: function (a) {
      if (this.panned) {
          var b = null;
          this.kinetic && (b = this.kinetic.end(a));
          this.map.pan(this.handler.last.x - a.x, this.handler.last.y - a.y, { dragging: !!b, animate: !1 });
          if (b) {
              var c = this;
              this.kinetic.move(b, function (a, b, f) {
                  c.map.pan(a, b, { dragging: !f, animate: !1 });
              });
          }
          this.panned = !1;
      }
  },
  CLASS_NAME: "OpenLayers.Control.DragPan",
});
OpenLayers.Control.Navigation = OpenLayers.Class(OpenLayers.Control, {
  dragPan: null,
  dragPanOptions: null,
  pinchZoom: null,
  pinchZoomOptions: null,
  documentDrag: !1,
  zoomBox: null,
  zoomBoxEnabled: !0,
  zoomWheelEnabled: !0,
  mouseWheelOptions: null,
  handleRightClicks: !1,
  zoomBoxKeyMask: OpenLayers.Handler.MOD_SHIFT,
  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.zoomBox && this.zoomBox.destroy();
      this.zoomBox = null;
      this.pinchZoom && this.pinchZoom.destroy();
      this.pinchZoom = null;
      OpenLayers.Control.prototype.destroy.apply(this, arguments);
  },
  activate: function () {
      this.dragPan.activate();
      this.zoomWheelEnabled && this.handlers.wheel.activate();
      this.handlers.click.activate();
      this.zoomBoxEnabled && this.zoomBox.activate();
      this.pinchZoom && this.pinchZoom.activate();
      return OpenLayers.Control.prototype.activate.apply(this, arguments);
  },
  deactivate: function () {
      this.pinchZoom && this.pinchZoom.deactivate();
      this.zoomBox.deactivate();
      this.dragPan.deactivate();
      this.handlers.click.deactivate();
      this.handlers.wheel.deactivate();
      return OpenLayers.Control.prototype.deactivate.apply(this, arguments);
  },
  draw: function () {
      this.handleRightClicks && (this.map.viewPortDiv.oncontextmenu = OpenLayers.Function.False);
      this.handlers.click = new OpenLayers.Handler.Click(this, { click: this.defaultClick, dblclick: this.defaultDblClick, dblrightclick: this.defaultDblRightClick }, { double: !0, stopDouble: !0 });
      this.dragPan = new OpenLayers.Control.DragPan(OpenLayers.Util.extend({ map: this.map, documentDrag: this.documentDrag }, this.dragPanOptions));
      this.zoomBox = new OpenLayers.Control.ZoomBox({ map: this.map, keyMask: this.zoomBoxKeyMask });
      this.dragPan.draw();
      this.zoomBox.draw();
      this.handlers.wheel = new OpenLayers.Handler.MouseWheel(this, { up: this.wheelUp, down: this.wheelDown }, OpenLayers.Util.extend(this.map.fractionalZoom ? {} : { cumulative: !1, interval: 50, maxDelta: 6 }, this.mouseWheelOptions));
      OpenLayers.Control.PinchZoom && (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.zoomTo(this.map.zoom + 1, a.xy);
  },
  defaultDblRightClick: function (a) {
      this.map.zoomTo(this.map.zoom - 1, a.xy);
  },
  wheelChange: function (a, b) {
      this.map.fractionalZoom || (b = Math.round(b));
      var c = this.map.getZoom(),
          d;
      d = Math.max(c + b, 0);
      d = Math.min(d, this.map.getNumZoomLevels());
      d !== c && this.map.zoomTo(d, a.xy);
  },
  wheelUp: function (a, b) {
      this.wheelChange(a, b || 1);
  },
  wheelDown: function (a, b) {
      this.wheelChange(a, b || -1);
  },
  disableZoomBox: function () {
      this.zoomBoxEnabled = !1;
      this.zoomBox.deactivate();
  },
  enableZoomBox: function () {
      this.zoomBoxEnabled = !0;
      this.active && this.zoomBox.activate();
  },
  disableZoomWheel: function () {
      this.zoomWheelEnabled = !1;
      this.handlers.wheel.deactivate();
  },
  enableZoomWheel: function () {
      this.zoomWheelEnabled = !0;
      this.active && this.handlers.wheel.activate();
  },
  CLASS_NAME: "OpenLayers.Control.Navigation",
});
OpenLayers.Control.DrawFeature = OpenLayers.Class(OpenLayers.Control, {
  layer: null,
  callbacks: null,
  multi: !1,
  featureAdded: function () {},
  initialize: function (a, b, c) {
      OpenLayers.Control.prototype.initialize.apply(this, [c]);
      this.callbacks = OpenLayers.Util.extend(
          {
              done: this.drawFeature,
              modify: function (a, b) {
                  this.layer.events.triggerEvent("sketchmodified", { vertex: a, feature: b });
              },
              create: function (a, b) {
                  this.layer.events.triggerEvent("sketchstarted", { vertex: a, feature: b });
              },
          },
          this.callbacks
      );
      this.layer = a;
      this.handlerOptions = this.handlerOptions || {};
      this.handlerOptions.layerOptions = OpenLayers.Util.applyDefaults(this.handlerOptions.layerOptions, { renderers: a.renderers, rendererOptions: a.rendererOptions });
      "multi" in this.handlerOptions || (this.handlerOptions.multi = this.multi);
      if ((a = this.layer.styleMap && this.layer.styleMap.styles.temporary)) this.handlerOptions.layerOptions = OpenLayers.Util.applyDefaults(this.handlerOptions.layerOptions, { styleMap: new OpenLayers.StyleMap({ default: a }) });
      this.handler = new b(this, this.callbacks, this.handlerOptions);
  },
  drawFeature: function (a) {
      a = new OpenLayers.Feature.Vector(a);
      !1 !== this.layer.events.triggerEvent("sketchcomplete", { feature: a }) && ((a.state = OpenLayers.State.INSERT), this.layer.addFeatures([a]), this.featureAdded(a), this.events.triggerEvent("featureadded", { feature: a }));
  },
  insertXY: function (a, b) {
      this.handler && this.handler.line && this.handler.insertXY(a, b);
  },
  insertDeltaXY: function (a, b) {
      this.handler && this.handler.line && this.handler.insertDeltaXY(a, b);
  },
  insertDirectionLength: function (a, b) {
      this.handler && this.handler.line && this.handler.insertDirectionLength(a, b);
  },
  insertDeflectionLength: function (a, b) {
      this.handler && this.handler.line && this.handler.insertDeflectionLength(a, b);
  },
  undo: function () {
      return this.handler.undo && this.handler.undo();
  },
  redo: function () {
      return this.handler.redo && this.handler.redo();
  },
  finishSketch: function () {
      this.handler.finishGeometry();
  },
  cancel: function () {
      this.handler.cancel();
  },
  CLASS_NAME: "OpenLayers.Control.DrawFeature",
});
OpenLayers.Handler.Polygon = OpenLayers.Class(OpenLayers.Handler.Path, {
  holeModifier: null,
  drawingHole: !1,
  polygon: null,
  createFeature: function (a) {
      a = this.layer.getLonLatFromViewPortPx(a);
      a = new OpenLayers.Geometry.Point(a.lon, a.lat);
      this.point = new OpenLayers.Feature.Vector(a);
      this.line = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LinearRing([this.point.geometry]));
      this.polygon = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon([this.line.geometry]));
      this.callback("create", [this.point.geometry, this.getSketch()]);
      this.point.geometry.clearBounds();
      this.layer.addFeatures([this.polygon, this.point], { silent: !0 });
  },
  addPoint: function (a) {
      if (!this.drawingHole && this.holeModifier && this.evt && this.evt[this.holeModifier])
          for (var b = this.point.geometry, c = this.control.layer.features, d, e = c.length - 1; 0 <= e; --e)
              if (((d = c[e].geometry), (d instanceof OpenLayers.Geometry.Polygon || d instanceof OpenLayers.Geometry.MultiPolygon) && d.intersects(b))) {
                  b = c[e];
                  this.control.layer.removeFeatures([b], { silent: !0 });
                  this.control.layer.events.registerPriority("sketchcomplete", this, this.finalizeInteriorRing);
                  this.control.layer.events.registerPriority("sketchmodified", this, this.enforceTopology);
                  b.geometry.addComponent(this.line.geometry);
                  this.polygon = b;
                  this.drawingHole = !0;
                  break;
              }
      OpenLayers.Handler.Path.prototype.addPoint.apply(this, arguments);
  },
  getCurrentPointIndex: function () {
      return this.line.geometry.components.length - 2;
  },
  enforceTopology: function (a) {
      a = a.vertex;
      var b = this.line.geometry.components;
      this.polygon.geometry.intersects(a) || ((b = b[b.length - 3]), (a.x = b.x), (a.y = b.y));
  },
  finishGeometry: function () {
      this.line.geometry.removeComponent(this.line.geometry.components[this.line.geometry.components.length - 2]);
      this.removePoint();
      this.finalize();
  },
  finalizeInteriorRing: function () {
      var a = this.line.geometry,
          b = 0 !== a.getArea();
      if (b) {
          for (var c = this.polygon.geometry.components, d = c.length - 2; 0 <= d; --d)
              if (a.intersects(c[d])) {
                  b = !1;
                  break;
              }
          if (b)
              a: for (d = c.length - 2; 0 < d; --d)
                  for (var e = c[d].components, f = 0, g = e.length; f < g; ++f)
                      if (a.containsPoint(e[f])) {
                          b = !1;
                          break a;
                      }
      }
      b ? this.polygon.state !== OpenLayers.State.INSERT && (this.polygon.state = OpenLayers.State.UPDATE) : this.polygon.geometry.removeComponent(a);
      this.restoreFeature();
      return !1;
  },
  cancel: function () {
      this.drawingHole && (this.polygon.geometry.removeComponent(this.line.geometry), this.restoreFeature(!0));
      return OpenLayers.Handler.Path.prototype.cancel.apply(this, arguments);
  },
  restoreFeature: function (a) {
      this.control.layer.events.unregister("sketchcomplete", this, this.finalizeInteriorRing);
      this.control.layer.events.unregister("sketchmodified", this, this.enforceTopology);
      this.layer.removeFeatures([this.polygon], { silent: !0 });
      this.control.layer.addFeatures([this.polygon], { silent: !0 });
      this.drawingHole = !1;
      a || this.control.layer.events.triggerEvent("sketchcomplete", { feature: this.polygon });
  },
  destroyFeature: function (a) {
      OpenLayers.Handler.Path.prototype.destroyFeature.call(this, a);
      this.polygon = null;
  },
  drawFeature: function () {
      this.layer.drawFeature(this.polygon, this.style);
      this.layer.drawFeature(this.point, this.style);
  },
  getSketch: function () {
      return this.polygon;
  },
  getGeometry: function () {
      var a = this.polygon && this.polygon.geometry;
      a && this.multi && (a = new OpenLayers.Geometry.MultiPolygon([a]));
      return a;
  },
  CLASS_NAME: "OpenLayers.Handler.Polygon",
});
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()]);
      var c = [
          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 } }),
      ];
      this.addControls(c);
  },
  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();
      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"));
      var b = { filter: this.createFilter() };
      this.layer.events.triggerEvent("loadstart", b);
      this.response = this.layer.protocol.read(OpenLayers.Util.applyDefaults({ filter: b.filter, 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.success()) {
          var b = a.features;
          if (b && 0 < b.length) {
              var c = this.layer.projection,
                  d = this.layer.map.getProjectionObject();
              if (!d.equals(c)) for (var e, f = 0, g = b.length; f < g; ++f) (e = b[f].geometry) && e.transform(c, d);
              this.layer.addFeatures(b);
          }
      } else this.bounds = null;
      this.response = null;
      this.layer.events.triggerEvent("loadend", { response: a });
  },
  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) {
      a = this.adjustBounds(a);
      var 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) {
  a = OpenLayers.Util.applyDefaults(a, OpenLayers.Protocol.CSW.DEFAULTS);
  var 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) {
      if (!("layer" in b)) throw Error("Missing property 'layer' in configuration.");
      for (var c = a.contents, d, e = 0, f = c.layers.length; e < f; ++e)
          if (c.layers[e].identifier === b.layer) {
              d = c.layers[e];
              break;
          }
      if (!d) throw Error("Layer not found");
      var g = b.format;
      !g && d.formats && d.formats.length && (g = d.formats[0]);
      var h;
      b.matrixSet ? (h = c.tileMatrixSets[b.matrixSet]) : 1 <= d.tileMatrixSetLinks.length && (h = c.tileMatrixSets[d.tileMatrixSetLinks[0].tileMatrixSet]);
      if (!h) throw Error("matrixSet not found");
      for (var k, e = 0, f = d.styles.length; e < f && ((k = d.styles[e]), !k.isDefault); ++e);
      c = b.requestEncoding;
      if (!c && ((c = "KVP"), a.operationsMetadata.GetTile.dcp.http)) {
          var l = a.operationsMetadata.GetTile.dcp.http;
          l.get[0].constraints && ((l = l.get[0].constraints.GetEncoding.allowedValues), l.KVP || (!l.REST && !l.RESTful) || (c = "REST"));
      }
      var l = [],
          m = b.params || {};
      delete b.params;
      for (var n = 0, p = d.dimensions.length; n < p; n++) {
          var q = d.dimensions[n];
          l.push(q.identifier);
          m.hasOwnProperty(q.identifier) || (m[q.identifier] = q["default"]);
      }
      var n = b.projection || h.supportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, "$1:$3"),
          p = b.units || ("EPSG:4326" === n ? "degrees" : "m"),
          q = [],
          r;
      for (r in h.matrixIds) h.matrixIds.hasOwnProperty(r) && q.push((2.8e-4 * h.matrixIds[r].scaleDenominator) / OpenLayers.METERS_PER_INCH / OpenLayers.INCHES_PER_UNIT[p]);
      if ("REST" === c && d.resourceUrls) {
          r = [];
          for (var f = 0, s = d.resourceUrls.length; f < s; ++f) (e = d.resourceUrls[f]), e.format === g && "tile" === e.resourceType && r.push(e.template);
      } else {
          s = a.operationsMetadata.GetTile.dcp.http.get;
          r = [];
          for (var t, e = 0, f = s.length; e < f; e++) (t = s[e].constraints), (!t || (t && t.GetEncoding.allowedValues[c])) && r.push(s[e].url);
      }
      return new OpenLayers.Layer.WMTS(
          OpenLayers.Util.applyDefaults(b, {
              url: r,
              requestEncoding: c,
              name: d.title,
              style: k.identifier,
              format: g,
              matrixIds: h.matrixIds,
              matrixSet: h.identifier,
              projection: n,
              units: p,
              resolutions: !1 === b.isBaseLayer ? void 0 : q,
              serverResolutions: q,
              tileFullExtent: h.bounds,
              dimensions: l,
              params: m,
          })
      );
  },
  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)
          : ((a = this.map.getCenter()),
            (b = document.createElement("div")),
            (b.className = "olForeignContainer"),
            (b.style.width = "100%"),
            (b.style.height = "100%"),
            (a = new google.maps.Map(b, {
                center: a ? new google.maps.LatLng(a.lat, a.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 = document.createElement("div")),
            (b.style.width = "100%"),
            (b.style.height = "100%"),
            a.controls[google.maps.ControlPosition.TOP_LEFT].push(b),
            (b = { googleControl: b, mapObject: a, count: 1 }),
            (OpenLayers.Layer.Google.cache[this.map.id] = b));
      this.mapObject = a;
      this.setGMapVisibility(this.visibility);
  },
  onMapResize: function () {
      this.visibility && google.maps.event.trigger(this.mapObject, "resize");
  },
  setGMapVisibility: function (a) {
      var b = OpenLayers.Layer.Google.cache[this.map.id],
          c = this.map;
      if (b) {
          for (var d = this.type, e = c.layers, f, g = e.length - 1; 0 <= g; --g)
              if (((f = e[g]), f instanceof OpenLayers.Layer.Google && !0 === f.visibility && !0 === f.inRange)) {
                  d = f.type;
                  a = !0;
                  break;
              }
          e = this.mapObject.getDiv();
          if (!0 === a) {
              if (e.parentNode !== c.div)
                  if (b.rendered) c.div.appendChild(e), b.googleControl.appendChild(c.viewPortDiv), google.maps.event.trigger(this.mapObject, "resize");
                  else {
                      var h = this;
                      google.maps.event.addListenerOnce(this.mapObject, "tilesloaded", function () {
                          b.rendered = !0;
                          h.setGMapVisibility(h.getVisibility());
                          h.moveTo(h.map.getCenter());
                      });
                  }
              this.mapObject.setMapTypeId(d);
          } else b.googleControl.hasChildNodes() && (c.div.appendChild(c.viewPortDiv), c.div.removeChild(e));
      }
  },
  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);
      var 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);
  },
};
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);
          },
          LiteralOutput: function (a, b) {
              b.literalOutput = {};
              this.readChildNodes(a, b.literalOutput);
          },
          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.WKT = OpenLayers.Class(OpenLayers.Format, {
  initialize: function (a) {
      this.regExes = { typeStr: /^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/, spaces: /\s+/, parenComma: /\)\s*,\s*\(/, doubleParenComma: /\)\s*\)\s*,\s*\(\s*\(/, trimParens: /^\s*\(?(.*?)\)?\s*$/ };
      OpenLayers.Format.prototype.initialize.apply(this, [a]);
  },
  read: function (a) {
      var b, c;
      a = a.replace(/[\n\r]/g, " ");
      if ((c = this.regExes.typeStr.exec(a)))
          if (((a = c[1].toLowerCase()), (c = c[2]), this.parse[a] && (b = this.parse[a].apply(this, [c])), this.internalProjection && this.externalProjection))
              if (b && "OpenLayers.Feature.Vector" == b.CLASS_NAME) b.geometry.transform(this.externalProjection, this.internalProjection);
              else if (b && "geometrycollection" != a && "object" == typeof b) for (a = 0, c = b.length; a < c; a++) b[a].geometry.transform(this.externalProjection, this.internalProjection);
      return b;
  },
  write: function (a) {
      var b, c;
      a.constructor == Array ? (c = !0) : ((a = [a]), (c = !1));
      var d = [];
      c && d.push("GEOMETRYCOLLECTION(");
      for (var e = 0, f = a.length; e < f; ++e) c && 0 < e && d.push(","), (b = a[e].geometry), d.push(this.extractGeometry(b));
      c && d.push(")");
      return d.join("");
  },
  extractGeometry: function (a) {
      var b = a.CLASS_NAME.split(".")[2].toLowerCase();
      if (!this.extract[b]) return null;
      this.internalProjection && this.externalProjection && ((a = a.clone()), a.transform(this.internalProjection, this.externalProjection));
      return ("collection" == b ? "GEOMETRYCOLLECTION" : b.toUpperCase()) + "(" + this.extract[b].apply(this, [a]) + ")";
  },
  extract: {
      point: function (a) {
          return a.x + " " + a.y;
      },
      multipoint: function (a) {
          for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push("(" + this.extract.point.apply(this, [a.components[c]]) + ")");
          return b.join(",");
      },
      linestring: function (a) {
          for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push(this.extract.point.apply(this, [a.components[c]]));
          return b.join(",");
      },
      multilinestring: function (a) {
          for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push("(" + this.extract.linestring.apply(this, [a.components[c]]) + ")");
          return b.join(",");
      },
      polygon: function (a) {
          for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push("(" + this.extract.linestring.apply(this, [a.components[c]]) + ")");
          return b.join(",");
      },
      multipolygon: function (a) {
          for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push("(" + this.extract.polygon.apply(this, [a.components[c]]) + ")");
          return b.join(",");
      },
      collection: function (a) {
          for (var b = [], c = 0, d = a.components.length; c < d; ++c) b.push(this.extractGeometry.apply(this, [a.components[c]]));
          return b.join(",");
      },
  },
  parse: {
      point: function (a) {
          a = OpenLayers.String.trim(a).split(this.regExes.spaces);
          return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(a[0], a[1]));
      },
      multipoint: function (a) {
          for (var b = OpenLayers.String.trim(a).split(","), c = [], d = 0, e = b.length; d < e; ++d) (a = b[d].replace(this.regExes.trimParens, "$1")), c.push(this.parse.point.apply(this, [a]).geometry);
          return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.MultiPoint(c));
      },
      linestring: function (a) {
          a = OpenLayers.String.trim(a).split(",");
          for (var b = [], c = 0, d = a.length; c < d; ++c) b.push(this.parse.point.apply(this, [a[c]]).geometry);
          return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(b));
      },
      multilinestring: function (a) {
          for (var b = OpenLayers.String.trim(a).split(this.regExes.parenComma), c = [], d = 0, e = b.length; d < e; ++d) (a = b[d].replace(this.regExes.trimParens, "$1")), c.push(this.parse.linestring.apply(this, [a]).geometry);
          return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.MultiLineString(c));
      },
      polygon: function (a) {
          var b;
          a = OpenLayers.String.trim(a).split(this.regExes.parenComma);
          for (var c = [], d = 0, e = a.length; d < e; ++d) (b = a[d].replace(this.regExes.trimParens, "$1")), (b = this.parse.linestring.apply(this, [b]).geometry), (b = new OpenLayers.Geometry.LinearRing(b.components)), c.push(b);
          return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon(c));
      },
      multipolygon: function (a) {
          for (var b = OpenLayers.String.trim(a).split(this.regExes.doubleParenComma), c = [], d = 0, e = b.length; d < e; ++d) (a = b[d].replace(this.regExes.trimParens, "$1")), c.push(this.parse.polygon.apply(this, [a]).geometry);
          return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.MultiPolygon(c));
      },
      geometrycollection: function (a) {
          a = a.replace(/,\s*([A-Za-z])/g, "|$1");
          a = OpenLayers.String.trim(a).split("|");
          for (var b = [], c = 0, d = a.length; c < d; ++c) b.push(OpenLayers.Format.WKT.prototype.read.apply(this, [a[c]]));
          return b;
      },
  },
  CLASS_NAME: "OpenLayers.Format.WKT",
});
OpenLayers.WPSProcess = OpenLayers.Class({
  client: null,
  server: null,
  identifier: null,
  description: null,
  localWPS: "http://geoserver/wps",
  formats: null,
  chained: 0,
  executeCallbacks: null,
  initialize: function (a) {
      OpenLayers.Util.extend(this, a);
      this.executeCallbacks = [];
      this.formats = { "application/wkt": new OpenLayers.Format.WKT(), "application/json": new OpenLayers.Format.GeoJSON() };
  },
  describe: function (a) {
      a = a || {};
      if (!this.description)
          this.client.describeProcess(
              this.server,
              this.identifier,
              function (b) {
                  this.description || this.parseDescription(b);
                  a.callback && a.callback.call(a.scope, this.description);
              },
              this
          );
      else if (a.callback) {
          var b = this.description;
          window.setTimeout(function () {
              a.callback.call(a.scope, b);
          }, 0);
      }
  },
  configure: function (a) {
      this.describe({
          callback: function () {
              var b = this.description,
                  c = a.inputs,
                  d,
                  e,
                  f;
              e = 0;
              for (f = b.dataInputs.length; e < f; ++e) (d = b.dataInputs[e]), this.setInputData(d, c[d.identifier]);
              a.callback && a.callback.call(a.scope);
          },
          scope: this,
      });
      return this;
  },
  execute: function (a) {
      this.configure({
          inputs: a.inputs,
          callback: function () {
              var b = this,
                  c = this.getOutputIndex(b.description.processOutputs, a.output);
              b.setResponseForm({ outputIndex: c });
              (function e() {
                  OpenLayers.Util.removeItem(b.executeCallbacks, e);
                  0 !== b.chained
                      ? b.executeCallbacks.push(e)
                      : OpenLayers.Request.POST({
                            url: b.client.servers[b.server].url,
                            data: new OpenLayers.Format.WPSExecute().write(b.description),
                            success: function (e) {
                                var g = b.findMimeType(b.description.processOutputs[c].complexOutput.supported.formats);
                                e = b.formats[g].read(e.responseText);
                                e instanceof OpenLayers.Feature.Vector && (e = [e]);
                                a.success && ((g = {}), (g[a.output || "result"] = e), a.success.call(a.scope, g));
                            },
                            scope: b,
                        });
              })();
          },
          scope: this,
      });
  },
  output: function (a) {
      return new OpenLayers.WPSProcess.ChainLink({ process: this, output: a });
  },
  parseDescription: function (a) {
      a = this.client.servers[this.server];
      this.description = new OpenLayers.Format.WPSDescribeProcess().read(a.processDescription[this.identifier]).processDescriptions[this.identifier];
  },
  setInputData: function (a, b) {
      delete a.data;
      delete a.reference;
      if (b instanceof OpenLayers.WPSProcess.ChainLink)
          ++this.chained,
              (a.reference = { method: "POST", href: b.process.server === this.server ? this.localWPS : this.client.servers[b.process.server].url }),
              b.process.describe({
                  callback: function () {
                      --this.chained;
                      this.chainProcess(a, b);
                  },
                  scope: this,
              });
      else {
          a.data = {};
          var c = a.complexData;
          c ? ((c = this.findMimeType(c.supported.formats)), (a.data.complexData = { mimeType: c, value: this.formats[c].write(this.toFeatures(b)) })) : (a.data.literalData = { value: b });
      }
  },
  setResponseForm: function (a) {
      a = a || {};
      var b = this.description.processOutputs[a.outputIndex || 0];
      this.description.responseForm = { rawDataOutput: { identifier: b.identifier, mimeType: this.findMimeType(b.complexOutput.supported.formats, a.supportedFormats) } };
  },
  getOutputIndex: function (a, b) {
      var c;
      if (b)
          for (var d = a.length - 1; 0 <= d; --d) {
              if (a[d].identifier === b) {
                  c = d;
                  break;
              }
          }
      else c = 0;
      return c;
  },
  chainProcess: function (a, b) {
      var c = this.getOutputIndex(b.process.description.processOutputs, b.output);
      a.reference.mimeType = this.findMimeType(a.complexData.supported.formats, b.process.description.processOutputs[c].complexOutput.supported.formats);
      var d = {};
      d[a.reference.mimeType] = !0;
      b.process.setResponseForm({ outputIndex: c, supportedFormats: d });
      for (a.reference.body = b.process.description; 0 < this.executeCallbacks.length; ) this.executeCallbacks[0]();
  },
  toFeatures: function (a) {
      var b = OpenLayers.Util.isArray(a);
      b || (a = [a]);
      for (var c = Array(a.length), d, e = 0, f = a.length; e < f; ++e) (d = a[e]), (c[e] = d instanceof OpenLayers.Feature.Vector ? d : new OpenLayers.Feature.Vector(d));
      return b ? c : c[0];
  },
  findMimeType: function (a, b) {
      b = b || this.formats;
      for (var c in a) if (c in b) return c;
  },
  CLASS_NAME: "OpenLayers.WPSProcess",
});
OpenLayers.WPSProcess.ChainLink = OpenLayers.Class({
  process: null,
  output: null,
  initialize: function (a) {
      OpenLayers.Util.extend(this, a);
  },
  CLASS_NAME: "OpenLayers.WPSProcess.ChainLink",
});
OpenLayers.WPSClient = OpenLayers.Class({
  servers: null,
  version: "1.0.0",
  lazy: !1,
  events: null,
  initialize: function (a) {
      OpenLayers.Util.extend(this, a);
      this.events = new OpenLayers.Events(this);
      this.servers = {};
      for (var b in a.servers) this.servers[b] = "string" == typeof a.servers[b] ? { url: a.servers[b], version: this.version, processDescription: {} } : a.servers[b];
  },
  execute: function (a) {
      this.getProcess(a.server, a.process).execute({ inputs: a.inputs, success: a.success, scope: a.scope });
  },
  getProcess: function (a, b) {
      var c = new OpenLayers.WPSProcess({ client: this, server: a, identifier: b });
      this.lazy || c.describe();
      return c;
  },
  describeProcess: function (a, b, c, d) {
      var e = this.servers[a];
      e.processDescription[b]
          ? window.setTimeout(function () {
                c.call(d, e.processDescription[b]);
            }, 0)
          : b in e.processDescription
          ? this.events.register("describeprocess", this, function g(a) {
                a.identifier === b && (this.events.unregister("describeprocess", this, g), c.call(d, a.raw));
            })
          : ((e.processDescription[b] = null),
            OpenLayers.Request.GET({
                url: e.url,
                params: { SERVICE: "WPS", VERSION: e.version, REQUEST: "DescribeProcess", IDENTIFIER: b },
                success: function (a) {
                    e.processDescription[b] = a.responseText;
                    this.events.triggerEvent("describeprocess", { identifier: b, raw: a.responseText });
                },
                scope: this,
            }));
  },
  destroy: function () {
      this.events.destroy();
      this.servers = this.events = null;
  },
  CLASS_NAME: "OpenLayers.WPSClient",
});
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,
                  },
              });
              (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",
}); /*
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.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) {
      a = a.split("\n");
      for (var 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, k = !1, l = 0; l < e.length; l++)
                      if (e[l])
                          if ("point" == b[l]) (k = e[l].split(",")), (f.y = parseFloat(k[0])), (f.x = parseFloat(k[1])), (k = !0);
                          else if ("lat" == b[l]) (f.y = parseFloat(e[l])), (k = !0);
                          else if ("lon" == b[l]) (f.x = parseFloat(e[l])), (k = !0);
                          else if ("title" == b[l]) g.title = e[l];
                          else if ("image" == b[l] || ("icon" == b[l] && h)) h.externalGraphic = e[l];
                          else if ("iconSize" == b[l] && h) {
                              var m = e[l].split(",");
                              h.graphicWidth = parseFloat(m[0]);
                              h.graphicHeight = parseFloat(m[1]);
                          } else
                              "iconOffset" == b[l] && h
                                  ? ((m = e[l].split(",")), (h.graphicXOffset = parseFloat(m[0])), (h.graphicYOffset = parseFloat(m[1])))
                                  : "description" == b[l]
                                  ? (g.description = e[l])
                                  : "overflow" == b[l]
                                  ? (g.overflow = e[l])
                                  : (g[b[l]] = e[l]);
                  k && (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 (a) {
                  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) {
      a = a.responseText;
      var b = {};
      OpenLayers.Util.extend(b, this.formatOptions);
      this.map && !this.projection.equals(this.map.getProjectionObject()) && ((b.externalProjection = this.projection), (b.internalProjection = this.map.getProjectionObject()));
      a = new OpenLayers.Format.Text(b).read(a);
      for (var 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 ? null : this;
      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.Handler.RegularPolygon = OpenLayers.Class(OpenLayers.Handler.Drag, {
  sides: 4,
  radius: null,
  snapAngle: null,
  snapToggle: "shiftKey",
  layerOptions: null,
  persist: !1,
  irregular: !1,
  citeCompliant: !1,
  angle: null,
  fixedRadius: !1,
  feature: null,
  layer: null,
  origin: null,
  initialize: function (a, b, c) {
      (c && c.layerOptions && c.layerOptions.styleMap) || (this.style = OpenLayers.Util.extend(OpenLayers.Feature.Vector.style["default"], {}));
      OpenLayers.Handler.Drag.prototype.initialize.apply(this, [a, b, c]);
      this.options = c ? c : {};
  },
  setOptions: function (a) {
      OpenLayers.Util.extend(this.options, a);
      OpenLayers.Util.extend(this, a);
  },
  activate: function () {
      var a = !1;
      OpenLayers.Handler.Drag.prototype.activate.apply(this, arguments) &&
          ((a = OpenLayers.Util.extend({ displayInLayerSwitcher: !1, calculateInRange: OpenLayers.Function.True, wrapDateLine: this.citeCompliant }, this.layerOptions)),
          (this.layer = new OpenLayers.Layer.Vector(this.CLASS_NAME, a)),
          this.map.addLayer(this.layer),
          (a = !0));
      return a;
  },
  deactivate: function () {
      var a = !1;
      OpenLayers.Handler.Drag.prototype.deactivate.apply(this, arguments) &&
          (this.dragging && this.cancel(), null != this.layer.map && (this.layer.destroy(!1), this.feature && this.feature.destroy()), (this.feature = this.layer = null), (a = !0));
      return a;
  },
  down: function (a) {
      this.fixedRadius = !!this.radius;
      a = this.layer.getLonLatFromViewPortPx(a.xy);
      this.origin = new OpenLayers.Geometry.Point(a.lon, a.lat);
      if (!this.fixedRadius || this.irregular) this.radius = this.map.getResolution();
      this.persist && this.clear();
      this.feature = new OpenLayers.Feature.Vector();
      this.createGeometry();
      this.callback("create", [this.origin, this.feature]);
      this.layer.addFeatures([this.feature], { silent: !0 });
      this.layer.drawFeature(this.feature, this.style);
  },
  move: function (a) {
      var b = this.layer.getLonLatFromViewPortPx(a.xy),
          b = new OpenLayers.Geometry.Point(b.lon, b.lat);
      this.irregular
          ? ((a = (Math.sqrt(2) * Math.abs(b.y - this.origin.y)) / 2), (this.radius = Math.max(this.map.getResolution() / 2, a)))
          : this.fixedRadius
          ? (this.origin = b)
          : (this.calculateAngle(b, a), (this.radius = Math.max(this.map.getResolution() / 2, b.distanceTo(this.origin))));
      this.modifyGeometry();
      if (this.irregular) {
          a = b.x - this.origin.x;
          var b = b.y - this.origin.y,
              c;
          c = 0 == b ? a / (this.radius * Math.sqrt(2)) : a / b;
          this.feature.geometry.resize(1, this.origin, c);
          this.feature.geometry.move(a / 2, b / 2);
      }
      this.layer.drawFeature(this.feature, this.style);
  },
  up: function (a) {
      this.finalize();
      this.start == this.last && this.callback("done", [a.xy]);
  },
  out: function (a) {
      this.finalize();
  },
  createGeometry: function () {
      this.angle = Math.PI * (1 / this.sides - 0.5);
      this.snapAngle && (this.angle += this.snapAngle * (Math.PI / 180));
      this.feature.geometry = OpenLayers.Geometry.Polygon.createRegularPolygon(this.origin, this.radius, this.sides, this.snapAngle);
  },
  modifyGeometry: function () {
      var a,
          b,
          c = this.feature.geometry.components[0];
      c.components.length != this.sides + 1 && (this.createGeometry(), (c = this.feature.geometry.components[0]));
      for (var d = 0; d < this.sides; ++d) (b = c.components[d]), (a = this.angle + (2 * d * Math.PI) / this.sides), (b.x = this.origin.x + this.radius * Math.cos(a)), (b.y = this.origin.y + this.radius * Math.sin(a)), b.clearBounds();
  },
  calculateAngle: function (a, b) {
      var c = Math.atan2(a.y - this.origin.y, a.x - this.origin.x);
      if (this.snapAngle && this.snapToggle && !b[this.snapToggle]) {
          var d = (Math.PI / 180) * this.snapAngle;
          this.angle = Math.round(c / d) * d;
      } else this.angle = c;
  },
  cancel: function () {
      this.callback("cancel", null);
      this.finalize();
  },
  finalize: function () {
      this.origin = null;
      this.radius = this.options.radius;
  },
  clear: function () {
      this.layer && (this.layer.renderer.clear(), this.layer.destroyFeatures());
  },
  callback: function (a, b) {
      this.callbacks[a] && this.callbacks[a].apply(this.control, [this.feature.geometry.clone()]);
      this.persist || ("done" != a && "cancel" != a) || this.clear();
  },
  CLASS_NAME: "OpenLayers.Handler.RegularPolygon",
});
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,
  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 k = this.selectionSymbolizer,
              l = c[f];
          0 <= l.type.indexOf("Polygon")
              ? (k = { Polygon: this.selectionSymbolizer.Polygon })
              : 0 <= l.type.indexOf("LineString")
              ? (k = { Line: this.selectionSymbolizer.Line })
              : 0 <= l.type.indexOf("Point") && (k = { Point: this.selectionSymbolizer.Point });
          d.namedLayers[h].userStyles.push({ name: "default", rules: [new OpenLayers.Rule({ symbolizer: k, 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;
      (c && c.documentElement) || (c = a.responseText);
      a = b.read(c);
      for (var 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;
              (c && c.documentElement) || (c = a.responseText);
              a = b.read(c);
              this.control.wfsCache[this.layer.id] = a;
              this.control._queue && this.control.applySelection();
          },
          scope: this,
      });
  },
  getGeometryAttributes: function (a) {
      var b = [];
      a = this.wfsCache[a.id];
      for (var 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],
                  k = h.type;
              (0 <= k.indexOf("LineString") || 0 <= k.indexOf("GeometryAssociationType") || 0 <= k.indexOf("GeometryPropertyType") || 0 <= k.indexOf("Point") || 0 <= k.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 k = e[g];
                  if (null !== k) {
                      if (!(a instanceof OpenLayers.Geometry)) {
                          var l = this.map.getLonLatFromPixel(a.xy);
                          a = new OpenLayers.Geometry.Point(l.lon, l.lat);
                      }
                      k = this.createFilter(k, a);
                      null !== k && f.push(k);
                  }
              }
              g = this.createSelectionLayer(d);
              this.events.triggerEvent("selected", { layer: d, filters: f });
              d = this.createSLD(d, f, e);
              g.mergeNewParams({ SLD_BODY: d });
              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 || 1e-6) * a.km * OpenLayers.DOTS_PER_INCH;
      } else a = this.map.getScale();
      a && ((a = 9500 <= a && 95e4 >= a ? Math.round(a / 1e3) + "K" : 95e4 <= a ? Math.round(a / 1e6) + "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;
  },
  CLASS_NAME: "OpenLayers.Layer.MapGuide",
});
OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, {
  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.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);
      OpenLayers.Popup.prototype.moveTo.call(this, this.calculateNewPx(a));
      this.relativePosition != b && this.updateRelativePosition();
  },
  setSize: function (a) {
      OpenLayers.Popup.prototype.setSize.apply(this, arguments);
      if (this.lonlat && this.map) {
          var b = this.map.getLayerPxFromLonLat(this.lonlat);
          this.moveTo(b);
      }
  },
  calculateRelativePosition: function (a) {
      a = this.map.getLonLatFromLayerPx(a);
      a = this.map.getExtent().determineQuadrant(a);
      return OpenLayers.Bounds.oppositeQuadrant(a);
  },
  updateRelativePosition: function () {},
  calculateNewPx: function (a) {
      a = a.offset(this.anchor.offset);
      var 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",
});
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 (a) {
              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 (a) {},
  setBorder: function () {},
  setOpacity: function (a) {},
  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,
                  k = isNaN(c.size.w) ? this.size.w - (g + e) : c.size.w,
                  l = isNaN(c.size.h) ? this.size.h - (f + h) : c.size.h;
              d.div.style.width = (0 > k ? 0 : k) + "px";
              d.div.style.height = (0 > l ? 0 : l) + "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,
  blankImageUrl: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAQAIBRAA7",
  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.frame.removeChild(this.frame.firstChild);
      }
      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;
      if (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);
      else {
          if (this.started) return !1;
          this.started = !1;
          this.last = this.start = null;
      }
      OpenLayers.Event.preventDefault(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);
      } else if (this.started) return !1;
      return !0;
  },
  touchend: function (a) {
      return this.started && !OpenLayers.Event.isMultiTouch(a) ? ((this.pinching = this.started = !1), this.callback("done", [a, this.start, this.last]), (this.last = this.start = null), !1) : !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.olClientX - a.olClientX, 2) + Math.pow(b.olClientY - a.olClientY, 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(), this.layer.events.un({ visibilitychanged: this.reset, scope: this }));
      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));
      this.params.TRANSPARENT &&
          "true" == this.params.TRANSPARENT.toString().toLowerCase() &&
          ((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) {
      a = this.adjustBounds(a);
      var 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,
  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) {
      a = this.pixelToBounds(a.xy);
      this.request(a, { 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) {
      b = b || {};
      var 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) {
          b = new OpenLayers.Geometry.Point(b.lon, b.lat);
          for (var 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) {
          d = d || {};
          var 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) for (e = 0, 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.MousePosition = OpenLayers.Class(OpenLayers.Control, {
  autoActivate: !0,
  element: null,
  prefix: "",
  separator: ", ",
  suffix: "",
  numDigits: 5,
  granularity: 10,
  emptyString: null,
  lastXy: null,
  displayProjection: null,
  destroy: function () {
      this.deactivate();
      OpenLayers.Control.prototype.destroy.apply(this, arguments);
  },
  activate: function () {
      return OpenLayers.Control.prototype.activate.apply(this, arguments) ? (this.map.events.register("mousemove", this, this.redraw), this.map.events.register("mouseout", this, this.reset), this.redraw(), !0) : !1;
  },
  deactivate: function () {
      return OpenLayers.Control.prototype.deactivate.apply(this, arguments) ? (this.map.events.unregister("mousemove", this, this.redraw), this.map.events.unregister("mouseout", this, this.reset), (this.element.innerHTML = ""), !0) : !1;
  },
  draw: function () {
      OpenLayers.Control.prototype.draw.apply(this, arguments);
      this.element || ((this.div.left = ""), (this.div.top = ""), (this.element = this.div));
      return this.div;
  },
  redraw: function (a) {
      var b;
      if (null == a) this.reset();
      else if (null == this.lastXy || Math.abs(a.xy.x - this.lastXy.x) > this.granularity || Math.abs(a.xy.y - this.lastXy.y) > this.granularity) this.lastXy = a.xy;
      else if ((b = this.map.getLonLatFromPixel(a.xy)))
          this.displayProjection && b.transform(this.map.getProjectionObject(), this.displayProjection), (this.lastXy = a.xy), (a = this.formatOutput(b)), a != this.element.innerHTML && (this.element.innerHTML = a);
  },
  reset: function (a) {
      null != this.emptyString && (this.element.innerHTML = this.emptyString);
  },
  formatOutput: function (a) {
      var b = parseInt(this.numDigits);
      return this.prefix + a.lon.toFixed(b) + this.separator + a.lat.toFixed(b) + this.suffix;
  },
  CLASS_NAME: "OpenLayers.Control.MousePosition",
});
OpenLayers.Control.Geolocate = OpenLayers.Class(OpenLayers.Control, {
  geolocation: null,
  available: "geolocation" in navigator,
  bind: !0,
  watch: !1,
  geolocationOptions: null,
  destroy: function () {
      this.deactivate();
      OpenLayers.Control.prototype.destroy.apply(this, arguments);
  },
  activate: function () {
      this.available && !this.geolocation && (this.geolocation = navigator.geolocation);
      return this.geolocation
          ? 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
          : (this.events.triggerEvent("locationuncapable"), !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 = !1;
                      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 = !1;
                      this.events.triggerEvent("loadend");
                      200 === a.status && 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.json.grid[Math.floor(b / d)].charCodeAt(Math.floor(a / d)),
              d = this.indexFromCharCode(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.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) {
      b = OpenLayers.Util.applyDefaults(b, this.options);
      var 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) {
      b = b || {};
      var c = b.url || a.url || this.options.url + "/" + a.fid;
      b = OpenLayers.Util.applyDefaults(b, this.options);
      var 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) {
      b = b || {};
      var c = b.url || a.url || this.options.url + "/" + a.fid;
      b = OpenLayers.Util.applyDefaults(b, this.options);
      var 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;
      (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;
          r.insertIds = c;
          d.apply(this, [a]);
      }
      function d(a) {
          this.callUserCallback(a, b);
          q = q && a.success();
          f++;
          f >= p && b.callback && ((r.code = q ? OpenLayers.Protocol.Response.SUCCESS : OpenLayers.Protocol.Response.FAILURE), b.callback.apply(b.scope, [r]));
      }
      b = OpenLayers.Util.applyDefaults(b, this.options);
      var e = [],
          f = 0,
          g = {};
      g[OpenLayers.State.INSERT] = [];
      g[OpenLayers.State.UPDATE] = [];
      g[OpenLayers.State.DELETE] = [];
      for (var h, k, l = [], m = 0, n = a.length; m < n; ++m) if (((h = a[m]), (k = g[h.state]))) k.push(h), l.push(h);
      var p = (0 < g[OpenLayers.State.INSERT].length ? 1 : 0) + g[OpenLayers.State.UPDATE].length + g[OpenLayers.State.DELETE].length,
          q = !0,
          r = new OpenLayers.Protocol.Response({ reqFeatures: l });
      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 (m = h.length - 1; 0 <= m; --m) e.push(this.update(h[m], OpenLayers.Util.applyDefaults({ callback: d, scope: this }, b.update)));
      h = g[OpenLayers.State.DELETE];
      for (m = h.length - 1; 0 <= m; --m) e.push(this["delete"](h[m], 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, featuresremoved: this.clearCache, 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, featuresremoved: this.clearCache, 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.clustering || (this.features = null);
  },
  cluster: function (a) {
      if ((!a || a.zoomChanged) && this.features && ((a = this.layer.map.getResolution()), a != this.resolution || !this.clustersExist())) {
          this.resolution = a;
          a = [];
          for (var 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.clustering = !0;
          this.layer.removeAllFeatures();
          this.clustering = !1;
          if (0 < a.length) {
              if (1 < this.threshold) for (b = a.slice(), a = [], e = 0, 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 (a) {
      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) {
  a = OpenLayers.Util.applyDefaults(a, OpenLayers.Protocol.SOS.DEFAULTS);
  var 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, {
  regExes: { trimSpace: /^\s*|\s*$/g },
  namespaces: { xsd: "http://www.w3.org/2001/XMLSchema" },
  readers: {
      xsd: {
          schema: function (a, b) {
              var c = [],
                  d = {},
                  e,
                  f;
              this.readChildNodes(a, { complexTypes: c, customTypes: d });
              var g = a.attributes,
                  h,
                  k;
              e = 0;
              for (f = g.length; e < f; ++e) (h = g[e]), (k = h.name), 0 === k.indexOf("xmlns") ? this.setNamespace(k.split(":")[1] || "", h.value) : (b[k] = h.value);
              b.featureTypes = c;
              b.targetPrefix = this.namespaceAlias[b.targetNamespace];
              e = 0;
              for (f = c.length; e < f; ++e) (g = c[e]), (h = d[g.typeName]), d[g.typeName] && (g.typeName = h.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) {
              var c;
              if (b.elements) {
                  var d = {};
                  c = a.attributes;
                  for (var e, f = 0, g = c.length; f < g; ++f) (e = c[f]), (d[e.name] = e.value);
                  c = d.type;
                  c || ((c = {}), this.readChildNodes(a, c), (d.restriction = c), (d.type = c.base));
                  d.localType = (c.base || c).split(":").pop();
                  b.elements.push(d);
                  this.readChildNodes(a, d);
              }
              b.complexTypes && ((c = a.getAttribute("type")), (d = c.split(":").pop()), (b.customTypes[d] = { name: a.getAttribute("name"), type: c }));
          },
          annotation: function (a, b) {
              b.annotation = {};
              this.readChildNodes(a, b.annotation);
          },
          appinfo: function (a, b) {
              b.appinfo || (b.appinfo = []);
              b.appinfo.push(this.getChildValue(a));
          },
          documentation: function (a, b) {
              b.documentation || (b.documentation = []);
              var c = this.getChildValue(a);
              b.documentation.push({ lang: a.getAttribute("xml:lang"), textContent: c.replace(this.regExes.trimSpace, "") });
          },
          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 = {};
      if ("ExceptionReport" === a.nodeName.split(":").pop()) {
          var c = new OpenLayers.Format.OGCExceptionReport();
          b.error = c.read(a);
      } else 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"));
      a = b.length;
      for (var 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) {
          a = b.length;
          for (var 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,
  pinchOrigin: null,
  currentCenter: null,
  autoActivate: !0,
  preserveCenter: !1,
  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);
  },
  pinchStart: function (a, b) {
      var c = this.preserveCenter ? this.map.getPixelFromLonLat(this.map.getCenter()) : a.xy;
      this.currentCenter = this.pinchOrigin = c;
  },
  pinchMove: function (a, b) {
      var c = b.scale,
          d = this.map.layerContainerOriginPx,
          e = this.pinchOrigin,
          f = this.preserveCenter ? this.map.getPixelFromLonLat(this.map.getCenter()) : a.xy,
          g = Math.round(d.x + f.x - e.x + (c - 1) * (d.x - e.x)),
          d = Math.round(d.y + f.y - e.y + (c - 1) * (d.y - e.y));
      this.map.applyTransform(g, d, c);
      this.currentCenter = f;
  },
  pinchDone: function (a, b, c) {
      this.map.applyTransform();
      a = this.map.getZoomForResolution(this.map.getResolution() / c.scale, !0);
      if (a !== this.map.getZoom() || !this.currentCenter.equals(this.pinchOrigin)) {
          b = this.map.getResolutionForZoom(a);
          c = this.map.getLonLatFromPixel(this.pinchOrigin);
          var 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.zoomTo(this.map.zoom + 1, a.xy);
  },
  CLASS_NAME: "OpenLayers.Control.TouchNavigation",
});
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) {
      var b = a;
      a = "#";
      for (var 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 {
      a = 6 * (a - Math.floor(a));
      var g = a - Math.floor(a),
          h = c * (1 - b),
          k = 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 * k + 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 * k + 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 * k + 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.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);
                  },
                  TextSymbolizer: function (a, b) {
                      OpenLayers.Format.SLD.v1_0_0.prototype.readers.sld.TextSymbolizer.apply(this, arguments);
                      var c = this.multipleSymbolizers ? b.symbolizers[b.symbolizers.length - 1] : b.symbolizer.Text;
                      void 0 === c.graphic && (c.graphic = !1);
                  },
              },
              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) {
                      var b = OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld.PointSymbolizer.apply(this, arguments);
                      return this.addVendorOptions(b, a);
                  },
                  LineSymbolizer: function (a) {
                      var b = OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld.LineSymbolizer.apply(this, arguments);
                      return this.addVendorOptions(b, a);
                  },
                  PolygonSymbolizer: function (a) {
                      var b = OpenLayers.Format.SLD.v1_0_0.prototype.writers.sld.PolygonSymbolizer.apply(this, arguments);
                      return this.addVendorOptions(b, 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.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 b = a.clone();
      this.size = a.clone();
      a = new OpenLayers.Size(Math.ceil(b.w / this.standardTileSize), Math.ceil(b.h / this.standardTileSize));
      this.tierSizeInTiles = [a];
      for (this.tierImageSize = [b]; b.w > this.standardTileSize || b.h > this.standardTileSize; )
          (b = new OpenLayers.Size(Math.floor(b.w / 2), Math.floor(b.h / 2))),
              (a = new OpenLayers.Size(Math.ceil(b.w / this.standardTileSize), Math.ceil(b.h / this.standardTileSize))),
              this.tierSizeInTiles.push(a),
              this.tierImageSize.push(b);
      this.tierSizeInTiles.reverse();
      this.tierImageSize.reverse();
      this.numberOfTiers = this.tierSizeInTiles.length;
      b = [1];
      this.tileCountUpToTier = [0];
      for (a = 1; a < this.numberOfTiers; a++) b.unshift(Math.pow(2, a)), this.tileCountUpToTier.push(this.tierSizeInTiles[a - 1].w * this.tierSizeInTiles[a - 1].h + this.tileCountUpToTier[a - 1]);
      this.serverResolutions || (this.serverResolutions = b);
  },
  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) {
      a = this.adjustBounds(a);
      var b = this.getServerResolution(),
          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.getZoomForResolution(b);
      c = "TileGroup" + Math.floor((c + a * this.tierSizeInTiles[b].w + this.tileCountUpToTier[b]) / 256) + "/" + b + "-" + c + "-" + a + ".jpg";
      b = this.url;
      OpenLayers.Util.isArray(b) && (b = this.selectUrl(c, b));
      return b + c;
  },
  getImageSize: function () {
      if (0 < arguments.length) {
          var a = this.adjustBounds(arguments[0]),
              b = this.getServerResolution(),
              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.getZoomForResolution(b),
              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);
  },
  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) {
      a = this.adjustBounds(a);
      a = [a.left, a.bottom, a.right, a.top];
      var 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) {
      b = b || a._style;
      c = c || a._options;
      var e = b.fillColor,
          f = b.title || b.graphicTitle;
      f && (a.title = f);
      if ("OpenLayers.Geometry.Point" === a._geometryClass)
          if (b.externalGraphic) {
              c.isFilled = !0;
              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),
                  k = 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 - (k + 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];
      c.isFilled
          ? (d || (d = this.createNode("olv:fill", a.id + "_fill")),
            (d.opacity = b.fillOpacity),
            "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))
          : d && a.removeChild(d);
      e = b.rotation;
      if (void 0 !== e || void 0 !== a._rotation) (a._rotation = e), b.externalGraphic ? (this.graphicRotate(a, h, k, 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];
      c.isStroked
          ? (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)))
          : ((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) {
      d = d || a._style;
      var e = d.rotation || 0,
          f,
          g;
      if (d.graphicWidth && d.graphicHeight) {
          g = Math.max(d.graphicWidth, d.graphicHeight);
          f = d.graphicWidth / d.graphicHeight;
          var h = Math.round(d.graphicWidth || g * f),
              k = Math.round(d.graphicHeight || g);
          a.style.width = h + "px";
          a.style.height = k + "px";
          var l = document.getElementById(a.id + "_image");
          l || ((l = this.createNode("olv:imagedata", a.id + "_image")), a.appendChild(l));
          l.style.width = h + "px";
          l.style.height = k + "px";
          l.src = d.externalGraphic;
          l.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='', sizingMethod='scale')";
          l = (e * Math.PI) / 180;
          e = Math.sin(l);
          l = Math.cos(l);
          e = "progid:DXImageTransform.Microsoft.Matrix(M11=" + l + ",M12=" + -e + ",M21=" + e + ",M22=" + l + ",SizingMethod='auto expand')\n";
          (l = d.graphicOpacity || d.fillOpacity) && 1 != l && (e += "progid:DXImageTransform.Microsoft.BasicImage(opacity=" + l + ")\n");
          a.style.filter = e;
          e = new OpenLayers.Geometry.Point(-b, -c);
          h = new OpenLayers.Bounds(0, 0, h, k).toGeometry();
          h.rotate(d.rotation, e);
          h = h.getBounds();
          a.style.left = Math.round(parseInt(a.style.left) + h.left) + "px";
          a.style.top = Math.round(parseInt(a.style.top) - h.bottom) + "px";
      } else {
          var m = new Image();
          m.onreadystatechange = OpenLayers.Function.bind(function () {
              if ("complete" == m.readyState || "interactive" == m.readyState)
                  (f = m.width / m.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);
          m.src = d.externalGraphic;
      }
  },
  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, k = 0; k < e; k++)
          (g = b.components[k]), (h = ((g.x - this.featureDx) / d - this.offset.x) | 0), (g = (g.y / d - this.offset.y) | 0), (f[k] = " " + h + "," + g + " l ");
      b = c ? " x e" : " e";
      a.path = "m" + f.join("") + b;
      return a;
  },
  drawPolygon: function (a, b) {
      this.setNodeDimension(a, b);
      var c = this.getResolution(),
          d = [],
          e,
          f,
          g,
          h,
          k,
          l,
          m,
          n,
          p,
          q;
      e = 0;
      for (f = b.components.length; e < f; e++) {
          d.push("m");
          g = b.components[e].components;
          h = 0 === e;
          l = k = null;
          m = 0;
          for (n = g.length; m < n; m++)
              (p = g[m]),
                  (q = ((p.x - this.featureDx) / c - this.offset.x) | 0),
                  (p = (p.y / c - this.offset.y) | 0),
                  (q = " " + q + "," + p),
                  d.push(q),
                  0 == m && d.push(" l"),
                  h || (k ? k != q && (l ? l != q && (h = !0) : (l = q)) : (k = q));
          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");
      a = new OpenLayers.Bounds(Number.MAX_VALUE, Number.MAX_VALUE, 0, 0);
      for (var 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],
                          k = this.parseGeometry(h),
                          h = this.parseAttributes(h),
                          h = new OpenLayers.Feature.Vector(k.geometry, h, null);
                      h.bounds = k.bounds;
                      h.type = f;
                      b.push(h);
                  }
          }
      return b;
  },
  read_FeatureInfoResponse: function (a) {
      var b = [];
      a = this.getElementsByTagNameNS(a, "*", "FIELDS");
      for (var 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 k = e.attributes[g];
                  f[k.nodeName] = k.nodeValue;
              }
          else for (e = e.childNodes, g = 0, h = e.length; g < h; ++g) (k = e[g]), 3 != k.nodeType && (f[k.getAttribute("name")] = k.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) {
          a = a.childNodes;
          for (var 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;
                  0 == f.length ? (b[e] = null) : 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());
      a = this.gmlFormat.parseFeature(a);
      var 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,
  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 && ((c = a[d]), !(c instanceof OpenLayers.Layer.WMTS) || c.requestEncoding !== this.requestEncoding || (this.queryVisible && !c.getVisibility()) || (b.push(c), this.drillDown && !this.hover));
          --d
      );
      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) {
      b = b || {};
      var 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;
          (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.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 || 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;
  },
  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;
      (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.WCSCapabilities.v1_1_0 = OpenLayers.Class(OpenLayers.Format.WCSCapabilities.v1, {
  namespaces: { wcs: "http://www.opengis.net/wcs/1.1", xlink: "http://www.w3.org/1999/xlink", xsi: "http://www.w3.org/2001/XMLSchema-instance", ows: "http://www.opengis.net/ows/1.1" },
  errorProperty: "operationsMetadata",
  readers: {
      wcs: OpenLayers.Util.applyDefaults(
          {
              Capabilities: function (a, b) {
                  this.readChildNodes(a, b);
              },
              Contents: function (a, b) {
                  b.contentMetadata = [];
                  this.readChildNodes(a, b.contentMetadata);
              },
              CoverageSummary: function (a, b) {
                  var c = {};
                  this.readChildNodes(a, c);
                  b.push(c);
              },
              Identifier: function (a, b) {
                  b.identifier = this.getChildValue(a);
              },
              Title: function (a, b) {
                  b.title = this.getChildValue(a);
              },
              Abstract: function (a, b) {
                  b["abstract"] = this.getChildValue(a);
              },
              SupportedCRS: function (a, b) {
                  var c = this.getChildValue(a);
                  c && (b.supportedCRS || (b.supportedCRS = []), b.supportedCRS.push(c));
              },
              SupportedFormat: function (a, b) {
                  var c = this.getChildValue(a);
                  c && (b.supportedFormat || (b.supportedFormat = []), b.supportedFormat.push(c));
              },
          },
          OpenLayers.Format.WCSCapabilities.v1.prototype.readers.wcs
      ),
      ows: OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers.ows,
  },
  CLASS_NAME: "OpenLayers.Format.WCSCapabilities.v1_1_0",
});
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,
                  k = f.offset({ x: -h, y: -h }),
                  h = f.offset({ x: h, y: h });
              OpenLayers.Projection.transform(k, b, c);
              OpenLayers.Projection.transform(h, b, c);
              if ((k.x - h.x) * (k.x - h.x) + (k.y - h.y) * (k.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(),
              l;
          do (h = h.offset({ x: 0, y: g })), (l = OpenLayers.Projection.transform(h.clone(), b, c)), e.unshift(h);
          while (a.containsPixel(l) && 1e3 > ++d);
          h = f.clone();
          do (h = h.offset({ x: 0, y: -g })), (l = OpenLayers.Projection.transform(h.clone(), b, c)), e.push(h);
          while (a.containsPixel(l) && 1e3 > ++d);
          d = 0;
          k = [f.clone()];
          h = f.clone();
          do (h = h.offset({ x: -g, y: 0 })), (l = OpenLayers.Projection.transform(h.clone(), b, c)), k.unshift(h);
          while (a.containsPixel(l) && 1e3 > ++d);
          h = f.clone();
          do (h = h.offset({ x: g, y: 0 })), (l = OpenLayers.Projection.transform(h.clone(), b, c)), k.push(h);
          while (a.containsPixel(l) && 1e3 > ++d);
          g = [];
          for (d = 0; d < k.length; ++d) {
              l = k[d].x;
              for (var f = [], m = null, n = Math.min(e[0].y, 90), h = Math.max(e[e.length - 1].y, -90), p = (n - h) / this.numPoints, n = h, h = 0; h <= this.numPoints; ++h) {
                  var q = new OpenLayers.Geometry.Point(l, n);
                  q.transform(b, c);
                  f.push(q);
                  n += p;
                  q.y >= a.bottom && !m && (m = q);
              }
              this.labelled &&
                  ((m = new OpenLayers.Geometry.Point(m.x, a.bottom)),
                  (l = { value: l, label: this.labelled ? OpenLayers.Util.getFormattedLonLat(l, "lon", this.labelFormat) : "", labelAlign: "cb", xOffset: 0, yOffset: 2 }),
                  this.gratLayer.addFeatures(new OpenLayers.Feature.Vector(m, l)));
              f = new OpenLayers.Geometry.LineString(f);
              g.push(new OpenLayers.Feature.Vector(f));
          }
          for (h = 0; h < e.length; ++h)
              if (((n = e[h].y), !(-90 > n || 90 < n))) {
                  f = [];
                  d = k[0].x;
                  p = (k[k.length - 1].x - d) / this.numPoints;
                  l = d;
                  m = null;
                  for (d = 0; d <= this.numPoints; ++d) (q = new OpenLayers.Geometry.Point(l, n)), q.transform(b, c), f.push(q), (l += p), q.x < a.right && (m = q);
                  this.labelled &&
                      ((m = new OpenLayers.Geometry.Point(a.right, m.y)),
                      (l = { value: n, label: this.labelled ? OpenLayers.Util.getFormattedLonLat(n, "lat", this.labelFormat) : "", labelAlign: "rb", xOffset: -2, yOffset: 2 }),
                      this.gratLayer.addFeatures(new OpenLayers.Feature.Vector(m, l)));
                  f = new OpenLayers.Geometry.LineString(f);
                  g.push(new OpenLayers.Feature.Vector(f));
              }
          this.gratLayer.addFeatures(g);
      }
  },
  CLASS_NAME: "OpenLayers.Control.Graticule",
});
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.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, b) {
      a && !this.previous.active ? this.previous.activate() : !a && this.previous.active && this.previous.deactivate();
  },
  onNextChange: function (a, b) {
      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) {
                  var b = this.registry[a].apply(this, arguments);
                  this.previousStack.unshift(b);
                  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.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);
  },
  createBackBuffer: function () {},
  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.TileManager = OpenLayers.Class({
  cacheSize: 256,
  tilesPerFrame: 2,
  frameDelay: 16,
  moveDelay: 100,
  zoomDelay: 200,
  maps: null,
  tileQueueId: null,
  tileQueue: null,
  tileCache: null,
  tileCacheIndex: null,
  initialize: function (a) {
      OpenLayers.Util.extend(this, a);
      this.maps = [];
      this.tileQueueId = {};
      this.tileQueue = {};
      this.tileCache = {};
      this.tileCacheIndex = [];
  },
  addMap: function (a) {
      if (!this._destroyed && OpenLayers.Layer.Grid) {
          this.maps.push(a);
          this.tileQueue[a.id] = [];
          for (var b = 0, c = a.layers.length; b < c; ++b) this.addLayer({ layer: a.layers[b] });
          a.events.on({ move: this.move, zoomend: this.zoomEnd, changelayer: this.changeLayer, addlayer: this.addLayer, preremovelayer: this.removeLayer, scope: this });
      }
  },
  removeMap: function (a) {
      if (!this._destroyed && OpenLayers.Layer.Grid) {
          window.clearTimeout(this.tileQueueId[a.id]);
          if (a.layers) for (var b = 0, c = a.layers.length; b < c; ++b) this.removeLayer({ layer: a.layers[b] });
          a.events && a.events.un({ move: this.move, zoomend: this.zoomEnd, changelayer: this.changeLayer, addlayer: this.addLayer, preremovelayer: this.removeLayer, scope: this });
          delete this.tileQueue[a.id];
          delete this.tileQueueId[a.id];
          OpenLayers.Util.removeItem(this.maps, a);
      }
  },
  move: function (a) {
      this.updateTimeout(a.object, this.moveDelay, !0);
  },
  zoomEnd: function (a) {
      this.updateTimeout(a.object, this.zoomDelay);
  },
  changeLayer: function (a) {
      ("visibility" !== a.property && "params" !== a.property) || this.updateTimeout(a.object, 0);
  },
  addLayer: function (a) {
      a = a.layer;
      if (a instanceof OpenLayers.Layer.Grid) {
          a.events.on({ addtile: this.addTile, retile: this.clearTileQueue, scope: this });
          var b, c, d;
          for (b = a.grid.length - 1; 0 <= b; --b) for (c = a.grid[b].length - 1; 0 <= c; --c) (d = a.grid[b][c]), this.addTile({ tile: d }), d.url && !d.imgDiv && this.manageTileCache({ object: d });
      }
  },
  removeLayer: function (a) {
      a = a.layer;
      if (a instanceof OpenLayers.Layer.Grid && (this.clearTileQueue({ object: a }), a.events && a.events.un({ addtile: this.addTile, retile: this.clearTileQueue, scope: this }), a.grid)) {
          var b, c, d;
          for (b = a.grid.length - 1; 0 <= b; --b) for (c = a.grid[b].length - 1; 0 <= c; --c) (d = a.grid[b][c]), this.unloadTile({ object: d });
      }
  },
  updateTimeout: function (a, b, c) {
      window.clearTimeout(this.tileQueueId[a.id]);
      var d = this.tileQueue[a.id];
      if (!c || d.length)
          this.tileQueueId[a.id] = window.setTimeout(
              OpenLayers.Function.bind(function () {
                  this.drawTilesFromQueue(a);
                  d.length && this.updateTimeout(a, this.frameDelay);
              }, this),
              b
          );
  },
  addTile: function (a) {
      if (a.tile instanceof OpenLayers.Tile.Image) a.tile.events.on({ beforedraw: this.queueTileDraw, beforeload: this.manageTileCache, loadend: this.addToCache, unload: this.unloadTile, scope: this });
      else this.removeLayer({ layer: a.tile.layer });
  },
  unloadTile: function (a) {
      a = a.object;
      a.events.un({ beforedraw: this.queueTileDraw, beforeload: this.manageTileCache, loadend: this.addToCache, unload: this.unloadTile, scope: this });
      OpenLayers.Util.removeItem(this.tileQueue[a.layer.map.id], a);
  },
  queueTileDraw: function (a) {
      a = a.object;
      var b = !1,
          c = a.layer,
          d = c.getURL(a.bounds),
          e = this.tileCache[d];
      e && "olTileImage" !== e.className && (delete this.tileCache[d], OpenLayers.Util.removeItem(this.tileCacheIndex, d), (e = null));
      !c.url || (!c.async && e) || ((b = this.tileQueue[c.map.id]), ~OpenLayers.Util.indexOf(b, a) || b.push(a), (b = !0));
      return !b;
  },
  drawTilesFromQueue: function (a) {
      var b = this.tileQueue[a.id],
          c = this.tilesPerFrame;
      for (a = a.zoomTween && a.zoomTween.playing; !a && b.length && c; ) b.shift().draw(!0), --c;
  },
  manageTileCache: function (a) {
      a = a.object;
      var b = this.tileCache[a.url];
      b &&
          (b.parentNode && OpenLayers.Element.hasClass(b.parentNode, "olBackBuffer") && (b.parentNode.removeChild(b), (b.id = null)),
          b.parentNode || ((b.style.visibility = "hidden"), (b.style.opacity = 0), a.setImage(b), OpenLayers.Util.removeItem(this.tileCacheIndex, a.url), this.tileCacheIndex.push(a.url)));
  },
  addToCache: function (a) {
      a = a.object;
      this.tileCache[a.url] ||
          OpenLayers.Element.hasClass(a.imgDiv, "olImageLoadError") ||
          (this.tileCacheIndex.length >= this.cacheSize && (delete this.tileCache[this.tileCacheIndex[0]], this.tileCacheIndex.shift()), (this.tileCache[a.url] = a.imgDiv), this.tileCacheIndex.push(a.url));
  },
  clearTileQueue: function (a) {
      a = a.object;
      for (var b = this.tileQueue[a.map.id], c = b.length - 1; 0 <= c; --c) b[c].layer === a && b.splice(c, 1);
  },
  destroy: function () {
      for (var a = this.maps.length - 1; 0 <= a; --a) this.removeMap(this.maps[a]);
      this.tileCacheIndex = this.tileCache = this.tileQueueId = this.tileQueue = this.maps = null;
      this._destroyed = !0;
  },
});
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 k = this.getContainingTileCoords(f, h.resolution);
                      h.startTileCol = k.x;
                      h.startTileRow = k.y;
                      k = this.getContainingTileCoords(e, h.resolution);
                      h.endTileCol = k.x;
                      h.endTileRow = k.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) {
      var b = new OpenLayers.Geometry.Point(this.maxExtent.left, this.maxExtent.top);
      return this.getContainingTileCoords(b, a);
  },
  getLowerRightTileCoord: function (a) {
      var b = new OpenLayers.Geometry.Point(this.maxExtent.right, this.maxExtent.bottom);
      return this.getContainingTileCoords(b, 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]);
  },
  initGriddedTiles: function (a) {
      delete this._tileOrigin;
      OpenLayers.Layer.XYZ.prototype.initGriddedTiles.apply(this, arguments);
  },
  getMaxExtent: function () {
      var a = this.map.getResolution();
      return (this.maxExtent = this.getMaxExtentForResolution(a));
  },
  getTileOrigin: function () {
      if (!this._tileOrigin) {
          var a = this.getMaxExtent();
          this._tileOrigin = new OpenLayers.LonLat(a.left, a.bottom);
      }
      return this._tileOrigin;
  },
  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" + OpenLayers.Number.zeroPad(c, 8, 16)), (d = "R" + OpenLayers.Number.zeroPad(d, 8, 16)), (a = "L" + OpenLayers.Number.zeroPad(a, 2, 10)), (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));
  },
  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,
  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)
          (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;
      (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);
      a = [];
      for (var 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 (a) {},
  reset: function (a) {
      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 (a = b()), new OpenLayers.Filter.Logical({ filters: [a], 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 "IS_NULL":
                  return (c = b()), new OpenLayers.Filter.Comparison({ property: c, type: d[a.text.toUpperCase()] });
              case "VALUE":
                  return (c = a.text.match(/^'(.*)'$/)) ? c[1].replace(/''/g, "'") : Number(a.text);
              case "SPATIAL":
                  switch (a.text.toUpperCase()) {
                      case "BBOX":
                          var a = b(),
                              c = b(),
                              g = b(),
                              h = b(),
                              k = b();
                          return new OpenLayers.Filter.Spatial({ type: OpenLayers.Filter.Spatial.BBOX, property: k, value: OpenLayers.Bounds.fromArray([h, g, c, a]) });
                      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 "IS_NULL":
              case "LOGICAL":
                  for (var k = h[g.type]; 0 < c.length && h[c[c.length - 1].type] <= k; ) 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,
          IS_NULL: /^IS NULL/i,
          COMMA: /^,/,
          LOGICAL: /^(AND|OR)/i,
          VALUE: /^('([^']|'')*'|\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", "IS_NULL"],
          BETWEEN: ["VALUE"],
          IS_NULL: ["END"],
          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,
          "IS NULL": OpenLayers.Filter.Comparison.IS_NULL,
      },
      e = {},
      f = { AND: OpenLayers.Filter.Logical.AND, OR: OpenLayers.Filter.Logical.OR },
      g = {},
      h = { RPAREN: 3, LOGICAL: 2, COMPARISON: 1 },
      k;
  for (k in d) d.hasOwnProperty(k) && (e[d[k]] = k);
  for (k in f) f.hasOwnProperty(k) && (g[f[k]] = k);
  return OpenLayers.Class(OpenLayers.Format, {
      read: function (d) {
          var e = d;
          d = [];
          var f,
              g = ["NOT", "GEOMETRY", "SPATIAL", "PROPERTY", "LPAREN"];
          do {
              a: {
                  f = g;
                  for (var h = void 0, g = void 0, k = f.length, h = 0; h < k; h++) {
                      var g = f[h],
                          s = b[g] instanceof RegExp ? b[g].exec(e) : (0, b[g])(e);
                      if (s) {
                          f = s[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 < k; 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)
                      : null !== a.value
                      ? a.property + " " + e[a.type] + " " + this.write(a.value)
                      : a.property + " " + e[a.type];
              case void 0:
                  if ("string" === typeof a) return "'" + a.replace(/'/g, "''") + "'";
                  if ("number" === typeof a) return String(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)
              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();
          else if (this.source.events) this.source.events.on({ sketchcomplete: this.onSketchComplete, afterfeaturemodified: this.afterFeatureModified, scope: this });
      return a;
  },
  deactivate: function () {
      var a = OpenLayers.Control.prototype.deactivate.call(this);
      a && this.source && this.source.events && this.source.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 = [],
                  k = this.layer === this.source && this.mutual,
                  l = { edge: this.edge, tolerance: this.tolerance, mutual: k },
                  m = [a.geometry],
                  n,
                  p,
                  q,
                  r = 0,
                  s = d.length;
              r < s;
              ++r
          )
              if (((n = d[r]), this.isEligible(n))) {
                  p = [n.geometry];
                  for (var t = 0; t < m.length; ++t) {
                      q = m[t];
                      for (var u = 0; u < p.length; ++u)
                          if (((e = p[u]), q.getBounds().intersectsBounds(e.getBounds()) && (e = q.split(e, l))))
                              (f = this.events.triggerEvent("beforesplit", { source: a, target: n })),
                                  !1 !== f &&
                                      (k && ((f = e[0]), 1 < f.length && (f.unshift(t, 1), Array.prototype.splice.apply(m, f), (t += f.length - 3)), (e = e[1])),
                                      1 < e.length && (e.unshift(u, 1), Array.prototype.splice.apply(p, e), (u += e.length - 3)));
                  }
                  p && 1 < p.length && (this.geomsToFeatures(n, p), this.events.triggerEvent("split", { original: n, features: p }), Array.prototype.push.apply(g, p), h.push(n), (c = !0));
              }
          m && 1 < m.length && (this.geomsToFeatures(a, m), this.events.triggerEvent("split", { original: a, features: m }), Array.prototype.push.apply(g, m), h.push(a), (b = !0));
          if (b || c) {
              if (this.deferDelete) {
                  d = [];
                  r = 0;
                  for (s = h.length; r < s; ++r) (c = h[r]), c.state === OpenLayers.State.INSERT ? d.push(c) : ((c.state = OpenLayers.State.DELETE), this.layer.drawFeature(c));
                  this.layer.destroyFeatures(d, { silent: !0 });
                  r = 0;
                  for (s = g.length; r < s; ++r) g[r].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]) for (b = this.matrixIds, this.matrixIds = Array(a), c = 0; c < a; ++c) this.matrixIds[c] = { identifier: b[c] };
  },
  setMap: function () {
      OpenLayers.Layer.Grid.prototype.setMap.apply(this, arguments);
  },
  updateMatrixProperties: function () {
      if ((this.matrix = this.getMatrix()))
          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)
          if ("scaleDenominator" in this.matrixIds[0])
              for (var b = (OpenLayers.METERS_PER_INCH * OpenLayers.INCHES_PER_UNIT[this.units] * this.getServerResolution()) / 2.8e-4, 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()];
      else a = { identifier: 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);
      var 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) {
      a = this.adjustBounds(a);
      var b = "";
      if (!this.tileFullExtent || this.tileFullExtent.intersectsBounds(a)) {
          a = a.getCenterLonLat();
          var c = this.getTileInfo(a);
          a = this.dimensions;
          var d,
              b = OpenLayers.Util.isArray(this.url) ? this.selectUrl([this.version, this.style, this.matrixSet, this.matrix.identifier, c.row, c.col].join(), this.url) : this.url;
          if ("REST" === this.requestEncoding.toUpperCase())
              if (((d = this.params), -1 !== b.indexOf("{"))) {
                  b = b.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] = d[e.toUpperCase()]);
                  }
                  b = OpenLayers.String.format(b, c);
              } else {
                  e = this.version + "/" + this.layer + "/" + this.style + "/";
                  if (a) for (f = 0; f < a.length; f++) d[a[f]] && (e = e + d[a[f]] + "/");
                  e = e + this.matrixSet + "/" + this.matrix.identifier + "/" + c.row + "/" + c.col + "." + this.formatSuffix;
                  b.match(/\/$/) || (b += "/");
                  b += e;
              }
          else
              "KVP" === this.requestEncoding.toUpperCase() &&
                  ((d = {
                      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, [d])));
      }
      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;
      (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) {
      a = this.adjustBounds(a);
      var b = this.map.getResolution(),
          c = Math.round(1e4 * this.map.getScale()) / 1e4,
          d = Math.round(a.left / b);
      a = -Math.round(a.top / b);
      var 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.Control.LayerSwitcher = OpenLayers.Class(OpenLayers.Control, {
  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 = [];
  },
  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 () {
      if (!this.layerStates.length || this.map.layers.length != this.layerStates.length) return !0;
      for (var a = 0, b = this.layerStates.length; a < b; a++) {
          var c = this.layerStates[a],
              d = this.map.layers[a];
          if (c.name != d.name || c.inRange != d.inRange || c.id != d.id || c.visibility != d.visibility) return !0;
      }
      return !1;
  },
  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(),
                  k = document.createElement("input"),
                  l = OpenLayers.Util.createUniqueID(this.id + "_input_");
              k.id = l;
              k.name = g ? this.id + "_baseLayers" : e.name;
              k.type = g ? "radio" : "checkbox";
              k.value = e.name;
              k.checked = h;
              k.defaultChecked = h;
              k.className = "olButton";
              k._layer = e.id;
              k._layerSwitcher = this.id;
              g || e.inRange || (k.disabled = !0);
              h = document.createElement("label");
              h["for"] = k.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";
              l = document.createElement("br");
              (g ? this.baseLayers : this.dataLayers).push({ layer: e, inputElem: k, labelSpan: h });
              e = g ? this.baseLayersDiv : this.dataLayersDiv;
              e.appendChild(k);
              e.appendChild(h);
              e.appendChild(l);
          }
      }
      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);
      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) for (e = OpenLayers.Util.isArray(c.contributors) ? c.contributors : [c.contributors], f = 0, 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)
          for (e = OpenLayers.Util.isArray(c.links) ? c.links : [c.links], f = 0, 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 }));
      (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)
              : ("text" == c.type || "html" == c.type || null == c.type
                    ? (c.value = this.getFirstChildValue(a, f, "content", null))
                    : "xhtml" == c.type || c.type.match(/(\+|\/)xml$/)
                    ? (c.value = this.getChildEl(d[0]))
                    : (c.value = 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 k = ["rel", "type", "hreflang", "title", "length"], g = 0, h = d.length; g < h; g++) {
          c = {};
          c.href = d[g].getAttribute("href");
          for (var l = 0, m = k.length; l < m; l++) (e = d[g].getAttribute(k[l])) && (c[k[l]] = 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]);
      a = 0;
      for (var 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)
          for (e = 0, 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 k, e = 0, f = h.length; e < f; e++) {
              d = OpenLayers.String.trim(h[e].firstChild.nodeValue).split(/\s+/);
              k = [];
              for (var l = 0, m = d.length; l < m; l += 2) (g = new OpenLayers.Geometry.Point(d[l + 1], d[l])), k.push(g);
              c.push(new OpenLayers.Geometry.LineString(k));
          }
      if ((a = this.getElementsByTagNameNS(a, b, "polygon")) && 0 < a.length)
          for (e = 0, f = a.length; e < f; e++) {
              d = OpenLayers.String.trim(a[e].firstChild.nodeValue).split(/\s+/);
              k = [];
              l = 0;
              for (m = d.length; l < m; l += 2) (g = new OpenLayers.Geometry.Point(d[l + 1], d[l])), k.push(g);
              c.push(new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(k)]));
          }
      if (this.internalProjection && this.externalProjection) for (e = 0, f = c.length; e < f; e++) c[e] && c[e].transform(this.externalProjection, this.internalProjection);
      return c;
  },
  parsePersonConstructs: function (a, b, c) {
      var d = [],
          e = this.namespaces.atom;
      a = this.getElementsByTagNameNS(a, e, b);
      for (var f = ["uri", "email"], g = 0, h = a.length; g < h; g++) {
          var k = {};
          k.name = this.getFirstChildValue(a[g], e, "name", null);
          for (var l = 0, m = f.length; l < m; l++) {
              var n = this.getFirstChildValue(a[g], e, f[l], null);
              n && (k[f[l]] = n);
          }
          d.push(k);
      }
      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;
      b = OpenLayers.Event.element(a);
      if (!b || ("INPUT" != b.tagName && "TEXTAREA" != b.tagName && "SELECT" != b.tagName)) {
          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 = b.supportedCRS.replace(/urn:ogc:def:crs:(\w+):.+:(\w+)$/, "urn:ogc:def:crs:$1::$2")), (d = !!this.yx[d]));
              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 || {};
              var c = a.getAttribute("resourceType");
              b.resourceUrls || (b.resourceUrls = []);
              c = b.resourceUrl[c] = { format: a.getAttribute("format"), template: a.getAttribute("template"), resourceType: c };
              b.resourceUrls.push(c);
          },
          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",
});
