// variabelen

var map = null;
var sv = null;
var svopen = false;
var markerClusterer = null;
var currentMarkers = new Array();
var bounds;
var clickedLatLng = null;
var overlay;
var isPopup = false;
var echteurl = '/' + location.href.toString().split('.nl/')[1];
var echtetitel = window.document.title.toString().split('|')[0];
var lasturl = '/';
var heeftlocatie = true;
var isLoaded = false;
var dosetbounds = true;
var opa = 1; //opacity
var currentOverlay = 'geen';
var speciaalKaart = '';
var ffbij = ''; if (navigator.userAgent.indexOf('Firefox') > -1) ffbij = '?'; //bugfix ff popstate iframe
var route;
var fusionlayer;
var mouseX = 0;
var mouseY = 0;

// events

setViewport(); //alvast aanroepen bij laden
var hs = location.hash.replace('#','');
if (hs.indexOf('?q=') > -1) location.replace(hs);

window.onorientationchange = setViewport;

window.onhashchange = function() { //alleen IE9?
	//triggerurl(location.hash.replace('#',''));
} 

window.onpopstate = function(event) { 
	if (event.state != null) {triggerurl(event.state.url)} else {triggerurl(echteurl)};
} 


// pageload

$(document).ready(function() {

	
	speciaalKaart = $('#kaart').data('kaart'); if (speciaalKaart==undefined) speciaalKaart = ''; // bv. Withoos
	setTimeout(zetMap, 10); //kaart zetten
	popuppos(); //popup centreren
	window.onresize = popuppos;

	document.getElementById('zoekform').onsubmit = zoeken;

	if (speciaalKaart == ''){ //niet bij bv Withoos
	
	
		$('.Kaarten li>a').click(function(){ // Kaartsoort zetten
			
			algemeen(this);
			
			zetKaart($(this).attr('data-kaart'), $(this).attr('data-kaartsoort') );
			
			 $(this).parent().parent().find('a').removeClass('selected'); $(this).addClass('selected');
			
			return false; 
		 });
		 
	
		$('.Kaarten h3>a').click(function(){ // sub openklappen
			
			algemeen(this);
			
			$(this).parent().next().slideToggle().find('a').removeClass('selected');
			
			removeOverlays();
			
			return false; 
		 });
	
	
		$('#menu h2>a').click(function(){ // openklappen + punten zetten cq. tonen
			
			algemeen(this);
			sluit();
			if ( $(this).parent().parent().not('.Kaarten, .Routes').length != 0 ) {
					route.setMap(null);
					$('#menu div.binnen').not($(this).parent().next()).children('ul.actief').slideUp().removeClass('actief');
			}
			
			$('#menu div.binnen').not($(this).parent().next()).slideUp().parent().removeClass('actief');
					
			$(this).parent().parent().toggleClass('actief')
			
			$(this).parent().next().slideToggle(function(){			 	
											$('#menu h2').css('margin', '2px 0 0 0'); // IE redraw bug
											});
	
			zetPunten('#' + $(this).parent().parent().attr('id') + '.actief:not(.Routes) li a[data-loc]');
			
			//eerste openen indien enige
			var as = $('#' + $(this).parent().parent().attr('id') + '.actief li a');
			if (as.length==1) {as.trigger('click');}
			as = null;
			
			return false; 
		 });
	
	} // einde speciaalKaart == ''


	$('.Groep h3 a').click(function(){ // sub openklappen + bounds zetten

		algemeen(this);
		sluit();
		
		var cursub = $(this).parent().next();
		
		if (cursub.is(':hidden') ){
			
			$(this).parent().parent().children('ul.Subgroep').hide().removeClass('actief');	
			
			cursub.slideDown().addClass('actief');	
			
			zetBounds('#' + $(this).parent().next().attr('id') + '.Subgroep.actief li a');
			
		} else {
			cursub.slideUp().removeClass('actief');	
		}
		
		return false; 
	 });
	
	
	$('.Routes h3 a').click(function(){

		algemeen(this);
		sluit();
		
		var cursub = $(this).parent().nextAll('.Subgroep:first');
		
		if (cursub.is(':hidden') ){
			
			$(this).parent().parent().children('ul.Subgroep').hide().removeClass('actief');	
			
			cursub.slideDown().addClass('actief');	
			
			//alleen Routes, andere al bij #menu h2>a
			var routesel = '.Routes #' + cursub.attr('id') + '.Subgroep.actief li a[data-loc]';
			zetPunten(routesel);
			zetRoute(routesel);
			zetBounds(routesel);
			
		} else {
			cursub.slideUp().removeClass('actief');	
			clearMarkers();
			route.setMap(null);
		}
		
		return false; 
	 });	
	
	
	
	$('.Groep li>a, .Uitgelicht li>a, .Informatie li>a, .Routes li>a').click(function(){ // iframe openen ( + evt. setCenter)
		
		algemeen(this);
		
		zetPositie($(this).attr('data-loc') + '');
		
		popup(lasturl);
		
		//indien nodig parent openklappen
			$(this).parents('.Subgroep').addClass('actief').show();
			var evtparent = $(this).parents('div.Groep').not('.actief').children('h2').children('a');
			if (evtparent.length){ dosetbounds = false; evtparent.trigger('click'); }
		
		return false; 
	 });


	$('#muismenu a').click(function(){ // muismenu

		svopen = true; //niet zoomen etc.
		zetPositie(clickedLatLng.lat() + ',' + clickedLatLng.lng());
		popup($(this).attr('href') + '?lat=' + clickedLatLng.lat() + '&lon=' + clickedLatLng.lng());
		$('#muismenu').hide();
		
		return false; 
	 });


	$("#menu .info-i").click(function(event){ //info-i'tjes
		sluitinfo();
		event.stopPropagation();
		var id = $(this).attr('data-id');
		$('#info-' + id).fadeToggle();
		return false;
	});  
	
	$('#menu .infobox span').click(sluitinfo);
	
	
	//uitgelicht opmaken
	$(".Uitgelicht li>a").each(function(){
		$(this).parent().css('background-image', "url('" + $(this).attr('data-img') + "')");
		$(this).html( $(this).html() + '<i>' + $(this).attr('data-adr').split(',')[0] + '</i>');
	});	
	
	var curl = location.pathname;
	if (curl == '/') curl = hs;
	if (speciaalKaart == '') setTimeout(function(){triggerurl(curl);}, 100);

	//defaults openenen
	if ($('.Kaarten li a.selected').length == 0) $('.Kaarten ul:first li a').last().addClass('selected');
	if (curl == '' || speciaalKaart != '') { if ($('.Groep.actief').length == 0) {zetPunten('.Groep:first li a');} else {zetPunten('.Groep.actief:first li a');} }
	
	

});


// begin functies

function zoeken(){
	
	$('#zoekresultaten #doel').html('<p>Bezig met zoeken...</p>').load('/zoeken?' + $('#zoekform').serialize() + ' #zoekresultaten .binnen div', function() {

		$('#zoekresultaten li>a').click(function(){
			
			algemeen(this);
			
			zetPositie($(this).attr('data-loc') + '');
			
			popup(lasturl);
			
			return false; 
		 });
		zetPunten('#zoekresultaten li>a');
	 });
	 $('#menu div.binnen').slideUp().parent().removeClass('actief');
	$('#zoekresultaten, #doel').addClass('actief').show();
	
	hashstate('/?' + $('#zoekform').serialize(), $('#q').val());
	
	return false;
}


function algemeen(o){ //bij elke/de meeste kliks
		sluitinfo();
		lasturl = $(o).attr('href');

	 	hashstate(lasturl, $(o).text());
}


function hashstate(url,title){ //pseudo-url verzetten
	if (typeof(url) != 'undefined'){
	if (url.indexOf('undefined') < 0 && url.indexOf('/') == 0){
		if (isLoaded) {
			window.document.title = title + ' | ' + $('h1').text();
			try {
				history.pushState({url: url}, title, url);
			} catch(e) {location.hash = url;}
		}
	}
	}
}


function triggerurl(url){ //pseudo-url 'uitvoeren'
	if (url != lasturl && url.indexOf('/') == 0 && url != '/') {
		var heefta = $('#menu a[href="' + url + '"], #menu a[href="' + url + '/"]'); //link aanwezig?
		if (heefta.length) {heefta.first().trigger('click');}
		else {if(url != echteurl) popup(url);} // noodoplossing
	}
}


function popup(url){
	isPopup = true;
	sluitinfo();
	$('#popup').removeClass('pijl').hide();
	$('.puntlabel').hide();
		
	//if ($(window).width() > 800 && $(window).height() > 580){
	
		if (!svopen) map.setOptions({disableDefaultUI: true});
		map.setOptions({draggable: false, scrollwheel: false});
		$('#popup').html('<iframe name="detailframe" src="' + url + ffbij + '" frameborder="0" scrolling="no" allowtransparency="true" width=700 height=540></iframe>'); // ? is voor bug firefox met pushState
		
	//} else {
		//verder uitwerken?
		//popwin = window.open(url, 'popwin', 'width=700,height=540');
		//popwin.focus();
	//}
}


function showpopup(metpijl){
  $('#popup').slideDown();
  if (heeftlocatie) $('#popup').addClass('pijl');
}

function sluit(){
	if (isLoaded && dosetbounds){
		isPopup = false;
		svopen = false;
		sluitinfo();
		$('#popup').removeClass('pijl').slideUp('fast', function(){$('#popup').html('');});
		try{ //als map nog bezig is
			map.setOptions({draggable: true, scrollwheel: true});
			map.setOptions({disableDefaultUI: false});
		} catch(e) {}
		if (speciaalKaart == ''){
			hashstate($('.Groep.actief h2 a').first().attr('href'), $('.Groep.actief h2 a').text());
		} else {
			hashstate(echteurl, echtetitel);
		}
	}
}

function sluitinfo(){
	$('#menu .infobox').hide();
}


function setViewport(){
	var vp = "width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=0;"
	if (window.orientation == 0 || window.orientation == 180) vp = "user-scalable=0;";
	document.getElementById("vp").setAttribute("content", vp);
}


function getMaxHeight(){
	var h = $(window).height();
	h -= $('#menu h1').height();
	h -= $('#menu #zoekform').height();
	h -= ($('#menu h2').length * 35);
	return h + 'px';
}


function popuppos(){
	$('#menu div.binnen').css('maxHeight', getMaxHeight());
	
	$('#popup').css('left', (($(window).width() - 225) / 2 - 350 - 0) + 'px' ); //niet - 30 ivm iets meer ruimte links voor 1024
	$('#popup').css('top', (($(window).height()) / 2 - 270) + 'px' );
}


function muismenu(e){
	if (!isPopup){
		var mapDiv = $('#kaart');
		var menu = $('#muismenu');
		clickedLatLng = e.latLng;
		
		try{
			x = e.pixel.x;
			y = e.pixel.y;
		} catch(e){ //fusiontables geen e.pixel
			//var pr = overlay.getProjection();
		 	//var pp = pr.fromLatLngToDivPixel(clickedLatLng);
		 	x = mouseX; y = mouseY;
		}
		menu.hide();
		
		
		if ( x > mapDiv.width() - menu.width() ) x -= menu.width();
		if ( y > mapDiv.height() - menu.height() ) y -= menu.height();
	
		menu.css({ top: y, left: x }).slideDown(200);
	}
}


// kaartfuncties

function zetMap() {

	var bgcolor = 'gray';
	//evt. speciale kaart (Withoos)
	var custumMap;
	if (speciaalKaart != ''){
		custumMap = new google.maps.ImageMapType({
			getTileUrl: function(a, b) {return speciaalKaart + b + '_' + a.x + '_' + a.y + '.jpg';},
			tileSize: new google.maps.Size(256, 256), isPng: false,  maxZoom: 12, minZoom: 8, radius: 1, name: "speciaal"
		});
		bgcolor = 'black';
	}

	var kaartopties = {
		zoom: Number($('#kaart').attr('data-zoom')),
		center: LaLo($('#kaart').attr('data-loc')),
		mapTypeId: google.maps.MapTypeId.HYBRID,
		backgroundColor: bgcolor,
		mapTypeControl: false,
		overviewMapControl: true
	};
	map = new google.maps.Map(document.getElementById('kaart'), kaartopties);
	
	//speciale kaart
	if (speciaalKaart != ''){
    	map.mapTypes.set('speciaal', custumMap);
		map.setMapTypeId('speciaal');
	} 
	else { //muismenu
		$('#muismenu').bind('contextmenu', function() { return false; }).appendTo($('#kaart'));
		google.maps.event.addListener(map, 'rightclick', muismenu);
		google.maps.event.addListener(map, 'click', muismenu);
		$.each('dblclick dragstart dragend bounds_changed zoom_changed maptypeid_changed center_changed'.split(' '), function(i,name){
			google.maps.event.addListener(map, name, function(){ $('#muismenu').hide(); });
		});
	}
	
	// eigen streetview
	if ($("#muismenu a[href='/muismenu/streetview/']").length) {
		sv = new google.maps.StreetViewPanorama(document.getElementById("sv")); 
		map.setStreetView(sv);
		google.maps.event.addListener(sv, 'links_changed', function() {
			sv.setVisible(false);
			if (!svopen){
			setTimeout(function(){
				svopen = true;
				sv.setVisible(false);
				var svp = sv.getPosition();
				zetPositie(svp.lat() + ',' + svp.lng());
				popup('/muismenu/streetview/' + '?lat='+ svp.lat() + '&lon=' + svp.lng());
			}, 100);
			}
		});	
	}
	
	//tbv setShiftedCenter:
    overlay = new google.maps.OverlayView();
    overlay.draw = function() {};
    overlay.setMap(map);
	
	//routepoly
	route = new google.maps.Polyline ( {
		strokeColor: "#FF0033",
		strokeOpacity: 0.6,
		strokeWeight: 5,
		path: new google.maps.MVCArray(),
		clickable: false
	});
	
	//klaar met alles laden doorgeven na 1 sec
	setTimeout(function(){isLoaded = true}, 1000);	
}


function zetKaart(kaarturl, kaartsoort){
	
	switch(kaartsoort){
	
	case 'Google Maps':
		eval('var mt = google.maps.MapTypeId.' + kaarturl);
		map.setMapTypeId(mt);
		break;

	case 'Doorlink':
		location.href = kaarturl;
		break;
		
	default:
		createOverlay(kaarturl);
		break;
	}
}


function zetPositie(locstr){
	if (locstr.indexOf('.') > 0 ){
		if (!svopen && map.getZoom < 17) map.setZoom(17);
		setShiftedCenter(LaLo(locstr));
		heeftlocatie = true;
	} else {heeftlocatie = false}
}


function setShiftedCenter(ll) { //470 pixel naar links ivm popup
	var ll2;
	try{
		 var pr = overlay.getProjection();
		 var p1 = pr.fromLatLngToDivPixel(ll);
		 var p2 = new google.maps.Point((p1.x + 470), p1.y);
		 ll2 = pr.fromDivPixelToLatLng(p2);
	}
	catch(e) {ll2 = ll}
	map.panTo(ll2);
}


function zetPunten(selector){
	if ($(selector).length){
		
		setTimeout(function(){
			var kleur;
			clearMarkers();
			bounds = new google.maps.LatLngBounds;
	
			$(selector).each(function(){
				var locstr = $(this).attr('data-loc');
				var ll = LaLo(locstr);			
				var pid = $(this).attr('id');
				var tit = $(this).attr('title');
				var href = $(this).attr('href');			
				kleur = $(this).attr('class'); if (kleur == '') kleur = 'paars';
				
				bounds.extend(ll);
				var marker = new google.maps.Marker({position: ll, icon: new google.maps.MarkerImage('/grafiek/i/' + kleur + '.png', new google.maps.Size(22, 22), new google.maps.Point(0, 0), new google.maps.Point(11, 11))});
				marker.attachTipTool('<div class="puntlabel"><img src="' + $(this).attr('data-img') + '"/><h3>' + tit + '</h3>' + $(this).attr('data-adr') + '</div>'); 
				google.maps.event.addListener(marker, 'click', function(){zetPositie(locstr); popup(href); klapopen(pid); hashstate(href,tit)});
				currentMarkers.push(marker);
			});
	
		if (dosetbounds && !bounds.isEmpty() && $('.Groep.actief').length > 0 && speciaalKaart == '') map.fitBounds(bounds);
		dosetbounds = true;
		
		var gridsize = 50; if (speciaalKaart != '') gridsize = 10;
		markerClusterer = new MarkerClusterer(map, currentMarkers, {gridSize: gridsize, maxZoom: 17, styles: clusterStyles(kleur)});	
			
		}, 10);
	}
}


function zetBounds(selector){
	setTimeout(function(){
		bounds = new google.maps.LatLngBounds;
		$(selector).each(function(){
			var ll = LaLo($(this).attr('data-loc'));
			bounds.extend(ll);
		});
		if (!bounds.isEmpty()) map.fitBounds(bounds);
	}, 10);
}

function zetRoute(selector){
	if ($(selector).length){
		
		setTimeout(function(){

			var url ="/routepoly?r=";
			
			$(selector).each(function(){
				var locstr = $(this).attr('data-loc');
				if (locstr.indexOf(',') > 1) {
					if (url.indexOf(',') > 1) url += '|';
					url += locstr.replace(' ','');	
				}
			});
		
			$.ajax({
			  url: url, dataType: "text",
			  success: function(data){
				route.setPath(google.maps.geometry.encoding.decodePath(data));
				route.setMap(map);
			  }
			});																									   

		}, 10);	

	} 
}


function createOverlay(url){
	removeOverlays();
	
	if (isNumber(url)){
	  fusionlayer = new google.maps.FusionTablesLayer({
		query: {select: 'geometry', from: url},
		suppressInfoWindows:true
	  });
	  $(document).mousemove(function(e){
		mouseX  = e.pageX; mouseY  = e.pageY;
      }); 
	  google.maps.event.addListener(fusionlayer, 'rightclick', muismenu);
	  google.maps.event.addListener(fusionlayer, 'click', muismenu);
	  fusionlayer.setMap(map);		
	}
	else if (url != 'geen'){
		var tmp = new google.maps.ImageMapType({
			getTileUrl: function(p, z) {
			   if (url.indexOf('{x}') > 0) {
				   	var ymax = 1 << z; var y1 = ymax - p.y -1; //maptiler
					return t(url, {x: p.x, y: p.y, z: z, y1: y1});
				} else {
					return url + TileToQuadKey(p.x, p.y, z) + '.png';
				}
			},
			tileSize: new google.maps.Size(256, 256), isPng: true, opacity: opa
		}
		);
		map.overlayMapTypes.push(tmp);
		currentOverlay = url;
	}
}

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}


function removeOverlays(){
	try{map.overlayMapTypes.pop();} catch(e){}
	try{fusionlayer.setMap();} catch(e){}
}


function setOpa(){
	if ($('#opaCheck').is(':checked')) { opa = 0.6} else {opa = 1}
	createOverlay(currentOverlay);
}


function clearMarkers() {
	if (markerClusterer) markerClusterer.clearMarkers();
    for(var i=0; i < currentMarkers.length; i++){
        currentMarkers[i].setMap(null);
    }
    currentMarkers = new Array();
};


function LaLo(str){
	eval('var ll = new google.maps.LatLng(' + str + ')');	
	return ll;
}


function klapopen(id){
	//niet openklappen bij route
	if ( $('.Routes.actief').length==0 ){
	
		$('#menu .binnen').hide();
		$('#menu .Subgroep').hide();
		
		$('#' + id).parent().parent().parent().show();
		$('#' + id).parent().parent().show();
		
		$('#menu .binnen:visible').scrollTop( $('#' + id).parent().parent().position().top - 25 )
	
	}
}


function TileToQuadKey  ( tx,  ty,  zl) { 
   var quad = '';
   for (var i = zl; i > 0; i--){ 
	   var mask = 1 << (i - 1); 
	   var cell = 0; 
	   if ((tx & mask) != 0) 
		   cell++; 
	   if ((ty & mask) != 0) 
		   cell += 2; 
	   quad += cell; 
   } 
   return quad; 
}  


function clusterStyles(kleur){
	var st = [
	{opt_textColor:"#000000", url:"/grafiek/i/cluster_klein_"  + kleur + ".png", height:39, width:35, "opt_anchor": [3, 22], opt_textSize: 11},
	{opt_textColor:"#000000", url:"/grafiek/i/cluster_middel_" + kleur + ".png", height:45, width:45, "opt_anchor": [6, 26], opt_textSize: 11},
	{opt_textColor:"#000000", url:"/grafiek/i/cluster_groot_"  + kleur + ".png", height:57, width:57, "opt_anchor": [8, 33], opt_textSize: 11}
	];	
	return st;	
}


function t(s,d){ //http://mir.aculo.us/2011/03/09/little-helpers-a-tweet-sized-javascript-templating-engine/
	for(var p in d)
		s=s.replace(new RegExp('{'+p+'}','g'), d[p]);
	return s;
}

//http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerclusterer/1.0/examples/advanced_example.html NB 1 correctie anchor_ ipv anchor
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('4 7(c,d,e){3.T(7,s.t.1J);3.l=c;3.k=[];3.K=[];3.1K=[2r,2s,2t,2u,2v];3.E=[];3.13=p;6 f=e||{};3.F=f[\'2w\']||2x;3.1d=f[\'1e\']||u;3.E=f[\'2y\']||[];3.1L=f[\'2z\']||3.1M;3.1N=f[\'2A\']||3.1O;3.1P=f[\'2B\']||B;3.1Q();3.C(c);3.1f=3.l.14();6 g=3;s.t.U.1g(3.l,\'2C\',4(){6 a=g.l.1R[g.l.1S()].1e;6 b=g.l.14();8(b<0||b>a){9}8(g.1f!=b){g.1f=g.l.14();g.V()}});s.t.U.1g(3.l,\'2D\',4(){g.L()});8(d&&d.G){3.1T(d,p)}}7.5.1M=\'2E://s-t-2F-2G-2H.2I.2J/2K/2L/2M/\'+\'2N/m\';7.5.1O=\'2O\';7.5.T=4(b,c){9(4(a){D(1h 2P a.5){3.5[1h]=a.5[1h]}9 3}).2Q(b,[c])};7.5.1U=4(){3.1V(B)};7.5.2R=4(){};7.5.1W=4(){};7.5.1Q=4(){D(6 i=0,W;W=3.1K[i];i++){3.E.v({1i:3.1L+(i+1)+\'.\'+3.1N,I:W,X:W})}};7.5.2S=4(a){3.E=a};7.5.1j=4(){9 3.E};7.5.1X=4(){9 3.1P};7.5.2T=4(){9 3.k};7.5.2U=4(){9 3.k};7.5.2V=4(a){3.1d=a};7.5.1Y=4(){9 3.1d||3.l.1R[3.l.1S()].1e};7.5.1k=4(a,b){6 c=0;6 d=a.G;6 e=d;2W(e!==0){e=1l(e/10,10);c++}c=1m.1Z(c,b);9{M:d,1n:c}};7.5.2X=4(a){3.1k=a};7.5.20=4(){9 3.1k};7.5.1T=4(a,b){D(6 i=0,o;o=a[i];i++){3.1o(o)}8(!b){3.L()}};7.5.1o=4(a){a.N(p);a.C(u);a.Y=p;8(a[\'2Y\']){6 b=3;s.t.U.1g(a,\'2Z\',4(){a.Y=p;b.V();b.L()})}3.k.v(a)};7.5.15=4(a,b){3.1o(a);8(!b){3.L()}};7.5.30=4(a){6 b=-1;8(3.k.16){b=3.k.16(a)}J{D(6 i=0,m;m=3.k[i];i++){8(m==a){b=i;31}}}8(b==-1){9 p}3.k.32(b,1);a.N(p);a.C(u);3.V();3.L();9 B};7.5.1V=4(a){8(!3.13){3.13=a;3.1p()}};7.5.33=4(){9 3.K.G};7.5.17=4(){9 3.l};7.5.C=4(a){3.l=a};7.5.1q=4(){9 3.F};7.5.34=4(a){3.F=a};7.5.1r=4(a){6 b=3.21();6 c=O s.t.22(a.1s().23(),a.1s().24());6 d=O s.t.22(a.1t().23(),a.1t().24());6 e=b.1u(c);e.x+=3.F;e.y-=3.F;6 f=b.1u(d);f.x-=3.F;f.y+=3.F;6 g=b.25(e);6 h=b.25(f);a.T(g);a.T(h);9 a};7.5.26=4(a,b){9 b.27(a.1v())};7.5.35=4(){3.V();3.k=[]};7.5.V=4(){D(6 i=0,1w;1w=3.K[i];i++){1w.18()}D(6 i=0,o;o=3.k[i];i++){o.Y=p;o.C(u);o.N(p)}3.K=[]};7.5.L=4(){3.1p()};7.5.1p=4(){8(!3.13){9}6 a=O s.t.28(3.l.19().1t(),3.l.19().1s());6 b=3.1r(a);D(6 i=0,o;o=3.k[i];i++){6 c=p;8(!o.Y&&3.26(o,b)){D(6 j=0,d;d=3.K[j];j++){8(!c&&d.1x()&&d.29(o)){c=B;d.15(o);36}}8(!c){6 d=O w(3);d.15(o);3.K.v(d)}}}};4 w(a){3.P=a;3.l=a.17();3.F=a.1q();3.z=u;3.k=[];3.1a=u;3.Q=O q(3,a.1j(),a.1q())}w.5.2a=4(a){8(3.k.16){9 3.k.16(a)!=-1}J{D(6 i=0,m;m=3.k[i];i++){8(m==a){9 B}}}9 p};w.5.15=4(a){8(3.2a(a)){9 p}8(!3.z){3.z=a.1v();3.1y()}8(3.k.G==0){a.C(3.l);a.N(B)}J 8(3.k.G==1){3.k[0].C(u);3.k[0].N(p)}a.Y=B;3.k.v(a);3.2b();9 B};w.5.1z=4(){9 3.P};w.5.19=4(){3.1y();9 3.1a};w.5.18=4(){3.Q.18();37 3.k};w.5.1x=4(){9 3.z};w.5.1y=4(){6 a=O s.t.28(3.z,3.z);3.1a=3.P.1r(a)};w.5.29=4(a){9 3.1a.27(a.1v())};w.5.17=4(){9 3.l};w.5.2b=4(){6 a=3.l.14();6 b=3.P.1Y();8(a>b){D(6 i=0,o;o=3.k[i];i++){o.C(3.l);o.N(B)}9}8(3.k.G<2){3.Q.1A();9}6 c=3.P.1j().G;6 d=3.P.20()(3.k,c);3.Q.2c(3.z);3.Q.2d(d);3.Q.2e()};4 q(a,b,c){a.1z().T(q,s.t.1J);3.E=b;3.38=c||0;3.Z=a;3.z=u;3.l=a.17();3.n=u;3.1b=u;3.12=p;3.C(3.l)}q.5.2f=4(){6 a=3.Z.1z();s.t.U.39(a,\'3a\',[3.Z]);8(a.1X()){3.l.3b(3.Z.1x());3.l.3c(3.Z.19())}};q.5.1U=4(){3.n=2g.3d(\'3e\');8(3.12){6 a=3.1c(3.z);3.n.R.2h=3.1B(a);3.n.2i=3.1b.M}6 b=3.3f();b.3g.3h(3.n);6 c=3;s.t.U.3i(3.n,\'3j\',4(){c.2f()})};q.5.1c=4(a){6 b=3.21().1u(a);b.x-=1l(3.S/2,10);b.y-=1l(3.H/2,10);9 b};q.5.1W=4(){8(3.12){6 a=3.1c(3.z);3.n.R.1C=a.y+\'r\';3.n.R.1D=a.x+\'r\'}};q.5.1A=4(){8(3.n){3.n.R.2j=\'3k\'}3.12=p};q.5.2e=4(){8(3.n){6 a=3.1c(3.z);3.n.R.2h=3.1B(a);3.n.R.2j=\'\'}3.12=B};q.5.18=4(){3.C(u)};q.5.3l=4(){8(3.n&&3.n.2k){3.1A();3.n.2k.3m(3.n);3.n=u}};q.5.2d=4(a){3.1b=a;3.3n=a.M;3.3o=a.1n;8(3.n){3.n.2i=a.M}3.2l()};q.5.2l=4(){6 a=1m.3p(0,3.1b.1n-1);a=1m.1Z(3.E.G-1,a);6 b=3.E[a];3.1E=b.1i;3.H=b.I;3.S=b.X;3.1F=b.3q;3.3r=b.3s;3.1G=b.3t};q.5.2c=4(a){3.z=a};q.5.1B=4(a){6 b=[];8(2g.3u){b.v(\'3v:3w:3x.3y.3z(\'+\'3A=3B,3C="\'+3.1E+\'");\')}J{b.v(\'3D:1i(\'+3.1E+\');\')}8(1H 3.A===\'3E\'){8(1H 3.A[0]===\'2m\'&&3.A[0]>0&&3.A[0]<3.H){b.v(\'I:\'+(3.H-3.A[0])+\'r; 2n-1C:\'+3.A[0]+\'r;\')}J{b.v(\'I:\'+3.H+\'r; 2o-I:\'+3.H+\'r;\')}8(1H 3.A[1]===\'2m\'&&3.A[1]>0&&3.A[1]<3.S){b.v(\'X:\'+(3.S-3.A[1])+\'r; 2n-1D:\'+3.A[1]+\'r;\')}J{b.v(\'X:\'+3.S+\'r; M-2p:2q;\')}}J{b.v(\'I:\'+3.H+\'r; 2o-I:\'+3.H+\'r; X:\'+3.S+\'r; M-2p:2q;\')}6 c=3.1F?3.1F:\'3F\';6 d=3.1G?3.1G:11;b.v(\'3G:3H; 1C:\'+a.y+\'r; 1D:\'+a.x+\'r; 3I:\'+c+\'; 3J:3K; 1I-W:\'+d+\'r; 1I-3L:3M,3N-3O; 1I-3P:3Q\');9 b.3R(\'\')};',62,240,'|||this|function|prototype|var|MarkerClusterer|if|return|||||||||||markers_|map_||div_|marker|false|ClusterIcon|px|google|maps|null|push|Cluster|||center_|anchor_|true|setMap|for|styles_|gridSize_|length|height_|height|else|clusters_|redraw|text|setVisible|new|markerClusterer_|clusterIcon_|style|width_|extend|event|resetViewport|size|width|isAdded|cluster_|||visible_|ready_|getZoom|addMarker|indexOf|getMap|remove|getBounds|bounds_|sums_|getPosFromLatLng_|maxZoom_|maxZoom|prevZoom_|addListener|property|url|getStyles|calculator_|parseInt|Math|index|pushMarkerTo_|createClusters_|getGridSize|getExtendedBounds|getNorthEast|getSouthWest|fromLatLngToDivPixel|getPosition|cluster|getCenter|calculateBounds_|getMarkerClusterer|hide|createCss|top|left|url_|textColor_|textSize_|typeof|font|OverlayView|sizes|imagePath_|MARKER_CLUSTER_IMAGE_PATH_|imageExtension_|MARKER_CLUSTER_IMAGE_EXTENSION_|zoomOnClick_|setupStyles_|mapTypes|getMapTypeId|addMarkers|onAdd|setReady_|draw|isZoomOnClick|getMaxZoom|min|getCalculator|getProjection|LatLng|lat|lng|fromDivPixelToLatLng|isMarkerInBounds_|contains|LatLngBounds|isMarkerInClusterBounds|isMarkerAlreadyAdded|updateIcon|setCenter|setSums|show|triggerClusterClick|document|cssText|innerHTML|display|parentNode|useStyle|number|padding|line|align|center|53|56|66|78|90|gridSize|60|styles|imagePath|imageExtension|zoomOnClick|zoom_changed|bounds_changed|http|utility|library|v3|googlecode|com|svn|trunk|markerclusterer|images|png|in|apply|idle|setStyles|getMarkers|getTotalMarkers|setMaxZoom|while|setCalculator|draggable|dragend|removeMarker|continue|splice|getTotalClusters|setGridSize|clearMarkers|break|delete|padding_|trigger|clusterclick|panTo|fitBounds|createElement|DIV|getPanes|overlayImage|appendChild|addDomListener|click|none|onRemove|removeChild|text_|index_|max|opt_textColor|anchor_|opt_anchor|opt_textSize|all|filter|progid|DXImageTransform|Microsoft|AlphaImageLoader|sizingMethod|scale|src|background|object|black|cursor|pointer|color|position|absolute|family|Arial|sans|serif|weight|bold|join'.split('|'),0,{}))


//http://koti.mbnet.fi/ojalesa/boundsbox/tiptool.js NB 2 modificaties ARJAN
var TIPTOOL_VERSION="0.1";function TipTool(map,point,opt_options){this.opts=opt_options||{};this.point=point;this.setMap(map);this.map=map;};TipTool.prototype=new google.maps.OverlayView();TipTool.prototype.onAdd=function(){this.div_=document.createElement('div');this.div_.style.position="absolute";this.div_.style.overflow="hidden";this.zIndex=this.opts.zIndex||0;this.div_.className=this.opts.cssClass||this.opts.className||'tiptool';this.div_.innerHTML=this.opts.html||"";google.maps.event.addDomListener(this.div_,"click",function(event){google.maps.event.trigger(me,"click",event);});var panes=this.getPanes();var paneId=this.opts.pane||"floatPane";panes[paneId].appendChild(this.div_);}
//this.opacity=this.opts.opacity*1||1;this.div_.style.filter='alpha(opacity:'+this.opacity*100+')';this.div_.style.opacity=this.opacity;
TipTool.prototype.draw=function(){var pixPoint=this.getProjection().fromLatLngToDivPixel(this.point);this.div_.style.left=pixPoint.x+'px';this.div_.style.top=pixPoint.y+'px';var SEx=pixPoint.x+this.div_.offsetWidth;var SEy=pixPoint.y+this.div_.offsetHeight;var pixSE=new google.maps.Point(SEx,SEy);this.opts.SE=this.getProjection().fromDivPixelToLatLng(pixSE);this.opts.point=this.point;};TipTool.prototype.setPosition=function(pint){if(!this.div_)return false;this.point=pint;this.draw();return true};TipTool.prototype.onRemove=function(){if(!this.div_)return false;this.div_.parentNode.removeChild(this.div_);this.div_=null;return true;};TipTool.prototype.hide=function(){if(!this.div_)return false;this.div_.style.display="none";return true;};TipTool.prototype.show=function(){if(!this.div_)return false;this.div_.style.display="block";return true;};TipTool.prototype.setContent=function(html){if(!this.div_)return false;this.div_.innerHTML=html;return true;};TipTool.prototype.props=function(options){var opts=options||{};for(var prop in opts){this.opts[prop]=opts[prop];}
return this.opts;};TipTool.prototype.getPosition=function(){if(!this.div_)return null;return this.bounds_.getCenter();};TipTool.prototype.isVisible=function(){var bounds=this.map.getBounds();var visible=(bounds.contains(this.opts.point)&&bounds.contains(this.opts.SE));return visible;};TipTool.prototype.bringVisible=function(){if(this.isVisible()){this.map.setCenter(this.map.getCenter());}else{this.map.panTo(this.opts.point);}};google.maps.Marker.prototype.attachTipTool=function(html,opt_options){
//var map_=this.getMap();
var map_=map; //ARJAN
var position=this.getPosition();map_.tiptool_=map_.tiptool_||new TipTool(map_,position,opt_options);google.maps.event.addListener(this,'mouseover',function(){map_.tiptool_.setPosition(position);map_.tiptool_.setContent(html);
if (!isPopup){map_.tiptool_.show();} //ARJAN	
clearTimeout(map_.tiptool_.timer);});google.maps.event.addListener(this,'mouseout',function(){clearTimeout(map_.tiptool_.timer);map_.tiptool_.timer=setTimeout(function(){map_.tiptool_.hide();},200);});}
google.maps.Map.prototype.accessTipTool=function(){}
google.maps.Marker.prototype.attachInfoWindow=function(options){var map_=this.getMap();map_.bubble_=map_.bubble_||new google.maps.InfoWindow();google.maps.event.addListener(this,'click',function(){map_.bubble_.setOptions(options);map_.bubble_.open(map_,this);});map_.infoWindowClickShutter=map_.infoWindowClickShutter||google.maps.event.addListener(map_,'click',function(){map_.bubble_.close();});}
google.maps.Map.prototype.accessInfoWindow=function(){this.bubble_=this.bubble_||new google.maps.InfoWindow();return this.bubble_;}
