function makeMap (div) {
	var map = new GMap2($(div).get(0));
	map.addControl(new GSmallMapControl());
	return map;
}

function centerMap (x, y, map){
	var zoom = 10;
	map.setCenter(new GLatLng(x, y), zoom);
	map.addControl(new GSmallMapControl());
}

function addPoint (x, y, map){
	if (arguments[3]) {
		markerOptions = { icon:arguments[3] }
	} else {
		markerOptions = {}
	}
	
	var point = new GLatLng(x, y);
	var marker = new GMarker(point, markerOptions)
	var message = arguments[4];
	if (arguments[5]) {
		var myHtml = message;
		map.openInfoWindowHtml(point, myHtml);
	}
	GEvent.addListener(marker, 'click', function() {
		var myHtml = message;
		map.openInfoWindowHtml(point, myHtml);
	});
	map.addOverlay(marker);
}

function centerAddress (map, address){
	geocoder = new GClientGeocoder();
	geocoder.getLocations($(address).value, function(response){
		var delay = 0;
		if (response.Status.code == 620) {
			delay = 500;
		} else {
			if (response.Status.code == 200) {
				place = response.Placemark[0];
				var latlng = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
				map.setCenter(latlng, 10);
			}
		}
	});
}

function showAddress (address, div){
	$(div).show();
	map = makeMap(div);
	geocoder = new GClientGeocoder();
	if (!$(address).value) {
		$(address).value = 'Madrid';
	}
	
	geocoder.getLocations($(address).value, function(response){
		var delay = 0;
		if (response.Status.code == 620) {
			delay = 500;
		} else {
			if (response.Status.code == 200) {
				place = response.Placemark[0];
				point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
				marker = new GMarker(point);
				map.addOverlay(marker);
				centerMap(place.Point.coordinates[1], place.Point.coordinates[0], map);
			} else {
				alert('No podemos encontrar ese lugar.');
				$(div).hide();
			}
		}
	});
	
	GEvent.addListener(map,"click", function(overlay, latlng) {     
	  if (latlng) { 
		marker.setLatLng(latlng);
		$(address).value = latlng;
	  }
	});
}
