if (GBrowserIsCompatible()) {
var gmarkers = [];
var gicons = [];

var Restaurants = new GIcon();
Restaurants.image             = "img/map/tridot-restaurants.png";
Restaurants.shadow            = "img/map/GM_shadow.png";
Restaurants.iconSize          = new GSize(30, 37);
Restaurants.shadowSize        = new GSize(38, 35);
Restaurants.iconAnchor        = new GPoint(10, 30);
Restaurants.infoWindowAnchor  = new GPoint(15, 1);

var FastFood = new GIcon();
FastFood.image             = "img/map/tridot-fastfood.png";
FastFood.shadow            = "img/map/GM_shadow.png";
FastFood.iconSize          = new GSize(30, 37);
FastFood.shadowSize        = new GSize(38, 35);
FastFood.iconAnchor        = new GPoint(10, 30);
FastFood.infoWindowAnchor  = new GPoint(15, 1);

var Groceries = new GIcon();
Groceries.image             = "img/map/tridot-groceries.png";
Groceries.shadow            = "img/map/GM_shadow.png";
Groceries.iconSize          = new GSize(30, 37);
Groceries.shadowSize        = new GSize(38, 35);
Groceries.iconAnchor        = new GPoint(10, 30);
Groceries.infoWindowAnchor  = new GPoint(15, 1);

var CoffeeShops = new GIcon();
CoffeeShops.image             = "img/map/tridot-coffee.png";
CoffeeShops.shadow            = "img/map/GM_shadow.png";
CoffeeShops.iconSize          = new GSize(30, 37);
CoffeeShops.shadowSize        = new GSize(38, 35);
CoffeeShops.iconAnchor        = new GPoint(10, 30);
CoffeeShops.infoWindowAnchor  = new GPoint(15, 1);

var Shopping = new GIcon();
Shopping.image             = "img/map/tridot-shopping.png";
Shopping.shadow            = "img/map/GM_shadow.png";
Shopping.iconSize          = new GSize(30, 37);
Shopping.shadowSize        = new GSize(38, 35);
Shopping.iconAnchor        = new GPoint(10, 30);
Shopping.infoWindowAnchor  = new GPoint(15, 1);

var Park = new GIcon();
Park.image             = "img/map/tridot-park.png";
Park.shadow            = "img/map/GM_shadow.png";
Park.iconSize          = new GSize(30, 37);
Park.shadowSize        = new GSize(38, 35);
Park.iconAnchor        = new GPoint(10, 30);
Park.infoWindowAnchor  = new GPoint(15, 1);

var Event = new GIcon();
Event.image             = "img/map/tridot-event.png";
Event.shadow            = "img/map/GM_shadow.png";
Event.iconSize          = new GSize(30, 37);
Event.shadowSize        = new GSize(38, 35);
Event.iconAnchor        = new GPoint(10, 30);
Event.infoWindowAnchor  = new GPoint(15, 1);

var ShoppingMall = new GIcon();
ShoppingMall.image             = "img/map/tridot-shopping.png";
ShoppingMall.shadow            = "img/map/GM_shadow.png";
ShoppingMall.iconSize          = new GSize(30, 37);
ShoppingMall.shadowSize        = new GSize(38, 35);
ShoppingMall.iconAnchor        = new GPoint(10, 30);
ShoppingMall.infoWindowAnchor  = new GPoint(15, 1);

var Store = new GIcon();
Store.image             = "img/map/tridot-store.png";
Store.shadow            = "img/map/GM_shadow.png";
Store.iconSize          = new GSize(30, 37);
Store.shadowSize        = new GSize(38, 35);
Store.iconAnchor        = new GPoint(10, 30);
Store.infoWindowAnchor  = new GPoint(15, 1);

var Venue = new GIcon();
Venue.image             = "img/map/tridot-event.png";
Venue.shadow            = "img/map/GM_shadow.png";
Venue.iconSize          = new GSize(30, 37);
Venue.shadowSize        = new GSize(38, 35);
Venue.iconAnchor        = new GPoint(10, 30);
Venue.infoWindowAnchor  = new GPoint(15, 1);

var Bar = new GIcon();
Bar.image             = "img/map/tridot-bar.png";
Bar.shadow            = "img/map/GM_shadow.png";
Bar.iconSize          = new GSize(30, 37);
Bar.shadowSize        = new GSize(38, 35);
Bar.iconAnchor        = new GPoint(10, 30);
Bar.infoWindowAnchor  = new GPoint(15, 1);

var Medical = new GIcon();
Medical.image             = "img/map/tridot-medical.png";
Medical.shadow            = "img/map/GM_shadow.png";
Medical.iconSize          = new GSize(30, 37);
Medical.shadowSize        = new GSize(38, 35);
Medical.iconAnchor        = new GPoint(10, 30);
Medical.infoWindowAnchor  = new GPoint(15, 1);

var Business = new GIcon();
Business.image             = "img/map/tridot-business.png";
Business.shadow            = "img/map/GM_shadow.png";
Business.iconSize          = new GSize(30, 37);
Business.shadowSize        = new GSize(38, 35);
Business.iconAnchor        = new GPoint(10, 30);
Business.infoWindowAnchor  = new GPoint(15, 1);

var Club = new GIcon();
Club.image             = "img/map/tridot-club.png";
Club.shadow            = "img/map/GM_shadow.png";
Club.iconSize          = new GSize(30, 37);
Club.shadowSize        = new GSize(38, 35);
Club.iconAnchor        = new GPoint(10, 30);
Club.infoWindowAnchor  = new GPoint(15, 1);

var Museum = new GIcon();
Museum.image             = "img/map/tridot-museum.png";
Museum.shadow            = "img/map/GM_shadow.png";
Museum.iconSize          = new GSize(30, 37);
Museum.shadowSize        = new GSize(38, 35);
Museum.iconAnchor        = new GPoint(10, 30);
Museum.infoWindowAnchor  = new GPoint(15, 1);

var School = new GIcon();
School.image             = "img/map/tridot-school.png";
School.shadow            = "img/map/GM_shadow.png";
School.iconSize          = new GSize(30, 37);
School.shadowSize        = new GSize(38, 35);
School.iconAnchor        = new GPoint(10, 30);
School.infoWindowAnchor  = new GPoint(15, 1);

var Library = new GIcon();
Library.image             = "img/map/tridot-library.png";
Library.shadow            = "img/map/GM_shadow.png";
Library.iconSize          = new GSize(30, 37);
Library.shadowSize        = new GSize(38, 35);
Library.iconAnchor        = new GPoint(10, 30);
Library.infoWindowAnchor  = new GPoint(15, 1);

var Church = new GIcon();
Church.image             = "img/map/tridot-church.png";
Church.shadow            = "img/map/GM_shadow.png";
Church.iconSize          = new GSize(30, 37);
Church.shadowSize        = new GSize(38, 35);
Church.iconAnchor        = new GPoint(10, 30);
Church.infoWindowAnchor  = new GPoint(15, 1);

var Movies = new GIcon();
Movies.image             = "img/map/tridot-movies.png";
Movies.shadow            = "img/map/GM_shadow.png";
Movies.iconSize          = new GSize(30, 37);
Movies.shadowSize        = new GSize(38, 35);
Movies.iconAnchor        = new GPoint(10, 30);
Movies.infoWindowAnchor  = new GPoint(15, 1);

var Gas = new GIcon();
Gas.image             = "img/map/tridot-gas.png";
Gas.shadow            = "img/map/GM_shadow.png";
Gas.iconSize          = new GSize(30, 37);
Gas.shadowSize        = new GSize(38, 35);
Gas.iconAnchor        = new GPoint(10, 30);
Gas.infoWindowAnchor  = new GPoint(15, 1);

var Hotel = new GIcon();
Hotel.image             = "img/map/tridot-hotel.png";
Hotel.shadow            = "img/map/GM_shadow.png";
Hotel.iconSize          = new GSize(30, 37);
Hotel.shadowSize        = new GSize(38, 35);
Hotel.iconAnchor        = new GPoint(10, 30);
Hotel.infoWindowAnchor  = new GPoint(15, 1);

var Other = new GIcon();
Other.image             = "img/map/tridot-other.png";
Other.shadow            = "img/map/GM_shadow.png";
Other.iconSize          = new GSize(30, 37);
Other.shadowSize        = new GSize(38, 35);
Other.iconAnchor        = new GPoint(10, 30);
Other.infoWindowAnchor  = new GPoint(15, 1);

var gicons = [];
gicons["Restaurants"] = Restaurants;
gicons["Fast Food"] = FastFood;
gicons["Groceries"] = Groceries;
gicons["Coffee Shops"] = CoffeeShops;
gicons["Shopping"] = Shopping;
gicons["Park"] = Park;
gicons["Event"] = Event;
gicons["Shopping Mall"] = ShoppingMall;
gicons["Store"] = Store;
gicons["Venue"] = Venue;
gicons["Bar"] = Bar;
gicons["Medical"] = Medical;
gicons["Business"] = Business;
gicons["Club"] = Club;
gicons["Museum"] = Museum;
gicons["School"] = School;
gicons["Library"] = Library;
gicons["Church"] = Church;
gicons["Movies"] = Movies;
gicons["Gas"] = Gas;
gicons["Hotel"] = Hotel;
gicons["Other"] = Other;

// A function to create the marker and set up the event window
function createMarker(point,name,html,category) {
  var marker = new GMarker(point,gicons[category]);
  // === Store the category and name info as a marker properties ===
  marker.mycategory = category;                                 
  marker.myname = name;
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);
  });
  gmarkers.push(marker);
  return marker;
}

// == shows all markers of a particular category, and ensures the checkbox is checked ==
function show(category) {
  for (var i=0; i<gmarkers.length; i++) {
    if (gmarkers[i].mycategory == category) {
      gmarkers[i].show();
    }
  }
  // == check the checkbox ==
  document.getElementById(category+"box").checked = true;
}

// == hides all markers of a particular category, and ensures the checkbox is cleared ==
function hide(category) {
  for (var i=0; i<gmarkers.length; i++) {
    if (gmarkers[i].mycategory == category) {
      gmarkers[i].hide();
    }
  }
  // == clear the checkbox ==
  document.getElementById(category+"box").checked = false;
  // == close the info window, in case its open on a marker that we just hid
  map.closeInfoWindow();
}

// == a checkbox has been clicked ==
function boxclick(box,category) {
  if (box.checked) {
    show(category);
  } else {
    hide(category);
  }
}

function myclick(i) {
  GEvent.trigger(gmarkers[i],"click");
}

// create the map
var map = new GMap2(document.getElementById("mapLarge"));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(35.778846,-78.639386), 17);

// Read the data
GDownloadUrl("xml/allLocations.xml", function(doc) {
  var xmlDoc = GXml.parse(doc);
  var markers = xmlDoc.documentElement.getElementsByTagName("marker");
    
  for (var i = 0; i < markers.length; i++) {
    // obtain the attribues of each marker
    var lat = parseFloat(markers[i].getAttribute("lat"));
    var lng = parseFloat(markers[i].getAttribute("lng"));
    var point = new GLatLng(lat,lng);
    var html = markers[i].getAttribute("html");
    var icon = markers[i].getAttribute("icon");
    var name = markers[i].getAttribute("label");
    // create the marker
    var marker = createMarker(point,name,html,icon);
    map.addOverlay(marker);
  }

  // == show or hide the categories initially ==
/*
  show("incoming");
  show("extreme");
  show("severe");
  show("moderate");
  show("minor");
  show("unknown");
  hide("cisco");
  hide("supply");
*/
});
}
