(function ($) {
	 $(function() {
	 	var geocoder = new google.maps.Geocoder();

		var countryEl = $j('#company__country_id');
		var cityEl = $j('#company__city');
		var address1El = $j('#company__address1');
		var address2El = $j('#company__address2');
		var latEl = $j('#company__lat');
		var lngEl = $j('#company__lng');
		
		//Search for lat/lng by address
		var searchCoordinatesByAddress = function() {
			var country = countryEl.val();
			var city = cityEl.val();
			var address1 = address1El.val();
			var address2 = address2El.val();

			if(country && city && (address1 || address2)) {
				address1 = address1.replace(country + ' ', '').replace(city + ' ', '');
				address2 = address2.replace(country + ' ', '').replace(city + ' ', '');

				if(address1.indexOf(address2) != -1) {
					address2 = '';
				}

				var address = country + ', ' + city + ', ' + address1 + ' ' + address2;
				if(geocoder) {
					//Change position on address change
					geocoder.geocode({'address': address}, function(results, status) {
						if(status == google.maps.GeocoderStatus.OK) {
							latEl.val(results[0].geometry.location.lat());
							lngEl.val(results[0].geometry.location.lng());
							
							latEl.trigger('change');
							
							//Move location marker and map center to new coordinates
							if(typeof map != 'undefined') {
								map.setCenter(results[0].geometry.location);
								if(locationMarker) {
									locationMarker.setPosition(results[0].geometry.location);
								}
							}
						}
					});
				}
			}
		}

		countryEl.bind('change', searchCoordinatesByAddress);
		cityEl.bind('change', searchCoordinatesByAddress);
		address1El.bind('change', searchCoordinatesByAddress);
		address2El.bind('change', searchCoordinatesByAddress);
	 });
})(jQuery);
