Universal Calculator for Calc.ist

 <!DOCTYPE html>

<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content  content="width=device-width, initial-scale=1.0" />
  <title>Zupr Calculator</title>
  <!-- Preconnect to Google Fonts for better performance -->
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <!-- Adding Google Philosopher font -->
  <link href="https://fonts.googleapis.com/css2?family=Philosopher:ital,wght@0,400;0,700;1,400;1,700&display=swap" rel="stylesheet">
  <style>
    * {
      box-sizing: border-box;
      font-family: 'Philosopher', sans-serif;
    }
    
    body {
      background: linear-gradient(135deg, #1a2634, #2e4053);
      color: #e0e7ff;
      margin: 0;
      padding: 0;
      min-height: 100vh;
      line-height: 1.6;
    }

    header {
      text-align: center;
      padding: 2rem;
      background: #111;
      font-size: 2rem;
      font-weight: bold;
      color: #00e5ff;
      text-shadow: 0 0 10px rgba(0, 229, 255, 0.5);
    }

    .container {
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 2rem;
      padding: 2rem;
      max-width: 1200px;
      margin: 0 auto;
    }

    .section-label {
      font-size: 1.5rem;
      font-weight: bold;
      color: #00e5ff;
      margin: 1rem 0 0.5rem;
      text-align: center;
      text-shadow: 0 0 10px rgba(0, 229, 255, 0.5);
    }

    .calc-section {
      background: rgba(30, 41, 59, 0.95);
      padding: 1.5rem;
      border-radius: 1rem;
      width: 100%;
      max-width: 500px;
      box-shadow: 0 0 20px rgba(0, 229, 255, 0.2);
      border: 2px solid #00e5ff;
    }

    .calc-section h2 {
      font-size: 1.2rem;
      margin-bottom: 1rem;
      color: #00e5ff;
    }

    label, input, button {
      display: block;
      width: 100%;
      margin-bottom: 1rem;
    }

    input {
      padding: 0.7rem;
      border: 2px solid #00e5ff;
      border-radius: 0.5rem;
      font-size: 1rem;
      background: #1a2634;
      color: #e0e7ff;
      box-shadow: inset 0 0 10px rgba(0, 229, 255, 0.3);
    }

    input:focus {
      outline: none;
      border-color: #00b7ff;
      box-shadow: 0 0 10px rgba(0, 183, 255, 0.5);
    }

    button {
      background-color: #00e5ff;
      color: #1a2634;
      font-weight: bold;
      cursor: pointer;
      transition: all 0.3s ease;
      border: none;
      padding: 0.7rem;
      border-radius: 0.5rem;
      font-size: 1rem;
      box-shadow: 0 0 10px rgba(0, 229, 255, 0.5);
    }

    button:hover {
      background-color: #1a2634;
      color: #00e5ff;
      box-shadow: 0 0 20px rgba(0, 229, 255, 0.8);
      transform: translateY(-2px);
    }

    button:disabled {
      background-color: #cccccc;
      color: #666666;
      cursor: not-allowed;
      transform: none;
      box-shadow: none;
    }

    .output {
      font-size: 1.2rem;
      margin-top: 1rem;
      text-align: center;
      color: #00e5ff;
      text-shadow: 0 0 10px rgba(0, 229, 255, 0.5);
      min-height: 1.5em;
      word-break: break-word;
    }

    .mini-calc-box {
      display: flex;
      flex-direction: column;
      background: #2d2d2d;
      border: 2px solid #00e5ff;
      border-radius: 10px;
      padding: 1rem;
      margin-bottom: 1rem;
      box-shadow: inset 0 0 10px rgba(0, 229, 255, 0.3);
    }

    .mini-calc-box input, .mini-calc-box button {
      width: 100%;
      padding: 0.6rem;
      font-size: 1rem;
      margin-bottom: 0.5rem;
      border-radius: 0.4rem;
      border: 1px solid #00e5ff;
    }

    .mini-calc-box button {
      background-color: #00e5ff;
      color: #1a2634;
      cursor: pointer;
      border: none;
    }

    .mini-calc-box button:hover {
      background-color: #1a2634;
      color: #00e5ff;
    }

    details {
      max-width: 800px;
      margin: auto;
      margin-bottom: 1rem;
      width: 100%;
    }

    details summary {
      font-size: 1.5rem;
      color: #00e5ff;
      cursor: pointer;
      font-weight: bold;
      padding: 1rem 0;
      text-shadow: 0 0 10px rgba(0, 229, 255, 0.5);
      list-style: none;
    }

    details summary::-webkit-details-marker {
      display: none;
    }

    details p {
      padding: 1rem;
      font-size: 1rem;
      line-height: 1.6;
      color: #e0e7ff;
      background: rgba(30, 41, 59, 0.5);
      border-radius: 10px;
      border: 1px solid #00e5ff;
      box-shadow: inset 0 0 10px rgba(0, 229, 255, 0.3);
      margin: 0;
    }

    .glow-effect {
      animation: glow 2s infinite alternate;
    }

    @keyframes glow {
      0% { box-shadow: 0 0 10px rgba(0, 229, 255, 0.5); }
      100% { box-shadow: 0 0 20px rgba(0, 229, 255, 0.8); }
    }

    @media (max-width: 768px) {
      header { font-size: 1.5rem; padding: 1rem; }
      .container { padding: 1rem; gap: 1.5rem; }
      .calc-section { padding: 1rem; }
      details summary { font-size: 1.2rem; }
    }

    .error {
      color: #ff6b6b;
      text-shadow: 0 0 5px rgba(255, 107, 107, 0.5);
    }

    .success {
      color: #51cf66;
      text-shadow: 0 0 5px rgba(81, 207, 102, 0.5);
    }
  </style>
</head>
<body>
  <header class="glow-effect">Zupr Calculator</header>
  <div class="container">
    <div class="section-label">🌐 Universal Calculator</div>
    <div class="calc-section glow-effect">
      <div class="mini-calc-box">
        <input type="text" id="wideUniversalInput" placeholder="Enter calculation e.g. 45 * 3 + 8" />
        <div style="display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.5rem; margin-top: 0.5rem;">
          <button onclick="handleKeypadInput('wideUniversalInput', '7')">7</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '8')">8</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '9')">9</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '/')">/</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '4')">4</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '5')">5</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '6')">6</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '*')">*</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '1')">1</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '2')">2</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '3')">3</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '-')">-</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '0')">0</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '.')">.</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '=')">=</button>
          <button onclick="handleKeypadInput('wideUniversalInput', '+')">+</button>
        </div>
      </div>
      <div class="mini-calc-box">
        <input type="text" id="miniUniversalInput" placeholder="Quick Expression" />
        <button onclick="transferInput('miniUniversalInput', 'universalCalcInput', calculateUniversal)"></button>
      </div>
      <h2>Universal Quick Calculator</h2>
      <input type="text" id="universalCalcInput" placeholder="Enter expression e.g. 12/4 + 5 * 3" />
      <button onclick="calculateUniversal()">Evaluate</button>
      <div class="output" id="universalCalcOutput"></div>
    </div>

    <div class="section-label">🧪 Scientific Calculator</div>
    <div class="calc-section glow-effect">
      <div class="mini-calc-box">
        <input type="text" id="wideSciInput" placeholder="e.g. Math.pow(2,3) + Math.sqrt(16)" />
        <div style="display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.5rem; margin-top: 0.5rem;">
          <button onclick="handleKeypadInput('wideSciInput', '7')">7</button>
          <button onclick="handleKeypadInput('wideSciInput', '8')">8</button>
          <button onclick="handleKeypadInput('wideSciInput', '9')">9</button>
          <button onclick="handleKeypadInput('wideSciInput', '/')">/</button>
          <button onclick="handleKeypadInput('wideSciInput', '4')">4</button>
          <button onclick="handleKeypadInput('wideSciInput', '5')">5</button>
          <button onclick="handleKeypadInput('wideSciInput', '6')">6</button>
          <button onclick="handleKeypadInput('wideSciInput', '*')">*</button>
          <button onclick="handleKeypadInput('wideSciInput', '1')">1</button>
          <button onclick="handleKeypadInput('wideSciInput', '2')">2</button>
          <button onclick="handleKeypadInput('wideSciInput', '3')">3</button>
          <button onclick="handleKeypadInput('wideSciInput', '-')">-</button>
          <button onclick="handleKeypadInput('wideSciInput', '0')">0</button>
          <button onclick="handleKeypadInput('wideSciInput', '.')">.</button>
          <button onclick="handleKeypadInput('wideSciInput', '=')">=</button>
          <button onclick="handleKeypadInput('wideSciInput', '+')">+</button>
        </div>
      </div>
      <div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.5rem; margin-top: 1rem;">
        <button onclick="handleKeypadInput('wideSciInput', 'Math.sqrt(')"></button>
        <button onclick="handleKeypadInput('wideSciInput', 'Math.pow(')"></button>
        <button onclick="handleKeypadInput('wideSciInput', 'Math.sin(')">sin</button>
        <button onclick="handleKeypadInput('wideSciInput', 'Math.cos(')">cos</button>
        <button onclick="handleKeypadInput('wideSciInput', 'Math.tan(')">tan</button>
        <button onclick="handleKeypadInput('wideSciInput', 'Math.log(')">log</button>
        <button onclick="handleKeypadInput('wideSciInput', 'Math.exp(')">exp</button>
        <button onclick="handleKeypadInput('wideSciInput', 'Math.PI')">π</button>
      </div>
      <div class="mini-calc-box">
        <input type="text" id="miniSciInput" placeholder="Scientific Expression" />
        <button onclick="transferInput('miniSciInput', 'sciInput', calculateScientific)"></button>
      </div>
      <h2>Scientific Calculator</h2>
      <input type="text" id="sciInput" placeholder="e.g. Math.sqrt(16) + Math.sin(Math.PI/2)" />
      <button onclick="calculateScientific()">Calculate</button>
      <div class="output" id="sciOutput"></div>
    </div>

    <details>
      <summary>🧮 Mathematical & Educational Calculators</summary>
      <p>
        Basic calculators handle everyday arithmetic operations while specialized math calculators serve students and professionals alike. Calculus calculators compute derivatives, integrals, and limits, essential for engineering and physics students tackling complex mathematical challenges. Statistical calculators analyze data distributions through standard deviation, variance, and z-scores, providing crucial insights for researchers and analysts. Matrix calculators perform operations on arrays of numbers, critical for computer graphics and machine learning applications. Scientific calculators with significant figure functionality maintain precision in laboratory and engineering contexts, ensuring measurements retain their appropriate level of accuracy across calculations.
      </p>
    </details>
    <div class="section-label">🧮 Mathematical Calculators</div>
    <div class="calc-section glow-effect">
      <div class="mini-calc-box">
        <input type="text" id="wideBasicInput" placeholder="Enter calculation e.g. 45 * 3 + 8" />
        <div style="display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.5rem; margin-top: 0.5rem;">
          <button onclick="handleKeypadInput('wideBasicInput', '7')">7</button>
          <button onclick="handleKeypadInput('wideBasicInput', '8')">8</button>
          <button onclick="handleKeypadInput('wideBasicInput', '9')">9</button>
          <button onclick="handleKeypadInput('wideBasicInput', '/')">/</button>
          <button onclick="handleKeypadInput('wideBasicInput', '4')">4</button>
          <button onclick="handleKeypadInput('wideBasicInput', '5')">5</button>
          <button onclick="handleKeypadInput('wideBasicInput', '6')">6</button>
          <button onclick="handleKeypadInput('wideBasicInput', '*')">*</button>
          <button onclick="handleKeypadInput('wideBasicInput', '1')">1</button>
          <button onclick="handleKeypadInput('wideBasicInput', '2')">2</button>
          <button onclick="handleKeypadInput('wideBasicInput', '3')">3</button>
          <button onclick="handleKeypadInput('wideBasicInput', '-')">-</button>
          <button onclick="handleKeypadInput('wideBasicInput', '0')">0</button>
          <button onclick="handleKeypadInput('wideBasicInput', '.')">.</button>
          <button onclick="handleKeypadInput('wideBasicInput', '=')">=</button>
          <button onclick="handleKeypadInput('wideBasicInput', '+')">+</button>
        </div>
      </div>
      <div class="mini-calc-box">
        <input type="text" id="miniBasicInput" placeholder="Quick: 1+1" />
        <button onclick="transferInput('miniBasicInput', 'basicInput', calculateBasic)"></button>
      </div>
      <h2>Basic Calculator</h2>
      <input type="text" id="basicInput" placeholder="e.g. 5 + 3 * (2 - 1)" />
      <button onclick="calculateBasic()">Calculate</button>
      <div class="output" id="basicOutput"></div>
    </div>

    <details>
      <summary>🧪 Medical Calculators</summary>
      <p>
        Medical calculators transform complex clinical data into actionable diagnostic and treatment insights for healthcare professionals. Kidney function calculators assess creatinine clearance and glomerular filtration rate, critical for medication dosing and disease staging. Cardiovascular risk calculators like ASCVD combine multiple factors to estimate heart attack and stroke probability, guiding preventive interventions. Hematology calculators analyze blood components, helping diagnose conditions from infections to immune disorders. Electrolyte and osmolality calculators evaluate fluid and electrolyte balance, essential for critical care and metabolic disorder management. These specialized tools synthesize multiple inputs into standardized scores and values that guide clinical decision-making, improving diagnostic accuracy and treatment personalization across medical specialties.
      </p>
    </details>
    <div class="section-label">🧪 Medical Calculators</div>
    <div class="calc-section glow-effect">
      <div class="mini-calc-box">
        <input type="text" id="wideHealthInput" placeholder="e.g. (98.6 - 97.5) * 2" />
        <div style="display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.5rem; margin-top: 0.5rem;">
          <button onclick="handleKeypadInput('wideHealthInput', '7')">7</button>
          <button onclick="handleKeypadInput('wideHealthInput', '8')">8</button>
          <button onclick="handleKeypadInput('wideHealthInput', '9')">9</button>
          <button onclick="handleKeypadInput('wideHealthInput', '/')">/</button>
          <button onclick="handleKeypadInput('wideHealthInput', '4')">4</button>
          <button onclick="handleKeypadInput('wideHealthInput', '5')">5</button>
          <button onclick="handleKeypadInput('wideHealthInput', '6')">6</button>
          <button onclick="handleKeypadInput('wideHealthInput', '*')">*</button>
          <button onclick="handleKeypadInput('wideHealthInput', '1')">1</button>
          <button onclick="handleKeypadInput('wideHealthInput', '2')">2</button>
          <button onclick="handleKeypadInput('wideHealthInput', '3')">3</button>
          <button onclick="handleKeypadInput('wideHealthInput', '-')">-</button>
          <button onclick="handleKeypadInput('wideHealthInput', '0')">0</button>
          <button onclick="handleKeypadInput('wideHealthInput', '.')">.</button>
          <button onclick="handleKeypadInput('wideHealthInput', '=')">=</button>
          <button onclick="handleKeypadInput('wideHealthInput', '+')">+</button>
        </div>
      </div>
      <div class="mini-calc-box">
        <input type="text" id="miniHealthInput" placeholder="Health Expression" />
        <button onclick="transferInput('miniHealthInput', 'healthInput', calculateHealth)"></button>
      </div>
      <h2>Health Calculator</h2>
      <input type="text" id="healthInput" placeholder="e.g. (98.6 - 97.5) * 2" />
      <button onclick="calculateHealth()">Calculate</button>
      <div class="output" id="healthOutput"></div>
    </div>

    <div class="calc-section glow-effect">
      <div class="mini-calc-box">
        <input type="text" id="wideBMIInput" placeholder="Enter expression e.g. 70 / ((1.75)^2)" />
        <div style="display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.5rem; margin-top: 0.5rem;">
          <button onclick="handleKeypadInput('wideBMIInput', '7')">7</button>
          <button onclick="handleKeypadInput('wideBMIInput', '8')">8</button>
          <button onclick="handleKeypadInput('wideBMIInput', '9')">9</button>
          <button onclick="handleKeypadInput('wideBMIInput', '/')">/</button>
          <button onclick="handleKeypadInput('wideBMIInput', '4')">4</button>
          <button onclick="handleKeypadInput('wideBMIInput', '5')">5</button>
          <button onclick="handleKeypadInput('wideBMIInput', '6')">6</button>
          <button onclick="handleKeypadInput('wideBMIInput', '*')">*</button>
          <button onclick="handleKeypadInput('wideBMIInput', '1')">1</button>
          <button onclick="handleKeypadInput('wideBMIInput', '2')">2</button>
          <button onclick="handleKeypadInput('wideBMIInput', '3')">3</button>
          <button onclick="handleKeypadInput('wideBMIInput', '-')">-</button>
          <button onclick="handleKeypadInput('wideBMIInput', '0')">0</button>
          <button onclick="handleKeypadInput('wideBMIInput', '.')">.</button>
          <button onclick="handleKeypadInput('wideBMIInput', '=')">=</button>
          <button onclick="handleKeypadInput('wideBMIInput', '+')">+</button>
        </div>
      </div>
      <div class="mini-calc-box">
        <input type="number" id="miniBMIW" placeholder="kg" min="0" step="0.1" />
        <input type="number" id="miniBMIH" placeholder="cm" min="0" step="0.1" />
        <button onclick="transferBMIInputs()"></button>
      </div>
      <h2>BMI Calculator</h2>
      <input type="number" id="bmiWeight" placeholder="Weight (kg)" min="0" step="0.1" />
      <input type="number" id="bmiHeight" placeholder="Height (cm)" min="0" step="0.1" />
      <button onclick="calculateBMI()">Calculate BMI</button>
      <div class="output" id="bmiOutput"></div>
    </div>

    <div class="calc-section glow-effect">
      <div class="mini-calc-box">
        <input type="text" id="wideMedicalInput" placeholder="e.g. (1.73 * creatinine) / (age * 0.85)" />
        <div style="display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.5rem; margin-top: 0.5rem;">
          <button onclick="handleKeypadInput('wideMedicalInput', '7')">7</button>
          <button onclick="handleKeypadInput('wideMedicalInput', '8')">8</button>
          <button onclick="handleKeypadInput('wideMedicalInput', '9')">9</button>
          <button onclick="handleKeypadInput('wideMedicalInput', '/')">/</button>
          <button onclick="handleKeypadInput('wideMedicalInput', '4')">4</button>
          <button onclick="handleKeypadInput('wideMedicalInput', '5')">5</button>
          <button onclick="handleKeypadInput('wideMedicalInput', '6')">6</button>
          <button onclick="handleKey Economic and Financial Calculators</div>
    <div class="calc-section glow-effect">
      <div class="mini-calc-box">
        <input type="text" id="wideFinancialInput" placeholder="e.g. 500000 * 0.05 / 12" />
        <div style="display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.5rem; margin-top: 0.5rem;">
          <button onclick="handleKeypadInput('wideFinancialInput', '7')">7</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '8')">8</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '9')">9</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '/')">/</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '4')">4</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '5')">5</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '6')">6</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '*')">*</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '1')">1</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '2')">2</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '3')">3</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '-')">-</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '0')">0</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '.')">.</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '=')">=</button>
          <button onclick="handleKeypadInput('wideFinancialInput', '+')">+</button>
        </div>
      </div>
      <div class="mini-calc-box">
        <input type="text" id="miniFinancialInput" placeholder="Financial Expression" />
        <button onclick="transferInput('miniFinancialInput', 'financialInput', calculateFinancial)"></button>
      </div>
      <h2>Financial Calculator</h2>
      <input type="text" id="financialInput" placeholder="e.g. 100000 * (1 + 0.05)^5" />
      <button onclick="calculateFinancial()">Calculate</button>
      <div class="output" id="financialOutput"></div>
    </div>
    
    <div class="calc-section glow-effect">
      <div class="mini-calc-box">
        <input type="text" id="wideLoanInput" placeholder="e.g. 300000 * 0.045 / 12 / (1 - (1 + 0.045/12)^(-360))" />
        <div style="display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.5rem; margin-top: 0.5rem;">
          <button onclick="handleKeypadInput('wideLoanInput', '7')">7</button>
          <button onclick="handleKeypadInput('wideLoanInput', '8')">8</button>
          <button onclick="handleKeypadInput('wideLoanInput', '9')">9</button>
          <button onclick="handleKeypadInput('wideLoanInput', '/')">/</button>
          <button onclick="handleKeypadInput('wideLoanInput', '4')">4</button>
          <button onclick="handleKeypadInput('wideLoanInput', '5')">5</button>
          <button onclick="handleKeypadInput('wideLoanInput', '6')">6</button>
          <button onclick="handleKeypadInput('wideLoanInput', '*')">*</button>
          <button onclick="handleKeypadInput('wideLoanInput', '1')">1</button>
          <button onclick="handleKeypadInput('wideLoanInput', '2')">2</button>
          <button onclick="handleKeypadInput('wideLoanInput', '3')">3</button>
          <button onclick="handleKeypadInput('wideLoanInput', '-')">-</button>
          <button onclick="handleKeypadInput('wideLoanInput', '0')">0</button>
          <button onclick="handleKeypadInput('wideLoanInput', '.')">.</button>
          <button onclick="handleKeypadInput('wideLoanInput', '=')">=</button>
          <button onclick="handleKeypadInput('wideLoanInput', '+')">+</button>
        </div>
      </div>
      <div class="mini-calc-box">
        <input type="number" id="miniLoanAmt" placeholder="$" min="0" step="100" />
        <input type="number" id="miniLoanInt" placeholder="%" min="0" max="100" step="0.01" />
        <input type="number" id="miniLoanYrs" placeholder="yrs" min="1" max="50" step="1" />
        <button onclick="transferLoanInputs()"></button>
      </div>
      <h2>Loan Calculator</h2>
      <input type="number" id="loanAmount" placeholder="Loan Amount ($)" min="0" step="100" />
      <input type="number" id="loanInterest" placeholder="Interest Rate (%)" min="0" max="100" step="0.01" />
      <input type="number" id="loanYears" placeholder="Term (years)" min="1" max="50" step="1" />
      <button onclick="calculateLoan()">Calculate Monthly Payment</button>
      <div class="output" id="loanOutput"></div>
    </div>
  </div>

  <script>
    function calculateUniversal() {
      try {
        const input = document.getElementById('universalCalcInput').value.trim();
        if (!input) throw new Error('Please enter an expression');
        if (/[a-zA-Z`~!@#$%&()_={}[\]\\|;:'",<>?]/.test(input)) throw new Error('Invalid characters in expression');
        const sanitizedInput = input.replace(/\^/g, '**');
        const result = Function('"use strict";return (' + sanitizedInput + ')')();
        if (isNaN(result)) throw new Error('Invalid calculation');
        document.getElementById('universalCalcOutput').textContent = `Result: ${result}`;
        document.getElementById('universalCalcOutput').className = 'output success';
      } catch (error) {
        document.getElementById('universalCalcOutput').textContent = `Error: ${error.message}`;
        document.getElementById('universalCalcOutput').className = 'output error';
      }
    }

    function calculateScientific() {
      try {
        const input = document.getElementById('sciInput').value.trim();
        if (!input) throw new Error('Please enter an expression');
        if (!/^[0-9+\-*/.()^% Math.sqrt|Math.pow|Math.sin|Math.cos|Math.tan|Math.log|Math.exp|Math.PI\s]+$/.test(input)) throw new Error('Invalid characters in expression');
        const result = Function('"use strict";return (' + input + ')')();
        if (isNaN(result)) throw new Error('Invalid calculation');
        document.getElementById('sciOutput').textContent = `Result: ${result}`;
        document.getElementById('sciOutput').className = 'output success';
      } catch (error) {
        document.getElementById('sciOutput').textContent = `Error: ${error.message}`;
        document.getElementById('sciOutput').className = 'output error';
      }
    }

    function calculateBasic() {
      try {
        const input = document.getElementById('basicInput').value.trim();
        if (!input) throw new Error('Please enter an expression');
        if (/[a-zA-Z`~!@#$%&()_={}[\]\\|;:'",<>?]/.test(input)) throw new Error('Invalid characters in expression');
        const sanitizedInput = input.replace(/\^/g, '**');
        const result = Function('"use strict";return (' + sanitizedInput + ')')();
        if (isNaN(result)) throw new Error('Invalid calculation');
        document.getElementById('basicOutput').textContent = `Result: ${result}`;
        document.getElementById('basicOutput').className = 'output success';
      } catch (error) {
        document.getElementById('basicOutput').textContent = `Error: ${error.message}`;
        document.getElementById('basicOutput').className = 'output error';
      }
    }

    function calculateHealth() {
      try {
        const input = document.getElementById('healthInput').value.trim();
        if (!input) throw new Error('Please enter an expression');
        if (/[a-zA-Z`~!@#$%&()_={}[\]\\|;:'",<>?]/.test(input)) throw new Error('Invalid characters in expression');
        const sanitizedInput = input.replace(/\^/g, '**');
        const result = Function('"use strict";return (' + sanitizedInput + ')')();
        if (isNaN(result)) throw new Error('Invalid calculation');
        document.getElementById('healthOutput').textContent = `Result: ${result}`;
        document.getElementById('healthOutput').className = 'output success';
      } catch (error) {
        document.getElementById('healthOutput').textContent = `Error: ${error.message}`;
        document.getElementById('healthOutput').className = 'output error';
      }
    }

    function calculateBMI() {
      try {
        const weight = parseFloat(document.getElementById('bmiWeight').value);
        const height = parseFloat(document.getElementById('bmiHeight').value) / 100;
        if (isNaN(weight) || weight <= 0) throw new Error('Please enter a valid weight');
        if (isNaN(height) || height <= 0) throw new Error('Please enter a valid height');
        const bmi = weight / (height * height);
        let category = bmi < 18.5 ? 'Underweight' : bmi < 25 ? 'Normal weight' : bmi < 30 ? 'Overweight' : 'Obese';
        document.getElementById('bmiOutput').textContent = `BMI: ${bmi.toFixed(1)} (${category})`;
        document.getElementById('bmiOutput').className = 'output success';
      } catch (error) {
        document.getElementById('bmiOutput').textContent = `Error: ${error.message}`;
        document.getElementById('bmiOutput').className = 'output error';
      }
    }

    function calculateMedical() {
      try {
        const input = document.getElementById('medicalInput').value.trim();
        if (!input) throw new Error('Please enter an expression');
        if (/[`~!@#$%&()_={}[\]\\|;:'",<>?]/.test(input)) throw new Error('Invalid characters in expression');
        const sanitizedInput = input.replace(/\^/g, '**');
        const result = Function('"use strict";return (' + sanitizedInput + ')')();
        if (isNaN(result)) throw new Error('Invalid calculation');
        document.getElementById('medicalOutput').textContent = `Result: ${result}`;
        document.getElementById('medicalOutput').className = 'output success';
      } catch (error) {
        document.getElementById('medicalOutput').textContent = `Error: ${error.message}`;
        document.getElementById('medicalOutput').className = 'output error';
      }
    }

    function calculateFinancial() {
      try {
        const input = document.getElementById('financialInput').value.trim();
        if (!input) throw new Error('Please enter an expression');
        if (/[a-zA-Z`~!@#$%&()_={}[\]\\|;:'",<>?]/.test(input)) throw new Error('Invalid characters in expression');
        const sanitizedInput = input.replace(/\^/g, '**');
        const result = Function('"use strict";return (' + sanitizedInput + ')')();
        if (isNaN(result)) throw new Error('Invalid calculation');
        document.getElementById('financialOutput').textContent = `Result: $${result.toFixed(2)}`;
        document.getElementById('financialOutput').className = 'output success';
      } catch (error) {
        document.getElementById('financialOutput').textContent = `Error: ${error.message}`;
        document.getElementById('financialOutput').className = 'output error';
      }
    }

    function calculateLoan() {
      try {
        const amount = parseFloat(document.getElementById('loanAmount').value);
        const rate = parseFloat(document.getElementById('loanInterest').value) / 100 / 12;
        const years = parseFloat(document.getElementById('loanYears').value);
        if (isNaN(amount) || amount <= 0) throw new Error('Please enter a valid loan amount');
        if (isNaN(rate) || rate <= 0) throw new Error('Please enter a valid interest rate');
        if (isNaN(years) || years <= 0) throw new Error('Please enter a valid loan term');
        const months = years * 12;
        const payment = (amount * rate) / (1 - Math.pow(1 + rate, -months));
        document.getElementById('loanOutput').textContent = `Monthly Payment: $${payment.toFixed(2)}`;
        document.getElementById('loanOutput').className = 'output success';
      } catch (error) {
        document.getElementById('loanOutput').textContent = `Error: ${error.message}`;
        document.getElementById('loanOutput').className = 'output error';
      }
    }

    function handleKeypadInput(inputId, value) {
      const inputElement = document.getElementById(inputId);
      if (!inputElement) return;
      if (value === '=') {
        try {
          const result = Function('"use strict";return (' + inputElement.value.replace(/\^/g, '**') + ')')();
          inputElement.value = result;
        } catch (error) {
          inputElement.value = 'Error';
        }
      } else {
        inputElement.value += value;
      }
      inputElement.focus();
    }

    function transferInput(sourceId, targetId, calculateFn) {
      const source = document.getElementById(sourceId);
      const target = document.getElementById(targetId);
      if (source && target) {
        target.value = source.value;
        calculateFn();
      }
    }

    function transferBMIInputs() {
      document.getElementById('bmiWeight').value = document.getElementById('miniBMIW').value;
      document.getElementById('bmiHeight').value = document.getElementById('miniBMIH').value;
      calculateBMI();
    }

    function transferLoanInputs() {
      document.getElementById('loanAmount').value = document.getElementById('miniLoanAmt').value;
      document.getElementById('loanInterest').value = document.getElementById('miniLoanInt').value;
      document.getElementById('loanYears').value = document.getElementById('miniLoanYrs').value;
      calculateLoan();
    }

    document.addEventListener('DOMContentLoaded', () => {
      const inputs = [
        { id: 'universalCalcInput', fn: calculateUniversal },
        { id: 'sciInput', fn: calculateScientific },
        { id: 'basicInput', fn: calculateBasic },
        { id: 'healthInput', fn: calculateHealth },
        { id: 'bmiWeight', fn: calculateBMI },
        { id: 'bmiHeight', fn: calculateBMI },
        { id: 'medicalInput', fn: calculateMedical },
        { id: 'financialInput', fn: calculateFinancial },
        { id: 'loanAmount', fn: calculateLoan },
        { id: 'loanInterest', fn: calculateLoan },
        { id: 'loanYears', fn: calculateLoan }
      ];

      inputs.forEach(input => {
        const element = document.getElementById(input.id);
        if (element) {
          element.addEventListener('keypress', (e) => {
            if (e.key === 'Enter') input.fn();
          });
        }
      });
    });
  </script>
</body>
</html>

Comments