google.load("maps", "2"); google.setOnLoadCallback(b2_locator_initialize); var map; var mapControl; var markeranchor = new Array(); var point = new Array(); var markercounter = 0; var center; var updating = false; var clicked = false; function b2_locator_initialize() { if (GBrowserIsCompatible()) { map = new GMap2(document.getElementById('map'), { size: new GSize(460,300) }); mapControl = new GMapTypeControl(); map.addControl(mapControl); map.addControl(new GLargeMapControl()); map.enableContinuousZoom(); goToLocation('Toronto Ontario'); b2_location_initialize_search(); } } function goToLocation(address) { var geoCoder = new GClientGeocoder(); var tabAccuracy = new Array(2,4,6,10,12,13,13,13,13); geoCoder.getLocations(address, function(response) { if(response.Status.code == 200){ place = response.Placemark[0]; accuracy = place.AddressDetails.Accuracy; map.setCenter(new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]), tabAccuracy[accuracy]); } else { alert("Sorry that location could not be found. Please try again."); } }); } function b2_location_initialize_search() { $('b2_locator_productSearchText').onclick = function() { reset_search() }; $('b2_locator_productSearchLocationSubmit').onclick = function() { locationSubmit($('b2_locator_productSearchLocation').value) }; var contact_name_auto_completer = new Ajax.Autocompleter('b2_locator_productSearchText', 'b2_locator_productSearchResults', B2LocatorSetup.locPost+'?action=getProducts', { afterUpdateElement : updateMap, callback: clearSelectedID, frequency: 0.1, minChars:1 }); GEvent.addListener(map, "moveend", function() { move_end(); }); } function move_end() { if(!clicked) { ajaxUpdate(0); } else { clicked = false; } } function reset_search() { clearSelectedID(); $('b2_locator_productSearchText').value = ''; $('b2_locator_productSearchLocation').value = ''; ajaxUpdate(0); } function ajaxUpdate(page) { if(updating == false) { setSearchCoords(); updating = true; new Ajax.Updater("b2_locator_productSearchResultsNotifier",B2LocatorSetup.locPost+"?action=getVendors", { asynchronous:true, evalScripts:true, onComplete:function(request, json) { updating = false; var markers = new Array(); markers = json; clearMarkers(); if(markers.length > 0) { addMarkersFromJSON(markers); } }, parameters:Form.serialize("b2_locator_productSearch") }); } } function addMarkersFromJSON(markers) { for (var i = 0; i < markers.length; i++) { var myIcon = {}; myIcon = new GIcon(); myIcon.image = B2LocatorSetup.url+"/wp-content/plugins/b2_locator/images/icon.png"; myIcon.iconSize = new GSize(32, 32); myIcon.shadow = B2LocatorSetup.url+"/wp-content/plugins/b2_locator/images/shadow.png"; myIcon.shadowSize = new GSize(36, 32); myIcon.iconAnchor = new GPoint(6, 20); myIcon.infoWindowAnchor = new GPoint(5, 1); var markerOptions = {}; markerOptions = { icon:myIcon }; point[i] = new GLatLng(parseFloat(markers[i].latitude), parseFloat(markers[i].longitude)); map.addOverlay(createMarker(point[i], markerOptions, i, markers[i])); markercounter++; } } function createMarker(point, markerOptions, number, node) { var marker = new GMarker(point, markerOptions); var ref = this; GEvent.addListener(marker, "click", function() { var myHtml = "" + node.vendorName + "
"+node.streetAddress+"
"+node.city+"," + node.postalCode + "
" + node.telephone; map.openInfoWindowHtml(point, myHtml); ref.clicked = true; }); return marker; } function clearMarkers() { map.clearOverlays(); markercounter = 0; point = new Array(); } function setSearchCoords() { var center = map.getCenter(); var bounds = map.getBounds(); document.getElementById("b2_locator_productSearchCenterLat").value = center.lat(); document.getElementById("b2_locator_productSearchCenterLong").value = center.lng(); document.getElementById("b2_locator_productSearchZoom").value = map.getZoom(); document.getElementById("b2_locator_productSearchSouthWestLat").value = bounds.getSouthWest().lat(); document.getElementById("b2_locator_productSearchSouthWestLong").value = bounds.getSouthWest().lng(); document.getElementById("b2_locator_productSearchNorthEastLat").value = bounds.getNorthEast().lat(); document.getElementById("b2_locator_productSearchNorthEastLong").value = bounds.getNorthEast().lng(); } function updateMap(text, li) { var the_id = li.id; the_id = the_id.replace("b2_locator_productSearchOption_", ""); $('b2_locator_productSearchID').value=the_id; clearMarkers(); ajaxUpdate(0); } function clearSelectedID(field, query) { $('b2_locator_productSearchID').value=''; return query; } function locationSubmit(location) { if(location == '') { ajaxUpdate(0); } else { goToLocation(location); } }