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);