var map;
var currentMarker;
var restaurants = new Array();
function load() {
  if (GBrowserIsCompatible()) {
	map = new GMap2(document.getElementById("map"));
	map.setMapType(G_HYBRID_MAP);
	map.setCenter(new GLatLng(51.513817, -0.727227), 6);
	map.addControl(new GMapTypeControl());
	map.addControl(new GLargeMapControl());
	map.enableScrollWheelZoom();
	for (var i = 0; i < restaurants.length; i++) {
		var restaurant = restaurants[i];
		var pushPinIcon = new GIcon(G_DEFAULT_ICON);
		pushPinIcon.image = "http://maps.google.com/mapfiles/ms/icons/red-pushpin.png";
		pushPinIcon.shadow = "http://maps.google.com/mapfiles/ms/icons/pushpin_shadow.png";
		restaurant.marker = new GMarker(new GLatLng(restaurant.lat, restaurant.lng), { icon: pushPinIcon });
		var linkedName;
		if (restaurant.url != '') {
			linkedName = Builder.node('a', { href: restaurant.url }, [
					restaurant.name
				]);
		} else {
			linkedName = restaurant.name;
		}
		restaurant.infoWindow = Builder.node('div', { className: 'markerInfo' }, [
			Builder.node('h1', [
				linkedName
			]),
			Builder.node('p', { className: 'address' }, [
				restaurant.address
			]),
			Builder.node('p', { className: 'comments' }, [
				restaurant.comment
			])
		]);
		restaurant.marker.bindInfoWindow(restaurant.infoWindow);
		map.addOverlay(restaurant.marker);
	}
  }
}

function goToAddress() {
	var address = $("address").value;
	var geocoder = new GClientGeocoder();
	geocoder.setBaseCountryCode("uk");
	geocoder.getLatLng(address,
		function(point) {
			if (!point) {
				alert("Address not found.");
			} else {
				map.setCenter(point, 17);
				if (currentMarker) {
					map.removeOverlay(currentMarker);
				}
				currentMarker = new GMarker(point, {draggable: true});
				GEvent.addListener(currentMarker, 'dragend', updateLatLng);
				map.addOverlay(currentMarker);
				updateLatLng();
			}
		}
	);
}

function updateLatLng() {
	$("lat").value = currentMarker.getPoint().lat();
	$("lng").value = currentMarker.getPoint().lng();
}

function addRestaurant(id, name, address, url, comment, lat, lng) {
	if (!comment) {
		comment = '';
	}
	var restaurant = { id: id, name: name, address: address, url: url, comment: comment, lat: lat, lng: lng };
	restaurants.push(restaurant);
}

function getRestaurant(id) {
	if (typeof(id) != "object") {
		for (var i = 0; i < restaurants.length; i++) {
			var restaurant = restaurants[i];
			if (restaurant.id == id) {
				return restaurant;
			}
		}
		return null;
	} else {
		return id;
	}
}

function showRestaurant(id) {
	$("map").scrollIntoView();
	restaurant = getRestaurant(id);
	if (restaurant) {
		if (map.getZoom() < 11) {
			map.setZoom(13);
		}
		map.panTo(restaurant.marker.getPoint());
		restaurant.marker.openInfoWindow(restaurant.infoWindow);
	}
}

function editRestaurant(id) {
	var restaurant = getRestaurant(id);
	if (restaurant) {
		showRestaurant(restaurant);
		$('name').value = restaurant.name;
		$('id').value = restaurant.id;
		$('address').value = restaurant.address;
		$('url').value = restaurant.url;
		$('comments').value = restaurant.comment;
		$('lat').value = restaurant.lat;
		$('lng').value = restaurant.lng;
	}
}
