MediaWiki:Centralnotice-template-kmorrow ptBR dsk sm txt 202

From Meta, a Wikimedia project coordination wiki

<style> /* css variables */ .frb {

   --wmui-base100: #fff;
   --wmui-base90: #f8f9fa;
   --wmui-base80: #eaecf0;
   --wmui-base70: #c8ccd1;
   --wmui-base50: #a2a9b1;
   --wmui-base30: #72777d;
   --wmui-base20: #54595d;
   --wmui-base10: #202122;
   --wmui-base0: #000;
   --wmui-accent: #36c;
   --wmui-accent-light: #eaf3ff;
   --wmui-accent-dark: #2a4b8d;
   --wmui-red: #d33;
   --wmui-red-light: #fee7e6;
   --wmui-red-dark: #b32424;
   --wmui-green: #00af89;
   --wmui-green-light: #d5fdf4;
   --wmui-green-dark: #14866d;
   --wmui-yellow: #fc3;
   --wmui-yellow-light: #fef6e7;
   --wmui-yellow-dark: #ac6600;
   --frb-primary: #900;
   --frb-primary-light: #ffc9c9;
   --frb-primary-dark: var(--frb-primary);
   --frb-body: var(--wmui-base0);
   --frb-link: var(--wmui-accent);
   --frb-link-hover: #447ff5;
   --frb-message-background: var(--wmui-base100);
   --frb-message: var(--wmui-base0);
   --frb-muted: var(--wmui-base20);
   --frb-muted-hover: var(--wmui-base0);
   --frb-checkbox: var(--wmui-accent);
   --frb-button: var(--wmui-base90);
   --frb-button-border: var(--wmui-base50);
   --frb-button-hover: var(--wmui-base100);
   --frb-button-border-hover: var(--wmui-base50);
   --frb-button-focus: var(--wmui-base90);
   --frb-button-border-focus: var(--wmui-accent);
   --frb-button-selected: var(--wmui-accent-dark);
   --frb-button-border-selected: var(--wmui-accent-dark);
   --frb-submit: var(--wmui-accent);
   --frb-submit-hover: #447ff5;
   --frb-error: var(--wmui-red);

}

/* Hide when editing */ .action-edit .frb, .ve-activated .frb {

   display: none !important;

}

/* Hide when printed */ @media print {

   .frb {
       display: none !important;
   }

}

.frb {

   font-family: system-ui, -apple-system,BlinkMacSystemFont, "Segoe UI", Roboto, "Oxygen-Sans", Ubuntu, Cantarell, Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;

}

  1. centralNotice.collapsed .frb {
   display: none;

}

/* z-index override for German Wikipedia */ .mw-body {

   z-index: auto;

}

  1. toc,

.toc {

   clear: left;

}

/* Box-sizing */ .frb, .frb *, .frb *:before, .frb *:after {

   -moz-box-sizing: border-box;
   -webkit-box-sizing: border-box;
   box-sizing: border-box;

}

/* Resets */ .frb * {

   margin: 0;
   padding: 0;
   border: 0;
   font: inherit;
   font-size: 100%;
   vertical-align: baseline;
   background: none;

}

.frb button {

   cursor: pointer;

}

.frb frb-amt, .frb-replaced {

   white-space: nowrap;

}

@media (prefers-reduced-motion: reduce) {

   .frb,
   .frb * {
       transition-duration: 0.01ms !important;
   }

}

/* Inline banner styles


*/

  1. frb-inline {
   display: table;
   position: relative;
   background: var(--wmui-base100);
   color: var(--frb-body);
   font-size: 14px;
   margin: 12px auto 50px;
   border: 5px solid var(--frb-primary);
   box-shadow: 2px 2px 6px 0px rgba(0,0,0,0.15);
   border-radius: 0 0 2px 2px;
   transition: all .2s ease-in-out;
   max-width: 1200px;
   text-align: left;

}

body.rtl #frb-inline {

   text-align: right;

}

/* --- Top bar --- */

.frb-inline-topbar {

   width: 100%;
   padding: 0 0 13px;
   text-align: left;
   background-color: var(--wmui-base100);
   color: var(--wmui-base0);
   display: inline-block;
   z-index: 999;
   font-weight: 600;
   font-size: 18px;
   line-height: 1.125; /* 18px @16px */
   flex: 0 0 100%;

}

/* --- Main content --- */

.frb-inline-main {

   padding: 13px 16px 15px;
   display: flex;
   justify-content: space-between;
   align-items: flex-start;
   flex-wrap: wrap;

}

.frb-inline-main.frb-form-open {

   flex-wrap: wrap;

}

@media (max-width: 1260px) {

   .vector-feature-page-tools-pinned-enabled .frb-inline-main {
       flex-wrap: wrap;
       padding: 13px 16px 7px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-inline-message-wrapper {
       flex: 0 1 100%;
       max-width: 100%;
       margin: 0;
   }
   .vector-feature-page-tools-pinned-enabled .frb-form {
       position: relative;
       margin: auto;
       flex: 0 0 100%;
       max-width: 500px;
       top: 0;
   }

}

@media (max-width: 1065px) {

   .frb-inline-main {
       padding: 13px 16px 7px;
   }

}

.frb-inline-message {

   font-size: 15px;
   font-weight: 600;
   line-height: 1.5;
   display: flex;
   align-items: center;
   height: 171px;

}

/* fixed height sizing - 450 max characters. different values for tools menu showing or hidden */

@media (max-width: 1920px) {

   .vector-feature-page-tools-pinned-enabled .frb-inline-message {
       height: 171px;
   }

}

@media (max-width: 1450px) {

   .frb-inline-message {
       height: 171px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-inline-message {
       height: 194px;
   }

}

@media (max-width: 1401px) {

   .frb-inline-message {
       height: 171px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-inline-message {
       height: 194px;
   }

}

@media (max-width: 1300px) {

   .frb-inline-message {
       height: 171px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-inline-message {
       height: 216px;
   }

}

@media (max-width: 1260px) {

   .frb-inline-message {
       height: 194px;
   }

}

@media (max-width: 1199px) {

   .frb-inline-message {
       height: 171px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-inline-message {
       height: 135px;
   }

}

@media (max-width: 1192px) {

   .frb-inline-message {
       height: 194px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-inline-message {
       height: 135px;
   }

}

@media (max-width: 1118px) {

   .vector-feature-page-tools-pinned-enabled .frb-inline-message {
       height: 158px;
   }

}

@media (max-width: 1115px) {

   .vector-feature-page-tools-pinned-enabled .frb-inline-message {
       height: 158px;
   }

}

@media (max-width: 1065px) {

   .frb-inline-message {
       height: 113px;
   }

}

@media (max-width: 1042px) {

   .frb-inline-message {
       height: 135px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-inline-message {
       height: 180px;
   }

}


@media (max-width: 999px) {

   .frb-inline-message {
       height: 90px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-inline-message {
       height: 90px;
   }

}

@media (max-width: 920px) {

   .frb-inline-message {
       height: 113px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-inline-message {
       height: 113px;
   }

}

@media (max-width: 770px) {

   .frb-inline-message {
       height: 135px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-inline-message {
       height: 135px;
   }

}

@media (max-width: 699px) {

   .frb-inline-message {
       height: auto;
   }
   .vector-feature-page-tools-pinned-enabled .frb-inline-message {
       height: auto;
   }

}

/* content height when form is open */

.frb-form-open .frb-inline-message {

   height: 90px;

}

@media (max-width: 1920px) {

   .frb-form-open .frb-inline-message {
       height: 90px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-form-open .frb-inline-message {
       height: 90px;
   }

}

@media (max-width: 1450px) {

   .frb-form-open .frb-inline-message {
       height: 90px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-form-open .frb-inline-message {
       height: 113px;
   }

}

@media (max-width: 1300px) {

   .vector-feature-page-tools-pinned-enabled .frb-form-open .frb-inline-message {
       height: 135px;
   }

}

@media (max-width: 1260px) {

   .frb-form-open .frb-inline-message {
       height: 113px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-form-open .frb-inline-message {
       height: 135px;
   }

}

@media (max-width: 1199px) {

   .frb-form-open .frb-inline-message {
       height: 90px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-form-open .frb-inline-message {
       height: 135px;
   }

}

@media (max-width: 1192px) {

   .frb-form-open .frb-inline-message {
       height: 113px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-form-open .frb-inline-message {
       height: 135px;
   }

}

@media (max-width: 1118px) {

   .vector-feature-page-tools-pinned-enabled .frb-form-open .frb-inline-message {
       height: 158px;
   }

}

@media (max-width: 1115px) {

   .vector-feature-page-tools-pinned-enabled .frb-form-open .frb-inline-message {
       height: 158px;
   }

}

@media (max-width: 1046px) {

   .vector-feature-page-tools-pinned-enabled .frb-form-open .frb-inline-message {
       height: 180px;
   }

}

@media (max-width: 1042px) {

   .frb-form-open .frb-inline-message {
       height: 135px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-form-open .frb-inline-message {
       height: 180px;
   }

}

@media (max-width: 999px) {

   .frb-form-open .frb-inline-message {
       height: 90px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-form-open .frb-inline-message {
       height: 90px;
   }

}

@media (max-width: 920px) {

   .frb-form-open .frb-inline-message {
       height: 113px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-form-open .frb-inline-message {
       height: 113px;
   }

}

@media (max-width: 770px) {

   .frb-form-open .frb-inline-message {
       height: 135px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-form-open .frb-inline-message {
       height: 135px;
   }

}

@media (max-width: 699px) {

   .frb-form-open .frb-inline-message {
       height: auto;
   }
   .vector-feature-page-tools-pinned-enabled .frb-form-open .frb-inline-message {
       height: auto;
   }

}


.frb-inline-message > div {

   width: 100%;

}

.frb-icon-info {

   margin-bottom: -5px;
   margin-right: 2px;
   width: 25px;
   height: 25px;

}

.frb-icon-info circle {

   fill: #FEFD34;

}

.frb-icon-info path {

   fill: var(--wmui-base0);

}

/* --- Form legends --- */ .frb-form {

   position: relative;
   margin: auto;
   flex: 0 0 300px;
   max-width: 300px;

}

.frb-form-open .frb-form {

   max-width: 500px;
   flex: 0 0 100%;

}

@media (max-width: 1065px) {

   .frb-form {
       max-width: 500px;
       flex: 0 0 100%;
   }

}

.frb-legend {

   margin: 0;
   padding: 6px 0 8px;
   width: 100%;
   text-align: center;
   font-size: 14px;
   line-height: 1.2;
   color: var(--frb-muted);
   font-weight: normal;
   text-transform: none;

}

.frb-form fieldset.frb-haserror .error-highlight {

   color: var(--frb-error);
   font-weight: 600;

}

  1. frb-inline ul {
   margin: 0;

}

.frb-form fieldset {

   width: 100%;
   margin: 12px auto 0;
   padding: 0;
   border: none;

}

/*less padding to use less vertical height*/ .frb-form .frb-methods {

   margin-top: 6px;

}

.frb-cta {

   text-align: center;
   margin: 15px;
   color: var(--frb-primary);

}

.frb-cta.frb-cta-hiddenmessage {

   border-radius: 1.5em;
   background-color: #ffc9c9;
   color: #ad0000;
   padding: 12px 20px;
   margin: 15px 0;

}

/* --- Common Button Styles --- */

.frb .frb-btn, .frb .frb-label {

   display: flex;
   align-items: center;
   justify-content: center;
   text-align: center;
   min-height: 48px;
   margin: 0 auto;
   padding: 2px 4px;
   background-color: var(--frb-button);
   color: #222;
   font-size: 16px;
   border: 1px solid var(--frb-button-border);
   border-radius: 2px;
   outline: 0;
   line-height: 1; /* 16px @16px */
   cursor: pointer;
   font-weight: 600;
   transition: background 100ms, color 100ms, border-color 100ms, box-shadow 100ms;

}

.frb .frb-btn:hover, .frb .frb-label:hover {

   background-color: var(--frb-button-hover);
   color: #444;
   border-color: var(--frb-button-border-hover);

}

.frb .frb-btn:active, .frb .frb-label:active {

   background-color: #d9d9d9;
   color: var(--frb-body);
   border-color: #7d8389;

}

.frb-btn svg, .frb-label svg {

   max-width: 100%;

}

.frb-form input[type="radio"]:checked + .frb-btn, .frb-form input[type="radio"]:checked + .frb-label {

   background-color: var(--frb-button-selected);
   color: var(--wmui-base100);
   border-color: var(--frb-button-border-selected);

}

.frb-form input[type="radio"]:checked + .frb-label svg.white-on-select {

   filter: brightness(0) invert(1);

}

.frb-form input[type="radio"]:checked + #frb-amt-other-label #frb-amt-other-input {

   color: var(--wmui-base100);
   box-shadow: 0 1px 0 0 var(--wmui-base100);

}

.frb-btn:focus, .frb-label:focus, .frb-submit:focus, .frb-input:focus {

   outline: 0;
   border-color: var(--frb-button-border-focus);
   box-shadow: inset 0 0 0 1px var(--frb-button-border-focus);

}

.frb-form input[type=radio]:focus + .frb-btn, .frb-form input[type=radio]:focus + .frb-label, .frb-form input[type=radio]:checked + .frb-btn:focus, .frb-form input[type=radio]:checked + .frb-label:focus, .frb-submit:focus {

   box-shadow: inset 0 0 0 2px var(--frb-button-border-focus), inset 0 0 0 3px var(--wmui-base100);
   border-color: var(--frb-button-border-focus) !important;

}

/* Blue text buttons */ .frb-methods .frb-label {

   color: var(--wmui-accent);

}

.frb-methods .frb-label:active {

   color: var(--wmui-accent-dark);

}

/* Submit/Continue buttons (blue background when active) */ .frb .frb-submit {

   width: 100%;
   display: block;
   margin-top: 8px;
   padding: 16px 2px;
   color: rgba(84,89,93,0.2);
   background-color: var(--wmui-base100);
   border: 1px solid var(--frb-button-border-hover);
   cursor: default;
   border-radius: 2px;
   font-size: 16px;
   font-weight: 600;
   line-height: 1;
   transition: background-color 0.5s ease;
   opacity: .5;

}

.frb-submit.active {

   color: var(--wmui-base100);
   background-color: var(--frb-submit);
   border-color: var(--frb-submit);
   cursor: pointer;
   opacity: 1;

} .frb-submit.active:hover {

   background-color: var(--frb-submit-hover);
   border-color: var(--frb-submit-hover);

}

.frb-submit-txt-once { display: inline; } .form-monthly .frb-submit-txt-once { display: none; }

.frb-submit-txt-monthly { display: none; } .form-monthly .frb-submit-txt-monthly { display: inline; }

.frb .frb-step-monthly-diff-amt .frb-submit {

   display: inline-block;
   margin: 8px auto auto;
   width: auto;
   padding: 16px 24px;

}

/* Hide radio buttons. Based on http://jqueryui.com/button/#radio */ .frb-frequency input[type="radio"], .frb-methods input[type="radio"], .frb-amounts input[type="radio"], .frb-optin input[type="radio"], .frb-form input[type="checkbox"] {

   position: absolute;
   overflow: hidden;
   height: 1px;
   width: 1px;
   clip: rect(0 0 0 0);
   border: 0;
   margin: -1px;
   padding: 0;

}

/* --- Buttons layout --- */

/* TODO - fix to remove !important */ .frb-btn-wrapper {

   display: flex;
   flex-wrap: wrap;
   width: 100%;
   margin-left: -6px !important;
   width: calc(100% + 12px) !important;

}

body.rtl .frb-btn-wrapper {

   margin-left: 0 !important;
   margin-right: -6px !important;

}

.frb-optin ul.frb-btn-wrapper,

  1. frb-inline ul.frb-btn-second-wrapper {
   margin-top: 12px;

}

.frb-btn-wrapper li, .frb-btn-wrapper > div {

   flex: 1 0 0;
   display: inline-block;
   padding: 0 6px;

}

/* For 6 payment options, 2x3 */ .frb-methods .frb-btn-wrapper .frb-button:first-child:nth-last-child(6), .frb-methods .frb-btn-wrapper .frb-button:first-child:nth-last-child(6) ~ .frb-button {

   min-width: 33%;

} .frb-methods .frb-btn-wrapper .frb-button:first-child:nth-last-child(6) {

   margin-bottom: 12px;

}

.frb-amounts .frb-btn-wrapper li {

   flex: 1 1 25%;
   max-width: 25%;

}

/* -- set correct spacing between rows --*/ .frb-amounts .frb-btn-wrapper li:first-child {

   margin-bottom: 12px;

}

/* Disabled states */ .frb-form input:disabled + label {

   opacity: 0.4 !important;
   cursor: default !important;

}

/* --- Other amount --- */

  1. frb-amt-other-label {
   position: relative;
   padding: 18px 8px 8px;

}

  1. frb-amt-other-input {
   margin: 0;
   background: transparent;
   border: none;
   width: 100%;
   font-size: 16px;
   text-align: center;
   direction: ltr;
   -moz-appearance: textfield; /* remove number spinner in Firefox */
   box-shadow: 0 1px 0 0 #444;

}

  1. frb-amt-other-input:focus {
   outline: none;

}

.frb-amt-other-span {

   position: absolute;
   top: 5px;
   font-size: 12px;
   width: 100%;
   line-height: 1;
   left: 0;
   text-align: center;

}

/* Remove number spinner Safari and Chrome */

  1. frb-amt-other-input::-webkit-inner-spin-button,
  2. frb-amt-other-input::-webkit-outer-spin-button {
   -webkit-appearance: none;
   margin: 0;

}

/* --- Transaction fees options --- */

/* Checkbox styles */

.frb-checkbox-label {

   position: relative;
   display: inline-block;
   margin-top: 16px;
   width: 100%;
   padding-left: 26px;
   padding-top: 1px;
   cursor: pointer;
   font-size: 14px;
   line-height: 1.3571428571; /* 19px @14px */
   font-weight: 600;
   color: var(--frb-body);

} body.rtl .frb-checkbox-label {

   padding-left: 0;
   padding-right: 26px;

}

/* Outer-box */ .frb-checkbox-label::before {

   position: absolute;
   content: "";
   top: 3px;
   left: 0;
   display: inline-block;
   height: 17px;
   width: 17px;
   border-radius: 2px;
   border: 1px solid var(--wmui-base50);
   background-color: var(--wmui-base90);

} body.rtl .frb-checkbox-label::before {

   left: auto;
   right: 0;

}

/* Checkmark */ .frb-checkbox-label::after {

   position: absolute;
   content: "";
   top: 8px;
   left: 4px;
   display: inline-block;
   height: 5px;
   width: 9px;
   border-left: 2px solid;
   border-bottom: 2px solid;
   transform: rotate(-45deg);
   border-color: var(--wmui-base100);

} body.rtl .frb-checkbox-label::after {

   left: auto;
   right: 4px;

}

.frb-ptf-total {

   font-weight: bold;

} .frb-ptf-fee {

   white-space: nowrap;

}

/* Hide the checkmark by default */ .frb-checkbox + .frb-checkbox-label::after {

   content: none;

} /* Unhide the checkmark on the checked state */ .frb-checkbox:checked + .frb-checkbox-label::after {

   content: "";

}

.frb-checkbox:checked + .frb-checkbox-label:before {

   background-color: var(--frb-checkbox);
   border-color: var(--frb-checkbox);

}

/* Focus style - unchecked */ .frb-checkbox:focus + .frb-checkbox-label::before {

   border-color: var(--frb-checkbox);
   box-shadow: inset 0 0 0 1px var(--frb-checkbox);

}

/* Focus style - checked */ .frb-checkbox:focus:checked + .frb-checkbox-label::before {

   box-shadow: inset 0 0 0 1px var(--frb-checkbox), inset 0 0 0 2px var(--wmui-base100);

}

/* Hover */ .frb-checkbox:hover + .frb-checkbox-label::before {

   background-color: var(--wmui-base80);

}

.frb-checkbox:checked:hover + .frb-checkbox-label:before {

   background-color: #447ff5;
   border-color: #447ff5;

}

/* --- Adjustments for SVGs with extra white space -- */

.frb-methods svg.frb-logo-payments--paypal, .frb-methods svg.frb-logo-payments--amazon {

   top: -2px;
   position: relative;

}

.frb-logo-payments--paypal-usd {

   margin-bottom: -6px;

}

/* --- Credit card logos --- */

.frb-pm-cc svg {

   display: none;
   width: 20%;
   min-width: 30px;
   max-width: 40px;
   max-height: 24px;
   margin: 0 3px;
   border-radius: 2px;
   box-shadow: 0 1px 1px rgba(0, 0, 0, 0.33);

}

@media all and (min-width: 1390px) {

   .frb-pm-cc svg {
       min-width: 26px;
   }

}

.frb-cc-logo-wrapper {

   font-size: 0; /* Remove spacing between icons */

}

.frb-cctypes-vmad span, .frb-cctypes-vmaj span, .frb-cctypes-vma span, .frb-cctypes-vm span {

   display: none;

} .frb-cctypes-vmad .frb-cc-logo-wrapper, .frb-cctypes-vmaj .frb-cc-logo-wrapper, .frb-cctypes-vma .frb-cc-logo-wrapper, .frb-cctypes-vm .frb-cc-logo-wrapper {

   display: flex;
   justify-content: center;
   align-items: center;
   flex-wrap: wrap;

}

.frb-cctypes-vmad .frb-cc-logo-visa, .frb-cctypes-vmad .frb-cc-logo-mastercard, .frb-cctypes-vmad .frb-cc-logo-amex, .frb-cctypes-vmad .frb-cc-logo-discover,

.frb-cctypes-vmaj .frb-cc-logo-visa, .frb-cctypes-vmaj .frb-cc-logo-mastercard, .frb-cctypes-vmaj .frb-cc-logo-amex, .frb-cctypes-vmaj .frb-cc-logo-jcb,

.frb-cctypes-vma .frb-cc-logo-visa, .frb-cctypes-vma .frb-cc-logo-mastercard, .frb-cctypes-vma .frb-cc-logo-amex,

.frb-cctypes-vm .frb-cc-logo-visa, .frb-cctypes-vm .frb-cc-logo-mastercard {

   display: inline-block;

}

/* --- Footer / Small Print --- */

.frb-smallprint {

   margin-top: 12px;
   font-size: 12px;
   line-height: 1.5; /* 18px @12px */
   color: var(--frb-muted);
   font-weight: normal;

}

.frb-smallprint a {

   color: var(--frb-muted);
   text-decoration: underline;

}

.frb-smallprint a:hover, .frb-smallprint a:focus {

   color: var(--frb-muted-hover);

}

.recurring-details {

   display: none;

}

.frb-optin .frb-smallprint {

   margin-top: 8px;
   font-size: 11px;
   line-height: 1.4;

}

/* --- Close and RML Options --- */

.frb-inline-bottombar {

   position: absolute;
   width: 100%;
   text-align: center;
   display: flex;
   justify-content: center;
   align-items: center;

}

.frb-inline-bottombar > * {

   display: inline;
   margin: 6px 10px;
   position: relative;

}

.frb-footer-button {

   font-size: 12px;
   line-height: normal;
   text-transform: uppercase;
   letter-spacing: 0.25px;
   color: var(--frb-muted);
   height: 45px;
   padding: 0 6px;

}

.frb-footer-button:hover, .frb-footer-button:focus {

   color: var(--frb-muted-hover);

}

/* Close button icon */ .frb-inline-close-icon {

   margin-bottom: -2px;
   width: 10px;

} .frb-inline-close-icon g {

   stroke: currentColor;

}

/* RML text color */ .frb-rml-link {

   color: var(--frb-link);
   font-weight: bold;

} .frb-rml-link:hover, .frb-rml-link:focus {

   color: var(--frb-link-hover);

}

/* RML clock icon */ .frb-inline-rml-icon {

   margin-bottom: -3px;
   width: 13px;

} .frb-inline-rml-icon path {

   fill: currentColor;

} .frb-inline-rml-icon circle {

   stroke: currentColor;

}

.frb-input {

   background: var(--wmui-base100);
   width: 100%;
   display: block;
   padding: 7px 12px;
   margin: 0;
   font-size: inherit;
   color: var(--frb-body);
   border: 1px solid var(--frb-button-border);
   border-radius: 2px;
   height: 45px;

} .frb-input.frb-haserror {

   border-color: var(--frb-error);
   box-shadow: inset 0 0 0 1px var(--frb-error);

}

/* "Nag" banner styles


*/

div#frb-nag {

   display: none;
   position: fixed;
   width: 90%;
   bottom: 0;
   left: 5%;
   z-index: 110;
   background-color: var(--frb-primary-light);
   box-shadow: 0 0 15px 0 rgba(0,0,0,.7);
   border-radius: 10px 10px 0 0;
   transform: translateX(0);
   color: var(--frb-body);
   font-size: 15px;
   font-style: normal; /* needed for uk.wikipedia */
   transition: margin 1s ease-in-out;

}

@media all and (min-width: 960px) {

   div#frb-nag {
       left: 50%;
       width: 100%;
       max-width: 910px;
       transform: translateX(-50%);
   }

}

/* Extra specificity for https://phabricator.wikimedia.org/T247126 */

  1. frb-nag.frb {
   margin-bottom: -100%;

}

  1. frb-nag.reveal {
   margin-bottom: 0;

}

  1. frb-nag .frb-nag-link {
   position: relative;
   width: 100%;
   padding: 20px 20px 20px 25px;
   margin: auto;
   cursor: pointer;
   color: var(--frb-body) !important;
   transition: color 0.5s ease, background-color 0.5s ease;
   display: flex;
   align-items: center;

}

  1. frb-nag:hover .frb-nag-link {
   text-decoration: none !important;

}

/* --- Nag Close button --- */

  1. frb-nag .frb-nag-close {
   display: inline-block;
   position: absolute;
   right: 8px;
   top: 8px;
   z-index: 999;
   font-size: 12px;
   cursor: pointer;
   padding: 0;

} body.rtl #frb-nag .frb-nag-close {

   right: auto;
   left: 10px;

}

  1. frb-nag .frb-nag-close:hover .frb-icon g {
   stroke: var(--frb-body);
   transition: all 0.5s ease;

}

  1. frb-nag .frb-icon-close {
   width: 16px;
   height: 16px;

}

/* -------------- Flex items -------------- */

  1. frb-nag .frb-nag-message {
   flex: 1 0 0;
   text-align: left;
   line-height: 1.4;
   padding: 0 20px 0 0;
   font-weight: 500;

}

  1. frb-nag .frb-nag-buttons {
   min-width: 180px;

}

.frb-nag-heading {

   display: block;
   font-size: 17px;
   font-weight: bold;

}

/* --- Button Style --- */

  1. frb-nag .frb-donate-button {
   display: inline-block;
   background-color: var(--frb-primary);
   color: var(--wmui-base100);
   font-size: 18px;
   white-space: nowrap;
   line-height: 1;
   text-transform: uppercase;
   padding: 14px;
   border-radius: 5px;
   outline: 0;
   text-align: center;
   cursor: pointer;
   font-family: inherit;
   font-weight: 700;
   vertical-align: middle;
   position: relative;
   transition: all .25s ease-in-out;

}

  1. frb-nag .frb-donate-button:hover {
   background-color: var(--wmui-base100);
   color: #444;

}

  1. frb-nag .frb-donate-button:active {
   background-color: var(--wmui-base0);
   color: var(--wmui-base100);

}

  1. frb-nag .frb-donate-button.frb-rml-link {
   margin: 0 0 0 15px;
   background-color: transparent;
   color: var(--wmui-accent-dark);
   font-size: 12px;
   text-transform: uppercase;
   padding: 11px 0;
   font-weight: 700;

}

  1. frb-nag .frb-donate-button.frb-rml-link:hover {
   color: var(--frb-link-hover);

}

  1. frb-nag .frb-donate-button.frb-rml-link:active {
   color: var(--frb-link-hover);

}

.frb-inline-message-wrapper {

   flex: 1 1 auto;
   max-width: calc(100% - 320px);
   margin-right: 20px;

}

.frb-form-open .frb-inline-message-wrapper {

   flex: 0 1 100%;
   max-width: 100%;
   margin: 0;

}

@media (max-width: 1065px) {

   .frb-inline-message-wrapper {
       flex: 0 1 100%;
       max-width: 100%;
       margin: 0;
   }

}

/* Error messages */ .frb .frb-error {

   display: none;
   margin-top: 8px;
   font-size: 14px;
   color: var(--frb-error);
   font-weight: 600;
   line-height: 1.3;
   text-align: center;

}

/* --- opt-in and email --- */

  1. frb-form fieldset.frb-optin {
   margin: 12px auto;

}

.frb-form .frb-optin {

   margin-bottom: 1px;

}

.frb-optin-no-prompt {

   display: none;
   clear: both;
   margin-top: 8px;
   padding: 6px 6px 5px 6px;
   border: 1px solid var(--wmui-red-dark);
   background-color: var(--wmui-red-light);
   border-radius: 2px;
   font-size: 14px;
   line-height: 1.2857142857; /*18px @14px*/
   font-weight: normal;

}

.frb-optin-no-prompt.is-positive {

   border-color: var(--wmui-green-dark);
   background-color: var(--wmui-green-light);
   font-weight: bold;

}

.frb-optin-no-prompt__yes {

   display: none;

}

.frb-optin-no-prompt__no {

   display: block;

}

.frb-optin-no-prompt.is-positive .frb-optin-no-prompt__yes {

   display: block;

}

.frb-optin-no-prompt.is-positive .frb-optin-no-prompt__no {

   display: none;

}

/* --- Back button --- */ .frb-back {

   position: absolute;
   left: 0;
   top: 10px;
   padding: 0;
   color: var(--wmui-base30);
   width: 45px;
   height: 45px;

} .frb-back:hover {

   color: var(--wmui-base0);

}

.frb-icon-back path {

   stroke: currentColor;

} .frb-icon-back rect {

   fill: currentColor;

}

.frb-icon-back {

   height: 13px;
   width: 20px;

}

/* --- Recurring upsell --- */

.frb-step-upsell, .frb-step-monthly-diff-amt {

   padding-top: 24px;
   text-align: center;

}

.frb-upsell-cta, .frb-upsell-ty {

   font-size: 17px;
   font-weight: bold;
   padding: 0 45px;

}

.frb-icon-heart path {

   fill: #900;

}

.frb-upsell-color, .frb-step-monthly-diff-amt label {

   display: block;
   max-width: 380px;
   margin: 8px auto;
   display: block;
   font-size: 15px;
   line-height: 1.3;
   font-weight: normal;
   margin: 8px auto;

}

.frb-monthly-buttons {

   padding-top: 8px;

}

.frb-monthly-diff-amt-link {

   font-size: 15px;
   line-height: 1.3;
   color: var(--frb-link);
   margin: 8px 2px;
   padding: 12px 10%;
   font-weight: bold;

} .frb-monthly-diff-amt-link:hover {

   color: var(--frb-link-hover);

}

  1. frb-amt-monthly-other-input {
   width: auto;
   margin: 0 auto;
   text-align: center;

}

/* --- Disable I already donated --- */ .frb.frb-iad-disabled .frb-iad-link {

   display: none;

}

/* CTA first */ /* TODO: have these re-use other button styles */

.frb-cta-first .frb-btn-wrapper {

   margin: auto !important;
   width: auto !important;

}

.frb-cta-first { text-align: center; }

  1. frb-inline .frb-cta-first ul.frb-btn-wrapper {
   margin: auto;
   display: inline-block;

}

.frb-form fieldset.frb-cta-first .frb-btn-wrapper li {

   display: inline-block;
   flex: none;
   margin: 0 !important;

}

.frb .frb-cta-first .frb-btn-cta .frb-btn-cta-label {

   position: relative;
   padding-right: 15px;
   font-weight: 600;

}

.frb .frb-cta-first .frb-btn-cta .frb-btn-cta-label::after {

   background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 6.7 12'%3E%3Cpath d='M.9 0L0 .9 5.1 6 0 11.1l.9.9 5.5-5.5c.3-.3.3-.7 0-.9L.9 0z' fill='%23fff'/%3E%3C/svg%3E");
   content: ' ';
   position: absolute;
   top: 52.5%;
   right: 0;
   width: 7px;
   height: 12px;
   -moz-transform: translateY(-50%);
   -ms-transform: translateY(-50%);
   -webkit-transform: translateY(-50%);
   transform: translateY(-50%);

}

.frb .frb-cta-first .frb-submit.frb-btn-cta {

   margin-top: 0;
   text-align: center;
   padding: 10px 15px;
   height: 45px;
   background-color: #36c;
   border-color: #36c;
   color: #fff;
   position: relative;
   font-size: 16px;

}

.frb .frb-cta-first .frb-submit.frb-btn-cta:hover {

   background-color: #447ff5;
   border-color: #447ff5;

}

.frb .frb-cta-first .frb-btn.frb-btn-simple {

   background-color: transparent;
   border-color: transparent;
   color: #36c;
   font-weight: normal;
   padding: 10px;
   margin-left: 2px;
   font-size: 15px;

}

.frb .frb-cta-first .frb-btn.frb-btn-simple:hover {

   text-decoration: underline;
   color: #447ff5;

}

.frb .frb-cta-first .frb-btn.frb-btn-simple:focus {

   box-shadow: none;
   color: #447ff5;
   text-decoration: underline;

}

/* wmf identity */

.frb-wmf-identity {

   position: relative;
   clear: both;
   padding: 6px 10px 0px;
   color: var(--wmui-base0);
   line-height: 1.3;
   display: flex;
   justify-content: center;
   margin-top: 20px;

}

.frb-wmf-identity-logo {

   flex: 0 0 85px;
   max-width: 85px;
   display: flex;
   align-items: center;
   margin: 0 10px 0 0;

}

.frb-wmf-identity-logo img {

   width: 100%;
   max-width: 100%;

}

.frb-wmf-identity-message {

   flex: 0 1 auto;
   align-items: center;
   padding-left: 5px;
   color: var(--wmui-base20);
   display: none;

}

.frb-wmf-identity-message p {

   font-size: 14px;
   line-height: 1.3;
   margin: 0;

}

@media (max-width: 1199px) {

   .vector-feature-page-tools-pinned-enabled .frb-wmf-identity {
       margin-top: 4px;
   }
   .vector-feature-page-tools-pinned-enabled .frb-wmf-identity-message {
       display: flex;
   }

}

@media (max-width: 1065px) {

   .frb-wmf-identity {
       margin-top: 4px;
   }
   .frb-wmf-identity-message {
       display: flex;
   }

}

.frb-submit-txt-donate { display: none; } .frb-submit-txt-once { display: inline; } .frb-submit-txt-monthly { display: none; } .form-monthly .frb-submit-txt-once { display: none; } .form-monthly .frb-submit-txt-monthly { display: inline; }

/* -- Dialogs -- */

.frb-dialog {

   display: none; /* needed for unsupported browsers */
   background: #fff;
   border: 1px solid #a2a9b1;
   border-radius: 2px;
   box-shadow: 0 2px 2px #0003;
   width: 90%;
   max-width: 600px;
   padding: 40px 20px;

}

.frb-dialog[open] {

   display: block;

}

.frb-dialog::backdrop {

   background: #ffffffa6;

}

.frb-dialog-back {

   border: none;
   background: none;
   margin: 0;
   padding: 0;
   cursor: pointer;
   position: absolute;
   top: 20px;
   left: 20px;
   width: 20px;
   height: 20px;
   opacity: 0.5;

} .frb-dialog-back:hover {

   opacity: 1;

}

.frb-dialog-title {

   font-size: 17px;
   color: #262626;
   font-weight: bold;
   border: 0;
   text-align: center;
   margin-bottom: 20px;

}

.frb-dialog-text {

   font-size: 15px;
   line-height: 1.44;
   margin-bottom: 20px;
   max-width: 530px;

}

@media (min-width: 720px) {

   .frb-dialog {
       padding: 40px;
   }

}

/* -- I already donated -- */

.frb-iad-buttons {

   display: flex;
   flex-wrap: wrap;
   justify-content: center;

}

.frb-iad-buttons button {

   width: 100%;
   margin: 8px 0;
   padding: 10px 15px;
   display: block;
   border-radius: 2px;
   border: solid 1px #a2a9b1;
   background-color: #f8f9fa;
   font-size: 16px;
   font-weight: bold;
   line-height: 1.2;
   color: #007de2;
   cursor: pointer;

}

.frb-iad-buttons button:hover{

   background-color: #eaf3ff;

}

@media (min-width: 720px) {

   #frb-dialog-iad {
       text-align: center;
   }
   .frb-iad-buttons button {
       margin: 0 8px;
       width: 165px;
   }

}

/* --- Maybe later --- */

.frb-rml-disabled .frb-rml, .frb-rml-disabled .frb-rml-link, .frb-rml-disabled #nag-rml-btn {

   display: none !important;

}

.frb-rml-form-legend {

   display: block;
   margin: 0 0 4px;
   padding: 0;
   font-weight: normal;
   text-align: inherit;
   font-size: 14px;
   line-height: 1.2142857143;
   color: var(--frb-muted);

}

.frb-rml-form input {

   width: 100%;
   padding: 4px 8px;
   border: 1px solid var(--wmui-base50);
   border-radius: 2px;
   color: var(--wmui-base0);
   font-size: 16px;
   height: 45px;
   margin-bottom: 20px;

}

  1. frb-rml-email.frb-haserror {
   border-color: var(--frb-error) !important;
   box-shadow: inset 0 0 0 1px var(--frb-error) !important;

}

.frb-error-invalidemail {

   margin: 2px 0 0 !important;

}

.frb-dialog .frb-submit {

   margin: 0;
   width: 100%;

}

.frb-dialog .frb-smallprint {

   margin-top: 20px;

}

.frb-rml-ty {

   text-align: center;
   font-size: 15px;
   line-height: 1.44;

}

/* --- Monthly Pitch --- */

/* latin-ext */ @font-face {

   font-family: 'Caveat Brush';
   font-style: normal;
   font-weight: 400;
   font-display: block;
   src: url('https://upload.wikimedia.org/wikipedia/donate/5/51/Caveat-brush-v6-latin-ext-regular.woff2') format('woff2');
   unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;

} /* latin */ @font-face {

   font-family: 'Caveat Brush';
   font-style: normal;
   font-weight: 400;
   font-display: block;
   src: url('https://upload.wikimedia.org/wikipedia/donate/7/75/Caveat-brush-v6-latin-regular.woff2') format('woff2');
   unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;

}

.frb-monthly-pitch, .frb-monthly-pitch-thanks {

   font-size: 18px;
   line-height: 1.2;
   color: #3e54b7;
   font-family: 'Caveat Brush', auto;
   margin: 10px auto 0;

}

.frb-monthly-pitch {

   margin-right: 110px;
   padding: 0;
   text-align: right;

}

.frb-monthly-pitch-arrow {

   width: 18px;
   height: 18px;
   margin-top: -4px;
   margin-right: 4px;
   margin-left: 4px;
   float: right;

}

.frb-monthly-pitch-thanks {

   display: none;
   padding-right: 32px;
   padding-left: 24px;
   max-width: 310px;
   text-align: center;

}

.frb-monthly-pitch-thanks-heart {

   width: 26px;
   height: 26px;
   margin-left: 0;
   margin-right: 3px;
   margin-top: -5px;
   float: left;

}

.form-monthly .frb-monthly-pitch { display: none; } .form-monthly .frb-monthly-pitch-thanks { display: block; }

</style>

<dialog id="frb-dialog-rml" class="frb frb-dialog">

   <button class="frb-dialog-close frb-dialog-back">
       <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 16'><g fill='none' fill-rule='evenodd' transform='translate(1 1)'><path stroke='#000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.778' d='M7.181 13.285L.753 7 7.181.715'></path><rect fill='#000' width='18.182' height='1.778' x='.818' y='6.111' rx='.889'></rect></g></svg>
   </button>
   <form method="post" action="https://www.pages04.net/wikimedia/remind/Form?sp_source={{{banner}}}" class="frb-rml-form" id="frb-rml-form">
       <input type="hidden" name="formSourceName" value="StandardForm" />
       <input type="hidden" name="sp_exp" value="yes" />
       <input type="hidden" name="rml_source" value="{{{banner}}}" />
       <input type="hidden" name="rml_group" value="dsk_sm" />
       <input type="hidden" name="rml_country" value="" />
       <input type="hidden" name="rml_language" value="" />
       <input type="hidden" name="rml_submitDate" value="" />
       <input type="hidden" name="rml_segment" value="" />
{{{FR2015_translations,remind-me-email/pt-br}}}
{{{FR2015_translations,remind-me-gladly/pt-br}}}
       <label class="frb-rml-form-legend" for="frb-rml-email">{{{FR2015_translations,remind-me-donor-email/pt-br}}}</label>
       <input type="email" name="Email" id="frb-rml-email" dir="ltr" autocomplete="email" autofocus />
       <button class="frb-submit active" id="frb-rml-submit" type="submit">{{{FR2015_translations,remind-me-submit/pt-br}}}</button>
   </form>

</dialog>

<dialog id="frb-dialog-iad" class="frb frb-dialog">

   <button class="frb-dialog-close frb-dialog-back">
       <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 16'><g fill='none' fill-rule='evenodd' transform='translate(1 1)'><path stroke='#000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.778' d='M7.181 13.285L.753 7 7.181.715'></path><rect fill='#000' width='18.182' height='1.778' x='.818' y='6.111' rx='.889'></rect></g></svg>
   </button>
{{{FR2015_translations,iad-thank-you/pt-br}}}
       {{{FR2015_translations,iad-subtitle/pt-br}}}
       <button class="frb-dialog-close" name="frb-iad-hide-button">{{{FR2015_translations,iad-hide/pt-br}}}</button>
       <button class="frb-dialog-close" name="frb-iad-back-button">{{{FR2015_translations,iad-back/pt-br}}}</button>

</dialog>

<script> var frb = frb || {};

/* jshint maxerr: 600 */ frb.amounts = frb.amounts || {};

// Hard minimum amounts that can be given // From https://github.com/wikimedia/wikimedia-fundraising-SmashPig/blob/master/PaymentData/ReferenceData/CurrencyRates.php // Updated 2023-12-12 frb.amounts.minimums = {

   'USD' : 1,
   'CAD' : 1.36,
   'AUD' : 1.52,
   'NZD' : 1.63,
   'GBP' : 0.80,
   'EUR' : 0.93,
   'DKK' : 6.91,
   'HUF' : 355,
   'ILS' : 3.71,
   'INR' : 10, // T309818
   'JPY' : 146,
   'MYR' : 4.68,
   'NOK' : 11,
   'PLN' : 4.02,
   'CZK' : 23,
   'RON' : 4.61,
   'SEK' : 10,
   'UAH' : 37,
   'ZAR' : 19,
   // Latin America
   'BRL' : 4.95,
   'ARS' : 366,
   'CLP' : 880,
   'COP' : 3970,
   'MXN' : 17,
   'PEN' : 3.74,
   'UYU' : 39,
   'CHF' : 0.88

};

frb.amounts.options7 = {

   // Big English
   'USD' : [2.75, 10, 15, 25, 50, 75, 100],
   'CAD' : [2.75, 10, 15, 25, 50, 75, 100],
   'AUD' : [2.75, 10, 15, 25, 50, 75, 100],
   'NZD' : [2.75, 10, 15, 25, 50, 75, 100],
   'GBP' : [2, 10, 15, 25, 50, 75, 100],
   'EUR' : {
       'default' : [2, 10, 15, 25, 50, 75, 100]
   },
   // Others
   'DKK' : [20, 75, 100, 200, 300, 500, 700],
   'HUF' : [500, 1000, 2000, 4000, 5000, 7000, 10000],
   'ILS' : [10, 35, 50, 100, 200, 300, 400],
   'INR' : [25, 300, 500, 1000, 1500, 3000, 5000],
   'JPY' : [300, 1000, 1500, 2000, 3000, 5000, 10000],
   'MYR' : [10, 30, 50, 100, 200, 300, 500],
   'NOK' : [30, 100, 150, 200, 500, 750, 1000],
   'PLN' : [10, 20, 50, 100, 200, 300, 500],
   'CZK' : [50, 100, 250, 500, 1000, 1500, 2500],
   'RON' : [10, 50, 75, 100, 200, 300, 500],
   'SEK' : [30, 100, 150, 200, 500, 750, 1000],
   'UAH' : [50, 75, 150, 300, 500, 750, 1000],
   'ZAR' : [30, 50, 100, 200, 300, 500, 1000],
   // Latin America
   'BRL' : [10, 20, 30, 50, 100, 200, 300],
   'ARS' : [200, 250, 500, 750, 1000, 1500, 2000],
   'CLP' : [2000, 3000, 5000, 10000, 20000, 30000, 50000],
   'COP' : [10000, 15000, 25000, 50000, 100000, 150000, 200000],
   'MXN' : [40, 70, 150, 250, 500, 700, 1000],
   'PEN' : [10, 15, 25, 50, 100, 150, 200],
   'UYU' : [100, 200, 300, 500, 1000, 1500, 2000],
   'CHF' : [3, 5, 10, 25, 50, 100, 200]

};

// 5 amount options. Since 2020 6C, no longer used frb.amounts.options5 = {

   // Big English
   'USD' : [2.75, 15, 20, 50, 100],
   'CAD' : [2.75, 15, 20, 50, 100],
   'AUD' : [2.75, 15, 20, 50, 100],
   'NZD' : [2.75, 15, 20, 50, 100],
   'GBP' : [2, 10, 20, 50, 100],
   'EUR' : [2, 10, 20, 50, 100],
   // Others
   'DKK' : [20, 100, 200, 500, 1000],
   'HUF' : [500, 2500, 4000, 7000, 10000],
   'ILS' : [10, 50, 200, 600, 1000],
   'INR' : [150, 500, 1000, 3000, 5000],
   'JPY' : [300, 1500, 2000, 5000, 10000],
   'MYR' : [10, 50, 100, 300, 500],
   'NOK' : [20, 100, 200, 500, 1000],
   'PLN' : [10, 50, 100, 300, 500],
   'RON' : [10, 50, 100, 200, 1000],
   'SEK' : [30, 100, 200, 500, 1000],
   'UAH' : [50, 150, 300, 750, 1000],
   'ZAR' : [30, 100, 200, 500, 1000],
   // Latin America
   'BRL' : [10, 30, 50, 100, 250],
   'ARS' : [60, 200, 400, 1000, 2000],
   'CLP' : [1500, 5000, 10000, 25000, 50000],
   'COP' : [7000, 20000, 50000, 150000, 200000],
   'MXN' : [35, 100, 200, 750, 1000],
   'PEN' : [10, 50, 150, 300, 700],
   'UYU' : [70, 200, 400, 1500, 2000],
   'CHF' : [3, 10, 25, 50, 100]

};

// "Average" donation frb.amounts.averages = {

   'USD' : 13,
   'CAD' : 12,
   'AUD' : 11,
   'NZD' : 12,
   'GBP' : 6,
   'EUR' : 8,
   // Others
   'DKK' : 60,
   'HUF' : 2500,
   'ILS' : 50,
   'INR' : 229,
   'JPY' : 800,
   'MYR' : 30,
   'NOK' : 75,
   'PLN' : 50,
   'CZK' : 150,
   'RON' : 50,
   'SEK' : 85,
   'UAH' : 150,
   'ZAR' : 65,
   // Latin America
   'BRL' : 25,
   'ARS' : 780,
   'CLP' : 10200,
   'COP' : 35000,
   'MXN' : 140,
   'PEN' : 30,
   'UYU' : 525,
   'CHF' : 25

};

// 'If everyone gave X'. Mostly the same as first asks option. frb.amounts.ifEveryone = {

   // Big English
   'USD' : 2.75,
   'CAD' : 2.75,
   'AUD' : 2.75,
   'NZD' : 2.75,
   'GBP' : 2,
   'EUR' : {
       'default' : 2
   },
   // Others
   'DKK' : 20,
   'HUF' : 500,
   'ILS' : 10,
   'INR' : 25,
   'JPY' : 300,
   'MYR' : 10,
   'NOK' : 30,
   'PLN' : 10,
   'CZK' : 50,
   'RON' : 10,
   'SEK' : 30,
   'UAH' : 50,
   'ZAR' : 30,
   // Latin America
   'BRL' : 10,
   'ARS' : 175,
   'CLP' : 1500,
   'COP' : 7000,
   'MXN' : 40,
   'PEN' : 10,
   'UYU' : 100,
   'CHF' : 5

};

// Minimum fee/PTF amounts. Default is 0.35. // Updated 2018-07-05 based on Ppena's feedback // Updated 2019-05-21 to approx 0.35 USD equivalent frb.amounts.feeMinimums = {

   'DKK' : 2,
   'HUF' : 100,
   'ILS' : 1.2,
   'INR' : 4,
   'JPY' : 35,
   'MYR' : 1,
   'NOK' : 3,
   'PLN' : 1.35,
   'CZK' : 7.5,
   'RON' : 1.5,
   'SEK' : 3,
   'UAH' : 10,
   'ZAR' : 5,
   // Latin America // Updated 2023-01-17 to approx 0.35 USD equivalent
   'BRL' : 1.75,
   'ARS' : 32,
   'CLP' : 322,
   'COP' : 1385,
   'MXN' : 6,
   'PEN' : 1.3,
   'UYU' : 13.7

};

// If one-time amount <= left amount, suggest right amount for monthly // If changing these, please update spreadsheet // https://docs.google.com/spreadsheets/d/1z36zi8EegPLAvR5FYAgwz8ywKZ50QNB82SpwpTdk-xQ/edit#gid=1258723967 frb.amounts.monthlySuggest = {

   'EUR' : [ // also GBP
       [ 1.99, 0 ],
       [ 2.35, 1.40 ],
       [ 9, 1.75 ],
       [ 12, 2 ],
       [ 15, 2.5 ],
       [ 18, 3 ],
       [ 21, 3.5 ],
       [ 24, 4 ],
       [ 27, 4.5 ],
       [ 30, 5 ],
       [ 33, 5.5 ],
       [ 36, 6 ],
       [ 39, 6.5 ],
       [ 42, 7 ],
       [ 45, 7.5 ],
       [ 48, 8 ],
       [ 51, 8.5 ],
       [ 54, 9 ],
       [ 57, 9.5 ],
       [ 60, 10 ],
       [ 63, 10.5 ],
       [ 66, 11 ],
       [ 69, 11.5 ],
       [ 72, 12 ],
       [ 75, 12.5 ],
       [ 102, 17 ],
       [ 250, 25 ],
       [ 499, 50 ],
       [ Infinity, 0 ]
   ],
   'USD' : [ // also CAD, AUD, NZD
       [ 2.74, 0 ],
       [ 9, 1.75 ],
       [ 12, 2 ],
       [ 15, 2.5 ],
       [ 18, 3 ],
       [ 21, 3.5 ],
       [ 24, 4 ],
       [ 27, 4.5 ],
       [ 30, 5 ],
       [ 33, 5.5 ],
       [ 36, 6 ],
       [ 39, 6.5 ],
       [ 42, 7 ],
       [ 45, 7.5 ],
       [ 48, 8 ],
       [ 51, 8.5 ],
       [ 54, 9 ],
       [ 57, 9.5 ],
       [ 60, 10 ],
       [ 63, 10.5 ],
       [ 66, 11 ],
       [ 69, 11.5 ],
       [ 72, 12 ],
       [ 75, 12.5 ],
       [ 102, 17 ],
       [ 250, 25 ],
       [ 499, 50 ],
       [ Infinity, 0 ]
   ],
   'JPY' : [
       [ 299, 0 ],
       [ 900, 150 ],
       [ 1200, 200 ],
       [ 1500, 250 ],
       [ 1800, 300 ],
       [ 2100, 350 ],
       [ 2400, 400 ],
       [ 2700, 450 ],
       [ 3000, 500 ],
       [ 3300, 550 ],
       [ 3600, 600 ],
       [ 3900, 650 ],
       [ 4200, 700 ],
       [ 4500, 750 ],
       [ 4800, 800 ],
       [ 5100, 850 ],
       [ 5400, 900 ],
       [ 5700, 950 ],
       [ 6000, 1000 ],
       [ 6300, 1050 ],
       [ 6600, 1100 ],
       [ 6900, 1150 ],
       [ 7200, 1200 ],
       [ 7500, 1250 ],
       [ 10800, 1800 ],
       [ 18000, 3000 ],
       [ 50000, 6000 ],
       [ Infinity, 0 ]
   ],
   'SEK' : [ // Also NOK
       [ 29, 0 ],
       [ 35, 20 ],
       [ 55, 25 ],
       [ 105, 30 ],
       [ 160, 40 ],
       [ 210, 50 ],
       [ 360, 60 ],
       [ 450, 75 ],
       [ 600, 100 ],
       [ 800, 125 ],
       [ 900, 150 ],
       [ 1200, 200 ],
       [ 1500, 250 ],
       [ 1800, 300 ],
       [ 2100, 350 ],
       [ Infinity, 0 ]
   ],
   'HUF' : [
       [ 499, 0 ],
       [ 3000, 500 ],
       [ 6000, 1000 ],
       [ 9000, 1500 ],
       [ 12000, 2000 ],
       [ 18000, 3000 ],
       [ 24000, 4000 ],
       [ 30000, 5000 ],
       [ 36000, 6000 ],
       [ 42000, 7000 ],
       [ 48000, 8000 ],
       [ 54000, 9000 ],
       [ 60000, 10000 ],
       [ Infinity, 0 ]
   ],
   'ILS' : [
       [ 9, 0 ],
       [ 10, 5 ],
       [ 60, 10 ],
       [ 90, 15 ],
       [ 120, 20 ],
       [ 180, 30 ],
       [ 240, 40 ],
       [ 300, 50 ],
       [ 360, 60 ],
       [ 420, 70 ],
       [ 480, 80 ],
       [ 540, 90 ],
       [ 600, 100 ],
       [ Infinity, 0 ]
   ],
   'ZAR' : [
       [ 29, 0 ],
       [ 30, 20 ],
       [ 50, 30 ],
       [ 100, 40 ],
       [ 300, 50 ],
       [ 450, 75 ],
       [ 600, 100 ],
       [ 900, 150 ],
       [ 1200, 200 ],
       [ 1500, 250 ],
       [ 1800, 300 ],
       [ 2400, 400 ],
       [ 3000, 500 ],
       [ 3600, 600 ],
       [ Infinity, 0 ]
   ],
   'MYR' : [ // Also RON, PLN
       [ 9, 0 ],
       [ 30, 5 ],
       [ 50, 10 ],
       [ 120, 20 ],
       [ 180, 30 ],
       [ 240, 40 ],
       [ 300, 50 ],
       [ 360, 60 ],
       [ 420, 70 ],
       [ 480, 80 ],
       [ 540, 90 ],
       [ 600, 100 ],
       [ 900, 150 ],
       [ Infinity, 0 ]
   ],
   'DKK' : [
       [ 19, 0 ],
       [ 25, 10 ],
       [ 120, 20 ],
       [ 250, 40 ],
       [ 350, 50 ],
       [ 450, 75 ],
       [ 600, 100 ],
       [ 750, 125 ],
       [ 900, 150 ],
       [ 1200, 200 ],
       [ 1500, 250 ],
       [ 1800, 300 ],
       [ 2100, 350 ],
       [ Infinity, 0 ]
   ],
   'CZK' : [
       [ 49, 0 ],
       [ 180, 30 ],
       [ 300, 50 ],
       [ 600, 100 ],
       [ 900, 150 ],
       [ 1200, 200 ],
       [ 1500, 250 ],
       [ 1800, 300 ],
       [ 2100, 350 ],
       [ 2400, 400 ],
       [ 3000, 500 ],
       [ 3600, 600 ],
       [ 4200, 700 ],
       [ 4800, 800 ],
       [ Infinity, 0 ]
   ],
   'CLP' : [
       [ 1999, 0 ],
       [ 2300, 1000 ],
       [ 2700, 1100 ],
       [ 3300, 1200 ],
       [ 4200, 1300 ],
       [ 5500, 1400 ],
       [ 9000, 1500 ],
       [ 10500, 1700 ],
       [ 16000, 2600 ],
       [ 20800, 3400 ],
       [ 26000, 4200 ],
       [ 31200, 5000 ],
       [ 38400, 6400 ],
       [ 55000, 8500 ],
       [ Infinity, 0 ]
   ],
   'UYU' : [
       [ 99, 0 ],
       [ 120, 50 ],
       [ 170, 65 ],
       [ 220, 70 ],
       [ 320, 75 ],
       [ 480, 85 ],
       [ 520, 90 ],
       [ 750, 125 ],
       [ 1050, 170 ],
       [ 1350, 225 ],
       [ 1600, 250 ],
       [ 1800, 300 ],
       [ 2100, 320 ],
       [ Infinity, 0 ]
   ],
   'PEN' : [
       [ 9, 0 ],
       [ 12, 5 ],
       [ 17, 6 ],
       [ 26, 7 ],
       [ 48, 8 ],
       [ 55, 9 ],
       [ 78, 13 ],
       [ 105, 17 ],
       [ 130, 21 ],
       [ 160, 26 ],
       [ 180, 30 ],
       [ 210, 32 ],
       [ Infinity, 0 ]
   ],
   'COP' : [
       [ 9999, 0 ],
       [ 11300, 5000 ],
       [ 17000, 5200 ],
       [ 22000, 5500 ],
       [ 27000, 5800 ],
       [ 45000, 7500 ],
       [ 55000, 9000 ],
       [ 75000, 12500 ],
       [ 105000, 17000 ],
       [ 120000, 20000 ],
       [ 160000, 25000 ],
       [ 180000, 30000 ],
       [ 250000, 34000 ],
       [ Infinity, 0 ]
   ],
   'BRL' : [
       [ 9, 0 ],
       [ 12, 6 ],
       [ 22, 7 ],
       [ 35, 8 ],
       [ 45, 9 ],
       [ 55, 10 ],
       [ 80, 12 ],
       [ 105, 16 ],
       [ 160, 25 ],
       [ 210, 35 ],
       [ 270, 45 ],
       [ 320, 50 ],
       [ Infinity, 0 ]
   ],
   'MXN' : [
       [ 39, 0 ],
       [ 48, 25 ],
       [ 60, 28 ],
       [ 110, 30 ],
       [ 160, 35 ],
       [ 260, 45 ],
       [ 270, 50 ],
       [ 350, 60 ],
       [ 550, 85 ],
       [ 650, 90 ],
       [ 750, 120 ],
       [ 1500, 160 ],
       [ Infinity, 0 ]
   ]
   

}; frb.amounts.monthlySuggest.GBP = frb.amounts.monthlySuggest.EUR; frb.amounts.monthlySuggest.CAD = frb.amounts.monthlySuggest.USD; frb.amounts.monthlySuggest.AUD = frb.amounts.monthlySuggest.USD; frb.amounts.monthlySuggest.NZD = frb.amounts.monthlySuggest.USD;

frb.amounts.monthlySuggest.RON = frb.amounts.monthlySuggest.MYR; frb.amounts.monthlySuggest.PLN = frb.amounts.monthlySuggest.MYR; frb.amounts.monthlySuggest.NOK = frb.amounts.monthlySuggest.SEK;

frb.amounts.test = function() {

   /**
    * Check if amounts are less than minimum acceptable
    * 
    * @param {string}   desc - description for error message e.g. 'amount option' 
    * @param {Object}   dataObject - data to check e.g. frb.amounts.options7
    * @param {Function} extractFunction - function to get test value e.g. d => d[0] for 1st amount
    */
   var testMinimums = function( desc, dataObject, extractFunction = d => d ) {
       const errorMessage = 'Error %s %s %s is less than minimum %s';
       for ( const currency in dataObject ) {
           let data = dataObject[currency].default || dataObject[currency], // need default for some EUR
               value = extractFunction(data),
               minimum = frb.amounts.minimums[currency];
           console.assert( value >= minimum, errorMessage, currency, desc, value, minimum );
       }
   };
   testMinimums( 'if everyone', frb.amounts.ifEveryone, d => d );
   testMinimums( 'average', frb.amounts.averages, d => d );
   testMinimums( 'amount option', frb.amounts.options7, d => d[0] );
   testMinimums( 'monthly suggestion', frb.amounts.monthlySuggest, d => d[1][1] );

};

frb.currencyFormats = {

   'USD' : '$\t',
   'CAD' : {
       'fr' : '$\t',
       'default' : '$\t'
   },
   'AUD' : '$\t',
   'NZD' : '$\t',
   'GBP' : '£\t',
   'EUR' : {
       'en' : '€\t',
       'cy' : '€\t',
       'ga' : '€\t',
       'mt' : '€\t',
       'nl' : '€ \t',
       'lv' : '€ \t',
       'tr' : '€ \t',
       'default' : '\t €'
   },
   // Others
   'CZK' : '\t Kč',
   'DKK' : '\t kr.',
   'HUF' : '\t Ft',
   'ILS' : {
       'he' : '\t ₪',
       'yi' : '\t ₪',
       'ar' : '\t ₪',
       'default' : '₪ \t'
   },
   'INR' : '₹ \t',
   'JPY' : '¥\t',
   'MYR' : 'RM\t',
   'NOK' : '\t kr',
   'PLN' : '\t zł',
   'RON' : '\t lei',
   'SEK' : '\t kr',
   'UAH' : '₴\t',
   'ZAR' : 'R \t',
   // Latin America
   'BRL' : {
       'en' : 'R$\t',
       'default' : 'R$ \t'
   },
   'ARS' : '$\t',
   'CLP' : '$\t',
   'COP' : '$\t',
   'MXN' : '$\t',
   'PEN' : 'S/. \t',
   'UYU' : '$U \t',
   'CHF' : '\t CHF'

};

// Check in user language first, then fall back to English frb.countryNames = {

   'af' : {
       'ZA' : 'Suid-Afrika'
   },
   'en' : {
       'US' : 'the United States',
       'CA' : 'Canada',
       'GB' : 'the UK',
       'IE' : 'Ireland',
       'AU' : 'Australia',
       'NZ' : 'New Zealand',
       'AR' : 'Argentina',
       'AT' : 'Austria',
       'BE' : 'Belgium',
       'BR' : 'Brazil',
       'CH' : 'Switzerland',
       'CL' : 'Chile',
       'CO' : 'Colombia',
       'CZ' : 'the Czech Republic',
       'DK' : 'Denmark',
       'ES' : 'Spain',
       'FR' : 'France',
       'GR' : 'Greece',
       'HK' : 'Hong Kong',
       'HU' : 'Hungary',
       'IL' : 'Israel',
       'IN' : 'India',
       'IT' : 'Italy',
       'JP' : 'Japan',
       'LU' : 'Luxembourg',
       'LV' : 'Latvia',
       'MX' : 'Mexico',
       'MY' : 'Malaysia',
       'NL' : 'the Netherlands',
       'NO' : 'Norway',
       'PE' : 'Peru',
       'PL' : 'Poland',
       'PT' : 'Portugal',
       'RO' : 'Romania',
       'SE' : 'Sweden',
       'SK' : 'Slovakia',
       'UA' : 'Ukraine',
       'UY' : 'Uruguay',
       'ZA' : 'South Africa'
   },
   'ca' : {
       'AT' : 'd’Àustria',
       'BE' : 'de Bèlgica',
       'DK' : 'de Dinamarca',
       'ES' : 'a Espanya',
       'HU' : 'd’Hongria',
       'IL' : 'd’Israel',
       'LV' : 'de Letònia',
       'LU' : 'de Luxemburg',
       'MY' : 'de Malàisia',
       'NO' : 'de Noruega',
       'PL' : 'de Polònia',
       'PT' : 'de Portugal',
       'RO' : 'de Romania',
       'SK' : 'd’Eslovàquia',
       'ZA' : 'de Sud-àfrica',
       'UA' : 'd’Ucraïna'
   },
   'cs' : {
       'CZ' : 'v České republice',
       'AT' : 'v Rakousku',
       'BE' : 'v Belgii',
       'DK' : 'v Dánsku',
       'GR' : 'v Řecku',
       'IL' : 'v Izraeli',
       'LU' : 'v Lucembursku',
       'MY' : 'v Malajsii',
       'NO' : 'v Norsku',
       'PT' : 'v Portugalsku',
       'SE' : 've Švédsku',
       'ZA' : 'v Jihoafrické republice'
   },
   'es' : {
       'AR' : 'en Argentina',
       'AT' : 'en Austria',
       'BE' : 'en Bélgica',
       'BR' : 'en Brasil',
       'CL' : 'en Chile',
       'CO' : 'en Colombia',
       'DK' : 'en Dinamarca',
       'ES' : 'en España',
       'HU' : 'en Hungría',
       'IL' : 'en Israel',
       'LU' : 'en Luxemburgo',
       'LV' : 'en Letonia',
       'MX' : 'en México',
       'MY' : 'en Malasia ',
       'NO' : 'en Noruega',
       'PE' : 'en Perú',
       'PL' : 'en Polonia',
       'PT' : 'en Portugal',
       'RO' : 'en Rumania',
       'SK' : 'en Eslovaquia',
       'UA' : 'en Ucrania',
       'US' : 'en los Estados Unidos',
       'UY' : 'en Uruguay',
       'ZA' : 'en Sudafrica'
   },
   'da' : {
       'AT' : 'i Østrig',
       'BE' : 'i Belgien',
       'CZ' : 'i Tjekkiet',
       'DK' : 'i Danmark',
       'ES' : 'i Spanien',
       'GR' : 'i Grækenland',
       'HU' : 'i Ungarn',
       'IL' : 'i Israel',
       'LV' : 'i Letland',
       'LU' : 'i Luxembourg',
       'MY' : 'i Malaysia',
       'NO' : 'i Norge',
       'PL' : 'i Polen',
       'PT' : 'i Portugal',
       'RO' : 'i Rumænien',
       'SE' : 'i Sverige',
       'SK' : 'i Slovakiet',
       'ZA' : 'i Sydafrika',
       'UA' : 'i Ukraine'
   },
   'nl' : {
       'NL' : 'in Nederland',
       'AT' : 'in Oostenrijk',
       'BE' : 'in België',
       'DK' : 'in Denemarken',
       'CZ' : 'in Tsjechië',
       'ES' : 'in Spanje',
       'GR' : 'in Griekenland',
       'HU' : 'in Hongarije',
       'IL' : 'in Israël',
       'LV' : 'in Letland',
       'LU' : 'in Luxemburg',
       'MY' : 'in Maleisië',
       'NO' : 'in Noorwegen',
       'PL' : 'in Polen',
       'PT' : 'in Portugal',
       'RO' : 'in Roemenië',
       'SE' : 'in Zweden',
       'SK' : 'in Slowakije',
       'ZA' : 'in Zuid-Afrika',
       'UA' : 'in Oekraïne'
   },
   'fr' : {
       'AT' : 'en Autriche',
       'BE' : 'en Belgique',
       'CH' : 'en Suisse',
       'CA' : 'au Canada',
       'CZ' : 'en République tchèque',
       'DK' : 'au Danemark',
       'ES' : 'en Espagne',
       'FR' : 'en France',
       'GR' : 'en Grèce',
       'HU' : 'en Hongrie',
       'IL' : 'en Israël',
       'LV' : 'en Lettonie',
       'LU' : 'au Luxembourg',
       'MY' : 'en Malaisie',
       'NO' : 'en Norvège',
       'PL' : 'en Pologne',
       'PT' : 'au Portugal',
       'RO' : 'en Roumanie',
       'SE' : 'en Suède',
       'SK' : 'en Slovaquie',
       'ZA' : 'en Afrique du Sud',
       'UA' : 'en Ukraine'
   },
   'de' : {
       'AT' : 'in Österreich',
       'BE' : 'in Belgien',
       'CH' : 'in der Schweiz',
       'CZ' : 'in Tschechien',
       'DK' : 'in Dänemark',
       'ES' : 'in Spanien',
       'GR' : 'in Griechenland',
       'HU' : 'in Ungarn',
       'IL' : 'in Israel',
       'LV' : 'in Lettland',
       'LU' : 'in Luxemburg',
       'MY' : 'in Malaysia',
       'NO' : 'in Norwegen',
       'PL' : 'in Polen',
       'PT' : 'in Portugal',
       'RO' : 'in Rumänien',
       'SE' : 'in Schweden',
       'SK' : 'in der Slowakei',
       'ZA' : 'in Südafrika',
       'UA' : 'in der Ukraine'
   },
   'el' : {
       'AT' : 'στην Αυστρία',
       'BE' : 'στο Βέλγιο',
       'CZ' : 'στην Τσεχία',
       'DK' : 'στη Δανία',
       'ES' : 'στην Ισπανία',
       'GR' : 'στην Ελλάδα',
       'HU' : 'στην Ουγγαρία',
       'IL' : 'στο Ισραήλ',
       'LV' : 'στη Λετονία',
       'LU' : 'στο Λουξεμβούργο',
       'MY' : 'στη Μαλαισία',
       'NO' : 'στη Νορβηγία',
       'PL' : 'στην Πολωνία',
       'PT' : 'στην Πορτογαλία',
       'RO' : 'στη Ρουμανία',
       'SE' : 'στη Σουηδία',
       'SK' : 'στη Σλοβακία',
       'ZA' : 'στη Νότια Αφρική',
       'UA' : 'στην Ουκρανία'
   },
   'he' : {
       'AT' : 'אוסטרליה',
       'BE' : 'בלגיה',
       'CZ' : "בצ'כיה",
       'DK' : 'דנמרק',
       'ES' : 'ספרד',
       'GR' : 'ביוון',
       'HU' : 'הונגריה',
       'IL' : 'ישראל',
       'LV' : 'לטביה',
       'LU' : 'לוקסמבורג',
       'MY' : 'מלזיה',
       'NO' : 'נורווגיה',
       'PL' : 'פולין',
       'PT' : 'פורטוגל',
       'RO' : 'רומניה',
       'SE' : 'בשוודיה',
       'SK' : 'סלובקיה',
       'ZA' : 'דרום אפריקה',
       'UA' : 'אוקראינה'
   },
   'hu' : {
       'AT' : 'ausztriai',
       'BE' : 'belgiumi',
       'DK' : 'dániai',
       'ES' : 'spanyolországi',
       'HU' : 'magyarországi',
       'IL' : 'izraeli',
       'LV' : 'lettországi',
       'LU' : 'luxemburgi',
       'MY' : 'malajziai',
       'NO' : 'norvégiai',
       'PL' : 'lengyelországi',
       'PT' : 'portugáliai',
       'RO' : 'romániai',
       'SK' : 'szlovákiai',
       'ZA' : 'dél-afrikai',
       'UA' : 'ukrajnai'
   },
   'it' : {
       'IT' : 'Italia',
       'CH' : 'Svizzera'
   },
   'lv' : {
       'AT' : 'valstī Austrijā',
       'BE' : 'valstī Beļģijā',
       'DK' : 'valstī Dānijā',
       'ES' : 'valstī Spānijā',
       'HU' : 'valstī Ungārijā',
       'IL' : 'Izraēlas valstī',
       'LV' : 'valstī Latvijā',
       'LU' : 'valstī Luksemburgā',
       'MY' : 'valstī Malaizijā',
       'NO' : 'valstī Norvēģijā',
       'PL' : 'valstī Polijā',
       'PT' : 'valstī Portugālē',
       'RO' : 'valstī Rumānijā',
       'SK' : 'valstī Slovākijā',
       'ZA' : 'Dienvidāfrikas valstī',
       'UA' : 'valstī Ukrainā'
   },
   'nb' : {
       'AT' : 'i Østerrike',
       'BE' : 'i Belgia',
       'CZ' : 'i Tsjekkia',
       'DK' : 'i Danmark',
       'ES' : 'i Spania',
       'GR' : 'i Hellas',
       'HU' : 'i Ungarn',
       'IL' : 'i Israel',
       'LV' : 'i Latvia',
       'LU' : 'i Luxembourg',
       'MY' : 'i Malaysia',
       'NO' : 'i Norge',
       'PL' : 'i Polen',
       'PT' : 'i Portugal',
       'RO' : 'i Romania',
       'SE' : 'i Sverige',
       'SK' : 'i Slovakia',
       'ZA' : 'i Sør-Afrika',
       'UA' : 'i Ukraina'
   },
   'pl' : {
       'AT' : 'w Austrii',
       'BE' : 'w Belgii',
       'DK' : 'w Danii',
       'ES' : 'w Hiszpanii',
       'HU' : 'na Węgrzech',
       'IL' : 'w Izraelu',
       'LV' : 'na Łotwie',
       'LU' : 'w Luksemburgu',
       'MY' : 'w Malezji',
       'NO' : 'w Norwegii',
       'PL' : 'w Polsce',
       'PT' : 'w Portugalii',
       'RO' : 'w Rumunii',
       'SK' : 'na Słowacji',
       'ZA' : 'w Republice Południowej Afryki',
       'UA' : 'na Ukrainie'
   },
   'pt' : {
       'AT' : 'na Áustria',
       'BE' : 'na Bélgica',
       'BR' : 'no Brasil',
       'CZ' : 'na República Checa',
       'DK' : 'na Dinamarca',
       'ES' : 'na Espanha',
       'GR' : 'na Grécia',
       'HU' : 'na Hungria',
       'IL' : 'em Israel',
       'LV' : 'na Letónia',
       'LU' : 'no Luxemburgo',
       'MY' : 'na Malásia',
       'NO' : 'na Noruega',
       'PL' : 'na Polónia',
       'PT' : 'em Portugal',
       'RO' : 'na Roménia',
       'SE' : 'na Suécia',
       'SK' : 'na Eslováquia',
       'ZA' : 'na África do Sul',
       'UA' : 'na Ucrânia'
   },
   'ro' : {
       'AT' : 'din Austria',
       'BE' : 'din Belgia',
       'DK' : 'din Danemarca',
       'ES' : 'în Spania',
       'HU' : 'din Ungaria',
       'IL' : 'din Israel',
       'LV' : 'din Latvia',
       'LU' : 'din Luxemburg',
       'MY' : 'din Malaezia',
       'NO' : 'din Norvegia',
       'PL' : 'din Polonia',
       'PT' : 'din Portugalia',
       'RO' : 'din România',
       'SK' : 'din Slovacia',
       'ZA' : 'din Africa de Sud',
       'UA' : 'din Ucraina'
   },
   'ru' : {
       'AT' : 'в Австрии',
       'BE' : 'в Бельгии',
       'DK' : 'в Дании',
       'ES' : 'в Испании',
       'HU' : 'в Венгрии',
       'IL' : 'в Израиле',
       'LV' : 'в Латвии',
       'LU' : 'в Люксембурге',
       'MY' : 'в Малайзии',
       'NO' : 'в Норвегии',
       'PL' : 'в Польше',
       'PT' : 'в Португалии',
       'RO' : 'в Румынии',
       'SK' : 'в Словакии',
       'ZA' : 'в Южной Африке',
       'UA' : 'в Украине'
   },
   'sk' : {
       'AT' : 'v Rakúsku',
       'BE' : 'v Belgicku',
       'DK' : 'v Dánsku',
       'ES' : 'v Španielsku',
       'HU' : 'v Maďarsku',
       'IL' : 'v Izraeli',
       'LV' : 'v Lotyšsku',
       'LU' : 'v Luxembursku',
       'MY' : 'v Malajzii',
       'NO' : 'v Nórsku',
       'PL' : 'v Poľsku',
       'PT' : 'v Portugalsku',
       'RO' : 'v Rumunsku',
       'SK' : 'na Slovensku',
       'ZA' : 'v Juhoafrickej republike',
       'UA' : 'na Ukrajine'
   },
   'sv' : {
       'SE' : 'i Sverige',
       'AT' : 'i Österrike',
       'BE' : 'i Belgien',
       'CZ' : 'i Tjeckien',
       'DK' : 'i Danmark',
       'ES' : 'i Spanien',
       'GR' : 'i Grekland',
       'HU' : 'i Ungern',
       'IL' : 'i Israel',
       'LV' : 'i Lettland',
       'LU' : 'i Luxemburg',
       'MY' : 'i Malaysia',
       'NO' : 'i Norge',
       'PL' : 'i Polen',
       'PT' : 'i Portugal',
       'RO' : 'i Rumänien',
       'SK' : 'i Slovakien',
       'ZA' : 'i Sydafrika',
       'UA' : 'i Ukraina'
   },
   'uk' : {
       'AT' : 'у Австрії',
       'BE' : 'у Бельгії',
       'DK' : 'у Данії',
       'ES' : 'в Іспанії',
       'HU' : 'в Угорщині',
       'IL' : 'в Ізраїлі',
       'LV' : 'у Латвії',
       'LU' : 'у Люксембургу',
       'MY' : 'у Малайзії',
       'NO' : 'у Норвегії',
       'PL' : 'у Польщі',
       'PT' : 'у Португалії',
       'RO' : 'у Румунії',
       'SK' : 'у Словаччині',
       'ZA' : 'у ПАР',
       'UA' : 'в Україні'
   }

};

/* Most of the translations are actually using "in COUNTRY" or similar to account for grammar differences. So this makes English do the same, and allows us to use a clearer %in-country% variable, while avoiding breaking old content using %country%.

  • /

frb.inCountryNames = JSON.parse( JSON.stringify( frb.countryNames ) ); // deep copy frb.inCountryNames.en = {

   'US' : 'in the United States',
   'CA' : 'in Canada',
   'GB' : 'in the UK',
   'IE' : 'in Ireland',
   'AU' : 'in Australia',
   'NZ' : 'in New Zealand',
   'AR' : 'in Argentina',
   'AT' : 'in Austria',
   'BE' : 'in Belgium',
   'BR' : 'in Brazil',
   'CH' : 'in Switzerland',
   'CL' : 'in Chile',
   'CO' : 'in Colombia',
   'CZ' : 'in the Czech Republic',
   'DK' : 'in Denmark',
   'ES' : 'in Spain',
   'FR' : 'in France',
   'GR' : 'in Greece',
   'HK' : 'in Hong Kong',
   'HU' : 'in Hungary',
   'IL' : 'in Israel',
   'IN' : 'in India',
   'IT' : 'in Italy',
   'JP' : 'in Japan',
   'LU' : 'in Luxembourg',
   'LV' : 'in Latvia',
   'MX' : 'in Mexico',
   'MY' : 'in Malaysia',
   'NL' : 'in the Netherlands',
   'NO' : 'in Norway',
   'PE' : 'in Peru',
   'PL' : 'in Poland',
   'PT' : 'in Portugal',
   'RO' : 'in Romania',
   'SE' : 'in Sweden',
   'SK' : 'in Slovakia',
   'UA' : 'in Ukraine',
   'UY' : 'in Uruguay',
   'ZA' : 'in South Africa'

};

frb.dayNames = {

   'en' : [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],
   'ca' : [ 'diumenge', 'dilluns', 'dimarts', 'dimecres', 'dijous', 'divendres', 'dissabte' ],
   'ja' : [ '日', '月', '火', '水', '木', '金', '土' ],
   'es' : [ 'domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado' ],
   'sv' : [ 'söndag', 'måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag' ],
   'da' : [ 'søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag' ],
   'nb' : [ 'søndagen', 'mandagen', 'tirsdagen', 'onsdagen', 'torsdagen', 'fredagen', 'lørdagen' ],
   'it' : [ 'domenica', 'lunedì', 'martedì', 'mercoledì', 'giovedì', 'venerdì', 'sabato' ],
   'nl' : [ 'zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag' ],
   'fr' : [ 'dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi' ],
   'de' : [ 'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag' ],
   'he' : [ 'ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת' ],
   'lv' : [ 'svētdienā', 'pirmdienā', 'otrdienā', 'trešdienā', 'ceturtdienā', 'piektdienā', 'sestdienā' ],
   'pl' : [ 'niedzielę', 'poniedziałek', 'wtorek', 'środę', 'czwartek', 'piątek', 'sobotę' ],
   'pt' : [ 'neste domingo', 'nesta segunda-feira', 'nesta terça-feira', 'nesta quarta-feira', 'nesta  quinta-feira', 'nesta sexta-feira', 'neste sábado' ],
   'ru' : [ 'воскресенье', 'понедельник', 'вторник', 'среду', 'четверг', 'пятницу', 'субботу' ],
   'uk' : [ 'неділі', 'понеділка', 'вівторка', 'середи', 'четверга', 'п’ятниц', 'суботи' ],
   'hu' : [ 'vasárnap', 'hétfő', 'kedd', 'szerda', 'csütörtök', 'péntek', 'szombat' ],
   'ro' : [ 'duminică', 'luni', 'marți', 'miercuri', 'joi', 'vineri', 'sâmbătă' ],
   'af' : [ 'Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag' ],
   'aa' : [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ]

};

// "This fooday" translations. Needed for some languages where gender varies and "this" must agree frb.dayNamesThis = {

   'en' : [ 'this Sunday', 'this Monday', 'this Tuesday', 'this Wednesday', 'this Thursday', 'this Friday', 'this Saturday' ],
   'el' : [ 'Αυτήν την	Κυριακή', 'Αυτή τη Δευτέρα', 'Αυτήν την	Τρίτη', 'Αυτήν την Τετάρτη', 'Αυτήν την	Πέμπτη', 'Αυτήν την Παρασκευή', 'Αυτό το Σάββατο' ],
   'jp' : [ 'この日曜日', 'この月曜日', 'この火曜日', 'この水曜日', 'この木曜日', 'この金曜日', 'この土曜日' ],
   'it' : [ 'questa domenica', 'questo lunedì', 'questo martedì', 'questo mercoledì', 'questo giovedì', 'questo venerdì', 'questo sabato'],
   'pl' : [ 'w tę niedzielę', 'w ten poniedziałek', 'w ten wtorek', 'w tę środę', 'w ten czwartek', 'w ten piątek', 'w tę sobotę' ],
   'ru' : [ 'в это воскресенье', 'в этот понедельник', 'в этот вторник', 'в эту среду', 'в этот четверг', 'в эту пятницу', 'в эту субботу' ],
   'uk' : [ 'цієї неділі', 'цього понеділка', 'цього вівторка', 'цієї середи', 'цього четверга', 'цієї п’ятниці', 'цієї суботи' ],
   'pt' : [ 'este domingo', 'esta segunda-feira', 'esta terça-feira', 'esta quarta-feira', 'esta quinta-feira', 'esta sexta-feira', 'este sábado'],
   'sk' : [ 'túto nedeľu', 'tento pondelok', 'tento utorok', 'túto stredu', 'tento štvrtok', 'tento piatok', 'túto sobotu'],
   'cs' : [ 'tuto neděli', 'toto pondělí', 'toto úterý', 'tuto středu', 'tento čtvrtek', 'tento pátek', 'tuto sobotu']

};

frb.iPadTranslations = {

   'en' : 'iPad'

};

frb.dayNames.pt = [ 'domingo', 'segunda-feira', 'terça-feira', 'quarta-feira', 'quinta-feira', 'sexta-feira', 'sábado' ];

/* jshint maxerr: 600 */ /* MediaWiki:FundraisingBanners/CoreJS-2018.js

* Core code for banner forms, with new inline error messages
*/

var frb = frb || {};

/**

* Test for general ES6 and <dialog> support
*
* Checks for arrow functions, default parameters, NodeList.prototype.forEach(), <dialog> support
* Should be roughly Chrome 51+, Firefox 98+, Edge 79+, Safari 15.4+
* Based on https://gist.github.com/bendc/d7f3dbc83d0f65ca0433caf90378cd95
* @return {boolean}
*/

frb.supportedBrowser = function() {

   try {
       new Function('(a = 0) => a');
       document.querySelectorAll('.frb').forEach(a => a);
       if ( typeof HTMLDialogElement === 'function' ) {
           return true;
       } else {
           return false;
       }
   }
   catch (err) {
       return false;
   }

}();

if ( !mw.centralNotice.adminUi ) { // T262693

   frb.loadedTime = Date.now();
   frb.didSelectAmount = false;
   frb.optinRequiredCountries =
       [ 'AR', 'AT', 'BE', 'BR', 'CL', 'CO', 'CZ', 'DK', 'ES', 'FR', 'GB', 'GR', 'HU', 'IE', 'IT', 'IL',
         'LU', 'LV', 'MX', 'NL', 'NO', 'PE', 'PL', 'PT', 'RO', 'SE', 'SK', 'UA', 'UY' ];
   frb.optinRequired = frb.optinRequiredCountries.indexOf(mw.centralNotice.data.country) !== -1;
   frb.maxUSD = 25000;
   frb.reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;

}

// Keyboard shortcut to go from banner preview to editor - Ctrl+Shift+E if ( mw.config.get('wgUserName') ) {

   if ( mw.config.get('wgUserName').match(/\(WMF\)/) ) {
       window.addEventListener('keydown', function(e) {
           if ( e.ctrlKey && e.shiftKey && e.keyCode === 69 ) {
               window.open( 'https://meta.wikimedia.org/wiki/Special:CentralNoticeBanners/Edit/' + mw.centralNotice.data.banner );
           }
       });
   }

}

/**

* Main function to submit to paymentswiki
*
* @param  {Object} options
* - method (required)
* - submethod (optional)
* - gateway (optional)
* - skipValidation (optional boolean, for pp-usd. Not yet implemented.)
* @param  {Boolean} isEndowment - deprecated, set frb.isEndowment instead
*/

frb.submitForm = function( options, isEndowment ) {

   var uri = new mw.Uri('https://payments.wikimedia.org/index.php/Special:GatewayChooser');
   var params = {};
   if ( !frb.validateForm( options ) ) {
       frb.extraData.validateError = 1; // Flag they had an error, even if fixed later
       return false; // Error, bail out of submitting
   }
   // Skip form chooser for Apple Pay / Google Pay
   if ( options.method === 'apple' || options.method === 'google' ) {
       uri = new mw.Uri('https://payments.wikimedia.org/index.php/Special:AdyenCheckoutGateway');
   }
   // Skip form chooser for Venmo
   if ( options.method === 'venmo' ) {
       uri = new mw.Uri('https://payments.wikimedia.org/index.php/Special:BraintreeGateway');
   }
   // Form selection data
   params.payment_method = options.method;
   if ( options.submethod ) {
       params.payment_submethod = options.submethod;
   }
   if ( options.gateway ) {
       params.gateway = options.gateway;
   }
   if ( options.variant ) {
       params.variant = options.variant;
   }
   params.recurring = frb.getRecurring();
   if ( params.recurring && params.variant && params.variant.match( /monthlyConvert/ ) ) {
       // Post-payments monthly convert makes no sense if it's already recurring
       // Avoid things like T312905
       delete params.variant;
   }
   params.currency = frb.getCurrency(mw.centralNotice.data.country) || 'USD';
   params.uselang = mw.centralNotice.data.uselang || 'en';
   params.country = mw.centralNotice.data.country || 'XX';
   if ( params.uselang === 'pt' && params.country === 'BR' ) {
       params.uselang = 'pt-br';
   }
   if ( params.uselang === 'es' &&
       ( params.country === 'AR' || params.country === 'CL' ||
         params.country === 'CO' || params.country === 'MX' ||
         params.country === 'PE' || params.country === 'UY' ||
         params.country === 'US' )
   ) {
       params.uselang = 'es-419';
   }
   // dLocal override for South Africa
   if ( params.payment_method === 'cc' && params.country === 'ZA' ) {
       params.gateway = 'astropay';
   }
   // Amount
   var amount = frb.getAmount();
   if ( $('#frb-ptf-checkbox').prop('checked') ) {
       amount = amount + frb.calculateFee(amount);
       frb.extraData.ptf = 1;
   }
   params.amount = amount;
   // Email optin
   if ( frb.optinRequired && $('input[name="opt_in"]').length > 0 ) {
       var opt_inValue = $('input[name="opt_in"]:checked').val();
       params.opt_in   = opt_inValue; // frb.validateForm() already checked it's 1 or 0
   }
   // Tracking info
   if ( isEndowment || frb.isEndowment ) {
       params.utm_medium = 'endowment';
       params.appeal = 'EndowmentQuote';
   } else {
       params.utm_medium = 'sitenotice';
   }
   params.utm_campaign = mw.centralNotice.data.campaign || 'test';
   params.utm_source   = frb.buildUtmSource(params);
   frb.extraData.time = Math.round( (Date.now() - frb.loadedTime)/1000 );
   if ( !$.isEmptyObject( frb.extraData ) ) {
       params.utm_key = frb.buildUtmKey( frb.extraData );
   }
   // Link to Banner History if enabled
   var mixins = mw.centralNotice.getDataProperty( 'mixins' );
   if ( mixins && mixins.bannerHistoryLogger ) {
       params.bannerhistlog = mw.centralNotice.bannerHistoryLogger.id;
   }
   uri.extend(params);
   // Set a cookie with current location so we can return here from TY page
   mw.loader.using( [ 'mediawiki.cookie', 'mediawiki.util' ] ).then( function () {
       // Exclude URL parameters like banner, but cope with paths like /w/index.php?title=Foo
       var returnToUrl = window.location.origin + mw.util.getUrl();
       mw.cookie.set(
           'fundraising_returnTo',
           returnToUrl,
           { expires: 300, prefix: , domain: '.wikipedia.org', secure: true }
       );
   });
   if ( mixins && mixins.bannerHistoryLogger ) {
       mw.centralNotice.bannerHistoryLogger.ensureLogSent().always(function() {
           frb.goToPayments( uri );
       });
   } else {
       frb.goToPayments( uri );
   }

};

frb.goToPayments = function( uri ) {

   if ( window.top !== window.self ) {
       // banner is in a frame, open payments in a new tab
       window.open( uri.toString() );
   } else {
       window.location.href = uri.toString();
   }

};

/**

* Check the form for errors.
*
* Called on submission, can also be called on input
*
* @param {object} options
* @return {boolean} Whether form is error-free
*/

frb.validateForm = function( options ) {

   var error = false;
   /* Reset all errors */
   $('.frb-haserror').removeClass('frb-haserror');
   $('.frb-error').hide();
   if ( !options.method ) {
       error = true;
       $('.frb-methods').addClass('frb-haserror');
       $('.frb-error-method').show();
   }
   if ( !frb.validateAmount() ) {
       error = true;
   }
   /* Email optin */
   if ( frb.optinRequired && $('.frb-optin').is(':visible') ) {
       var opt_inValue = $('input[name="opt_in"]:checked').val();
       if ( opt_inValue !== '1' && opt_inValue !== '0' ) {
           $('.frb-optin').addClass('frb-haserror');
           $('.frb-error-optin').show();
           error = true;
       }
   }
   return !error;

};

/**

* Check if selected amount is valid i.e. a positive number, between minimum and maximum.
* If not, show an error and return false.
*/

frb.validateAmount = function() {

   var amount = frb.getAmount(),
       currency  = frb.getCurrency( mw.centralNotice.data.country ),
       minAmount = frb.amounts.minimums[ currency ],
       maxAmount = Math.round( frb.maxUSD * minAmount );
       // Math.round to account for floating point math errors: https://phabricator.wikimedia.org/T246262
   if ( amount === null || isNaN(amount) || amount <= 0 || amount < minAmount ) {
       $('fieldset.frb-amounts').addClass('frb-haserror');
       $('.frb-error-bigamount').hide();
       $('.frb-error-smallamount').show();
       return false;
   } else if ( amount > Math.round( maxAmount ) ) {
       $('fieldset.frb-amounts').addClass('frb-haserror');
       $('.frb-error-bigamount').show();
       return false;
   } else {
       $('fieldset.frb-amounts').removeClass('frb-haserror');
       $('.frb-error-smallamount, .frb-error-bigamount').hide();
       return true;
   }

};

/**

* Build the utm_source for analytics.
*
* Own function so it can be overriden for weird tests
*
* @param  {Object} params
* @return {string} utm_source
*/

frb.buildUtmSource = function(params) {

   var utm_source;
   var fullDottedPaymentMethod = params.payment_method;
   if ( params.recurring ) {
       fullDottedPaymentMethod = 'r' + fullDottedPaymentMethod;
   }
   if ( params.payment_submethod ) {
       fullDottedPaymentMethod = fullDottedPaymentMethod + '.' + params.payment_submethod;
   }
   utm_source = mw.centralNotice.data.banner;
   // Keeping opt-in in utm_source for safety for now
   // Eventually remove it, or move to utm_key?
   if ( params.opt_in ) {
       utm_source += '_optIn' + params.opt_in;
   }
   utm_source += '.no-LP.' + fullDottedPaymentMethod;
   return utm_source;

};

/**

* Build a string for utm_key from extra tracking data
*
* @param  {Object} data
* @return {string} utm_key
*/

frb.buildUtmKey = function(data) {

   var dataArray = [];
   for (var key in data) {
       if (data.hasOwnProperty(key)) {
           dataArray.push( key + '_' + data[key] );
       }
   }
   return dataArray.join('~');

};

/**

* Determine if we should show recurring choice on step 2
* 
* NOTE 2023-12-07: we don't currently use this for step 2, since there are no
*	banners where users select method before frequency. However it is used by
*	frb.shouldShowMonthlyConvert()
*
* @param  {Object} options     Including method and optional gateway
* @param  {String} country
* @return {boolean}
*/

frb.shouldShowRecurring = function( options, country ) {

   if ( frb.isEndowment ) {
       return false;
   }
   if ( frb.noRecurringCountries.indexOf( country ) !== -1 ) { // Defined in LocalizeJS-2017.js
       return false;
   }
   if ( options.method === undefined ) {
       return true; // Show if a method hasn't been selected yet
   }
   if ( [ 'cc', 'venmo', 'apple', 'google' ].indexOf( options.method ) !== -1 ) {
       return true;
   }
   if ( options.method === 'paypal' ) {
   	if ( [ 'AR', 'BR', 'CL', 'CO', 'MX', 'PE', 'UY' ].includes( country ) ) {
   		return false;
   	} else {
   		return true;
   	}
   }
   // Adyen iDEAL
   if ( options.submethod === 'rtbt_ideal' ) {
       return true;
   }
   if ( options.submethod === 'upi' || options.submethod === 'paytmwallet' ) {
       return true;
   }
   return false;

};

/* Is recurring method selected? This function can be overriden for different forms */ frb.getRecurring = function() {

   // Can't use simple form.frequency.value, doesn't work in IE
   var selected = $('#frb-form input[name="frequency"]:checked').val();
   return selected === 'monthly';

};

/* Return amount selected */ frb.getAmount = function() {

   var form = document.getElementById('frb-form');
   var amount = null;
   frb.extraData.otherAmt = 0;
   // If there are some amount radio buttons, then look for the checked one
   if (form.amount) {
       for (var i = 0; i < form.amount.length; i++) {
           if (form.amount[i].checked) {
               amount = form.amount[i].value;
           }
       }
   }
   // Check the "other" amount box
   if (form.otherAmount.value !== ) {
       var otherAmount = form.otherAmount.value;
       otherAmount = otherAmount.replace(/[,.](\d)$/, ':$10');
       otherAmount = otherAmount.replace(/[,.](\d)(\d)$/, ':$1$2');
       otherAmount = otherAmount.replace(/[$£€¥,.]/g, );
       otherAmount = otherAmount.replace(/:/, '.');
       amount = otherAmount;
       frb.extraData.otherAmt = 1;
   }
   amount = parseFloat(amount);
   if ( isNaN(amount) ) {
       return 0;
   } else {
       return amount;
   }

};

/* Localize the amount errors. Call when initialising banner. */ frb.localizeErrors = function() {

   var currency  = frb.getCurrency( mw.centralNotice.data.country ),
       language = mw.centralNotice.data.uselang,
       minAmount = frb.amounts.minimums[ currency ],
       maxAmount = Math.round( frb.maxUSD * minAmount );
       // Math.round to account for floating point math errors: https://phabricator.wikimedia.org/T246262
   $('.frb-error-smallamount').text( function( index, oldText ) {
       return oldText.replace( '$1', frb.formatCurrency(currency, minAmount, language)  );
   });
   $('.frb-error-bigamount').text( function( index, oldText ) {
       // We cannot accept donations greater than $1 $2 through our website. Please contact our major gifts staff at $3.
       return oldText.replace( '$1', maxAmount )
                     .replace( '$2', currency )
                     .replace( '$3', 'benefactors@wikimedia.org' );
   });

};

/**

* Shared code for amount input handling
*/

frb.initAmountOptions = function() {

   // Reset "Other" input if user clicks a preset amount
   $('#frb-form [id^=frb-amt-ps]').click(function() {
       $('#frb-amt-other-input').val();
   });
   // Track if they selected and then later changed amount
   var checkAmountChange = function(e) {
       if ( frb.didSelectAmount ) {
           frb.extraData.changedAmt = 1;
       }
       // check if amount radio button is selected OR there is a value in the other amount
       if ( $('.frb-amounts input[type="radio"]:checked').val() !== 'Other' || $('#frb-amt-other-input').val().length > 0 ) {
           frb.didSelectAmount = true;
       }
       return;
   };
   $('.frb-amounts input[type="radio"]').on('change', checkAmountChange);
   $('#frb-amt-other-input').on('focusout', checkAmountChange);
   // Block typing non-numerics in input field, otherwise Safari allows them and then chokes
   // https://phabricator.wikimedia.org/T118741, https://phabricator.wikimedia.org/T173431
   var blockNonNumeric = function(e) {
       // Allow special keys in Firefox
       if ((e.code == 'ArrowLeft') || (e.code == 'ArrowRight') ||
           (e.code == 'ArrowUp') || (e.code == 'ArrowDown') ||
           (e.code == 'Delete') || (e.code == 'Backspace')) {
           return;
       }
       var chr = String.fromCharCode(e.which);
       if ("0123456789., ".indexOf(chr) === -1) {
           return false;
       }
   };
   $('#frb-amt-other-input').on('keypress', blockNonNumeric);
   $('#frb-amt-monthly-other-input').on('keypress', blockNonNumeric);

};

/**

* Calculate approximate transaction fee on given amount
*
* @param  {number} amount
* @return {number}        Rounded to 2 decimal places
*/

frb.calculateFee = function(amount) {

   var currency = frb.getCurrency(mw.centralNotice.data.country),
       feeMultiplier = 0.04,
       feeMinimum = frb.amounts.feeMinimums[currency] || 0.35,
       feeAmount = amount * feeMultiplier;
   if ( feeAmount < feeMinimum ) {
     feeAmount = feeMinimum;
   }
   return parseFloat(feeAmount.toFixed(2));

};

frb.updateFeeDisplay = function() {

   var currency = frb.getCurrency(mw.centralNotice.data.country),
       language = mw.centralNotice.data.uselang,
       amount, feeAmount, totalAmount;
   amount = frb.getAmount();
   feeAmount = frb.calculateFee(amount);
   if ( $('#frb-ptf-checkbox').prop('checked') ) {
       totalAmount = amount + feeAmount;
   } else {
       totalAmount = amount;
   }
   var feeAmountFormatted = frb.formatCurrency(currency, feeAmount, language);
   $('.frb-ptf-fee').text(feeAmountFormatted);
   var totalAmountFormatted = frb.formatCurrency(currency, totalAmount, language);
   $('.frb-ptf-total').text(totalAmountFormatted);
   $('.frb-ptf').slideDown( frb.reduceMotion ? 0 : 400 );

};

/**

* Custom hide cookie function
*
* Purposely sets only for this domain.
* CentralNotice builtin method seems buggy - see T270401
*
* @param {string} reason Reason to store in the hide cookie
* @param {number} duration Cookie duration, in seconds
*/

frb.altSetHideCookie = function ( reason, duration ) {

   mw.loader.using( 'mediawiki.cookie' ).then( function () {
       var cookieName = 'centralnotice_hide_fundraising',
           date = new Date(),
           hideData = {
               v: 1,
               created: Math.floor( date.getTime() / 1000 ),
               reason: reason
           };
       // Re-use the same date object to set the cookie's expiry time
       date.setSeconds( date.getSeconds() + duration );
       mw.cookie.set(
           cookieName,
           JSON.stringify( hideData ),
           { expires: date, path: '/', domain: 'wikipedia.org', prefix:  }
       );
   });

};

/**

* Determine if banner should be shown, and set correct data for impression logging
*
* @return {boolean} Show banner?
*/

frb.shouldShowBanner = function() {

   mw.centralNotice.bannerData.hideResult = false;
   /* Hide in unsupported browsers */
   if ( !frb.supportedBrowser ) {
       mw.centralNotice.bannerData.hideResult = true;
       mw.centralNotice.bannerData.hideReason = 'browser';
   }
   /* Hide outside main namespace (except Main Page, for sites where it isn't in main namespace) */
   if ( mw.config.get('wgNamespaceNumber') > 0 && !mw.config.get('wgIsMainPage') ) {
       mw.centralNotice.bannerData.hideResult = true;
       mw.centralNotice.bannerData.hideReason = 'namespace';
   }
   // Hide banner on sensitive articles
   // TODO - possibly add wgWikibaseItemId for multilingual support and resilience to moves?
   var hideTitles = [ 'Murder of Don Banfield' ];
   if ( hideTitles.indexOf( mw.config.values.wgTitle ) !== -1 ) {
       mw.centralNotice.bannerData.hideResult = true;
       mw.centralNotice.bannerData.hideReason = 'article';
   }
   /* Hide banner if on wrong site (desktop/mobile) in case wrong device settings were chosen */
   var bannerName = mw.centralNotice.data.banner,
       skin = mw.config.get('skin');
   if (
        ( bannerName.indexOf('_dsk_') !== -1 && skin === 'minerva' ) ||
        ( bannerName.indexOf('_m_') !== -1 && skin !== 'minerva' )
   ) {
       mw.centralNotice.bannerData.hideResult = true;
       mw.centralNotice.bannerData.hideReason = 'other';
       console.warn('Hiding fundraising banner on wrong site (desktop/mobile)');
   }
   return !mw.centralNotice.bannerData.hideResult;

};

/* Debug function to highlight dynamically replaced elements */ frb.highlightReplacements = function() {

   $('.frb [class^="frb-replace"], .frb-ptf-fee, .frb-ptf-total, .frb-upsell-ask, frb-amt').css('background-color', '#fa0');

};

if ( !mw.centralNotice.adminUi ) { // T262693

   /**
    * Provides alterImpressionData hook for CentralNotice
    * This info will be sent back with Special:RecordImpression
    * TODO: check if/when we can remove this (and RecordImpression)
    */
   mediaWiki.centralNotice.bannerData.alterImpressionData = function( impressionData ) {
       // Returning true from this function indicates the banner was shown
       if (mediaWiki.centralNotice.bannerData.hideReason) {
           impressionData.reason = mediaWiki.centralNotice.bannerData.hideReason;
       }
       if (mediaWiki.centralNotice.bannerData.cookieCount) {
           impressionData.banner_count = mediaWiki.centralNotice.bannerData.cookieCount;
       }
       return !mediaWiki.centralNotice.bannerData.hideResult;
   };

}

/* End of MediaWiki:FundraisingBanners/CoreJS-2018.js */ /* jshint maxerr: 600 */ /* == MediaWiki:FundraisingBanners/LocalizeJS-2022.js == */

/**

* Get the currency for a given country
*
* NOTE: The following currency mapping is WMF-specific based on payment
* provider availability, NOT necessarily the official currency of the country
*
* @param  {string} country code
* @return {string} currency code
*/

frb.getCurrency = function(country) {

   switch ( country ) {
       // Big 6
       case 'US': return 'USD';
       case 'CA': return 'CAD';
       case 'AU': return 'AUD';
       case 'NZ': return 'NZD';
       case 'GB': return 'GBP';
       case 'IE': return 'EUR';
       // Euro countries
       case 'AT':
       case 'BE':
       case 'ES':
       case 'FR':
       case 'GR':
       case 'IE':
       case 'IT':
       case 'LU':
       case 'LV':
       case 'NL':
       case 'PT':
       case 'SK':
           return 'EUR';
       // Others
       case 'DK': return 'DKK';
       case 'HU': return 'HUF';
       case 'IL': return 'ILS';
       case 'IN': return 'INR';
       case 'JP': return 'JPY';
       case 'MY': return 'MYR';
       case 'NO': return 'NOK';
       case 'PL': return 'PLN';
       case 'CZ': return 'CZK';
       case 'RO': return 'RON';
       case 'SE': return 'SEK';
       case 'UA': return 'UAH';
       case 'ZA': return 'ZAR';
       // Latin America
       case 'BR': return 'BRL';
       case 'AR': return 'ARS';
       case 'CL': return 'CLP';
       case 'CO': return 'COP';
       case 'MX': return 'MXN';
       case 'PE': return 'PEN';
       case 'UY': return 'UYU';
       case 'CH': return 'CHF';
       case 'LI': return 'CHF';
       // Fall back to USD
       default:
           return 'USD';
   }

};

/**

* Format a currency value
*
* TODO: make this handle the ISO code overrides?
*
* @param  {string} currency code. Leave undefined to get without symbol.
* @param  {number} amount
* @param  {string} language code
* @return {string} formatted string e.g. '$3', '£5', '10 €'
*/

frb.formatCurrency = function(currency, amount, language) {

   var locale, formatterOptions, formatter, fmAmount, supportsIntl;
   if ( isNaN(amount) || amount ===  ) {
       // Not a number, it's probably the 'other' string or box
       // TODO: better way of doing this?
       fmAmount = amount;
   } else {
       // Check browser support
       try {
           supportsIntl = typeof window.Intl === 'object';
       } catch (e) {
           supportsIntl = false; // T265396
       }
       if ( supportsIntl ) {
           // Use Intl for fancy number formatting - thousands separators etc
           locale = language + '-' + mw.centralNotice.data.country;
           if ( amount % 1 !== 0 ) {
               formatterOptions = { minimumFractionDigits: 2 };
           } else {
               formatterOptions = {};
           }
           formatter = new Intl.NumberFormat(locale, formatterOptions);
       } else {
           // Bad browser i.e. IE. Just do the basics: 2 decimal places if needed, or none
           formatter = {};
           formatter.format = function(number) {
               if ( amount % 1 !== 0 ) {
                   return number.toFixed(2);
               } else {
                   return number.toString();
               }
           };
       }
       fmAmount = formatter.format(amount);
   }
   // No symbol needed
   if ( currency === undefined ) {
       return fmAmount;
   }
   // Better dive into the formatting object
   if ( frb.currencyFormats[currency] === undefined ) {
       return currency + ' ' + fmAmount;
   }
   if ( frb.currencyFormats[currency] instanceof Object ) { // not a string
       if ( frb.currencyFormats[currency][language] !== undefined ) {
           return frb.currencyFormats[currency][language].replace('\t', fmAmount);
       }
       return frb.currencyFormats[currency]['default'].replace('\t', fmAmount);
   }
   return frb.currencyFormats[currency].replace('\t', fmAmount);

};

/*

* Select the correct amount or array of amounts from object in "source"
*
* @param {Object} source   - the amounts data object e.g. frb.amounts.options7, frb.amounts.averages
* @param {string} currency - ISO code of currency
* @param {string} country  - ISO code of country (optional)
* @return {array/number}   - depending on source
*/

frb.pickAmounts = function(source, currency, country) {

   if ( source[currency]['default'] ) { // we need to go deeper
       if ( source[currency][country] !== undefined ) {
           return source[currency][country];
       } else {
           return source[currency]['default'];
       }
   } else {
       return source[currency];
   }

};

/* Credit card types so we can show the correct logos */ frb.cardTypes = {

   // Big 6
   'US' : 'vmad',
   'CA' : 'vma',
   'GB' : 'vmaj',
   'IE' : 'vmaj',
   'AU' : 'vmaj',
   'NZ' : 'vma',
   // Euro countries
   'AT' : 'vmaj',
   'BE' : 'vmaj',
   'ES' : 'vmaj',
   'FR' : 'vma',
   'GR' : 'vma',
   'IT' : 'vmaj',
   'LU' : 'vmaj',
   'LV' : 'vma',
   'NL' : 'vmaj',
   'PT' : 'vmaj',
   'SK' : 'vmaj',
   // Others
   'CZ' : 'vmad',
   'DK' : 'vma',
   'HU' : 'vma',
   'IL' : 'vmad',
   'JP' : 'vmaj',
   'MY' : 'vmaj',
   'NO' : 'vma',
   'PL' : 'vma',
   'RO' : 'vma',
   'SE' : 'vma',
   'UA' : 'vma',
   'ZA' : 'vm',
   'IN' : 'vmar', // dLocal - RuPay
   'CH' : 'vma',
   'LI' : 'vma'

};

/**

* Should we show Apple Pay?
*
* Note there is a ~500ms delay in Safari when checking, so only call this if needed
*
* @param  {string} country
* @return {boolean}
*/

frb.shouldShowApplePay = function ( country ) {

   // https://support.apple.com/en-us/HT207957 - minus China mainland
   var appleCountries = [
       'ZA',
       'AU', 'HK', 'JP', 'MO', 'NZ', 'SG', 'TW',
       'AM', 'AT', 'AZ', 'BY', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 
       'EE', 'FO', 'FI', 'FR', 'GE', 'DE', 'GR', 'GL', 'GG', 'HU', 
       'IS', 'IE', 'IM', 'IT', 'KZ', 'JE', 'LV', 'LI', 'LT', 'LU', 
       'MT', 'MC', 'ME', 'NL', 'NO', 'PL', 'PT', 'RO', 'RU', 'SM', 
       'RS', 'SK', 'SI', 'ES', 'SE', 'CH', 'UA', 'GB', 'VA', 
       'CO', 'CR', 'BR', 'MX', 
       'BH', 'IL', 'PS', 'QA', 'SA', 'AE', 
       'CA', 'US'
   ];
   if ( appleCountries.indexOf( country ) === -1 ) {
       return false;
   }
   if ( location.search.match('forceApplePay') ) {
       return true;
   }
   if ( window.ApplePaySession ) {
       if ( ApplePaySession.canMakePayments() ) {
           return true;
       }
   }
   return false;

};

/**

* Display the correct payment methods for current country
*
* Methods should be labeled with class 'frb-pm-xxxx'
* TODO: clean this function up more
*
* @param  {string} country
*/

frb.localizeMethods = function(country) {

   // Test country with *all the methods*
   if ( country === 'ZZ' ) {
       $('.frb-payment-options > div').show();
       return;
   }
   // Hide recurring completely for some countries and endowment
   if ( frb.isEndowment || frb.noRecurringCountries.indexOf(country) !== -1 ) {
       $('.frb-frequency, .recurring-details').hide();
   }
   // Remove any leftover WorldPay and Adyen
   $('.frb-pm-cc-wp').remove();
   $('.frb-pm-cc-adyen').remove();
   // Countries with no PayPal option
   var noPP = ['IN', 'RU', 'SG', 'AE', 'QA', 'OM', 'BD', 'BO', 'PA',
               'PY', 'GT', 'JM', 'TT', 'DZ'];
   if ($.inArray(country, noPP) !== -1) {
       $('.frb-pm-pp').remove();
       $('.frb-pm-pp-usd').remove();
   }
   // Countries with no PayPal for mobile only - https://phabricator.wikimedia.org/T173001
   var noPPmobile = ['PH', 'ID', 'TH', 'KR', 'MY', 'VN'];
   var mobileRegex = /(_mob_|_ipd_|_m_)/;
   if ($.inArray(country, noPPmobile) !== -1) {
       if (mw.centralNotice.data.banner.search(mobileRegex) !== -1) {
           $('.frb-pm-pp').remove();
           $('.frb-pm-pp-usd').remove();
       }
   }
   // Countries where PayPal must be in USD
   var ppUSD = ['BG', 'HR', 'LT', 'MK', 'RO', 'UA', 'SA', 'CN', 'ID', 'KR',
                'KZ', 'MY', 'VN', 'AR', 'CL', 'DO', 'CO', 'NI', 'UY', 'ZA',
                'BH', 'LB', 'VE', 'TR', 'IS', 'BA', 'MV', 'BB', 'BM', 'BZ',
                'CR', 'CW', 'SX', 'HN', 'KN', 'DM', 'AG', 'LC', 'GD', 'FJ',
                'TN', 'BJ', 'BF', 'CI', 'GW', 'ML', 'NE', 'SN', 'TG', 'BR',
                'PE'];
   if ($.inArray(country, ppUSD) !== -1) {
       $('.frb-pm-pp').remove();
       $('.frb-pm-pp-usd').show();
   } else {
       $('.frb-pm-pp').show();
       $('.frb-pm-pp-usd').remove();
   }
   // Show any extra local payment methods, or remove them if not needed
   var extrapaymentmethods = {
       'amazon'   : ['US'], // Note Amazon was removed from current best 2023-10-20
       'bpay'     : [],
       'ideal'    : ['NL'],
       'bt'       : ['BR', 'AR', 'CO', 'CL', 'PE', 'MX', 'IN', 'ZA', 'CZ'], // Bank Transfer (dLocal/Adyen)
       'cash'     : ['MX', 'AR', 'CO', 'CL', 'PE', 'UY'],  // 'Cash' methods (dLocal)
       'pix'      : ['BR'],
       'boleto'   : ['BR']
   };
   // Methods with different labels per country
   var language = mw.config.get('wgUserLanguage');
   var btTranslation = 'Bank Transfer';
   if (language === 'pt') {
       if (country === 'BR') {
           btTranslation = 'Transferência bancária';
       }
   } else if (language === 'es') {
       if (country === 'CL') {
           btTranslation = 'WebPay';
       } else if (country === 'CO') {
           btTranslation = 'PSE Pagos';
       } else {
           btTranslation = 'Transferencia bancaria';
       }
   }
   if (country === 'CZ') {
       if (language === 'en') {
           btTranslation = 'Online Banking';
       }
       if (language === 'cs') {
           btTranslation = 'Internetové Bankovnictví';
       }
   }
   $( '.frb-pm-bt button, .frb-pm-bt label, button.frb-pm-bt' ).text( btTranslation );
   for (var method in extrapaymentmethods) {
       var $methodbutton = $('.frb-pm-' + method);
       if ( $.inArray(country, extrapaymentmethods[method]) !== -1 && !frb.isEndowment ) {
           $methodbutton.show();
       } else {
           $methodbutton.remove();
       }
   }
   // Google Pay - separated from extrapaymentmethods as we want to show on Endowment too
   var googlePayCountries = [
       'AE', 'AT', 'AR', 'AU', 'BE', 'BG', 'BR', 'CA', 'CH', 'CL', 'CO',
       'CZ', 'DE', 'DK', 'EE', 'ES', 'FR', 'GB', 'GR', 'HK', 'HR',
       'HU', 'IE', 'IL', 'IT', 'JP', 'LU', 'LV', 'MX', 'MY', 'NL',
       'NO', 'NZ', 'OM', 'PE', 'PL', 'PT', 'QA', 'RO', 'RU', 'SA', 'SE',
       'SG', 'SK', 'TH', 'TR', 'TW', 'UA', 'US', 'UY', 'VN', 'ZA'
   ];
   if ( $.inArray(country, googlePayCountries) !== -1 ) {
       $('.frb-pm-google').show();
   } else {
       $('.frb-pm-google').remove();
   }
   // Apple Pay
   if ( $('.frb-pm-applepay').length > 0 ) {
       if ( !frb.shouldShowApplePay( country ) ) {
           $('.frb-pm-applepay').remove();
       }
   }

// Venmo var $venmo = $('.frb-pm-venmo'); if ( country === 'US' && $venmo.length > 0 ) { // From MediaWiki:FundraisingBanners/VenmoBrowserCheck.js if ( frb.isVenmoSupported() ) { $venmo.show(); } else { $venmo.remove(); } } else { $venmo.remove(); }

   /* Add card types class to credit card button, so we can show correct logos */
   if ( frb.cardTypes[country] ) {
       $('.frb-pm-cc').addClass('frb-cctypes-' + frb.cardTypes[country] );
   }

};

/**

* Check scheduled payment method outages and hide buttons if needed
*
* Data at https://meta.wikimedia.org/wiki/MediaWiki:FR2013/Resources/PaymentOutages.js
* Methods should be labeled with class 'frb-pm-xxxx'
*
* @param  {string} country code
*/

frb.checkMethodOutages = function(country) {

   // TODO - can we load this a better way?
   /* This file can be used to schedule hiding of individual payment methods from banners
* e.g. if they have scheduled downtime.
*
* Valid methods are:
*	ideal, cc, pp, amazon, bpay, webmoney, cash, pp-usd
* (most of the time it's 'ideal'...)
* Can also limit outage to a specific country with country: "XX" (where XX is an ISO code)
*
* Note that in JavaScript dates the months (and only the months) start at 0.
* Jan=0, Feb=1, Mar=2, Apr=3 etc. How hateful.
*
* Be sure to also update donatewiki if needed e.g. by commenting the method templates
* found at https://donate.wikimedia.org/wiki/Template:2012FR/Form-section/Paymentmethods
* 
*/

var outages = [

   {
       start:      new Date(Date.UTC(2016, 8, 18, 1)),
       end:        new Date(Date.UTC(2016, 8, 18, 7)),
       method:     "ideal"
   }

]; // jshint ignore:line

   var now = new Date();
   for (var i = outages.length - 1; i >= 0; i--) {
       if ( now > outages[i].start && now < outages[i].end ) {
           if (outages[i].country === undefined || outages[i].country == country) {
               $('.frb-pm-' + outages[i].method).hide();
           }
       }
   }

};

/**

* Adjust the amount options and their labels
*
* Inputs should have id frb-amt-psX where X is the index number (starting from 1)
*
* @param  {Object}  source     - object with amounts e.g. frb.amounts.options7
* @param  {string}  currency   - currency code e.g. 'USD'
* @param  {string}  country    - country code  e.g. 'FR' Some currencies can have different options per country.
* @param  {string}  language   - language code e.g. 'en' For symbol formatting
* @param  {boolean} useSymbols - use currency symbols on labels or not? (3 vs $3)
*/

frb.localizeAmountOptions = function(source, currency, country, language, useSymbols) {

   var amountOptions = frb.pickAmounts(source, currency, country);
   $('#frb-form input[name="amount"]').each(function(index) {
       var $input = $(this);
       var $label = $input.siblings('label');
       var i = $input.attr('id').replace('frb-amt-ps', );
       var amount = amountOptions[i-1]; // because IDs start from 1
       if ( amount ) {
           $input.val( amount );
           if ( useSymbols ) {
               $label.text( frb.formatCurrency( currency, amount, language) );
           } else {
               $label.text( frb.formatCurrency( undefined, amount, language) );
           }
       }
   });

};

/**

* Make an element into a link
*
* @param  {string} selector    CSS selector for elements to convert to a link
* @param  {string} language    Code of language (could be es-419 or pt-br)
* @param  {string} baseUrl     URL of link (function will add language parameter)
*/

frb.makeLink = function( selector, language, baseUrl ) {

   var url = baseUrl + '&language=' + language;
   $( selector ).each( function() {
       var $link = $( '<a></a>' );
       $link.html( $( this ).html() );
       $link.attr( { href: url, target: '_blank' } );
       $( this ).replaceWith( $link );
   });

};

/**

* Get the number of banners seen from localStorage
* @return {number} Number of banners seen
*/

frb.getSeenCount = function () {

   // Force with URL parameter 'impression'
   if ( typeof URLSearchParams === 'function' ) { // not available in old browsers
       var urlParams = new URLSearchParams( window.location.search );
       if ( urlParams.has( 'impression' ) ) {
           return urlParams.get( 'impression' );
       }
   }
   try {
       if ( localStorage ) {
           var identifier = mw.centralNotice.internal.state.campaign.mixins.impressionDiet.cookieName,
               lsName = 'CentralNoticeKV|global|impression_diet_' + identifier,
               diet = JSON.parse( localStorage.getItem( lsName ) );
           if ( diet ) {
               return diet.val.seenCount;
           }
       }
   } catch ( ex ) {
       // do nothing - localStorage is configured not to let us read it, or mixin not set
       return;
   }

};

/**

* Helper function to do text replacements and wrap them in correct class
* 
* @param  {RegExp} regex       Regular expression to replace
* @param  {string} replacement String to replace it with
*/

frb.textReplace = function( regex, replacement ) {

   $( '.frb' ).each( function( index ) {
       var newHtml = $( this ).html();
       newHtml = newHtml.replace( regex, '' + replacement + '' );
       $( this ).html( newHtml );
   });

};

/**

* Replace elements with preset ask string amounts
*
* e.g. class="frb-replace-amt-ps4" will be replaced with amount #4, currently $25 in the US
*
* @param  {string} currency - currency code e.g. 'USD'
* @param  {string} country  - country code  e.g. 'FR'
* @param  {string} language - language code e.g. 'en' For symbol formatting
*/

frb.replaceCustomAmounts = function( currency, country, language ) {

   var amountOptions = frb.pickAmounts( frb.amounts.options7, currency, country );
   // Old style element replacements
   $( '.frb [class^="frb-replace-amt-ps"]' ).each( function() {
       var i = $( this ).attr( 'class' ).replace( 'frb-replace-amt-ps',  ),
           amount = amountOptions[ i - 1 ],
           formattedAmount = frb.formatCurrency( currency, amount, language );
       $( this ).html( '<frb-amt>' + formattedAmount + '</frb-amt>' );
   });
   // Text replacements e.g. %amount-4%
   // There is probably a more efficient way to do this, but it's at least fairly simple
   for (var i = 0; i < amountOptions.length; i++) {
       var amount = amountOptions[i],
           formattedAmount,
           regex = new RegExp( '%amount-' + (i+1) + '%', 'gi' );
       if ( frb.textAmountIsoCountries.includes( country ) ) {
           formattedAmount = frb.formatCurrency( undefined, amount, language ) + ' ' + currency;
       } else {
           formattedAmount = frb.formatCurrency( currency, amount, language );
       }
       frb.textReplace( regex, formattedAmount );
   }

};

/**

* Get today's date like "December 3" - English only for now
* 
* @return {string} Today's date as a string
*/

frb.getDateString = function() {

   var date = new Date(),
       locale = mw.centralNotice.data.uselang + '-' + mw.centralNotice.data.country;
   return date.toLocaleString( locale, { day: 'numeric', month: 'long' } );

};

frb.noRecurringCountries = ['AR'];

/* These countries use potentially ambiguous $ sign. Use ISO code instead in text (but still $ for buttons) */ frb.textAmountIsoCountries = ['AR', 'CL', 'CO', 'MX'];

$(function() {

   if ( mw.centralNotice.adminUi ) { // T262693
       return;
   }
   var language = mw.centralNotice.data.uselang;
   var variantLanguage; // for pt-br and es-419, note we can only use these for certain links
   var country  = mw.centralNotice.data.country;
   var currency = frb.getCurrency(country);
   if ( language === 'pt' && country === 'BR' ) {
       variantLanguage = 'pt-br';
   } else if ( language === 'es' && ['AR', 'CL', 'CO', 'PE', 'MX', 'UY'].indexOf( country ) !== -1 ) {
       variantLanguage = 'es-419';
   } else {
       variantLanguage = language;
   }
   // Payment methods
   frb.localizeMethods(country);
   frb.checkMethodOutages(country);
   // Preset amounts
   frb.replaceCustomAmounts( currency, country, language );
   // Basic replacements
   $('.frb-replace-currencysymbol').text( frb.formatCurrency( currency, , language ).replace(' ', ) );
   $('.frb-replace-currencycode').text( currency );
   // Country name
   var countryName;
   if ( frb.countryNames[language] ) {
       countryName = frb.countryNames[language][country] || frb.countryNames.en[country];
   } else {
       countryName = frb.countryNames.en[country];
   }
   $( '.frb-replace-countryname' ).text( countryName );
   frb.textReplace( /%country%/gi, countryName );
   // "in COUNTRY" or equivalent
   var inCountryName;
   if ( frb.inCountryNames[language] ) {
       inCountryName = frb.inCountryNames[language][country] || frb.inCountryNames.en[country];
   } else {
       inCountryName = frb.inCountryNames.en[country];
   }
   $( '.frb-replace-incountryname' ).text( inCountryName );
   frb.textReplace( /%in-country%/gi, inCountryName );
   // Day of week
   // TODO: Replace these with date.toLocaleString so we can drop frb.dayNames? 
   //       Might still need some ways to deal with "this" and capitalization
   var now = new Date();
   var dayNumber = now.getDay();
   var capitalizeText = function( text ) {
       // Capitalize first letter, for use at start of sentence
       return text.charAt(0).toUpperCase() + text.slice(1);
   };
   if ( $('.frb-replace-dayofweek, .frb-replace-dayofweek-capitalize').length > 0 ) {
       if ( frb.dayNames[language] ) {
           $('.frb-replace-dayofweek').text( frb.dayNames[language][dayNumber] );
           $('.frb-replace-dayofweek-capitalize').text( capitalizeText( frb.dayNames[language][dayNumber] ) );
       } else {
           console.log('Warning: banner should contain a day of the week, but no translations found.');
       }
   }
   if ( $('.frb-replace-dayofweek-this, .frb-replace-dayofweek-this-capitalize').length > 0 ) {
       if ( frb.dayNamesThis[language] ) {
           $('.frb-replace-dayofweek-this').text( frb.dayNamesThis[language][dayNumber] );
           $('.frb-replace-dayofweek-this-capitalize').text( capitalizeText( frb.dayNamesThis[language][dayNumber] ) );
       } else {
           console.log('Warning: banner should contain "this DAY", but no translations found.');
       }
   }
   // Simple %weekday% text replacement
   try {
       if ( frb.dayNames[language] ) {
           frb.textReplace( /%weekday%/gi, frb.dayNames[language][dayNumber] );
       } else {
           frb.textReplace( /%weekday%/gi, frb.dayNames['en'][dayNumber] );
       }
   } catch ( error ) {
       console.error( error );
   }
   // Replace %date% with today's date e.g. "December 3"
   try {
       frb.textReplace( /%date%/gi, frb.getDateString() );
   } catch ( error ) {
   	console.log( error );
   }
   // Capitalize
   $('.frb-capitalize').text(function( index, text ) {
       return text.charAt(0).toUpperCase() + text.slice(1);
   });
   // Replace %average%, %minimum% and %amount%
   var average = frb.pickAmounts( frb.amounts.averages, currency, country ),
       ifEveryone = frb.pickAmounts( frb.amounts.ifEveryone, currency, country ),
       avgString,
       ifString;
   if ( frb.textAmountIsoCountries.indexOf(country) !== -1 ) {
       avgString = frb.formatCurrency( undefined, average, language ) + ' ' + currency;
       ifString  = frb.formatCurrency( undefined, ifEveryone, language ) + ' ' + currency;
   } else {
       avgString = frb.formatCurrency( currency, average, language ).replace( /\.$/,  ); // strip any period from end for use in running text
       ifString  = frb.formatCurrency( currency, ifEveryone, language ).replace( /\.$/,  );
   }
   frb.textReplace( /%average%/gi, avgString );
   frb.textReplace( /%minimum%/gi, ifString );
   frb.textReplace( /%amount%/gi,  ifString );
   /**
    * Call a function on every text node contained by a root node.
    *
    * Used so we can do text replacements without accidentally clobbering html and scripts
    *
    * @param  {Node}     rootNode The Node object whose descendants will be recursed through
    * @param  {Function} callback Callback function that receives a Node as its only argument
    */
   function eachTextNode( rootNode, callback ) {
       for ( var node = rootNode.firstChild; node !== null; node = node.nextSibling ) {
           if ( node.nodeType === Node.TEXT_NODE ) {
               callback( node );
           } else if ( node.nodeType === Node.ELEMENT_NODE ) {
               eachTextNode( node, callback );
           }
       }
   }
   // French spacing: replace space before punctuation with  
   if ( language === 'fr' ) {
       var bannerRootElements = document.getElementsByClassName( 'frb' );
       for ( var i = 0; i < bannerRootElements.length; i++ ) {
           eachTextNode( bannerRootElements[i], function( node ) {
               node.textContent = node.textContent.replace( / ([!?;:%])/g, '\u00a0$1' );
           });
       }
   }
   // Links (in smallprint) TODO: merge with frb.makeLink()
   $('.frb-localize-links a').each(function() {
       // Add parameters for LandingCheck
       var uri = new mw.Uri( $(this).attr('href') );
       uri.extend({
           country:      country,
           language:     variantLanguage,
           uselang:      variantLanguage,
           utm_medium:   'sitenotice',
           utm_campaign: mw.centralNotice.data.campaign || 'test',
           utm_source:   mw.centralNotice.data.banner
       });
       $(this).attr('href', uri.toString());
       $(this).attr('target', '_blank'); // Make links open in new tab
   });
   // Add links
   frb.makeLink( '.frb-link-privacy', variantLanguage, 'https://foundation.wikimedia.org/wiki/Special:LandingCheck?basic=true&landing_page=Donor_privacy_policy' );
   frb.makeLink( '.frb-link-tax',     variantLanguage, 'https://donate.wikimedia.org/wiki/Special:LandingCheck?basic=true&landing_page=Tax_deductibility' );
   frb.makeLink( '.frb-link-cancel',  variantLanguage, 'https://donate.wikimedia.org/wiki/Special:LandingCheck?basic=true&landing_page=Cancel_or_change_recurring_giving' );
   // Legal text variants
   if (country === 'US') {
       $('.frb-legal-US').show();
       $('.frb-legal-nonUS, .frb-legal-NL').hide();
   } else if (country === 'NL') {
       $('.frb-legal-NL').show();
       $('.frb-legal-US, .frb-legal-nonUS').hide();
   } else {
       $('.frb-legal-nonUS').show();
       $('.frb-legal-US, .frb-legal-NL').hide();
   }
   // Quick hack for American/British/Commonwealth English differences
   if ( country === 'US' ) {
       $('.frb-lang-enUS').show();
       $('.frb-lang-en5C').hide();
   } else {
       $('.frb-lang-enUS').hide();
       $('.frb-lang-en5C').show();
   }
   // Add this so they get white-space: nowrap from CSS
   $('.frb-ptf-fee, .frb-ptf-total, .frb-upsell-ask').addClass('frb-replaced');
   // Where Remind Me Later should be shown
   var rmlCountries = ['US', 'CA', 'GB', 'IE', 'AU', 'NZ',
                       'IN', 'FR', 'NL', 'BR', 'CL', 'CO', 'MX', 'PE', 'UY'];
   var rmlLanguages = ['en', 'nl', 'ja', 'it', 'sv', 'pt', 'cs', 'es'];
   var rmlEnabled = !frb.isEndowment && rmlCountries.indexOf(country) !== -1 && rmlLanguages.indexOf(language) !== -1;
   if ( rmlEnabled ) {
       $('.frb').addClass('frb-rml-enabled');
   } else {
       $('.frb').addClass('frb-rml-disabled');
   }

});

/* == end of MediaWiki:FundraisingBanners/LocalizeJS-2022.js == */ /* eslint-env es6 */ var frb = frb || {};

/* Based on github:braintree/braintree-web/src/venmo/shared/supports-venmo.js */ frb.isVenmoSupported = function(options) {

 var options = options || {
   allowNewBrowserTab: false,
   allowWebviews: true,
   allowDesktop: true,
   allowDesktopWebLogin: true
 };
 var ua = window.navigator.userAgent;
 var merchantAllowsReturningToNewBrowserTab,
   merchantAllowsWebviews,
   merchantAllowsDesktopBrowsers;
 var isMobileDevice = isAndroid() || isIos();
 var isAndroidChrome = isAndroid() && isChrome();
 var isMobileDeviceThatSupportsReturnToSameTab = isIosSafari() || isAndroidChrome;
 var isKnownUnsupportedMobileBrowser = isIosChrome() || isFacebookOwnedBrowserOnAndroid() || isSamsung();
 options = options || {};
 // NEXT_MAJOR_VERSION allowDesktop will default to true, but can be opted out
 merchantAllowsDesktopBrowsers =
   (options.allowDesktopWebLogin || options.allowDesktop) === true;
 merchantAllowsReturningToNewBrowserTab = options.hasOwnProperty(
   "allowNewBrowserTab"
 )
   ? options.allowNewBrowserTab
   : true;
 // NEXT_MAJOR_VERSION webviews are not supported, except for the case where
 // the merchant themselves is presenting venmo in a webview using the deep
 // link url to get back to their app. For the next major version, we should
 // just not have this option and instead require the merchant to determine
 // if the venmo button should be displayed when presenting it in the
 // merchant's app via a webview.
 merchantAllowsWebviews = options.hasOwnProperty("allowWebviews")
   ? options.allowWebviews
   : true;
 if (isKnownUnsupportedMobileBrowser) {
   return false;
 }
 if (
   !merchantAllowsWebviews &&
   (isAndroidWebview() || isIosWebview())
 ) {
   return false;
 }
 if (!isMobileDevice) {
   return merchantAllowsDesktopBrowsers;
 }
 if (!merchantAllowsReturningToNewBrowserTab) {
   return isMobileDeviceThatSupportsReturnToSameTab;
 }
 return isMobileDevice;
 /* -- functions mostly from github:braintree/browser-detection library -- */
 function isAndroid() {
   return /Android/i.test(ua);
 }
 function isIos(checkIpadOS = true) {
   const iOsTest = /iPhone|iPod|iPad/i.test(ua);
   return checkIpadOS ? iOsTest || isIpadOS() : iOsTest;
 }
 function isIpadOS() {
   // "ontouchend" is used to determine if a browser is on an iPad, otherwise
   // user-agents for iPadOS behave/identify as a desktop browser
   return /Mac|iPad/i.test(ua) && "ontouchend" in window.document;
 }
 function isEdge() {
   return ua.indexOf("Edge/") !== -1 || ua.indexOf("Edg/") !== -1;
 }
 function isSamsung() {
   return /SamsungBrowser/i.test(ua);
 }
 function isDuckDuckGo() {
   return ua.indexOf("DuckDuckGo/") !== -1;
 }
 function isOpera() {
   return (
     ua.indexOf("OPR/") !== -1 ||
     ua.indexOf("Opera/") !== -1 ||
     ua.indexOf("OPT/") !== -1
   );
 }
 function isSilk() {
   return ua.indexOf("Silk/") !== -1;
 }
 function isChrome() {
   return (
     (ua.indexOf("Chrome") !== -1 || ua.indexOf("CriOS") !== -1) &&
     !isEdge() &&
     !isSamsung() &&
     !isDuckDuckGo() &&
     !isOpera() &&
     !isSilk()
   );
 }
 function isIosFirefox() {
   return /FxiOS/i.test(ua);
 }
 function isWebkit() {
   const webkitRegexp = /webkit/i;
   return webkitRegexp.test(ua);
 }
 function isIosChrome() {
   return ua.indexOf("CriOS") > -1;
 }
 function isFacebook() {
   return ua.indexOf("FBAN") > -1;
 }
 function isIosSafari() {
   return (
     isIos() &&
     isWebkit() &&
     !isIosChrome() &&
     !isIosFirefox() &&
     !isFacebook()
   );
 }
 function isFacebookOwnedBrowserOnAndroid() {
   var e = ua.toLowerCase();
   return -1 < e.indexOf("huawei") && -1 < e.indexOf("fban") || isAndroid() && (-1 < e.indexOf("fb_iab") || -1 < e.indexOf("instagram"));
 }
 function isSamsungBrowser() {
   return /SamsungBrowser/i.test(ua);
 }
 function isAndroidWebview() {
   return isAndroid() && -1 < ua.toLowerCase().indexOf("wv");
 }
 function isGoogleSearchApp() {
   return /\bGSA\b/.test(ua);
 }
 function isIosGoogleSearchApp() {
   return isIos() && isGoogleSearchApp();
 }
 function isIosWebview() {
   if (isIos()) {
     // The Google Search iOS app is technically a webview and doesn't support popups.
     if (isIosGoogleSearchApp()) {
       return true;
     }
     // Historically, a webview could be identified by the presence of AppleWebKit and _no_ presence of Safari after.
     return /.+AppleWebKit(?!.*Safari)/i.test(ua);
   }
   return false;
 }

};

frb.HIDE_DURATION_CLOSE = 604800; // 1 week frb.HIDE_DURATION_RML = 604800; // 1 week frb.HIDE_DURATION_CLOSENAG = 86400; // 1 day

frb.storedOptions = {}; frb.fadeDuration = frb.reduceMotion ? 0 : 200;

/* Hide banner and nag, and remove related event handlers */ frb.hide = function() {

   $('#centralNotice, .frb').hide();
   $(window).off('.frb');

};

frb.toggleMonthly = function( monthly ) {

   if ( monthly.type === 'checkbox' ) {
       monthly = monthly.checked;
   }
   if ( monthly ) {
       $('#frb-frequency-monthly').prop('checked', true);
       $('#frb-monthly-checkbox').prop('checked', true);
       $('.no-monthly input').attr('disabled', true);
       $('#frb-form').addClass('form-monthly');
       if ( $('.form-monthly .no-monthly input[type=radio]').is(':checked') ) {
           $('.form-monthly .no-monthly input[type=radio]').removeAttr('checked');
           frb.setMethod({});
       }
   } else {
       $('#frb-frequency-onetime').prop('checked', true);
       $('#frb-monthly-checkbox').prop('checked', false);
       $('.no-monthly input').attr('disabled', false);
       $('#frb-form').removeClass('form-monthly');
   }

};

frb.rml = {

   post: function() {
       /* Create the iframe for the form and use it as the form's target */
       var frameName = 'remindFrame';
       var $form = $('#frb-rml-form');
       if ( $("iframe[name=" + frameName + "]").length === 0 ) {
           var $iframe = $('<iframe style="display: none;" name="' + frameName + '"></iframe>');
           $form.attr('target', $iframe.attr('name'));
           $form.after($iframe);
       }
       $form[0].submit();
   },
   getCurrentDate: function() {
       /* Get current date in correct format for Silverpop */
       var today = new Date();
       var dd = today.getDate();
       var mm = today.getMonth()+1; // January is 0!
       var yyyy = today.getFullYear();
       if( dd < 10 ) {
           dd = '0' + dd;
       }
       if( mm < 10 ) {
           mm = '0' + mm;
       }
       return mm+'/'+dd+'/'+yyyy;
   },
   init: function() {
       /* Prep the reminder form */
       var form = document.getElementById('frb-rml-form'),
           rmlDialog = document.getElementById('frb-dialog-rml');
       form.rml_country.value    = mw.centralNotice.data.country;
       form.rml_language.value   = mw.centralNotice.data.uselang;
       form.rml_submitDate.value = frb.rml.getCurrentDate();
       form.rml_segment.value    = Math.floor((Math.random() * 100) + 1);
       $('#frb-inline .frb-rml-link').on( 'click', function(e) {
           rmlDialog.showModal();
           form.rml_source.value = mw.centralNotice.data.banner;
           return false;
       });
       $('#frb-nag .frb-rml-link').on( 'click', function(e) {
           rmlDialog.showModal();
           form.rml_source.value = mw.centralNotice.data.banner + '_nag';
           return false;
       });
       $('#frb-dialog-rml .frb-dialog-close').on('click', function (e) {
           rmlDialog.close();
       });
       rmlDialog.addEventListener( 'click', frb.closeOnClickOutside );
       $('#frb-rml-submit').click(function() {
           if ( mw.util.validateEmail( form.Email.value ) ) {
               frb.rml.post();
               $('#frb-rml-form').hide();
               $('.frb-rml-ty').show();
               window.setTimeout( function() {
                   rmlDialog.close();
                   frb.hide();
               }, 2500);
               frb.altSetHideCookie( 'close', frb.HIDE_DURATION_RML );
               return false;
           } else {
               $('#frb-rml-email').addClass('frb-haserror').focus();
               $('.frb-error-invalidemail').show();
               return false;
           }
       });
   }

};

frb.initNag = function () {

   /* --- Code for sticky "nag" banner --- */
   $(window).scroll(function () {
       // Check if element exists on scroll: important after email has been submitted in RML nag
       if ($('#frb-inline').length) {
           var nagRevealPosition = $('#frb-inline').offset().top + $('#frb-inline').outerHeight();
           if ( $(window).scrollTop() <= nagRevealPosition ) {
               $('#frb-nag').finish();
               $('#frb-nag').removeClass('reveal');
           } else {
               setTimeout(function () {
                   if (!$('#frb-nag').hasClass('reveal') && $(window).scrollTop() > nagRevealPosition) {
                       $('#frb-nag').addClass('reveal');
                   }
               }, 500);
           }
       }
   });
   $('.frb-nag-close').on('click', function (e) {
       frb.altSetHideCookie( 'close', frb.HIDE_DURATION_CLOSENAG );
       frb.showSidebarTooltip();
       $('#frb-nag').remove();
       return false;
   });
   $('#frb-nag').click(function () {
       frb.extraData.clickedNag = 1;
   });
   $('#frb-nag').show();

};

frb.insertMainBanner = function () {

   $('#centralNotice').insertBefore( $('#mw-content-text') );
   var $mainBanner = $('#frb-inline');
   $mainBanner.show().addClass('frb-country-' + mw.centralNotice.data.country);

};

frb.showSidebarTooltip = function () {

   mw.loader.using( [ 'oojs-ui-core', 'mediawiki.Uri' ] ).done( function () {
       let menuPinned;
       if ( mw.config.get('skin') === 'vector-2022' ) {
           menuPinned = $('#vector-main-menu-pinned-container > #vector-main-menu').length > 0;
       } else {
           menuPinned = true; // sidebar always visible on Legacy Vector
       }
       let $donateLink = $( '#n-sitesupport a' );
       $donateLink.attr( 'href', ( i, oldUrl ) => {
           let uri = new mw.Uri( oldUrl );
           uri.query.utm_source = 'tooltipOnBannerClose';
           return uri.toString();
       });
       let popup = new OO.ui.PopupWidget( {

$content: $( '

{{{FR2015_translations,sidebar-donate-callout/pt-br}}}

' ),

           padded: true,
           autoclose: true,
           align: 'forwards',
           autoFlip: false,
           $floatableContainer: menuPinned ? $donateLink : $( '#vector-main-menu-dropdown' ),
           position: menuPinned ? 'after' : 'below',
       } );
       popup.$element.css('z-index', 5); // Fix so it shows above header
       $( document.body ).append( popup.$element );
       popup.toggle( true );
       setTimeout( () => {
           popup.$element.fadeOut( frb.fadeDuration );
       }, 5000 );
   } );

};

/* Helper function to close dialog if clicked outside */ frb.closeOnClickOutside = function(e) {

   if ( e.target.tagName !== 'DIALOG' ) {
       return false;
   }
   let rect = e.target.getBoundingClientRect();
   if ( e.clientY < rect.top || e.clientY > rect.bottom || e.clientX < rect.left || e.clientX > rect.right ) {
       e.target.close();
   }

}

$(function () {

   if ( mw.centralNotice.adminUi || !frb.supportedBrowser ) { // T262693
       return;
   }
   var language = mw.centralNotice.data.uselang;
   var country  = mw.centralNotice.data.country;
   var currency = frb.getCurrency(country);
   var validAmount, validMethod, validStayInTouch;
   if ( !frb.optinRequired ) {
       validStayInTouch = 1;
   }
   var form = document.getElementById('frb-form');
   frb.extraData = {};
   mw.loader.using(['mediawiki.util']).then(function() {
       frb.rml.init();
   });
   frb.initAmountOptions();
   frb.localizeAmountOptions(frb.amounts.options7, currency, country, language, true);
   frb.localizeErrors();
   // Override
   frb.updateFeeDisplay = function() {
       var currency = frb.getCurrency(mw.centralNotice.data.country),
           language = mw.centralNotice.data.uselang,
           amount, feeAmount, totalAmount;
       amount = frb.getAmount();
       feeAmount = frb.calculateFee(amount);
       if ( $('#frb-ptf-checkbox').prop('checked') ) {
           totalAmount = amount + feeAmount;
       } else {
           totalAmount = amount;
       }
       var feeAmountFormatted = frb.formatCurrency(currency, feeAmount, language);
       $('.frb-ptf-fee').text(feeAmountFormatted);
       var totalAmountFormatted = frb.formatCurrency(currency, totalAmount, language);
       $('.frb-ptf-total').text(totalAmountFormatted);
       if ( validAmount && validMethod ) {
           $('.frb-ptf').slideDown( frb.reduceMotion ? 0 : 400 );
       }
   };
   frb.activateCTA = function () {
       if (validAmount && validMethod && validStayInTouch) {
           $('.frb-submit-txt-continue').hide();
           $('.frb-submit-txt-donate').show();
           $('.frb-submit').addClass('active');
       } else {
           $('.frb-submit:not(#frb-btn-first-submit)').removeClass('active');
       }
   };
   $('.frb-amounts').on('input change', function () {
       frb.validateAmount();
       validAmount = 1;
       frb.updateFeeDisplay();
       frb.activateCTA();
   });
   frb.setMethod = function (options, frequency) {
       frb.storedOptions = options;
       if( frequency === 'no-monthly' ) {
           $('#frb-frequency-monthly').attr('disabled', true);
       } else {
           $('#frb-frequency-monthly').attr('disabled', false);
       }
       validMethod = 1;
       frb.updateFeeDisplay();
       frb.activateCTA();
   };
   $('.frb-optin').on('input change', function () {
       validStayInTouch = 1;
       frb.activateCTA();
   });
   frb.getMonthlyAmount = function () {
       var form = document.getElementById('frb-form');
       var amount = null;
       // Check the "monthly other" amount box
       if (form.otherMonthlyAmount.value !== ) {
           var otherMonthlyAmount = form.otherMonthlyAmount.value;
           otherMonthlyAmount = otherMonthlyAmount.replace(/[,.](\d)$/, ':$10');
           otherMonthlyAmount = otherMonthlyAmount.replace(/[,.](\d)(\d)$/, ':$1$2');
           otherMonthlyAmount = otherMonthlyAmount.replace(/[$£€¥,.]/g, );
           otherMonthlyAmount = otherMonthlyAmount.replace(/:/, '.');
           amount = otherMonthlyAmount;
       }
       amount = parseFloat(amount);
       if (isNaN(amount)) {
           return 0;
       } else {
           var totalMonthlyAmountFormatted = frb.formatCurrency(currency, amount, language);
           $('.frb-monthly-total').text(totalMonthlyAmountFormatted);
           return amount;
       }
   };
   frb.validateMonthlyAmount = function () {
       var amount = frb.getMonthlyAmount();
       var currency = frb.getCurrency( mw.centralNotice.data.country );
       var minAmount = frb.amounts.minimums[ currency ];
       if ( amount === null || isNaN(amount) || amount <= 0 || amount < minAmount ) {
           $('.frb-error-bigamount').hide();
           $('.frb-error-smallamount').show();
           return false;
       } else if ( amount > frb.maxUSD * minAmount ) {
           $('.frb-error-bigamount').show();
           return false;
       } else {
           $('.frb-error-smallamount, .frb-error-bigamount').hide();
           return true;
       }
   };
   frb.submitMonthly = function() {
       frb.extraData.monthlyUpsell = 1;
       frb.extraData.originalAmt = frb.getAmount().toString();
       frb.toggleMonthly(true);
       document.getElementById('frb-amt-other').checked = true;
       document.getElementById('frb-ptf-checkbox').checked = false;
       form.otherAmount.value = form.otherMonthlyAmount.value;
       frb.submitForm(frb.storedOptions);
   };
   /**
    * Should we show pre-payment monthly convert?
    *
    * Only if: initial selection is one-time, suggested amount is not 0 (meaning skip),
    * payment method supports monthly, and payment method does not have post-payments monthly convert
    *
    * @returns boolean
    */
   frb.shouldShowMonthlyConvert = function() {
       let postPaymentMethods = [ 'cc', 'apple', 'google' ];
       if (
           frb.getRecurring( document.getElementById( 'frb-form' ) ) ||
           !frb.shouldShowRecurring( frb.storedOptions, mw.centralNotice.data.country ) ||
           form.otherMonthlyAmount.value == 0 ||
           postPaymentMethods.includes( frb.storedOptions.method )
       ) {
           return false;
       } else {
           return true;
       }
   }
   // Close inline banner on click or return
   $('.frb-inline-close').on('click', function (e) {
       frb.hide();
       frb.altSetHideCookie( 'close', frb.HIDE_DURATION_CLOSE );
       frb.showSidebarTooltip();
       e.stopPropagation();
   });
   $('.frb-amt-other').click(function () {
       document.getElementById('frb-amt-other').checked = true;
       frb.updateFeeDisplay();
       $('#frb-amt-other-input').focus();
   });
   // Activate #input_amount_other radio when tabbing into #frb-amt-other-input
   $('#frb-amt-other-input').focus(function () {
       document.getElementById('frb-amt-other').checked = true;
       frb.updateFeeDisplay();
   });
   frb.updateUpsellAsk = function(isOtherAmountStep) {
       var amount, feeAmount, upsellAmount,
           list = frb.amounts.monthlySuggest[currency];
       if ( list === undefined ) {
           console.log('No monthlySuggest amounts found for ' + currency);
           return;
       }
       // If user is on third step (write a different amount) then get monthly amount if not, the the first form amount
       if (isOtherAmountStep !== undefined) {
           amount = frb.getMonthlyAmount();
       } else {
           amount = frb.getAmount(form);
       }
       // If PTF is checked when we need to calculate the fee for that amount
       if ( $('#frb-ptf-checkbox').prop('checked') ) {
           amount = amount + frb.calculateFee(amount);
       }
       for (var i = list.length - 1; i >= 0; i--) {
           if ( amount <= list[i][0] ) {
               upsellAmount = list[i][1];
           }
       }
       // If user is in the upsell (second step) then the form.otherMonthlyAmount.value will be updated with the upsellAmount calculated
       if (isOtherAmountStep === undefined) {
           form.otherMonthlyAmount.value = upsellAmount;
       }
       // A formatted value will be returned
       var upsellAmountFormatted = frb.formatCurrency(currency, upsellAmount, language);
       // The value of the amount will be updated only if the user is in the upsell (second step)
       if (isOtherAmountStep === undefined) {
           $('.frb-upsell-ask').text(upsellAmountFormatted);
       }
   };
   // Opt-in requred for certain countries, defined in CoreJS
   if ( frb.optinRequired ) {
       $('.frb-optin').show();
   }
   // Opt-in interaction
   $('.frb-optin').on('change', function() {
       frb.validStayInTouch = 1;
       $('.frb-optin').removeClass('frb-haserror');
       $('.frb-error-optin').hide();
       if ( $('#frb-optin-no').is(':checked') ) {
           $('.frb-optin-no-prompt').removeClass('is-positive');
           $('.frb-optin-no-prompt').slideDown( frb.reduceMotion ? 0 : 400 );
       } else {
           $('.frb-optin-no-prompt').addClass('is-positive');
       }
   });
   // Go to the next step of the form
   $('#frb-btn-first-submit').on('click', function (e) {
       e.preventDefault();
       if ( frb.validateForm( frb.storedOptions ) ) {
           frb.updateUpsellAsk();
           if ( frb.shouldShowMonthlyConvert() ) {
               $('.frb-step-2').fadeOut( frb.fadeDuration, function () {
                   $('.frb-step-upsell').fadeIn( frb.fadeDuration, function() {
                       $('html, body').animate( {
                           scrollTop: Math.min( window.scrollY, $('.frb-step-upsell').offset().top - 50 ) // account for sticky header
                       }, frb.fadeDuration );
                   });
               });
           } else {
               frb.submitForm(frb.storedOptions);
           }
       } else {
           frb.extraData.validateError = 1;
       }
   });
   /* Back buttons */
   $('.frb-step-upsell .frb-back').on('click', function (e) {
       $('.frb-step-upsell').fadeOut( frb.fadeDuration, function() {
           $('.frb-step-2').fadeIn( frb.fadeDuration );
       });
       return false;
   });
   $('.frb-step-monthly-diff-amt .frb-back').on('click', function (e) {
       $('.frb-step-monthly-diff-amt').fadeOut( frb.fadeDuration, function() {
           form.otherMonthlyAmount.value = ;
           frb.updateUpsellAsk();
           validAmount = 1;
           frb.activateCTA();
           frb.toggleMonthly(false);
           $('.frb-step-upsell').fadeIn( frb.fadeDuration );
       });
       return false;
   });
   // Donate monthly other amount
   $('.frb-monthly-diff-amt-link').on('click', function (e) {
       form.otherMonthlyAmount.value = ;
       validAmount = 0;
       frb.activateCTA();
       frb.toggleMonthly(true);
       $('.frb-step-upsell').fadeOut( frb.fadeDuration, function() {
           $('.frb-step-monthly-diff-amt').fadeIn( frb.fadeDuration );
       });
       return false;
   });
   // Validate monthly other amount
   $('#frb-amt-monthly-other-input').on('input change', function (e) {
       if (frb.validateMonthlyAmount()) {
           validAmount = 1;
           frb.updateUpsellAsk(true);
       } else {
           validAmount = 0;
       }
       frb.activateCTA();
   });
   // Submit/"Donate now" buttons
   $('#frb-monthly-donate-yes').on('click', function (e) {
       frb.submitMonthly();
       return false;
   });
   $('#frb-monthly-donate-no').on('click', function (e) {
       frb.submitForm(frb.storedOptions);
       return false;
   });
   $('#frb-donate-monthly-other').on('click', function (e) {
       if (frb.validateMonthlyAmount()) {
           frb.submitMonthly();
       }
       return false;
   });
   /* I already donated */
   var iadDialog = document.getElementById('frb-dialog-iad');
   $('.frb-iad-link').on('click', function(e) {
       iadDialog.showModal();
   });
   $('#frb-dialog-iad .frb-dialog-close').on('click', function(e) {
       iadDialog.close();
       if (e.target.name == 'frb-iad-hide-button') {
           frb.hide();
           frb.altSetHideCookie( 'donate close', 604800 );
           e.target.blur();
       }
       $('.frb-iad-link').focus();
   });
   iadDialog.addEventListener( 'click', frb.closeOnClickOutside );
   $(document).on("click", "#donate-minimum", function(e) {
       e.preventDefault();
       $("#frb-amt-ps1").click();
       $('.frb-inline-main').addClass('frb-form-open');
       $('.frb-step-1').hide();
       $('.frb-step-2').fadeIn( frb.fadeDuration );
       resizeText({
           elements: document.querySelectorAll('.frb-inline-message-text'),
           step: 0.5
       });
   });
   $(document).on("click", "#donate-custom", function(e) {
       e.preventDefault();
       $('.frb-inline-main').addClass('frb-form-open');
       $('.frb-step-1').hide();
       $('.frb-step-2').fadeIn( frb.fadeDuration );
       resizeText({
           elements: document.querySelectorAll('.frb-inline-message-text'),
           step: 0.5
       });
   });
   $(document).on("click", ".frb-nag-link", function(e) {
       e.preventDefault();
       $('.frb-cta-first, .frb-step-upsell, .frb-step-monthly-diff-amt').hide();
       $('#frb-amt-ps1').click();
       $('html, body').animate( { scrollTop: $('#frb-inline').offset().top }, frb.animationDuration );
       $('.frb-step-1, .frb-step-2').show();
       $('#frb-nag').removeClass('reveal');
       frb.extraData.clickedNag = 1;
       $('.frb-inline-main').addClass('frb-form-open');
       resizeText({
           elements: document.querySelectorAll('.frb-inline-message-text'),
           step: 0.5
       });
   });
   // Text resizing - increase font size until just before it overflows
   const isOverflown = ({ clientHeight, scrollHeight }) => scrollHeight > clientHeight;
   const resizeText = ({ element, elements, minSize = 12, maxSize = 17, step = 0.5, unit = 'px' }) => {
       (elements || [element]).forEach(el => {
           let i = minSize;
           let overflow = false;
           const parent = el.parentNode;
           while (!overflow && i < maxSize) {
               el.style.fontSize = `${i}${unit}`;
               overflow = isOverflown(parent);
               if (!overflow) {
                   i += step;
               }
           }
           // revert to last state where no overflow happened
           el.style.fontSize = `${i - step}${unit}`
       })
   };
   var throttleResize;
   window.onresize = function(){
       clearTimeout(throttleResize);
       throttleResize = setTimeout(resizeText({
           elements: document.querySelectorAll('.frb-inline-message-text'),
          step: 0.5
       }), 100);
   };
   if ( frb.shouldShowBanner() ) {
       frb.insertMainBanner();
       resizeText({
           elements: document.querySelectorAll('.frb-inline-message-text'),
           step: 0.5
       });
       frb.initNag();
   }

}); </script>