/*global EMS, OpenLayers, WPOL, document, jQuery, namespace, window, alert */
namespace('WPOL').Ems = function () {
var ZOOM_LEVEL = 12,
appendCustomZoomBar = function (map) {
EMS.Control.ZoomBar.X = -1;
EMS.Control.ZoomBar.Y = -12;
var zoomBar = new EMS.Control.ZoomBar(map.whereis_street_wms, map.whereis_photo_wms,
map.whereis_hybrid_wms, false, false);
map.addControl(zoomBar);
zoomBar.div.removeChild(zoomBar.northArrow);
},
toCoordinate = function (geocodedAddress) {
return new EMS.LonLat(geocodedAddress.longitude, geocodedAddress.latitude);
};
return {
geocodeAddressCallback: function (emsAddresses, emsClientCallback) {
var parse = function (emsAddress) {
emsAddress = emsAddress.address;
var address = WPOL.Address(emsAddress.streetNumber, emsAddress.street.name, emsAddress.street.type,
emsAddress.suburb, emsAddress.state);
return WPOL.GeocodedAddress(address, emsAddress.coordinates.latitude, emsAddress.coordinates.longitude);
};
// parse and create geocode addresses and callback the client
var geocodedAddresses = [];
for (var i = 0; i < emsAddresses.results.length; i++) {
geocodedAddresses.push(parse(emsAddresses.results[i]));
}
emsClientCallback(geocodedAddresses);
},
geocode: function (address, callback, exceptionCallback) {
var geocoder = new EMS.Services.Geocoder();
geocoder.findAddress(address.streetFullName(), address.suburb, address.state, function (emsAddresses) {
return WPOL.Ems.geocodeAddressCallback(emsAddresses, callback);
}, {
onException: exceptionCallback
});
},
map: function (geocodedAddress, onInit, nanoMap) {
var coordinate = toCoordinate(geocodedAddress);
var mapNode = jQuery('<div class="mapContainer" style="position: absolute; margin: -10000px"></div>');
var mouseDefaults = new EMS.Control.MouseDefaults();
var mapOptions = {
center: coordinate,
zoom: ZOOM_LEVEL,
controls: [ new EMS.Control.Copyright(), mouseDefaults, new EMS.Control.NorthArrow(),
new EMS.Control.Scale() ],
onInit: function () {
onInit(mapNode.remove().attr('style', ''));
}
};
if (typeof (nanoMap) === 'undefined' || !nanoMap) {
mapOptions.controls.push(new EMS.Control.PanButton("n"));
mapOptions.controls.push(new EMS.Control.PanButton("s"));
mapOptions.controls.push(new EMS.Control.PanButton("e"));
mapOptions.controls.push(new EMS.Control.PanButton("w"));
}
jQuery('#content,#entries').append(mapNode);
var map = new EMS.Services.Map(mapNode[0], mapOptions);
// Disable the scroll wheel
OpenLayers.Event.stopObserving(window, "DOMMouseScroll", mouseDefaults.wheelObserver);
OpenLayers.Event.stopObserving(window, "mousewheel", mouseDefaults.wheelObserver);
OpenLayers.Event.stopObserving(document, "mousewheel", mouseDefaults.wheelObserver);
appendCustomZoomBar(map);
map.markersLayer.addMarker(new OpenLayers.Marker(coordinate, new EMS.Services.StandardIcons.crossHair()));
map.setCenter(coordinate, ZOOM_LEVEL);
mapNode[0].map = map;
}
};
}();
if (typeof (EMS) !== 'undefined') {
EMS.Services._onException = function () {
jQuery('.findingMap').each(
function () {
var message = jQuery(this);
message.after(WPOL.Map.Message
.error('Sorry, maps are not available now. Please try again in a few minutes...'));
message.remove();
});
alert('Sorry, maps are not available now. Please try again in a few minutes...');
};
}
