GMaps.prototype.createPanorama = function (streetview_options) {
  if (
    !streetview_options.hasOwnProperty("lat") ||
    !streetview_options.hasOwnProperty("lng")
  ) {
    streetview_options.lat = this.getCenter().lat();
    streetview_options.lng = this.getCenter().lng();
  }

  this.panorama = GMaps.createPanorama(streetview_options);

  this.map.setStreetView(this.panorama);

  return this.panorama;
};

GMaps.createPanorama = function (options) {
  var el = getElementById(options.el, options.context);

  options.position = new google.maps.LatLng(options.lat, options.lng);

  delete options.el;
  delete options.context;
  delete options.lat;
  delete options.lng;

  var streetview_events = [
      "closeclick",
      "links_changed",
      "pano_changed",
      "position_changed",
      "pov_changed",
      "resize",
      "visible_changed",
    ],
    streetview_options = extend_object({ visible: true }, options);

  for (var i = 0; i < streetview_events.length; i++) {
    delete streetview_options[streetview_events[i]];
  }

  var panorama = new google.maps.StreetViewPanorama(el, streetview_options);

  for (var i = 0; i < streetview_events.length; i++) {
    (function (object, name) {
      if (options[name]) {
        google.maps.event.addListener(object, name, function () {
          options[name].apply(this);
        });
      }
    })(panorama, streetview_events[i]);
  }

  return panorama;
};
