// file = nodemap var WNMAP_GEOCODE_STATE_ABBR = "WA"; var WNMAP_GEOCODE_STATE_NAME = "Jakarta"; var WNMAP_MAP_START_LON = "114.605258"; var WNMAP_MAP_START_LAT = "-3.14463"; var WNMAP_ACCEPTABLE_DISTANCE = "500"; var WNMAP_MAP_START_ZOOM = "9"; var WNMAP_MAP_START_TYPE = "G_SATELLITE_MAP"; var WNMAP_MAP_URL = "http://map.el02itb.org"; var WNMAP_NODE_URL = "http://map.el02itb.org/"; // // NodeMap.js: Stuff. // // Authors: // Eric Butler // var map; var markers = []; var tunnels = []; var links = []; var gotoAddressWindow; var markerCount = 0; var firstLoad = true; function createMap () { map = new GMap2(document.getElementById("mapColumn")); map.addControl(new GLargeMapControl()); map.addControl (new GMapTypeControl()); map.setCenter(new GLatLng(WNMAP_MAP_START_LAT, WNMAP_MAP_START_LON), parseInt(WNMAP_MAP_START_ZOOM)); map.addControl(new GScaleControl()); new GKeyboardHandler(map, window); // Set default map type to WNMAP_MAP_START_TYPE eval("var mapType = " + WNMAP_MAP_START_TYPE); map.setMapType (mapType); GEvent.addListener (map, 'click', function (marker, point) { if (!marker) { addMarker (point.lat(), point.lng(), ''); } }); var request = GXmlHttp.create (); request.open ('GET', 'data.php', true); request.onreadystatechange = function () { if (request.readyState == 4) { var xmlDoc = request.responseXML; // Add Nodes var markersFromXml = xmlDoc.documentElement.getElementsByTagName ("nodes")[0].getElementsByTagName ("node"); for (var i = 0; i < markersFromXml.length; i++) { var name = markersFromXml[i].getAttribute("name"); var desc = markersFromXml[i].getAttribute("description"); var state = markersFromXml[i].getAttribute("state"); var addr = markersFromXml[i].getAttribute("streetAddress"); var lng = parseFloat(markersFromXml[i].getAttribute("lng")); var lat = parseFloat(markersFromXml[i].getAttribute("lat")); var node = new NodeMarker (name, desc, state, lng, lat); node.setStreetAddress (addr); markers[node.name] = node; } // Add Links var lnks = xmlDoc.documentElement.getElementsByTagName ("links")[0].getElementsByTagName ("link"); for (var i = 0; i < lnks.length; i++) { try { var link = new Object (); link.type = lnks[i].getAttribute("type"); link.node1 = markers [lnks[i].getAttribute("node1")]; link.node2 = markers [lnks[i].getAttribute("node2")]; link.point1 = markers [lnks[i].getAttribute("node1")].getPoint(); link.point2 = markers [lnks[i].getAttribute("node2")].getPoint(); links.push (link); } catch (e) { alert ("ERROR WITH LINK: " + lnks[i].getAttribute("node1") + " <--> " + lnks[i].getAttribute("node2") + ":\n\n" + e); } } // Add local markers var markersText = readCookie ("markers"); if (markersText != null) { var savedMarkers = markersText.split ('|'); for (var i = 0; i < savedMarkers.length; i++) { if (savedMarkers[i] != '') { var markerParameters = savedMarkers[i].split (','); var name = decode64 (markerParameters [0]); if (markers[name] == null) { var y = markerParameters [2]; var x = markerParameters [1]; var bad = false; for (key in markers) { if (markers[key].getPoint().lng() == x & markers[key].getPoint().lat() == y) { bad = true; break; } } if (bad) { break; } var marker = new NodeMarker (name, '', 'marker', x, y); markers[marker.name] = marker; markerCount ++; // If a street address is bundled in the cookie data, add it to the marker object. if (markerParameters [3]) { marker.setStreetAddress (decode64 (markerParameters [3])); } } } } } populateMap (); } } request.send (null); } function populateMap () { map.clearOverlays (); var nodeList = document.getElementById ("nodeList"); var markerList = document.getElementById ("markerList"); nodeList.innerHTML = ""; markerList.innerHTML = ""; // Add Markers for (var key in markers) { var node = markers[key]; if (node.state == 'active' && document.getElementById ("showActive").checked == false) { node.visible = false; continue; } else if (node.state == 'potential' && document.getElementById ("showPotential").checked == false) { node.visible = false; continue; } node.visible = true; map.addOverlay (node); if (node.state == 'active' | node.state == 'potential') { nodeList.innerHTML += '
  • ' + node.name + '  zoom
  • '; } else { markerList.innerHTML += '
  • (x)
    ' + node.name + '  zoom
  • '; } } // Add Links for (var i = 0; i < links.length; i++) { if (links[i].node1.visible == true && links[i].node2.visible == true) { var points = [] points.push (links[i].point1); points.push (links[i].point2); if (links[i].type == 'wifi') { if (document.getElementById ("showLinks").checked == true) { map.addOverlay (new GPolyline (points)); } } else { if (document.getElementById ("showTun").checked == true) { map.addOverlay (new GPolyline (points,"#ff8080")); } } } } // Save Markers var value = ''; var arr = new Array(); for (key in markers) { var marker = markers[key]; if (marker.state == 'marker') { arr.push(encode64 (marker.name) + ',' + marker.getPoint().lng() + ',' + marker.getPoint().lat() + ',' + encode64 (marker.streetAddress)); } } value = arr.join("|"); if (value != '') { createCookie ("markers", value, 300); } else { eraseCookie ("markers"); } if (firstLoad == true) { if (getQueryVariable ("select") != null) { if (markers[getQueryVariable("select")] != null) { markers[getQueryVariable("select")].zoomTo (); markers[getQueryVariable("select")].select (); } } } firstLoad = false; } function getMarker (b64index) { var index = decode64 (b64index); return markers[index]; } function addMarker (lat, lng, b64addr) { var streetAddress = decode64 (b64addr); showMarkers (); for (var key in markers) { if (markers[key].getPoint().lng() == lng & markers[key].getPoint().lat() == lat) { alert ("A marker at this point already exists."); return; } } markerCount ++; var marker = new NodeMarker ("Untitled Marker " + markerCount, '', 'marker', lng, lat); // store the street address if it was passed in if ( streetAddress != '' ) { marker.setStreetAddress (streetAddress); } markers[marker.name] = marker; populateMap (); marker.openInfoWindowHtml (marker.getHtml()); resizeMe (); scrollMarkersToBottom (); } function renamePrompt (b64name) { var name = decode64 (b64name); return prompt ('Enter a new name for this node:', name); } function renameMarker (oldB64Name, newName) { var oldName = decode64 (oldB64Name); if ( markers[newName] != null ) { alert("A marker named '" + newName + "' already exists!"); return 0; } var marker = markers [oldName]; marker.name = newName; markers [newName] = marker; markers [oldName] = null; delete markers[oldName]; populateMap (); } // some helper functions // based on code from // http://www.activsoftware.com/code_samples/code.cfm/CodeID/59/JavaScript/Get_Query_String_variables_in_JavaScript function getQueryVariable (variable) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i=0;i