function hbArea (areaPoints, zoomSettings)
{
  this.areaPoints = areaPoints;
  this.overlays = new Array ();
  this.mouseOverHandler = new Array ();
  this.mouseOutHandler = new Array ();

  if (zoomSettings)
  {
    for (var zs = 0; zs < zoomSettings.length; ++zs)
    {
      var color = zoomSettings [zs] ["value"] ["color"];
      var opacity = parseFloat (zoomSettings [zs] ["value"] ["opacity"]);

      var overlay = new Object ();
      overlay ["overlay"] = new GPolygon (areaPoints, "white", 0, 0, color, opacity);
      overlay ["minZoom"] = parseInt (zoomSettings [zs] ["minZoom"], 10);
      overlay ["maxZoom"] = parseInt (zoomSettings [zs] ["maxZoom"], 10);

      this.overlays.push (overlay);
    }
  }
}

hbArea.prototype.destroy = function ()
{
  this.areaPoints = undefined;
  this.overlays = undefined;

  for (var h = 0; h < this.mouseOverHandler.length; ++h)
  {
    GEvent.removeListener (this.mouseOverHandler [h]);
    delete this.mouseOverHandler [h];
  }

  this.mouseOverHandler = undefined;

  for (var h = 0; h < this.mouseOutHandler.length; ++h)
  {
    GEvent.removeListener (this.mouseOutHandler [h]);
    delete this.mouseOutHandler [h];
  }

  this.mouseOutHandler = undefined;
}

hbArea.prototype.addOverlays = function (overlayMgr)
{
  // do nothing
}

hbArea.prototype.addAreaListener = function (marker)
{
/*  if (this.mouseOverHandler)
  {
    GEvent.removeListener (this.mouseOverHandler);
    this.mouseOverHandler = null;
  }

  if (this.mouseOverHandler)
  {
    GEvent.removeListener (this.mouseOutHandler);
    this.mouseOutHandler = null;
  }
*/
  var myMarker = marker;
  var myOverlays = this.overlays;

  this.mouseOverHandler.push (GEvent.addListener (myMarker, "mouseover", function ()
  {
    var zoom = map.map.getZoom ();
    var myOverlay = null;

    for (var overlayObj in myOverlays)
    {
      if ((zoom >= myOverlays [overlayObj] ["minZoom"]) && (zoom <= myOverlays [overlayObj] ["maxZoom"]))
      {
        myOverlay = myOverlays [overlayObj] ["overlay"];
        break;
      }
    }

    if (null != myOverlay)
    {
      map.map.addOverlay (myOverlay);
    }
  }));

  this.mouseOutHandler.push (GEvent.addListener (myMarker, "mouseout", function ()
  {
    var zoom = map.map.getZoom ();
    var myOverlay = null;

    for (var overlayObj in myOverlays)
    {
      if ((zoom >= myOverlays [overlayObj] ["minZoom"]) && (zoom <= myOverlays [overlayObj] ["maxZoom"]))
      {
        myOverlay = myOverlays [overlayObj] ["overlay"];
        break;
      }
    }

    if (null != myOverlay)
    {
      map.map.removeOverlay (myOverlay);
    }
  }));
}
