define(['dashboard/dashboard'], function (dashboard) {
dashboard.controller('ServiceProviders', ['$scope', '$http', '$location', '$anchorScroll', function ($scope, $http, $location, $anchorScroll) {
$scope.mapsection = true;
$scope.getDisplayAddress = function () {
if ($scope.Dashboard && $scope.Dashboard.Policy && $scope.Dashboard.Policy.AccountDetails && $scope.Dashboard.Policy.AccountDetails.ResidentialAddress) {
var addrs = $scope.Dashboard.Policy.AccountDetails.ResidentialAddress;
return addrs.Address1 +
(addrs.Address2 ? " " + addrs.Address2 : "") +
(addrs.Address3 ? " " + addrs.Address3 : "") +
(addrs.SuburbName ? " " + addrs.SuburbName : "") +
(addrs.PostCode ? " " + addrs.PostCode : "");
}
return "";
}
var mapOptions = {
center: new google.maps.LatLng(-30, 27),
zoom: 6
};
var iconcolours = {
'yellow': "//maps.google.com/mapfiles/ms/icons/yellow-dot.png",
'red': "//maps.google.com/mapfiles/ms/icons/red-dot.png"
}
var marker = new google.maps.Marker();
window.map = new google.maps.Map(document.getElementById('map-canvas'),
mapOptions);
var types = document.getElementById('type-selector');
map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(document.getElementById('legend'));
function makeMarker(lat,lon,colour,infoObj)
{
var content = "" + (infoObj.title || infoObj.FullAddress) + "";
content += (infoObj.Address1) ? "
" + infoObj.Address1 +"," : "";
content += (infoObj.Address2) ? "
" + infoObj.Address2 + ",": "";
content += (infoObj.Address3) ? "
" + infoObj.Address3 : "";
if (infoObj.AddressLattitude && infoObj.AddressLongitude)
{
content += "
Latitude: " + infoObj.AddressLattitude;
content += "
Longitude: " + infoObj.AddressLongitude;
}
var myLatlng = new google.maps.LatLng(lat, lon);
var mapMarker = new google.maps.Marker({
position: myLatlng,
map: map,
icon: iconcolours[colour],
title: infoObj.title || infoObj.FullAddress
});
var infowindow = new google.maps.InfoWindow({
content: content
});
mapMarker.addListener('click', function () {
infowindow.open(map, mapMarker);
});
return mapMarker;
}
function pantoaddress(locationMarker)
{
map.setZoom(17);
map.panTo(locationMarker.position);
}
$scope.ValidAddressCheck = function()
{
if ($scope.listsection) return true;
var isEmpty = function () {
for(var x in $scope.locationdata)
{
return !$scope.locationdata.hasOwnProperty(x);
}
return true;
};
if (typeof ($scope.locationdata) !== 'object' || isEmpty())
{
return true;
}
return false;
}
$scope.SearchLocation = function ()
{
marker.setMap(null);
marker = makeMarker($scope.locationdata.AddressLattitude, $scope.locationdata.AddressLongitude, "red", $scope.locationdata);
pantoaddress(marker);
};
var ctaLayer = new google.maps.KmlLayer({
url: 'https://s3-eu-west-1.amazonaws.com/retrocdn.co.za/map/GlasfitNationalFitmentCentreMap.kml',
});
ctaLayer.setMap(map);
var ctaLayer = new google.maps.KmlLayer({
url: 'https://s3-eu-west-1.amazonaws.com/retrocdn.co.za/map/AC_DD3.kml',
});
ctaLayer.setMap(map);
var infowindow = new google.maps.InfoWindow();
$scope.gotoaddress = function(address) {
var lat = 0;
var lon = 0;
geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function (results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
var riskMarker = makeMarker(results[0].geometry.location.lat(), results[0].geometry.location.lng(), "yellow", {title:"Risk Address"});
pantoaddress(riskMarker);
}
});
}
$scope.panCentre = function (lat, lon) {
$scope.listsection = false; $scope.mapsection = true;
var myLatlng = new google.maps.LatLng(lat, lon);
map.setZoom(15);
map.panTo(myLatlng);
// set the location.hash
$location.hash('ServiceProvidersSectionCard');
// call $anchorScroll()
$anchorScroll();
}
var loaded = false;
//Really funcky hack for IE. Looks like angular and google maps are having some conflict, but on resizing the map starts loading.
function mapLoaded() {
google.maps.event.trigger(map, 'resize');
}
google.maps.event.addListenerOnce(map, 'idle', function () {
mapLoaded();
});
//Recenter for IE
google.maps.event.addListener(map, 'resize', function () {
if (loaded == false) {
loaded = true;
var centerLatLng = new google.maps.LatLng(-30, 27);
map.setZoom(6);
map.panTo(centerLatLng);
}
});
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function (position) {
initialLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
map.setCenter(initialLocation);
map.setZoom(17);
var marker = new google.maps.Marker({
map: map,
icon: "//maps.google.com/mapfiles/ms/icons/red-dot.png",
title: "Your current location"
});
marker.setVisible(false);
marker.setPosition(initialLocation);
marker.setVisible(true);
});
}
}]);
});