var iconBlue = new GIcon();
iconBlue.image = 'http://www.connecticum.de/image/mm_20_blue.png';
iconBlue.shadow = 'http://www.connecticum.de/image/mm_20_shadow.png';
iconBlue.iconSize = new GSize(12, 20);
iconBlue.shadowSize = new GSize(22, 20);
iconBlue.iconAnchor = new GPoint(6, 20);
iconBlue.infoWindowAnchor = new GPoint(5, 1);
	
var iconRed = new GIcon();
iconRed.image = 'http://www.connecticum.de/image/mm_20_red.png';
iconRed.shadow = 'http://www.connecticum.de/image/mm_20_shadow.png';
iconRed.iconSize = new GSize(12, 20);
iconRed.shadowSize = new GSize(22, 20);
iconRed.iconAnchor = new GPoint(6, 20);
iconRed.infoWindowAnchor = new GPoint(5, 1);	
	
var iconGreen = new GIcon();
iconGreen.image = 'http://www.connecticum.de/image/mm_20_green.png';
iconGreen.shadow = 'http://www.connecticum.de/image/mm_20_shadow.png';
iconGreen.iconSize = new GSize(12, 20);
iconGreen.shadowSize = new GSize(22, 20);
iconGreen.iconAnchor = new GPoint(6, 20);
iconGreen.infoWindowAnchor = new GPoint(5, 1);	
	
var customIcons = [];
customIcons["standort"] = iconBlue;
customIcons["hauptsitz"] = iconRed;
customIcons["hostel"] = iconGreen;
customIcons["hostel_ausgebucht"] = iconRed;
customIcons["connecticum"] = iconBlue;

var markers = new Hash();

var mapType;
	
function loadAddresses(){
	if (GBrowserIsCompatible()) {
		
		// Change this depending on the name of your PHP file
		var paramsString = $(MAPS_FORM + "formtag").serialize();
		var params = paramsString.gsub('%5B%5D', '').toQueryParams();
		var requestParams = {
			'einsatzorte[]': params.einsatzorte,
			'einsatzortbezeichnungen[]': params.einsatzortbezeichnungen,
			'einsatzorthauptsitz': params.einsatzorthauptsitz
		}
		GDownloadUrl(ROOT_PATH + "helpers/maps/" + MAPS_FORM + "_markers.php?" + Object.toQueryString(requestParams), showAddresses);
	}
}

function loadJobAddresses(postData){
	if(postData){
		postData = postData.unescapeHTML();
	}
	if (GBrowserIsCompatible()) {
		GDownloadUrl(ROOT_PATH + "helpers/maps/" + MAPS_FORM + "_markers.php?id=" + JOBNUMMER, showAddresses, postData);
	}
}

function loadCompanyprofileAddresses(postData){
	if(postData){
		postData = postData.unescapeHTML();
	}
	if (GBrowserIsCompatible()) {
		GDownloadUrl(ROOT_PATH + "helpers/maps/" + MAPS_FORM + "_markers.php?id=" + FIRMENPROFIL_ID, showAddresses, postData);
	}
}

function loadHostelsAddresses(postData){
	if(postData){
		postData = postData.unescapeHTML();
	}
	mapType = 'hostels';
	if (GBrowserIsCompatible()) {
		GDownloadUrl(ROOT_PATH + "helpers/maps/" + MAPS_FORM + "_markers.php", showAddresses, postData);
	}
}
function loadConnecticumAddresses(postData){
	if(postData){
		postData = postData.unescapeHTML();
	}
	mapType = 'connecticum';
	if (GBrowserIsCompatible()) {
		GDownloadUrl(ROOT_PATH + "helpers/maps/" + MAPS_FORM + "_markers.php", showAddresses, postData);
	}
}

function showAddresses(data){
	var map;
	var bounds;
	var accuracy;
	
	map = new GMap2(document.getElementById("mapframe")); 
	bounds = new GLatLngBounds(); // for saving the points and calculating the center and zoom level
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	map.setCenter(new GLatLng(0, 0), 13);
	
	var xml = GXml.parse(data);
	var markers = xml.documentElement.getElementsByTagName("marker");
	for (var i = 0; i < markers.length; i++) {
		var id = markers[i].getAttribute("id");
		var name = markers[i].getAttribute("name");
		var address = markers[i].getAttribute("address");
		var type = markers[i].getAttribute("type");
		accuracy = markers[i].getAttribute("accuracy");
		var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
		
		if (type=="hostel") {
		var url = markers[i].getAttribute("url");
			var marker = createMarker(id, point, name, address, type, url);
		}else{
			var marker = createMarker(id, point, name, address, type);
		}
		
		map.addOverlay(marker);
		bounds.extend(point); // add point to boundries
	}
	
	var zoom = map.getBoundsZoomLevel(bounds);
	
	//var southWest = bounds.getSouthWest();
  	//var northEast = bounds.getNorthEast();
	
	//console.log(northEast.lng() - southWest.lng());
	//console.log(northEast.lat() - southWest.lat());
	
	if (markers.length == 1) {
		openMarkerInfoWindow(marker, name, address);
		if (accuracy <= 5) zoom = 12;
		if (accuracy <= 4) zoom = 11;
		if (accuracy <= 2) zoom = 9;
		if (accuracy <= 1) zoom = 5;
		if (accuracy == 0) zoom = 4;
	}
	
	if (zoom > 15) 
		zoom = 15; // limit to a max zoom level
	
	switch(mapType){
		case 'hostels' : 
			zoomDiff = 0;
			break;
		default :
			zoomDiff = 1;
		
	}
	
	map.setZoom(zoom - zoomDiff); // calculate and set zoom level
	map.setCenter(bounds.getCenter()); // calculate and set center
}
	
function createMarker(id, point, name, address, type, url){
	
	var marker = new GMarker(point, customIcons[type]);
	GEvent.addListener(marker, 'click', function(overlay, latlng){
		if (typeof url != "undefined") {
			openMarkerInfoHostels(marker, id, name, address, url, overlay);
		}else{
			openMarkerInfoWindow(marker, name, address);
		}
	});
	markers.set(id, marker);
	return marker;
}

function openMarkerInfoWindow(marker, name, address){
	var html = "<b>" + name + "</b><br/>" + address + '<br/><a href="http://maps.google.com/maps?&hl=de&q=' + address + '" target="_blank">Adresse in neuem Fenster öffnen.</a>';
	marker.openInfoWindowHtml(html);
}

function openMarkerInfoHostels(marker, id, name, address, url, overlay){
	var html = "<b><a href='" + url + "' target='_blank'>" + name + "</a></b><br />" + address + '<br/><a href="http://maps.google.com/maps?&hl=de&q=' + address + '" target="_blank">Adresse in neuem Fenster öffnen.</a>';
	marker.openInfoWindowHtml(html);
	if (overlay != undefined) {
		$('hostel' + id).show().previous('h3').scrollTo();
	}
}

/*	
function setNewMarker(lat, lng, name, address, type){
	var point = new GLatLng(lat, lng);
	var marker = createMarker(point, name, address, type);	
	bounds.extend(point); // add point to boundries
	map.addOverlay(marker);			
	var zoom = map.getBoundsZoomLevel(bounds);
	if (zoom > 15) 
		zoom = 15; // limit to a max zoom level 
	map.setZoom(zoom); // calculate and set zoom level
	map.setCenter(bounds.getCenter()); // calculate and set center
}
*/

function initializeMapsaddress(input){
	if ($('adresse_choices') == null) {
		var newDiv = new Element('div', {
			'id': 'adresse_choices',
			'class': 'autocomplete'
		});
	}
	$(input).up('div').insert(newDiv);
	new Ajax.Autocompleter(input, 'adresse_choices', ROOT_PATH + 'helpers/autocomplete/mapsaddress.php', {
		minChars: 2,
		paramName: 'address'
	});
}

function getFullAddress(text, li){
	new Ajax.Request(ROOT_PATH + 'helpers/autocomplete/mapsfulladdress.php?address=' + text.value, {
		onSuccess: function(transport){
			var data = transport.responseJSON;
			if(data[0].country != null){
				try{
					$('strasse').value = data[0].street;
					$('plz').value = data[0].zipcode;
					$('ort').value = data[0].city;
					$('land').value = data[0].country;
				} catch(e){}
				setValidationResult(true, result);
			} else {
				setValidationResult(false);
			}		
		}
	});
}
/*
function getMarkerAddress(text, li){
	new Ajax.Request('../helpers/autocomplete/mapsfulladdress.php?einsatzorte[]=' + text.value, {
		onSuccess: function(transport){
			var data = transport.responseJSON;
			try{setNewMarker(parseFloat(data[0].lat), parseFloat(data[0].lng), 'Neu', data[0].address, 'standort');}catch(e){alert(e)}			
		}
	});
}
*/
function validateUniqueAddress(input, result){
	new Ajax.Request('../helpers/autocomplete/mapsfulladdress.php?address=' + input.value, {
		onSuccess: function(transport){
			var data = transport.responseJSON;
			setValidationResult(data[0].country != null, result);
		}
	});
}

function setValidationResult(valid, result){
	if(valid){
		$(result).addClassName('accept').removeClassName('cancel').title = 'Die Adresse kann eindeutig zugeorndet werden.';
	} else {
		$(result).addClassName('cancel').removeClassName('accept').title = 'Die Adresse kann nicht eindeutig zugeorndet werden.';
	}
}

function activateAutocomplete(newRow){
	var addressInput = $A(newRow.select('input')).first();
	addressInput.id += 1;
	addressInput.stopObserving();
	initializeMapsaddress(addressInput.id);
	
	var addressType = $$('input[name="einsatzorthauptsitz"]');
	if(addressType.size() > 0){
		addressType.last().value = addressType.size() - 1;
	} 
}

function deleteEmtpyLastAddressRow(){
	var lastAddressRow = $$('#addresstable tr.addressrow').last();
	if(lastAddressRow.select('td input[id^="einsatzort"]').first().value == ''){
		lastAddressRow.remove();	
	}
}
		
function initializeJourneyRoute() {
	
	if (GBrowserIsCompatible()) {      
		var map = new GMap2($("map"));
		var gdir = new GDirections(map, $("map"));
		
		map.setCenter(new GLatLng(52.47791, 13.387073), 14);
	
		var point = new GPoint(13.387073, 52.47791);
		var marker = createMarker("1", point, "Connecticum", "Tempelhofer Damm 45", "connecticum");
		map.addOverlay(marker);
	}
	
	Event.observe('journeyRoute', 'submit', function(event){
		Event.stop(event);
		var address = $F('fromAddress');
		if (address != "") {
			gdir.load("from: " + address + " to: Tempelhofer Damm 45, Berlin");
			$("journeyRouteDetails").update('<a href="http://maps.google.de/maps?f=d&source=s_d&saddr=' + address + '&daddr=Tempelhofer+Damm+45,+Berlin&hl=de&ie=UTF8" target="_blank">Details</a>');
		}
	});
	
	Event.observe('getJourneyFrom', 'click', function(){
		getCurrentAddress('fromAddress');
	});
	
}

function getCurrentAddress(input){
	try {
		navigator.geolocation.getCurrentPosition(function(position){
			new Ajax.Request(ROOT_PATH + 'helpers/maps/geolocation.php?lat=' + position.coords.latitude + '&lng=' + position.coords.longitude, {
				onSuccess: function(transport){
					if (transport.responseJSON.status == 'OK'){
						$(input).value = transport.responseJSON.address;
					} else {
						$(input).value = position.coords.latitude + ", " + position.coords.longitude;
					}
				}
			});
		}, function(){
			alert('Ihre Position konnte nicht ermitteln werden! Bitte tragen Sie selbst eine Adresse ein.');
		});
	} catch(e){
		alert('Ihre Browser unterstützt leider keine automatische Positionsbestimmung! Bitte tragen Sie die Adresse selbst in das Feld ein.');
	}
}

