
/**
 * Required JavaScript for challenge/response spam protection
 */
document.addEventListener('DOMContentLoaded', () =>
{
  [...document.querySelectorAll('[id$="-cr-field"]')].forEach(element =>
  {
    let [expiration,challenge,delay] = atob(element.value).split('|');

    if (delay === undefined) {
      // The CR field has already been submitted by the client, but server side validation may have failed
      return;
    }

    setTimeout(() =>
    {
      element.value = btoa(expiration + '|' + challenge.replace(/[a-z]/gi, char =>
      {
        return String.fromCharCode( char.charCodeAt(0) + ( char.toUpperCase() <= 'M' ? 13 : -13 ) )/* https://stackoverflow.com/a/14553231 */
      }))
    }, 1e3 * delay)
  })
});