
var playSoundOK = (function beep() {
	var sndOK = new Audio("data:audio/wav;base64,//uQRAAAAWMSLwUIYAAsYkXgoQwAEaYLWfkWgAI0wWs/ItAAAGDgYtAgAyN+QWaAAihwMWm4G8QQRDiMcCBcH3Cc+CDv/7xA4Tvh9Rz/y8QADBwMWgQAZG/ILNAARQ4GLTcDeIIIhxGOBAuD7hOfBB3/94gcJ3w+o5/5eIAIAAAVwWgQAVQ2ORaIQwEMAJiDg95G4nQL7mQVWI6GwRcfsZAcsKkJvxgxEjzFUgfHoSQ9Qq7KNwqHwuB13MA4a1q/DmBrHgPcmjiGoh//EwC5nGPEmS4RcfkVKOhJf+WOgoxJclFz3kgn//dBA+ya1GhurNn8zb//9NNutNuhz31f////9vt///z+IdAEAAAK4LQIAKobHItEIYCGAExBwe8jcToF9zIKrEdDYIuP2MgOWFSE34wYiR5iqQPj0JIeoVdlG4VD4XA67mAcNa1fhzA1jwHuTRxDUQ//iYBczjHiTJcIuPyKlHQkv/LHQUYkuSi57yQT//uggfZNajQ3Vmz+Zt//+mm3Wm3Q576v////+32///5/EOgAAADVghQAAAAA//uQZAUAB1WI0PZugAAAAAoQwAAAEk3nRd2qAAAAACiDgAAAAAAABCqEEQRLCgwpBGMlJkIz8jKhGvj4k6jzRnqasNKIeoh5gI7BJaC1A1AoNBjJgbyApVS4IDlZgDU5WUAxEKDNmmALHzZp0Fkz1FMTmGFl1FMEyodIavcCAUHDWrKAIA4aa2oCgILEBupZgHvAhEBcZ6joQBxS76AgccrFlczBvKLC0QI2cBoCFvfTDAo7eoOQInqDPBtvrDEZBNYN5xwNwxQRfw8ZQ5wQVLvO8OYU+mHvFLlDh05Mdg7BT6YrRPpCBznMB2r//xKJjyyOh+cImr2/4doscwD6neZjuZR4AgAABYAAAABy1xcdQtxYBYYZdifkUDgzzXaXn98Z0oi9ILU5mBjFANmRwlVJ3/6jYDAmxaiDG3/6xjQQCCKkRb/6kg/wW+kSJ5//rLobkLSiKmqP/0ikJuDaSaSf/6JiLYLEYnW/+kXg1WRVJL/9EmQ1YZIsv/6Qzwy5qk7/+tEU0nkls3/zIUMPKNX/6yZLf+kFgAfgGyLFAUwY//uQZAUABcd5UiNPVXAAAApAAAAAE0VZQKw9ISAAACgAAAAAVQIygIElVrFkBS+Jhi+EAuu+lKAkYUEIsmEAEoMeDmCETMvfSHTGkF5RWH7kz/ESHWPAq/kcCRhqBtMdokPdM7vil7RG98A2sc7zO6ZvTdM7pmOUAZTnJW+NXxqmd41dqJ6mLTXxrPpnV8avaIf5SvL7pndPvPpndJR9Kuu8fePvuiuhorgWjp7Mf/PRjxcFCPDkW31srioCExivv9lcwKEaHsf/7ow2Fl1T/9RkXgEhYElAoCLFtMArxwivDJJ+bR1HTKJdlEoTELCIqgEwVGSQ+hIm0NbK8WXcTEI0UPoa2NbG4y2K00JEWbZavJXkYaqo9CRHS55FcZTjKEk3NKoCYUnSQ0rWxrZbFKbKIhOKPZe1cJKzZSaQrIyULHDZmV5K4xySsDRKWOruanGtjLJXFEmwaIbDLX0hIPBUQPVFVkQkDoUNfSoDgQGKPekoxeGzA4DUvnn4bxzcZrtJyipKfPNy5w+9lnXwgqsiyHNeSVpemw4bWb9psYeq//uQZBoABQt4yMVxYAIAAAkQoAAAHvYpL5m6AAgAACXDAAAAD59jblTirQe9upFsmZbpMudy7Lz1X1DYsxOOSWpfPqNX2WqktK0DMvuGwlbNj44TleLPQ+Gsfb+GOWOKJoIrWb3cIMeeON6lz2umTqMXV8Mj30yWPpjoSa9ujK8SyeJP5y5mOW1D6hvLepeveEAEDo0mgCRClOEgANv3B9a6fikgUSu/DmAMATrGx7nng5p5iimPNZsfQLYB2sDLIkzRKZOHGAaUyDcpFBSLG9MCQALgAIgQs2YunOszLSAyQYPVC2YdGGeHD2dTdJk1pAHGAWDjnkcLKFymS3RQZTInzySoBwMG0QueC3gMsCEYxUqlrcxK6k1LQQcsmyYeQPdC2YfuGPASCBkcVMQQqpVJshui1tkXQJQV0OXGAZMXSOEEBRirXbVRQW7ugq7IM7rPWSZyDlM3IuNEkxzCOJ0ny2ThNkyRai1b6ev//3dzNGzNb//4uAvHT5sURcZCFcuKLhOFs8mLAAEAt4UWAAIABAAAAAB4qbHo0tIjVkUU//uQZAwABfSFz3ZqQAAAAAngwAAAE1HjMp2qAAAAACZDgAAAD5UkTE1UgZEUExqYynN1qZvqIOREEFmBcJQkwdxiFtw0qEOkGYfRDifBui9MQg4QAHAqWtAWHoCxu1Yf4VfWLPIM2mHDFsbQEVGwyqQoQcwnfHeIkNt9YnkiaS1oizycqJrx4KOQjahZxWbcZgztj2c49nKmkId44S71j0c8eV9yDK6uPRzx5X18eDvjvQ6yKo9ZSS6l//8elePK/Lf//IInrOF/FvDoADYAGBMGb7FtErm5MXMlmPAJQVgWta7Zx2go+8xJ0UiCb8LHHdftWyLJE0QIAIsI+UbXu67dZMjmgDGCGl1H+vpF4NSDckSIkk7Vd+sxEhBQMRU8j/12UIRhzSaUdQ+rQU5kGeFxm+hb1oh6pWWmv3uvmReDl0UnvtapVaIzo1jZbf/pD6ElLqSX+rUmOQNpJFa/r+sa4e/pBlAABoAAAAA3CUgShLdGIxsY7AUABPRrgCABdDuQ5GC7DqPQCgbbJUAoRSUj+NIEig0YfyWUho1VBBBA//uQZB4ABZx5zfMakeAAAAmwAAAAF5F3P0w9GtAAACfAAAAAwLhMDmAYWMgVEG1U0FIGCBgXBXAtfMH10000EEEEEECUBYln03TTTdNBDZopopYvrTTdNa325mImNg3TTPV9q3pmY0xoO6bv3r00y+IDGid/9aaaZTGMuj9mpu9Mpio1dXrr5HERTZSmqU36A3CumzN/9Robv/Xx4v9ijkSRSNLQhAWumap82WRSBUqXStV/YcS+XVLnSS+WLDroqArFkMEsAS+eWmrUzrO0oEmE40RlMZ5+ODIkAyKAGUwZ3mVKmcamcJnMW26MRPgUw6j+LkhyHGVGYjSUUKNpuJUQoOIAyDvEyG8S5yfK6dhZc0Tx1KI/gviKL6qvvFs1+bWtaz58uUNnryq6kt5RzOCkPWlVqVX2a/EEBUdU1KrXLf40GoiiFXK///qpoiDXrOgqDR38JB0bw7SoL+ZB9o1RCkQjQ2CBYZKd/+VJxZRRZlqSkKiws0WFxUyCwsKiMy7hUVFhIaCrNQsKkTIsLivwKKigsj8XYlwt/WKi2N4d//uQRCSAAjURNIHpMZBGYiaQPSYyAAABLAAAAAAAACWAAAAApUF/Mg+0aohSIRobBAsMlO//Kk4soosy1JSFRYWaLC4qZBYWFRGZdwqKiwkNBVmoWFSJkWFxX4FFRQWR+LsS4W/rFRb/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU=");
	return function () {
		sndOK.play();
	}
})();

var playSoundError = (function beepError() {
	var snderr = new Audio("data:audio/wav;base64, ");
	return function () {
		snderr.play();
	}
})();

function writeFixPrice(prVal = false) {
	if (isNaN(prVal) == false) {
		$("#preis").val(prVal.toFixed(2));
	}
	else console.log("Fixpreis Error -> " + prVal);

}

function updateClock() {
	var clockElement = document.getElementById("uhrzeit");
	zeit = new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
	clockElement.innerHTML = zeit;
}

function sitpos_welt_anzeigen(string) {
	document.getElementById('sit_world').style.display = 'block';
	document.getElementById('sit_world').style.visibility = 'block';
	document.getElementById('sit_world_text').innerHTML = string;
}

function sitpos_welt_ausblenden() {
	var element = document.getElementById('sit_world');
	element.style.display = 'none';
	element.style.visibility = 'none';
}

function set_focus() {
	$("#toggle").val('preis');
	$("#preis").focus();
}


//Parameter forcepdf: erzwingt einen Druck über pdf, weil ich es nicht geschafft habe invoicebonPdfPrint hier drinnen zu setzen
function seite_drucken(printRequest = false, requestId = false, requestFunktion = false, forcepdf = false) {

	//console.log("global js ... line 43 printRequest -> "+printRequest);

	if (forcepdf == true) {
		invoicebonPdfPrint = "ja";
	}

	if (typeof invoicebonPdfPrint != 'undefined' && invoicebonPdfPrint.toLowerCase() == 'ja' && printRequest == 'ein_aus_zahlungen') {
		$.ajax({
			type: "POST",
			url: "ajax_funktionen.php",
			dataType: "html",
			data: { funktion: 'ein_auszahlung_drucken_pdf', requestId: requestId, requestFunktion: requestFunktion },
			async: true,
			success: function (response) {

			}
		});

	}

	else if (typeof invoicebonPdfPrint != 'undefined' && invoicebonPdfPrint.toLowerCase() == 'ja' && printRequest == 'bonjournalInvoicePrint') {
		$.ajax({
			type: "POST",
			url: "ajax_funktionen.php",
			dataType: "html",
			data: { funktion: "bon_ausdrucken_pdf", requestId: requestId, requestFunktion: requestFunktion, printRequest: printRequest },
			async: true,
			success: function (response) {


			}
		});

	}

	else if (printRequest == 'bonjournalInvoicePrint_A4') {
		$.ajax({
			type: "POST",
			url: "ajax_funktionen.php",
			dataType: "html",
			data: { funktion: "bon_ausdrucken_a4_pdf", requestId: requestId, requestFunktion: 'bonJournalPrint' },
			async: true,
			success: function (response) {
				if (checkJson(response) == true) {
					respArray = JSON.parse(response);
					if (respArray[1] == 'browserPrint') {
						window.open(respArray[2], '_blank');
						//	console.log("global js line 60: -> browser ?: "+respArray[0]+" / "+respArray[1]+" / "+respArray[2]);
					}
				}
				else console.log("global js line 60: -> string ajax response: " + response);

			}
		});
	}

	else if (typeof invoicebonPdfPrint != 'undefined' && invoicebonPdfPrint.toLowerCase() == 'ja' && (printRequest == 'kassenabschluss' || printRequest == 'kassenabrechnung')) {

		abschlOnUserData = "";
		if (printRequest == 'kassenabschluss') {
			abschlussModus = false;
			checkMode = $("#hiddenUserAbrechEnablerField").val();

			if (requestId == 0) requestId = $("#hiddenUserAbrechEnablerField").val();
			if (checkMode > 0 && requestId > 0) {
				$("#hiddenUserAbrechEnablerField").val(requestId);
				abschlOnUserData = $("#hiddenUserAbrechIdField").val();
			}
		}

		else {
			abschlussModus = "kassenabrechnungBenutzer";
			abschlOnUserData = abschlUserId;
		}
		$.ajax({
			type: "POST",
			url: "ajax_funktionen.php",
			dataType: "html",
			data: { funktion: 'kassenabschluss_ausdrucken_pdf', requestId: requestId, requestFunktion: requestFunktion, abschlOnUser: abschlOnUserData, abschlussModus: abschlussModus, printRequest: printRequest },
			async: true,
			success: function (response) {
				console.log(response);
			}
			
		});
	}

	else if (typeof invoicebonPdfPrint != 'undefined' && invoicebonPdfPrint.toLowerCase() == 'ja' && printRequest == 'kassenbericht') {

		abschlIdVon = $("#abschlIdVon").val();
		abschlIdBis = $("#abschlIdBis").val();
		requestDateFrom = $("#abschlDatumVon").val();
		requestDateTo = $("#abschlDatumBis").val();

		//console.log(abschlIdVon+" / "+abschlIdBis+" / "+requestDateFrom+" / "+requestDateTo);

		$.ajax({
			type: "POST",
			url: "ajax_funktionen.php",
			dataType: "html",
			data: { funktion: 'kassenbericht_ausdrucken_pdf', abschlIdVon: abschlIdVon, abschlIdBis: abschlIdBis, requestDateFrom: requestDateFrom, requestDateTo: requestDateTo, requestFunktion: requestFunktion },
			async: true,
			success: function (response) {

			}
		});
	}

	else if (printRequest == 'mobilesDevice') {
		if (requestFunktion == false && $("#kassieren_id").css("display") == "block") {
			requestFunktion = "invoice";
		}
		printGastro(requestId, requestFunktion);
		return false;
	}

	else {
		$('#fenster_rechts').css({ "height": "auto", "padding": "0", "margin": "0" });
		$('#bonKopfzeile, #bonFusszeile').css({ 'display': 'block' });

		if (printRequest != false && printRequest.toLowerCase() == 'invoiceprint' && invoiceMultiPrint * 1 > 1) {
			for (i = 0; i < invoiceMultiPrint; i++) {
				window.print();
			}
		}
		else {
			window.print();
			if (printRequest != false && printRequest.toLowerCase() == 'invoiceprint' && gastroVersion == 'ja'
				&& retourgeldPopUp != 'ja' && moveToTische == 'ja') {
				window.location.href = 'tische.php';
			}
		}
		$('#bonKopfzeile, #bonFusszeile').css({ 'display': 'none' });
		$('#fenster_rechts').css({ "height": $("#fenster_links").height() });


	}

}

// ******************************************************************************************
// RFR 04.03.2018
// Dialog wird anstatt einem Alert verwendet, ohne irgendwelchem Firlefanz
// Hab mich mit openGeneralDialog nicht mehr ausgekannt!
// jetzt werden alle Optionen einfach als Parameter mitgegeben
// boxTitle:	  	der Titel des Dialog
// dialogContent: 	der Inhalt des Dialogs
// buttonTxtRight: 	der Text vom rechten Button
// wrappEr:			weiss nicht genau ich glaube der name des wrapper <div> wurde von optenGeneralDialog übernommen
function sITPos_Alert(boxTitle = "sITPos Hinweis", dialogContent = false, buttonTxtRight = "OK", wrappEr = false) {
	//console.log(boxTitle+" / "+dialogContent);
	if (wrappEr == false) { wrappEr = 'wrapper'; }
	wrapHeight = $("#" + wrappEr).height();
	dialogCssClass = 'generalDialogBox';
	buttonTxtLeft = "Abbrechen";
	mminHeight = 150;
	wwidth = 600;
	pPosition = "center";
	atPosition = "center";
	hideButLeft = true;

	htmlContent = "<p class='configDialogContent'><center> " + dialogContent + "</center></p>";


	//	alert(htmlContent);

	$("#generalDialog").html(htmlContent);
	$("#generalDialog").dialog({
		resizable: false,
		open: function (event, ui) {
			$(".ui-dialog-titlebar-close", ui.dialog | ui).hide();
			$("body").css({ "overflow": "hidden" });

		},
		beforeClose: function (event, ui) { $("body").css({ "overflow": "visible" }); },
		modal: true,
		title: boxTitle,
		height: 'auto',
		minHeight: mminHeight,
		maxHeight: wrapHeight,
		width: wwidth,

		position: { my: pPosition, at: atPosition, of: "#" + wrappEr },
		dialogClass: dialogCssClass,
		buttons: {

			"1": {
				id: 'dialogButR', text: buttonTxtRight, click: function () {
					$(this).dialog("close");
				},

				"class": "button button_gross dialog_orange"
			}



		}



	});

	//if(hideButLeft==true)$("#dialogButL").css({ "display":"none"	});

	// $("#zahlungDisableImg").css({ "display":"none"	});

}
//*************************************************************************************************

// Funktion löscht eine Zeile aus dem offenen Bon
function delete_offene_bon_id(id, parent_id) {
	//alert(id);

	$.ajax({
		type: "POST",
		url: "ajax_funktionen.php",
		dataType: "html",
		data: { funktion: "zeile_loeschen", id: id },
		async: false,
		success: function (html) {
			$("#error_message").html(html);
			if ($("#bonContent > .line_unselected").length) {
				first_id = $("#bonContent > .line_unselected").first().prop('id').replace("line", "");
				// löschen der Beilagen und Basispreis Felder in der Editiermaske
				$("#beilagenProdInitialPreis, #basisPrGeaendertField, #basisPrGeaendertAmount").val(0);

				bon_anzeigen(first_id);
				// nach dem löschen gibts die markierte id nicht mehr, nehmen die erste im bon container am leichtesten zu finden
				// funktioniert solange es den ersten gibt, zumindest einen artikel im bon container gibt
			}
			else bon_anzeigen();		// wenn der letzte artikel gelöscht wurde
			warenkoerbe_anzeigen();		// nach dem loeschen koennte ein Warenkorb leer sein
		}
	});
	//kombi_produkte_childs_anzeigen(parent_id);
}

function delete_offene_bon_id_kombi(id, parent_id) {
	//alert(id);

	$.ajax({
		type: "POST",
		url: "ajax_funktionen.php",
		dataType: "html",
		data: { funktion: "zeile_loeschen_kombi", id: id, parent_id: parent_id },
		async: false,
		success: function (html) {
			$("#error_message").html(html);
			//setTimeout(bon_anzeigen(), 1000);		// wenn der letzte artikel gelöscht wurde
			//warenkoerbe_anzeigen();		// nach dem loeschen koennte ein Warenkorb leer sein
		}
	});
	kombi_produkte_childs_anzeigen(parent_id);
	setTimeout(function () { bon_anzeigen() }, 500);
}

// Hier wird der Storno php ausgeführt und dann der Bon ausgedruckt
function validate_formular_storno(bon_id) {
	if (document.forms["formular_storno"]["storno_grund"].selectedIndex == 0) {
		openGeneralDialog('validateFormStorno', 'Fehlender Storno Grund', '<p>Bitte Storno Grund auswählen</p>', 'wrapper_bon');
		return false;
	}
	if (document.forms["formular_storno"]["storno_zahlungsart"].selectedIndex == 0) {
		openGeneralDialog('validateFormStorno', 'Fehlender Storno Zahlungsart', '<p>Bitte Zahlungsart auswählen</p>', 'wrapper_bon');
		return false;
	}
	//alert ($("#formular_storno").serialize());
	sitpos_welt_anzeigen("Bon wird storniert ...");
	//var test = $("#formular_storno").serialize();
	//alert(test);
	$.ajax({
		type: "POST",
		url: "ajax_funktionen.php",
		dataType: "html",
		data: $("#formular_storno").serialize(),
		async: false,
		success: function (html) {
			$("#fenster_rechts").html(html);
			$('#bonKopfzeile').css({ 'display': 'block' });
			$('#bonFusszeile').css({ 'display': 'block' });
			if (invoicebonPdfPrint.toLowerCase() != 'ja') seite_drucken();  // wenn pdf print gesetzt ist, wird der ausdruck (pdf) in ajax_funktionen "storniere_bon_ausfuehren()" aufgerufen
			//window.location.reload(true); 
			$('#bonKopfzeile').css({ 'display': 'none' });
			$('#bonFusszeile').css({ 'display': 'none' });
			bonDisplayDivHeight = $('#fenster_links').height();
			//	$('#stornoBillWrapper').css({'height':bonDisplayDivHeight+'px', 'padding':'3px', 'background':'#555'});
			setTimeout(function () { location.reload(true); }, 2000);

		}
	});
	sitpos_welt_ausblenden();
	
	try{
		var checkVar = "<?php if (FILIALSYSTEM_IST_FILIALSYSTEM == 'ja' && FILIALSYSTEM_SYNCHRONISATION_BON == 'ja') echo FILIALSYSTEM_SYNCHRONISATION_BON; ?>";
		if (checkVar !== "") {
			$.ajax({
				type: "POST",
				url: "ajax_funktionen.php",
				dataType : "html",
				data: {funktion: "upsync", selVal: "incr", bon_id: bon_id},
				async: true,
				success:function(html){	
					//console.log("sync successful");
					console.log(html);
				}
			});
		}
	}catch (e) {
		//alert(e);
	}


		

}


function printGastroSupply(requestId, requestFunktion) {
	if ($("#bonContent > [id^=line]").length > 0 && supplyPdfPrint.toLowerCase() == 'ja') {
		$.ajax({
			type: "POST",
			url: "include/ajax_functions_gastro.php",
			dataType: "html",
			data: { functionKey: 'printGastroSupply', requestId: requestId, requestFunktion: requestFunktion },
			async: true,
			success: function (response) {
				if (response.toLowerCase().indexOf('success') !== -1) {
					response = response.replace(/success/gi, '');
					$("#error_message").html(response);
					if (logOutIndicator == true) window.location.href = "user_logoff.php";
					else if (logOutIndicator == false) window.location.href = "tische.php";
				}
			}

		});

	}
	else {
		if (logOutIndicator == true) window.location.href = "user_logoff.php";
		else if (logOutIndicator == false) window.location.href = "tische.php";
		return false;
	}

}


// check die Zahlungsarten des original bons bei storno mit auszahlung, Rechnung entsprechend, warnung bei Bank und/oder Bankomat. 
function validateZahlungsarten(bonId) {
	if ($("#stornoPaymentSelect option:selected").val() == "asInvoice") {

		xmlhttp = GetXmlHttpObject();
		xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
		sendCont = "functionKey=checkPaymentTypeStorno&originalBonId=" + bonId;

		xmlhttp.send(sendCont);
		resp = xmlhttp.responseText;

		if (resp != false) {
			openGeneralDialog('paymentWarning', 'Zahlungsart Hinweis', resp, 'wrapper_bon');
		}
		else return false;
	}
}




// Ziffern bei der bezahlung gedrückt, Bar, Gutscheine tc. befüllen   --- Wird vom Ziffernblock aufgerufen
function zahlung_ziffer_gedrueckt(ziffer) {
	// Einlesen welche Eingabe aktiv ist
	element = document.getElementById("aktive_zahlungsart").value;

	if (ziffer === ".") {
		// Es wurde ein Punkt eingefügt aber es ist schon ein Punkt drinnen	
		//console.log("aktiveZahlungsart: "+element+" / "+ziffer);
		str = document.getElementById(element.toString()).value;
		if (str.indexOf('.') !== -1) {
			return;
		}
		else document.getElementById(element.toString()).value = document.getElementById(element.toString()).value + ziffer;
	}
	else if (ziffer === "\*") return;   //Bei Mal nichts machen;
	else if (ziffer == "CE") {
		document.getElementById(element.toString()).value = "";
	}
	else if (ziffer === 'Enter') {
		if (element == 'gutschein_nr_ip') {
			var e = jQuery.Event("keypress");
			e.which = 13;
			e.keyCode = 13;
			$("#gutschein_nr_ip").trigger(e);

		}
		else return;
	}
	else if (ziffer === gutscheinPrefix) {
		if (element == 'gutschein_nr_ip') {
			str = document.getElementById(element.toString()).value;
			if (str.indexOf(gutscheinPrefix) === -1) document.getElementById(element.toString()).value = ziffer + str;
			$("#gutschein_nr_ip").focus();
		}
		else return;
	}


	else {
		document.getElementById(element.toString()).value = document.getElementById(element.toString()).value + ziffer;

	}

	zahlung_gedrueckt();

}

function ziffer_gedrueckt_edit_modal(ziffer) {

	activeField = $("#activeEditField").val();
	if (activeField == false) {
		activeField = 'editieren_brutto';
		//	activeField=$('#produkt_editieren_id .zahlungsart_geld:first').attr('id');		// wenn kein element gesetzt ist (durch anclicken od aufruf von automatisch editieren) nehm das erste mit dieser classe
	}
	if (ziffer == "CE") {
		activeFieldId = $("#" + activeField).attr("id");
		if (activeFieldId == 'beilagenTxtFieldMinus' || activeFieldId == 'beilagenTxtFieldPlus') {
			$("#beilagenTxtFieldMinus, #beilagenTxtFieldPlus, #BeilagenSumBrutto, #BeilagenSumBruttoDisplay").val("");
			$("#beilagenSum").val('cleared');
		}
		else $("#" + activeField).val("");
		return;
	}
	if (ziffer === "." && activeField != 'editieren_produktname') {
		// Es wurde ein Punkt eingefügt aber es ist schon ein Punkt drinnen	
		str = document.getElementById(activeField.toString()).value;
		if (str.indexOf('.') !== -1) {
			return;
		}
	}
	if (ziffer === "\*") { return false; }

	else {
		document.getElementById(activeField.toString()).value = document.getElementById(activeField.toString()).value + ziffer;

	}
	update_produkt_editieren(activeField.toString());
}


function ziffer_gedrueckt_splitbon_modal(ziffer, disableasterisk = false) {

	element = 'splitbon_stueck';

	if (ziffer === ".") {
		// Es wurde ein Punkt eingefügt aber es ist schon ein Punkt drinnen					
		//str=document.getElementById(element.toString()).value;
		str = $("#splitbon_stueck").val() + "";
		if (str.indexOf('.') !== -1) {
			return false;
		}
	}
	if (ziffer === "\*") { return false; }
	if (ziffer == "CE") { $("#splitbon_stueck").val(""); }
	else {
		zahl = document.getElementById(element.toString()).value + ziffer;
		zahl = zahl.replace(/^0+(?!\.|$)/, '')  //Schneide führende 0 weg, wenn nur 0 ist dann lass es stehen
		document.getElementById(element.toString()).value = zahl;
	}

}
// Wenn eine Zahl aus dem Ziffernblock gedrückt wird - gilt für Hauptmenü verkauf


function ziffer_gedrueckt(ziffer, disableasterisk = false) {

	// Einlesen ob derzeit Preis oder Stueck eingabe aktiv ist
	element = document.getElementById("toggle").value;

	if (ziffer == "Enter") {
		if ($("#toggle").val() == 'preis') {
			eElem = document.getElementById("preis");
			check_ean('enterKey', eElem);
		}
		else if ($("#toggle").val() == 'stueck') {
			sStueck = $("#preis").val();
			pPreis = $("#stueck").val();
			$("#preis").val(pPreis);
			$("#stueck").val(sStueck);
			eElem = document.getElementById("preis");
			check_ean('enterKey', eElem);

		}
		set_focus();
		return;
	}
	if (ziffer === ".") {
		// Es wurde ein Punkt eingefügt aber es ist schon ein Punkt drinnen	
		str = document.getElementById(element.toString()).value;
		if (str.indexOf('.') !== -1) {
			$("#" + element).focus();
			return;
		}
	}


	if (ziffer === "\*") {
		if (!disableasterisk) {
			str = document.getElementById("toggle").value;
			if (str == "preis") {
				document.getElementById("toggle").value = "stueck";
				$("#stueck").focus();
			}
			else {
				$("#toggle").val('preis');
				$("#preis").focus();

			}
			return;
		}
		else return;   // Wenn der * disabled ist, dann wieder zurück ohne Aktion
	}


	if (ziffer == "CE") {
		if (!disableasterisk) {
			eingabefelder_loeschen();
		}
		else {
			if (document.getElementById('wechselgeld')) document.getElementById("wechselgeld").value = "0";
			//Wenn asterisk disable ist, dann ist es das Wechselgeld - pfui schiach programmiert
			if (document.getElementById('gesamt_betrag')) {
				// das kommt von ein auszahlung
				//document.getElementById("gesamt_betrag").value="0";
				if (element == 'bemerkung') $("#" + element).val('').focus();
				else $("#" + element).val('0').focus();

			}
		}
	}

	else {
		zahl = document.getElementById(element.toString()).value + ziffer;
		// in Version 1.67 führende Null erlauben, Barcode Funktionalität
		if (element == 'wechselgeld' || element == 'enthUst' || element == 'gesamt_betrag') {
			zahl = zahl.replace(/^0+(?!\.|$)/, '');
			//Schneide führende 0 weg, wenn nur 0 ist dann lass es stehen für kassa eröffnen und Ein- Auszahlung ust u. gesamtbetrag Feld
		}
		document.getElementById(element.toString()).value = zahl;
		$("#" + element).focus();
	}


	//set_focus();			geändert, set_focus setzt immer aufs preis/ean feld -> nicht immer richitg
}

function ziffer_gedrueckt_gutscheinmodal(ziffer) {

	activeElem = $("#gutschModalFocusIndicator").val();
	if (ziffer == 'Enter' && activeElem == 'gutscheinKarteModalIp') {
		var e = jQuery.Event("keypress");
		e.which = 13; //choose the one you want
		e.keyCode = 13;
		$("#gutscheinKarteModalIp").trigger(e);
	}
	else if (ziffer == 'Enter' && activeElem != 'gutscheinKarteModalIp') {
		return false;
	}
	else if (ziffer == 'CE') {
		$("#" + activeElem).val('').focus();

	}
	else if (ziffer == '.' && activeElem == 'gutscheinKarteValueToLoad') {
		str = document.getElementById(activeElem.toString()).value;
		if (str.indexOf('.') === -1) document.getElementById(activeElem.toString()).value = str + ziffer;
		else return false;

	}
	else if (ziffer == '.' && activeElem != 'gutscheinKarteValueToLoad') {
		return false;
	}
	else if (ziffer == '-' && activeElem == 'gutscheinKarteValueToLoad') {
		str = document.getElementById(activeElem.toString()).value;
		if (str.indexOf('-') === -1) document.getElementById(activeElem.toString()).value = ziffer + str;
		else document.getElementById(activeElem.toString()).value = document.getElementById(activeElem.toString()).value.replace("-", "");

	}
	else if (ziffer == gutscheinPrefix) {
		if (activeElem == 'gutscheinKarteModalIp') {
			str = document.getElementById(activeElem.toString()).value;
			if (str.indexOf(gutscheinPrefix) === -1) document.getElementById(activeElem.toString()).value = ziffer + str;
		}
	}
	else {
		zahl = document.getElementById(activeElem.toString()).value + ziffer;
		if (activeElem == 'gutscheinKarteValueToLoad') zahl = zahl.replace(/^0+(?!\.|$)/, '')  //Schneide führende 0 weg, wenn nur 0 ist dann lass es stehen
		document.getElementById(activeElem.toString()).value = zahl;
	}
}

function ziffer_gedrueckt_change_modal(zKey) {
	if (zKey == 'CE') { $("#zahlungChangeBonId").val(''); }
	else if (zKey == '*') { console.log(zKey); }
	else {
		var tmpValue = $("#zahlungChangeBonId").val();
		tmpValue += zKey
		$("#zahlungChangeBonId").val(tmpValue);
	}

}

function formatNumberKp(pparams, event = false) {
	if (pparams.value.indexOf(',') != -1) {
		corrVal = pparams.value.replace(',', '.');
		if (corrVal != '.' && isNaN(corrVal * 1) == true) {
			corrVal = "Eingabe Fehler.";
			if (pparams.id == 'stueck') $('#error_message').html(' Ungültiger Wert im Eingabefeld Stückzahl.');
		}

		$('#' + pparams.id).val(corrVal);
	}
	if (pparams.id == 'gesamt_betrag') {
		if (isNaN(pparams.value)) $(".ea_buchung_durchfuehren").prop("disabled", true);
		else $(".ea_buchung_durchfuehren").prop("disabled", false);
	}
	else if (pparams.id == 'wechselgeld') {
		// führende 0 wegschneiden
		zahl = pparams.value.replace(/^0+(?!\.|$)/, '');
		if (isNaN(zahl)) {
			zahl = zahl.replace(/[^0-9\.]+/g, "");
		}
		$('#' + pparams.id).val(zahl);
	}



}

// check and correct the input by phpmyEdit fields. this fields do not have id's so we have do handle this by class names
$(document).ready(function () {
	$("input.sitPos_replaceComma[type=text]").keyup(function (e) {
		$(e.currentTarget).prop({ 'id': 'temp_id' });
		formatNumberKp(this);
	});

	$(".selectOnClick").click(function () {
		$(this).select();
	});

});



function retourgeldDialog(moneyGet, moneyReturn, billSum) {

	// Die Beträge werden als String übergeben, in ajax_function formatiert.
	$("#dialog-confirm").html("<div class='retourgeldDialogDiv'><div class='retourgeldDialogTxt' >Betrag Erhalten: </div><div id='retourgeldDialogBetr' class='retourgeldDialogBetr'>" + moneyGet + "</div><div class='cclear'></div><div class='retourgeldDialogTxt' >Retourgeld: </div><div class='retourgeldDialogBetr'>" + moneyReturn + "</div><div class='cclear'></div></div>");
	$("#dialog-confirm").dialog({
		resizable: false,
		open: function (event, ui) { $(".ui-dialog-titlebar-close", ui.dialog | ui).hide(); },
		modal: true,
		title: '',
		height: 'auto',
		width: 400,
		position: { my: "center", at: "center", of: "#wrapper" },
		dialogClass: 'retourgeldDialog',
		buttons: {
			"1": {
				id: 'retourgeldButClose', text: 'Fenster schließen', click: function () {
					$(this).dialog("close");
				}, "class": " button_gross orange"
			}
		}

	});

}

//   gesamten Bon Löschen Funktion !!!!
function fnOpenNormalDialog() {

	if ($('#aktueller_bon').val() === undefined) { return false; }
	else currentBon = $('#aktueller_bon').val();

	$("#dialog-confirm").html("<p class='bonStornoDialogTxt' >Gesamten Bon, " + currentBon + " L&ouml;schen </p>");
	$("#dialog-confirm").dialog({
		resizable: false,
		open: function (event, ui) { $(".ui-dialog-titlebar-close", ui.dialog | ui).hide(); },
		modal: true,
		title: '',
		height: 'auto',
		width: 400,
		position: { my: "center", at: "center", of: "#wrapper" },
		dialogClass: 'bonStornoDialog',
		buttons: {
			"1": {
				id: 'bonStornoDialogButL', text: "Bon Stornieren", click: function () {
					deleteOpenBon();
					$(this).dialog("close");
				}, "class": "bonStornoButTxt"
			},
			"2": {
				id: 'bonStornoDialogButR', text: 'Abbrechen', click: function () {
					$(this).dialog("close");
					$("#toggle").val('preis');
					$("#preis").focus();
					console.log('ges bon del abbrechen !! ' + $("#toggle").val());
				}, "class": "bonStornoButTxt"
			}
		}
	});
}

function deleteOpenBon() {
	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=deleteOpenBon";
	
	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

	if (resp.toLowerCase().indexOf('error') !== -1) { $('#errorDiv').html(resp).css({ 'visibility': 'visible' }); }
	else if (resp.toLowerCase().indexOf('success') !== -1) {
		resp.substr(resp.indexOf("--->") + 1);	// hier könnte man die höchste bon Id herauslesen die im retourstring enthalten ist, wird aber nach dem reload aus der session gelesen 
		//window.location.replace("kassieren.php");
		bon_anzeigen("");
		//10.05.2017 Nach löschen wurde manchmal der Aktuelle Warenkorb auf 1 gesetzt
		//window.location.replace("kassieren.php");
	}
}



function userLogOff(userId) {
	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "user_login.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=logOff&userId=" + userId;

	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

}

/*         kp set- and get- session by javascript/ajax 
---------------------------------------------------------*/
function setSession(warenkorbId) {

	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=setSession&warenkorbId=" + warenkorbId;

	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;
	if (resp.toLowerCase().indexOf('error') !== -1) alert(resp);
	else $('#aktueller_bon').val(warenkorbId);
}

function getSessionByName(sessionName) {
	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=getSessionByName&sessionName=" + sessionName;

	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

	return resp;

}

/* Kunden im Rechung abschl Modal suchen
-------------------------------------------------------------------*/
function searchCustomer(searchStrg, source) {
	
	if (((source == 'rechnungsModal' || source == 'gutscheinModal' || source == 'gutscheinAdminModal') && searchStrg.length > 0) || source == 'bonDialog') {

	/*
		xmlhttp = GetXmlHttpObject();
		xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
		sendCont = "functionKey=searchCustomer&searchStrg=" + searchStrg + "&callSource=" + source;
		
		xmlhttp.send(sendCont);
		
		resp = xmlhttp.responseText;		

		if (source == 'rechnungsModal') {
			$('#searchResultDiv').css({ 'visibility': 'visible' }).html(resp);
			if (searchStrg.length == 0) $('#searchResultDiv').css({ 'visibility': 'hidden' }).html('');
		}
		else if (source == 'bonDialog') {
	
			$('#searchResultDialogDiv').css({ 'visibility': 'visible' }).html(resp);
			// cursor immer ans ende stellen
			$("#customerDialoSearchField").focus();
			tTmpVal = $("#customerDialoSearchField").val();
			alert(tTmpVal);
			$("#customerDialoSearchField").val('');		//   muss sein !!!!
			$("#customerDialoSearchField").val(tTmpVal);
	
	
		}
		else if (source == 'gutscheinModal' || source == 'gutscheinAdminModal') {			// sind hier zwei verschiedene files kassieren & anlegen_gutsch darum geht das
			$('#searchResultGutscheinDiv').css({ 'visibility': 'visible' }).html(resp);
		}
*/
		
		var data = "functionKey=searchCustomer&searchStrg=" + searchStrg + "&callSource=" + source;
		
        $.post("ajax_funktionen_kp.php",data,function(data, status, xhr){  //Callback function
			if (source == 'rechnungsModal') {
				$('#searchResultDiv').css({ 'visibility': 'visible' }).html(data);
				if (searchStrg.length == 0) $('#searchResultDiv').css({ 'visibility': 'hidden' }).html('');
			}
			else if (source == 'bonDialog') {
		
				$('#searchResultDialogDiv').css({ 'visibility': 'visible' }).html(data);
				// cursor immer ans ende stellen
				$("#customerDialoSearchField").focus();
				tTmpVal = $("#customerDialoSearchField").val();
				//alert(tTmpVal);
				$("#customerDialoSearchField").val('');		//   muss sein !!!!
				$("#customerDialoSearchField").val(tTmpVal);
		
		
			}
			else if (source == 'gutscheinModal' || source == 'gutscheinAdminModal') {			// sind hier zwei verschiedene files kassieren & anlegen_gutsch darum geht das
				$('#searchResultGutscheinDiv').css({ 'visibility': 'visible' }).html(data);
			}
		});
	
	}

	

}

function kdInfoPreisgrAnzeigen() {

	$.ajax({
		type: "POST", url: "ajax_funktionen_kp.php", dataType: "html", data: { functionKey: 'kdInfoPreisgrAnzeigen' }, async: true,
		success: function (ajaxResponse) {
			if (checkJson(ajaxResponse) == true) {
				respArray = JSON.parse(ajaxResponse);

				$("#customer-search").html(respArray[1]);
				$("#preisgrInfoButton").css({ 'display': 'none' });
				console.log("kdInfoPreisgrAnzeigen -> " + respArray[0] + " / " + respArray[2]);

			}
			else {
				console.log("Kein Json response -> " + ajaxResponse);
			}

		}
	});

}

function sselectCust(custId, callSource) {

	if (typeof kundenAuswahlToInfo !== 'undefined' && kundenAuswahlToInfo == 'ja' && callSource == 'bonDialog') {
		// Der aufruf vom Kunden über das kunden search Fenster wird auf kunden aufruf über bonierfunktion umgeleitet, soll sich gleich verhalten wir Kundenkarte scannen (ean13)
		// 6 stellige kd nr /id aus kunden Table auf länge 6 mit führenden 0 auffüllen
		custX = custId.padStart(6, '0');
		// präfix und checksum ersatz hinzufügen 
		custX = '241234' + custX + '7';
		produkt_ean13_bonieren(custX);
		return false;
	}

	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=writeCustomerToDb&customerId=" + custId + "&callSource=" + callSource;

	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

	//console.log("response von custToDb: \n"+resp);
	
	if (callSource == 'rechnungsModal') {
		//	modal.style.display = "none";
		$('#kundenSearchModalField').val('');
		$('#searchResultDiv').html('').css({ 'visibility': 'hidden' });
		$('#error_message').html('Kunde "' + custId + '" dieser Rechung zugeordnet.');
		bon_anzeigen("");
	}

	else if (callSource == 'bonDialog') {

		if (typeof kundenAuswahlToInfo !== 'undefined' && kundenAuswahlToInfo == 'ja') {
			if (/Kein offener Bon,/.test(resp)) {
				console.log(custId + " - " + callSource + " - " + resp);
			}
			else {
				console.log(custId + " - " + callSource + " " + resp);
			}

			bon_anzeigen("");
		}
		else {
			$('#kundenSearchDialogField').val('');
			$('#searchResultDialogDiv').html('').css({ 'visibility': 'hidden' });
			$("#customer-search").dialog("close");
			$('#error_message').html('Kunde "' + custId + '" dieser Rechung zugeordnet.');
			if (/Kein offener Bon,/.test(resp)) {
				custN = resp.replace("Kein offener Bon, ", "");
				$('#bon_sum_div_customer_name').html(custN);
				// bon_anz .. würde bei leerem bon den kunden wieder aus dem anzeigefeld löschen
			}
			else bon_anzeigen("");
		}
	}
	else if (callSource == 'ean13call') {
		if (/Kein offener Bon,/.test(resp)) {
			console.log("-" + custId + " ---- " + callSource + " kein offener_bon " + resp);
		}
		else {
			//console.log(custId+" ---- "+callSource+" im else-> schon offener_bon ?-??? "+resp);
		}
		bon_anzeigen("");
	}
	else if (callSource == 'gutscheinModal' || callSource == 'gutscheinAdminModal') {
		//$('#kundenSearchModalField').val('');
		$('#selectedCustGutschModal').html(resp);
		$("#gutscheinKarteCustId").val(custId);
		$("#kundenSearchGutscheinModalField").val("");
		$('#searchResultGutscheinDiv').html('').css({ 'visibility': 'hidden' });
		if (custId > 0) $("#gsKarteClearCustfieldBut").css({ "display": "block" });
	}
	else if (callSource == 'ediImport') {
		console.log(custId + " ---- " + callSource + " #### " + resp);
		if (/Kein offener Bon,/.test(resp)) {
			custN = resp.replace("Kein offener Bon, ", "");
			$('#bon_sum_div_customer_name').html(custN);
			// bon_anz .. würde bei leerem bon den kunden wieder aus dem anzeigefeld löschen

		}
		else bon_anzeigen("");
	}


}

/* mit Funktions Button Aufrifen-------		*/
/*	closeBtnText: "Was auch immer"		*/

function clearSelectedCustomer(callSource = false, aAction = false) {
	if (aAction == 'dDelete') {
		xmlhttp = GetXmlHttpObject();
		xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
		sendCont = "functionKey=clearSelectedCustomer";

		xmlhttp.send(sendCont);
		resp = xmlhttp.responseText;

		if (resp.toLowerCase().indexOf('error') !== -1) { alert(resp); }
		else if (resp.toLowerCase().indexOf('success') !== -1) {
			if (callSource == 'rechnungsModal') {

				$('#kundenSearchModalField').val('');
				$('#searchResultDiv').html('').css({ 'visibility': 'hidden' });
			}
			else if (callSource == 'bonDialog') {
				$('#kundenSearchDialogField').val('');
				$('#searchResultDialogDiv').html('').css({ 'visibility': 'hidden' });
				$("#customer-search").dialog("close");
			}
			else if (callSource == 'custfailed') {
				$('#error_message').html('Kunde nicht gefunden !');
			}
			bon_anzeigen("");
		}


	}
	else if (callSource == 'gutscheinModal') {
		$('#selectedCustGutschModal').html('');
		$('#gutscheinKarteCustId').val(0);
		$('#kundenSearchGutscheinModalField').val('');
		$('#searchResultGutscheinDiv').html('').css({ 'visibility': 'hidden' });
		$("#gsKarteClearCustfieldBut").css({ "display": "none" });

	}
	else if (callSource == 'gutscheinAdminModal') {
		$('#selectedCustGutschModal').html('');
		$('#gutscheinKarteCustId').val(0);
		$('#kundenSearchGutscheinModalField').val('');
		$('#searchResultGutscheinDiv').html('').css({ 'visibility': 'hidden' });
		$("#gsKarteClearCustfieldBut").css({ "display": "none" });

	}

	else {
		if (callSource == 'rechnungsModal') {
			$('#kundenSearchModalField').val('');
			$('#searchResultDiv').html('').css({ 'visibility': 'hidden' });
		}
	}


}

function loyality_card_suchen(e) {
	var kundennr = document.getElementById("customerDialofLoyalityNr").value;

	e.preventDefault();
	$.ajax({
		type: "POST",
		url: "kunde_loyality_card.php",
		dataType: "html",
		data: { kundennr: kundennr, funktion: "loyality_card_suchen" },
		async: true,
		success: function (html) {
			//$("#produkte").html(html);
			$('#customer-search').dialog("close");
			//return(false);
			bon_anzeigen("");
		}
	})
	//set_focus();
}



function cClearCustSearchField() {
	$("#customerDialoSearchField").val("").focus();
	searchCustomer('', 'bonDialog');
}

//onclick=\"clearSelectedCustomer('rechnungsModal', 'dDelete')\"




/* Load Warebkorbe     nicht in verwendung !!!!!!!!
-------------------------------------------------------------------*/
function loadCartKp() {
	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=loadCart";

	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;
	if (resp.toLowerCase().indexOf('error') !== -1) { 			//	alert(resp);
		dialogContent = "<p>" + resp + "</p>";
		openGeneralDialog('loadCartAjax', 'Datenbank Error', dialogContent, 'wrapper');
	}
	else {
		//	$("#menue_warenkoerbe").css({"width":"auto"});

		$("#menue_warenkoerbe").html(resp);
		wrapperWidth = $("#wrapper").width();
		cartsWidth = $("#menue_warenkoerbe").width();
		posLeft = (wrapperWidth - cartsWidth) / 2;
		$("#menue_warenkoerbe").css({ "margin-left": posLeft });

	}




}



/* check the format of the customer inputet values
-------------------------------------------------------------------*/
function inputTestFunction(ipVal) {
	if (ipVal.indexOf(',') != 1) {
		corrVal = ipVal.replace(',', '.');
		if (isNaN(corrVal * 1) == true) {
			corrVal = "eingabe fehler !!!!!!!!!";
		}
	}
	else corrVal = ipVal;
	$('#inputTestOp').val(corrVal);

}

/* Test Cart id in input field and session
-------------------------------------------------------------------*/

function checkCartLoad() {
	$("#checkWkidField").val($("#aktueller_bon").val());
	sessionName = "aktuellerWarenkorb";

	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=getSession&sessionName=" + sessionName;

	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

	$("#checkWkidSes").val(resp);

	warenkoerbe_anzeigen();
}

/* Menu Links Slider 
-------------------------------------------------------------------*/

function checkThisWith(id) {
	zz = $("#" + id).width();
	yy = $("#" + id).css('font-size').replace(/[^\d.]/g, '');
	$("#testXX").html("--" + zz + " -/- " + yy);

}


function checkAjax() {
	$("#checkRunningAjax").val($.active);
}

$(document).ready(function () {

	if (typeof MobileDeviceIndicatorTische !== 'undefined' && MobileDeviceIndicatorTische == true) {

		refSize = Math.floor($("#wrapper").width() - $(".roomMenuListDiv").width()) - 10;
		menHeight = $(".selectRoomMenuDiv").height();

		if (menHeight > refSize) logoutButSize = refSize;
		else logoutButSize = menHeight;

		if (logoutButSize > 75 || !menHeight) { logoutButSize = 75; }


		$("#menuReiterLinks").attr("src", "images/logoutIcon.png").css({ "position": "absolute", "width": logoutButSize + "px", "height": logoutButSize + "px", "left": "5", "top": "5" });
		$("#menuReiterLinks").click(function () {
			window.location.href = 'user_logoff.php';
		});
		return false;

	}


	menuHeight = $("#menu").height();
	menuIconSize = menuHeight - 4;
	menuIconPos = menuHeight + 1;

	if (menuIconSize > 75) {
		menuIconSize = 75;
		menuIconPos = 80;
	}
	$("#menuReiterLinks").animate({ "height": menuIconSize, "width": menuIconSize, "right": -menuIconPos }, 500);
	$("#menuReiterLinks").click(menuFunction = function () {

		//	alert(menuWidth);
		var animateTimeSet = 650;
		var kpElem = $("#menu_links_slider");
		var kpMenuContent = $("#menue_links_sliderCont");
		if (kpElem.width() > 100) {
			kpElem.animate({ height: '75px', opacity: '0.5' }, animateTimeSet);
			kpElem.animate({ width: '1px', left: '-2px', opacity: '1' }, animateTimeSet);
			$("#menuOpenCoverDiv").animate({ width: '0', height: '0' }, animateTimeSet, function () { $(this).remove(); });
		}
		else {
			if ($("#wrapper").length) { targetToOpen = "#wrapper"; winHeight = $('#wrapper').height(); openCover = true; }
			else if ($("#wrapper_admin").length) { targetToOpen = "#wrapper_admin"; winHeight = $('#wrapper_admin').height(); openCover = true; }
			else if ($("#wrapper_bon").length) { targetToOpen = "#wrapper_bon"; winHeight = $('#wrapper_bon').height(); openCover = true; }
			else { winHeight = 600; openCover = false; }

			if (openCover == true) { $(targetToOpen).append("<div id='menuOpenCoverDiv' class='menuOpenCoverDiv' onclick='menuFunction()' ></div>"); }

			refFontSize = $("#mainMenuLeftUser").css('font-size').replace(/[^\d.]/g, '');
			refWidth = $("#mainMenuLeftUser").outerWidth();

			//geändert RFR am 05.07.2020 - das unten ist eh das gleiche egal wie groß die Font Size ist
			// wegen Filialsystem Menü muss es größer sein
			//if(refFontSize <= 14)kpElemWidth = refWidth*(refFontSize/7);
			//else kpElemWidth = refWidth*(refFontSize/7);	// die breite der menu elemente abhängig von der Menu Schrift größe 

			kpElemWidth = refWidth * (refFontSize / 4);

			if ($("#adminMenu").length) kpElemWidth += refWidth * .9;
			if ($("#salesMenuBut").length) kpElemWidth += refWidth * .5;

			kpElem.animate({ width: kpElemWidth + 'px', left: '1px', opacity: '0.5' }, animateTimeSet);
			kpElem.animate({ height: winHeight, opacity: '0.99' }, animateTimeSet);
			kpMenuContent.animate({ overlow: 'visible' }, animateTimeSet);
			$("#menuOpenCoverDiv").animate({ width: '100%', height: '100%' }, animateTimeSet);
		}
	});
	// pruefen ob es sich um ein mobile device handelt
	var userAgent = navigator.userAgent;
	if (userAgent.toLowerCase().indexOf('windows') !== -1) {
		var OsOutput = "Betriebssytem: Windows";
		//	$("body").addClass("devicePc");

		//   test für die mobile, hat hier aber    nichts zu suchen, weil es genau nicht auf windows reagieren soll  hier   !!!!!!!!! 
		/*		
			$('input[type="text"]').focus( function(){ 
				$(this).blur();
			})
		*/

	}
	else if (userAgent.toLowerCase().indexOf('android') !== -1) {
		var OsOutput = "Betriebssytem: Andriod, Mobil Divice";
		$("body").addClass("deviceMobile");
	}
	//	$("#diviceCheckOp").html(OsOutput);
	/*
	  $(function() {
			$( "#dasDiv" ).draggable();
		});
	*/
});

/* letzten Kundenbeleg von dem EC Terminal abholen und drucken
-------------------------------------------------------------------*/
function ec_reprintBon() {

	$.ajax({
		type: "POST",
		url: "ajax_funktionen.php",
		dataType: "html",
		data: { funktion: "EC_bon_reprint" },
		async: true,
		success: function () {

		}
	});


}

/* letzen bgeschlossenen Bon ausdrucken (reprint)
-------------------------------------------------------------------*/
function reprintBon(displayLenght) {
	if (invoicebonPdfPrint == 'ja') printTarget = "bon_ausdrucken_pdf";
	else printTarget = "bon_ausdrucken";

	$.ajax({
		type: "POST",
		url: "ajax_funktionen.php",
		dataType: "html",
		data: { funktion: printTarget, requestFunktion: "bonReprint" },
		async: true,
		success: function (respPrint) {
			console.log("global js Zeile 1256: " + respPrint);
			if (printTarget == "bon_ausdrucken_pdf") {
				respArray = JSON.parse(respPrint);
				if (respArray[0] > 0 && respArray[1] == '0') {
					$('#error_message').html('Bon Nr. ' + respArray[0] + ' Nachdruck ausgeführt');
					bon_anzeigen();
				}
				else $('#error_message').html('Fehler beim Bon Nachdruck.');

			}
			else if (printTarget == "bon_ausdrucken") {
				$("#ausdruck").html(respPrint);
				seite_drucken(false, false, false, false);

				bon_anzeigen();

			}


		}
	});


}

/* Rechung bzw bon Vordrucken, erstellung von  Ausdruck wie Rechung ohne abgeschlossenen Bon zu erstellen und ohne den offenen Bon zu löschen
-------------------------------------------------------------------*/
function rechnungsVordruck() {
	$.ajax({
		type: "POST",
		url: "ajax_funktionen.php",
		dataType: "html",
		data: { funktion: "rechnungsVordruckErstellen" },
		async: true,
		success: function (respRechVordr) {
			if (respRechVordr.toLowerCase().indexOf('error') !== -1) $('#error_message').html('Fehler beim Bon Vordruck aufgetreten.');
			else if (respRechVordr.toLowerCase().indexOf('warenkorb ist leer') !== -1) $('#error_message').html('Warenkorb ist leer.');
			else $('#error_message').html('Bon Vordruck ausgeführt');

			set_focus();
		}
	});

}

/* Funktionen Bon Zussatz Text			
-------------------------------------------------------------------*/

function insertBonAddTxt(dbId = false, dbContent = false, tTime = false) {
	if (dbId !== false) {
		//console.log("result function -> insertBonAddTxt id: "+dbId+" content:"+dbContent);
		var cursorPos = $("#bonZusatzTxtarea").prop('selectionStart') * 1;
		var currTxt = $("#bonZusatzTxtarea").val();
		if (cursorPos > 0 && currTxt.length > 0) {
			var strPart1 = currTxt.slice(0, cursorPos);
			var strPart2 = currTxt.slice(cursorPos, 300);
			if (currTxt.charCodeAt(cursorPos - 1) == 10) strSeperator = "";
			else strSeperator = " ";
			if (tTime !== false) dbContent = dbContent + " " + tTime;
			var xTxt = strPart1 + strSeperator + dbContent + " " + strPart2 + " ";

			$("#bonZusatzTxtarea").val(xTxt + '\n');
			$("#bonZusatzTxtarea").focus();
		}
		else {
			if (tTime !== false) dbContent = dbContent + " " + tTime;
			$("#bonZusatzTxtarea").val(dbContent + '\n');
			$("#bonZusatzTxtarea").focus();
			//console.log("im else--->   cursor pos "+cursorPos+" str.length: "+currTxt.length);
		}
	}
	else {
		console.log("result function -> id nicht erkannt");
	}

	if ($("#bonZusatzTxtarea").val().length > 290) {
		var areaContent = $("#bonZusatzTxtarea").val();
		cuttedContent = areaContent.substr(1, 290);
		$("#bonZusatzTxtarea").focus();
		$("#bonZusatzTxtarea").val(cuttedContent);
		console.log("  cursor pos: " + $("#bonZusatzTxtarea").prop('selectionStart') * 1);
		$("#bonZusatzTxtMsgField").html("Eingabe auf 290 Zeichen reduziert.");

	}
}


function openAddTxtModal(dDirection) {
	if (dDirection == 'cClose') {
		$("#bonZusatzTxtModal").css({ "display": "none" });
		console.log("was steht in der txtarea: " + $("#bonZusatzTxtarea").val());
		//$("#bonZusatzTxtMsgField").html("");
		set_focus();
	}
	else {
		$("#bonZusatzTxtModal").css({ "display": "block" });

		var openBonCont = $('#bonContent > .bon_summe').length;
		//if ($('#bonContent > .line_unselected').length || $('#bonContent > .line_selected').length){
		if ($("#bonZusatzTxtarea").prop('disabled') == true) $("#bonZusatzTxtarea").prop('disabled', false).css({ "text-align": "left" });
		bonZusatzTxt = $("#bonZusatzTxtDiv").html();
		$("#bonZusatzTxtarea").val(bonZusatzTxt).focus();
		if ($(".zusatztTxtSetBut").prop('disabled') == true) $(".zusatztTxtSetBut").prop('disabled', false).css({ "cursor": "pointer" }).addClass("orange");
		//}
		/*else{
			$("#bonZusatzTxtarea").prop('disabled', true);
			$("#bonZusatzTxtarea").val("Bon Container ist leer\nFunktion nicht verfügbar").css({ "text-align":"center"	});
			$(".zusatztTxtSetBut").prop('disabled', true).css({ "cursor":"default"}).removeClass( "orange" );
		}
		*/
	}



}

function bonZusatzTxtSet(deleteTxt = false) {
	if (deleteTxt == 'dDelete') {
		$("#bonZusatzTxtarea").val('');
		zusatzTxt = "";
	}
	else zusatzTxt = $("#bonZusatzTxtarea").val();

	console.log("delete-? " + deleteTxt + " -- " + $("#bonZusatzTxtarea").val() + "::: " + zusatzTxt);

	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'bonZusatzTxtAdd', zusatzTxt: zusatzTxt },
		async: true,
		success: function (ajaxResponse) {
			console.log("zusatz txt ajax resp:  " + ajaxResponse + " txt area content: " + $("#bonZusatzTxtarea").val());


			if (checkJson(ajaxResponse) == true) {
				respArray = JSON.parse(ajaxResponse);
				if (respArray[0].toLowerCase().indexOf('error') !== -1) {
					$("#bonZusatzTxtMsgField").html(respArray[1]);
				}
				else if (respArray[0].toLowerCase().indexOf('deleted') !== -1) {
					$("#bonZusatzTxtMsgField").html(respArray[1]);
					$("#bonZusatzTxtDiv").html("");
					if (deleteTxt == false) {
						setTimeout(function () { openAddTxtModal('cClose'); }, 1500);
					}
					setTimeout(function () { $("#bonZusatzTxtMsgField").html(''); }, 2500);
				}
				else {
					$("#bonZusatzTxtMsgField").html(respArray[1]);
					$("#bonZusatzTxtDiv").html(respArray[2]);
					if (deleteTxt == false) {
						setTimeout(function () { openAddTxtModal('cClose'); }, 750);
					}
					setTimeout(function () { $("#bonZusatzTxtMsgField").html(''); }, 1000);
				}

			}
			else {
				console.log(ajaxResponse);
			}

		}
	});
}

function calcRetourGeld() {
	// checken was im Feld "Rückgeld" steht     default = ...			, 'cursor':'pointer', 'opacity':'0.25'			, , 'opacity':'1'

	var retGeld = $("#rueck_zahlungsart").val().replace(',', '.') * 1;
	if (retGeld >= 0) {
		$("#zahlungAbgeschlBut").attr('disabled', false).css({ 'opacity': 1, 'cursor': 'pointer' });
		returnValue = "zahlung enabled.";
	}
	else {
		$("#zahlungAbgeschlBut").attr('disabled', true).css({ 'opacity': 0.25, 'cursor': 'default' });
		returnValue = "zahlung disabled.";
	}

	return returnValue;
}


/* Funktion EAN13 bonieren oder EAN13 Kundenkarten No. soMa */
function produkt_ean13_bonieren(ean13Val) {
	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'ean13_bonieren', ean13Val: ean13Val },
		async: false,
		success: function (ajaxResponse) {
			
			if (checkJson(ajaxResponse) == true) {
				respArray = JSON.parse(ajaxResponse);
				
				if (respArray[0].toLowerCase() == 'error') {
					//console.log(respArray[0]+ " ---- "+respArray[1]+" ---");
					//playSoundError();
					$('#error_message').html(respArray[1]);
					produkt_bonieren(ean13Val,true);
					bon_anzeigen(false, false);
				}
				//array("kundenKarte", $returnHtml, $kartenSperre, $custCardNo ));
				else if (respArray[0].toLowerCase() == 'kundenkarte') {
					playSoundOK();
					openCutomerSearchDialog("optionSelect");
					$("#customer-search").html(respArray[1]);
					if (respArray[2] > 0) {
						$("#searchDialogButR").css({ 'visibility': 'hidden' });
						//console.log("Kunde gesperrt !!!");
					}
					else {
						sselectCust(respArray[3], 'ean13call');
					}
				}
				else if (respArray[0].toLowerCase() == 'kundefailed') {
					clearSelectedCustomer('custfailed', 'dDelete');
					//$('#error_message').html('Kunde nicht gefunden !');
					playSoundError();
				}
				else {
					$('#error_message').html(respArray[1]);
					//bon_anzeigen(markierte_id=false, openToEdit=false)

					playSoundOK();
					bon_anzeigen(false, false);
				}

			}
			else {
				playSoundError();
				console.log(ajaxResponse + "\nkein JSON, ean bonieren response");
			}
		}
	});




}



/* Funktion Zahlung nach bonieren ändern */

function changePayment(dDirection) {
	if (dDirection == 'cClose') {
		$("#zahlungAendernModal").css({ "display": "none" });
		$("#zahlungChangeBonId").val("");
		$("#changeZahlungMsgBox").html("");
		$("#changeZahlungSelect option")[0].selected = true;
		$("#toggle").val('preis');
		$("#preis").focus();
	}
	else {
		$("#zahlungAendernModal").css({ "display": "block" });
		$("#toggle").val('zahlungChangeBonId');
		$("#zahlungChangeBonId").focus();
	}

}

function setPaymentChange() {
	var bonId = $("#zahlungChangeBonId").val();
	var optIx = $("#changeZahlungSelect").prop('selectedIndex');
	if (isNaN(bonId) || bonId == '' || optIx <= 0) {
		$("#changeZahlungMsgBox").html('Ungültige Bon Nr. oder Zahlungs Auswahl Fehler !!!');
	}

	else {
		var zahlungsArt = $("#changeZahlungSelect").val();
		$("#changeZahlungMsgBox").html('Bon Nr: ' + bonId);
		$.ajax({
			type: "POST",
			url: "ajax_funktionen.php",
			dataType: "html",
			data: { funktion: 'changeZahlungOnBon', bonId: bonId, zahlungsArt: zahlungsArt },
			async: true,
			success: function (response) {
				$("#zahlungChangeBonId").val("");
				$("#changeZahlungSelect option")[0].selected = true;
				$("#changeZahlungMsgBox").html(response);
				//$("#lieferscheineMessageDiv").html(resp);
			}
		});

	}

}

function changeZahlGutscheinMsg(zahlArt) {
	$("#changeZahlungMsgBox").html('');
	if (gutscheinLizenz == 'ja' && ((zahlArt.toLowerCase().indexOf('gutschein') !== -1 ||
		zahlArt.toLowerCase().indexOf('gs') !== -1) && zahlArt.toLowerCase().indexOf('gsart') < 1)) {
		$("#changeZahlungMsgBox").html('Achtung<br />Das Ändern der Zahlung auf ' + zahlArt + ' bewirkt keine Gutscheinbuchungen.<br />Der Wert des Gutscheines bleibt unverändert !!!');
	}


}

/* Funktion Lieferschein erstellen
-------------------------------------------------------------------*/


function lieferscheinErstellen(lieferDatum = false, disableReferenceBonPrint = false) {
	var openBonUnsel = $('#bonContent > .line_unselected').length;
	var openBonSel = $('#bonContent > .line_selected').length;
	var openBonElem = openBonUnsel + openBonSel;

	if (openBonElem < 1) {
		$('#error_message').html('Lieferschein erstellen Fehler. Offener Bon leer.');
		return false;
	}

	if (auftragsLieferterminDrucken == 'ja' && lieferDatum == false) {
		openGeneralDialog('setLieferDatum', 'Liefer Datum für Ausdruck eingeben', '', 'wrapper');
		return false;		// brechen hier ab, die funktion wird dann vom dialog neu aufgerufen, entweder mit gültigen datum od mit true, damit wird der Lieferschein ohne Lieferdatum erstellt		
	}

	else {
		// hier wird ein gültiges datum vom dialog oder ein true erwartet
		//alert("hallo "+disableReferenceBonPrint);
		if (disableReferenceBonPrint == '') disableReferenceBonPrint = false;
		xmlhttp = GetXmlHttpObject();
		xmlhttp.open("POST", "ajax_funktionen.php", false);
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
		sendCont = "funktion=lieferscheinErstellen&lieferDatum=" + lieferDatum + "&disableReferenceBonPrint=" + disableReferenceBonPrint;

		xmlhttp.send(sendCont);
		ajaxResp = xmlhttp.responseText;



		if (ajaxResp.indexOf('browserPrint') !== -1) {
			//ajaxResp.replace('browserPrint', '');
			strData = ajaxResp.split("browserPrint");
			//console.log(" - "+strData[0]+" - "+strData[1]);
			window.open(strData[1], '_blank');
		}
		else console.log("");

		$("#error_message").html(ajaxResp);

		bon_anzeigen();
		warenkoerbe_anzeigen();
	}
}


function loadLieferscheine() {

	lieferschId = $("#lsSearchLsId").val();
	auftragsNr = $("#lsSearchAuftrNr").val();
	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=loadLieferscheine&lieferschId=" + lieferschId + "&auftragsNr=" + auftragsNr;

	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

	$("#lieferscheineFensterLinks").html(resp);

	var spRes = "";
	spRes = resp.split("id='displayMsg' value=")[1].split(" type='hidden")[0];
	spRes = spRes.match(/\d/g);			// macht aus jeder zahl eien array eintrag würede 2,5  beu zweistelliger ls nr sein

	if (spRes !== null) {
		spRes = spRes.join("");				// join macht 25 draus
		if (spRes > 0) {
			displayLieferschein(spRes);
		}
	}
	else {
		$("#lieferscheineFensterRechts").html("");
	}

}

function clearAndLoadLieferscheine() {
	$("#lsSearchLsId").val('');
	$("#lsSearchAuftrNr").val('');
	loadLieferscheine();
}

function displayLieferschein(lieferschein_id) {
	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=displayLieferschein&lieferschein_id=" + lieferschein_id;

	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

	$("#lieferscheineFensterRechts").html(resp);
}

function bon_aus_lieferschein(lieferschein_id) {

	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=bonAusLieferschein&lieferschein_id=" + lieferschein_id;

	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

	if (resp.toLowerCase().indexOf('error') !== -1) {
		$("#lieferscheineMessageDiv").html(resp);
	}
	else if (resp.toLowerCase().indexOf('cartnotempty') !== -1) {
		if (gastroVersion == 'ja') xTxt = 'Tisch';
		else xTxt = 'Warenkorb';
		//console.log(xTxt);
		openGeneralDialog('lieferscheinOffenerBonnichtleer', 'Aktueller ' + xTxt + ' ist nicht leer', '', 'wrapper');


		return false;
		//	
	}

	else {
		window.location.href = 'kassieren.php';

	}


}

function print_lieferschein(lieferscheinId, lieferscheinNr) {
	//console.log("ls data "+lieferscheinId+" / "+lieferscheinNr)
	$.ajax({
		type: "POST",
		url: "ajax_funktionen.php",
		dataType: "html",
		//data: {	funktion:'lieferschein_ausdrucken_pdf', lieferscheinId:lieferscheinId, lieferscheinNr:lieferscheinNr,		},
		data: { funktion: 'lieferschein_ausdrucken_pdf_a4_oder_bon', lieferscheinId: lieferscheinId, lieferscheinNr: lieferscheinNr, },
		async: true,
		//success:function(filename){
		success: function (ajaxResponse) {
			if (checkJson(ajaxResponse) == true) {
				respArray = JSON.parse(ajaxResponse);
				if (respArray[0] == 'success' && respArray[1] == 'printerPrint') {
					$("#lieferscheineMessageDiv").html("Lieferschein: " + lieferscheinNr + ", A4 auf Drucker ");
				}
				else if (respArray[0] == 'success' && respArray[1] == 'browserPrint') {
					window.open(respArray[3], '_blank');
				}
				console.log(respArray);
			}
			else {
				console.log(ajaxResponse + ' Response, Ls print');
			}
		}
	});
}

function loadLieferschByCust(eError = false) {
	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: "loadLieferschByCust" },
		async: true,
		success: function (ajaxResponse) {
			if (checkJson(ajaxResponse) == true) {
				respArray = JSON.parse(ajaxResponse);
				if (eError != false) {
					respArray[0] = "<p id='lsVerrErrorMsg'>" + eError + "</p>" + respArray[0]
				}
				$("#lieferscheineVerrechnungContent").html(respArray[0]);
			}
			else {
				//console.log(ajaxResponse);
			}

		}
	});


}


function lieferscheineVerrechnen() {
	$("#lsVerrErrorMsg").html('');
	var checkedLs = new Array();
	if ($("#lsVerrA4Checkbox").prop("checked") == true) {
		a4Ausgabe = "a4ausgabe";
	}
	else a4Ausgabe = "";
	$('.lsVerrCb').each(function () {
		if ($(this).prop('checked') == true) {
			elemName = $(this).attr("name").replace('dbId', '');
			checkedLs.push(elemName);
		}
	});

	zahlungsSelIx = $('#lsVerrZahlungsSelect option:selected').index();
	zahlungsName = $('#lsVerrZahlungsSelect option:selected').text();

	var lsNrAsString = JSON.stringify(checkedLs);

	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: "lieferscheineVerrechnen", lsData: lsNrAsString, zahlungsSelIx: zahlungsSelIx, zahlungsName: zahlungsName, a4Ausgabe: a4Ausgabe },
		async: false,
		success: function (ajaxResponse) {
			if (checkJson(ajaxResponse) == true) {
				respArray = JSON.parse(ajaxResponse);
				if (respArray[0].toLowerCase() == 'error') {
					loadLieferschByCust(respArray[1]);
				}
				else {
					if (checkJson(respArray[3]) == true) {
						a4PrintArray = JSON.parse(respArray[3]);
						if (a4PrintArray.length > 0) {
							lieferscheinA4print(a4PrintArray);
						}
					}

					loadLieferschByCust(respArray[0]);
				}

			}
			else console.log(ajaxResponse + "\nkein JSON");

		}
	});


}


function lieferscheinA4print(a4PrintArray) {
	for (i = 0; i < a4PrintArray.length; i++) {
		$.ajax({
			type: "POST",
			url: "ajax_funktionen_kp.php",
			dataType: "html",
			data: { functionKey: "lieferscheineVerrechnenA4Print", bonNo: a4PrintArray[i] },
			async: false,
			success: function (ajaxResponse) {
				//console.log(ajaxResponse+"\n");
				// Wenn der response nicht leer ist, dann wurde ein Dateiname zurückgegeben
				if ($.trim(ajaxResponse)) {
					var response = JSON.parse(ajaxResponse);
					window.open(response.filename, '_blank');
				}
			}
		});
	}



}

function displayVerrLs(lsNum) {
	if ($('.lsVerrDetail' + lsNum).css('display') == 'block') {
		$('.lsVerrDetail' + lsNum).css({ 'display': 'none' });
		$('.lsVerrDetailHead' + lsNum).css({ 'display': 'none' });
	}
	else {
		$('.lsVerrDetails, .lsVerrHead').css({ 'display': 'none' });
		$('.lsVerrDetail' + lsNum).css({ 'display': 'block' });
		$('.lsVerrDetailHead' + lsNum).css({ 'display': 'block' });
	}
}


function lieferscheineVerrechnenCheckAll() {
	cbChecked = false;
	$('.lsVerrCb').each(function () {
		if ($(this).prop('checked') == true) cbChecked = true;
	});
	if (cbChecked == false) $('.lsVerrCb').prop('checked', true);
	else $('.lsVerrCb').prop('checked', false);

}



function getReprintContent(displayLenght) {

	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=getReprintContent&reprintListLenght=" + displayLenght;

	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;
	return resp;

}

function sselctBonToReprint(iId) {
	$("#" + iId).addClass("reprintSelect");

}

/*     move table (gastro version) functions
---------------------------------------------------------------*/

function setMoveTableTo() {
	$("#moveTableSetTargetForm").submit();		//  submitet von kassieren auf tische.php
}



/*      automatischer logoff bei kellnerschloss aktion       
----------------------------------------------------------------*/
// e.preventDefault();  verhindert das enter die letzte funktion (click) aufruft 
// getLastEnter -> schaun wir uns die letzten gespeicherten zeichen an, 
//#autologoffChecker -> ist ein div, da schriebt der browser nie rein, input könnte sein wenn focus drauf geht
// mit out wird der vom Kellnerschloss kommende code beendet. 16 zeichen vor "out" ist der kellner KEY.s
logOutIndicator = false;

$(window).keypress(function (e) {					// erklärung findet sich im index.php  wird für logon fast das gleiche verwendet
	// focusElem = $(':focus');
	//console.log(focusElem);

	if ($("#autologoffChecker").length == false) return false;
	var key = e.which;

	keySource = $(e.target).attr("id");		// checken ob "Enter" von der Textarea kommt, ansonsten geht im edit modal/textarea kein zeilenumbruch 
	keySourceAdm = $(e.target).attr("class");

	if (key == 13) {
		getLastEnter = $("#autologoffChecker").html();					//
		logCode = "Out";
		nx = getLastEnter.lastIndexOf(logCode);
		if (nx >= 0 && (getLastEnter.length - logCode.length) == nx) {				// checken ob es ganz hinten, also vor dem "enter" steht
			e.preventDefault();
			$("#autologoffChecker").html(nx + " / " + getLastEnter.length);
			logOutIndicator = true;
			setLogoutSession(true);
			if (typeof supplyPdfPrint !== 'undefined' && supplyPdfPrint == 'ja') printGastroSupply('', '');
			setTimeout(checkPendingRequest, 500);
		}
		// Sharp:
		// login:  a"AB00001B4F8E7901_
		// logout: u"AB00001B4F8E7901_
		// Wenn der letzte Fund 19 Stellen von hinten ist, dann stimmt wurde es gefunden
		logCode = /u"................_/g;
		//logCode=/.._/g;
		match = logCode.exec(getLastEnter);
		nx = logCode.lastIndex;
		//alert("last match found at " + nx);
		if (nx >= 0 && (19 == nx)) {	// checken ob es ganz hinten, also vor dem "enter" steht
			e.preventDefault();
			$("#autologoffChecker").html(nx + " / " + getLastEnter.length);
			logOutIndicator = true;
			setLogoutSession(true);
			if (typeof supplyPdfPrint !== 'undefined' && supplyPdfPrint == 'ja') printGastroSupply('', '');
			setTimeout(checkPendingRequest, 500);
		}

	}
	else {
		var res = String.fromCharCode(key);
		var tmpX = $("#autologoffChecker").html();
		if (tmpX.length > 20) {
			cPosA = tmpX.length - 20;
			tmpX = tmpX.substr(cPosA, 20);							// limitieren die länge wie viel wir mitschreiben, wir müssen vorne wegschneiden
		}
		var newVal = tmpX + res;											// fügen den aus dem feld geholten string mit dem neu hinzugekommen character zusammen
		$("#autologoffChecker").html(newVal); 							// schreiben es wieder in das feld
	}


});

function checkPendingRequest() {
	if ($.active > 0) {
		setTimeout(checkPendingRequest, 1000);
		//console.log("pending -> request -> active");
	}

	else {

		window.location.href = 'user_logoff.php';
		return false;
	}


}



/* Ziffernfeld kassieren Fenster auch für nicht gastro version
-------------------------------------------------------------------*/
function displayNumpad() {
	numPadH = numPadConfigHeight.replace(/\D/g, "");
	bonContainerH = bonContainerConfigHeight.replace(/\D/g, "");
	prodContainerH = productContainerConfigHeight.replace(/\D/g, "");
	var mPadRedH = (100 * parseFloat($('#ziffernblock_reduziert').outerHeight(true)) / parseFloat($('#ziffernblock_reduziert').parent().css('height'))) * 1;


	if ($(".ziffernblock").css("display") == 'block') {
		$(".ziffernblock, #steuereungContent, #steuerung").css({ "display": "none" });
		$("#ziffernblock_reduziert").css({ "display": "block" });

		newBonH = Math.floor((numPadH - mPadRedH) / 2) * 1 + bonContainerH * 1;
		newProdH = Math.floor((numPadH - mPadRedH) / 2) * 1 + prodContainerH * 1;
		$("#bon").css({ "height": newBonH + "%", });
		$("#produkte").css({ "height": newProdH + "%", });

	}
	else if ($(".ziffernblock").css("display") == 'none') {
		$(".ziffernblock, #steuereungContent, #steuerung").css({ "display": "block" });
		$("#ziffernblock_reduziert").css({ "display": "none" });
		$("#bon").css({ "height": bonContainerConfigHeight, });

		$("#produkte").css({ "height": productContainerConfigHeight, });
	}
}


/* logout Session wird fürs kellnerschloss logout verwendet
-------------------------------------------------------------------*/

function setLogoutSession(sesVal) {

	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'setSessionLogout', sessionValue: sesVal },
		async: true,
		success: function (response) {
			console.log(sesVal + ' autologout session gesetzt ' + response);
		}
	});


}


/* Admin Configuration display
-------------------------------------------------------------------*/
function displayConfigDiv(selectedOptionVal, target) {

	$("#currentConfigPage").val(selectedOptionVal);
	$(".configContentDiv").css({ "display": "none" });
	$("#" + selectedOptionVal).css({ "display": "block" });
	//	$("#responseMessageDiv").html("");
	//console.log("glob js -> 1944 -> aufruf aus config option/select !!!");
	// KPE Feb 2021 
	if (selectedOptionVal == 'config_lizenzen') {
		$("#saveConfigGuiBut").text('Bestätigen');
	}
	else {
		$("#saveConfigGuiBut").text('Speichern');
	}

	selectedResolution = $("#selectedResolutionForConfig").val();

	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "include/ajax_function_config.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=processConfigdata&processKey=loadconfigData&processTargetKey=" + selectedOptionVal + "&selectedResolution=" + selectedResolution;

	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

	//console.log(selectedOptionVal+"\n"+resp);

	$("#" + selectedOptionVal).html(resp);

	setConfigCheckbox(selectedOptionVal);

}

function checkLicConfigGui() {
	//console.log(" function checkLicConfigGui ->  Zei 1972 \n\n\n ");		
	$.ajax({
		type: "POST",
		url: "ajax_funktionen.php",
		dataType: "html",
		data: { funktion: 'checkLicConfigGui' },
		async: true,
		success: function (ajaxResponse) {
			//alert(ajaxResponse);
			if (checkJson(ajaxResponse) == true) {
				respArray = JSON.parse(ajaxResponse);
				// das kommt von ajax_funktionen.php und global_functions_2.php -> function checkLicOnKassaOeffnen()
				if (respArray[0].toLowerCase() == 'error') {
					$("#responseMessageDiv").html("<b style='color:red;'>Übertragungs Fehler, prüfen Sie ihre Internet Verbindung.</b><br>" + respArray[1]);

				}
				else if (respArray[0].toLowerCase() == 'xmlsuccess') {
					$("#responseMessageDiv").html("<b style='color:red;'>Lizenz Abstimmung erfolgt.</b>");
				}
				else if (respArray[0].toLowerCase() == 'licgesperrt') {
					$("#responseMessageDiv").html("<b style='color:red;'>Lizenz Abstimmung fehlgeschlagen.<br>Lizenzen gesperrt !</b>");
					console.log("1996 js  ajaxResp License blocked !!! ");
				}
				else if (respArray[0].toLowerCase() == 'hostiderror') {
					$("#responseMessageDiv").html("<b style='color:red;'>Lizenz Abstimmung fehlgeschlagen.<br>" + respArray[1] + "</b>");
				}
				else {
					console.log("1997 undefined ajax json response ! " + respArray[0] + " / " + respArray[1]);
				}

			}
			else {
				console.log("2002 js  ajaxResp native-> " + ajaxResponse);
			}



		}
	});

	setTimeout(function () { displayConfigDiv('config_lizenzen', 'undefinedTarget'); }, 500);
	setTimeout(function () { $("#responseMessageDiv").html(""); }, 7000);
}


/* Admin Configuration save
-------------------------------------------------------------------*/
function saveConfigLayout(reloadLic = false) {

	opVal = "";
	opCheck = 0;
	$("#responseMessageDiv").html("");

	if ($("#currentConfigPage").val() == 'config_kassa_layout') {
		sSelector = "#config_kassa_layout";
	}
	else if ($("#currentConfigPage").val() == 'config_bon_print_list') {
		sSelector = "#config_bon_print_list";
	}
	else if ($("#currentConfigPage").val() == 'config_bon_print_layout') {
		sSelector = "#config_bon_print_layout";
	}
	else if ($("#currentConfigPage").val() == 'config_gastro') {
		sSelector = "#config_gastro";
	}
	else if ($("#currentConfigPage").val() == 'config_system') {
		sSelector = "#config_system";
	}
	else if ($("#currentConfigPage").val() == 'config_email') {
		sSelector = "#config_email";
	}
	else if ($("#currentConfigPage").val() == 'config_userlevel') {
		sSelector = "#config_userlevel";
	}
	else if ($("#currentConfigPage").val() == 'config_lieferschein') {
		sSelector = "#config_lieferschein";
	}
	else if ($("#currentConfigPage").val() == 'config_gutschein') {
		sSelector = "#config_gutschein";
	}
	else if ($("#currentConfigPage").val() == 'config_lizenzen') {
		sSelector = "#config_lizenzen";
		console.log("config Lizenzen ...  2062 global js");
		checkLicConfigGui();
		return false;
	}
	else if ($("#currentConfigPage").val() == 'config_soma') {
		sSelector = "#config_soma";
	}
	else if ($("#currentConfigPage").val() == 'config_filialsystem') {
		if (/^[a-z0-9_]*\w$/gm.test($("#FILIALSYSTEM_KASSA_NAME").val())) {
			sSelector = "#config_filialsystem";
		} else {
			$("#responseMessageDiv").html("Kassaname darf nur aus Kleinbuchstaben, Zahlen und Unterstrichen bestehen!");
			return false;
		}
	}
	else if ($("#currentConfigPage").val() == 'signatureUnitActivate') {
		sSelector = "#signatureUnitActivate";
	}
	else if ($("#currentConfigPage").val() == 'GDPdU_settings') {
		sSelector = "#GDPdU_settings";
	}
	else if ($("#currentConfigPage").val() == 'config_gastro_printer') {
		saveConfigGastroPrinter();
		return;
	}

	else if ($("#currentConfigPage").val() == 'config_additonal_footertext') {
		adminFooterTxtFunction('sSave');
		return;

		// das Footer Txt Gui gabs schon, deswegen wird dir ursprüngliche Save Funktion verwendet, macht Sinn das ist 
		// total anders aufgebaut als die hier verabreiteten. 
	}

	else {

		$("#config_message").css({ "display": "block" }).html("<h3>Kein Bereich Ausgewählt.</h3>");
		return false;
	}



	selectedResolution = $("#selectedResolutionForConfig").val();
	sendCont = "functionKey=processConfigdata&processKey=saveconfigData&selectedResolution=" + selectedResolution + "&";
	if (sSelector == "#config_lizenzen") {
		sendData_a = { functionKey: 'processConfigdata', processKey: 'saveLicensingData', selectedResolution: selectedResolution };
	}
	else sendData_a = { functionKey: 'processConfigdata', processKey: 'saveconfigData', selectedResolution: selectedResolution };

	var config = new Array();
	configuration = [];
	xData = {};
	configuration['functionKey'] = 'saveConfiguration';
	$(sSelector + " input").each(function () {
		var tType = $(this).attr("type");

		if (tType == 'text' || tType == 'password') {
			sendCont += $(this).attr("id") + "=" + $(this).val() + $(this).attr("name") + "&";				// nicht jQuery ajax

			//console.log("config send data -> "+sendCont);

			data_x = { [$(this).attr("id")]: $(this).val() + $(this).attr("name"), }
			if ($(this).attr("id") == 'AUTOMATISCH_BACKUP_PFAD') {
				data_x = { [$(this).attr("id")]: escape($(this).val()), }
			}
			else if ($(this).attr("id") == 'licensingFormKeyIp') {
				data_x = { [$(this).attr("id")]: $(this).val(), }			// für den lizeneintrag brauchen wir den namen nicht
			}
			$.extend(xData, data_x);
		}

		else if (tType == 'checkbox') {
			if ($(this).is(':checked')) {
				if ($(this).attr("id") == 'GASTRO_VERSION') {
					$("#WARENKOERBE_ABLEGEN").prop('checked', false);
				}
				data_x = { [$(this).attr("id")]: $(this).attr("name"), }

				sendCont += $(this).attr("id") + "=" + $(this).attr("name") + "&";			// nicht jQuery ajax
				$.extend(xData, data_x);
			}
			else {
				sendCont += $(this).attr("id") + "=nein&";
				configuration[$(this).attr("id")] = "nein";
				data_x = { [$(this).attr("id")]: "nein", }
				$.extend(xData, data_x);
			}
		}
		else if (tType == 'radio') {
			if ($(this).is(':checked')) {

				if ($(this).attr("name") == 'licenseDelete') {

					//	 var delConf= confirm("Wollen Sie diesen Lizenzschlüssel wirklich löschen ?");
					if (window.confirm("Wollen Sie diesen Lizenzschlüssel wirklich löschen ?")) {
						data_x = { [$(this).attr("name")]: $(this).attr("value"), }
						$.extend(xData, data_x);
					}
					else {
						data_x = { [$(this).attr("name")]: 'deletebreak', }
						$.extend(xData, data_x);
					}

					//	alert("x:  radio and checked: "+$(this).attr("name"));	
				}
			}
		}
	});

	$(sSelector + " select").each(function () {
		sendCont += $(this).attr("id") + "=" + $(this).find('option:selected').attr('name') + "&";				// nicht jQuery ajax
		data_x = { [$(this).attr("id")]: $(this).find('option:selected').attr('name'), }
		$.extend(xData, data_x);
	});

	if ($("#currentConfigPage").val() == 'config_lieferschein') {
		areaContent = $("#adminGuiFussTxtAreaLiefersch").val();

		data_x = { ['AUSDRUCK_EXTRA_FUSSZEILE_AUFTRAG_TEXT']: areaContent, }
		$.extend(xData, data_x);
	}

	sendData = $.extend(sendData_a, xData);
	pageReload = false;

	$.ajax({
		type: "POST",
		url: "include/ajax_function_config.php",
		dataType: "html",
		data: sendData,
		async: false,
		success: function (response) {

			if (checkJson(response) == true) {
				respArray = JSON.parse(response);
				$("#responseMessageDiv").html(respArray[0] + " " + respArray[2]);
				if (respArray[0] > 0 && respArray[1] == 'ja') {				// steht für mehr als 0 einträge gespeichert und mail versenden ist gesetzt
					sendEmail('configUpdate', '');

				}
				if (respArray[3] && respArray[3] == 'yes') {
					pageReload = true;
				}
			}
			else console.log(response);
		}
	});

	setTimeout(function () { $("#responseMessageDiv").html(''); }, 5000);

	displayConfigDiv($("#currentConfigPage").val(), 'undefinedTarget');
	if (sSelector == '#config_system' || pageReload) location.reload();


}

function setConfigCheckbox() {
	$('#adminContent input').each(function () {
		var type = $(this).attr("type");
		if ((type == "checkbox" || type == "radio") && $(this).val() == $(this).attr('name')) {
			$(this).attr("checked", true);
		}
	});
}


/* Admin Config Gui Gastro Printer speichern
-------------------------------------------------------------------*/

function saveConfigGastroPrinter() {
	var x = 0;
	var printers = new Array();
	$('[id^="printerRow_"]').each(function () {
		var id = $(this).attr("id");

		printers.push(x);

		var dbId = $(this).find(".prId").val();
		var prFunction = $(this).find(".prFunction").val();
		var prName = $(this).find(".prName").val();
		if ($(this).find(".prInvoice").is(":checked")) invPr = 'ja';
		else invPr = 'x';
		printers[x] = [dbId, prFunction, prName, invPr];

		x++;

	});


	$.ajax({
		type: "POST",
		url: "include/ajax_functions_gastro.php",
		dataType: "html",
		data: { functionKey: 'saveConfigGastroPrinter', printersArray: printers },
		async: false,
		success: function (response) {

			alert(response);

			//	$("#error_message").html(html);
		}
	})
}



/* Admin Config Gui Additional Footer Text
-------------------------------------------------------------------*/
function adminFooterTxtFunction(funcKey, reloadIndicator = false) {

	$("#adminResponseTxt").html('');

	if (funcKey == "lLoad") {			// wird nimmer verwendet, wird im configContent.php geladen.
		xUrlCode = "";
		//console.log("aufruf von adminFooterTxtFunction    funcKey_: "+funcKey+" relod indi: "+reloadIndicator );
	}

	else if (funcKey == "sSave") {
		footerTxt = $("#adminGuiFussTxtArea").val();
		fooEn = $("#footerPrintEnableCheckBox").prop("checked");
		if (fooEn == true) footerEnabler = "ja";
		else footerEnabler = "nein";
		prodTxtButEn = $("#PRODUKT_TXT_BUTTON").prop("checked");
		//console.log(prodTxtButEn);	
		if (prodTxtButEn == true) prodTxtButEnabler = "ja";
		else prodTxtButEnabler = "nein";

		percentVal = $("#footerPrintCalkIpField").val();
		if (percentVal > 0) percentData = "&percentVal=" + percentVal;
		else percentData = 1;
		footerTxtLiefersch = $("#adminGuiFussTxtAreaLiefersch").val();
		fooEnLs = $("#AUFTRAG_LIEFER_TERMIN_DRUCKEN").prop("checked");
		if (fooEnLs == true) footerEnablerLs = "ja";
		else footerEnablerLs = "nein";
		addTxStrg = "";
		addBonTxStrg = "";
		totalAddTxtStrg = "";

		$("#configAddBonTxtElements .addProdTxtLine").each(function (index) {
			var eElem = $(this);
			elemId = $(this).prop('id');
			elemName = $(this).find(':input[type=text]').prop('name');

			tmpNameVal = $("[name='" + elemName + "']").val();

			elemCont = $(this).find('textarea').prop('name');
			tmpContVal = $("[name='" + elemCont + "']").val();

			tmpTimeVal = $("[name='" + elemCont + "']").next().val().replace(/[^\d]/g, '');

			elemDel = $(this).find("input[type=checkbox]").prop('id');
			elemDelChecked = $("#" + elemDel).prop('checked');
			if (elemDelChecked == true) elemDelVal = 'dDelete';
			else elemDelVal = '';



			elemContVal = encodeURIComponent(tmpContVal);
			elemNameVal = encodeURIComponent(tmpNameVal);
			elemTimeVal = tmpTimeVal;

			if (elemNameVal.length > 1) {
				addBonTxStrg += "eElem:" + elemId + "§|§" + elemNameVal + "§|§" + elemContVal + "§|§" + elemDelVal + "§|§" + elemTimeVal;
				//addBonTxStrg+="eElem:"+elemId+"§|§"+elemNameVal+"§|§"+elemContVal+"§|§"+elemDelVal;
				//console.log("Zeile 2358: "+addBonTxStrg);
			}

		});

		$("#configAddProdTxtElements .addProdTxtLine").each(function (index) {
			var eElem = $(this);
			elemId = $(this).prop('id');
			elemName = $(this).find(':input[type=text]').prop('name');
			tmpNameVal = $("[name='" + elemName + "']").val();
			elemCont = $(this).find('textarea').prop('name');
			tmpContVal = $("[name='" + elemCont + "']").val();
			elemDel = $(this).find("input[type=checkbox]").prop('id');
			elemDelChecked = $("#" + elemDel).prop('checked');
			if (elemDelChecked == true) elemDelVal = 'dDelete';
			else elemDelVal = '';
			elemContVal = encodeURIComponent(tmpContVal);
			elemNameVal = encodeURIComponent(tmpNameVal);

			if (elemNameVal.length > 1) {
				addTxStrg += "eElem:" + elemId + "§|§" + elemNameVal + "§|§" + elemContVal + "§|§" + elemDelVal;
			}
		});
		totalAddTxtStrg = "&addProdTotalStrg=" + addTxStrg;

		if (addBonTxStrg != "") {
			totalAddTxtStrg += "&addBonTotalStrg=" + addBonTxStrg;
		}

		xUrlCode = "&footerTxt=" + footerTxt + "&footerEnabler=" + footerEnabler + "&percentVal=" + percentData + "&footerTxtLieferschein=" + footerTxtLiefersch + "&footerTxtLieferscheinEnabler=" + footerEnablerLs + totalAddTxtStrg + "&prodTxtButEnabler=" + prodTxtButEnabler;
	}
	else return false;

	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=functionAdditionalFooterTx&footerTxtAction=" + funcKey + xUrlCode;

	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

	if (funcKey == "lLoad") {
		content = resp.split('-#-');
		if (content[1].toLowerCase() == 'ja') $("#footerPrintEnableCheckBox").prop({ "checked": true });
		else $("#footerPrintEnableCheckBox").prop({ "checked": false });
		$("#footerPrintCalkIpField").val(content[2]);
		$("#adminGuiFussTxtArea").val(content[0]);
		$("#configAddProdTxtElements").html(content[5]);
		if (reloadIndicator == 'savedAndReload') {
			$("#responseMessageDiv").html('Änderungen gespeichert.');
			setTimeout(function () { displayConfigDiv('config_additonal_footertext', ''); }, 200);
			setTimeout(function () { $("#responseMessageDiv").html(''); }, 5000);

		}
	}

	else if (funcKey == "sSave") {
		if (resp.toLowerCase().indexOf('error') !== -1) { $('#responseMessageDiv').html(resp); }
		else if (resp.toLowerCase().indexOf('success') !== -1) {


		}
		adminFooterTxtFunction('lLoad', 'savedAndReload');
		//console.log(resp);
	}
}

function footerPrintPlaceFactor(vValue) {
	$("#adminResponseTxt").html('');
	if (vValue.indexOf(',') !== -1) {
		vValue = vValue.replace(',', '.');
		tmpVal = $("#footerPrintCalkIpField").val();
		tmpVal = tmpVal.replace(',', '.');
		$("#footerPrintCalkIpField").val(tmpVal);
	}
	vValue = (vValue / 100) * 100;
	areaTx = $("#adminGuiFussTxtArea").val();
	if (areaTx.indexOf('NaN') !== -1) {
		areaTx = areaTx.replace("NaN", '1');
		$("#footerPrintCalkIpField").val(1);
	}
	if (areaTx.indexOf('EUR ') !== -1) {

		areaTx = areaTx.replace(/EUR\s(\d*\.\d+|\d+)\s/, "EUR " + vValue.toFixed(2) + " ");
	}

	$("#adminGuiFussTxtArea").val(areaTx);
}

function resizeEditTexarea(dDirection) {
	if (dDirection == 'uUp' && $("#editierenTxareaStatus").val() != "oOpen") {
		curRow = $("#editieren_produktname").prop('rows');
		$("#editieren_produktname").css({ "width": "59%", "height": curRow + "00%" });
		$("#activeEditField").val('editieren_produktname');

		$("#editierenTxareaStatus").val('oOpen');
	}
	else if (dDirection == 'bBack') {
		$("#editieren_produktname").css({ "width": "30%", "height": "100%" });
		$("#editierenTxareaStatus").val('');
	}
	var existVal = $('#editieren_produktname').val().trim() + " ";
	$('#editieren_produktname').focus().val(existVal);		// um den cursor nach dem vorhandenen txt zu stellen



}

function addProdTxt(cContent) {
	tmpContent = window.atob(cContent);
	cContent = htmlDecode(tmpContent);
	curTxt = $("#editieren_produktname").val();
	$("#editieren_produktname").val(curTxt + cContent);
}

function addProdTxtElem() {
	$("#addProdTxtNextElemBut").css({ "display": "none" });
	$("#addProdTxtLineNext").css({ "display": "block" });
	$("#config_additonal_footertext").scrollTop($("#config_additonal_footertext").prop("scrollHeight"));
	$("#addProdTxtNewElemName").focus();

}

function addBonTxtElem() {
	console.log("addBonTxtElem() aufgerufen");

	$("#addBonTxtNextElemBut").css({ "display": "none" });
	$("#addBonTxtLineNext").css({ "display": "block" });
	//$("#config_additonal_footertext").scrollTop($("#config_additonal_footertext").prop("scrollHeight"));
	// hier fehlt die id für das time element !
	$("#addBonTxtNewElemName").focus();


}

function htmlDecode(vValue) {
	// wegen sonderzeichen Umlaute &+ß usw wird der txt content in html entities übergeben, die mit dieser
	// eigenartigen funktionsweise von jquery wieder 
	return $('<div/>').html(vValue).text();
}

// noch so eine encoding aktion
String.prototype.toHtmlEntities = function () {
	return this.replace(/./gm, function (s) {
		return "&#" + s.charCodeAt(0) + ";";
	});
};

/* Admin Reports display
-------------------------------------------------------------------*/
function displayReportDiv(selectedOptionVal, target) {
	
	if (selectedOptionVal == '') selectedOptionVal = 'report_message';
	$(".reportContentDiv").css({ "display": "none" });
	$("#" + selectedOptionVal).css({ "display": "block" });
	var startDate = $("#reportDateStartField").val();
	var endDate = $("#reportDateEndField").val();
	var startTime = $("#datepickertimeFrom").val();
	var endTime = $("#datepickertimeTo").val();

	if (selectedOptionVal == 'report_categorie') {
		sendCont = "functionKey=getReportCategorie&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target;
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_products') {
		selCategorieId = $("#adminReportSubSelectWg option:selected").val();

		sendCont = "functionKey=getReportProducts&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target + "&selCategorieId=" + selCategorieId;
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_customer') {
		sendCont = "functionKey=getReportCustomer&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target;
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_seller') {
		sendCont = "functionKey=getReportSeller&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target + "&excludeSorno=''";
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_seller_excl_storno') {
		sendCont = "functionKey=getReportSeller&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target + "&excludeSorno=exclude";
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_total_revenue') {
		sendCont = "functionKey=getReportTotalRev&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target;
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_total_revenue_payment') {
		sendCont = "functionKey=getReportTotalRevPayment&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target;
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_gutschein_funktion') {
		sendCont = "functionKey=getReportGutscheine&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target;
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_gutschein_short_funktion') {
		sendCont = "functionKey=getReportGutscheineShort&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target;
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_free_revenue') {
		sendCont = "functionKey=getReportFreeRev&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target;
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_cashbook') {
		if (target == 'exportPDF' || target == 'exportDosCSV' || target == 'exportExcelCSV') {
			var cashBookId = $('input[name="cashbookCb"]:checked').attr('id');
		}
		else cashBookId = '';
		sendCont = "functionKey=getReportCashbook&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target + "&cashBookId=" + cashBookId;
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_on_product_name_end') {
		sendCont = "functionKey=getReportProductNameEnd&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target;
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_seller_payment') {
		abschlId = $("#reportSellIpField").val();
		sendCont = "functionKey=getReportSellerPayment&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target + "&abschlId=" + abschlId;
		screenTargetDiv = selectedOptionVal;

	}
	else if (selectedOptionVal == 'report_offene_lieferscheine') {
		sendCont = "functionKey=getReportDataOffeneLieferscheine&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target;
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_kunden_daten') {
		abschlId = $("#reportSellIpField").val();
		sendCont = "functionKey=getReportCustomerData&startDate=" + startDate + "&endDate=" + endDate + "&reportTarget=" + target + "&abschlId=" + abschlId;
		screenTargetDiv = selectedOptionVal;
	}
	
	else if (selectedOptionVal == 'report_dep') {
		abschlId = $("#reportSellIpField").val();
		sendCont = "functionKey=getReportDataExportProtocol&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target + "&abschlId=" + abschlId;
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_auditing') {
		sendCont = "functionKey=getReportAuditing&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target;
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'GDPdU_export') {
		GDPdUMsg = "";
		if (gdpduCompany == 0 || gdpduStandort == 0 || gdpduComment == 0) {
			GDPdUMsg = "<p>Prüfen Sie die Einträge in Konfiguration/GDPdU Export Einstellungen.</p>";
		}

		$("#GDPdU_export").html("GDPdU Report aufgerufen." + GDPdUMsg);
		sendCont = "functionKey=getReportGDPdU&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime + "&reportTarget=" + target;
		screenTargetDiv = selectedOptionVal;
	}
	//todoalex
	else if (selectedOptionVal == 'report_working_hours')
	{
		selUserID = $("#adminReportSubSelectWorkingHours option:selected").val();
		sendCont = "functionKey=getReportWorkingHour&startDate=" + startDate + "&endDate=" + endDate + "&reportTarget=" + target + "&userID=" + selUserID;
		screenTargetDiv = selectedOptionVal;
	}
	else if (selectedOptionVal == 'report_total_user_payment')
	{
		selUserID = $("#adminReportSubDivUserPayment option:selected").val();
		sendCont = "functionKey=getReportTotalUserPayment&startDate=" + startDate + "&endDate=" + endDate + "&reportTarget=" + target + "&userID=" + selUserID;
		screenTargetDiv = selectedOptionVal;
	}
	else {
		$("#report_message").html('<h3>Es wurde kein Report ausgewählt.</h3>');
		sendCont = "";
		return false;
	}

	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");

	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

	if (resp.toLowerCase().indexOf('error') !== -1) { }
	else if (resp.toLowerCase().indexOf('display success') !== -1) {
		$("#" + screenTargetDiv).html(resp);
		//console.log(resp+screenTargetDiv);
	}
	else if (resp.toLowerCase().indexOf('exportcsv success') !== -1) {
		tmpX = resp.split('-#-');
		filePath = tmpX[1];
		if (filePath.substring(filePath.lastIndexOf('.') + 1) == 'csv') {

			$("#downloader").attr('onClick', "location.href='" + filePath + "'");
			$("#downloader").click();
		}
	}
	else if (resp.toLowerCase().indexOf('exportpdf success') !== -1) {
		//console.log(screenTargetDiv+'\n'+resp);
		$("#" + screenTargetDiv).html(resp);

	}
	else if (resp.toLowerCase().indexOf('downloadreport gdpdu') !== -1) {
		tmpX = resp.split('-#-');
		filePath = tmpX[1];
		//console.log("des is der filepath -> "+filePath);

		$("#downloader").attr('onClick', "location.href='" + filePath + "'");
		$("#downloader").click();
	}

}

function getCashbookDetail(cashbookId, kassabschlStartId, kassabschlEndeId, kassabuchAbschlSaldo, saldoUebertrag, kassabuchBetrag, cashBookUser, erstelltDate) {
	$("#kassabuch_modal").show();

	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'getCashbookDetail', cashbookId: cashbookId, kassabschlStartId: kassabschlStartId, kassabschlEndeId: kassabschlEndeId, saldoUebertrag: saldoUebertrag, kassabuchAbschlSaldo: kassabuchAbschlSaldo, kassabuchBetrag: kassabuchBetrag, cashBookUser: cashBookUser, erstelltDate: erstelltDate },
		async: true,
		success: function (ajaxResponse) {
			if (checkJson(ajaxResponse) == true) {
				respArray = JSON.parse(ajaxResponse);
				$("#cashbookModalContent").html(respArray[1]);
				//console.log("json erkannt");
			}
			else console.log(" cashbook detail, json nicht : " + cashbookId + "\n" + ajaxResponse);
		}
	});




}
function cashbookClose(firstClose = false) {
	var errorIndicator = false;
	var lastAbschlId = false;
	var firstCashbookStartId = false;
	var firstCashbookEndeId = false;
	var firstCashbookSaldo = 0;

	var closeNote = $("#cashbookCloseNote").val();

	if (firstClose == 'firstClose') {
		firstCashbookStartId = $("#cashbookFirstStartSelect  option:selected").prop('id');
		firstCashbookEndeId = $("#cashbookFirstEndeSelect  option:selected").prop('id');
		if ($("#anfangsSaldoKassabuchWechselgeld").prop("checked") == true) firstCashbookSaldo = 'wechselgeld';
		else firstCashbookSaldo = $("#anfangsSaldoKassabuch").val();
		if (firstCashbookStartId == 'selectHeaderStart' || firstCashbookEndeId == 'selectHeaderEnde') {
			alert('Wählen Sie eine Kassenabschluss Id für Beginn und Ende des Kassenbuch Abschlusses.');
			errorIndicator = true;
		}
		if (firstCashbookStartId * 1 > firstCashbookEndeId * 1) {
			alert('Das Kassenabschluss Ende kann nicht vor dem Kassenabschluss Start sein.');
			errorIndicator = true;
		}
	}
	else {

		lastAbschlId = $("#cashbookEndeSelect  option:selected").prop('id');
		if (lastAbschlId == 'selectHeader') {
			alert('Wählen Sie eine Kassenabschluss Id bis zu welcher der Kassenbuch Abschluss ausgeführt werden soll.');
			errorIndicator = true;
		}
	}


	if (errorIndicator == false) {
		$.ajax({
			type: "POST",
			url: "ajax_funktionen_kp.php",
			dataType: "html",
			data: { functionKey: 'cashbookCloseWriteDb', lastAbschlId: lastAbschlId, firstCashbookStartId: firstCashbookStartId, firstCashbookEndeId: firstCashbookEndeId, firstCashbookSaldo: firstCashbookSaldo, closeNote: closeNote },
			async: true,
			success: function (ajaxResponse) {
				if (checkJson(ajaxResponse) == true) {
					respArray = JSON.parse(ajaxResponse);
					if (respArray[0] == 'Success') {
						// wird hier die Kassabuch Report Übersicht neu geladen
						displayReportDiv('report_cashbook', 'screen');
						// console.log("json erkannt: "+respArray[0]+" / "+respArray[1]);
					}
					else {
						// noch zu definieren wo wir den Error hinschreiben
						console.log("json erkannt -> Error ?: " + ajaxResponse);
					}

				}
				else console.log("json nicht : " + lastAbschlId + " / " + ajaxResponse);
			}
		});
	}

}

/*	setzt anfangssaldo feld disabled/enabled				*/

function setSaldoField(sStatus) {
	if (sStatus.checked == false) {
		$("#anfangsSaldoKassabuch").prop('disabled', false).css({ 'background': '#fff' });
		//console.log(sStatus.checked+" input enablen !!!");
	}
	else {
		$("#anfangsSaldoKassabuch").prop('disabled', true).val('').css({ 'background': '#cce' });
		//console.log(sStatus.checked+" nix mit input");
	}

}

function kassabuch_modal_close() {
	$("#kassabuch_modal").hide();

}





function cclearFieldVal(fieldId, secoundField = false) {
	$("#" + fieldId).val('');
	if (secoundField == 'datepickertimeTo') $("#" + secoundField).val('23:59');
	else if (secoundField == 'datepickertimeFrom') $("#" + secoundField).val('00:00');
}

/*
function mobilePrinterSelectBut(){
	alert("abc");
	printerId=$("#defineMobilePrinterSelect option:selected").prop('id');
	if(printerId >0 ){
		
		xmlhttp=GetXmlHttpObject();
		xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
		sendCont="functionKey=setSession&selectMobilePrinter=true&mobilePrinterId="+printerId;
		
		xmlhttp.send(sendCont);
		resp=xmlhttp.responseText;
		
		if (resp.toLowerCase().indexOf('success') !== -1){
			location.reload(); 
		}
	}
	else return false;
}
*/

/* License Violation Dialog 
-------------------------------------------------------------------*/

function openLicenseViolationDialog(callFrom = false, boxTitle, dialogContent = false, wrappEr = false) {

	if (wrappEr == false) { wrappEr = 'wrapper'; }
	wrapHeight = $("#" + wrappEr).height();
	dialogCssClass = 'generalDialogBox';
	mminHeight = 150;
	maxHeight = wrapHeight,
		wwidth = 600;
	pPosition = "center";
	atPosition = "center";
	buttonTxtLeft = "Bestätigen";
	buttonTxtRight = "Dialog Schließen";


	$("#licenseViolationDialog").html(dialogContent);
	$("#licenseViolationDialog").dialog({
		resizable: false,
		open: function (event, ui) {
			$(".ui-dialog-titlebar-close", ui.dialog | ui).hide();
			$("body").css({ "overflow": "hidden" });

		},
		beforeClose: function (event, ui) { $("body").css({ "overflow": "visible" }); },
		modal: true,
		title: boxTitle,
		height: 'auto',
		minHeight: mminHeight,
		maxHeight: wrapHeight,
		width: wwidth,

		position: { my: pPosition, at: atPosition, of: "#" + wrappEr },
		dialogClass: dialogCssClass,
		buttons: {

			"1": {
				id: 'dialogButR', text: buttonTxtRight, click: function () {

					$(this).dialog("close");
				}, "class": "button button_gross dialog_orange"
			}

		}


	});

}

/*   kartenzahlung mit karten Terminal 
------------------------------------------------------------------*/

function sixTerminalResponse(funcKey = false, terminalMsg = false, terminalOp = false) {
	
	debug = true;
	if (funcKey == "ausgeben") {
		// alles zwischen POS und OK wegschneiden, wenn kein debug gesetzt ist
		if (!debug) {
			//terminalMsg = terminalMsg.replace(/POS>BPI.*<br\/>/gim,"");
			var lines = terminalMsg.split("<br/>");
			var output = "";
			for (line of lines) {
				//Wenn additonaldata im String vorkommt, dann den Additionaldata von hex zu ascii transferieren und ausgeben
				if (line.includes("additionaldata")) {
					var pos_anf = line.indexOf("additionaldata=");
					var pos_end = line.indexOf("errorcode=");
					console.log(pos_anf);
					// Den Code von Additionaldata rauslesen
					line = line.substr(pos_anf + 15, pos_end - pos_anf - 16);

					var asciiVal = line.match(/.{1,2}/g).map(function (v) {
						return String.fromCharCode(parseInt(v, 16));
					}).join('');
					output = output + "<h2> Fehler: " + asciiVal + "</h2><br/>";
				}
				else {
					if (!line.startsWith("POS"))
						if (!line.startsWith("BPI")) output = output + line + "<br/>";
				}
				//console.log(line);
			}
			//alert(lines.toString());
			//terminalMsg = terminalMsg.replace(/POS.*ok/gim,"");
		}
		$("#payTerminalMsgDiv").html(output);
		// Fenster runterscrollen
		var objDiv = document.getElementById("payTerminalMsgDiv");
		objDiv.scrollTop = objDiv.scrollHeight;
	}
	else {
		
		if (/Commit\scompleted/.test(terminalMsg)) {
			
			$("#payTerminalMsgDiv").html('EC-Terminal Bestätigung, Zahlung wird abgeschlossen.');
			if (funcKey == "a4=true") zahlung_abgeschlossen('a4_ausdruck', false, terminalOp);
			else {zahlung_abgeschlossen('', false, terminalOp);}
			$("#zahlungsTerminalAbfrageIndic").val(0);
			setTimeout(function () { $("#payTerminalMsgDiv").html(''); }, 500);
			terminalZahlungAbbrechen("commit");
			$("#zahlterminalReConnect").css({ 'display': 'none' });
		}
		else if (/Zahlung\sfehlgeschlagen/.test(terminalMsg))
		{
			$("#payTerminalMsgDiv").html('Zahlung fehlgeschlagen');
			elem=window.parent.document.getElementById('ec_abbruch');
			elem.style.display='';
		}
		else
		{
			$("#payTerminalMsgDiv").html('-- Zahlung fehlgeschlagen ');
			elem=window.parent.document.getElementById('ec_abbruch');
			elem.style.display='';
		}

	}
	
}

function zahlterminalVerbinden(zahlungsart, zahl_betrag, funcKey = false, a4_beleg = false) {
	//bBetrag=$("#payTerminalModalBetrag").val();


	if (a4_beleg) a4_string = "true";
	else a4_string = "false";
	zahlMsg = "";

	if (funcKey == 'reconnect') {
		zahl_betrag = $("#payTerminalModalBetrag").val();
		zahlungsart = $("#payTerminalModalZahlart").val();
		$("#zahlterminalReConnect").css({ 'display': 'none' });
		console.log("reconnect -> " + funcKey + " da werden dann noch werte eingelesen betrag -> " + zahl_betrag + " zahlart -> " + zahlungsart);
	}

	restBetrag = ($("#offener_betragDisplay").val().replace(",", ".")) * 1;

	if (restBetrag != 0) {
		restBetrag = restBetrag.toFixed(2) + "";
		//restBetrag=restBetrag+"";
		restBetrag = restBetrag.replace('.', ',');
		zahlMsg += " Offener Restbetrag, <span style='color:#a00; font-weight:bold; font-size:1.5em;' >" + restBetrag + " !</span> <br /> ";
	}

	console.log(zahlungsart+" / "+zahl_betrag+" / "+funcKey+" / "+restBetrag);


	//zahlungsTerminalData -> wird in global_function.php (getZahlungsTermId() ca 3100) erzeugt und in kassieren in js string ( zahlungsTerminalData) geschrieben
	zahlungsTermData = zahlungsTerminalData.split(';');
	zahlungsTerminalId = zahlungsTermData[0];
	zahlungsTerminalType = zahlungsTermData[1];

	if (zahlungsTerminalType != 'undefined' && zahlungsTerminalId != 'undefined') {
		$("#loadKarte").attr('src', 'include/cardPayment/function_karte.php?terminalId=' + zahlungsTerminalId + '&terminalType=' + zahlungsTerminalType + '&zahlbetrag=' + zahl_betrag + '&zahlartName=' + zahlungsart + '&funktion=transaktion&a4_beleg=' + a4_string);
		$("#payTerminalMsgDiv").html('<br><p>'+zahlMsg + 'Verbindung mit EC-Terminal-' + zahlungsTerminalType + '/' + zahlungsTerminalId + ' wurde aufgebaut.</p><br><p>Bitte warten Sie auf die Rückmeldung des Terminals.</p>');
		
	}
	else {
		$("#payTerminalMsgDiv").html('Verbindung mit EC-Terminal abgebrochen, <b>fehlende Terminal Id od Terminal Type.</b>');
	}

}

   

function terminalZahlungAbbrechen(funcKey) {
	// funcKey ->  paymentAbbruch Kassa Abbruch, modalClose, commit

	if (funcKey == 'commit') {
		$("#zahlterminalModal").css({ 'display': 'none' });
		$("#loadKarte").attr('src', '');
		$("#ec_abbruch").css({ 'display': 'none' });
	}
	else if (funcKey == 'modalClose' || funcKey == 'paymentAbbruch') {
		$("#loadKarte").attr('src', 'include/cardPayment/function_taskstop.php?kassaIp=' + kassaIp);
		$("#zahlterminalModal, #zahlterminalReConnect").css({ 'display': 'none' });
		$("#payTerminalMsgDiv").html('');
		$("#ec_abbruch").css({ 'display': 'none' });

		//console.log("function terminalZahlungAbbrechen -> "+funcKey);
	}


	// muss dann noch jedes Feld gelert werden 
	// und event der six stop noch aktiviert werden ???			

}

/*	function terminalKartenZahlungAbgebrochen(abbruchType){
		switch(abbruchType) {
			case 'amTerminalAbgebrochen':{
					// igendFunktion();
					$("#loadKarte").attr('src', '');
					
			}
			break;
			case 'kassaZahlunAbbruch':{
				// wird im zahlungsabbruch direkt aufgerufen
			}
			break;
			default:{
				// what ever on default !!!
			}
		} 
		
	}
*/




/* Allgemeine Dialog Funktionen ersetzt diverse Alert Popups
-------------------------------------------------------------------*/

function openGeneralDialog(callFrom = false, boxTitle, dialogContent = false, wrappEr = false, confirmData = false) {
	console.log(boxTitle+" / "+dialogContent);
	// Wenn 2 dialoge hintereinander kommen (z.b. DEP Fehler und dann Retourgeld Poput) dann wird das nicht mehr anzeigen im falschen Fenster angezeigt!
	// deswegen vorher einfach wegnehmen.
	$("#dialogCbElem").remove();
	if (wrappEr == false) { wrappEr = 'wrapper'; }
	wrapHeight = $("#" + wrappEr).height();
	dialogCssClass = 'generalDialogBox';
	buttonTxtLeft = "Bestätigen";
	buttonTxtRight = "Abbrechen";
	mminHeight = 150;
	wwidth = 600;
	pPosition = "center";
	atPosition = "center";
	hideButLeft = false;

	
	if (callFrom == 'zahlungsabschluss') 
	{
		htmlContent = "<p class='generalDialogP'>Überprüfen Sie die eingeben Beträge auf korrekte Zahlenformate.</p>";
	}
	else if (callFrom == 'tischUebernehmen') {
		buttonTxtRight = "Abbrechen";
		buttonTxtLeft = "Tisch Übernehmen";
		// wir verwenden diese variable mit irrtümlichen namen, aber variable wird funktionieren
		tischId = confirmData;
	}
	else if (callFrom == 'bonReprint') {
		htmlContent = getReprintContent(dialogContent);
		buttonTxtLeft = "Auswahl Drucken";
		buttonTxtRight = "Dialog Schließen";


	}

	else if (callFrom == 'billModalSearch') {

		htmlContent = "<div class='customerSearchDialogDiv' ><div id='searchResultDialogDiv'></div></div>";
		wwidth = 600;

	}
	else if (callFrom == 'zahlungAbgeschlBonLeer' || callFrom == 'readSigCardDialog' || callFrom == 'gutscheinkarte_abbuchen_fehler' || callFrom == 'preisgruppenCustCheck') {
		// ist nur ein Info dialog, kann für mehreres verwendet werden !!
		hideButLeft = true;
		buttonTxtRight = "Dialog Schließen";
	}

	else if (callFrom == 'lizenzVerletzung') {
		hideButLeft = true;
		//	htmlContent = "<p>Offener Bon ist leer.</p>";
		buttonTxtRight = "Dialog Schließen";
	}
	else if (callFrom == 'stornoButton') {
		hideButLeft = false;
		if ($('#bonContent .bon_steuer').length > 0) {
			lieferscheinNr = false;
			lieferschDelTxt = "";
			$("input[name='lsSourceField']").each(function () {
				if ($(this).val() > 0) {
					lieferscheinNr = $(this).val();
				}
			});

			if (lieferscheinNr > 0) lieferschDelTxt = "<p>Offener Bon ist mit Lieferschein " + lieferscheinNr + " verlinkt.</p><p>Lieferschein " + lieferscheinNr + " wird ebenfalls gelöscht.</p>";
			htmlContent = dialogContent + lieferschDelTxt;
			dialogCssClass = 'bonStornoClass generalDialogBox';
			buttonTxtLeft = "Bon Löschen";
		}
		else {

			$.ajax({
				type: "POST", url: "ajax_funktionen_kp.php", dataType: "html",
				data: { functionKey: 'deleteBonZusatztext' },
				async: true,
				success: function (ajaxResponse) {
					if (checkJson(ajaxResponse) == true) {
						respArray = JSON.parse(ajaxResponse);
						$("#error_message").html(respArray[1]);
					}
					else {
						$("#error_message").html("Fehler beim löschen vom Bon Zusatztxt");
					}
				}
			});

			infoTxt = "";
			kdNameInfo = $("#bon_sum_div_customer_name").html();
			if (kdNameInfo != "") {
				infoTxt += "<p>Aufgerufener Kundenname verworfen</p>";
				$("#bon_sum_div_customer_name").html("");
			}
			if ($("#bonZusatzTxtarea").val() != "") {
				infoTxt += "<p>Bon Zusatz Text Feld gelöscht.</p>";
				$("#bonZusatzTxtarea").val("");
			}

			htmlContent = "<p>Offener Bon ist leer.</p>" + infoTxt;
			buttonTxtRight = "Dialog Schließen";
			$("#toggle").val('preis');
			$("#preis").focus();
			hideButLeft = true;
			bon_anzeigen();
		}
	}
	else if (callFrom == 'paymentWarning') {
		htmlContent = "<p>" + dialogContent + "</p>";
		buttonTxtRight = "Dialog Schließen";
	}
	else if (callFrom == 'retourgeldDialog') {
		buttonTxtRight = "Fenster schließen";

		retuorGeldWarnung = "";
		htmlContent = "<div class='retourgeldDialogDiv'>" + dialogContent + "</div>";

		wwidth = 500;
	}
	else if (callFrom == 'validateFormStorno') { buttonTxtRight = "Fenster schließen"; htmlContent = dialogContent; }
	else if (callFrom == 'configInfo') { buttonTxtRight = "Dialog schließen"; htmlContent = "<div class='configInfoDialogContentDiv'>" + unescape(dialogContent) + "</div>"; hideButLeft = true; }
	else if (callFrom == 'lieferscheinOffenerBonnichtleer') {
		buttonTxtRight = "Dialog schließen"; hideButLeft = false;
		htmlContent = "<p>Für das erstellen eines offenen Bons aus einem Lieferschein ist ein leerer Warenkorb erforderlich.</p>"; hideButLeft = true;
	}
	else if (callFrom == 'bonTestPrintToDialog') htmlContent = "<p class='generalDialogP'>Bon Test</p></div><div id='bonTestPrintTestDiv'></div>";
	else if (callFrom == 'valueNullAlert') {
		htmlContent = dialogContent;
		buttonTxtRight = "Zahlung Abbrechen";
		buttonTxtLeft = "Zahlung fortsetzen";
	}
	else if (callFrom == 'minusValueAlert') {
		htmlContent = dialogContent;
		buttonTxtRight = "Dialog Schließen";
		hideButLeft = true;
	}
	else if (callFrom == 'dep_or_signature_Error') {
		htmlContent = "<p>" + dialogContent + "</p>";
		buttonTxtRight = "Dialog Schließen";


	}
	else if (callFrom == 'einkaufsLimitDialog') {
		htmlContent = "<p>" + dialogContent + "</p>";
		hideButLeft = true;
		buttonTxtRight = "Dialog Schließen";
	}
	else if (callFrom == 'setLieferDatum') {
		funktionArray = dialogContent.split('-§-');
		if (funktionArray.length > 1) {
			funktionK = funktionArray[0];						// aufruf für auftragsschein, von zahlung abgeschl. übergebe ein fake Array !!
			printTarget = funktionArray[1];
			docName = 'Auftragsschein';
		}
		else {
			funktionK = 'lieferschein';						// vom lieferschein aufruf kommt kein fake array (-§_) !!!!
			printTarget = false;
			docName = 'Lieferschein';
		}

		htmlContent = "<p></p><p>Liefer Datum: <input type='text' id='lieferDatumIpField' /></p><p><label for='disableRreferenceBonPrint'>" + docName + " ausdrucken: </label><input id='disableRreferenceBonPrint' checked type='checkbox' /></p>";
		buttonTxtRight = "Abbrechen";
		buttonTxtLeft = "Eingaben Bestätigen";

		pPosition = "center center-100";
		atPosition = "center";

	}
	else if (callFrom == 'resetAuftragsNummer') {
		htmlContent = "<p class='configDialogContent'> Mit Bestätigen setzen Sie die laufend vergebenen Auftragsnummer auf 0, so das die weiteren Auftragsnummern aufsteigend von 1 vergeben werden.</p>";
		buttonTxtLeft = "Reset Nr.";
	}
	else if (callFrom != false && dialogContent != false) { htmlContent = dialogContent; }
	else if (callFrom == 'startbelegconfirm') {

	}
	else if (callFrom == 'backup')
	{
		htmlContent = dialogContent;
		buttonTxtRight = "Abbrechen";
	}
	else if (callFrom == false) htmlContent = "<p>Undefinied Call Source !!!!</p>";
	
	else { return false; }

	//	alert(htmlContent);

	if (typeof htmlContent == 'undefined' || htmlContent == '') htmlContent = dialogContent;
	
	console.log(hideButLeft);

	if (hideButLeft == true) 
	{
		console.log("test");
		$("#dialogButL").css({ "display": "none" });
	}

	$("#generalDialog").html(htmlContent);
	$("#generalDialog").dialog({
		resizable: false,
		open: function (event, ui) {
			$(".ui-dialog-titlebar-close", ui.dialog | ui).hide();
			$("body").css({ "overflow": "hidden" });
			if (callFrom == 'setLieferDatum') {
				$('#lieferDatumIpField').datepicker({ dateFormat: 'yy-mm-dd', title: '', minDate: 0 }).blur();
			}
			else if (callFrom == 'dep_or_signature_Error') {
				$(".ui-dialog-buttonpane").append("<p id='dialogCbElem' style='float:right; margin-right:22px;'><label for='depSigErrorDialogDisableCb'>Diesen Dialog nicht mehr Anzeigen</label><input id='depSigErrorDialogDisableCb' type='checkbox' /></p>");
			}
		},
		beforeClose: function (event, ui) { $("body").css({ "overflow": "visible" }); $('#lieferDatumIpField').datepicker('destroy'); $("#dialogCbElem").remove(); },
		modal: true,
		title: boxTitle,
		height: 'auto',
		minHeight: mminHeight,
		maxHeight: wrapHeight,
		width: wwidth,

		position: { my: pPosition, at: atPosition, of: "#" + wrappEr },
		dialogClass: dialogCssClass,
		buttons: {
			"1": {
				id: 'dialogButL', text: buttonTxtLeft, click: function () {
					if (callFrom == 'stornoButton') { deleteOpenBon(); }
					else if (callFrom == 'reprintBon') { }
					else if (callFrom == 'valueNullAlert') {
						modal.style.display = "block";
						setTimeout(function () { $('#focus_zahlung').focus(); }, 100);
					}
					else if (callFrom == 'setLieferDatum') {
						lieferDatum = $("#lieferDatumIpField").val();
						if ($("#disableRreferenceBonPrint").prop("checked") == true) disableRefBonPrint = 'printenabled';
						else disableRefBonPrint = 'printdisabled';
						if (lieferDatum == "") lieferDatum = "0000-00-00";
						// ist field leer, datum wurde nicht gesetzt und bestätigt, wird 0000 gesetzt, und ohne lieferdatum weiterverarbeitet

						if (funktionK == 'auftragsschein') zahlung_abgeschlossen(printTarget, true);
						else lieferscheinErstellen(lieferDatum, disableRefBonPrint);
					}
					else if (callFrom == 'resetAuftragsNummer') {
						resetLieferscheinAuftragsnummer();
					}
					else if (callFrom == 'tischUebernehmen') {
						tischAuswaehlen(tischId, 'confirmTischUebernehmen');
					}
					else if (callFrom == 'startbelegconfirm') {
						zdaid = confirmData[0];
						cardSerNo = confirmData[1];
						kassenId = confirmData[2];
						bonStartNumber = confirmData[3];

						activateSigUnit(zdaid, cardSerNo, kassenId, bonStartNumber);
					}
					$(this).dialog("close");
				}, "class": "button button_gross dialog_orange"
			},
			"2": {
				id: 'dialogButR', text: buttonTxtRight, click: function () {
					if (callFrom == 'valueNullAlert') zahlung_abbrechen();
					if (callFrom == 'minusValueAlert') zahlung_abbrechen();
					if (callFrom == 'retourgeldDialog' && gastroVersion.toLowerCase() == 'ja' && $("#splitBonOriginContent").html() == "") window.location.href = 'tische.php';
					if (callFrom == 'setLieferDatum') {
						//	lieferscheinErstellen(true);			// damit wird ohne gesetztes Datum der Lieferschein erstellt.
					}
					if (callFrom == 'dep_or_signature_Error') {
						if ($("#depSigErrorDialogDisableCb").prop('checked')) {
							setDisplayDepSignError();
						}

						$("#dialogCbElem").remove();

					}
					$(this).dialog("close");
					set_focus();
					//	$("#toggle").val('preis');
					//	$("#preis").focus();

				},

				"class": "button button_gross dialog_orange"
			}



		}



	});

	if (hideButLeft == true) $("#dialogButL").css({ "display": "none" });

	$("#zahlungDisableImg").css({ "display": "none" });

	if (callFrom == 'zahlungsabschluss' || callFrom == 'bonTestPrintToDialog' || callFrom == 'loadCartAjax' || callFrom == 'validateFormStorno' || callFrom == 'retourgeldDialog' || callFrom == 'paymentWarning' || callFrom == 'dep_or_signature_Error') $("#dialogButL").css({ "display": "none" });

}

function openCutomerSearchDialog(callFrom = false) {
	wrapHeight = $('#wrapper').height();

	sync_Kunden_Filialsystem();
	//sync_Produkte_Filialsystem();

	if (MobileDeviceIndicator == true) dialogHeight = 700;
	else dialogHeight = 480;

	// Suche nach Kundennummer aktivieren - das ist die Loyality Karte Funktion!!!		
	var kundennr_suche_aktivieren = "<?php echo KUNDENSUCHE_LOYALITY_AKTIVIEREN; ?>";
	
	if (kundennr_suche_aktivieren == 'ja') {
		$("#customer-search").html("<div class='customerSearchDialogDiv' ><p class='searchResultDialogSearchField'><button class= 'button_none_float orange floatR' onclick=\"location.href='anlegen_kunden_sITeditor.php?callfrom=kassieren'\">Kunden anlegen</button>\
				<form id='loyality' onsubmit='return loyality_card_suchen(event)'> \
				<input id='customerDialofLoyalityNr' class='floatL' type='text' value='' autofocus />\
				<input class= 'button_none_float orange floatL' type='Submit' Value='Cashback'>\
				</form>\
				<input id='customerDialoSearchField' class='floatL' type='text' value='' onkeyup=\"searchCustomer(this.value, 'bonDialog')\" /><button class='cClearCustSearchFieldBut' onclick='cClearCustSearchField()' ></button></p><div class='cclear'></div><div id='searchResultDialogDiv'></div></div>");
	}
	else {
		$("#customer-search").html("<div class='customerSearchDialogDiv' ><p class='searchResultDialogSearchField'><button class= 'button_none_float orange floatR' onclick=\"location.href='anlegen_kunden_sITeditor.php?callfrom=kassieren'\">Kunden anlegen</button>\
									<input id='customerDialoSearchField' class='floatL' type='text' value='' onkeyup=\"searchCustomer(this.value, 'bonDialog')\" autofocus /><button class='cClearCustSearchFieldBut' onclick='cClearCustSearchField()' ></button></p><div class='cclear'></div><div id='searchResultDialogDiv'></div></div>");
	}
	// Ende Loyality Karte
	$("#customer-search").dialog({
		resizable: false,
		open: function (event, ui) {
			$("body").css({ "overflow": "hidden" });
			$(".ui-dialog-titlebar-close", ui.dialog | ui).hide();
			if ($("#bon_sum_div_customer_name").html() != "") {
				$("#searchDialogButL").before("<div id='searchDialogBotomInfoField' class='schrift' style='color:red;' ><p>Selektierter Kunde:</p><p>" + $("#bon_sum_div_customer_name").html() + "</p></div><button id='preisgrInfoButton' class='orange button' onclick='kdInfoPreisgrAnzeigen()' >Kd Info Anzeigen</button> ");
			}
		},
		beforeClose: function (event, ui) { $("body").css({ "overflow": "visible" }); },
		modal: true,
		title: "Kundenname auf der Rechung vermerken.",
		height: dialogHeight,
		//	minHeight: 400,
		//	maxHeight: wrapHeight,
		width: 700,

		position: { my: "center", at: "center", of: "#wrapper" },
		dialogClass: 'customerSearchDialog',

		buttons: {
			"1": {
				id: 'searchDialogButL', text: 'Kunde von Bon entfernen', click: function () {
					clearSelectedCustomer('bonDialog', 'dDelete')
				}, "class": "button dialog_button_gross dialog_orange"
			},

			"2": {
				id: 'searchDialogButR', text: 'Fenster Schließen', click: function () {
					$(this).dialog("close");
					$("#toggle").val('preis');
					$("#preis").focus();
				}, "class": "button dialog_button_gross dialog_orange"
			}
		},

	});

	searchCustomer('', 'bonDialog');

}

$(function () {
	//Add, Save, Edit and Delete functions code

	//$( ".datepicker" ).datepicker({ dateFormat: "yy-mm-dd" });
	$(".datepicker").datepicker({ dateFormat: "yy-mm-dd", timeFormat: "hh:mm" });
	$(".datepicker").datepicker({ altField: "#actualDate" });
	$(".datepicker").datepicker();

	// some php konstants settings needed in js
	// stelle konstanten für javascript zur verfügung funktioniert im connect und global_functions.php nicht weil das xml (konfig gui mit dem echo davor nicht umgehen kann


});

function setDisplayDepSignError() {
	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'setDisplayDepSignError' },
		async: true,
		success: function (ajaxResponse) {
			if (ajaxResponse.toLowerCase().indexOf('error') !== -1) {
				alert(ajaxResponse);
			}
		}
	});
}

function resetLieferscheinAuftragsnummer() {
	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=resetLieferscheinAuftragsnummer";
	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

	//	alert("wird auftrags nr reset !!!!!!!!!!!!-> "+resp);

}


function kassenladeOeffnen(zahlungsart_name,zahlungsart_id,zahlungsart_value) {
	//alert("Lade öffnen");
	//alert(zahlungsart_name);
	//alert(zahlungsart_id);
	//alert(zahlungsart_value);
	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "display/open_drawer.php", true);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=kassenladeOeffnen&zahlungsart_name="+zahlungsart_name+"&zahlungsart_id="+zahlungsart_id+"&zahlungsart_value"+zahlungsart_value;
	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;
	$("#toggle").val('preis');
	$("#preis").focus();
	
}


/*         kp AJAX request 
---------------------------------------------------------*/

function GetXmlHttpObject() {
	if (window.XMLHttpRequest) { return new XMLHttpRequest(); }
	else if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); }
	return null;
}


/*         kp decode AJAX requested XML string 
---------------------------------------------------------*/
function decodeXMLdata(XMLdata, outerFrame) {
	elem = XMLdata.getElementsByTagName(outerFrame)[0].childNodes;
	valOutput = '';
	if (elem.length == 1) {							// is a tag is direct addresse so it hase only the value as child
		childNodeName = XMLdata.getElementsByTagName(outerFrame)[0].nodeName;
		valOutput += XMLdata.getElementsByTagName(childNodeName)[0].firstChild.nodeValue;
	}
	else if (elem.length > 1) {			// multiple childs at the first level under the "enelope" tag od under the tag passed as parameter -> "outerFrame" 
		for (i = 0; i < elem.length; i++) {

			childNodeName = XMLdata.getElementsByTagName(outerFrame)[0].childNodes[i].nodeName;
			valOutput += XMLdata.getElementsByTagName(childNodeName)[0].childNodes[0].nodeValue;
		}
	}
	return valOutput;
}

/*         Data Export Protocoll Funktion
---------------------------------------------------------*/
function startBelegErstellen(belegNr) {


	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=depStartbelegErstellen&requestBelegNr=" + belegNr;
	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

	if (resp.toLowerCase().indexOf('success') !== -1) {

		//	alert("alles gut "+resp);
		location.reload();
	}




}

/*        lizenzierungs eingabe
---------------------------------------------------------*/

function getLizensForm(dDirection = false) {
	if (dDirection == 'cClose') {
		$("#lizenszFormElement").remove();
		$("#getLizensFormBut").css({ "display": "block" });
	}
	else {
		$("#lizenszFormP").append("<div id='lizenszFormElement'><label class='licensingFormIpLabel' for='licensingFormKeyIp'>Lizenz Schlüssel eingeben: </label><br /><input id='licensingFormKeyIp' name='zulu' type='text' class='licensingFormIp' style=\" \" /><br /><button class='orange button_none_float' onclick=\"getLizensForm('cClose')\">Eingabefeld schließen</button></div>");
		$("#getLizensFormBut").css({ "display": "none" });
		$("#configLicensingDiv  input:radio").attr('checked', false);
		$("#licensingFormKeyIp").focus();
	}
}

function setForm() {
	if ($("#getLizensFormBut").css("display") == "none") {
		$("#configLicensingDiv  input:radio").attr('checked', false);
	}
}


/*        Direkter Benutzerwechsel aus der Verkaufsmaske
--------------------------------------------------------------*/
function directChangeUser(userId) {
	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'directChangeUser', userId: userId },
		async: true,
		success: function (ajaxResponse) {
			if (checkJson(ajaxResponse) == true) {
				respArray = JSON.parse(ajaxResponse);
				if (respArray[0] == true) {
					$("#error_message").html(respArray[1]);

				}
				else {
					$("#error_message").html(respArray[1]);
				}
			}
			else {
				$("#error_message").html("Benutzerwechsel Fehler !");
			}
			if (gastroVersion == 'ja') window.location.href = 'tische.php';
			else if (warenkorbAblageVersion == 'ja') window.location.href = 'wk_ablage.php';
			else location.reload();
		}
	});


}



/*         gutschein karte bearbeiten functions
---------------------------------------------------------*/

function loadKundenKarte(loadFunction, restBetragOption = false) {
	var startDate = new Date();
	//console.log("load Gs started: "+startDate);
	gutscheinCardNo = $("#gutscheinKarteModalIp").val();
	loadAmount = $("#gutscheinKarteValueToLoad").val();
	customerId = $("#gutscheinKarteCustId").val();
	gsComment = $("#gutscheinKarteKommentar").val();
	
	if ($("#gsVerkaufsArt").length) {
		gsVerkaufsArt = $("#gsVerkaufsArt option:selected").attr('name');
	}
	else gsVerkaufsArt = false;

	if ($("#gsZahlungsArt").length) {
		gsZahlungsArt = $("#gsZahlungsArt option:selected").attr('id');
	}
	else gsZahlungsArt = false;

	// wenn es aud dem admin kommt gibt es eine tax rate  select element id = gsTaxSelectElem
	gsTaxRate = false;
	if ($("#gsTaxSelectElem").length) {
		gsTaxRate = $("#gsTaxSelectElem option:selected").val();
	}
	
	//$("#gsKarteAnlegenBut").attr("onclick", "zahlung_abgeschlossen_ec('', '"+loadFunction+"', '"+restBetragOption+"')");

	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'gutscheinKarteUpdate', loadFunction: loadFunction, gutscheinCardNo: gutscheinCardNo, loadAmount: loadAmount, customerId: customerId, gsTaxRate: gsTaxRate, restBetragOption: restBetragOption, gsVerkaufsArt: gsVerkaufsArt, gsComment: gsComment, gsZahlungsArt: gsZahlungsArt },
		async: true,
		success: function (ajaxResponse) {
			//alert (ajaxResponse);
			if (checkJson(ajaxResponse) == true) {
				
				respArray = JSON.parse(ajaxResponse);
				if (respArray[2] == 'deleteSuccess') {
					cClearGsBearbeitenModalFields();
					$("#gutscheinModalResponseTxt").html(respArray[1]);
				}
				else if (respArray[2] == 'deleteNONESuccess') {
					$("#gutscheinModalResponseTxt").html(respArray[1]);
				}
				else {
					$("#gutscheinModalResponseTxt").html(respArray[1]);
					getGutscheincardDataAufladen($("#gutscheinKarteModalIp").val());
				}

				//Alex Gutschein ist Filialsystem
				var checkVar = "<?php if (FILIALSYSTEM_IST_FILIALSYSTEM == 'ja') echo FILIALSYSTEM_IST_FILIALSYSTEM; ?>";
				if (checkVar !== "") {
					
						$.ajax({
							type: "POST",
							url: "ajax_funktionen.php",
							dataType : "html",
							data: {funktion: "upsync", selVal: "incr"},
							async: true,
							success:function(html){	
								//console.log("sync successful");
								//console.log(html);
							}
						});
						//var endDate   = new Date();					
						//console.log( "Load Gs fertig: "+(endDate - startDate) / 1000);				
					}
				//var endDate   = new Date();					
				//console.log( "Load Gs fertig: "+(endDate - startDate) / 1000);				
			}
			else {
				$text = "<span style='color:red'>"+ ajaxResponse +"</span>";
				$("#gutscheinModalResponseTxt").html($text);
				//alert (ajaxResponse);
				console.log(ajaxResponse);
			}
		}
	});
}

function gutscheinKarteBearbeiten(fParam) {
	if ($("#gutscheinkarteModal").css("display") == "none") {
		$("#gutscheinkarteModal").css({ "display": "block" });
		$("#gutscheinKarteModalIp").prop('disabled', false).focus();
		$("#gutschModalFocusIndicator").val('gutscheinKarteModalIp');
	}
	else {
		$("#gutscheinkarteModal").css({ "display": "none" });
	}
}

function closeGutscheinModal(target = false) {
	if (target == 'adminBearbeiten') {
		$("#gutscheinBearbeitenModal").css({ "display": "none" });
		$("#gutschBearbModalLeft").html("");
		$("#gutschBearbModalRight").html("");

		//$("#gutscheinBearbeitenModal").find('.modal-body').html("");
	}
	else if (target == 'adminAnlegenBearbeiten') {
		$("#gutscheinBearbeitenAnlegenModal").css({ "display": "none" });
		$("#gutscheinKarteModalIp,#gutscheinKarteValueToLoad, #gutscheinKarteCustId, #gutscheinKarteValueExist, #gutscheinKarteKommentar,  #kundenSearchGutscheinModalField").val('');
		//	$("#gsKarteAufladenBut, #gsKarteAnlegenBut, #gsKarteEntsperrenBut, #gsKarteDeleteBut, #gsBearbeitenModalClearBut, #gsKartePrintBut ").css({"display":"none"		});
		$(".gutscheinModalBut").css({ "display": "none" });
		$("#selectedCustGutschModal, #gutscheinModalResponseTxt").html('');
		$("#gsVerkaufsArt").prop("selectedIndex", 0);
		$("#cardNoCreateBut").css({ "display": "block" });
		$('#searchResultGutscheinDiv').html('').css({ 'visibility': 'hidden' });
		$("#gsTaxSelectElem").prop("selectedIndex", 0);
		$('#gsZahlungsArt').prop("selectedIndex", 0);
	}

	else {
		// hier wird das Gs Modal im bonieren Fenster geschlossen
		$("#gutscheinBearbeitenAnlegenModal").css({ "display": "none" });
		$("#gutscheinKarteModalIp,#gutscheinKarteValueToLoad, #gutscheinKarteCustId, #gutscheinKarteValueExist, #gutscheinKarteKommentar, #kundenSearchGutscheinModalField").val('');
		$("#selectedCustGutschModal, #gutscheinModalResponseTxt").html('');
		$("#gsKarteAufladenBut, #gsKarteAnlegenBut, #gsKarteEntsperrenBut, #gsKarteDeleteBut, #gsBearbeitenModalClearBut, #gsSaveTotalBut, #gsKartePrintBut ").css({ "display": "none" });
		$("#gutscheinkarteModal, #gsKarteClearCustfieldBut, #gsKarteSperrenBut").css({ "display": "none" });
		$("#gsVerkaufsArt").prop("selectedIndex", 0).prop('disabled', false);
		$("#cardNoCreateBut").css({ "display": "block" });
		$('#gsZahlungsArt').prop("selectedIndex", 0);

		if (typeof gutscheinStandardTaxrate !== 'undefined') {
			// die variable ist in anlegen_gutscheine.php dies gilt nur für das modal im admin bereich
			$("#gsTaxSelectElem option[value='" + gutscheinStandardTaxrate + "']").prop("selected", true);
		}
	}
	window.location.reload();
}

function cClearGsBearbeitenModalFields() {
	// hier werden die Felder geleert aber das modal bleibt offen
	$("#gutscheinKarteModalIp,#gutscheinKarteValueToLoad, #gutscheinKarteCustId, #gutscheinKarteValueExist, #gutscheinKarteKommentar,  #kundenSearchGutscheinModalField").val('');
	$("#selectedCustGutschModal, #gutscheinModalResponseTxt").html('');
	$("#gsKarteAufladenBut, #gsKarteAnlegenBut, #gsKarteEntsperrenBut, #gsKarteDeleteBut, #gsBearbeitenModalClearBut, #gsKartePrintBut, #gsSaveTotalBut ").css({ "display": "none" });
	$("#gutscheinkarteModal, #gsKarteClearCustfieldBut, #gsKarteSperrenBut").css({ "display": "none" });
	$("#cardNoCreateBut").css({ "display": "block" });
	$("#gsVerkaufsArt").prop("selectedIndex", 0).prop('disabled', false);
	$("#gsTaxSelectElem").prop('disabled', false);
	$("#gutscheinKarteModalIp").prop('disabled', false).focus();
	$("#gutschModalFocusIndicator").val('gutscheinKarteModalIp');

	if (typeof gutscheinStandardTaxrate !== 'undefined') {
		// die variable ist in anlegen_gutscheine.php dies gilt nur für das modal im admin bereich
		$("#gsTaxSelectElem option[value='" + gutscheinStandardTaxrate + "']").prop("selected", true);
	}
}

function addNextCardNo(funcKey, cartNo, amountToPush) {
	if (funcKey == 'getArrayData') {
		if (typeof gsCardMultiBook !== 'undefined' && gsCardMultiBook.length > 0) {
			return gsCardMultiBook;
		}
		else {
			return false;
		}

	}
	else if (funcKey == 'pushMultibookArray') {
		arrayL = gsCardMultiBook.length;
		checkOnExist = false;
		for (i = 0; i < arrayL; i++) {
			if (gsCardMultiBook[i][0] == cartNo) checkOnExist = true;
		}
		if (checkOnExist == false) {
			nextData = new Array(cartNo, amountToPush);
			gsCardMultiBook.push(nextData);
			return true;
		}
		else return false;


	}
	else if (funcKey == 'clearMultibookArray') {
		if (typeof gsCardMultiBook !== 'undefined' && gsCardMultiBook.length > 0) {
			while (gsCardMultiBook.length > 0) {
				gsCardMultiBook.pop();		// laut internet schnellste methode zum löchen bzw entleeren eines arrays
				// das wird bei zahlung_abgeschlossen und abbrechen aufgerufen, da werden die felder und diese array gelöscht
			}
		}
		return false;
	}
	openAm = $("#offener_betrag").val();
	if (openAm != "") {
		openAm = openAm.replace(",", ".");
		openAm *= 1;
		if (openAm <= 0) return false;
	}

	if ($("#gsCardMultiBookCounter").val() == 0) {
		currCardNo = $("#gutschein_nr_ip").val();
		currBookAmmount = $("#gutschein_nr_ip").prev().val();
		gsCardMultiBook = [[currCardNo, currBookAmmount]];

		$("#getCardRestvalBut").css({ "display": "none" });
		$("#gsCardMultiBookCounter").val(1).css({ "display": "block" });
		$("#gutschein_nr_ip").val("").prop("disabled", false).css({ "color": "", "font-weight": "" }).focus();
		$("#offener_betrag").css({ "color": "", "font-weight": "" });

	}
	else {
		$("#gutschein_nr_ip").val("").prop("disabled", false).css({ "color": "", "font-weight": "" }).focus();
		$("#offener_betrag").css({ "color": "", "font-weight": "" });
		// wenn multi booking schon gesetzt wird beim nächsten plus hier nur das eingabe feld leer gemacht, der rest passiert kassieren.php -> getCreditOfCardNo
	}
}

function gsCardNoCreate() {
	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'gutscheinKarteCreateNo' },
		async: true,
		success: function (ajaxResponse) {
			if (ajaxResponse.toLowerCase().indexOf('error') !== -1) $("#gutscheinModalResponseTxt").html("Fehler beim Erstellen der Karten Nummer.");
			else {
				$("#gutscheinKarteModalIp").val(ajaxResponse.trim());
				getGutscheincardDataAufladen(ajaxResponse);
			}

		}
	});

}


function getGutscheincardDataAufladen(gutscheinCardNo) {

	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'getCardCredit', gutscheinCardNo: gutscheinCardNo, openAmount: 0 },
		async: true,
		success: function (ajaxResponse) {
			
			if (checkJson(ajaxResponse) == true) {
				respArray = JSON.parse(ajaxResponse);			// array index 0			3 response text
				
				
				
				if (respArray[5] != false) $("#selectedCustGutschModal").html(respArray[5]);
				else $("#selectedCustGutschModal").html("");

				if (respArray[0] == 1 && respArray[2] == 0) {		// karte gibts -> aufladen modus
					$("#gsKarteAnlegenBut, #gsKarteEntsperrenBut").css({ "display": "none" });
					$("#gsKarteAufladenBut, #gsKarteSperrenBut, #gsKartePrintBut").css({ "display": "block" });
					$("#gutscheinKarteValueExist").val(respArray[4]);
					$("#gutscheinKarteCustId").val(respArray[6]);
					$("#gutscheinKarteValueToLoad").val('').prop('disabled', false).focus();
					if (respArray[6] > 0) $("#gsKarteClearCustfieldBut").css({ "display": "block" });
					else $("#gsKarteClearCustfieldBut").css({ "display": "none" });
					$("#gutscheinKarteModalIp").val(respArray[7]).prop('disabled', true);
					$("#gutschModalFocusIndicator").val('gutscheinKarteValueToLoad');
					$("#gsTaxSelectElem option[value='" + respArray[8] + "']").prop("selected", true);
					$("#gsTaxSelectElem").prop('disabled', 'disabled');
					$("#gsVerkaufsArt option[name='" + respArray[10] + "']").prop("selected", true);
					$("#gsVerkaufsArt").prop("selectedIndex", 0).prop('disabled', false);
					//if (respArray[10] != null) $("#gsVerkaufsArt").prop("selectedIndex", 0).prop('disabled', 'disabled');
					$("#gsBearbeitenModalClearBut, #gsKarteDeleteBut, #gsSaveTotalBut").css({ "display": "block" });
					$("#gutscheinKarteKommentar").val(respArray[9]);
				}
				else if (respArray[0] == 0 && respArray[1] == 0 && respArray[2] == 0) {	// karte gibts noch nicht -> neu anlegen Modus
					$("#gutscheinModalResponseTxt").html(respArray[3]);
					$("#gsKarteAufladenBut, gsKarteEntsperrenBut, #gsKarteSperrenBut").css({ "display": "none" });
					$("#gsKarteAnlegenBut").css({ "display": "block" });
					$("#gutscheinKarteValueExist").val(0);
					$("#gutscheinKarteCustId").val(respArray[6]);
					$("#gsKarteClearCustfieldBut").css({ "display": "none" });
					$("#gutscheinKarteValueToLoad").val('').prop('disabled', false).focus();
					$("#gsVerkaufsArt").prop("selectedIndex", 0).prop('disabled', false);
					$("#gsTaxSelectElem option[value='0.0000']").prop("selected", true);
					$("#gsTaxSelectElem").prop('disabled', false);
					$("#gutschModalFocusIndicator").val('gutscheinKarteValueToLoad');
					$("#gsKarteDeleteBut").css({ "display": "none" });
				}
				else if (respArray[0] == 1 && respArray[2] == 1) {	// karte gibts ist aber gesperrt
					$("#gutscheinModalResponseTxt").html(respArray[3]);
					$("#gsKarteAufladenBut, #gsKarteAnlegenBut, #gsKarteSperrenBut").css({ "display": "none" });
					$("#gutscheinKarteValueExist").val(respArray[4]);
					$("#gutscheinKarteCustId").val(respArray[6]);
					$("#gutscheinKarteValueToLoad").val('').prop('disabled', true).val("");
					$("#gsKarteEntsperrenBut").css({ "display": "block" });
					$("#gsKarteClearCustfieldBut").css({ "display": "none" });
					$("#gsVerkaufsArt option[name='" + respArray[10] + "']").prop("selected", true);
					$("#gsVerkaufsArt").prop('disabled', 'disabled');
					$("#gutscheinKarteModalIp").val(respArray[7]).focus();
					$("#gutschModalFocusIndicator").val('gutscheinKarteModalIp');

					$("#gsTaxSelectElem option[value='" + respArray[8] + "']").prop("selected", true);
					$("#gsTaxSelectElem").prop('disabled', 'disabled');
					$("#gsKarteDeleteBut").css({ "display": "block" });
					$("#gsBearbeitenModalClearBut").css({ "display": "block" });
				}

				$("#cardNoCreateBut").css({ "display": "none" });
			}
			else console.log(ajaxResponse);

		}
	});

}

/*         Preisgruppen, Sondermarkt, Sozialmarkt .. functions
---------------------------------------------------------*/

function soMaDiscountLine(prodArray = false) {
	// inhalt von prodArray
	//	kaufXzahlY,ja,6475,4.54545455,0.1000,4.0000,msgTxt   -> discountType, relevant, prdoId, price, taxrate, qty, messageText 

	//prodArray[0]-> discount type, prodArray[1]-> relevant 'ja', prodArray[2]-> prodId
	if (typeof prodArray[2] !== 'undefined' && prodArray[2] * 1 > 0) prodId = prodArray[2];
	else {
		//console.log("soMaDiscountLine glob js 3422 -> exit");
		return false;
	}

	//console.log("func somadiscountline 3427  übergebene Param->\n"+prodArray);

	// prodArrayInhalt: kaufXzahlY,ja,6475,4.54545455,0.1000,4.0000,1,ge     type, relevant, prodId, price, taxrate, stueck, offenerBonId, msgTxt
	preis = prodArray[3]; taxRate = prodArray[4]; stueck = prodArray[5]; aktuellerBon = prodArray[6]; ean = false; discountType = prodArray[0];
	$.ajax({
		type: "POST", url: "ajax_funktionen_kp.php", dataType: "html",
		data: { functionKey: 'soMaDiscountLine', prodId: prodId, stueck: stueck, preis: preis, taxRate: taxRate, aktuellerBon: aktuellerBon, ean: ean, discountType: discountType },
		async: false,
		success: function (ajaxResponse) {
			if (checkJson(ajaxResponse) == true) {
				respArray = JSON.parse(ajaxResponse);
				if (respArray[0] != "") {
					bon_anzeigen();
					//console.log("soMa Response aus soma discount line check -> \n"+respArray);
				}
			}
		}
	});
}

/*
function openBonSomaCalc(){
	prodId=false; stueck=false; preis=false; taxRate=false; aktuellerBon=false; ean=false; discountType=false;
	lineToSelect=false;
	lineToLock=false;
	$.ajax({
			type: "POST", url: "ajax_funktionen_kp.php", dataType : "html",
			data: {functionKey:'openBonSomaCalc', prodId:prodId, stueck:stueck, preis:preis, taxRate:taxRate, aktuellerBon:aktuellerBon, ean:ean, discountType:discountType 				 },
			async: false,
			success:function(ajaxResponse){
				if(checkJson(ajaxResponse) == true) {						
					respArray=JSON.parse(ajaxResponse);
					if (respArray[0] != ""){
						if(respArray[1]*1 > 0){
								lineToSelect=respArray[1]*1;
								
						}
						if(respArray[2].length > 0){
								// wird zur formatierung der Discount Zeile verwendet -> kassieren.php ca zeile 700, am ende der function bon_anzeigen
								//   würden wir es hier machen, wird es im Programmablauf überschrieben
								//console.log("Line to Lock Array ? -> "+respArray[2].length);
							lineToLock=respArray[2];
						}
							//bon_anzeigen();						
					}
				}
				else console.log("JSON failed: response -> "+ajaxResponse);
			}
	});	
			// lineToLock ist ein array, können mehrere Discount Zeilen in einem offener_bon sein !!!
		returnVal= [lineToSelect, lineToLock ];
		return returnVal;
	 
		// das ist die zu selectierende Line wenn eine Zeile ans Ende geschoben wurde und discountZeile zum sperren? und formatieren
	
}
*/

function swappCustImg(idClicked) {
	// this.id, 'preisGruppenFotoB'
	$("#" + idClicked).css({ 'z-index': '99' });
	if (idClicked == 'preisGruppenFotoA') { $("#preisGruppenFotoB").css({ 'z-index': 95 }); }
	else { $("#preisGruppenFotoA").css({ 'z-index': 95 }); }

}

function hidePaymentButtons(directions = false) {
	/*bezahlenExpressZahlartButtonEc
	bezahlenExpressZahlartButton
	zahlungAbgeschlExprBut
	*/
	if (directions != false) {
		cssVal = directions
		$("#kassieren, #bezahlenExpressZahlartButtonEc, #bezahlenExpressZahlartButton, #zahlungAbgeschlExprBut").css({ 'display': cssVal });

		checkCustomerLoaded = checkSession('customerToEmptyBonOnBon');
		console.log("hidePaymentButtons ausblenden !" + cssVal);
	}

}

function checkSession(sessionName = false) {
	$.ajax({
		type: "POST", url: "ajax_funktionen_kp.php", dataType: "html",
		data: { functionKey: 'checkSession', sessionName: sessionName },
		async: true,
		success: function (ajaxResponse) {
			if (checkJson(ajaxResponse) == true) {
				respArray = JSON.parse(ajaxResponse);

				if (respArray[0].toLowerCase() == 'success') {


				}
			}
		}
	});

}


// edi, Electronic Data Interchange aus file (c:\sitpos\import) in den offener_bon schreiben
function ediAusFileImport() { 
	// Zuerst leeren Warenkorb machen
	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'get_leeren_warenkorb' },
		async: false,
		success: function (ajaxResponse) {
			//alert(ajaxResponse);
			//location.reload();
			if (checkJson(ajaxResponse) == true) {

				respArray = JSON.parse(ajaxResponse);
				if (respArray[0] == "neuer_warenkorb") {
					$("#bon_sum_div_customer_name").html("");
					
					warenkorb = respArray[1];
					warenkorb_waehlen("add");
					warenkoerbe_anzeigen();
					//alert(warenkorb);
				}
			}
		}
	});
	// EDI Import
	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'ediAusFileImport' },
		async: false,
		success: function (ajaxResponse) {
			//alert(ajaxResponse);
			if (checkJson(ajaxResponse) == true) {
				respArray = JSON.parse(ajaxResponse);
				//alert(respArray[1]);
				$("#error_message").html(respArray[1]);
				//console.log("edi resp ajaxResponse -> true ??\n"+respArray[1]+"\n");
				//alert(respArray[1]);
			}
			//bon_anzeigen();
		}
	});
	bon_anzeigen();
}

function setActiveGutschModalField(fieldId) {
	$("#gutschModalFocusIndicator").val(fieldId);
}


function clearGutscheinkartenFields() {
	$("#gutschein_nr_ip, #gutscheinkarteRestbetrag, #gsZahlungDisplay").val("");
	$("#gsCardMultiBookCounter, #gutscheinKarteKundenIp").val(0);
	$("#zahlenModalInfoP").html("");
	$("#gsCardMultiBookCounter, .addNextCardBut, .getCardRestvalBut").css({ "display": "none" });
	addNextCardNo('clearMultibookArray', '', '');
	$("#gutschein_nr_ip").prop("disabled", false).css({ "color": "", "font-weight": "" });
	$("#offener_betrag").css({ "color": "", "font-weight": "" });
}


/*         eMail functions
---------------------------------------------------------*/

function sendEmail(callfrom = false, mailcontent = false, backupFileLink = false) {

	if (callfrom == 'testmail') {
		mailEmpf = $("#EMAIL_EMPFAENGER").val();

		if (mailEmpf.indexOf(';') !== -1) {
			list = mailEmpf.split(";");
			for (i = 0; i < list.length; i++) {
				if (isValidEmailAddress(list[i]) != true) {
					alert("Eine oder mehrere eMail Adressen sind ungültig");
					return false;
				}
			}
		}
		else {
			if (isValidEmailAddress(mailEmpf) != true) {
				alert("Ungültige eMail Adresse");
				return false;
			}
		}
	}
	mailEmpf = false;

	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=sendEmail&empfAdress=" + mailEmpf + "&modus=" + callfrom + "&mailcontent=" + mailcontent + "&backupFileLink=" + backupFileLink;
	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

	if (callfrom == 'testmail') $("#configMailMsgDiv").html(resp);

}

function isValidEmailAddress(emailAddress) {
	var pattern = new RegExp(/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/);
	return pattern.test(emailAddress);
};


/*         kp Kassabuch Test
---------------------------------------------------------*/


function testKassabuch() {
	$("#kassbuchRes").html('');
	xmlhttp = GetXmlHttpObject();
	xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
	sendCont = "functionKey=testKassabuch";
	xmlhttp.send(sendCont);
	resp = xmlhttp.responseText;

	$("#kassbuchRes").html(resp);


}

function testXX() {
	//console.log("text xx aufgerufen");

	$.ajax({
		type: "POST",
		url: "include/cardPayment/function_kartex.php",
		dataType: "html",
		data: { funktion: 'KPE_Test' },
		async: true,
		success: function (response) {
			console.log(response);
		}
	});

}


/*            prüft ob zb der ajax return wert ein json object ist
	ist es auf ein json object bz array ausgelegt und der ajax rewuest macht einen error 
	kommt ein string anstelle vom array/oject retour
---------------------------------------------------------------------------*/
function checkJson(checkIt) {
	try {
		JSON.parse(checkIt);
		return true;
	}
	catch (error) {
		return false;
	}
}

function checkPrintSession() {
	$.ajax({
		type: "POST",
		url: "zuztest.php",
		dataType: "html",
		data: {},
		async: true,
		success: function (response) {
			console.log(response);
		}
	});


}


function runKpXtest(xresp = false) {
	//$("#zahlungAbgeschlExprBut").prop('disabled', true);
	//$("#zahlungDisableImg").css({ "display":"block"			});

	if ($("#bon_nameHeader").hasClass("bon_name")) {
		$("#bon_nameHeader").css({ 'color': '#ff000' }).removeClass("bon_name");
		console.log("Zeile 3953: class, bon_name removed\n");
	}
	else {
		$("#bon_nameHeader").css({ 'color': '#000ff' }).addClass("bon_name");
		console.log("Zeile 3953: class, bon_name added\n");
	}

	//$("#bon_nameHeader").css({ 'color':'#ff000', 'border':'red solid 3px'			}).removeClass( "bon_name" );
	//$("#menu").css({'border':'#00f inset 3px'			});
	console.log("Zeile 3951 function runKpXtest( ... \n");
	//return false;
}

function kpPrintTest() {
	console.log("kpPrintTest aufgerufen ");
	$.ajax({
		type: "POST",
		url: "ajax_funktionen.php",
		dataType: "html",
		data: { funktion: 'kpPrintTest' },
		async: true,
		success: function (response) {
			if (checkJson(response) == true) {
				respArray = JSON.parse(response);
				if (respArray[0].toLowerCase() == 'success') {
					console.log(respArray[0] + " - " + respArray[1] + ":::::::");
				}
				else {
					console.log(respArray[0] + " - " + respArray[1] + " - " + respArray[2]);
				}
			}
			else console.log("global js kpPrintTest !! " + response);
		}
	});
}

function kpAjaxTest(cart = false, fromId = false, sleepT = false) {

	var d = new Date();
	var n = d.getDate() + '.' + d.getMonth() + 1 + ' ' + d.getMinutes() + ':' + d.getSeconds();
	console.log(cart + " -- " + fromId + " -Start-> " + n);

	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'kpAjaxTest', cart: cart, fromId: fromId, sleepT: sleepT },
		async: true,
		success: function (response) {
			if (checkJson(response) == true) {
				respArray = JSON.parse(response);
				if (respArray[0].toLowerCase() == 'success') {
					var d1 = new Date();
					var n1 = d1.getDate() + '.' + d1.getMonth() + ' ' + d1.getMinutes() + ':' + d1.getSeconds();
					console.log(respArray[0] + " - " + respArray[1] + " -Response-> " + n1 + " - ");
					//bon_anzeigen(respArray[3]);

				}
				else {
					console.log(respArray[0] + " - " + respArray[1] + " - " + respArray[2]);
				}
			}
			else console.log("global js kpAjaxTest !! " + response);
		}
	});

}


function kpTestLsA4() {
	console.log("a4 ls ausdruck ");

}

function kpTestDestroySession(direction = false) {
	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'kpTestDestroySession', direction: direction },
		async: true,
		success: function (response) {
			console.log(response);
		}
	});

}


function manualGestartetDepExport() {
	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'autoDepExportManuell' },
		async: true,
		success: function (response) {
			console.log(response);
		}
	});

}

function manualGestartetAutoBackup() {
	$.ajax({
		type: "POST",
		url: "ajax_funktionen_kp.php",
		dataType: "html",
		data: { functionKey: 'manualGestartetAutoBackup' },
		async: true,
		success: function (response) {
			console.log(response);
		}
	});

}



function txtTest() {
	//location.reload();

	// $('#selectedResolutionForConfig').val($('#adminConfigSelectDatabaseColumn option:selected').val());
	displayConfigDiv('config_additonal_footertext', '');


	/*console.log(" Zeile 4175 txtTest aufgerufen");
	i=0;
	$("#configAddBonTxtElements .addProdTxtLine").each(function(){	
		i++;
		console.log(" Zeile 4179 each function .. ->  "+i+" -- " +$(this).prop('id')+ " value->  "+$(this).val()+" -- "+$(this).show());
	});
	*/
}
























































