/* GMaps Class */

function GMaps() {
	this.map;
	this.marker;
}

GMaps._m = null;
GMaps._o = null;

GMaps.prototype.init = function(lat, lon, z, id) {
	var latlng = new google.maps.LatLng(lat, lon);
	var myOptions = {
		zoom : z,
		center : latlng,
		mapTypeId : google.maps.MapTypeId.ROADMAP,
		streetViewControl : false,
		keyboardShortcuts : false
	};
	this.map = new google.maps.Map(document.getElementById(id), myOptions);
}
GMaps.prototype.setmarker = function(lat, lon, z) {
	if (!this.map) {
		this.init(lat, lon, z, "google_map");
	}
	if (this.marker) {
		this.marker.setMap(null);
	}
	var pos = new google.maps.LatLng(lat, lon);
	this.marker = new google.maps.Marker({
		position : pos,
	});
	this.marker.setMap(this.map);
	this.map.setCenter(pos);
	this.map.setZoom(z);
}
GMaps.prototype.codeAddress = function(id) {
	var geocoder = new google.maps.Geocoder();
	var address = document.getElementById(id).value;
	if (this.marker) {
		this.marker.setMap(null);
	}
	geocoder.geocode({
		'address' : address
	}, this.blabla);
}
GMaps.prototype.save = function(f, mid) {
	if(this.marker) {
	pos = this.marker.getPosition();

	lat = pos.lat();
	lon = pos.lng();
	zoom = this.map.getZoom();

	adr = $F(f);
	BA.Call({
		parameters : {
			service : 'Ctrl.gmaps.gmap_save',
			lat : lat,
			lon : lon,
			address : adr,
			zoom : zoom,
			mid : mid
		},
		onComplete : this.saved
	});
	}
	else {
		alert("Kein Marker gefunden\nBitte geben Sie vor dem Speichern eine gültige Adresse ein und klicken auf 'Suchen'")
	}
}

GMaps.prototype.saved = function() {
	alert("Adresse wurde gespeichert!");
}

GMaps.prototype.blabla = function(results, status) {
	if (status == google.maps.GeocoderStatus.OK) {
		GMaps._m = results[0].geometry.location;
		zeig(GMaps._o);
	} else {
		switch (status) {
		  case "ERROR":
		    status = "Beim Aufbau der Verbindung zu den Google-Servern ist ein Problem aufgetreten.";
		    break;
		  case "OVER_QUERY_LIMIT":
		    status = "Bitte nicht so schnell auf 'Suchen' klicken.";
		    break;
		  case "REQUEST_DENIED":
		    status = "Es ist der Webpage nicht gestattet, den Geocoder zu verwenden.";
		    break;
		  case "UNKNOWN_ERROR":
		    status = "Unbekannter Fehler. Versuchen Sie es in ein paar Minuten erneut.";
		    break;
		  case "ZERO_RESULTS":
		    status = "Adresse nicht gefunden";
		    break;
		}

		alert("GMaps Fehler: " + status);
	}
}

/* Functions */
function search(str, mid) {
	GMaps._o = mid;
	mid.codeAddress(str);
}
function zeig(mid) {
	var lat = GMaps._m.lat();
	var lon = GMaps._m.lng();
	mid.setmarker(lat, lon, 15);
}
