var prevInfoWindow = null; function prepareSignMarker(marker, item) { var c = "

" + item.msg.replace(/\n/g,"
") + "

"; var infowindow = new google.maps.InfoWindow({content: c }); google.maps.event.addListener(marker, 'click', function() { if (prevInfoWindow) prevInfoWindow.close() infowindow.open(map,marker); prevInfoWindow = infowindow }); } function drawMapControls() { // compass rose, in the top right corner var compassDiv = document.createElement('DIV'); compassDiv.style.padding = '5px'; var compassImg = document.createElement('IMG'); compassImg.src="compass.png"; compassDiv.appendChild(compassImg); map.controls[google.maps.ControlPosition.TOP_RIGHT].push(compassDiv); if (signGroups.length > 0) { // signpost display control // var signControl = document.createElement("DIV"); signControl.id = "signControl"; // let's let a style sheet do most of the styling here var controlBorder = document.createElement("DIV"); controlBorder.id="top"; signControl.appendChild(controlBorder); var controlText = document.createElement("DIV"); controlBorder.appendChild(controlText); controlText.innerHTML = "Signposts"; var dropdownDiv = document.createElement("DIV"); $(controlText).click(function() { $(dropdownDiv).toggle(); }); dropdownDiv.id="dropDown"; signControl.appendChild(dropdownDiv); dropdownDiv.innerHTML=""; map.controls[google.maps.ControlPosition.TOP_RIGHT].push(signControl); var hasSignGroup = false; for (idx in signGroups) { var item = signGroups[idx]; //console.log(item); label = item.label; hasSignGroup = true; var d = document.createElement("div"); var n = document.createElement("input"); n.type="checkbox"; $(n).data("label",label); jQuery(n).click(function(e) { var t = $(e.target); jQuery.each(markerCollection[t.data("label")], function(i,elem) {elem.setVisible(e.target.checked);}); }); if (item.checked) { n.checked = true; jQuery.each(markerCollection[label], function(i,elem) {elem.setVisible(n.checked);}); } dropdownDiv.appendChild(d); d.appendChild(n) var textNode = document.createElement("text"); textNode.innerHTML = label + "
"; d.appendChild(textNode); } } } function initRegions() { if (regionsInit) { return; } regionsInit = true; for (i in regionData) { var region = regionData[i]; var converted = new google.maps.MVCArray(); for (j in region.path) { var point = region.path[j]; converted.push(fromWorldToLatLng(point.x, point.y, point.z)); } if (region.closed) { new google.maps.Polygon({clickable: false, geodesic: false, map: map, strokeColor: region.color, strokeOpacity: region.opacity, strokeWeight: 2, fillColor: region.color, fillOpacity: region.opacity * 0.25, zIndex: i, paths: converted }); } else { new google.maps.Polyline({clickable: false, geodesic: false, map: map, strokeColor: region.color, strokeOpacity: region.opacity, strokeWeight: 2, zIndex: i, path: converted }); } } } function initMarkers() { if (markersInit) { return; } markersInit = true; for (i in markerData) { var item = markerData[i]; // a default: var iconURL = ''; if (item.type == 'spawn') { // don't filter spawn, always display iconURL = 'http://google-maps-icons.googlecode.com/files/home.png'; var converted = fromWorldToLatLng(item.x, item.y, item.z); var marker = new google.maps.Marker({position: converted, map: map, title: jQuery.trim(item.msg), icon: iconURL }); continue; } var matched = false; for (idx in signGroups) { var signGroup = signGroups[idx]; var testfunc = signGroup.match; var label = signGroup.label; if (testfunc(item)) { matched = true; if (item.type == 'sign') { iconURL = 'signpost_icon.png';} var converted = fromWorldToLatLng(item.x, item.y, item.z); var marker = new google.maps.Marker({position: converted, map: map, title: jQuery.trim(item.msg), icon: iconURL, visible: false }); if (markerCollection[label]) { markerCollection[label].push(marker); } else { markerCollection[label] = [marker]; } if (item.type == 'sign') { prepareSignMarker(marker, item); } } } if (!matched) { // is this signpost doesn't match any of the groups in config.js, add it automatically to the "__others__" group if (item.type == 'sign') { iconURL = 'signpost_icon.png';} var converted = fromWorldToLatLng(item.x, item.y, item.z); var marker = new google.maps.Marker({position: converted, map: map, title: jQuery.trim(item.msg), icon: iconURL, visible: false }); if (markerCollection["__others__"]) { markerCollection["__others__"].push(marker); } else { markerCollection["__others__"] = [marker]; } if (item.type == 'sign') { prepareSignMarker(marker, item); } } } } function makeLink() { var a=location.href.substring(0,location.href.lastIndexOf("/")+1) + "?lat=" + map.getCenter().lat().toFixed(6) + "&lng=" + map.getCenter().lng().toFixed(6) + "&zoom=" + map.getZoom(); document.getElementById("link").innerHTML = a; } function initialize() { var query = location.search.substring(1); var lat = 0.5; var lng = 0.5; var zoom = config.defaultZoom; var pairs = query.split("&"); for (var i=0; i= Math.pow(2, zoom) || tile.y < 0 || tile.y >= Math.pow(2, zoom)) { url += '/blank'; } else if(zoom == 0) { url += '/base'; } else { for(var z = zoom - 1; z >= 0; --z) { var x = Math.floor(tile.x / Math.pow(2, z)) % 2; var y = Math.floor(tile.y / Math.pow(2, z)) % 2; url += '/' + (x + 2 * y); } } url = url + '.' + config.fileExt; if(config.cacheMinutes > 0) { var d = new Date(); url += '?c=' + Math.floor(d.getTime() / (1000 * 60 * config.cacheMinutes)); } return(url); }, tileSize: new google.maps.Size(config.tileSize, config.tileSize), maxZoom: config.maxZoom, minZoom: 0, isPng: !(config.fileExt.match(/^png$/i) == null) }; var MCMapType = new google.maps.ImageMapType(MCMapOptions); MCMapType.name = "MC Map"; MCMapType.alt = "Minecraft Map"; MCMapType.projection = new MCMapProjection(); function CoordMapType() { } function CoordMapType(tileSize) { this.tileSize = tileSize; } CoordMapType.prototype.getTile = function(coord, zoom, ownerDocument) { var div = ownerDocument.createElement('DIV'); div.innerHTML = "(" + coord.x + ", " + coord.y + ", " + zoom + ")"; div.innerHTML += "
"; div.innerHTML += MCMapOptions.getTileUrl(coord, zoom); div.style.width = this.tileSize.width + 'px'; div.style.height = this.tileSize.height + 'px'; div.style.fontSize = '10'; div.style.borderStyle = 'solid'; div.style.borderWidth = '1px'; div.style.borderColor = '#AAAAAA'; return div; };