var NDEC=5;
var DFLTZOOM=16;
var DFLTTYPE=G_HYBRID_MAP;
var MAPDIV="gmap";
var INITLOC="Amherst, MA";
var LCOL="#00FFFF";
var LWGT=3;
var LOPC=1.00;
var FCOL="#00FFFF";
var FOPC=0.50;
var INIT_GEOCODE_DELAY=2000;

var map;
var ptList;

function initMap() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById(MAPDIV));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new GScaleControl());
		map.enableDoubleClickZoom();
		geocoder = new GClientGeocoder();
		showLoc(INITLOC);
	} else {
		alert('Your browser is not able to run Google Maps');
	}
}

function showLoc(loc) {
	if (geocoder) {
		geocoder.getLatLng(loc, function(point) {
			if (!point)
				alert(loc + ' not found');
			else
				map.setCenter(point, DFLTZOOM, DFLTTYPE);
		});
	}
	setTimeout("setGeomType()", INIT_GEOCODE_DELAY);
}

function setGeomType() {
	if (document.io.getPoint.checked) {
		document.getElementById('lllstdiv').style.display = 'none';
		document.getElementById('llptdiv').style.display = 'block';
		initPointMode();
	} else {
		document.getElementById('llptdiv').style.display = 'none';
		document.getElementById('lllstdiv').style.display = 'block';
		initLinePolyMode();
	}
}

function initPointMode() {
        newPoint();
	GEvent.clearInstanceListeners(map);
        moveListenerHdl = GEvent.addListener(map, 'moveend', newPoint);
}

function newPoint() {
	map.clearOverlays();
	var center = map.getCenter();
	document.io.llpt.value = llstr(center);
	var marker = new GMarker(center, {draggable: true});
	addMarkerListener(marker);
}

function addMarkerListener(m) {
	map.addOverlay(m);
	GEvent.addListener(m, 'dragend', function() {
		var p = m.getPoint();
		map.panTo(p);
		document.io.llpt.value = llstr(p);
	});
}

function initLinePolyMode() {
	map.clearOverlays();
	ptList = Array();
	updateMap();
	updateList();
	GEvent.clearInstanceListeners(map);
	GEvent.addListener(map, 'click', onMapClick);
}

function llstr(pt) {
	return pt.lat().toFixed(NDEC) + ', ' + pt.lng().toFixed(NDEC);
}

function onMapClick(marker, clkPt) {
	ptList.push(clkPt);
	updateMap();
	updateList();
}

function killLast() {
	ptList.pop();
	updateMap();
	updateList();
}

function closePoly() {
	var lastPt = ptList[0];
	ptList.push(lastPt);
	updateMap();
	updateList();
}

function updateMap() {
	if (document.io.getLine.checked)
                drawShape = new GPolyline(ptList,LCOL,LWGT,LOPC);
        else
		drawShape = new GPolygon(ptList,LCOL,LWGT,LOPC,FCOL,FOPC);
	map.clearOverlays();
	if (ptList.length > 0) {
		map.addOverlay(new GMarker(ptList[ptList.length - 1]));
		map.addOverlay(drawShape);
	}
}

function updateList() {
	var listStr = '';
	var nPts = ptList.length;
	for (var p=0; p<nPts; p++)
		listStr += llstr(ptList[p]) + '\n';
	document.io.lllst.value = listStr;
	npText = nPts.toString() + ' point' + (nPts != 1 ? 's' : '');
	document.getElementById('numPts').innerHTML = npText;
}


if (window.addEventListener) {
  window.addEventListener("load", initMap, false);
  window.addEventListener("unload", GUnload, false);
} else if (window.attachEvent) {
  window.attachEvent("onload", initMap);
  window.attachEvent("onunload", GUnload);
} else {
  window.onload=initMap;
  window.onunload=GUnload;
}
