google.load("jquery", "1.2.6");
google.setOnLoadCallback(function() {
	
	$("a[class^=action], p[class^=icon]").tooltip({ 
	    delay: 0,
		fade: 250,
		showURL: false,
		track: true
	});
	
	$("textarea").charCounter(2500, {
		container: "#counter",
		format: "(Restzeichen: %1)"
	});
	
	$.datepicker.regional['de'] = {
		clearText: 'löschen', clearStatus: 'aktuelles Datum löschen',
		closeText: 'schließen', closeStatus: 'ohne Änderungen schließen',
		prevText: '&#x3c;zurück', prevStatus: 'letzten Monat zeigen',
		prevBigText: '&#x3c;&#x3c;', prevBigStatus: '',
		nextText: 'Vor&#x3e;', nextStatus: 'nächsten Monat zeigen',
		nextBigText: '&#x3e;&#x3e;', nextBigStatus: '',
		currentText: 'heute', currentStatus: '',
		monthNames: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
		monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'],
		monthStatus: 'anderen Monat anzeigen', yearStatus: 'anderes Jahr anzeigen',
		weekHeader: 'Wo', weekStatus: 'Woche des Monats',
		dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
		dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
		dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
		dayStatus: 'Setze DD als ersten Wochentag', dateStatus: 'Wähle D, M d',
		firstDay: 1, initStatus: 'Wähle ein Datum', isRTL: false
	};
	$.datepicker.setDefaults($.datepicker.regional['de']);
	$("#startDate, #endDate").datepicker($.extend({}, 
		$.datepicker.regional["de"], {
			beforeShow: customDateRange,
			hideIfNoPrevNext: true,
			dateFormat: "dd.mm.yy",
			showAnim: "fadeIn",
			showOtherMonths: true,
			onSelect: getTakenSlots,
			onClose: showSelect
		}
	));
	
	$('input[name*="extras"]').click(function () {
	    if ($('#info').length > 0) {
	        $.getJSON("http://" + window.location.host + "/external/check/dateFrom/" + $("#startDate").val() + "/dateTo/" + $("#endDate").val() + getExtras(), handleTakenSlots);
	    }
	});
	
	$.validator.methods.dateCheck = function(value) {
		var res = true;
		var d1 = new Date();
		var d2 = new Date($("#startDate").val().substr(6, 4), $("#startDate").val().substr(3, 2) - 1, $("#startDate").val().substr(0, 2), $("#startHour").val(), $("#startMin").val());
		if (days_between(d1, d2) > 1) {
			res = false;
		};
		return value == res;
	};
	
	$("#booking-form").validate({
		rules: {
			prename: "required",
			surname: "required",
			address: "required",
			zip: "required",
			city: "required",
			fon: "required",
			email: {
				required: true,
				email: true
			},
		    cadult: {
				required: true,
				min: 1
		    },
			cartype: "required",
			licensenumber: "required",
		    startDate: {
				required: true,
				dateDE: true
		    },
			/*startMin: {
				dateCheck: true
			},*/
		    endDate: {
				required: true,
				dateDE: true
		    },
			agb: "required"
		},
		messages: {
			salutation: "Wählen Sie eine Anrede.",
			prename: "Geben Sie den Vornamen ein.",
			surname: "Geben Sie den Nachnamen ein.",
			address: "Geben Sie den Straßennamen und die Hausnummer ein.",
			zip: "Geben Sie die Postleitzahl ein.",
			city: "Geben Sie den Ort ein.",
			fon: "Geben Sie die Telefonnummer ein.",
			email: {
				required: "Geben Sie Ihre E-Mail-Adresse ein.",
				email: "Die eingegebene E-Mail-Adresse ist ungültig."
			},
			cadult: {
				required: "Geben Sie die Anzahl der Erwachsenen ein.",
				min: "Es muss mindestens eine erwachsene Person vorhanden sein."
			},
			cartype: "Wählen Sie den Fahrzeugtyp aus.",
			licensenumber: "Geben Sie das Kennzeichen ein.",
			startDate: {
				required: "Geben Sie das Datum für die Anreise ein.",
				dateDE: "Das Datum für den Parkbeginn wurde im falschen Format eingegeben."
			},
			/*startMin: {
				dateCheck: "Wählen Sie eine Anreisezeit die mindestens 24 Stunden in der Zukunft liegt."
			},*/
			endDate: {
				required: "Geben Sie das Datum für den Rückflug ein.",
				dateDE: "Das Datum für das Parkende wurde im falschen Format eingegeben."
			},
			agb: {
				required: "Sie müssen den AGB zustimmen.<br />"
			}
		},
		errorClass: "invalid",
		onkeyup: false,
		onfocusout: false,
		submitHandler: function(form) {
			if ($('#key_accept').length == 0) {
				$("#send").attr("disabled","disabled");
				$("#reset").attr("disabled","disabled");
				form.submit();
			}
			else {
				if ($('#key_accept')[0].checked) {
					$("#send").attr("disabled","disabled");
					$("#reset").attr("disabled","disabled");
					form.submit();
				}
				else {
					$('#key_accept').after('<label class="invalid" for="agb" generated="true">Sie müssen Ihren Autoschlüssel bei uns hinterlegen.<br/></label>');
				}
			}
		}
	});
});

function showAGB (url) {
	var agb = window.open(url, 'upload', "toolbar=0,location=0,status=0,menubar=0,scrollbars=0,resizable=0,width=640,height=590");
};

function getExtras() {
    var extras = [];
    $('input[name*="extras"]').each(function () {
        if (this.checked) extras.push(this.value);
    });
    if (extras.length > 0) {
        return "/extras/" + extras.join(',');
    }
    return '';
}

function getTakenSlots (date, input) {
	if ($("#startDate").val() != "" && $("#endDate").val() != "") {
		$.blockUI({
			message: "Einen Moment, Ihr Parkzeitraum wird geprüft.",
			css: { border: '1px solid #EEE' } 
		});
		$.getJSON("http://" + window.location.host + "/external/check/dateFrom/" + $("#startDate").val() + "/dateTo/" + $("#endDate").val() + getExtras(), handleTakenSlots);
	}
};

function showSelect () {
	$('#startHour').show();
	$('#startMin').show();
	$('#endtHour').show();
	$('#endMin').show();
}

function handleTakenSlots (data) {
	$("#buttons").show();
	var free = Number(data.slots) - Number(data.taken);
	var free_wo_key = Number(data.slots) - Number(data.slots_key) - Number(data.taken_wo_key);
	var free_w_key = Number(data.slots_key) - Number(data.taken_w_key);
	$("#info").remove();
	$("#key_question").remove();
	var tr = document.createElement('tr');
	tr.id = "info";
	var td = document.createElement('td');
	if (free <= data.slots_warning) {
		$("#send").attr("disabled","disabled");
		$(td).attr("colspan", "2");
		$(td).html('<span class="error">Für diesen Zeitraum stehen nur wenige Parkplätze zur Verfügung, deshalb bitten wir Sie den Parkplatz telefonisch unter 0172 / 3719755 zu buchen oder schauen Sie einfach bei unserem Partnerparkplatz <a href="http://www.park-to-fly24.de" target="_blank">Park-to-Fly24</a> nach einem Platz.</span>');
		tr.appendChild(td);
		$("#end").after(tr);
		$("#buttons").hide();
	}
	else if (free_w_key > 0 && free_wo_key <= 0) {
		$("#send").attr("disabled","");
		$(td).attr("colspan", "2");
		$(td).html('<input type="hidden" name="key" value="1" /><span class="warning">In diesem Zeitraum stehen nur Parkplätze mit Abgabe des Fahrzeugschlüssels zur Verfügung.</span>');
		tr.appendChild(td);
		$("#end").after(tr);
		
		var trr = document.createElement('tr');
		trr.id = "key_question";
		var tdd = document.createElement('td');
		var tdd2 = document.createElement('td');
		$(tdd).html('Autoschlüssel:');
		$(tdd2).html('<input id="key_accept" class="checkbox" type="checkbox" name="key_accept" value="1"/>Ich erkläre mich mit der Fahrzeugschlüsselabgabe einverstanden.');
		trr.appendChild(tdd);
		trr.appendChild(tdd2);
		$("#comments").after(trr);
		
		$("#send").attr("disabled","");
		$("#price").remove();
		$(td).html(number_format(data.price, 2, ',') + ' € <small>inkl. 19% MwSt.</small></td></tr>');
		var td2 = document.createElement('td');
		$(td2).html('Preis:');
		tr.appendChild(td2);
		tr.appendChild(td);
		$("#comments").before(tr);
	}
	else {
		$("#send").attr("disabled","");
		$("#price").remove();
		$(td).html(number_format(data.price, 2, ',') + ' € <small>inkl. 19% MwSt.</small></td></tr>');
		var td2 = document.createElement('td');
		$(td2).html('Preis:');
		tr.appendChild(td2);
		tr.appendChild(td);
		$("#comments").before(tr);
	}
	$.unblockUI();
};

function customDateRange (input) {
	if (jQuery.browser.msie && jQuery.browser.version < 7) {
		if (input.id == "startDate") {
			$('#startHour').hide();
			$('#startMin').hide();
		}
		if (input.id == "endDate") {
			$('#endtHour').hide();
			$('#endMin').hide();
		}
	}
	return {
		minDate: (input.id == "endDate" ? $("#startDate").datepicker("getDate") : "1d"),
		maxDate: (input.id == "startDate" ? $("#endDate").datepicker("getDate") : null)
	};
};
function number_format( number, decimals, dec_point, thousands_sep ) {
 	var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
    var d = dec_point == undefined ? "." : dec_point;
    var t = thousands_sep == undefined ? "," : thousands_sep, s = n < 0 ? "-" : "";
    var i = parseInt(n = Math.abs(+n || 0).toFixed(c), 10) + "", j = (j = i.length) > 3 ? j % 3 : 0;
    
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};

function days_between(date1, date2) {
    // The number of milliseconds in one day
    var ONE_DAY = 1000 * 60 * 60 * 24;
    // Convert both dates to milliseconds
    var date1_ms = date1.getTime();
    var date2_ms = date2.getTime();
    // Calculate the difference in milliseconds
    var difference_ms = Math.abs(date1_ms - date2_ms);
    // Convert back to days and return
    return difference_ms/ONE_DAY;
};
