$(document).ready(function() {
	daysOfWeek = [
		'Sonntag',
		'Montag',
		'Dienstag',
		'Mittwoch',
		'Donnerstag',
		'Freitag',
		'Samstag',
		'Sonntag'
	];
	
	// show loading.gif
	if ($('div#loaderdummy').length) {
		var qs = $('div#loaderdummy span').text();
		$.fn.colorbox({
			inline: true,
			href: '#loaderdummy',
			overlayClose: false,
			escKey: false
		});
		$.get('/camper/camper-search-result.php?' + qs, {'ajax': 'true', 'newsearch': '1'}, function(data) {
			$('#content').html(data);
			$('div#loaderdummy span').remove;
			handleVehicledetails();
			$.fn.colorbox.close();
		});
	}
	
	if ($('#searchform').length) {
		handleSearchform();
	}
	
	if ($('#searchformcontainer').length) {
		$('#searchformcontainer').hide();
		$.get('/camper/camper-search.php', {'ajax': 'true'}, function(data) {
			$('#searchformcontainer').html(data);
			handleSearchform();
			$('.nojs').hide();
			handleDatepicker();
			days = 14;
			handleDistanceslider();
			$('#searchformcontainer').show();
			$('#picklocation').bind('change', function() {
				var picklocation = $(this).val();
				$.get('/camper/camper-search.php', {'ajax': 'true', 'getdroplocation': 'true', 'picklocation': picklocation}, function(data) {
					$('#droplocation').html(data);
				});
			});
		});
	}
	
	if ($('.datepicker').length) {
		handleDatepicker();
	}
	
	if ($('#slider').length) {
		if ($('#pickdate\\.iso').val() != '' && $('#dropdate\\.iso').val() != '') {
			days = calculateDays($('#pickdate\\.view').val(), $('#dropdate\\.view').val());
		} else {
			days = 14;
		}
		handleDistanceslider();
	}
	
	if ($('img.vehicleview').length) {
		handleVehicledetails();
	}

	$('#picklocation').bind('change', function() {
		var picklocation = $(this).val();
		$.get('/camper/camper-search.php', {'ajax': 'true', 'getdroplocation': 'true', 'picklocation': picklocation}, function(data) {
			$('#droplocation').html(data);
		});
	});
	
	$('#messagelayer').live('click', function() {
		$('#messagelayer').hide();
	});

});

function handleSearchform() {
	$('#searchform').RSV({
		displayType: 'display-html',
		errorTextIntro: 'Bitte bearbeiten Sie die untenstehenden Fehler und senden Sie das Formular erneut ab.',
		errorFieldClass: 'errorfield',
		rules: [
			'required,picklocation,Bitte wählen Sie den Ort der Anmietung.',
			'required,droplocation,Bitte wählen Sie den Ort der Rückgabe.',
			'required,pickdate.view,Bitte wählen Sie das Übernahmedatum.',
			'required,dropdate.view,Bitte wählen Sie das Rückgabedatum.',
			'required,personcount,Bitte wählen Sie die Zahl der Reiseteilnehmer.',
			'required,distance,Bitte machen Sie Angaben zur gewünschten Entfernung.',
			'required,flexibility,Bitte machen Sie Angaben zur Flexibilität der Termine.'
		]
	})
		.append('<input type="hidden" name="js" value="1" />');
	
}

function handleVehicledetails() {
	$('img.vehicleview').each(function() {
		var id = $(this).next().text();
		$(this).css('cursor', 'pointer')
			.colorbox({
				width: '650',
				initialHeight: '650',
				maxHeight: '90%',
				href: '/camper/camper-vehicle-details.php?vehicleid=' + escape(id) + '&ajax=true'
			})
			.parent().append("<span class='magnify'></span>");
	});
}

function handleDatepicker() {
	// swap hidden and visible date inputs
	$('input.datepicker').show()
	                     .prev().prev('input').hide();
	// localize all datepickers
	$.getScript('/js/ui.datepicker-de.js');
	var dates = $('#pickdate\\.view, #dropdate\\.view').datepicker({
		dateFormat: 'dd.mm.yy',
		autoSize: true,
		minDate: '+17d',
		maxDate: new Date(2011, 11, 31), // don’t forget to calculate the month -1
		defaultDate: '+1m',
		changeMonth: true,
		changeYear: true,
		altFormat: 'yy-mm-dd',
		onSelect: function(selectedDate) {
			var option = this.id == 'pickdate.view' ? 'minDate' : 'maxDate';
			var instance = $(this).data('datepicker');
			var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
			checkDay(date);
			var altfield = this.id == 'pickdate.view' ? '#pickdate\\.iso' : '#dropdate\\.iso';
			$(this).datepicker('option', 'altField', altfield);
			dates.not(this).datepicker('option', option, date);
			if (this.id == 'dropdate.view' || (this.id == 'pickdate.view' && $('#dropdate\\.view').val() != '')) {
				days = calculateDays($('#pickdate\\.view').val(), $('#dropdate\\.view').val());
				handleDistanceslider();
			}
		}
	});
}

function checkDay(date) {
	if (date.getDay() == 0 || date.getDay() == 7) {
		showMessage('Eine Übernahme/Rückgabe am Sonntag ist nicht möglich oder mit hohen Aufpreisen verbunden.<br />Bitte wählen Sie einen anderen Tag.');
	}
}

function showMessage(message) {
	if (!$('#messagelayer').length) {
		$('#searchform').append('<div id="messagelayer"></div>');
	}
	$('#messagelayer').html('<p class="close"></p><p>' + message + '</p>')
		.fadeIn(400)
		.delay(5000)
		.fadeOut(600);
}

function handleDistanceslider() {
	$('#distance').hide();
	var distance = days * 180;
	$('#slider').slider({
		range: 'min',
		value: distance,
		min: 0,
		max: 10000,
		step: 100,
		slide: function(event, ui) {
			distance = ui.value;
			$('#distance').val(distance);
			$('#kilometers').text(distance + ' km');
			$('#kilometerspd').text(Math.round(distance / days) + ' km pro Tag');
			$('#miles').text('entspricht ' + Math.round(distance / 1.609344) + ' Meilen');
		}
	});
	$('#distance').val(distance);
	$('#kilometers').text(distance + ' km');
	$('#kilometerspd').text(Math.round(distance / days) + ' km pro Tag');
	$('#miles').text('entspricht ' + Math.round(distance / 1.609344) + ' Meilen');
	$('#slidertext').show();
}

function calculateDays(date1, date2) {
	date1 = makeDateFromString(date1);
	date2 = makeDateFromString(date2);
	var d1 = new Date(date1[0], date1[1], date1[2]);
	var d2 = new Date(date2[0], date2[1], date2[2]);
	var diff = d2 - d1 //unit is milliseconds
	return Math.round(diff/1000/60/60/24);
}

function calculateDate(dateText, days) {
	dateText = makeDateFromString(dateText);
	var date = new Date(dateText[0], dateText[1], dateText[2]);
	var olddate = date.getTime();
	var newdate = olddate + days * 24 * 60 * 60 * 1000;
	date.setTime(newdate);
	var theyear = date.getFullYear();
	var themonth = date.getMonth() + 1;
	var thetoday = date.getDate();
	// make month and day a two-digit string
	themonth = themonth < 10 ? '0' + themonth : themonth;
	thetoday = thetoday < 10 ? '0' + thetoday : thetoday;
	var calculated = new Array(
		theyear + '-' + themonth + '-' + thetoday,
		thetoday + '.' + themonth + '.' + theyear
	);
	return calculated;
}

function makeDateFromString(viewdate) {
	var date = viewdate.split('.');
	var month = date[1] - 1;
	var day = date[0];
	var year = date[2];
	return [year, month, day];
}