

	/********** Bilder in der Auswahl tauschen **********/
	//	void
	function changeAuswahlImage
	(	objImage
	)

	{  document.getElementById('auswahlImgMaxi').src = objImage.src;
	}


	/********** Mietpreis löschen **********/
	//	void
	function loeschePreis
	(	//	void
	)

	{	document.getElementById('tageInklKm').firstChild.nodeValue = "";
		document.getElementById('endPreis').firstChild.nodeValue = "";
		document.getElementById('selbstbeteiligung').firstChild.nodeValue = "";
	}

	
	/********** Mietpreis berechnen **********/
	//	void
	function preisOut
	(	//	void
	)

	{  var dwMietTage;
		var dwFreikmGesamt;
		var ldMietPreis;
		var ldPreisCDWTag;
		var ldPreisCDWWoche;
		var ldSelbstbeteiligung;
		var szPreisAusgabe;
		var szKmAusgabe;


		//	Miettage berechnen
		dwMietTage = getMiettage();

		//	Rückgabe vor Anmietung
		if(dwMietTage < 0)
		{	document.getElementById('tageInklKm').firstChild.nodeValue = "";
			document.getElementById('endPreis').firstChild.nodeValue = "";
			document.getElementById('selbstbeteiligung').firstChild.nodeValue = "Rückgabe vor Anmietung!";

			return;
		}

		//	Kosten für die Haftungsbegrenzung
		if(mitOderOhneCDW() == true)
		{	ldPreisCDWTag 	 = getSelbstbeteiligungTag();
			ldPreisCDWWoche = getSelbstbeteiligungWoche();
		}
		else
		{  ldPreisCDWTag 	 = 0.00;
			ldPreisCDWWoche = 0.00;
		}

		if((ldPreisCDWTag < 0.0) || (ldPreisCDWWoche < 0.0))
		{	rechenfehler();
			return;
		}

		//	Höhe der Selbstbeteiligung
		ldSelbstbeteiligung = getSB();

		//	Freikilometer pro Tag
		dwFreikmGesamt = getFreikmGesamt();

		//	Mietpreis auf Basis des Tagepreises
		ldMietPreis = berechneMietpreis(dwMietTage, dwFreikmGesamt, ldPreisCDWTag, ldPreisCDWWoche);

		if(ldMietPreis < 0.0)
		{	rechenfehler();
			return;
		}

		//	Den Mietpreis formatieren
		szPreisAusgabe = formatWert(ldMietPreis, 2);

		//	Kilometer formatieren
		if(dwFreikmGesamt < 0)
		{	szKmAusgabe = "alle";
		}
		else
		{	szKmAusgabe = formatWert(dwFreikmGesamt, 0);
		}

		//	Selbstbeteiligung formatieren
		szSelbstbeteiligung = formatWert(ldSelbstbeteiligung, 2);

		//	Miete ausgeben
		if(dwMietTage == 1)
		{  document.getElementById('tageInklKm').firstChild.nodeValue = "1 Tag inkl. " + szKmAusgabe + " km ";
		}
		else
		{	document.getElementById('tageInklKm').firstChild.nodeValue = dwMietTage + " Tage inkl. " + szKmAusgabe + " km ";
		}

		document.getElementById('endPreis').firstChild.nodeValue = szPreisAusgabe + " EUR";
		document.getElementById('selbstbeteiligung').firstChild.nodeValue = " / SB bei Unfall " + szSelbstbeteiligung + " EUR";
	}


	/********** Miettage berechnen **********/
	//	DWORD
	function getMiettage
	(	//	void
	)

	{	var objDateOut;
		var objDateIn;
		var objTimeOut;
		var objTimeIn;
		var szUTCDatumOut;
		var szUTCDatumIn;
		var arUTCOut;
		var arUTCIn;
		var dwMietStunden;
		var dwMietTage;


		//	eingegebene Werte auslesen
		objDateOut = document.getElementById('datumAus').value;
		objDateIn  = document.getElementById('datumEin').value;
		objTimeOut = document.getElementById('zeitAus').value;
		objTimeIn  = document.getElementById('zeitEin').value;

		//	Anmietdatum / -zeit
		szUTCDatumOut = getUTCDatum(objDateOut, objTimeOut);

		//	Rückgabedatum / -zeit
		szUTCDatumIn = getUTCDatum(objDateIn, objTimeIn);

		//	Daten wieder zerlegen
		arUTCOut = szUTCDatumOut.split(",");
		arUTCIn  = szUTCDatumIn.split(",");

		//	Mietstunden
		dwMietStunden =
		(Date.UTC(arUTCIn[0], arUTCIn[1] - 1, arUTCIn[2], arUTCIn[3], arUTCIn[4], arUTCIn[5]) -
		 Date.UTC(arUTCOut[0], arUTCOut[1] - 1, arUTCOut[2], arUTCOut[3], arUTCOut[4], arUTCOut[5])) /
		 3600000;

		//	Miettage
		if(dwMietStunden < 0)
		{	dwMietTage = -1;
		}
		else
		{  //	Eine Stunde Toleranz
			if(dwMietStunden > 24)
			{	--dwMietStunden;
			}
			
			dwMietTage = Math.ceil(dwMietStunden / 24);

			if(dwMietTage == 0)
			{	dwMietTage = 1;
			}
		}

		//	Ergebnis zurück
		return(dwMietTage);
	}


	/********** Datum ins UTC Format umwandeln **********/
	//	char *
	function getUTCDatum
	(	objDate,
		objTime
	)

	{	var arObject;
		var arDatum;
		var szUTCDatum;


		//	Wochentag, Leerzeichen und Datum trennen.
		arObject = objDate.split(" ");

		//	Datum zerlegen
		arDatum = arObject[1].split(".");

		//	UTC-konform wieder zursammenbauen
		szUTCDatum = arDatum[2] + "," + arDatum[1] + "," + arDatum[0];

		//	Uhrzeit noch anhängen
		szUTCDatum = getUTC(szUTCDatum, objTime);

		//	Fertig
		return(szUTCDatum);
	}


	/********** Unterfunktion von getUTCDatum **********/
	// char *
	function getUTC
	(	szDatumOut,
		objTime
	)

	{  var arObject;
		var arZeit;
		var szUTC;


		//	abschließendes Leerzeichen entfernen
		arObject = objTime.split(" ");

		//	Uhrzeit zerlegen
		arZeit = arObject[0].split(":");

		//	UTC-konformen String bauen
		szUTC = szDatumOut + "," + arZeit[0] + "," + arZeit[1] + ",00";

		//	Fertig
		return(szUTC);
	}


	/********** gewünschte Freikm pro Tag **********/
	// DWORD
	function getFreikmGesamt
	(	//	void
	)

	{  return(document.getElementById('freikmGesamt').value);
	}


	/********** mit oder ohne Haftungsbegrenzung? **********/
	// BOOL
	function mitOderOhneCDW
	(	//	void
	)

	{  if((typeof(glVarPreisVK1Tag) != 'undefined') || (typeof(glVarPreisVK1Woche) != 'undefined') ||
			(typeof(glVarPreisVK2Tag) != 'undefined') || (typeof(glVarPreisVK2Woche) != 'undefined'))
		{  //	Der erste Button ist für die kostenfreie Haftungsbegrenzung
			if(document.getElementById('mietdaten').sb[0].checked == true)
			{  return(false);
			}
			else
			{	return(true);
			}
		}
		else
		{	return(false);
		}
	}


	/********** Höhe der Selbstbeteiligung **********/
	// long double
	function getSB
	(	//	void
	)

	{  if((typeof(glVarPreisVK1Tag) != 'undefined') || (typeof(glVarPreisVK1Woche) != 'undefined'))
		{  //	Der erste Button ist für die kostenfreie Haftungsbegrenzung
			if(document.getElementById('mietdaten').sb[0].checked == true)
			{  return(document.getElementById('mietdaten').sb[0].value);
			}
			else if(document.getElementById('mietdaten').sb[1].checked == true)
			{  return(document.getElementById('mietdaten').sb[1].value);
			}

			if((typeof(glVarPreisVK2Tag) != 'undefined') || (typeof(glVarPreisVK2Woche) != 'undefined'))
			{	if(document.getElementById('mietdaten').sb[2].checked == true)
				{  return(document.getElementById('mietdaten').sb[2].value);
				}
			}
		}

		return(25000.00);
	}


	/********** Preis Haftungsbegrenzung pro Tag **********/
	// long double
	function getSelbstbeteiligungTag
	(	//	void
	)

	{  if(typeof(glVarPreisVK1Tag) != 'undefined')
		{	if(document.getElementById('mietdaten').sb[1].checked == true)
			{  return(glVarPreisVK1Tag);
			}
		}
		else if(typeof(glVarPreisVK1Woche) != 'undefined')
		{	if(document.getElementById('mietdaten').sb[1].checked == true)
			{  return(glVarPreisVK1Woche);
			}
		}

		if(typeof(glVarPreisVK2Tag) != 'undefined')
		{	if(document.getElementById('mietdaten').sb[2].checked == true)
			{  return(glVarPreisVK2Tag);
			}
		}
		else if(typeof(glVarPreisVK2Woche) != 'undefined')
		{	if(document.getElementById('mietdaten').sb[2].checked == true)
			{  return(glVarPreisVK2Woche);
			}
		}

		else
		{	return(-1.0);
		}
	}


	/********** Preis Haftungsbegrenzung pro Woche **********/
	// long double
	function getSelbstbeteiligungWoche
	(	//	void
	)

	{  if(typeof(glVarPreisVK1Woche) != 'undefined')
		{	if(document.getElementById('mietdaten').sb[1].checked == true)
			{  return(glVarPreisVK1Woche);
			}
		}
		else if(typeof(glVarPreisVK1Tag) != 'undefined')
		{	if(document.getElementById('mietdaten').sb[1].checked == true)
			{  return(glVarPreisVK1Tag * 7);
			}
		}

		if(typeof(glVarPreisVK2Woche) != 'undefined')
		{	if(document.getElementById('mietdaten').sb[2].checked == true)
			{  return(glVarPreisVK2Woche);
			}
		}
		else if(typeof(glVarPreisVK2Tag) != 'undefined')
		{	if(document.getElementById('mietdaten').sb[2].checked == true)
			{  return(glVarPreisVK2Tag * 7);
			}
		}

		else
		{	return(-1.0);
		}
	}


	/********** Mietpreis auf der Basis des Tagespreises berechnen **********/
	// long double
	function berechneMietpreis
	(	dwMietTage,
		dwFreikmGesamt,
		ldPreisCDWTag,
		ldPreisCDWWoche
	)

	{  var dwFreiKm;
		var ldKmPreis;
		var ldTagesPreis;
		var ldWochenPreis;


		//	Längere Mietdauer als zwei Wochen unberücksichtigt lassen
		if(dwMietTage > 14)
		{	return(-1.0);
		}

		//	Bei nur einem Tag auf Samstagstarif testen
		if((dwMietTage == 1) && (checkSamstag() == true) && (typeof(glVarPreisSa) != 'undefined'))
		{  //	Preis für die Zusatzkilometer
			if(typeof(glVarFreikmSa) != 'undefined')
			{	ldKmPreis = berechneKmPreis(dwFreikmGesamt, glVarFreikmSa);
			}
			else
			{  ldKmPreis = berechneKmPreis(dwFreikmGesamt, 0);
			}

			return(glVarPreisSa + ldPreisCDWTag + ldKmPreis);
		}

		//	Tagespreis normal
		if(typeof(glVarFreikmTaeglich) != 'undefined')
		{  //	Preis für die Zusatzkilometer
			if(typeof(glVarFreikmTaeglich) != 'undefined')
			{	ldKmPreis = berechneKmPreis(dwFreikmGesamt, glVarFreikmTaeglich * dwMietTage);
			}
			else
			{  ldKmPreis = berechneKmPreis(dwFreikmGesamt, 0);
			}

			ldTagesPreis = (glVarPreisTaeglich + ldPreisCDWTag) * dwMietTage + ldKmPreis;
		}
		else
		{	ldTagesPreis = 0.0;
		}

		//	Wochenpreis
		if(typeof(glVarPreisWoche) != 'undefined')
		{  //	Preis für die Zusatzkilometer
			if(typeof(glVarFreikmWoche) != 'undefined')
			{	dwFreiKm = glVarFreikmWoche;
			}
			else if(typeof(glVarFreikmTaeglich) != 'undefined')
			{	dwFreiKm = 7 * glVarFreikmTaeglich;
			}
			else if(typeof(glVarFreikmSa) != 'undefined')
			{	dwFreiKm = 7 * glVarFreikmSa;
			}
			else
			{	dwFreiKm = 0;
			}

			if(dwMietTage > 6)
			{	ldKmPreis 	  = berechneKmPreis(dwFreikmGesamt, (dwFreiKm * dwMietTage) / 7);
				ldWochenPreis = (dwMietTage / 7) * glVarPreisWoche + ldKmPreis;

				if(ldPreisCDWWoche)
				{	ldWochenPreis += ((dwMietTage / 7) * ldPreisCDWWoche);
				}
				else
				{	ldWochenPreis += (dwMietTage * ldPreisCDWTag);
				}
			}
			else
			{  ldKmPreis = berechneKmPreis(dwFreikmGesamt, dwFreiKm);
				ldWochenPreis = glVarPreisWoche + ldKmPreis;

				if(ldPreisCDWTag)
				{	ldWochenPreis += (dwMietTage * ldPreisCDWTag);
				}
				else
				{	ldWochenPreis += ldPreisCDWWoche;
				}
			}
		}
		else
		{	ldWochenPreis = 0.0;
		}

		//	Dengünstigsten Tarif zurückgeben.
		if(ldWochenPreis && (ldWochenPreis < ldTagesPreis))
		{	return(ldWochenPreis);
		}
		else
		{	return(ldTagesPreis);
		}
	}


	/********** Preis für die Mehrkilometer berechnen **********/
	// long double
	function berechneKmPreis
	(	dwFahrstrecke,
		dwFreiKm
	)

	{	var ldKmPreisBis100;
		var ldKmPreisAb100;


		//	Alle km oder mehr km frei als gewünscht
		if((dwFreiKm < 0) || (dwFahrstrecke <= dwFreiKm))
		{	return(0.0);
		}

		//	initialisieren
		ldKmPreisBis100 = 0.0;
		ldKmPreisAb100  = 0.0;

		//	Preis pro Kilometer bei weniger als 101 Mehrkilometer
		if(typeof(glVarKmPreisBis100) != 'undefined')
		{	ldKmPreisBis100 = (dwFahrstrecke - dwFreiKm) * glVarKmPreisBis100;
		}

		if(typeof(glVarKmPreisAb100) != 'undefined')
		{  if((dwFahrstrecke - dwFreiKm) > 100)
			{	ldKmPreisAb100 = (dwFahrstrecke - dwFreiKm) * glVarKmPreisAb100;
			}
			else
			{	ldKmPreisAb100 = 100 * glVarKmPreisAb100;
			}
		}

		if(ldKmPreisAb100 && (ldKmPreisAb100 < ldKmPreisBis100))
		{	return(ldKmPreisAb100);
		}
		else
		{	return(ldKmPreisBis100);
		}
	}


	/********** Datum auf Samstag prüfen **********/
	// BOOL
	function checkSamstag
	(	// void
	)

	{  var arDatum;


		//	Anmietdatum zerlegen
		arDatum   = (document.getElementById('datumAus').value).split(" ");

		if(arDatum[0] == "Samstag")
		{	return(true);
		}

		//	Rückgabedatum zerlegen
		arDatum  = (document.getElementById('datumEin').value).split(" ");

		if(arDatum[0] == "Samstag")
		{	return(true);
		}

		//	Kein Samstag
		return(false);
	}


	/********** Das darf nie passieren! **********/
	// void
	function rechenfehler
	(	// void
	)

	{  document.getElementById('tageInklKm').firstChild.nodeValue = "";
		document.getElementById('endPreis').firstChild.nodeValue = "";
		document.getElementById('selbstbeteiligung').firstChild.nodeValue = "Mietpreis muss individuell berechnet werden. Bitte rufen Sie uns an.";
	}


	/********** Formularfelder zurücksetzen **********/
	// void
	function formularReset
	(	// void
	)

	{	if(typeof(glVarFormularLebt) != 'undefined')
		{	document.getElementById('mietdaten').reset();
			preisOut();
		}
	}


	/********** long double formatieren **********/
	// char *
	function formatWert
	(	ldWert,
		iNachkomma
	)

	{	var sz;
		var iPow;
		var iDezPos;
		var szVorkomma;
		var szNachkomma;
		var i;
		var iUnvGruppe;
		var iVollstGruppe;


		//	runden
		iPow = Math.pow(10, iNachkomma);

		sz = (Math.round(ldWert * iPow) / iPow).toString();

		//	Position des Dezimalpunktes
		iDezPos = sz.indexOf('.');

		if(iDezPos == -1)
		{	szVorkomma  = sz;
			szNachkomma = "";
		}
		else
		{	szVorkomma  = sz.substring(0, iDezPos);
			szNachkomma = sz.substring(iDezPos + 1, iDezPos + 1 + iNachkomma);
		}

		iVorkommaLen = szVorkomma.length;

		//	Führende 0 bei Zahlen kleiner 0 setzen
		if(iVorkommaLen == 0)
		{	szVorkomma = "0" + szVorkomma;
		}
		else if((iVorkommaLen == 1) && (szVorkomma == "-"))
		{	szVorkomma = "-0";
		}

		//	Tausendertrennpunkte setzen
		if(iVorkommaLen > 3)
		{	iUnvGruppe 	  = iVorkommaLen % 3;
			iVollstGruppe = Math.round((iVorkommaLen - 1) / 3);

			if(iVollstGruppe)
			{	szVorkomma = szVorkomma.substring(0, iUnvGruppe) + "." + szVorkomma.substring(iUnvGruppe);
			}

			for(i = 0; i < iVollstGruppe - 1; ++i)
			{  szVorkomma = szVorkomma.substring(0, iUnvGruppe + 4 * (1 + i)) + "."
								 + szVorkomma.substring(iUnvGruppe + 4 * (1 + i));
			}

			//	Bei vollständigen 3er-Gruppen haben wir einen führenden Punkt
			if(szVorkomma.substring(0, 1) == '-')
			{	if(szVorkomma.substring(1, 2) == '.')
				{	szVorkomma = "-" + szVorkomma.substring(2);
				}
			}
			else if(szVorkomma.substring(0, 1) == '.')
			{	szVorkomma = szVorkomma.substring(1);
			}
		}

		//	Fehlende Nachkommastellen auffüllen
		for(i = szNachkomma.length; i < iNachkomma; ++i)
		{	szNachkomma += "0";
		}

		//	Formatierten Wert zurück
		if(iNachkomma)
		{	return(szVorkomma + "," + szNachkomma);
		}
		else
		{	return(szVorkomma);
		}
	}




