// INITIALIZATION

// text to show in empty credit card number field
var cardno_msg = 'no dashes or spaces';

// initialize the credit card fields when page loads
function initCreditCard () {
  var cc = document.getElementById('card_no');
  if (cc.value == '') {
    cc.value = ' ';
    cc.style.color = '#999';
    cc.value = cardno_msg;
  }
  cc.style.color = ((cc.value == cardno_msg) ? '#999' : 'black');
}
addInitializer(initCreditCard);

// initialize donation fields when page loads
function initDonation () {
  processFrequencyChange(document.getElementById('frequency'));
}
addInitializer(initDonation);

// initialize country/program inputs when page loads
function initRestrictions () {
  processUserCountryChange(document.getElementById('user_country'));
}
addInitializer(initRestrictions);

// EVENT HANDLING

// clear card number field if default message is shown
function processCardNoFocus (field) {
  if (field.value == cardno_msg) {
    field.value = '';
    field.style.color = 'black';
  }
}

// insert default message if card number left blank
function processCardNoBlur (field) {
  if (field.value == '') {
    field.value = ' ';
    field.style.color = '#999';
    field.value = cardno_msg;
  }
}

// show windows explaining security codes
function explainCVV2 () {
  var day = new Date(); var id = day.getTime();
  eval("page" + id + " = window.open('../donate/cvc.html', '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=1,width=600,height=400,left=200,top=100');");
}

// show/hide repeat controls when frequency (e.g. one-time, monthly, etc.) is changed
function processFrequencyChange (menu) {
  if (menu) {
    // show/hide 'repeat' options (forever or number)
    var i = menu.selectedIndex;
    setVisible('repeat_row', (i != 0));
    document.getElementById('repeat_radio_forever').checked = true;
    clearField('repeat_number');
  }
}

// show the appropriate list of programs based on the selected country
function processUserCountryChange (menu) {
  if (menu) {
    // replace contents of our main Programs wrapper DIV with appropriate menu
    var country = menu.options[menu.selectedIndex].value.replace(/ /,'_').toLowerCase();
    var src_id = '' + country + '_programs_div';
    var dest = document.getElementById('user_program_div');
    dest.innerHTML = document.getElementById(src_id).innerHTML;
    // set name of new SELECT tag, make sure first OPTION is selected
    var sel = dest.getElementsByTagName('select')[0];
    sel.name = 'user_program';
    sel.options[0].selected = 'selected';
  }
}

// show/hide the 'required' star next to Company field based on Corporate checkbox
function processCorporateDonationChange (checkbox) {
  setVisible('company_required', document.getElementById('corporate').checked);
}

// VALIDATION

// validate email address (here to avoid weird quoting issues)
function validateEmailAddress () {
  return validateFormFields('email', 'Email', 'RE');
}
addValidator(validateEmailAddress);

// validate credit card fields (number, expiry, security code)
function validateCreditCardInfo () {
  var valid, cc = document.getElementById('card_no');
  if (cc && cc.value == cardno_msg) {
    cc.value = '';
  }
  valid = validateFormFields('card_no','Credit Card Number','R/[0-9]{13,16}/must be 13-16 digits');
  valid = validateFormFields('cvv2','Security Code','R/[0-9]{3,4}/must be 3 or 4 digits') && valid;
  if (cc && cc.value == '') {
    cc.value = cardno_msg;
  }
  return valid;
}
addValidator(validateCreditCardInfo);

// validate other amount field if selected
function validateOtherTotalAmount () {
  var tx = document.getElementById('total_x');
  return (tx && tx.checked) ? validateFormFields('total_other','Amount (Other)','RF') : true;
}
addValidator(validateOtherTotalAmount);

// validate repeat number field if selected
function validateRepeatNumber () {
  var rn = document.getElementById('repeat_radio_number');
  return (rn && rn.checked) ? validateFormFields('repeat_number','Repeat Number','RI>1') : true;
}
addValidator(validateRepeatNumber);

