text: /*
   * Google layer using Google Maps API
   */
  //(function (google, L) {
  
  L.Google = L.Class.extend({
  	includes: L.Mixin.Events,
  
  	options: {
  		minZoom: 0,
  		maxZoom: 18,
  		tileSize: 256,
  		subdomains: 'abc',
  		errorTileUrl: '',
  		attribution: '',
  		opacity: 1,
  		continuousWorld: false,
  		noWrap: false
  	},
  
  	// Possible types: SATELLITE, ROADMAP, HYBRID, TERRAIN
  	initialize: function(type, options) {
  		L.Util.setOptions(this, options);
  
  		this._ready = google.maps.Map != undefined;
  		if (!this._ready) L.Google.asyncWait.push(this);
  
  		this._type = type || 'SATELLITE';
  	},
  
  	onAdd: function(map, insertAtTheBottom) {
  		this._map = map;
  		this._insertAtTheBottom = insertAtTheBottom;
  
  		// create a container div for tiles
  		this._initContainer();
  		this._initMapObject();
  
  		// set up events
  		map.on('viewreset', this._resetCallback, this);
  
  		this._limitedUpdate = L.Util.limitExecByInterval(this._update, 150, this);
  		map.on('move', this._update, this);
  		//map.on('moveend', this._update, this);
  
  		map._controlCorners['bottomright'].style.marginBottom = "1em";
  
  		this._reset();
  		this._update();
  	},
  
  	onRemove: function(map) {
  		this._map._container.removeChild(this._container);
  		//this._container = null;
  
  		this._map.off('viewreset', this._resetCallback, this);
  
  		this._map.off('move', this._update, this);
  		map._controlCorners['bottomright'].style.marginBottom = "0em";
  		//this._map.off('moveend', this._update, this);
  	},
  
  	getAttribution: function() {
  		return this.options.attribution;
  	},
  
  	setOpacity: function(opacity) {
  		this.options.opacity = opacity;
  		if (opacity < 1) {
  			L.DomUtil.setOpacity(this._container, opacity);
  		}
  	},
  
  	setElementSize: function(e, size) {
  		e.style.width = size.x + "px";
  		e.style.height = size.y + "px";
  	},
  
  	_initContainer: function() {
  		var tilePane = this._map._container,
  			first = tilePane.firstChild;
  
  		if (!this._container) {
  			this._container = L.DomUtil.create('div', 'leaflet-google-layer leaflet-top leaflet-left');
  			this._container.id = "_GMapContainer_" + L.Util.stamp(this);
  			this._container.style.zIndex = "auto";
  		}
  
  		if (true) {
  			tilePane.insertBefore(this._container, first);
  
  			this.setOpacity(this.options.opacity);
  			this.setElementSize(this._container, this._map.getSize());
  		}
  	},
  
  	_initMapObject: function() {
  		if (!this._ready) return;
  		this._google_center = new google.maps.LatLng(0, 0);
  		var map = new google.maps.Map(this._container, {
  		    center: this._google_center,
  		    zoom: 0,
  		    tilt: 0,
  		    mapTypeId: google.maps.MapTypeId[this._type],
  		    disableDefaultUI: true,
  		    keyboardShortcuts: false,
  		    draggable: false,
  		    disableDoubleClickZoom: true,
  		    scrollwheel: false,
  		    streetViewControl: false
  		});
  
  		var _this = this;
  		this._reposition = google.maps.event.addListenerOnce(map, "center_changed",
  			function() { _this.onReposition(); });
  
  		map.backgroundColor = '#ff0000';
  		this._google = map;
  	},
  
  	_resetCallback: function(e) {
  		this._reset(e.hard);
  	},
  
  	_reset: function(clearOldContainer) {
  		this._initContainer();
  	},
  
  	_update: function() {
  		if (!this._google) return;
  		this._resize();
  
  		var bounds = this._map.getBounds();
  		var ne = bounds.getNorthEast();
  		var sw = bounds.getSouthWest();
  		var google_bounds = new google.maps.LatLngBounds(
  			new google.maps.LatLng(sw.lat, sw.lng),
  			new google.maps.LatLng(ne.lat, ne.lng)
  		);
  		var center = this._map.getCenter();
  		var _center = new google.maps.LatLng(center.lat, center.lng);
  
  		this._google.setCenter(_center);
  		this._google.setZoom(this._map.getZoom());
  		//this._google.fitBounds(google_bounds);
  	},
  
  	_resize: function() {
  		var size = this._map.getSize();
  		if (this._container.style.width == size.x &&
  		    this._container.style.height == size.y)
  			return;
  		this.setElementSize(this._container, size);
  		this.onReposition();
  	},
  
  	onReposition: function() {
  		if (!this._google) return;
  		google.maps.event.trigger(this._google, "resize");
  	}
  });
  
  L.Google.asyncWait = [];
  L.Google.asyncInitialize = function() {
  	var i;
  	for (i = 0; i < L.Google.asyncWait.length; i++) {
  		var o = L.Google.asyncWait[i];
  		o._ready = true;
  		if (o._container) {
  			o._initMapObject();
  			o._update();
  		}
  	}
  	L.Google.asyncWait = [];
  }
  //})(window.google, L)