// variable definitions
var map = null;
var point = null;
//var accuracy = null;
var mq = document.forms['map_quest'];
var markers = new Array();
//var geoCodingComplete = false;

// Create a base icon for all of our markers that specifies the
// shadow, icon dimensions, etc.
var baseIcon = new GIcon();
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);

// map initialisation
if (GBrowserIsCompatible()) {
	map = new GMap2(document.getElementById("map"));
	map.addControl(new GSmallMapControl());
	map.addControl(new GScaleControl());
	showLocation();
}

// functions

function showLocation() {
	// don't geocode if marker is positioned manually
	if (mq.manual)
		if (mq.manual.checked) {
			point = new GLatLng(mq.lat.value, mq.lng.value);
			map.clearOverlays();
			var marker = new GMarker(point, {draggable: true});
			GEvent.addListener(marker, "dragend", function() {
				var point = marker.getLatLng();
				mq.lng.value = point.lng();
				mq.lat.value = point.lat();
			});
			map.setCenter(point, 14);
			map.addOverlay(marker);
			return;
		}

	// no city name entered, don't even start searching
	if (mq.city.value.length == 0) {
		map.clearOverlays();
		map.setCenter(new GLatLng(47.367421, 8.540135), 14); // Zurich
		return;

	// at least city entered
	} else {
		var address = '';
		if (mq.street.value.length > 0) {
			address += mq.street.value;
			if (mq.street_nr.value.length > 0) address += ' ' + mq.street_nr.value;
			address += ",";
			if (mq.zip.value.length > 0) address += ' ' + mq.zip.value;
		}
		address += ' ' + mq.city.value;
		address += ', Switzerland';
		//alert(address);

		var geocoder = new GClientGeocoder();
		geocoder.getLocations(address, getCoordinates);
	}
}
		
function getCoordinates(response) {
	if (!response || response.Status.code!=200 || response.Placemark[0].AddressDetails.Accuracy<4) {
		point = new GLatLng(47.367421, 8.540135); // Zurich

	} else {
		var place = response.Placemark[0];
		mq.accuracy.value = place.AddressDetails.Accuracy;
		point = new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);
	}

	mq.lng.value = point.lng();
	mq.lat.value = point.lat();
	

	map.clearOverlays();
	if (mq.localsearch) {
		var marker = new GMarker(point, {draggable:false});
	} else if (mq.accuracy.value>=4 && mq.accuracy.value<8) {
		//if (document.getElementById("tr_manual").style.display == "none" && !mq.manual.checked) {
		if (!mq.manual.checked) {
			document.getElementById("tr_manual").style.display = ""; //"table-row";
			var marker = new GMarker(point, {draggable: false});
		} else if (mq.manual.checked) {
			document.getElementById("tr_manual").style.display = "";
			var marker = new GMarker(point, {draggable: true});
			GEvent.addListener(marker, "dragend", function() {
				var point = marker.getLatLng();
				mq.lng.value = point.lng();
				mq.lat.value = point.lat();
			});
		}
	} else {
		mq.manual.checked = false;
		document.getElementById("tr_manual").style.display = "none";
		var marker = new GMarker(point, {draggable:false});
	}
	map.setCenter(point, 14);		
	map.addOverlay(marker);
}

// marker functions

function showMarker(index) {
  /*
  for (var i = 0; i < markers.length; i++) {
    var marker = markers[i];
    if (i == index) {
      marker.show();
    } else {
      marker.hide();
    }
  }*/
  var marker = markers[index];
  if (marker != null) {
    marker.openInfoWindow('x');
  }
}

function showAllMarkers() {
  for (var i = 0; i < markers.length; i++) {
    var marker = markers[i];
    marker.show();
  }
}

function addMarkerIndex(lat, lng, index) {
  var point = new GLatLng(lat, lng);

  // Create a lettered icon for this point using our icon class
  var letter = String.fromCharCode("A".charCodeAt(0) + index);
  var letteredIcon = new GIcon(baseIcon);
  //letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
  letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";

  // Set up our GMarkerOptions object
  markerOptions = { icon:letteredIcon };
  
  //var marker = new GMarker(point, markerOptions);
  //var marker = new GMarker(point, markerOptions);
  var marker = new PdMarker(point, markerOptions);
  markers[index] = marker;


  if (map != null) {
    map.addOverlay(marker);
  }
}

function addMarker(lat, lng) {
  if (map != null) {
    var point = new GLatLng(lat, lng);
    //var marker = new GMarker(point);
    var marker = new PdMarker(point);
    map.addOverlay(marker);
    //map.addMarker(marker);
  }
}

