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