var map;
var geocoder;
var lat;
var lon;

function initialize() {
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(54.622978, -2.592773);
    var myOptions = {
        zoom: 5,
        center: latlng,
        zoomControl: false,
        mapTypeControl: false,
        drag: false,
        streetViewControl: false,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}

function resetMapMarker() {
	var pc = document.getElementById('tb_postcode');
	if (!pc){
		alert("Could not locate postcode");
		return;
	}
	if (pc.value == null || pc.value.length < 3) {
		alert("Please make sure a valid postcode has been entered above first");
		return;
    }
    codeAddress(pc.value);
}

function codeAddress(address) {
    geocoder.geocode({ 'address': address }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var input = results[0].geometry.location;
            document.getElementById("hd_location").value = input
            var ff = document.getElementById("hd_location").value;
            ff = ff.replace('(', '');
            ff = ff.replace(')', '');
            var latlngStr = ff.split(",", 2);
            lat = parseFloat(latlngStr[0]);
            lon = parseFloat(latlngStr[1]);
            document.getElementById("hd_lat").value = lat;
            document.getElementById("hd_lon").value = lon;
            var latlng = new google.maps.LatLng(lat, lon);
            map.setZoom(16);
            map.setCenter(results[0].geometry.location);
            marker = new google.maps.Marker({
                position: latlng,
                draggable: true,
                map: map
            });
            google.maps.event.addListener(marker, 'dragend', function () {
                geocodePosition(marker.getPosition());
            });
        } else
            alert("Geocode was not successful for the following reason: " + status);
    });
}

function geocodePosition(pos) {
    geocoder.geocode({
        latLng: pos
    }, function (responses) {
        if (responses && responses.length > 0) {
            updateMarkerAddress(responses[0].geometry.location);
        } else {
            updateMarkerAddress('Cannot determine address at this location.');
        }
    });
}

function updateMarkerAddress(str) {
    document.getElementById("hd_location").value = str;
    var ff = document.getElementById("hd_location").value;
    ff = ff.replace('(', '');
    ff = ff.replace(')', '');
    var latlngStr = ff.split(",", 2);
    lat = parseFloat(latlngStr[0]);
    lon = parseFloat(latlngStr[1]);
    document.getElementById("hd_lat").value = lat;
    document.getElementById("hd_lon").value = lon;
}
