GMaps.prototype.addMapType = function (mapTypeId, options) {
  if (
    options.hasOwnProperty("getTileUrl") &&
    typeof options["getTileUrl"] == "function"
  ) {
    options.tileSize = options.tileSize || new google.maps.Size(256, 256);

    var mapType = new google.maps.ImageMapType(options);

    this.map.mapTypes.set(mapTypeId, mapType);
  } else {
    throw "'getTileUrl' function required.";
  }
};

GMaps.prototype.addOverlayMapType = function (options) {
  if (
    options.hasOwnProperty("getTile") &&
    typeof options["getTile"] == "function"
  ) {
    var overlayMapTypeIndex = options.index;

    delete options.index;

    this.map.overlayMapTypes.insertAt(overlayMapTypeIndex, options);
  } else {
    throw "'getTile' function required.";
  }
};

GMaps.prototype.removeOverlayMapType = function (overlayMapTypeIndex) {
  this.map.overlayMapTypes.removeAt(overlayMapTypeIndex);
};
