<script>
function roundDec(value, decimal) {
var factor;
value = value || 0;
decimal = decimal || 0;
factor = Math.pow(10, decimal);
// Wert an aufrufende Funktion zurückgeben
return Math.round(value * factor) / factor;
}
function addZeroDec(value, decimal) {
var i, amount;
value = value.toString(10) || '0';
decimal = decimal || 0;
// Auf ganze Zahl prüfen
if (value.indexOf('.') === -1) {
// Ganze Zahl gefunden, Gleitpunkt anhängen
// und Anzahl der Nullen definieren
value += '.';
amount = decimal;
} else {
// Gleitpunktzahl (Gleitkommazahl) gefunden
// Anzahl der Nullen definieren
amount = decimal - value.split('.')[1].length;
}
// Nachkommastellen auffüllen
for (i = 0; i < amount; i += 1) {
value += '0';
}
// Wert an aufrufende Funktion zurückgeben
return value;
}
function checkPercent(value) {
value = value.toString(10) || '0';
// Auf Format prüfen ###,##% (a) oder ###.##% (b)
if (value.indexOf(',') !== -1) {
// Format a gefunden, wandeln in Format b
value = value.replace(/\./, '').replace(/,/, '.');
}
// In Gleitpunktzahl (Gleitkommazahl) umwandeln
value = parseFloat(value);
// Auf 100 Prozent Limit prüfen und ggf. begrenzen
value = Math.ceil(value) > 100 ? 100 : value;
// Auf 0 Prozent Limit prüfen und ggf. begrenzen
value = Math.floor(value) < 0 ? 0 : value;
// Wert an aufrufende Funktion zurückgeben
return value.toString(10);
}
function calcTotal() {
// Variablen definieren
var total, rabatt, ausgabe;
// Summe aller aktiven radio-Buttons bestimmen
total = 0;
$('input:checked').each(function () {
total += parseFloat($(this).data('price'));
});
// Rabatt bestimmen (Standard 0)
rabatt = checkPercent($('#rabatt').val());
// Rabatt formatieren ###,## und in Feld schreiben
$('#rabatt').val(rabatt.replace(/\./, ',').replace(/(?=(\d{3})+\,)/g, ".") + ' %');
// Rabatt von der Summe aller aktiven radio-Buttons abziehen,
// mit der Funktion 'roundDec' auf 2 Stellen nach dem Komma runden
// und Ergebnis als Zeichenkette (String) speichern
ausgabe = roundDec(total * (1 - rabatt / 100), 2).toString(10);
// 'ausgabe' auf 2 Nachkommastellen formatieren und Währungssymbol anhängen
ausgabe = addZeroDec(ausgabe, 2) + ' €';
// 'ausgabe' formatieren ##.###,## € und in Feld schreiben
$('#ausgabe').val(ausgabe.replace(/\./, ',').replace(/(?=(\d{3})+\,)/g, "."));
// 'total' auf 2 Nachkommastellen formatieren und Währungssymbol anhängen
total = addZeroDec(total, 2) + ' €';
// 'total' formatieren ##.###,## € und in Feld schreiben
$('#total').val(total.replace(/\./, ',').replace(/(?=(\d{3})+\,)/g, "."));
}
$(document).ready(function () {
// Alle radio-Buttons registrieren
$('input:radio').change(calcTotal);
// Alle Checkboxen registrieren
$('input:checkbox').change(calcTotal);
// Rabatt-Feld registrieren
// Resette alle radio-Buttons und Checkboxen
$(':radio').each(function (index, element) {
element.checked = element.defaultChecked;
});
$(':checkbox').each(function (index, element) {
element.checked = element.defaultChecked;
});
$('#rabatt').on('keyup', function () {
var jqInput = $(this);
if (jqInput.data('key_timeout') !== undefined) {
clearTimeout(jqInput.data('key_timeout'));
}
$(this).data('key_timeout', setTimeout(function () {
jqInput.data('key_timeout', undefined);
calcTotal();
}, 800));
}).val('');
// Berechnung für Standardauswahl ausführen
calcTotal();
});
</script>