/* ------------------------------------------------------------------------ */ /* Lawang.ORG */ /* (C) 2011 COMBINE Resource Institution, Isnu Suntoro */ /* ------------------------------------------------------------------------ */ var map; var geocoder; var infoWindow; var urlhash = document.location.hash.substring(1); // BC AB SK MB ON QC NL NB NS PEI Territories (YT NU NT) var BLMapData = {}; var BLMarkers = []; var BLMinZoom = 4; var BLBounds; var BLDebugAlert = 0; /* ------------------------------------------------------------------------ */ function BLMapInitialize() { var browserGeoSupport = new Boolean(); var mapOptions = { mapTypeId: google.maps.MapTypeId.ROADMAP, navigationControl: true, navigationControlOptions: { style: google.maps.NavigationControlStyle.SMALL }, mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU, position: google.maps.ControlPosition.TOP_RIGHT }, scaleControl: true, }; BLBounds = new google.maps.LatLngBounds( // new google.maps.LatLng(42.0, -140.0), // SW // new google.maps.LatLng(70.0, -52.0) // NE //Indonesia new google.maps.LatLng(-11.0, 96.0), // SW new google.maps.LatLng(7.0, 130.0) // NE ); // BestLeaf Init BLMapData = BLGmapRegion(); // Google Maps Init geocoder = new google.maps.Geocoder(); map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); //iconGreen = 'http://labs.google.com/ridefinder/images/mm_20_green.png'; //iconBlue = 'http://labs.google.com/ridefinder/images/mm_20_blue.png'; //iconRed = 'http://labs.google.com/ridefinder/images/mm_20_red.png'; var customIcons = []; customIcons["1"] = '/images/gmap2/icons/agriculture4.png'; customIcons["4"] = '/images/gmap2/icons/agriculture4.png'; customIcons["8"] = '/images/gmap2/icons/agriculture4.png'; customIcons["256"] = '/images/gmap2/icons/friends.png'; infoWindow = new google.maps.InfoWindow({content: ""}); var markerArray = []; downloadUrl("/xml/all.php", function(data) { // Build infoWindow HTML var markers = data.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var latlng = new google.maps.LatLng( parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")) ); var marker = new google.maps.Marker({ position: latlng, map: map, title: markers[i].getAttribute("name"), icon: customIcons[markers[i].getAttribute("type")], zIndex: parseInt(markers[i].getAttribute("priority"), 10) }); marker.idnum = markers[i].getAttribute("idnum"); marker.region = markers[i].getAttribute("region"); //marker.html = BLGenMarkerHTML(markers[i]); google.maps.event.addListener(marker, 'click', function () { infoWindow.setContent(BLGenMarkerHTML(this.idnum)); infoWindow.open(map, this); }); BLMarkers.push(marker); } // Overlay is now loaded. INITIALIZE ********************* BLNavShowCity(); BLMapGoto(BLValidDest(urlhash) ? urlhash : false, true); }); google.maps.event.addListener(map, 'center_changed', function() { BLGmapBoundsChanged(); }); google.maps.event.addListener(map, 'zoom_changed', function() { BLGmapZoomChanged(); }); } /* ------------------------------------------------------------------------ */ function BLGmapZoomChanged() { //if (BLDebugAlert) alert("BLGmapZoomChanged now " + map.getZoom() + " min " + BLMinZoom); if (map.getZoom() < BLMinZoom) { map.setZoom(BLMinZoom); return; } getCurrentLatLngZoom(); } function BLGmapBoundsChanged() { //getCurrentLatLngZoom(); return; if (!BLBounds.contains(map.getCenter())) { // We're out of bounds - Move the map back within the bounds var c = map.getCenter(), x = c.lng(), y = c.lat(), maxX = BLBounds.getNorthEast().lng(), maxY = BLBounds.getNorthEast().lat(), minX = BLBounds.getSouthWest().lng(), minY = BLBounds.getSouthWest().lat(); if (x < minX) x = minX; if (x > maxX) x = maxX; if (y < minY) y = minY; if (y > maxY) y = maxY; map.setCenter(new google.maps.LatLng(y, x)); return; } getCurrentLatLngZoom(); } function getCurrentLatLngZoom() { // debug use var latlngElem = document.getElementById("latlng"); if (!latlngElem) return; var latElem = document.getElementById("lat"); var lngElem = document.getElementById("lng"); var zoomElem = document.getElementById("zoom"); var latlng = map.getCenter(); latElem.value = roundNumber(latlng.lat(), 6); lngElem.value = roundNumber(latlng.lng(), 6); zoomElem.value = map.getZoom(); latlngElem.value = latElem.value + "," + lngElem.value + "," + zoomElem.value; } /* ------------------------------------------------------------------------ */ function BLGenMarkerHTML(idnum) { // BLOCKING return getFile('/ajax/infowindow.php?id=' + idnum); // OLD var listingAnchor = ""; var phone = ""; if (data.getAttribute("phone")) phone = "
" + data.getAttribute("phone") + "
"; var html = "
" + "
" + listingAnchor + data.getAttribute("name") + "
" + "
" + data.getAttribute("address") + "
" + data.getAttribute("address2") + "
" + phone + "
" + data.getAttribute("description") + "
" + "
" + listingAnchor + "view full listing »
"; return html; } function BLValidDest(where) { //if (BLDebugAlert) alert("BLValidDest BLMapData = \n" + BLMapData[where]); if (!where || where == '') return false; if (0 == where.indexOf("listing-")) return true; if (BLMapData[where] == undefined) return false; return true; } function BLMapGoto(where, force) { var latlng; var zoom; var marker; var region; var city = false; if (!where) where = BL_DEFAULT_LOCATION; where = where.toLowerCase(); var arr = where.split("-"); if (arr.length == 2) { region = arr[0]; city = arr[1]; } else { region = where; } if (region == 'listing') { // Handle listing-id if (BLDebugAlert) alert("BLValidDest listing id " + city + "\nChecking markers " + BLMarkers.length); for (var i = 0; !marker && i < BLMarkers.length; i++) { if (BLMarkers[i].idnum == city) marker = BLMarkers[i]; } if (marker) { BLUpdateRegion(marker.region, force); latlng = marker.position; zoom = 15; } else { return BLMapGoto(false); // not found } } else { // Handle region & region-city BLUpdateRegion(region, force); BLUpdateCity(city); if (BLMapData[where] == undefined) where = 'DEFAULT'; latlng = new google.maps.LatLng(BLMapData[where]['lat'], BLMapData[where]['lng']); zoom = BLMapData[where]['zoom']; } // Update map view if (map) { //if (BLDebugAlert) alert("BLMapGoto map: " + where); infoWindow.close(); map.setCenter(latlng); map.setZoom(zoom); if (marker) google.maps.event.trigger(marker, 'click'); } } /* ------------------------------------------------------------------------ */ var BLSearchType = 4; // Called from button onclick function BLGotoNearestGeoIP(type) { if (type == undefined) type = 1; BLSearchType = type; var a = $('find-nearest-button'); if (a) btn.update(a, "Mencari..."); // DEBUG - assume Quesnel, BC //return BLGotoNearest(52.976296, -122.501335, BLSearchType); // Try W3C detection first. if (navigator.geolocation) navigator.geolocation.getCurrentPosition(W3CDetectOK, W3CDetectError); else W3CDetectError(false); } function W3CDetectOK(position) { if (BLDebugAlert) alert('W3CDetectOK ' + position.coords.latitude + "," + position.coords.longitude); BLGotoNearest(position.coords.latitude, position.coords.longitude, BLSearchType); } function W3CDetectError(error) { if (BLDebugAlert) { if (error) alert('W3CDetectError ' + error.message); alert("MaxMind GeoIP fallback"); } // http://www.maxmind.com/app/javascript_city BLGotoNearest(geoip_latitude(), geoip_longitude(), BLSearchType); } // Got user's location, find the nearest listing function BLGotoNearest(lat, lng, type) { new Ajax.Request('/ajax/findnearest.php', { parameters: { 'lat': lat, 'lng': lng, 'type': BLSearchType }, method: 'get', onSuccess: function(transport) { var data = transport.responseJSON; if (!data || !data.length) { var a = $('find-nearest-button'); if (!a) return; if (type == 4) { btn.update(a, "Belum ada data pasar! ..."); new Effect.Shake(a); new PeriodicalExecuter(function(pe) { pe.stop(); BLGotoNearestGeoIP(4); }, 3.5); } else { btn.update(a, "Belum ada data pasar disekitar anda!"); new Effect.Shake(a); } return; } BLMapGoto("listing-" + data[0]); }, }); } /* ------------------------------------------------------------------------ */ function codeAddress() { var address = document.getElementById("address").value; geocoder.geocode({'address': address}, codeAddressCallback); } function codeAddressCallback(results, status) { if (status == google.maps.GeocoderStatus.OK) { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({map: map, position: results[0].geometry.location}); } else { alert("Geocode failed: " + status); } }