var gmaps = {

	map: null,
	markerManager: null,
	geocoder: null,
	bars: null,
	
	load: function() {
		
		if (GBrowserIsCompatible()) {			
			gmaps.map = new GMap2(document.getElementById("map"));
			gmaps.markerManager = new GMarkerManager(gmaps.map);
			gmaps.geocoder = new GClientGeocoder();
			gmaps.bars = new Array();
							
			// Mit der Maus zoomen
			gmaps.map.enableScrollWheelZoom();
			gmaps.map.addControl(new GLargeMapControl());
							
			// Ein zuvor hinzugefügter Marker
			if($('lat') && $('lat').value && $('lng').value) {
				gmaps.addMarker($('lat').value, $('lng').value);
			}
			
			// Hash enthält Koordinaten
			if( window.location.hash ) {
				var latlng = window.location.hash.replace('#', '').split(',');
				gmaps.map.setCenter( new GLatLng(parseFloat(latlng[0]), parseFloat(latlng[1])), parseFloat(latlng[2]));
			}
			// Zentrum anhand der IP ermittelt
			else if(!isNaN(geo_lat()) && !isNaN(geo_lng())) {
				gmaps.map.setCenter(new GLatLng(geo_lat(), geo_lng()), 11);
				if($('lat'))
					$('zoom').value = 11;
			}
			// Köln ist der Mittelpunkt der Erde
			else {
				gmaps.map.setCenter(new GLatLng(50.9406, 6.9599), 11);
				if($('lat'))
					$('zoom').value = 11;
			}
			
			// Aktualisiere die Zoomstufe bei jeder Veränderung
			GEvent.addListener(gmaps.map, "moveend", function() {
				// Zoom aktualisieren
				if($('zoom')) {
					$('zoom').value = gmaps.map.getZoom();
				}
				// Hash aktualisieren
				window.location.hash = gmaps.map.getCenter().lat() + ',' + gmaps.map.getCenter().lng() + ',' + gmaps.map.getZoom();
				// Form Action aktualisieren
				if(document.new_cocktailbar) {
					document.new_cocktailbar.action = document.new_cocktailbar.action.split('#')[0] + window.location.hash;
				}
			});
			
			GEvent.addListener(gmaps.markerManager, "changed", function(bounds, numBars) {
				// Cocktailliste aktualisieren
				bars.search(gmaps.map.getBounds());
			});
		}
	},
	
	loadAdmin: function(data) {
		gmaps.map = new GMap2(document.getElementById("mapdetail"));
		gmaps.markerManager = new GMarkerManager(gmaps.map);
		gmaps.map.addControl(new GSmallMapControl());
		gmaps.map.setCenter(new GLatLng( data.lat, data.lng ), 14);

		var bar = new GMarker(new GLatLng(data.lat, data.lng), {draggable: true});
		gmaps.markerManager.addMarker(bar, 1, 17);
	},
	
	loadBar: function(data) {
		gmaps.map = new GMap2(document.getElementById("mapdetail"));
		gmaps.markerManager = new GMarkerManager(gmaps.map);
		gmaps.map.addControl(new GSmallMapControl());
		gmaps.map.setCenter(new GLatLng( data.lat, data.lng ), 14);		
		gmaps.map.openInfoWindowHtml(gmaps.map.getCenter(), '<strong><a href="bar/' + make_filename(data.name) + '/' + data.id + '/">' + data.name + '</a></strong><br />' + data.strasse + '<br />' + data.plz + ' ' + data.ort);	
	},
	
	loadIndexBars: function() {
		gmaps.map = new GMap2(document.getElementById("mapindex"));
		gmaps.markerManager = new GMarkerManager(gmaps.map);
		gmaps.geocoder = new GClientGeocoder();
		gmaps.map.addControl(new GSmallMapControl());
		gmaps.map.setCenter(new GLatLng(geo_lat(), geo_lng()), 11);
		gmaps.loadBars();
	},
	
	addMarker: function(lat, lng) {
		if(gmaps.bars.length < 1) {
			if(!lat || !lng)
			{	
				var icon = new GIcon(G_DEFAULT_ICON, 'http://www.vermischbar.de/images/icons/icongd.png');
				var bar = new GMarker(gmaps.map.getCenter(), {draggable: true, icon: icon});
					
				$('lat').value = gmaps.map.getCenter().lat();
				$('lng').value = gmaps.map.getCenter().lng();
			}
			else {
				var icon = new GIcon(G_DEFAULT_ICON, 'http://www.vermischbar.de/images/icons/icongd.png');
				var bar = new GMarker(new GLatLng(lat, lng), {draggable: true, icon: icon});
			}
			
			gmaps.map.addOverlay(bar);
			gmaps.bars.push(bar);
			
			GEvent.addListener(bar, "dragstart", function() {
				gmaps.map.closeInfoWindow();
			});
			
			GEvent.addListener(bar, "dragend", function() {
				var latlng = bar.getLatLng();
				$('lat').value = latlng.lat();
				$('lng').value = latlng.lng();
			});
			
			GEvent.addListener(bar, "click", function() {
				
				a = document.createElement('a');
				a.innerHTML = 'Diesen Marker entfernen';
				a.href  = '#';
				a.onclick = function() {
					gmaps.map.removeOverlay(bar);
					gmaps.bars.pop();
					$('lat').value = '';
					$('lng').value = '';
					return false;
				}
				
				bar.openInfoWindow(a);
			})
		}
		else {
			gmaps.map.panTo(gmaps.bars[0].getLatLng());
		}
	},
	
	addMarkerFromDatabase: function(lat, lng, data) {
		var bar = new GMarker(new GLatLng(lat, lng));
		gmaps.markerManager.addMarker(bar, 1, 17);
		
		GEvent.addListener(bar, "click", function() {			
			//var html = '<strong><a href="bars/' + make_filename(data.name) + '/' + data.id + '/">' + data.name + '</a></strong><br />' + data.strasse + '<br />' + data.plz + ' ' + data.ort;
			bar.openInfoWindowHtml('<strong><a href="bar/' + make_filename(data.name) + '/' + data.id + '/">' + data.name + '</a></strong><br />' + data.strasse + '<br />' + data.plz + ' ' + data.ort);
		});
	},
	
	searchAddress: function() {
		
		var address = $('bar_q').value;
		
		if (gmaps.geocoder) {
			gmaps.geocoder.getLatLng(
				address,
				function(point) {
					if (!point) {
						alert('Ort wurde nicht gefunden!');
					} else {
						gmaps.map.setCenter(point);
					}
				}
			);
		}
	},
	
	checkInput: function(input) {
		if(input.value == 'nach Ort suchen')
			input.value = '';
		else if(input.value == '')
			input.value = 'nach Ort suchen';
	},
	
	loadBars: function() {
		new Ajax.Request('ajax/bar.php', {
			method: 'get',
			parameters: { action: 'load' },
			onSuccess: function(t) {
				var bars = t.responseText.split("\n");
				var i = 0;
				while(bars[i]) {
					var bar = bars[i].split(';');
					if(bar.length > 0) {
						gmaps.addMarkerFromDatabase(bar[0], bar[1], {
							id: 	bar[2],
							name: 	bar[3],
							strasse:bar[4],
							ort:	bar[5],
							plz:	bar[6]
						});
					}
					i++;
				}
			}	
		});
	}
}

/* Verwaltung der Cocktailbar Liste */
var bars = {
	
	xml: null,
	
	search: function(bounds) {
		
		if(bars.xml) {
			bars.xml.abort();
			$('load1').innerHTML = '';
		}
		
		var bounds = gmaps.map.getBounds();
		var southwest = bounds.getSouthWest();
		var northeast = bounds.getNorthEast(); 
		
		bars.xml = new Ajax.Request('ajax/bar.php', {
			method: 'get',
			parameters: { action: 'bounds', bounds: southwest.lat() + ',' + southwest.lng() + ';' + northeast.lat() + ',' + northeast.lng() },
			onLoading: function() {
				
			},
			onSuccess: function(t) {
				$('liste').innerHTML = t.responseText;
			}
		});
	},
	
	// Bewertung von Bars
	vote: function(rating, bar) {
	
		new Ajax.Request('ajax/rating.php', {
			method: 'get',
			parameters: { action: 'bar_rating', rating: rating, bar: bar },
			onLoading: function() {
				$('ratingresult').innerHTML = '<li><img src="images/load_white.gif" alt="" width="16" height="16" /></li>';
			},
			onSuccess: function(t) {
				if(t.responseText == 'Du hast bereits eine Bewertung abgegeben.') {
					$('ratingresult').innerHTML = t.responseText;
				}
				else {
					var result = t.responseText.split(';');
					
					if(result[1] == 1) {
						$('ratingcountofcocktail').innerHTML = result[1] + ' Bewertung';
					}
					else {
						$('ratingcountofcocktail').innerHTML = result[1] + ' Bewertungen';
					}
					var rateofcocktail = result[0] / result[1];
					if(('' + rateofcocktail).length > 3) {
						rateofcocktail = ('' + rateofcocktail).substr(0, 3);
					}
					$('rateofcocktail').innerHTML = rateofcocktail;
					$('ratingresult').innerHTML = 'Danke für deine Bewertung.';
					$('widthofrating').style.width = (((result[0] / result[1]) / 5) * 146) + 'px';
				}
			}
		});
	}
}