File indexing completed on 2026-04-09 07:58:27
0001 GMaps.prototype.drawOverlay = function(options) {
0002 var overlay = new google.maps.OverlayView(),
0003 auto_show = true;
0004
0005 overlay.setMap(this.map);
0006
0007 if (options.auto_show != null) {
0008 auto_show = options.auto_show;
0009 }
0010
0011 overlay.onAdd = function() {
0012 var el = document.createElement('div');
0013
0014 el.style.borderStyle = "none";
0015 el.style.borderWidth = "0px";
0016 el.style.position = "absolute";
0017 el.style.zIndex = 100;
0018 el.innerHTML = options.content;
0019
0020 overlay.el = el;
0021
0022 if (!options.layer) {
0023 options.layer = 'overlayLayer';
0024 }
0025
0026 var panes = this.getPanes(),
0027 overlayLayer = panes[options.layer],
0028 stop_overlay_events = ['contextmenu', 'DOMMouseScroll', 'dblclick', 'mousedown'];
0029
0030 overlayLayer.appendChild(el);
0031
0032 for (var ev = 0; ev < stop_overlay_events.length; ev++) {
0033 (function(object, name) {
0034 google.maps.event.addDomListener(object, name, function(e){
0035 if (navigator.userAgent.toLowerCase().indexOf('msie') != -1 && document.all) {
0036 e.cancelBubble = true;
0037 e.returnValue = false;
0038 }
0039 else {
0040 e.stopPropagation();
0041 }
0042 });
0043 })(el, stop_overlay_events[ev]);
0044 }
0045
0046 if (options.click) {
0047 panes.overlayMouseTarget.appendChild(overlay.el);
0048 google.maps.event.addDomListener(overlay.el, 'click', function() {
0049 options.click.apply(overlay, [overlay]);
0050 });
0051 }
0052
0053 google.maps.event.trigger(this, 'ready');
0054 };
0055
0056 overlay.draw = function() {
0057 var projection = this.getProjection(),
0058 pixel = projection.fromLatLngToDivPixel(new google.maps.LatLng(options.lat, options.lng));
0059
0060 options.horizontalOffset = options.horizontalOffset || 0;
0061 options.verticalOffset = options.verticalOffset || 0;
0062
0063 var el = overlay.el,
0064 content = el.children[0],
0065 content_height = content.clientHeight,
0066 content_width = content.clientWidth;
0067
0068 switch (options.verticalAlign) {
0069 case 'top':
0070 el.style.top = (pixel.y - content_height + options.verticalOffset) + 'px';
0071 break;
0072 default:
0073 case 'middle':
0074 el.style.top = (pixel.y - (content_height / 2) + options.verticalOffset) + 'px';
0075 break;
0076 case 'bottom':
0077 el.style.top = (pixel.y + options.verticalOffset) + 'px';
0078 break;
0079 }
0080
0081 switch (options.horizontalAlign) {
0082 case 'left':
0083 el.style.left = (pixel.x - content_width + options.horizontalOffset) + 'px';
0084 break;
0085 default:
0086 case 'center':
0087 el.style.left = (pixel.x - (content_width / 2) + options.horizontalOffset) + 'px';
0088 break;
0089 case 'right':
0090 el.style.left = (pixel.x + options.horizontalOffset) + 'px';
0091 break;
0092 }
0093
0094 el.style.display = auto_show ? 'block' : 'none';
0095
0096 if (!auto_show) {
0097 options.show.apply(this, [el]);
0098 }
0099 };
0100
0101 overlay.onRemove = function() {
0102 var el = overlay.el;
0103
0104 if (options.remove) {
0105 options.remove.apply(this, [el]);
0106 }
0107 else {
0108 overlay.el.parentNode.removeChild(overlay.el);
0109 overlay.el = null;
0110 }
0111 };
0112
0113 this.overlays.push(overlay);
0114 return overlay;
0115 };
0116
0117 GMaps.prototype.removeOverlay = function(overlay) {
0118 for (var i = 0; i < this.overlays.length; i++) {
0119 if (this.overlays[i] === overlay) {
0120 this.overlays[i].setMap(null);
0121 this.overlays.splice(i, 1);
0122
0123 break;
0124 }
0125 }
0126 };
0127
0128 GMaps.prototype.removeOverlays = function() {
0129 for (var i = 0, item; item = this.overlays[i]; i++) {
0130 item.setMap(null);
0131 }
0132
0133 this.overlays = [];
0134 };