var map;
var geocoder;
var marker;
var reCenterEvent;

function reCenter() {
	if (marker)
		map.setCenter(marker.getPosition());
}

function map_init(canvas_id, address) {
	geocoder = new google.maps.Geocoder();

	var latlng = new google.maps.LatLng(-28.53899, 153.548253);
	var myOptions = {
		zoom: 15,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP,
		mapTypeControl: false
	};
	map = new google.maps.Map(document.getElementById(canvas_id), myOptions);

	google.maps.event.addListener(map, "click", toggleSize);

	reCenterEvent = google.maps.event.addListener(map, "bounds_changed", reCenter);
	google.maps.event.addListener(map, "dragstart", function(){
		google.maps.event.removeListener(reCenterEvent);
	});
	google.maps.event.addListener(map, "dragend", function(){
		reCenterEvent = google.maps.event.addListener(map, "bounds_changed", reCenter);
	});

	if (address)
		codeAddress(address);

	return map;
}

function codeAddress(address) {
	if (geocoder) {
		geocoder.geocode( { 'address': address}, function(results, status) {
			if (status == google.maps.GeocoderStatus.OK) {
				map.setCenter(results[0].geometry.location);
				marker = new google.maps.Marker({
						map: map,
						position: results[0].geometry.location
				});
			} else {
				alert("Geocode failed on " + address + " because: " + status);
			}
		});
	}
}

function toggleSize(e) {
	canvas = $("map_canvas");
	if (canvas.hasClassName("canvas_small")) {
		if ($("gallery_frame"))
			canvas.remove();
		canvas.addClassName("canvas_large");
		canvas.removeClassName("canvas_small");
		if ($("gallery_frame"))
			$("gallery_frame").insert(canvas);
		$("map_canvas").style.removeProperty("position");
	}
	else {
		if ($("gallery_frame"))
			canvas.remove();
		canvas.addClassName("canvas_small");
		canvas.removeClassName("canvas_large");
		if ($("gallery_frame"))
			$("map_canvas_home").insert(canvas);
	}
	google.maps.event.trigger(map, "resize");
}
