// Basis-Url ermitteln
var baseUrl = 'http://'+window.location.hostname+'/';


/**
 * jQuery-Operation nach Laden des Dokuments
 */
$(document).ready(function(){

	$('a#inline.trigger').fancybox({
		onStart: function(){
			$('#fancybox-content').addClass('loading');
		},
		onClosed: function(){
			$('#fancybox-content').removeClass('loading');
		},
		onComplete: function(){
			// Form absenden
			$('div#rpdbooker form').submit();
		},
		overlayColor: '#000'
	});


/* Kalender aufsetzen und erweitern
**************************************************/

	// Datepicker auf aktuelle Sprache umstellen
	$.datepicker.setDefaults($.datepicker.regional[$('body').attr('id')]);
	// Funktionen implementieren
	$.datepicker.setDefaults({	
		/**
		 * Gebuchte Tage deaktivieren.
		 */
		beforeShowDay: function(date)
		{
			// aktuelle Daten ermiteln
			var arrival = $('div#rpdbooker #dateArrival input:first').datepicker('getDate');
			var departure = $('div#rpdbooker #dateDeparture input:first').datepicker('getDate');
			// wurden beide Daten gesetzt?
			if (arrival != null && departure != null) {
				// ersten bzw letzten Tag der markierten Zeitspanne
				if (date.toString() == arrival.toString() || date.toString() == departure.toString()) {
					// Tag markieren, mit Klasse und Tooltip belegen
					return new Array( true, 'daySelected', 'Ihre gewählte Zeitspanne.' );
				}
				// markierte Tage
				if (date > arrival && date < departure) {
					// Tag markieren, mit Klasse und Tooltip belegen
					return new Array( true, 'dayMarked', 'Ihre gewählte Zeitspanne.' );
				}
			}
			// ist der Tag bereits ausgebucht?
			if ($.inArray($.datepicker.formatDate('yy-mm-dd', date), $.datepicker.bookedDays) != -1) {
				// Tag deaktivieren, mit Klasse und Tooltip belegen
				return new Array( false, 'dayBooked', 'Dieser Tag ist bereits ausgebucht.' );
			}
			// Standard-Rückgabe
			return new Array(true, '', '');;
		},
		/**
		 * Auswahlbegrenzung setzen.
		 */
		beforeShow: function(input, instance)
		{
			// aktuelle Daten ermiteln
			var arrival = ($('div#rpdbooker #dateArrival input:first').attr('value') == 'Anreise') ?
					null : $('div#rpdbooker #dateArrival input:first').datepicker('getDate');
			var departure = ($('div#rpdbooker #dateDeparture input:first').attr('value') == 'Abreise') ?
					null : $('div#rpdbooker #dateDeparture input:first').datepicker('getDate');
			// Minimum und Maximum vorbelegen
			var min = 0;
			var max = null;
			// Ankunft
			if ($(input).attr('name') == 'arrival') {
				// Maximum abhängig vom Abfahrtsdatum setzen
				max = (departure != null) ? departure : null;	
			}
			// Abfahrt
			else {
				// Maximum abhängig vom Ankunftsdatum setzen
				min = (arrival != null) ? arrival : 0;
			}
			//  Minimum und Maximum übernehmen
			$(input).datepicker("option", "minDate", min);
			$(input).datepicker("option", "maxDate", max);
		}
	});
	
	$.datepicker.bookedDays = new Array();
	// gebuchte Daten per AJAX ermitteln
	$.ajax({
		url: baseUrl + '?eID=rpdbooker',
    	data: { action: 'getallbooked', date: '-' },
    	type: 'post',
    	dataType: 'json',
    	success: function(data) {
    		if (data) {
	    		// Daten übernehmen
	    		$.datepicker.bookedDays = data['values'];
    		}
			// Datepicker für Ankunftsdatum
			$('div#rpdbooker #dateArrival input:first').datepicker();
			$('div#rpdbooker #dateArrival .dateBtn').click(function(){
				$('div#rpdbooker #dateArrival input:first').datepicker('show');
			});
			// Datepicker für Abfahrtsdatum
			$('div#rpdbooker #dateDeparture input:first').datepicker();
			$('div#rpdbooker #dateDeparture .dateBtn').click(function(){
				$('div#rpdbooker #dateDeparture input:first').datepicker('show');
			});
    	}
    });
	

/* Booker: Fehlerprüfung und Abschicken
**************************************************/

	// Highlights entfernen
	$('div#rpdbooker input').focus(function(){
		// Highlight-Klasse gesetzt?
		if ($(this).hasClass('change')){
			// entfernen
			$(this).removeClass('change');
		}
		// Highlight-Klasse des Eltern-Elements gesetzt?
		if ($(this).parent().hasClass('change')) {
			// entfernen
			$(this).parent().removeClass('change');
		}
		// keine Highlights mehr?
		if ($('div#rpdbooker .change').length == 0) {
			// Fehlermeldung verbergen
			$('div#rpdbooker .error').css('display', 'none');
		}
	});

	// Prüfen und Abschicken des Buchungs-Formulars
	$('div#rpdbooker .submitBtn').click(function(){
		// Highlights entfernen
		$('div#rpdbooker .change').removeClass('change');
		// Werte übernehmen
		var arrive = $('div#rpdbooker #dateArrival input:first').val();
		var depart = $('div#rpdbooker #dateDeparture input:first').val();
		var rooms = $('div#rpdbooker input[name="rooms"]').val();
		var persons = $('div#rpdbooker input[name="persons"]').val();
		
		var errors = 0;
		// Fehler bei Ankunfts-Datum prüfen
		if (arrive.search(/\d{2}\.\d{2}\.\d{4}/) == -1) {
			$('div#rpdbooker #dateArrival').addClass('change');
			errors++;
		}
		// Fehler bei Abfahrts-Datum prüfen
		if (depart.search(/\d{2}\.\d{2}\.\d{4}/) == -1) {
			$('div#rpdbooker #dateDeparture').addClass('change');
			errors++;
		}
		// Fehler bei Zimmer-Anzahl prüfen
		if (isNaN(rooms)) {
			$('div#rpdbooker input[name="rooms"]').addClass('change');
			errors++;
		}
		// Fehler bei Personen-Anzahl prüfen
		if (isNaN(persons)) {
			$('div#rpdbooker input[name="persons"]').addClass('change');
			errors++;
		}
		// gibt es Fehler?		
		if (errors != 0) {
			// Fehlermeldung anzeigen
			$('div#rpdbooker .error').css('display', 'block');
		}
		// keine Fehler!
		else {
			$('a#inline.trigger').trigger('click');
			// Fehlermeldung verbergen
			$('div#rpdbooker .error').css('display', 'none');
			// IFrame in Fancybox laden
			
		}
	});
	
});
