﻿/// <reference path="jQuery/jquery-1.3.2-vsdoc2.js" />
/* address stuff */
var geocoder;
var map;
var marker;

function initialize(lat, lng) {
	//MAP
	if (google && google.maps) {
		var latlng = new google.maps.LatLng(-36.84852838378392, 174.76222642988586);  //sky tower
		var zoomLevel = 12
		if (lat != null) {
			latlng = new google.maps.LatLng(lat, lng);
			zoomLevel = 18
		}
		var options = {
			zoom: zoomLevel,
			center: latlng,
			mapTypeId: google.maps.MapTypeId.SATELLITE
		};

		map = new google.maps.Map(document.getElementById("map_canvas"), options);

		//GEOCODER
		geocoder = new google.maps.Geocoder();


		marker = new google.maps.Marker({
			map: map,
			draggable: true
		});


		google.maps.event.addListener(marker, 'drag', function () {
			geocoder.geocode({ 'latLng': marker.getPosition() }, function (results, status) {
				if (status == google.maps.GeocoderStatus.OK) {
					if (results[0]) {
						$('#address').val(results[0].formatted_address);
						$('#HomeAddressLatitude').val(marker.getPosition().lat());
						$('#HomeAddressLongitude').val(marker.getPosition().lng());
					}
				}
			});
		});
	} else {
		//hide search
		$('#PostalSearchField,#PostalSearchLabel').hide(); $('#PostalSearchField input').val('')
		$('#HomeSearchField,#HomeSearchLabel').hide(); $('#HomeSearchField input').val('')
	}

	$("#HomeAddressStreet").change(ResetLatLong);
	$("#HomeAddressSuburb").change(ResetLatLong);
	$("#HomeAddressCity").change(ResetLatLong);
	$("#HomeAddressRegion").change(ResetLatLong);
	$("#HomeAddressPostCode").change(ResetLatLong);

}
function ResetLatLong() {
	$('#HomeAddressLatitude').val('');
	$('#HomeAddressLongitude').val('');
}
function GetCompName(item, index) {
	var result = '';
	try {
		if (item && item.address_components) {
			if (item.address_components.length > index && item.address_components[index].long_name) {
				result = item.address_components[index].long_name
			}
		}

	} catch (e) { }
	return result;

}
function AddressAndMapSetup() {

	initialize();

	if (google) {
		$(function () {
			$("#HomeAddressSpecified").autocomplete({
				//This bit uses the geocoder to fetch address values
				source: function (request, response) {
					geocoder.geocode({ 'address': request.term + ', New Zealand' }, function (results, status) {
						response($.map(results, function (item) {
							return {
								label: item.formatted_address,
								value: item.formatted_address,
								latitude: item.geometry.location.lat(),
								longitude: item.geometry.location.lng(),
								street: GetCompName(item, 0) + ' ' + GetCompName(item, 1),
								suburb: GetCompName(item, 2),
								city: GetCompName(item, 3),
								region: GetCompName(item, 4), /*5 is nz*/
								postcode: GetCompName(item, 6)
							}
						}));
					})
				},
				//This bit is executed upon selection of an address
				select: function (event, ui) {
					$("#HomeAddressLatitude").val(ui.item.latitude);
					$("#HomeAddressLongitude").val(ui.item.longitude);
					$("#HomeAddressStreet").val(ui.item.street);
					$("#HomeAddressSuburb").val(ui.item.suburb);
					$("#HomeAddressCity").val(ui.item.city);
					$("#HomeAddressRegion").val(ui.item.region);
					$("#HomeAddressPostCode").val(ui.item.postcode);

					ShowValidationMessage(null,$("#HomeAddressLatitude")) 
					ShowValidationMessage(null,$("#HomeAddressLongitude")) 
					ShowValidationMessage(null,$("#HomeAddressStreet")) 
					ShowValidationMessage(null,$("#HomeAddressSuburb")) 
					ShowValidationMessage(null,$("#HomeAddressCity")) 
					ShowValidationMessage(null,$("#HomeAddressRegion")) 
					ShowValidationMessage(null,$("#HomeAddressPostCode")) 

					var location = new google.maps.LatLng(ui.item.latitude, ui.item.longitude);
					marker.setPosition(location);
					map.setCenter(location);

					window.setTimeout(function () { $('#address').val('') }, 5000)
				}
			});
		});
		/*
		$(function () {
			$("#postaladdress").autocomplete({
				//This bit uses the geocoder to fetch address values
				source: function (request, response) {
					geocoder.geocode({ 'address': request.term + ', New Zealand' }, function (results, status) {
						response($.map(results, function (item) {
							return {
								label: item.formatted_address,
								value: item.formatted_address,
								latitude: item.geometry.location.lat(),
								longitude: item.geometry.location.lng(),
								street: GetCompName(item, 0) + ' ' + GetCompName(item, 1),
								suburb: GetCompName(item, 2),
								city: GetCompName(item, 3),
								region: GetCompName(item, 4), //5 is nz
								postcode: GetCompName(item, 6)
							}
						}));
					})
				},
				//This bit is executed upon selection of an address
				select: function (event, ui) {
					$("#PostalAddressLatitude").val(ui.item.latitude);
					$("#PostalAddressLongitude").val(ui.item.longitude);
					$("#PostalAddressStreet").val(ui.item.street);
					$("#PostalAddressSuburb").val(ui.item.suburb);
					$("#PostalAddressCity").val(ui.item.city);
					$("#PostalAddressRegion").val(ui.item.region);
					$("#PostalAddressPostCode").val(ui.item.postcode);

					var location = new google.maps.LatLng(ui.item.latitude, ui.item.longitude);
					marker.setPosition(location);
					map.setCenter(location);
					window.setTimeout(function () { $('#postaladdress').val('') }, 5000)
				}
			});
		});
		*/
	} else {
		$("#address").hide()
		$("#postaladdress").hide()
	}
	//$('#mapcanvas').find('Map Data');
	//$('#HomeAddressStreet').focus(function () { $('#HomeSearchField,#HomeSearchLabel').show(); }).focus();
	//$('#HomeSearchField input').blur(function () { window.setTimeout(function () { $('#HomeSearchField,#HomeSearchLabel').hide(); $('#HomeSearchField input').val('') }, 10000) })
	//$('#PostalAddressStreet').focus(function () { $('#PostalSearchField,#PostalSearchLabel').show(); }).focus();
	//$('#PostalSearchField input').blur(function () { window.setTimeout(function () { $('#PostalSearchField,#PostalSearchLabel').hide(); $('#PostalSearchField input').val('') }, 10000) })
}

