var map;

function createMap() {
	if (GBrowserIsCompatible()) {
		map = new GMap(document.getElementById("mapa"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
	} else {
		alert("Sorry, the Google Maps API is not compatible with this browser");
	}
}

// set map properites
function showMap(lat, lng, zoom, view) {
 lat = typeof(lat) != 'undefined' ? lat : 20;
 lng = typeof(lng) != 'undefined' ? lng : 0;
 zoom = typeof(zoom) != 'undefined' ? zoom : 1;
 view = typeof(view) != 'undefined' ? view : 1;

 var t;
 if (view == 1) {
  t = G_NORMAL_MAP;
 } else if (view == 2) {
  t = G_SATELLITE_MAP;
 } else {
  t = G_HYBRID_MAP;
 }
 map.setCenter(new GLatLng(lat, lng), zoom, t);
}

function showMapB(min_lat,min_lng,max_lat,max_lng,v) {
	v = typeof(v)!='undefined' ? v:1;
	var t;
	if (v == 1) {
		t = G_NORMAL_MAP;
	} else if (v == 2) {
		t = G_SATELLITE_MAP;
	} else {
		t = G_HYBRID_MAP;
	}
	var b = new GLatLngBounds(new GLatLng(max_lat, min_lng), new GLatLng(min_lat, max_lng))
	var z = map.getBoundsZoomLevel(b);
	map.setCenter(b.getCenter(), z, t);
}


// show marker, set map properties
function showPlace(lat, lng, zoom, view) {
 showMap(lat, lng, zoom, view)
 showMarker(lat, lng, zoom)
}

// add marker to map
function showMarker(lat, lng, zoom) {
 map.addOverlay(new GMarker(new GLatLng(lat, lng)));
}

// set form fields
function fillBounds() {
 document.getElementById("lat_a").value = map.getBounds().getNorthEast().lat();
 document.getElementById("lng_a").value = map.getBounds().getNorthEast().lng();
 document.getElementById("lat_b").value = map.getBounds().getSouthWest().lat();
 document.getElementById("lng_b").value = map.getBounds().getSouthWest().lng();
}


// onClick -> add Marker, fill form fields
function selectPlaceHandler() {
 GEvent.addListener(map, "click", function(overlay, point)
  {
   if (overlay) {
    map.removeOverlay(overlay);
    document.getElementById("lat").value = "";
    document.getElementById("lng").value = "";
    document.getElementById("z").value = "0";
    document.getElementById("t").value = "1";
   } else {
    addPostMarker(point);
   }
  });
 GEvent.addListener(map, "zoomend", function(oldL, newL)
  {
    document.getElementById("z").value = newL;
  });
 GEvent.addListener(map, "maptypechanged", function(oldL, newL)
  {
   if (map.getCurrentMapType() == G_NORMAL_MAP) {
    document.getElementById("t").value = 1;
   } else if (map.getCurrentMapType() == G_SATELLITE_MAP) {
    document.getElementById("t").value = 2;
   } else if (map.getCurrentMapType() == G_HYBRID_MAP) {
    document.getElementById("t").value = 3;
   }
  });
}

function zoomToPlaces(max_lat, min_lat, max_lng, min_lng) {
	var b = new GLatLngBounds(new GLatLng(max_lat, min_lng), new GLatLng(min_lat, max_lng))
	var z = map.getBoundsZoomLevel(b);
	if (z > map.getZoom()) {
		z = map.getZoom();
	}
	map.setCenter(b.getCenter(), z);
}

// add Marker & fill POST data
function addPostMarker(point) {
 map.clearOverlays();
 var m = new GMarker(point, {draggable: true});
 GEvent.addListener(m, "dragend", function() {
  fillPostFields(m.getPoint());
 });
 map.addOverlay(m);
 fillPostFields(point);
}

function getMapType() {
 if (map.getCurrentMapType() == G_NORMAL_MAP) {
  return 1;
 } else if (map.getCurrentMapType() == G_SATELLITE_MAP) {
  return 2;
 } else {
  return 3;
 }
}

// fill POST data
function fillPostFields(point) {
 document.getElementById("lat").value = point.lat();
 document.getElementById("lng").value = point.lng();
 document.getElementById("z").value = map.getZoom();
 document.getElementById("t").value = getMapType();
}


// onClick -> display marker info
function showPlaceInfoHandler() {
	GEvent.addListener(map, "click", function(o, p) {
		if (o) {
			if (typeof(o.iW) != 'undefined') {
				o.openInfoWindowHtml(o.iW);
			}
		}
	});
}

