Spaces:
Running
Running
File size: 6,249 Bytes
08bb856 |
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 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
document.addEventListener('DOMContentLoaded', function() {
// DOM Elements
const amountButtons = document.querySelectorAll('.amount-btn');
const currencyButtons = document.querySelectorAll('.currency-btn');
const walletInput = document.getElementById('walletAddress');
const addressError = document.getElementById('addressError');
const proceedBtn = document.getElementById('proceedBtn');
const paymentForm = document.getElementById('paymentForm');
const simulatedReturnBox = document.getElementById('simulatedReturnBox');
const returnAmountEl = document.getElementById('returnAmount');
const returnRateEl = document.getElementById('returnRate');
// Summary elements
const summaryAmount = document.getElementById('summaryAmount');
const summaryCurrency = document.getElementById('summaryCurrency');
// Selected values
let selectedAmount = null;
let selectedCurrency = null;
// Amount selection
amountButtons.forEach(button => {
button.addEventListener('click', function() {
// Remove selected class from all buttons
amountButtons.forEach(btn => btn.classList.remove('selected'));
// Add selected class to clicked button
this.classList.add('selected');
// Update selected amount
selectedAmount = parseInt(this.dataset.value);
document.getElementById('selectedAmount').value = selectedAmount;
// Update summary
summaryAmount.textContent = `$${selectedAmount}`;
// Handle $50 special rule
if (selectedAmount === 50) {
const rate = (Math.random() * 20 + 20).toFixed(2); // 20-40%
const returnAmount = (selectedAmount * rate / 100).toFixed(2);
returnRateEl.textContent = `${rate}%`;
returnAmountEl.textContent = `+$${returnAmount}`;
simulatedReturnBox.classList.remove('hidden');
} else {
simulatedReturnBox.classList.add('hidden');
}
validateForm();
});
});
// Currency selection
currencyButtons.forEach(button => {
button.addEventListener('click', function() {
// Remove selected class from all buttons
currencyButtons.forEach(btn => btn.classList.remove('selected'));
// Add selected class to clicked button
this.classList.add('selected');
// Update selected currency
selectedCurrency = this.dataset.value;
document.getElementById('selectedCurrency').value = selectedCurrency;
// Update summary
summaryCurrency.textContent = selectedCurrency;
// Clear previous validation
addressError.classList.add('hidden');
walletInput.classList.remove('border-red-500');
validateForm();
});
});
// Wallet address validation
walletInput.addEventListener('input', function() {
validateWalletAddress();
validateForm();
});
// Validate wallet address based on currency
function validateWalletAddress() {
const address = walletInput.value.trim();
if (!selectedCurrency) {
addressError.classList.add('hidden');
return true;
}
let isValid = false;
switch(selectedCurrency) {
case 'USDT':
case 'BNB':
// BEP20 addresses: start with 0x and 42 characters
isValid = /^0x[a-fA-F0-9]{40}$/.test(address);
break;
case 'BTC':
// Bitcoin addresses: start with 1, 3, or bc1
isValid = /^(1|3)[a-km-zA-HJ-NP-Z1-9]{25,34}$|^bc1[a-z0-9]{39,59}$/.test(address);
break;
case 'SOL':
// Solana addresses: Base58, 32-44 characters
isValid = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(address);
break;
default:
isValid = false;
}
if (address && !isValid) {
addressError.classList.remove('hidden');
walletInput.classList.add('border-red-500');
return false;
} else {
addressError.classList.add('hidden');
walletInput.classList.remove('border-red-500');
return true;
}
}
// Form validation
function validateForm() {
const name = document.getElementById('userName').value.trim();
const address = walletInput.value.trim();
const isAmountSelected = selectedAmount !== null;
const isCurrencySelected = selectedCurrency !== null;
const isNameValid = name.length > 0;
const isAddressValid = address.length > 0 && validateWalletAddress();
if (isAmountSelected && isCurrencySelected && isNameValid && isAddressValid) {
proceedBtn.disabled = false;
proceedBtn.classList.remove('opacity-50', 'cursor-not-allowed');
proceedBtn.classList.add('hover:opacity-90');
} else {
proceedBtn.disabled = true;
proceedBtn.classList.add('opacity-50', 'cursor-not-allowed');
proceedBtn.classList.remove('hover:opacity-90');
}
}
// Real-time validation for name field
document.getElementById('userName').addEventListener('input', validateForm);
// Form submission
paymentForm.addEventListener('submit', function(e) {
e.preventDefault();
// Show success message
proceedBtn.innerHTML = '<div class="flex items-center justify-center"><div class="w-5 h-5 border-t-2 border-r-2 border-white rounded-full animate-spin mr-2"></div> Redirecting...</div>';
proceedBtn.disabled = true;
// Simulate redirect delay
setTimeout(() => {
window.location.href = 'https://example.com/next-step';
}, 2000);
});
// Initialize form state
validateForm();
}); |