
	$(document).ready(function(){
		
		// [all] GA code voor links met target="_blank"
		$('a[target="_blank"]').click( function () {
			if(_gaq) {
				url = $(this).attr('href');
				_gaq.push(['_trackPageview','/externelink/'+url]);
			}
		});

		/*
		 * Voorstel formulier
		 */

		$(function(){
		
			$.datepicker.regional.nl = {
				closeText: 'Sluiten',
				prevText: '←',
				nextText: '→',
				currentText: 'Vandaag',
				monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
				'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
				monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun',
				'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
				dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
				dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
				dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
				weekHeader: 'Wk',
				dateFormat: 'dd/mm/yy',
				firstDay: 1,
				isRTL: false,
				showMonthAfterYear: false,
				yearSuffix: ''
			};
			
			$.datepicker.setDefaults($.datepicker.regional.nl);
			
			var dates = $('.datepicker').datepicker({
				dateFormat: 'dd-mm-yy',
				defaultDate: "+1w",
				changeMonth: true,
				numberOfMonths: 1
			});
			
			$('.datebutton').click(function() {
				$(this).prev().find('input').datepicker('show');
			});
			
			$('#frm-voorstel .add-file').click(function() {
				$clone = $(this).closest('.files').find('.file:last').clone(true);
				$(this).closest('.files').find('.file:first').after($clone);
				$clone.find('.del-file').show();
				return false;
			});
			
			$('#frm-voorstel .del-file').click(function() {
				$(this).parent('.file,.upload').remove();
				return false;
			});
			
			$('#frm-voorstel input.commisionable').click(function() {
				if ($(this).hasClass('yes')) {
					$(this).parent().parent().find('label span').show();
					$('#frm-voorstel #commisionable').show();
				} else {
					$(this).parent().parent().find('label span').hide();
					$('#frm-voorstel #commisionable').hide();
				}
			});
			
			$('#frm-voorstel input.flexible').click(function() {
				if ($(this).hasClass('yes')) {
					$('#frm-voorstel #flexible').show();
				} else {
					$('#frm-voorstel #flexible').hide();
				}
			});
			
			$('#frm-voorstel .labelgroup label').change(function(e) {
				e.preventDefault();
				var $checkbox = $(this).find(':checkbox');
				// check all childs
				$(this).closest('li').find('ul input').attr('checked', $checkbox.attr('checked'));
				// check/uncheck parent
				if ( $checkbox.closest('li').siblings().find(':checkbox:checked').length == 0 ) {
					$(this).closest('ul').prevAll().find('input').attr('checked', $checkbox.attr('checked'));
				}
			});
			
		});

		

		
		// [homepage] reset locatiekiezer bij pageload
		$('#choose_location select option:first').attr('selected', 'selected');
		
		
		// [homepage, location] activeer carousels
		Carousel.init('#carousel');
		Carousel.init('#location .album');
		
	
		// [locations] activeer de locatie zoeker
		locationSearch.init();
		
		
		// video player
		if ($("#player").length) {
			flowplayer("player", "/swf/flowplayer.unlimited-3.2.5.swf", {
				key: ['1189e7090c02ba922c9','fa0eb72fdb4401647c3','73f9dc972cbe4d792cc'],
				canvas: {
					background: '#000000',
					backgroundGradient: 'none'
				},
				clip : {
					autoPlay: true,
					accelerated: true,
					scaling: 'fit',
					url: 'api:'+ $("#player").attr('class'),
					provider: 'youtube',
					urlResolvers: 'youtube'
				},
				plugins: {
					controls: { url: "/swf/flowplayer.controls-netvlies.swf" },
			 		youtube: { url: "/swf/flowplayer.youtube-3.2.1.swf" }
				},
				play: {	url: '/img/play.png', width: 87, height: 73 }
			});
		}
		
		
		// [location] print button
		$('#location .social .print').click(function() {
			window.print();
			return false;
		});
		
		// maak grotere clickarea's
		$('#home-portals li, .cta:not(.logo, .var5), #carousel .about, #location-related .location').click(function() {
			url = $(this).find('a:first').attr('href');
			document.location = url;
			return false;
		}).addClass('clickme');
		
		// [homepage] maak de blokken onder de fold van gelijke hoogte
		$('.home-highlight.stretchme1 .wrapper').setAllToMaxHeight();
		$('.home-highlight.stretchme2 .wrapper').setAllToMaxHeight();
		
		// [news] stretch de eerste 2 nieuws items
		$('.item.top').setAllToMaxHeight();
		
		// [homepage] toon aantal resultaten bij het aanpassen van de locatie kiezen
		$('#choose_location select').change(function() {
			$frm = $(this).closest('form');
			$.get('/ajax/aantal_locaties.php', $(this).closest('form').serialize(), function(data) {
				val = $frm.find('input[type=submit]').val();
				val = val.replace(/([0-9]+)/, data.number);
				$frm.find('.button span.value').text(val);
			}, 'json');
		});
		
		// [homepage] nieuwsbrief aanmelden blokje
		$('#frm_newsletter, #location-staf').find('form').submit(function() {
		
			var $form = $(this);
			var formData = $form.serialize();
			var url = $form.find('input[name=url]').val();
			
			$.ajax({ 
				type: 'POST',
				url: url,
				data: formData,
				dataType: 'json',
				success: function(data) {
				
					if (data.success == 'true') {
						$form.hide().parent().find('.thankyou').show();
						
						$form.parent().find('.again').click(function() {
							$form.show().parent().find('.thankyou').hide();
							$form.find('li').removeClass('error');
							$form.find('input.text').val('');
							$form.find('input.text').focus().blur();
							return false;
						});
						
						if(typeof(_gaq) != 'undefined' ) {
							if($form.find('input[name="type"]').length > 0) {
								gaqStr = $form.find('input[name="gaq"]').val();
								if (gaqStr.indexOf("?") !== -1 ) {
									 gaqStr += "&";
								} else {
									 gaqStr += "?";
								}
								gaqStr += "type="+$form.find('input[name="type"]:checked').val()+"&success=true";
							} else {
								gaqStr = $form.find('input[name="gaq"]').val();
							}
							
							_gaq.push(['_trackPageview',gaqStr]);
						}
						
					} else {
						$form.find('.msg').text(data.msg).show();
						$form.find('li').addClass('error');
					}
					
					$('.home-highlight.stretchme2 .wrapper').setAllToMaxHeight();
				}
			});
			
			return false;
		});
		
		// [location-detail] verberg het locatie doorsturen blok en toon bij klik
		$('#location-staf.hide').closest('.cta').hide(1, function() {
			$obj = $(this);
			$('#location-contact .staf').click(function() {
				$obj.toggle();
				return false;
			});		
		});
		
		// [locations] toon video of fotocarousel
		if($('#location .album .photos').length > 0 && $('#location .album .video').length > 0) {
			$('#location .album .nav').show();
		}
		if($('#location .album .photos').length < 1 && $('#location .album .video').length > 0) {
			$('#location .album').find('.video').show();
		}
		
		$('#location .album .nav li').click(function() {
			obj = $(this).find('a').attr('rel');
			$(this).addClass('active').siblings().removeClass('active');
			$('#location .album').find('.photos,.video').hide();
			$('#location .album').find('.'+obj).show();
			return false;
		});
		
		// [locations ] foto lightbox
		if ($('#location .thumbs').length) {
			$('#location .thumbs a').fancybox();
		}
		
		// vervang standaard buttons met een gepimpte buttons
		$('.fancy-button').each(function() {
			$(this).find('.submit').hide();
			$value = $(this).find('input[type=submit]').val();
			$(this).find('.button').show().click(function() {
				$(this).closest('form').submit();
				return false;
			}).find('.value').text($value);
		});
		
		// autocomplete
		$("#suggest, #search-options input").autocomplete({
			source: "/ajax/autocomplete.php",
			minLength: 2
		});
		
		// markeer locatie als favoriet
		$('.actions .favorite, #location .social .favorite').live('click', function() {
			var $obj = $(this);
			var locationId = $(this).attr('data-location');
			
			$.get('/ajax/favorite.php', locationId, function(data) {
				(data.mark == 1) ? $obj.addClass('marked') : $obj.removeClass('marked');
				$('#mijnlocaties').text(data.number);
			}, 'json');
			
			return false;
		});
		
		// plaats google maps
		if ($('#gmap').length) {
			$('#gmap').addClass('js');
			gmap($('#gmap').attr('data-latlng'), $('#location-address').html());
		}
		
		// vooraf ingevulde input fields leegmaken bij focus
		// en eventueel beginwaarde terugzetten bij blur
		$('form:not(.empty)').find("input[value!=][type=text]:not(.post),textarea:not(.post)")
		.focus(function () { 
			if(!$(this).attr("startvalue")) {  
				$(this).attr("startvalue", $(this).val());
			} 
			if($(this).val() == $(this).attr("startvalue")) {
				$(this).val('');	
			}
		}).blur(function () { 
			if($(this).val() == '') {
				$(this).val($(this).attr("startvalue"));
			}
		});

	});

	/*
	 * Google Maps
	 */

	function gmap(point, infowindowcontent)
	{
		point = point.split(',');
	
		var latlng = new google.maps.LatLng(point[0], point[1]);
		
		var myOptions = {
			zoom: 12,
			center: latlng,
			mapTypeId: google.maps.MapTypeId.ROADMAP,
			streetViewControl: true,
			scrollwheel: false
		};
		
		var map = new google.maps.Map(document.getElementById("gmap"), myOptions);
	        
	    var infowindow = new google.maps.InfoWindow({
	        content: '<div id="gmap-content">'+
	        '<h4>'+$('h1').text()+'</h4>'+
	        infowindowcontent+
	        '</div>'
	    });
		
		var marker = new google.maps.Marker({
	        position: latlng, 
	        map: map
	    });   

		google.maps.event.addListener(marker, 'click', function() {
			infowindow.open(map,marker);
		});
	}
	
	/*
	 * Carousel
	 */
	
	var Carousel =  {
	
		init: function(obj) {	
			
			if ($(obj).length == 0) return false;
		
			var images = []
			$(obj).find('.overview img').each(function() {
				images.push($(this).attr('src'));
			});

			if (images.length <= 1) return false;

			$.loadImages(images, Carousel.activate(obj));
		},
		
		activate: function(obj) {
			if ($(obj).length) {
				$(obj).tinycarousel({
					pager: true,
					controls: false,
					interval: true,
					intervaltime: 6000,
					duration: 1000,
					callback: function(element, index, options) {
						$(element).find('.fill').css({ left: -450 }).stop().animate({
							left: 0
						}, (options.intervaltime-options.duration), function() {
							$(this).delay(options.duration).show(1, function() {
								$(this).css({ left: -450 });
							});
						});
					}
				});
			}
		}		
	}
	
	/*
	 * Image preloader
	 */

    // cache nodig voor aggresieve garbage collectors
    var cache = [];
    
    // images kan een array zijn, een pad naar images of één image
    $.loadImages = function(images, callback) {	    
    
        // maak een array waar nodig
        if (!(images instanceof Array)) {
            images = [images];
        }
        
        var imagesLength = images.length;
        var loadedCounter = 0;
        
        for (var i = imagesLength; i--;) {
			var cacheImage = document.createElement('img');
			
			// onload voor het zetten van de image src ander gaat IE op z'n bek
            cacheImage.onload = function(){
                loadedCounter++;
                if (loadedCounter >= imagesLength) {
                    if ($.isFunction(callback)) {
                        callback();
                    }
                }
            }
            cacheImage.src = images[i];
            cache.push(cacheImage);
        }
    }
    
    /*
     * Location search
     */
	
	var locationSearch = {
	
		init: function() {
			this.initInputs();
			this.initSliders();
		},
		
		initInputs: function() {
			var _this = this;			
			var $obj = $('#location-search');
			
			// Verberg de submit button
			$obj.find('input.submit').hide();
			
			// Toon alleen de eerste 3 checkboxes en verberg de rest
			/*
			$obj.find('fieldset:not(.type,.showall)').each(function() {			
				var list = $(this).find('li:gt(2)').hide();	
							
				if (list.length > 0) {
					$(this).find('.more').show().click(function() {
						$(this).toggleClass('less').find('u,b').toggle();
						list.toggle();
						return false;
					});
				}				
			});
			*/
			
			// toon sub checkboxes on page load wanneer parent is checked
			$obj.find('fieldset.type input[type=checkbox]:checked').closest('li').find('ul').show();
			
			$obj.find('fieldset.type input[type=checkbox]').click(function() {
				$(this).closest('li').siblings().find('ul').hide().find('input:checkbox').attr('checked', '');
				$(this).closest('li').find('ul').toggle();
				$(this).closest('li.root').siblings().find('input:checkbox').attr('checked', '');
			});

			// Haal resultaten op als men op een checkbox klikt
			$obj.find('input[type=checkbox]').click(function() {
				_this.getResults();
			});
			
			// Haal resultaten op als men een select wijzigt
			$obj.find('select').change(function() {
				_this.getResults();
			});
			
			// Haal resultaten op als men de sortering aanpast
			$('#location-sort a').live('click', function() {
				$obj.find('input[name=sort]').val($(this).attr('data-sort'));
				$obj.find('input[name=direction]').val($(this).attr('data-direction'));
				_this.getResults();
				return false;
			});
			
			// Haal de resultaten op als men van paginanummer wisselt
			$('#locations #nav-paging a').live('click', function() {
				$obj.find('input[name=page]').val($(this).attr('data-page'));
				_this.getResults();
				return false;
			});
			
		},
		
		initSliders: function() {
			var _this = this;
		
			// verberg de sliders in eerste instantie
			$('.sliderset').addClass('inactive');
			
			$('.slideit').each(function(index) {
				
				// Begin en eind waardes voor slider ophalen
				var start = $(this).find('.pricerange select.min option:selected').val();
				var end = $(this).find('.pricerange select.max option:selected').val();
				var min = $(this).find('.pricerange select.min option:first').val();
				var max = $(this).find('.pricerange select.max option:last').val();
				var steps =  $(this).find('.pricerange select.min option:eq(1)').val() - min;
				
				// Unieke id creeëren voor slider
				var sliderId = 'slider' + index;
				$(this).find('.slider').attr( 'id', sliderId);
				
				// De begin en eind waardes onder slide plaatsen
				$(this).find('.sliderstart').text(FormatNumberBy3(min, ",", "."));
				$(this).find('.sliderend').text(FormatNumberBy3(max, ",", "."));
				
				// Slider initialiseren (jqueryUI http://jqueryui.com/demos/slider) 
				var slider = $('#'+sliderId).slider({
					range: true,
					min: parseInt(min),
					max: parseInt(max),
					step: steps,
					values: [parseInt(start),parseInt(end)],
					slide:  function(event, ui) {
						// Handles vullen
						$('#'+sliderId+' .ui-slider-handle:first').html(FormatNumberBy3(ui.values[0], ",", "."));
						$('#'+sliderId+' .ui-slider-handle:last').html(FormatNumberBy3(ui.values[1], ",", "."));
					},
					stop: function(event, ui) {
						// Handle waardes in formulier plaatsen (niet tijdens het slide-en ivm performance)
						$('#'+sliderId).closest('.sliderset').find('.pricerange select.min').val(ui.values[0]);
						$('#'+sliderId).closest('.sliderset').find('.pricerange select.max').val(ui.values[1]);
						
						// ajax
						_this.getResults();
					}
				});
				
				// Slider is geïnitialiseerd
				// Begin en eind waardes in de handles plaatsen
				vals = $('#'+sliderId).slider('values');
				$('#'+sliderId+' .ui-slider-handle:first').html(FormatNumberBy3(vals[0], ",", "."));
				$('#'+sliderId+' .ui-slider-handle:last').html(FormatNumberBy3(vals[1], ",", "."));
				$('#'+sliderId+' .ui-slider-handle:first').addClass('start');
				$('#'+sliderId+' .ui-slider-handle:last').addClass('end');
				
				// Verberg de selects met begin waarden
				$(this).find('.pricerange').hide();
				
				_this.showSliders();
			});
			
			// toon de slider wanneer op de legenda wordt geklikt
			$('.legend').click(function() {
				$(this).parent().toggleClass('inactive');
			});
		},
		
		showSliders: function() {
			var _this = this;

			$('.slider-container, .sliderstart, .sliderend').show();
		},
		
		getResults: function() {
			var _this = this;
			var $obj = $('#location-search');
			
			// toon de loader
			$obj.add('#locations').find('.loader').css({ opacity: 0.85 }).show(1);

			$.get('/ajax/locaties.php', $('#location-search').serialize(), function(data) {
				$('#locations').html(data.html);
				// verberg de loader
				$obj.add('#locations').find('.loader').show().fadeOut(500);
			}, 'json');
		}
	}

	
	function FormatNumberBy3(num, decpoint, sep) {		
		// check for missing parameters and use defaults if so
		if (arguments.length == 2) sep = ",";		
		if (arguments.length == 1) {
			sep = ",";
			decpoint = ".";
		}		
		
		// need a string for operations
		num = num.toString();		
		
		// separate the whole number and the fraction if possible
		a = num.split(decpoint);
		x = a[0]; // decimal
		y = a[1]; // fraction
		z = "";
		
		if (typeof(x) != "undefined") {
			// reverse the digits. regexp works from left to right.
			for (i=x.length-1;i>=0;i--) z += x.charAt(i);				
			// add seperators. but undo the trailing one, if there
			z = z.replace(/(\d{3})/g, "$1" + sep);
			if (z.slice(-sep.length) == sep) z = z.slice(0, -sep.length);
			x = "";				
			// reverse again to get back the number
			for (i=z.length-1;i>=0;i--) x += z.charAt(i);			
			// add the fraction back in, if it was there
			if (typeof(y) != "undefined" && y.length > 0) x += decpoint + y;
		}
		return x;
	}
	
	$.fn.setAllToMaxHeight = function(){
		this.css({ height: 'auto' }); // fix for when height needs to set more than once
		this.css({ height: Math.max.apply(this, $.map(this, function(e) {
			return $(e).height()
		})) });
	}
	
	/**
	 *
	 * YouTube functionaliteit
	 *
	 */	 	 	 	
	
	function onYouTubePlayerReady(playerId) {
		ytplayer = document.getElementById("myytplayer");
		ytplayer.addEventListener("onStateChange", "onytplayerStateChange");
		ytplayer.addEventListener("onError", "onPlayerError");
		var video_id = $('.video').attr('rel');
		ytplayer.cueVideoById(video_id, parseInt(0));
	}
		
	function onytplayerStateChange(newState) {
		setytplayerState(newState);
	}
		
	function onPlayerError(errorCode) {
		alert("An error occured: " + errorCode);
	}
		
	function updateHTML(elmId, value) {
		document.getElementById(elmId).innerHTML = value;
		//ytplayer.playVideo(); // Gebruiken in geval van autoplay
	}
		
	function setytplayerState(newState) {
		updateHTML("playerstate", newState);
	}
