window.addEvent('domready', function() {
	if($('search_form')) {
		var search_dropdown_fields = {
			fields:	[
				{
					name:								"countries",
					description:				"(alle landen)",
					empty_description:	"(geen landen)",
					checked:						false,
					values:							{}
				},
				{
					name:								"months",
					description:				"(alle maanden)",
					empty_description:	"(geen maanden)",
					checked:						false,
					values:							{
																	1:	"Januari",
																	2:	"Februari",
																	3:	"Maart",
																	4:	"April",
																	5:	"Mei",
																	6:	"Juni",
																	7:	"Juli",
																	8:	"Augustus",
																	9:	"September",
																	10: "Oktober",
																	11:	"November",
																	12:	"December"
																}
				},
				{
					name:								"categories",
					description:				"(alle categorieën)",
					empty_description:	"(geen categorieën)",
					checked:						false,
					values:							{
																	1:	"Yoga",
																	2:	"Wellness",
																	3:	"Nature & Spirit",
																	4:	"Workshops"//,
// 																	5:	"Business"
																}
				},
				{
					name:								"options",
					description:				"(specifieke wensen)",
					empty_description:	"(geen specifieke wensen)",
					checked:						false,
					values:							{
																	6:	"Kinderen welkom",
																	7:	"Massages beschikbaar",
																	8:	"Alle niveaus welkom",
																	9:	"Uitsluitend vegetarisch",
																	10:	"Nederlandstalig",
																	11:	"Zwembad aanwezig",
																	12:	"Dicht bij zee",
																	13:	"Spa of sauna aanwezig"
																}
				}
			]
		};

		Array.each(search_dropdown_fields.fields, function(field, idx){
			// Dropdown close handler
			var close_handler = function(button) {
				var field_text = '';
				var first = true;
				var all = field.checked;
				Array.each(button.getParent().getChildren('input'), function(checkbox) {
					if(checkbox.getProperty('checked')){
						if(!first) {
							field_text += ', ';
						}
						field_text += checkbox.getNext('label').get('text');
						first = false;
					} else {
						all = false;
					}
				});
				// $('search_'+field.name).getChildren('div')[0].removeClass('error')
				if(all) {
					field_text = field.description;
				} else if(!field_text) {
					field_text = field.empty_description;
					// if(field.checked)
					// 	$('search_'+field.name).getChildren('div')[0].addClass('error');
				}
				$('search_'+field.name).getChildren('div')[0].set('text', field_text);
				button.getParent().fade('out');
			};
			
			// Checkbox injector
			var inject_checkboxes = function(field, div_details) {
				// Inject checkboxes
				Object.each(field.values, function(name, key){
					// Checkboxes
					new Element('input', {
						type:			'checkbox',
						name:			field.name,
						value:		key,
						id:				'search_'+field.name+'_'+key,
						checked:	field.checked
					}).inject(div_details);
					
					// Labels
					new Element('label', {
						'for':			'search_'+field.name+'_'+key,
						text:			name
					}).inject(div_details);
					
					new Element('br').inject(div_details);
				});
			};

			// Close button injector
			var inject_closebutton = function(div_details) {
				// Close button
				var a_close = new Element('a', {
					'class':	'close',
					text:			'Sluiten',
					events:		{
						click:	function() {
							close_handler(this);
						}
					}
				});
				a_close.inject(div_details);
			};

			// Show extra form dropdown
			var div_dropdown = new Element('div', {
				id:				'search_'+field.name,
				'class':	'search_dropdown'
			}).grab(new Element('div', {
				text:			field.description
			}));
			
			div_dropdown.inject($('submit_go'), 'before');

			// Dropdown div
			var div_details = new Element('div', {
				id:				'search_details_'+field.name,
				'class':	'search_dropdown_details'
			}).setStyle('z-index', 50-idx);
			
			// Close button
			var a_close = new Element('a', {
				'class':	'close',
				events:		{
					click:	function() {
						close_handler(this);
					}
				}
			}).grab(new Element('img', {
				src:			'/visuals/general/close.png',
				alt:			'close'
			}).setStyle('margin-top', 5));
			a_close.inject(div_details);

			// Select/Deselect all
			var div_select_all = new Element('div', {
				'class':	'select_all'
			});
		
			var a_select_all = new Element('a', {
				text:			'Alles selecteren',
				events:		{
					click:	function() {
						Array.each(this.getParent().getParent().getChildren('input'), function(checkbox) {
							checkbox.set('checked', 'checked')
						});
					}
				}
			});
			var a_deselect_all = new Element('a', {
				text:			'Alles de-selecteren',
				events:		{
					click:	function() {
						Array.each(this.getParent().getParent().getChildren('input'), function(checkbox) {
							checkbox.set('checked', '')
						});
					}
				}
			});
			
			a_select_all.inject(div_select_all);
			new Element('br').inject(div_select_all);
			a_deselect_all.inject(div_select_all);
			new Element('br').inject(div_select_all);
			
			div_select_all.inject(div_details);
			new Element('div', {
				'class':		'clear'
			}).inject(div_details);
			
			// Hide & inject details section
			div_details.fade('hide');
			div_details.inject($('submit_go'), 'before');
			
			// Add onclick handler
			$('search_'+field.name).addEvent('click', function(){
				if(div_details.getElements('a.close').length < 2) {
					if(Object.getLength(field.values) == 0) {
						// Populate field values through AJAX
						new Element('img', {
							id:				'loader_'+field.name,
							'class':	'dropdown_loader',
							src:			'/visuals/general/loader.gif',
							alt:			'loading'
						}).inject(div_details);
						new Element('span', {
							id:				'loader_text_'+field.name,
							text:			'De gegevens worden geladen...'
						}).inject(div_details);
						var JSONRequest = new Request.JSON({url: '/cgi-bin/search_values.pl', onSuccess: function(responseJSON){
							field.values = responseJSON;
							$('loader_'+field.name).dispose();
							$('loader_text_'+field.name).dispose();
							inject_checkboxes(field, div_details);
							inject_closebutton(div_details);
						}}).get({'type': field.name});
					} else {
						// Populate field values
						inject_checkboxes(field, div_details);
						inject_closebutton(div_details);
					}
				}
				$('search_details_'+field.name).fade('in');
			});
		});
		
		var label = "zoek";
		$('query').set('value', '');
		
		$('query').addEvents({
			'focus': function(){
				if (this.get('value').clean() == label) this.set('value', '');
			},
			'blur': function(){
				if (this.get('value').clean() == '' || this.get('value').clean() == label) this.set('value', label);
			}
		}).fireEvent('blur');
		
		$('searchform').addEvent('submit', function(){
			var searchstring = $('query').get('value');
			if (searchstring == label || searchstring == '')
				$('query').set('value', '');
		});
	}

	if($('location_photo_slider_frame')) {
		// Enlarge photos
		Array.each($$('#location_photo_slider_content a'), function(thumb){
			thumb.addEvent('click', function() {
				var thumb_filename = this.getChildren('img')[0].getProperty('src').split('/').pop();
				var new_src = $('location_large_photo').getProperty('src').split('/');
				new_src.pop();
				new_src.push(thumb_filename);
				$('location_large_photo').setProperty('src', new_src.join('/'));
				return false;
			}.bind(thumb));
		});
		
		// Store amount of images
		$('location_photo_slider_content').store('images_total', $$('#location_photo_slider_content a').length);
		$('location_photo_slider_content').store('images_idx', 0);
		
		// Determine width of slider_content
		var total_width = 0;
		Array.each($$('#location_photo_slider_content a img'), function(image){
			total_width += image.getSize().x;
		});
		$('location_photo_slider_content').setStyle('width', total_width);
	
		// Create slide buttons incl. scrolling behaviour
		var scroll = new Fx.Tween($('location_photo_slider_content'), {link: 'ignore'});
		var slider_button_left = new Element('div', {
			id: 'slider_button_left',
			events: {
				click: function() {
					// Store new images_idx
					if($('location_photo_slider_content').retrieve('images_idx') > 0)
						$('location_photo_slider_content').store('images_idx', $('location_photo_slider_content').retrieve('images_idx') - 1);
				
					var image_idx = $('location_photo_slider_content').retrieve('images_idx');

					var source = $('location_photo_slider_content').getStyle('margin-left').toInt();
					var target = image_idx * -55;
					if(target <= -(total_width-280))
						target = -(total_width-280);
					
					// Show large photo
					var thumb = $$('#location_photo_slider_content a')[image_idx];
					var thumb_filename = thumb.getChildren('img')[0].getProperty('src').split('/').pop();
					var new_src = $('location_large_photo').getProperty('src').split('/');
					new_src.pop();
					new_src.push(thumb_filename);
					$('location_large_photo').setProperty('src', new_src.join('/'));
					
					display_buttons(target);
					scroll.start('margin-left', source, target);
				}
			}
		}).grab(new Element('span', {
			'class':	'opacity',
			text:			'<'
		}));
		var slider_button_right = new Element('div', {
			id: 'slider_button_right',
			events: {
				click: function() {
					// Store new images_idx
					if($('location_photo_slider_content').retrieve('images_idx') < $('location_photo_slider_content').retrieve('images_total') - 1)
						$('location_photo_slider_content').store('images_idx', $('location_photo_slider_content').retrieve('images_idx') + 1);
				
					var image_idx = $('location_photo_slider_content').retrieve('images_idx');

					var source = $('location_photo_slider_content').getStyle('margin-left').toInt();
					var target = image_idx * -55;
					if(target <= -(total_width-280))
						target = -(total_width-280);
						
					// Show large photo
					var thumb = $$('#location_photo_slider_content a')[image_idx];
					var thumb_filename = thumb.getChildren('img')[0].getProperty('src').split('/').pop();
					var new_src = $('location_large_photo').getProperty('src').split('/');
					new_src.pop();
					new_src.push(thumb_filename);
					$('location_large_photo').setProperty('src', new_src.join('/'));

					display_buttons(target);
					scroll.start('margin-left', source, target);
				}
			}
		}).grab(new Element('span', {
			'class':	'opacity',
			text:			'>'
		}));	
		
		// Hide left slide button
		if(total_width < 280)
			slider_button_right.fade('hide');
		slider_button_left.fade('hide');
		
		// Inject slide buttons
		slider_button_left.inject($('location_photo_slider_frame'));
		slider_button_right.inject($('location_photo_slider_frame'));
	}
	
	// Function: Display buttons
	var display_buttons = function(target) {
		if($('location_photo_slider_content').retrieve('images_idx') <= 0)
			slider_button_left.fade('out');
		else
			slider_button_left.fade('in');
			
		if($('location_photo_slider_content').retrieve('images_idx') >= $('location_photo_slider_content').retrieve('images_total') - 1)
			slider_button_right.fade('out');
		else
			slider_button_right.fade('in');
	}
});

Cufon.replace('#sidebar h2');

function load_map() {
	var script = document.createElement("script");
	script.type = "text/javascript";
	script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=initialize_map";
	document.body.appendChild(script);
}

var geocoder;
function setAddress(map, address) {
	geocoder.geocode( { 'address': address}, function(results, status) {
		if (status == google.maps.GeocoderStatus.OK) {
			map.setCenter(results[0].geometry.location);
			var marker = new google.maps.Marker({
				map: map, 
				position: results[0].geometry.location
			});
		}
	});
}

