-
Notifications
You must be signed in to change notification settings - Fork 0
/
dl_expenses.js
92 lines (75 loc) · 2.48 KB
/
dl_expenses.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
"use strict";
/*
New Perspectives on HTML5, CSS3, and JavaScript 6th Edition
Tutorial 13
Case Problem 2
Author: Hesbon Osoro
Date: 12/10/22
Filename: dl_expenses.js
Function List
=============
validateSummary()
Validates the data entry in the summary field.
calcClass(sumClass)
Sums up all of the data values for elements of the sumClass class.
calcExp()
Calculates the travel expenses from all categories and dates.
formatNumber(val, decimals)
Formats the value, "val" to the number of decimals indicated
by "decimals", adding thousands separators.
formatUSCurrency(val)
Formats the value, "val", as U.S. currency.
*/
window.addEventListener("load", function () {
var changingCells = document.querySelectorAll("input.sum");
for (var i = 0; i < changingCells.length; i++) {
changingCells[i].onchange = calcExp;
}
document.getElementById("submitButton").onclick = validateSummary;
});
function validateSummary() {
var summary = document.getElementById("summary");
if (summary.validity.valueMissing) {
summary.setCustomValidity(
"You must include a summary of the trip in your report."
);
} else {
summary.setCustomValidity("");
}
}
function calcClass(sumClass) {
var sumFields = document.getElementsByClassName(sumClass);
var sumTotal = 0;
for (var i = 0; i < sumFields.length; i++) {
var itemValue = parseFloat(sumFields[i].value);
if (!isNaN(itemValue)) {
sumTotal += itemValue;
}
}
return sumTotal;
}
function calcExp() {
var expTable = document.querySelectorAll("table#travelExp tbody tr");
for (var i = 0; i < expTable.length; i++) {
document.getElementById("subtotal" + i).value = formatNumber(
calcClass("date" + i),
2
);
}
document.getElementById("transTotal").value = formatNumber(calcClass("sum"));
document.getElementById("lodgeTotal").value = formatNumber(calcClass("sum"));
document.getElementById("mealTotal").value = formatNumber(calcClass("sum"));
document.getElementById("otherTotal").value = formatNumber(calcClass("sum"));
document.getElementById("expTotal").value = formatUSCurrency(
calcClass("sum")
);
}
function formatNumber(val, decimals) {
return val.toLocaleString(undefined, {
minimumFractionDigits: decimals,
maximumFractionDigits: decimals,
});
}
function formatUSCurrency(val) {
return val.toLocaleString("en-US", { style: "currency", currency: "USD" });
}