Template:Validation.js

From Donate
Revision as of 15:10, 28 March 2019 by Pcoombe (talk | contribs) (merge in minimums from Template:2012FR/Switch/Currency/Minimums)
Jump to navigation Jump to search
<html>
<script>
function validateForm(form){
  
  var amount = null;
  var minimums = {
    /* From https://github.com/wikimedia/wikimedia-fundraising-SmashPig/blob/master/PaymentData/ReferenceData/CurrencyRates.php */
    'ADF' : 5.65,
    'ADP' : 143,
    'AED' : 3.67,
    'AFA' : 73,
    'AFN' : 73,
    'ALL' : 109,
    'AMD' : 477,
    'ANG' : 1.79,
    'AOA' : 278,
    'AON' : 278,
    'ATS' : 12,
    'AUD' : 1.39,
    'AWG' : 1.78,
    'AZM' : 8486,
    'AZN' : 1.7,
    'BAM' : 1.69,
    'BBD' : 2,
    'BDT' : 83,
    'BEF' : 35,
    'BGL' : 1.69,
    'BGN' : 1.69,
    'BHD' : 0.38,
    'BIF' : 1748,
    'BMD' : 1,
    'BND' : 1.38,
    'BOB' : 6.8,
    'BRL' : 4.15,
    'BSD' : 1,
    'BTN' : 72,
    'BWP' : 11,
    'BYR' : 21035,
    'BZD' : 1.98,
    'CAD' : 1.32,
    'CDF' : 1573,
    'CHF' : 0.98,
    'CNY' : 6.83,
    'CRC' : 572,
    'CUC' : 1,
    'CUP' : 25,
    'CVE' : 95,
    'CYP' : 0.51,
    'CZK' : 22,
    'DEM' : 1.69,
    'DJF' : 178,
    'DKK' : 6.42,
    'DOP' : 50,
    'DZD' : 118,
    'ECS' : 24094,
    'EEK' : 13,
    'EGP' : 18,
    'ESP' : 143,
    'ETB' : 27,
    'EUR' : 0.87,
    'FIM' : 5.12,
    'FJD' : 2.1,
    'FKP' : 0.78,
    'FRF' : 5.65,
    'GBP' : 0.78,
    'GEL' : 2.52,
    'GHC' : 47467,
    'GHS' : 4.75,
    'GIP' : 0.78,
    'GMD' : 48,
    'GNF' : 8983,
    'GRD' : 294,
    'GTQ' : 7.5,
    'GYD' : 204,
    'HKD' : 7.85,
    'HNL' : 24,
    'HRK' : 6.4,
    'HTG' : 68,
    'HUF' : 282,
    'IDR' : 14966,
    'IEP' : 0.68,
    'ILS' : 3.61,
    'INR' : 72,
    'IQD' : 1178,
    'IRR' : 42000,
    'ISK' : 109,
    'ITL' : 1669,
    'JMD' : 136,
    'JOD' : 0.71,
    'JPY' : 112,
    'KES' : 100,
    'KGS' : 69,
    'KHR' : 4025,
    'KMF' : 424,
    'KPW' : 135,
    'KRW' : 1120,
    'KWD' : 0.31,
    'KYD' : 0.84,
    'KZT' : 369,
    'LAK' : 8393,
    'LBP' : 1508,
    'LKR' : 162,
    'LRD' : 154,
    'LSL' : 15,
    'LTL' : 2.98,
    'LUF' : 35,
    'LVL' : 0.61,
    'LYD' : 1.37,
    'MAD' : 9.39,
    'MDL' : 17,
    'MGA' : 3311,
    'MGF' : 9150,
    'MKD' : 53,
    'MMK' : 1529,
    'MNT' : 2460,
    'MOP' : 8.08,
    'MRO' : 357,
    'MTL' : 0.37,
    'MUR' : 33,
    'MVR' : 15,
    'MWK' : 717,
    'MYR' : 4.15,
    'MZM' : 59754,
    'MZN' : 60,
    'NAD' : 15,
    'NGN' : 359,
    'NIO' : 32,
    'NLG' : 1.9,
    'NOK' : 8.4,
    'NPR' : 114,
    'NZD' : 1.52,
    'OMR' : 0.39,
    'PAB' : 1,
    'PEN' : 3.3,
    'PGK' : 3.26,
    'PHP' : 54,
    'PKR' : 123,
    'PLN' : 3.72,
    'PTE' : 173,
    'PYG' : 5763,
    'QAR' : 3.57,
    'ROL' : 39889,
    'RON' : 3.99,
    'RSD' : 101,
    'RUB' : 68,
    'RWF' : 862,
    'SAR' : 3.75,
    'SBD' : 7.6,
    'SCR' : 13,
    'SDD' : 1795,
    'SDG' : 18,
    'SDP' : 2261,
    'SEK' : 9.08,
    'SGD' : 1.38,
    'SHP' : 0.78,
    'SIT' : 207,
    'SKK' : 26,
    'SLL' : 8430,
    'SOS' : 542,
    'SRD' : 7.41,
    'SRG' : 7408,
    'STD' : 21070,
    'SVC' : 8.75,
    'SYP' : 215,
    'SZL' : 15,
    'THB' : 33,
    'TJS' : 9.36,
    'TMM' : 17050,
    'TMT' : 3.41,
    'TND' : 2.76,
    'TOP' : 2.29,
    'TRL' : 6629223,
    'TRY' : 6.63,
    'TTD' : 6.64,
    'TWD' : 31,
    'TZS' : 2281,
    'UAH' : 28,
    'UGX' : 3749,
    'USD' : 1,
    'UZS' : 7780,
    'VEB' : 6050841136,
    'VEF' : 6050841,
    'VND' : 23150,
    'VUV' : 111,
    'WST' : 2.64,
    'XAF' : 565,
    'XCD' : 2.7,
    'XOF' : 565,
    'XPF' : 103,
    'YER' : 250,
    'YUN' : 101,
    'ZAR' : 15,
    'ZMK' : 5176,
    'ZWD' : 373,
    /* Astropay currencies have higher minimums - 1.50 USD */
    'ARS' : 58.5,
    'BRL' : 6.23,
    'CLP' : 1035,
    'COP' : 4640,
    'MXN' : 28.5
  };

  var error = true;

  // Get amount selection
  for ( var i = 0; i < form.amount.length; i++ ) {
    if ( form.amount[i].checked ) {
      amount = form.amount[i].value;
    }
  }

  if ( form.input_amount_other_box.value != "" ) {
    var otherAmount = form.input_amount_other_box.value;
    otherAmount = otherAmount.replace(/[,.](\d)$/, '\:$10');
    otherAmount = otherAmount.replace(/[,.](\d)(\d)$/, '\:$1$2');
    otherAmount = otherAmount.replace(/[\$£€¥,.]/g, '');
    otherAmount = otherAmount.replace(/:/, '.');
    form.input_amount_other_box.value = otherAmount;
    form.amountGiven.value = otherAmount;
    amount = otherAmount;
  }

  // Check amount is a real number
  error = ( amount == null || isNaN( amount ) || amount.value <= 0 );
  // Check amount is at least the minimum
  var currency = form.currency_code.value;
  if ( typeof( minimums[currency] ) == 'undefined' ) {
    minimums[currency] = 1;
  }
  if ( error ) {
    alert( "</html>{{int:donate_interface-amount-error}}<html>" );
  } else if ( amount < minimums[currency] ) {
    $( "#input_amount_other_box" ).val( '' );
    alert( "</html>{{int:donate_interface-smallamount-error}}<html>".replace('$1', (minimums[currency] + ' ' + currency) ) );
    error = true;
  }
  
  if ( amount > 10000*minimums[currency]) {
    $( "#input_amount_other_box" ).val( '' );
    errorMessageLarge = "</html>{{int:Donate interface-bigamount-error}}<html>";
    errorMessageLarge = errorMessageLarge.replace('$1',10000*minimums[currency]);
    errorMessageLarge = errorMessageLarge.replace('$2',currency);
    errorMessageLarge = errorMessageLarge.replace('$3','benefactors@wikimedia.org');
    alert(errorMessageLarge);
    error = true;
  }

  if ( form.opt_in ) {
    if ( $("input[name='opt_in']:checked").val() === undefined ) {
      $('#error-optin').show();
      error = true;
    } else {
      $('#error-optin').hide();
      form.variant.value = 'emailExplain';
    }
  }

  return !error;
}
</script>
</html>