-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjs04_txt.js
More file actions
142 lines (119 loc) · 5 KB
/
Copy pathjs04_txt.js
File metadata and controls
142 lines (119 loc) · 5 KB
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
"use strict";
/* JavaScript 7th Edition
Chapter 4
Chapter case
Tuba Farm Equipment
Variables and functions
Author: Kaleb Lowry
Date: 2/8/2024
Filename: js04.js
*/
/* global variables tracking status of each form section */
let acresComplete = true;
let cropsComplete = true;
let monthsComplete = true;
let fuelComplete = true;
/* global variables referencing sidebar h2 and p elements */
let messageHeadElement = document.getElementById("messageHead");
let messageElement = document.getElementById("message");
/* global variables referencing fieldset elements */
let acresFieldset = document.getElementsByTagName("fieldset")[0];
let cropsFieldset = document.getElementsByTagName("fieldset")[1];
let monthsFieldset = document.getElementsByTagName("fieldset")[2];
let fuelFieldset = document.getElementsByTagName("fieldset")[3];
/* global variables referencing text input elements */
let monthsBox = document.forms[0].months;
let acresBox = document.forms[0].acres;
/* Tractor Model Descriptions */
let E3250Desc = "A workhorse for a small farm or a big backyard. A medium- to heavy-duty tractor that can haul whatever you throw at it year-round.";
let E2600Desc = "Perfect for a small farm, or just a big backyard. A light- to medium-duty tractor that can make short work of most any chore.";
let W1205Desc = "Can't be beat for the general tasks of a large farm. Medium- to heavy-duty muscle that's there then you need it.";
let W2500Desc = "Our heavy-duty tractor designed especially for the needs of wheat, corn, and soy farmers. A reliable piece of equipment that you can turn to all year long.";
let W2550Desc = "Our heavy-duty tractor for general use. A reliable piece of equipment that you can turn to all year long.";
/* create event listeners when page finishes loading */
window.addEventListener("load", createEventListeners);
/* create event listeners for all input elements */
function createEventListeners() {
acresBox.value = ""; // clear acres text box on page load
monthsBox.value = ""; // clear months text box on page load
acresBox.addEventListener("input", verifyAcres);
let cropsBox;
for (let i = 0; i < 7; i++) {
cropsBox = cropsFieldset.getElementsByTagName("input")[i];
cropsBox.checked = false;
cropsBox.addEventListener("click", verifyCrops);
}
monthsBox.addEventListener("input", verifyMonths);
let fuelBox;
for (let i = 0; i < 3; i++) {
fuelBox = fuelFieldset.getElementsByTagName("input")[i];
fuelBox.addEventListener("click", verifyFuel);
}
}
/* verify acres text box entry is a positive number */
function verifyAcres() {
try {
if (!(acresBox.value > 0)) throw "Enter a positive acreage";
testFormCompleteness();
} catch(error) {
messageElement.innerHTML = error;
messageHeadElement.innerHTML = "";
}
}
/* verify at least one crops checkbox is checked */
function verifyCrops() {
testFormCompleteness();
}
/* verify months text box entry is between 1 and 12 */
function verifyMonths() {
try{
if (!(monthsBox.value >= 1 && monthsBox.value <= 12))
throw "Enter months between 1 and 12";
testFormCompleteness();
} catch(error) {
messageElement.innerHTML = error;
messageHeadElement.innerHTML = "";
}
}
/* verify that a fuel option button is selected */
function verifyFuel() {
testFormCompleteness();
}
/* check if all four form sections are completed */
function testFormCompleteness() {
if (acresComplete && cropsComplete && monthsComplete && fuelComplete) {
createRecommendation();
}
}
/* generate tractor recommendation based on user selections */
function createRecommendation() {
if (acresBox.value <= 5000) { // 5000 acres or less, no crop test needed
if (monthsBox.value >= 10) { // 10+ months of farming per year
messageHeadElement.innerHTML = "E3250";
messageElement.innerHTML = E3250Desc;
} else { // 9 or fewer months per year
messageHeadElement.innerHTML = "E2600";
messageElement.innerHTML = E2600Desc;
}
} else { // more than 5000 acres
if (monthsBox.value <= 9) { // 9 or fewer months per year, no crop test needed
messageHeadElement.innerHTML = "W1205";
messageElement.innerHTML = W1205Desc;
} else { // 10+ months of farming per year
if (document.getElementById("wheat").checked || document.getElementById("corn").checked || document.getElementById("soy").checked) {
messageHeadElement.innerHTML = "W2500";
messageElement.innerHTML = W2500Desc;
} else {
messageHeadElement.innerHTML = "W2550";
messageElement.innerHTML = W2550Desc;
}
}
}
if (document.getElementById("E85").checked) { // add suffix to model name based on fuel choice
messageHeadElement.innerHTML += "E";
} else if (document.getElementById("biodiesel").checked) {
messageHeadElement.innerHTML += "B";
} else {
messageHeadElement.innerHTML += "D";
}
}