-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
124 lines (109 loc) · 4.3 KB
/
script.js
File metadata and controls
124 lines (109 loc) · 4.3 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
// script.js
// Dark/Light Mode Toggle
const modeToggle = document.getElementById('modeToggle');
modeToggle.addEventListener('click', () => {
document.body.classList.toggle('dark-mode');
if (document.body.classList.contains('dark-mode')) {
modeToggle.textContent = '☀️ Light Mode';
} else {
modeToggle.textContent = '🌙 Dark Mode';
}
});
// Link slider and input field
const salaryPercentage = document.getElementById('salaryPercentage');
const percentageInput = document.getElementById('percentageInput');
function updateSlider(value) {
salaryPercentage.value = value;
}
function updateInput(value) {
percentageInput.value = value;
}
salaryPercentage.addEventListener('input', () => {
updateInput(salaryPercentage.value);
});
percentageInput.addEventListener('input', () => {
let value = parseFloat(percentageInput.value);
if (value < 10) value = 10;
if (value > 50) value = 50;
updateSlider(value);
});
// Add new debt entries
document.getElementById('addDebt').addEventListener('click', () => {
const debtEntries = document.getElementById('debtEntries');
const newEntry = document.createElement('div');
newEntry.className = 'debt-entry';
newEntry.innerHTML = `
<label>Debt Name:</label>
<input type="text" class="debt-name" required>
<label>Balance ($):</label>
<input type="number" class="debt-balance" required>
<label>Interest Rate (%):</label>
<input type="number" class="debt-interest" required>
<label>Minimum Payment ($):</label>
<input type="number" class="debt-min-payment" required>
`;
debtEntries.appendChild(newEntry);
});
// Calculate repayment plan
document.getElementById('debtForm').addEventListener('submit', (e) => {
e.preventDefault();
const salary = parseFloat(document.getElementById('salary').value);
const percentage = parseFloat(salaryPercentage.value) / 100;
const strategy = document.getElementById('strategy').value;
const debtEntries = document.querySelectorAll('.debt-entry');
let debts = [];
debtEntries.forEach(entry => {
const debt = {
name: entry.querySelector('.debt-name').value,
balance: parseFloat(entry.querySelector('.debt-balance').value),
interest: parseFloat(entry.querySelector('.debt-interest').value) / 100,
minPayment: parseFloat(entry.querySelector('.debt-min-payment').value)
};
debts.push(debt);
});
const result = calculateRepaymentPlan(debts, salary, percentage, strategy);
displayResults(result);
});
// Simulate repayment process
function calculateRepaymentPlan(debts, salary, percentage, strategy) {
let totalDebt = debts.reduce((sum, debt) => sum + debt.balance, 0);
const initialDebt = totalDebt; // Store initial debt for display
let monthlyPayment = salary * percentage;
let totalInterest = 0;
let months = 0;
// Sort debts based on strategy
if (strategy === 'snowball') {
debts.sort((a, b) => a.balance - b.balance); // Smallest balance first
} else if (strategy === 'avalanche') {
debts.sort((a, b) => b.interest - a.interest); // Highest interest first
}
while (totalDebt > 0) {
let payment = monthlyPayment;
for (let debt of debts) {
if (debt.balance > 0) {
const interest = debt.balance * (debt.interest / 12);
totalInterest += interest; // Add interest to total interest
debt.balance += interest;
const paid = Math.min(debt.balance, Math.max(debt.minPayment, payment));
debt.balance -= paid;
payment -= paid;
}
}
totalDebt = debts.reduce((sum, debt) => sum + debt.balance, 0);
months++;
}
return {
totalDebt: initialDebt.toFixed(2), // Display initial debt, not remaining debt
monthlyPayment: monthlyPayment.toFixed(2),
repaymentDuration: months,
totalInterest: totalInterest.toFixed(2)
};
}
// Display results
function displayResults(result) {
document.getElementById('totalDebt').textContent = result.totalDebt;
document.getElementById('monthlyPayment').textContent = result.monthlyPayment;
document.getElementById('repaymentDuration').textContent = result.repaymentDuration;
document.getElementById('totalInterest').textContent = result.totalInterest;
document.getElementById('results').classList.remove('hidden');
}