var HABITATMAP_URL = "http://habitatmap.org";

if (!window.HMWidgetInstance) {

  function hmGoogleScriptLoaded() {
    HMWidgetInstance.scriptLoaded('googleMapsAsync');
  }

  var HMWidgetInstance = {
    
    maps: [],
    _waitingMaps: [],
    
    addMap: function(mapData) {
      var divId = this.maps.length;
      this.maps[divId] = mapData;
      this._createMapDiv(divId, mapData.width, mapData.height);
      if (this._allScriptsLoaded()) {
        HMWidget.loadMap(divId);
      } else {
        this._waitingMaps.push(divId);
      }
    },

    insertScripts: function(googleKey) {
      if (this._scriptsInserted) return;
      this._scriptsInserted = true;
      
      var head = document.getElementsByTagName('head')[0];
      var googleUrl = 'http://maps.google.com/maps?file=api&v=2.184&key='
        + googleKey + "&async=2&callback=hmGoogleScriptLoaded";
      this._insertScript(head, 'googleMaps', googleUrl);
      this._insertScript(head, 'widgetBundle', HABITATMAP_URL + '/javascripts/widget_bundle_packaged.js');
    },

    _insertScript: function(head, scriptId, url) {
      var scriptElement = document.createElement("script");
      scriptElement.setAttribute("type", "text/javascript");
      scriptElement.onload = function() { HMWidgetInstance.scriptLoaded(scriptId) };
      scriptElement.onreadystatechange = function() {
        if (this.readyState == "complete" || this.readyState == "loaded") {
          HMWidgetInstance.scriptLoaded(scriptId);
        }
      };
      scriptElement.src = url;
      head.appendChild(scriptElement);
    },

    scriptLoaded: function(scriptId) {
      if (this["_" + scriptId + "Loaded"]) return;
      this["_" + scriptId + "Loaded"] = true;
      if (scriptId == "widgetBundle") {
        HMWidget.initializeEnvironment();
      } else if (scriptId == "googleMapsAsync") {
        if (this._widgetBundleLoaded) {
          GMarkerExtensions.hmInstallExtensions();
          HMPolygonExtensions.hmInstallExtensions();
          HMMarkerClusterer.loadClusterMarker();
        }
      }
      if (this._allScriptsLoaded()) {
        HMUtils.observe(window, "unload", function() { GUnload() });
        this._processWaitingMaps();
      }
    },
    
    _allScriptsLoaded: function() {
      return this._googleMapsLoaded && this._googleMapsAsyncLoaded && this._widgetBundleLoaded;
    },
        
    _createMapDiv: function(id, width, height) {
      document.writeln("<div class='habitatmap_widget' id='habitatmap_widget_" + id
        + "' style='width: " + width + "px; height: " + height + "px;'>Loading...</div>");
    },

    _processWaitingMaps: function() {
      for (var i = 0; i < this._waitingMaps.length; i++) {
        HMWidget.loadMap(this._waitingMaps[i]);
      }
    }
  };
}


(function() {
  // putting this inside a function to prevent googleKey and IE from polluting the global namespace
  var googleKey = "ABQIAAAAF1-ZmqglXDplWRUwTJkaoRQ7L-GbXlzYv9JESxhykSCPgiTOoxSs9rQ0FTwqw4VwnJHMzJHYySOxRA";
  var IE = !!(window.attachEvent && navigator.userAgent.indexOf('Opera') === -1);

  if (IE) {
    window.attachEvent('onload', function() { HMWidgetInstance.insertScripts(googleKey) });
  } else {
    HMWidgetInstance.insertScripts(googleKey);
  }
})();

HMWidgetInstance.addMap({
  width: 414,
  height: 374,
  lat: 38.9273657639425,
  lng: -77.1185302734375,
  zoom: 9,
  markers: [{"name":"All Natural Floor Cleaning Services by Natura Care","assigned_map_ids":[267],"lng":-76.9369189,"id":1040,"lat":38.980666},{"name":"Commercial Carpet Cleaning by Natura Care","assigned_map_ids":[267],"lng":-77.0363658,"id":1042,"lat":38.8951118},{"name":"Enviromentally-Friendly Carpet Cleaning by Natura Care","assigned_map_ids":[267],"lng":-77.2013705,"id":1055,"lat":39.1434406},{"name":"Green Hardwood Floor Care by Natura Care","assigned_map_ids":[267],"lng":-77.3410958,"id":1038,"lat":38.9687213},{"name":"Green Tile \u0026 Grout Cleaning n Color Sealing by Natura Care","assigned_map_ids":[267],"lng":-77.2277603,"id":1056,"lat":38.704282},{"name":"Green, all natural floor care and restoration services by Natura Care","assigned_map_ids":[267],"lng":-77.0420541,"id":1041,"lat":38.8067193},{"name":"Natura Care Floor Care \u0026 Restoration","assigned_map_ids":[267],"lng":-77.4135984,"id":960,"lat":39.0409418},{"name":"Natural Carpet Cleaning  by Natura Care","assigned_map_ids":[267],"lng":-77.4529868,"id":1013,"lat":38.998645},{"name":"Natural Carpet Cleaning by Natura Care","assigned_map_ids":[267],"lng":-77.100256,"id":1035,"lat":38.9806658},{"name":"Natural Stone Floor Care by Natura Care","assigned_map_ids":[267],"lng":-77.3439283,"id":1039,"lat":38.8891017},{"name":"Natural, Guaranteed Carpet Cleaning Services by Natura Care","assigned_map_ids":[267],"lng":-76.9930319,"id":1036,"lat":39.0398315},{"name":"Tile \u0026 Grout Cleaning and Color Sealing by Natura Care","assigned_map_ids":[267],"lng":-77.2716505,"id":1037,"lat":38.7934466}],
  layers: [{"opacity":80,"name":"Environmentally-Friendly Floor Cleaning \u0026 Restoration by Natura Care","map_id":267,"weight":3,"fill_opacity":80,"id":127,"fill_color":"#00a0c6","color":"#006b33","polies":[{"encoded_levels":"PNP","encoded_points":"mo~lFpppsMbgwA|llBeoxAfagB","type":"Polyline"},{"encoded_levels":"PP","encoded_points":"mugoFrdhwMhjgA|i|A","type":"Polyline"},{"encoded_levels":"PP","encoded_points":"g_wlFhursMvm@ia@","type":"Polyline"},{"encoded_levels":"PP","encoded_points":"ehgoFlsgwM`qgA{avB","type":"Polyline"},{"encoded_levels":"PHP","encoded_points":"upzlFx}rsMk`@nr@a{@qnB","type":"Polyline"}],"user_id":313,"display_on_index":true}],
  mapIds: [267],
  colorIds: [0],
  mapType: "terrain",
  nopol: true,
  nogrp: true
});
