
$(function(){
	
	$('#ffastbooking').each(function(){

		// define how many months up front one should be able to book this hotel
		var monthsUpFront = 4;

		// find the fields to work with
		var depDay = $('select[name=depatureDay]');
		var depMonth = $('select[name=depatureMonthYear]');
		var arrDay = $('select[name=arrivalDay]');
		var arrMonth = $('select[name=arrivalMonthYear]');
	
		// popuplate the select boxes
		var populateFastbooking = function(){
			
			
			// define month names
			var months = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec');
			var currentDate = new Date();
		
			// clear select
			var select_day = $(arrDay).add(depDay).html('');
			
			// fill select
			for (var i=1; i<=31; i++){
				select_day.append($('<option value="' + i + '">' +  i + '</option>'));
			}
			
			// clear select
			var select_month = $(arrMonth).add(depMonth).html('');
			var year = currentDate.getYear();
			if (year < 1900) year += 1900;
			
			// fill select
			for (var i=currentDate.getMonth(); i<currentDate.getMonth() + monthsUpFront; i++){
			
				if (i % 12 == 0) year++;
				select_month.append('<option value="' + (i+1) + '-' + year + '">' + months[i % 12] + ', ' + year + '</option>');
			}
			
			
			
			// Set to current date
			if(currentDate.getHours() < 15){
			setDateValue(arrDay, arrMonth, currentDate);
			}
			else
			{
			var nextDayLate = new Date();
			nextDayLate.setDate(currentDate.getDate()+1);
			setDateValue(arrDay, arrMonth, nextDayLate);
			}
			
			var tomorrow = new Date();
			
			if(currentDate.getHours() < 15){	
			// Set departure to tomorrow
			
			tomorrow.setDate(currentDate.getDate()+1);
			setDateValue(depDay, depMonth, tomorrow);
			}
			else
			{
			tomorrow.setDate(currentDate.getDate()+2);
			setDateValue(depDay, depMonth, tomorrow);
			}
	
		}
		
		// sets date fields to a certain date
		var setDateValue = function(dayfield, monthfield, date){
			dayfield.attr('value', date.getDate());
			monthfield.attr('value', (date.getMonth() +1)+ '-' + (date.getYear() > 190 ? date.getYear() : date.getYear() + 1900));
		}
		
		// gets and validates the selected dates
		var getDateValue = function(dayfield, monthfield){
			
			var tmp = monthfield.val().split(/\-/);
			var day = dayfield.val() * 1;
			var month = tmp[0] * 1;
			var year = tmp[1] * 1;
			
			if (day>=28){
				// check if date exists in this month
				if (month == 2){ // februari
					var daysinfeb = (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
					if (day>daysinfeb){
						month++;
						day = 1;
					}
				}

				if (day==31 && (month == 4 || month == 6 || month == 9 || month == 11)){
					// april, june, september, november all have 30 days
					month++;
					day = 1;
				}
			}
			
			var date = new Date();
			date.setDate(day == 31 ? 0 : day);
			date.setMonth(month-1);
			date.setYear(year);
			date.setHours(5);	// we set the time to 5 oclock in the morning to prevent daylight savings times problems.
			date.setMinutes(0);
			date.setSeconds(0);

		
			// reset date field if needed
			setDateValue(dayfield, monthfield, date);
			
			return date;
		}
		
		// adds days to a certain date
		function addDays(myDate,days) {
			return new Date(myDate.getTime() + days*24*60*60*1000);
		}
		
		
		populateFastbooking();
	
		// start datepicker		
		var st = new Date();
		var ed = addDays(st, 31 * monthsUpFront);
		$('.datePick').datePicker({createButton: false, startDate: st.asString(), endDate: ed.asString()}).bind('click', function(){
		
			var tmp=null;
			
			if (this.className.match(/departure/)){
				tmp = depMonth.val().split(/\-/);
			}
			else{
				tmp = arrMonth.val().split(/\-/);
			}
			$(this).dpSetDisplayedMonth(tmp[0] - 1, tmp[1]);
			
			$(this).dpDisplay();
			this.blur();
			return false;
		}).bind('dateSelected', function(e, selectedDate, $td){

			if (this.className.match(/departure/)){
				setDateValue(depDay, depMonth, selectedDate);
				depDay.trigger('change');
			}
			else{
				setDateValue(arrDay, arrMonth, selectedDate);
				arrDay.trigger('change');
			}
		});;	
	
		
		// create triggers on the onchange of the select boxes
		depDay.add(depMonth).add(arrDay).add(arrMonth).change(function(){
		
			var changedArrivalDate = this.name.match(/arrival/);
		
			var departureDate = getDateValue(depDay, depMonth);			
			var arrivalDate = getDateValue(arrDay, arrMonth);
		
			if (departureDate*1 < new Date()){
				departureDate = addDays(new Date(), 1);
				setDateValue(depDay, depMonth, departureDate);
			}
			if (arrivalDate *1 < new Date() - 86399000){
				arrivalDate = new Date();
				setDateValue(arrDay, arrMonth, arrivalDate);
			}
				
			if (changedArrivalDate){
				if (arrivalDate >= departureDate){
					departureDate = addDays(arrivalDate, 1);
					setDateValue(depDay, depMonth, departureDate);
				}
			}
			else{
				if (arrivalDate >= departureDate){
					arrivalDate = addDays(departureDate, -1);
					setDateValue(arrDay, arrMonth, arrivalDate);
				}
			}
			
			var amountofdays = Math.round((departureDate / 86400000) - (arrivalDate / 86400000));

			
			$('#amountNights').html(amountofdays + (amountofdays == 1 ? ' Nacht' : ' Nächte'));
			$('#nights').val(amountofdays);
		});
	
	
	
	
	});
	
	
	

});


