var map = null;
var minZoomLevel = 7;
var markers = [];
var markerCluster = null;
var triggerArray = [];

if(typeof(LOCATIONS_JSON) != 'undefined')
	document.writeln('<script type="text/javascript" src="'+LOCATIONS_JSON+'"></script>');

document.writeln('<script type="text/javascript" src="'+BASE_URL+'scripts/maps/gmaps-defaults.js"></script>');
document.writeln('<script type="text/javascript" src="'+BASE_URL+'scripts/maps/gmaps-clustermarker.js"></script>');

// FUNCTION loadmap
function loadMap(map_id, zoom_level, all, addListener)
{	
	//alert("loadMap is geladen");
	if (GBrowserIsCompatible())
	{
		map = new GMap2(document.getElementById(map_id));
		map.setCenter(new GLatLng(default_lat, default_lon), zoom_level);
		
		map.setUIToDefault(); 
		map.enableContinuousZoom();
		map.enableScrollWheelZoom();
		map.removeMapType(G_SATELLITE_MAP);
		map.removeMapType(G_HYBRID_MAP);
		map.disableDoubleClickZoom();

		//if(all)
		//	initMarkersAll(addListener);
		//else
			initMarkers();
	}
};

// FUNCTION initMarkersAll
function initMarkersAll(addListener)
{
	//alert("initMarkersAll is geladen");
	markers = [];

	if(typeof(data_verkooppunten) != 'undefined')
	{
		for(var i = 0; i < data_verkooppunten.count; i++)
		{
			var latlng = new GLatLng(parseFloat(data_verkooppunten.locations[i].lat), parseFloat(data_verkooppunten.locations[i].lon));
			
			var marker = new GMarker(latlng, {icon: baseIcon});
			
			var html = '<strong>'+data_verkooppunten.locations[i].naam+'</strong><br />';
				html += data_verkooppunten.locations[i].adres+'<br />';
				html += trim(data_verkooppunten.locations[i].postcode_plaats)+'<br /><br />';
				html += '<a href="'+data_verkooppunten.url+'/vpid,'+data_verkooppunten.locations[i].id+'">Meer informatie over dit verkooppunt</a>';
			
			var fn = markerClick(marker, html, latlng);
			
			if(addListener != true)
				GEvent.addListener(marker, 'click', fn);

			markers.push(marker);
		}

		// Cluster marker styles
		var styles = [[{
			url: BASE_URL+'images/layout/maps/marker_cluster.png',
			height: 21,
			width: 22,
			opt_anchor: [4, 0],
			opt_textColor: '#ffffff'
		}]];

		// Add markers to map
		markerCluster = new MarkerClusterer(map, markers, {
			styles: styles[0]
		});
	}
};

//FUNCTION initMarkers
function initMarkers()
{
	//alert("initMarkers is geladen");
	
	types = new Array();
	typesUsed = false;
	$('.types').each(function(index, value) {
		classes = $(value).attr('class').split(' ');	
		types[classes[1]] = false;
		if( $(this).attr('checked') ){
			types[classes[1]] = true;
			typesUsed = true;
		}
	});
	
	provincies = new Array();
	provinciesUsed = false;
	$('.provincie').each(function(index, value) {
		classes = $(value).attr('class').split(' ');
		provincies[classes[1]] = false;
		if( $(this).attr('checked') ){
			provincies[classes[1]] = true;
			provinciesUsed = true;
		}
	});
		
	diersoorten = new Array();
	diersoorten_show_array = new Array();
	diersoortenUsed = false;
	$('.diersoort').each(function(index, value) {
		classes = $(value).attr('class').split(' ');
		diersoorten[classes[1]] = false;
		if( $(this).attr('checked') )	{
			diersoorten[classes[1]] = true;			
			diersoorten[index] = classes[1];
			diersoortenUsed = true;
		}
	});
			
	markers = [];
	if(typeof(data_verkooppunten) != 'undefined')
	{
		for(var i = 0; i < data_verkooppunten.count; i++)
		{
			showMarker = true; //important default
		
			if( typesUsed ) {
				if(!types[data_verkooppunten.locations[i].winkeltype]  && showMarker) {
					showMarker = false;
				}
			}

			if( provinciesUsed ) {
				if(!provincies[data_verkooppunten.locations[i].provincie_id] && showMarker) {
					showMarker = false;
				}
			}

			if(typeof(data_vleessoorten[data_verkooppunten.locations[i].id]) != 'undefined')
			{
				if( diersoortenUsed ) {
					diersoorten_show_array[i] = false;						
					diersoorten_array = data_vleessoorten[data_verkooppunten.locations[i].id].split(',');
					
					$('.diersoort').each(function(index, value) {
						classes = $(value).attr('class').split(' ');
						checked = ($(this).attr('checked')) ? true : false;

						if( checked ) {
							if(!diersoorten_array.in_array(classes[1]) && showMarker) {	
								showMarker = false;
							}
						}
					});	
				}
			}

			if( showMarker ){
				var latlng = new GLatLng(parseFloat(data_verkooppunten.locations[i].lat), parseFloat(data_verkooppunten.locations[i].lon));			
				switch(data_verkooppunten.locations[i].winkeltype)
				{
					case 1: whichIcon = vpAlgemeenIcon; break;
					case 2: whichIcon = vpPoelierIcon; break;
					case 3: whichIcon = vpSlagerIcon; break;
					case 4: whichIcon = vpTraiteurIcon; break;
					case 5: whichIcon = vpVersspecialistIcon; break;
					case 6: whichIcon = vpVisspecialistIcon; break;
					case 7: whichIcon = vpMakroIcon; break;
					case 8: whichIcon = vpSligroIcon; break;
					case 9: whichIcon = vpZelfstandigIcon; break;
					case 10: whichIcon = vpAlbertHeijnIcon; break;
					case 11: whichIcon = vpC1000Icon; break;
					case 12: whichIcon = vpDeenIcon; break;
					case 13: whichIcon = vpDekamarktIcon; break;
					case 14: whichIcon = vpEmteIcon; break;
					case 15: whichIcon = vpHoogvlietIcon; break;
					case 16: whichIcon = vpJumboIcon; break;
					case 17: whichIcon = vpLindersJanIcon; break;
					case 18: whichIcon = vpPlusIcon; break;
					case 19: whichIcon = vpSuperDeBoerIcon; break;
					case 20: whichIcon = vpVomarIcon; break;
					case 21: whichIcon = vpZelfstandigeSupermarktIcon; break;
					case 25: whichIcon = vpWebwinkelIcon; break;
				}
	
				var marker = new GMarker(latlng, {icon: whichIcon});	
				var html = '<strong>'+data_verkooppunten.locations[i].naam+'</strong><br />';
					html += data_verkooppunten.locations[i].adres+'<br />';
					html += trim(data_verkooppunten.locations[i].postcode_plaats)+'<br /><br />';
					html += '<a href="'+data_verkooppunten.url+'/vpid,'+data_verkooppunten.locations[i].id+'">Meer informatie over dit verkooppunt</a>';
	
				var fn = markerClick(marker, html, latlng);
	
				GEvent.addListener(marker, 'click', fn);
				
				triggerArray[data_verkooppunten.locations[i].id] = marker;
				
				
				markers.push(marker);
			}
		}
		
		// Cluster marker styles
		var styles = [[{
			url: BASE_URL+'images/layout/maps/marker_cluster.png',
			height: 21,
			width: 22,
			opt_anchor: [4, 0],
			opt_textColor: '#ffffff'
		}]];
		
		// Add markers to map
		markerCluster = new MarkerClusterer(map, markers, {
			styles: styles[0]
		
		});
	}
	
};

//FUNCTION _initMarkers
function _initMarkers()
{
	//alert("_initMarkers is geladen");
	
	provincies = new Array();
	$('.provincie').each(function(index, value) {
		classes = $(value).attr('class').split(' ');
		provincies[classes[1]] = ($(this).attr('checked')) ? true : false;
	});
	
	diersoorten = new Array();
	$('.diersoort').each(function(index, value) {
		classes = $(value).attr('class').split(' ');
		diersoorten[classes[1]] = ($(this).attr('checked')) ? true : false;
		
		if($(this).attr('checked') == true)
		{
			diersoorten[index] = classes[1];
		}
	});
	diersoorten_show_array = new Array();
	
	types = new Array();
	$('.types').each(function(index, value) {
		classes = $(value).attr('class').split(' ');
		types[classes[1]] = ($(this).attr('checked')) ? true : false;
	});
	
	markers = [];
	
	if(typeof(data_verkooppunten) != 'undefined')
	{
		for(var i = 0; i < data_verkooppunten.count; i++)
		{
			if(types[data_verkooppunten.locations[i].winkeltype] == true)
			{
				if(provincies[data_verkooppunten.locations[i].provincie_id] == true)
				{

					if(typeof(data_vleessoorten[data_verkooppunten.locations[i].id]) != 'undefined')
					{
						diersoorten_show_array[i] = false;
						
						diersoorten_array = data_vleessoorten[data_verkooppunten.locations[i].id].split(',');
						$(diersoorten_array).each(function(index, value) {
							if(diersoorten.in_array(value)) {
								diersoorten_show_array[i] = true;
							}
						});
						
						if(diersoorten_show_array[i] == true)
						{
								
								var latlng = new GLatLng(parseFloat(data_verkooppunten.locations[i].lat), parseFloat(data_verkooppunten.locations[i].lon));
								
								switch(data_verkooppunten.locations[i].winkeltype)
								{
									case 1: whichIcon = vpAlgemeenIcon; break;
									case 2: whichIcon = vpPoelierIcon; break;
									case 3: whichIcon = vpSlagerIcon; break;
									case 4: whichIcon = vpTraiteurIcon; break;
									case 5: whichIcon = vpVersspecialistIcon; break;
									case 6: whichIcon = vpVisspecialistIcon; break;
									case 7: whichIcon = vpMakroIcon; break;
									case 8: whichIcon = vpSligroIcon; break;
									case 9: whichIcon = vpZelfstandigIcon; break;
									case 10: whichIcon = vpAlbertHeijnIcon; break;
									case 11: whichIcon = vpC1000Icon; break;
									case 12: whichIcon = vpDeenIcon; break;
									case 13: whichIcon = vpDekamarktIcon; break;
									case 14: whichIcon = vpEmteIcon; break;
									case 15: whichIcon = vpHoogvlietIcon; break;
									case 16: whichIcon = vpJumboIcon; break;
									case 17: whichIcon = vpLindersJanIcon; break;
									case 18: whichIcon = vpPlusIcon; break;
									case 19: whichIcon = vpSuperDeBoerIcon; break;
									case 20: whichIcon = vpVomarIcon; break;
									case 21: whichIcon = vpZelfstandigeSupermarktIcon; break;
								}
	
								var marker = new GMarker(latlng, {icon: whichIcon});
	
								var html = '<strong>'+data_verkooppunten.locations[i].naam+'</strong><br />';
									html += data_verkooppunten.locations[i].adres+'<br />';
									html += trim(data_verkooppunten.locations[i].postcode_plaats)+'<br /><br />';
									html += '<a href="'+data_verkooppunten.url+'/vpid,'+data_verkooppunten.locations[i].id+'">Meer informatie over dit verkooppunt</a>';
	
								var fn = markerClick(marker, html, latlng);
	
								GEvent.addListener(marker, 'click', fn);
	
								markers.push(marker);
						}
					}
				}
			}
		}
		
		// Cluster marker styles
		var styles = [[{
			url: BASE_URL+'images/layout/maps/marker_cluster.png',
			height: 21,
			width: 22,
			opt_anchor: [4, 0],
			opt_textColor: '#ffffff'
		}]];
		
		// Add markers to map
		markerCluster = new MarkerClusterer(map, markers, {
		
			styles: styles[0]
		
		});
	}
	
};

//FUNCTION markerClick
function markerClick(marker, text, latlng)
{
	//alert("markerClick is geladen");
	
	return function() {
		
		var iwAnchor = marker.getIcon().infoWindowAnchor;
        var iconAnchor = marker.getIcon().iconAnchor;
        var offset = new GSize(iwAnchor.x-iconAnchor.x, iwAnchor.y-iconAnchor.y);
		
		map.openInfoWindowHtml(latlng, text, {
		
			maxWidth: 450, 
			maxHeight: 400, 
			autoScroll: true,
			pixelOffset: offset
		
		});
	
	};
};

//FUNCTION setMapCenter
function setMapCenter(args)
{
	//alert("setMapCenter is geladen");
	
	args = args.split(',');

	map.setCenter(
		new GLatLng(
			parseFloat(trim(args[0])),
			parseFloat(trim(args[1]))
		), 
		parseInt(trim(args[2]))
	);
};

//FUNCTION clearMap
function clearMap()
{
	//alert("clearMap is geladen");
	markerCluster.clearMarkers();
};

//FUNCTION setFilter
function setFilter(mapCenter)
{
	//alert("setFilter is geladen");
	
	clearMap();
	
	initMarkers();
};

function focusMarker(lid)
{	
	setMapCenter(triggerArray[lid].Ba.y+','+triggerArray[lid].Ba.x+','+default_verkooppunt_detail_zoom);
	//GEvent.trigger(triggerArray[lid], 'click');
};

$(document).ready(function(){

	$('.provincie').click(function(){
		setFilter(false);
	});
	
	$('.diersoort').click(function(){
		setFilter(false);
	});
	
	$('.types').click(function(){
		setFilter(false);
	});

});

