// Perferm client-side validation of form.
// Also, make Ajax call to submit email address to bighip
function validateForm() {

  var form = $('form1');
  var valid = true;
  debugMsg = "Please review the following fields, make any corrections, and re-submit:\n";

  // catch those that dont have a checking account
  /*
  if ($F('activechecking') == 'no') {
    checkingMsg = "Sorry! You cannot receive a loan if you do not have a checking account.\n";
    checkingMsg += "If you have chosen this option by mistake please go back and change it.\n";
    valid = false;
    alert(checkingMsg);
    return;
  }
  */

  // check telephone number lengths and format
  if ($F('homephoneNumber').length < 10) {
    debugMsg += 'Home phone number must be 10 digits\n';
    valid = false;
  } else if ($F('homephoneNumber').length == 10) {
    if (!validate_phone($F('homephoneNumber'))) {
      debugMsg += 'Home Phone Number\n';
      valid = false;
    }
  }

  if ($F('altnumber').length < 10) {
    debugMsg += 'Alternate phone number must be 10 digits\n';
    valid = false;
  } else if ($F('altnumber').length == 10) {
    if (!validate_phone($F('altnumber'))) {
      debugMsg += 'Alternate Phone Number\n';
      valid = false;
    }
  }

  if ($F('employerphoneNumber').length < 10) {
    debugMsg += 'Work phone number must be 10 digits\n';
    valid = false;
  } else if ($F('employerphoneNumber').length == 10) {
    if (!validate_phone($F('employerphoneNumber'))) {
      debugMsg += 'Work Phone Number\n';
      valid = false;
    }
  }

  if ($F('reference_phone1').length < 10) {
    debugMsg += 'First reference phone number must be 10 digits\n';
    valid = false;
  } else if ($F('reference_phone1').length == 10) {
    if (!validate_phone($F('reference_phone1'))) {
      debugMsg += 'Reference 1 Phone Number\n';
      valid = false;
    }
  }

  if ($F('reference_phone2').length < 10) {
    debugMsg += 'Second reference phone number must be 10 digits\n';
    valid = false;
  } else if ($F('reference_phone2').length == 10) {
     if (!validate_phone($F('reference_phone2'))) {
      debugMsg += 'Reference 2 Phone Number\n';
      valid = false;
    }
  }

  //check ssn length
  if ($F('ssn').length < 9) {
    debugMsg += 'SSN\n';
    valid = false;
  }

  //check email format
  if (!validate_email($F('email'))) {
    debugMsg += 'Email address\n';
    valid = false;
  }

  //check if the fields which should only have numbers, are only numbers
  if (!IsNumeric($F('years_at_Address'))) {
    debugMsg += 'Years at address must be a number\n';
    valid = false;
  }

  if (!IsNumeric($F('months_at_Address'))) {
    debugMsg += 'Months at address must be a number\n';
    valid = false;
  }

  if (!IsNumeric($F('years_at_Bank'))) {
    debugMsg += 'Years with bank must be a number\n';
    valid = false;
  }

  if (!IsNumeric($F('months_at_Bank'))) {
    debugMsg += 'Months with bank must be a number\n';
    valid = false;
  }

  if (!IsNumeric($F('shifthours'))) {
    debugMsg += 'Shift hours must be a number\n';
    valid = false;
  }

  if (!IsNumeric($F('loan_count'))) {
    debugMsg += 'Number of loans must be a number\n';
    valid = false;
  }

  if (!IsNumeric($F('bankaccNumber'))) {
    debugMsg += 'Bank account number must be a number\n';
    valid = false;
  }

  var paydate1 = new Date;
  paydate1.setDate($F('paydate1_day'));
  paydate1.setMonth($F('paydate1_month')-1); // January = 0
  paydate1.setFullYear($F('paydate1_year'));

  var paydate2 = new Date;
  paydate2.setDate($F('paydate2_day'));
  paydate2.setMonth($F('paydate2_month')-1); // January = 0
  paydate2.setFullYear($F('paydate2_year'));

  var today = new Date;

  if (paydate1 > paydate2) {
    debugMsg += 'First paycheck date is later than the second\n';
    valid = false;
  }

  if (today > paydate1 || today > paydate2) {
    debugMsg += 'One or both of the paycheck dates is in the past\n';
    valid = false;
  }
  today.setDate(today.getDate()+33);
  if (today < paydate1 ) {
    debugMsg += 'paycheck1 date is too far in the future\n';
    valid = false;
  }
  paydate1.setDate(paydate1.getDate()+33);
  if (paydate1 < paydate2 ) {
    debugMsg += 'The paycheck dates must match your chosen pay period\n';
    valid = false;
  }

  //check radio buttons
  if ($(form['activechecking'])[0].checked == false && $(form['activechecking'])[1].checked == false) {
    debugMsg += 'Active Checking Account\n';
    valid = false;
  }

  if ($(form['rentown'])[0].checked == false && $(form['rentown'])[1].checked == false) {
    debugMsg += 'Rent or Own\n';
    valid = false;
  }

  if ($(form['gender'])[0].checked == false && $(form['gender'])[1].checked == false) {
    debugMsg += 'Gender\n';
    valid = false;
  }

  if ($(form['uscitizen'])[0].checked == false && $(form['uscitizen'])[1].checked == false) {
    debugMsg += 'US citizenship\n';
    valid = false;
  }

  if ($(form['currentlyemployed'])[0].checked == false && $(form['currentlyemployed'])[1].checked == false) {
    debugMsg += 'Current Employment\n';
    valid = false;
  }

  if ($(form['payPeriod'])[0].checked == false && $(form['payPeriod'])[1].checked == false && $(form['payPeriod'])[2].checked == false && $(form['payPeriod'])[3].checked == false) {
    debugMsg += 'Pay period\n';
    valid = false;
  }

  if ($(form['Mil_AMD'])[0].checked == false && $(form['Mil_AMD'])[1].checked == false && $(form['Mil_AMD'])[2].checked == false) {
    debugMsg += 'Military Status\n';
    valid = false;
  }

 /* if ($(form['otheroffers'])[0].checked == false && $(form['otheroffers'])[1].checked == false) {
    debugMsg += 'Third-party Offers\n';
    valid = false;
  }

  if ($(form['MC_offer'])[0].checked == false && $(form['MC_offer'])[1].checked == false) {
    debugMsg += 'Mastecard Offer\n';
    valid = false;
  }

  if ($(form['MC_offer'])[0].checked == true && $('mc_terms').checked == false) {
    debugMsg += 'You must agree to Primary Cash Card\'s terms and conditions before continuing\n';
    valid = false;
  }

  if ($(form['MR_offer'])[0].checked == false && $(form['MR_offer'])[1].checked == false) {
    debugMsg += 'Monster Rewards Offer\n';
    valid = false;
  }

  if ($(form['MR_offer'])[0].checked == true && $('mr_terms').checked == false) {
    debugMsg += 'You must agree to Monster Rewards\'s terms and conditions before continuing\n';
    valid = false;
  }

  if ($('terms').checked == false) {
    debugMsg += 'You must agree to our terms and conditions before continuing\n';
    valid = false;
  }*/

  bankabaRouting = $F('bankabaRouting');
  //check the routing number
  n = 0;
  for (i = 0; i < bankabaRouting.length; i += 3) {
    n += parseInt(bankabaRouting.charAt(i),     10) * 3
      +  parseInt(bankabaRouting.charAt(i + 1), 10) * 7
      +  parseInt(bankabaRouting.charAt(i + 2), 10);
  }

  // If the resulting sum is an even multiple of ten (but not zero),
  // the aba routing number is good.

  if (n == 0 || n % 10 != 0) {
    debugMsg += 'Bank Routing Number\n';
    valid = false;
  }

  var fields_to_validate = new Object();
  fields_to_validate['firstname'] = "First Name";
  fields_to_validate['lastname'] = "Last Name";
  fields_to_validate['address'] = "Street Address";
  fields_to_validate['city'] = "City";
  fields_to_validate['state'] = "State";
  fields_to_validate['zip'] = "Zip Code";
  fields_to_validate['dob_month'] = "Date of Birth (Month)";
  fields_to_validate['dob_day'] = "Date of Birth (Day)";
  fields_to_validate['dob_year'] = "Date of Birth (Year)";
  fields_to_validate['companyname'] = "Company Name";
  fields_to_validate['years_at_Address'] = "Years at Address.";
  fields_to_validate['months_at_Address'] = "Months at Address";
  fields_to_validate['license'] = "Driver License";
  fields_to_validate['licensestate'] = "Driver License State";
  fields_to_validate['shifthours'] = "Shift Hours";
  fields_to_validate['shift'] = "Shift Time of Day";
  fields_to_validate['jobtitle'] = "Job Title";
  fields_to_validate['supervisor_name'] = "Supervisor's Name";
  fields_to_validate['datehired_month'] = "Date Hired (Month)";
  fields_to_validate['datehired_day'] = "Date Hired (Day)";
  fields_to_validate['datehired_year'] = "Date Hired (Year)";
  fields_to_validate['mainIncome'] = "Main Income";
  fields_to_validate['takehomepay'] = "Monthly Pay";
  fields_to_validate['checkDeposit'] = "Pay Type";
  fields_to_validate['paydate1_month'] = "Next Paycheck (Month)";
  fields_to_validate['paydate1_day'] = "Next Paycheck (Day)";
  fields_to_validate['paydate1_year'] = "Next Paycheck (Year)";
  fields_to_validate['paydate2_month'] = "Second Paycheck (Month)";
  fields_to_validate['paydate2_day'] = "Second Paycheck (Day)";
  fields_to_validate['paydate2_year'] = "Second Paycheck (Year)";
  fields_to_validate['bankName'] = "Bank Name";
  fields_to_validate['bankaccNumber'] = "Bank Account Number";
  fields_to_validate['loan_count'] = "Number of Outstanding Loans";
//   fields_to_validate['debt'] = "Amount of debt";
  fields_to_validate['years_at_Bank'] = "Years with this Bank.";
  fields_to_validate['months_at_Bank'] = "Months with this Bank";
  fields_to_validate['reference_name1'] = "Reference 1 Name";
  fields_to_validate['reference_name2'] = "Reference 2 Name";
  fields_to_validate['reference_relationship1'] = "Reference 1 Relationship";
  fields_to_validate['reference_relationship2'] = "Reference 2 Relationship";
  //fields_to_validate['PC_offer'] = "FREE Computer & $2500 Credit Line Offer";

  for (field_name in fields_to_validate) {
    // Need to be non-empty
    if ($F(field_name) == undefined || $F(field_name) == "") {
      debugMsg += fields_to_validate[field_name] + "\n";
      valid = false;
    }
  }

  if (valid) {
    //if ($(form['otheroffers'])[0].checked == true) {
      // call_bighip($F('email'), $F('REMOTE_ADDR'), $F('zip'), $F('promo_code'));
    //}
    //form.submit();
    //collapse1.slidedown();
	  jQuery.blockUI({ 
			message: '<h4>Just a moment...validating your email address before processing your submission.</h4>',
			css: { 
		            border: 'none', 
		            padding: '15px', 
		            backgroundColor: '#000', 
		            '-webkit-border-radius': '10px', 
		            '-moz-border-radius': '10px', 
		            opacity: .5, 
		            color: '#fff' 
		        }
		});
		jQuery.xVerify.email(document.getElementById('email').value, function(email) {
			jQuery.unblockUI();
			if(email.error){
				alert(email.message);
				document.getElementById('email').focus();
			}else{
				jQuery('#form1').submit();
			}
		});		
		return false;
  } else {
    alert(debugMsg);
    return false;
  }

}

// Make an Ajax call to bighip server
function call_bighip(email, REMOTE_ADDR, zip, promo_code) {
  var url = '/bigHip.php?email='+email+'&remoteaddr='+REMOTE_ADDR+'&postal='+zip+'&promo_code='+promo_code;
  //alert(url);
  new Ajax.Request(url, {
    method:'post',
    onLoading: function() {
      // alert('loading...');
    },
    onException:function(request, error) {
      // alert("onException caught: " + error.message);
      alert('onException');
    },
    onSuccess: function(transport) {
      var response = transport.responseText || "no response text";
      // alert(response);
      $('form1').submit();
      collapse1.slidedown();
    },
    onFailure: function() {
      alert('Failed to submit address');
      return false;
    }
  });
}

function validate_phone(phone_string) {
  var regEx = /^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$/;
  return regEx.test(phone_string);
}

function validate_email(email_string) {
  var regEx = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  // var regEx = /^([a-zA-Z0-9_\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~\.])+\@([a-zA-Z0-9\-\.])$/;
  return regEx.test(email_string);
}

function IsNumeric(number_string) {
  var ValidChars = "0123456789. ";
  var IsNumber = true;
  var Char;

  for (i = 0; i < number_string.length && IsNumber == true; i++) {
    Char = number_string.charAt(i);
    if (ValidChars.indexOf(Char) == -1) {
      IsNumber = false;
    }
  }
  return IsNumber;
}
