var map_loaded = false;
var map = null;
var bounds = null;
var visiblePoi = null;

var baseIcon = new GIcon(G_DEFAULT_ICON);
if (isP1map) {
	baseIcon.shadow = marker_dir+'shadow.png';
	baseIcon.iconSize = new GSize(30,27);
	baseIcon.shadowSize = new GSize(30, 27);
	baseIcon.iconAnchor = new GPoint(11,27);
	baseIcon.infoWindowAnchor = new GPoint(11, 27);
} else {
	baseIcon.shadow = marker_dir+'shadow.png';
	baseIcon.iconSize = new GSize(28, 36);
	baseIcon.shadowSize = new GSize(40, 36);
	baseIcon.iconAnchor = new GPoint(13, 35);
	baseIcon.infoWindowAnchor = new GPoint(14, 6);
}
var iconPunaise = new GIcon(G_DEFAULT_ICON);
iconPunaise.image = marker_dir+'mapcent.png';
iconPunaise.shadow = marker_dir+'mapcent_shadow.png';
iconPunaise.iconSize = new GSize(31, 41);
iconPunaise.shadowSize = new GSize(40, 41);
iconPunaise.iconAnchor = new GPoint(0, 41);
iconPunaise.infoWindowAnchor = new GPoint(5, 5);

var iconPOI = new GIcon(G_DEFAULT_ICON);
iconPOI.image = marker_dir+'speld.png';
iconPOI.shadow = marker_dir+'speldshadow.png';
iconPOI.iconSize = new GSize(11, 41);
iconPOI.shadowSize = new GSize(25, 41);
iconPOI.iconAnchor = new GPoint(0, 41);
iconPOI.infoWindowAnchor = new GPoint(5, 5);

function getColorForType(parking) {
	if (isP1map) {
		if (parking.managed_by == 1) {
			if (parking.locked == 0) return "orange";
			else return "orange_locked";
		} else {
			return "grey";
		}
	} else {
		switch (parking.taip) {
			case "0": return "orange";
			case "1": return "darkblue";
			case "2": return "blue";
			case "3": return "red";
			case "4": return "green";
			case "5": return "yellow";
			case "6": return "grey";
		}		
	}
}

function createPunaise(point, html) {
	markerOptions = { icon:iconPunaise };
		var punaise = new GMarker(point, markerOptions);
		if (html != '') {
		GEvent.addListener(punaise, 'click', function() {
			punaise.openInfoWindowHtml(html);
		});
	}
	return punaise;
}

function createMarker(point, parking, index, noDetailToolTip) {

	var color = 'grey';
	if(typeof(suggest) == 'undefined') {
		color = getColorForType(parking);
	}
	var numberIcon = new GIcon(baseIcon);
	var listNum = parkingIdx + index + 1;
	numberIcon.image = marker_dir + color + "/" + color + "_" + listNum + ".png";
	// Set up our GMarkerOptions object
	markerOptions = { icon:numberIcon };
	var marker = new GMarker(point, markerOptions);
	
	if (!noDetailToolTip) {	
		var infoWindowHtml = '';
		if (parking.name) {
			infoWindowHtml += '<b>' + parking.name + '</b> <br/>';
		}
		if (parking.address) {
			infoWindowHtml += parking.address + '<br/>';
		}
		if (parking.zip) {
			infoWindowHtml += parking.zip + '&nbsp;';
		}
		if (parking.city) {
			infoWindowHtml += parking.city + '<br />';
		}
		if (parking.distance) {
			infoWindowHtml += parking.distance + ' km<br />';
		}
		if (parking.tomTom) {
			infoWindowHtml += '<div class="tomtom"><a href="' + parking.tomTom + '" title="Voeg toe aan TomTom Home"><img alt="Add-To-TomTom" src="http://addto.tomtom.com/api/images/addtotomtom-button.gif" border="0"></a></div>';
		}
		if (parking.detailLink) {
			infoWindowHtml += '<div class="parkingdetails"><a href="/' + parking.detailLink + '" title="Meer info over deze parking">Parking details &raquo;</a></div>';
		}

		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(infoWindowHtml);
		});
	}
	if (noDetailToolTip) {
		GEvent.addListener(marker, 'click', function() {
			window.location = '/' + parking.detailLink;
		});
	}
	
	return marker;
}

function createPoi(point, poi) {
	markerOptions = { icon:iconPOI };
		var poiMarker = new GMarker(point, markerOptions);
		html = "<h2>"+poi.name+"</h2>";
		if ( null != poi.www ) {
			html += '<p>Website: <a target="_blank" href="'+poi.www+'">klik hier</a></p>'
		}
		if (html != '') {
		GEvent.addListener(poiMarker, 'click', function() {
			poiMarker.openInfoWindowHtml(html);
		});
	}
	return poiMarker;
}

function addPoi(uid) {
	try {
		if (null != visiblePoi) {
			map.removeOverlay(visiblePoi);
			visiblePoi = null;
		}
		for (var i = 0; i < pois.length; i++) {
			if (uid == pois[i].uid) {
				lat = parseFloat(pois[i].lat);
				lng = parseFloat(pois[i].lng);
				if (lat != 0 && lng != 0) {
					point = new GLatLng(lat, lng);
					bounds = new GLatLngBounds();
					bounds.extend(mapCenter);
					bounds.extend(point);
					visiblePoi = createPoi(point, pois[i]);
					map.addOverlay(visiblePoi);

					if(typeof(mapZoom) != "undefined") {
						map.setCenter(bounds.getCenter(), mapZoom);
					} else {
						map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds) - 1);
					}
					map.savePosition() ;
					break;
				}
			}
		}
	} catch (e) {
	}
}

function loadmap(canvas_id,noDetailToolTip) {
	if (GBrowserIsCompatible() && !map_loaded) {
		try{
			map_loaded = true;
			map = new GMap2(document.getElementById(canvas_id));
			map.addControl(new GMapTypeControl(), new GControlPosition(G_ANCHOR_TOP_LEFT));
			map.addControl(new GSmallZoomControl3D(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10, 25)));
			
			bounds = new GLatLngBounds();
			bounds.extend(mapCenter);
			map.setCenter(mapCenter, 5);
			var centerMarker;
			var parkingIsArray = true;
			try { parkingIsArray = (typeof(parkings.length) != "undefined"); } catch (ex) {
				parkingIsArray = false;
			}
			if (isP1map && ! parkingIsArray) {
				centerMarker = createMarker(mapCenter, parkings, 0, noDetailToolTip);
				map.addOverlay(centerMarker);
			} else if (!isP1map) {
				centerMarker = createPunaise(mapCenter, mcInfo);
				map.addOverlay(centerMarker);
			}
			
			var point = null;
			var marker = null;
			for (var i = 0; i < parkings.length; i++) {
				var lat = parseFloat(parkings[i].lat);
				var lng = parseFloat(parkings[i].lng);
				if (lat != 0 && lng != 0) {
					point = new GLatLng(lat, lng);
					bounds.extend(point);
					marker = createMarker(point, parkings[i], i,noDetailToolTip);
					map.addOverlay(marker);
				}
			}
			if(typeof(mapZoom) != "undefined") {
				map.setCenter(bounds.getCenter(), mapZoom);
			} else {
				map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds) - 1);
			}
			map.savePosition() ;
		} catch (e) {
			//alert("exception: " + e.name + ", " + e.message);
		}
	}
}
function load(canvas_id) {
	loadmap(canvas_id,false);
}
function loadNoTooltip(canvas_id) {
	loadmap(canvas_id,false);
}

jQuery(document).ready(function() {	
	jQuery('#mapcanvas').each(function() {
		log('got mapcanvas');
		load('mapcanvas');
		jQuery('body')
			.unload(function(){
				log('unload');
				GUnload();
			})
		;
	});
	jQuery('#detailcanvas').each(function() {
		log('got detailcanvas');
		load('detailcanvas');
		jQuery('body')
			.unload(function(){
				log('unload');
				GUnload();
			})
		;
	});
	try { 
		jQuery('#sservice').jListbox(); 
		jQuery('#sservice').change(function(){
			if (jQuery(this).value() == 'tomtom') {
				jQuery('tomtom-logo').show();
			} else {
				jQuery('tomtom-logo').hide();
			}
		});
	} catch (ex) { }
	jQuery('.open-next')
		.click(function(){
			jQuery(this).next().toggle('slow');
			return false;
		}
	);	
	jQuery('#route-planner-button')
		.click(function(){
			directionsPanel = document.getElementById("directions");
			var directions = new GDirections(map, directionsPanel);
			directions.load("from: "+jQuery('input.route-planner').val()+" to: "+parkings.lat+", "+parkings.lng);
			return false;
		})
	;
});


//	var routeformcontainer = $('routeformcontainer');
//	if (routeformcontainer != null) {
//		
//		var routeformcontaineropen = false;
//		
//		routeformcontainer.getElement('a').addEvent('click', function (evt){
//			evt.stop();
//			$('routeform').setStyle('display', routeformcontaineropen ? 'none' : 'block');
//			//$('saddr').selectRange(2, 4);
//			routeformcontaineropen = ! routeformcontaineropen;
//		});
//		
//		var google_route_url = 'http://maps.google.nl/maps?f=d&source=s_d&hl=nl&mra=ls&daddr=';
//		google_route_url += parkings.address.replace('/', ', ') + ', ' + parkings.zip + ' ' + urlencode(parkings.city)/* + ' (' + parkings.name + ')'*/;
//		google_route_url += '&saddr=';
//
//		var anwb_route_url = 'http://route.anwb.nl/routeplanner/servlet/rp?action=0';
//		anwb_route_url += '&name2=' + urlencode(parkings.name + ', ' + parkings.city) + '&lat2=' + parkings.lat + '&lon2=' + parkings.lng;
//
//		var route_url = anwb_route_url;
//
//		$('saddr').addEvent('focus', function(evt){
//			if ('value', 'vertrek postcode of adres...' == this.value ||'value', 'vertrek postcode of straat, stad...' == this.value) {
//				this.value = '';
//			}
//		});
//		
//		$('routeformlink').addEvent('click', function (evt){
//			var service = $('sservice').getSelected().getProperty('value');
//			if ('google' == service) {
//				route_url = google_route_url  + urlencode($('saddr').getProperty('value'));
//			} else if ('anwb' == service) {
//				route_url = anwb_route_url + anwb_search_term($('saddr').getProperty('value'));
//			}
//			$('routeformlink').setProperty('href', route_url);
//		});
//		$('routeform').addEvent('submit', function(evt) {
//			evt.stop();
//		});
//		
//	}

function log(s) {
//	try { console.log(s); } catch(x) {}
}