var geocoder = new google.maps.Geocoder();
var mapElementId;
var map;
var marker;
var latLng;
var pov = { heading: -25, pitch: 10, zoom: 1 };

function getLatLngFromAddress() {
//	var geocoder = new google.maps.Geocoder();
//	geocoder.geocode({ address: markerData.address + ', Park City, Utah 84060' }, function(results, status){
	geocoder.geocode({ address: $F('address') + ', Park City, Utah 84060' }, function(results, status){
		if (status == google.maps.GeocoderStatus.OK) {
			latLng =  results[0].geometry.location;
			$('maplat').value = latLng.lat();
			$('maplng').value = latLng.lng();
//			initMap();
			createMarker();
		} else {
			$('geocoder-responsemsg').update('Error geocoding address: ' + status + '.');
			$('geocoder-responsemsg').show();
			$('geocoder-responsemsg').highlight();
		}
	});
}
function createMarker() {
	map.panTo(latLng);
	if (marker == undefined) {
		marker = new google.maps.Marker({
			map: map,
			position: latLng,
			draggable: true
		});
	} else {
		marker.setMap(map);
		marker.setPosition(latLng);
		marker.setDraggable(true);
	}

	google.maps.event.addListener(marker, 'click', function() {
		loadStreetView();
	});

	if (document.body.hasClassName('editing')) {
		$('maplat').value = latLng.lat();
		$('maplng').value = latLng.lng();
		
		google.maps.event.addListener(marker, 'dragend', function() {
			$('maplat').value = marker.position.lat();
			$('maplng').value = marker.position.lng();
		});
	}
}
function loadStreetView() {
	var panorama = new  google.maps.StreetViewPanorama(document.getElementById(mapElementId), { position: latLng, enableCloseButton: true, pov: pov });
	if (document.body.hasClassName('editing')) {
		google.maps.event.addListener(panorama, 'position_changed', function() {
			$('maplat').value = panorama.position.lat();
			$('maplng').value = panorama.position.lng();
		});
		google.maps.event.addListener(panorama, 'pov_changed', function() {
			$('map_pov_pitch').value = panorama.pov.pitch;
			$('map_pov_zoom').value = panorama.pov.zoom;
			$('map_pov_heading').value = panorama.pov.heading;
		});
	}
	map.setStreetView(panorama);
}
function initMap() {
	var initOptions = {
		zoom: 16,
		center: latLng,
		mapTypeId: google.maps.MapTypeId.ROADMAP,
		streetViewControl: true
	}
	map = new google.maps.Map(document.getElementById(mapElementId), initOptions);
	createMarker();
}
function loadMap(businessId) {
	mapElementId = 'map_canvas_' + businessId;
	var bodyElement = $(document.body);
	if (bodyElement.hasClassName('business-detail') && bodyElement.hasClassName('editing')) {
		if (parseInt($F('maplat')) == 0 && parseInt($F('maplng')) == 0) {
//			var geocoder = new google.maps.Geocoder();
			geocoder.geocode({ address: $F('address') + ', Park City, Utah 84060' }, function(results, status){
				if (status == google.maps.GeocoderStatus.OK) {
					latLng =  results[0].geometry.location;
					initMap();
				} else {
					alert(status);
				}
			});
		} else {
			latLng = new google.maps.LatLng($F('maplat'), $F('maplng'));
			pov = { heading: parseFloat($F('map_pov_heading')), pitch: parseFloat($F('map_pov_pitch')), zoom: parseInt($F('map_pov_zoom')) };
			initMap();
		}
	} else {
		new Ajax.Request('/businesses/mapmarker/' + businessId, {
			onComplete: function(t) {
				var markerData = t.headerJSON;
				if (markerData.maplat == 0 && markerData.maplng == 0) {
//					var geocoder = new google.maps.Geocoder();
					geocoder.geocode({ address: markerData.address + ', Park City, Utah 84060' }, function(results, status){
						if (status == google.maps.GeocoderStatus.OK) {
							latLng =  results[0].geometry.location;
							initMap();
						} else {
							alert(status);
						}
					});
				} else {
					latLng = new google.maps.LatLng(markerData.maplat, markerData.maplng);
					pov = { heading: parseFloat(markerData.map_pov_heading), pitch: parseFloat(markerData.map_pov_pitch), zoom: parseInt(markerData.map_pov_zoom) };
					initMap();
				}
			}
		});
	}
}
