$(window).unload(function(){
	GUnload()
});

// TODO: make it work with multiple addresses & maps (for loop, index, etc)
var gmaps = {
	// initialize properties for long & lat
	longitude : '',
	latitude : '',
	
	init : function(){
		$('.address').after('<p class="toggle-map"><a href="#">Kaart weisen</a></p>');

  	$('.toggle-map a').toggle(function() {
  		GUnload();
  		$('#map').remove();
  		$(this).text('Kaart weisen');
  		$(this).parent('p.toggle-map').before('<div id="map"></div>').end().text('Kaart verstoppen');
  		gmaps.getAddress();
  	},
  	function() {
  		GUnload();
  		$('#map').remove();
  		$(this).text('Kaart weisen');
  	});
  	
	},

	// get the address from the document
	getAddress : function(){
		//get the current address
		var $address = $('#map').parent('.vevent').find('.address');
		// replace all ,s
		var street = $address.find('.street').text().replace(/,/g, '');
		var city = $address.find('.city').text();
		var postcode = $address.find('.postcode').text();
		var country = $address.find('.country').text();
		gmaps.loadMaps(street, postcode, city, country);
	},
	
	loadMaps : function(st, pc, cit, ctry) { 
		if (GBrowserIsCompatible()) { 
			var loc = document.getElementById("map");
			var geocoder = new GClientGeocoder();
			geocoder.setBaseCountryCode('fr');
			
			// TODO: debug validation properly
			// also rather than displaying an alert write it into the the document as an error message & prevent the drawer to move down
			var address = st + ", " + cit + ", " + pc +", " + ctry;
			var addressCounter = 0;
			function loadAddress(){
				geocoder.getLatLng(address, function(point) {
					if (!point && addressCounter === 0) {
						address = cit + ", " + pc +", " + ctry;
						addressCounter++;
						loadAddress();
					} else if (!point && addressCounter > 0) {
						$('#map').css("height", "auto")
						var $errMess = $('<p class="error"></p>')
						$errMess.append( "Leider hu mer des Adress net bei Google fonnt.<br/>Vlaischt kennt der aere GPS probeieren?<br/>" + st + "<br/>" + cit + "<br/>" + pc +"<br/>" + ctry );
						$('#map').append($errMess);
						
					} else {
						var map = new GMap2(loc); 
						map.addControl( new GSmallMapControl() ); 
						map.addControl( new GMapTypeControl() ); 
						map.addControl( new GScaleControl() ); 
						map.addControl( new GOverviewMapControl() );
						map.setCenter(point, 13);
						var marker = new GMarker(point);
						map.addOverlay(marker);
						// format the address for the text box
						var adr = address.replace(/, /g, "<br/>")
						marker.openInfoWindowHtml(adr);
					}
				});			
			}
			loadAddress();
		} 
	}
}

$(document).ready(function() {
	gmaps.init();
});
