window.addEvent('domready', function() {
	var form = document.id('geocode');
	if (!form) return;
	var container = form.getParent('.block') || form;

	var geocoder = new google.maps.Geocoder();
	function geocode(address, callback){
		if (!address) callback.call(geocoder, null, null);

		geocoder.geocode({address: address + ', Netherlands'}, function(results, status){
			if (status == google.maps.GeocoderStatus.OK){
				var location = results[0].geometry.location;
				callback.call(geocoder, location.lat(), location.lng());
			} else {
				callback.call(geocoder, null, null);
			}
		});
	};

	var elements = {
		lat: form.getElements('.lat'),
		lng: form.getElements('.lng'),
		radius: form.getElements('.radius'),
		address: form.getElements('.address')
	}
	function updateForm(lat, lng){
		container.unspin();
		if (lat != null && lng != null){
			elements.lat.set('value', lat);
			elements.lng.set('value', lng);
			return true;
		}
		return false;
	}
	function submitForm(lat, lng){
		if (!updateForm(lat, lng)){
			elements.lat.destroy();
			elements.lng.destroy();
			elements.radius.set('disabled', 'disabled');
			//elements.radius.destroy();
		}
		form.submit();
	}
	form.addEvent('submit', function(event){
		event.preventDefault();
		container.spin();
		var address = [];
		elements.address.each(function(element){
			var value = element.get('value');
			if (value) address.push(value);
		});
		geocode(address.join(', '), submitForm);
	});

	form.getElements('[data-autocomplete]').each(function(element){
		var attribute = element.get('name').replace('radius_', '');
		new Autocomplete(element, {
			url: '/contact/get_suggestions.json?category=lid+VastgoedPRO&attribute=' + attribute,
			postVar: attribute,
			autoSubmit: false
		});
	});
});

