var map; var ib; var objects; var notmapped; var countries; var sponsorships; function Tooltip(opts, marker) { this.setValues(opts); this.map_ = opts.map; this.marker_ = marker; var div = this.div_ = document.createElement("div"); div.className = "tooltip2"; this.markerDragging = false; } Tooltip.prototype = { draw: function() {}, visible_changed: function() { var vis = this.get("visible"); this.div_.style.visibility = vis ? "visible" : "hidden"; }, getPos: function(e) { var projection = this.getProjection(); var pixel = projection.fromLatLngToDivPixel(e.latLng); var div = this.div_; var gap = 15; var posX = pixel.x + gap; var posY = pixel.y + gap; var menuwidth = div.offsetWidth; var boundsNE = this.map_.getBounds().getNorthEast(); boundsNE.pixel = projection.fromLatLngToDivPixel(boundsNE); if (menuwidth + posX > boundsNE.pixel.x) { posX -= menuwidth + gap; } div.style.left = posX + "px"; div.style.top = posY + "px"; if (!this.markerDragging) { this.set("visible", true); } }, addTip: function() { var me = this; var g = google.maps.event; var div = me.div_; if (left(me.get("text").toString(),5) == 'text:') { div.innerHTML = me.get("text").toString().replace("text:", ""); } else if (left(me.get("text").toString(),7) == 'Sponsor') { div.innerHTML = 'Sponsor'; } else if (isNaN(parseInt(me.get("text").toString()))) { div.innerHTML = 'Unmapped Data Centers'; } else { var request = new XMLHttpRequest(); request.open("GET", '/ajax/map.html?id=' + me.get("text").toString() + 'a3', true); request.onreadystatechange = function () { if (request.readyState == 4) { div.innerHTML = request.responseText; } }; request.send(null); } //div.innerHTML = me.get("text").toString(); me.set("visible", false); me.getPanes().floatPane.appendChild(this.div_); me.listeners = [ g.addListener(me.map_, "mousemove", function(e) { me.getPos(e); }) ]; }, removeTip: function() { if (this.listeners) { for (var i = 0, listener; listener = this.listeners[i]; i++) { google.maps.event.removeListener(listener); } delete this.listeners; } var parent = this.div_.parentNode; if (parent) parent.removeChild(this.div_); } }; function inherit(addTo, getFrom) { var from = getFrom.prototype; var to = addTo.prototype; for (var prop in from) { if (typeof to[prop] == "undefined") to[prop] = from[prop]; } } inherit(Tooltip, google.maps.OverlayView); function doTip(thetip){ var b=google.maps.event; var d=new Tooltip({map:map}, thetip); d.bindTo("position",thetip,"position"); d.bindTo("text",thetip,"tooltip"); b.addListener(thetip,"mouseover",function(){ d.addTip(); }); b.addListener(thetip,"mouseout",function(){ d.removeTip(); }); return d } function left(str, n){ if (n <= 0) return ""; else if (n > String(str).length) return str; else return String(str).substring(0,n); } function right(str, n){ if (n <= 0) return ""; else if (n > String(str).length) return str; else { var iLen = String(str).length; return String(str).substring(iLen, iLen - n); } } var icon0 = new google.maps.MarkerImage('/img/icon0.png',new google.maps.Size(12, 20),new google.maps.Point(0,0),new google.maps.Point(6, 20)); var icon1 = new google.maps.MarkerImage('/img/icon1.png',new google.maps.Size(12, 20),new google.maps.Point(0,0),new google.maps.Point(6, 20)); var icon2 = new google.maps.MarkerImage('/img/icon2.png',new google.maps.Size(12, 20),new google.maps.Point(0,0),new google.maps.Point(6, 20)); var icon3 = new google.maps.MarkerImage('/img/icon3.png',new google.maps.Size(12, 20),new google.maps.Point(0,0),new google.maps.Point(6, 20)); var icon0p = new google.maps.MarkerImage('/img/icon0p.png',new google.maps.Size(16, 24),new google.maps.Point(0,0),new google.maps.Point(6, 20)); var icon1p = new google.maps.MarkerImage('/img/icon1p.png',new google.maps.Size(16, 24),new google.maps.Point(0,0),new google.maps.Point(6, 20)); var icon2p = new google.maps.MarkerImage('/img/icon2p.png',new google.maps.Size(16, 24),new google.maps.Point(0,0),new google.maps.Point(6, 20)); var iconP = new google.maps.MarkerImage('/img/iconP.png',new google.maps.Size(6, 10),new google.maps.Point(0,0),new google.maps.Point(3, 10)); var iconi = new google.maps.MarkerImage('/img/iconi.png',new google.maps.Size(15, 26),new google.maps.Point(0,0),new google.maps.Point(6, 20)); var iconZ = new google.maps.MarkerImage('/img/zoom.png',new google.maps.Size(20, 20),new google.maps.Point(0,0),new google.maps.Point(6, 20)); var iconC = new google.maps.MarkerImage('/img/iconc.png',new google.maps.Size(22, 20),new google.maps.Point(0,0),new google.maps.Point(10, 12)); var shadow = new google.maps.MarkerImage("http://labs.google.com/ridefinder/images/mm_20_shadow.png", null, null, new google.maps.Point(6,20)); function dcmHtmlBox(dMap,dMarker,dUrl) { ib.removeTab(1); ib.removeTab(0); ib.setContent('
' + dMarker.html + '
'); ib.open(dMap, dMarker); } function dcmAjaxBox(dMap,dMarker,dUrl) { ib.removeTab(1); ib.removeTab(0); if (dMarker.infotype == '2' || dMarker.infotype == '2p') { var request = new XMLHttpRequest(); request.open("GET", dUrl, true); request.onreadystatechange = function () { if (request.readyState == 4) { ib.addTab('Building', '
' + request.responseText + '
'); } }; request.send(null); var request2 = new XMLHttpRequest(); request2.open("GET", dUrl.replace("a1", "a2"), true); request2.onreadystatechange = function () { if (request2.readyState == 4) { ib.addTab('Tenants', '
' + request2.responseText + '
'); } }; request2.send(null); ib.open(dMap, dMarker); } else { var request = new XMLHttpRequest(); request.open("GET", dUrl, true); request.onreadystatechange = function () { if (request.readyState == 4) { ib.setContent('
' + request.responseText + '
'); ib.open(dMap, dMarker); } }; request.send(null); } } function getJSON(url) { var request = new XMLHttpRequest(); request.open("GET", url, true); request.onreadystatechange = function () { if (request.readyState == 4) { if (url == 'cache/json_objects.html') { objects = eval( "(" + request.responseText + ")" ); } if (url == 'cache/json_notmapped.html') { notmapped = eval( "(" + request.responseText + ")" ); } if (url == 'cache/json_countries.html') { countries = eval( "(" + request.responseText + ")" ); } if (url == 'cache/json_sponsorships.html') { sponsorships = eval( "(" + request.responseText + ")" ); } } }; request.send(null); } function jumpTo(selectId){ var sc = document.getElementById(selectId).value.split(","); map.setCenter(new google.maps.LatLng(sc[0],sc[1])); map.setZoom(parseInt(sc[2])); } getJSON('cache/json_countries.html'); function initialize() { var center = new google.maps.LatLng(31.503629, 30.410156); map = new google.maps.Map(document.getElementById('map'), { zoom: 2, center: center, overviewMapControl: true, overviewMapControlOptions: { opened: true }, mapTypeId: google.maps.MapTypeId.ROADMAP }); ib = new InfoBubble({ map: map, content: 'Loading...', shadowStyle: 1, padding: 8, backgroundColor: '#FFFFFF', borderRadius: 4, arrowSize: 10, borderWidth: 1, borderColor: '#808080', disableAutoPan: true, arrowPosition: 30, backgroundClassName: 'infoboxBg', arrowStyle: 2 }); var markersArray = []; for (var i = 0; i < countries.markers.length; i++) { var country = countries.markers[i]; var latLng = new google.maps.LatLng(country.a,country.o); var marker = new google.maps.Marker({ map: map, position: latLng, zoomlevel: country.z, icon: iconZ, shadow: shadow, tooltip: 'text:' + country.n + ' (' + country.c + ')', optimized: false, infotype: 'notmapped', id: country.i }); doTip(marker); google.maps.event.addListener(marker, 'click', function() { google.maps.event.trigger(this, 'mouseout'); map.setCenter(this.position); map.setZoom(this.zoomlevel); }); markersArray.push(marker); } var zoomed; google.maps.event.addListener(map, 'zoom_changed', function() { if (map.getZoom() > 2) { if (!(zoomed==1)) { if (markersArray) { for (var i = 0; i < markersArray.length; i++) { markersArray[i].setMap(null); } } var markers = []; for (var i = 0; i < objects.markers.length; i++) { var object = objects.markers[i]; var latLng = new google.maps.LatLng(object.a,object.o); var marker = new google.maps.Marker({ position: latLng, icon: eval("icon" + object.i), shadow: shadow, tooltip: object.l, optimized: false, infotype: object.i, id: object.l }); google.maps.event.addListener(marker, 'click', function() { dcmAjaxBox(map,this,'/ajax/map.html?id=' + this.id + 'a1'); }); doTip(marker); markers.push(marker); } for (var i = 0; i < notmapped.markers.length; i++) { var nomap = notmapped.markers[i]; var latLng = new google.maps.LatLng(nomap.a,nomap.o); var marker = new google.maps.Marker({ position: latLng, icon: iconi, shadow: shadow, tooltip: nomap.i, optimized: false, infotype: 'notmapped', id: nomap.i }); google.maps.event.addListener(marker, 'click', function() { dcmAjaxBox(map,this,'/ajax/notmapped.html?id=' + this.id + '&type=area'); }); doTip(marker); markers.push(marker); } for (var i = 0; i < sponsorships.markers.length; i++) { var sponsor = sponsorships.markers[i]; var latLng = new google.maps.LatLng(sponsor.a,sponsor.o); var marker = new google.maps.Marker({ position: latLng, icon: new google.maps.MarkerImage('/ox/' + sponsor.i + '_map.png',new google.maps.Size(sponsor.h, sponsor.w),new google.maps.Point(0,0),new google.maps.Point(-5, -5)), tooltip: 'Sponsor', optimized: false, infotype: 'sponsorships', id: sponsor.n }); google.maps.event.addListener(marker, 'click', function() { dcmAjaxBox(map,this,'/ajax/sponsorships.html?id=' + this.id + '&type=area'); }); doTip(marker); markers.push(marker); } var mcClusterIconFolder = "/img/mc"; var mcOptions = {averageCenter: true, gridSize: 30, maxZoom: 10, title: 'Click to zoom in',styles: [ { height: 53, url: mcClusterIconFolder + "/m1.png", width: 53 }, { height: 56, url: mcClusterIconFolder + "/m2.png", width: 56 }, { height: 66, url: mcClusterIconFolder + "/m3.png", width: 66 }, { height: 78, url: mcClusterIconFolder + "/m4.png", width: 78 }, { height: 90, url: mcClusterIconFolder + "/m5.png", width: 90 } ]}; var markerCluster = new MarkerClusterer(map, markers, mcOptions); zoomed = 1; } } }); getJSON('cache/json_objects.html'); getJSON('cache/json_notmapped.html'); getJSON('cache/json_sponsorships.html'); } google.maps.event.addDomListener(window, 'load', initialize);