/**
 * EZ Map
 * 
 * (c) EZdesign.de
 * 
 * Author:   Timo Besenreuther
 * Created:  2009-07-28
 * Modified: 2009-07-28
 */


var ezMap;
var ezMapRoute; 


/**
 * initalize map
 */

$.fn.ezMap = function(markers, zoom, mapType) {
	
	if (!GBrowserIsCompatible()) {
		return false;
	}
	
	// init map
	ezMap = new GMap2(document.getElementById($(this).attr('id')));
	ezMap.addControl(new GMapTypeControl()); 
	ezMap.addControl(new GSmallZoomControl()); 
	ezMap.setCenter(new GLatLng(markers[0].lat, markers[0].lng), zoom, mapType); 
	
	// add marker
	var marker = _createMarker(markers[0].lat, markers[0].lng, markers[0].html); 
	ezMap.addOverlay(marker); 
	 
	function _createMarker(lat, lng, html) { 
		// icon
		var icon = new GIcon(); 
		icon.image = 'http://labs.google.com/ridefinder/images/mm_20_red.png'; 
		icon.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'; 
		icon.iconSize = new GSize(12, 20); 
		icon.shadowSize = new GSize(22, 20); 
		icon.iconAnchor = new GPoint(6, 20); 
		icon.infoWindowAnchor = new GPoint(5, 1);
		// marker
		var marker = new GMarker(new GLatLng(lat, lng), icon);  
		GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html); }); 
		return marker; 
	}
	
}


/**
 * initalize route form
 */

$.fn.ezMapRouteForm = function(outputDom) {
	
	if (!GBrowserIsCompatible()) {
		return false;
	}
	
	ezMapRoute = new GDirections(ezMap, document.getElementById(outputDom.attr('id')));  
	
	// submit listener
	$(this).submit(function() {
		ezMap.setMapType(G_NORMAL_MAP);
		ezMapRoute.load("from: "+$('#ezMapRouteFromAddress').val()+" to: "+$('#ezMapRouteToAddress').val(), {locale: 'de_DE'});
		console.log("from: "+$('#ezMapRouteFromAddress').val()+" to: "+$('#ezMapRouteToAddress').val());
		return false;
	});
	
	// error listener
	GEvent.addListener(ezMapRoute, 'error', function() { 
		if (ezMapRoute.getStatus().code == G_GEO_UNKNOWN_ADDRESS) 
			outputDom.html("Die Adresse konnte nicht berechent werden.\nM&ouml;glicher Grund ist, dass die Adresse sehr neu oder fehlerhaft ist.\nError code: " + ezMapRoute.getStatus().code); 
		else if (ezMapRoute.getStatus().code == G_GEO_SERVER_ERROR) 
			outputDom.html("Die Adresse konnte nicht berechnet werden. Ein Grund ist nicht bekannt.\n Error code: " + ezMapRoute.getStatus().code); 
		else if (ezMapRoute.getStatus().code == G_GEO_MISSING_QUERY) 
			outputDom.html("Der HTTP q-Wert fehlt oder hat keinen Inhalt. \nM&ouml;gliche Ursache: Es wurde keine Adresse eingegeben.\n Error code: " + ezMapRoute.getStatus().code); 
		else if (ezMapRoute.getStatus().code == G_GEO_BAD_KEY) 
			outputDom.html("Der interne Key ist nicht g&uuml;ltig oder fehlerhaft. \n Error code: " + ezMapRoute.getStatus().code); 
		else if (ezMapRoute.getStatus().code == G_GEO_BAD_REQUEST) 
			outputDom.html("Der Anfahrtsplan konnte nicht berechnet werden.\n Error code: " + ezMapRoute.getStatus().code); 
		else
		 	outputDom.html("Es ist ein unbekannter Fehler aufgetreten."); 
	});
	
}
