// JavaScript Document
function SameAsBilling() {
	document.PurchaseForm.mailingName.value = document.PurchaseForm.billingName.value;
	document.PurchaseForm.mailingAddress1.value = document.PurchaseForm.billingAddress1.value;
	document.PurchaseForm.mailingAddress2.value = document.PurchaseForm.billingAddress2.value;
	document.PurchaseForm.mailingCity.value = document.PurchaseForm.billingCity.value;
	document.PurchaseForm.mailingState.value = document.PurchaseForm.billingState.value;
	document.PurchaseForm.mailingZip.value = document.PurchaseForm.billingZip.value;
}

function ValidatePurchaseForm() {
	var bValid = true;
	var me = document.PurchaseForm;
	var msg = "";
	//check all the necessary fields
	re = /[0-9]+/;
if ((!me.book1Qty.value.match(re)) && (!me.book2Qty.value.match(re)) && (!me.book3Qty.value.match(re))) {
		msg += "Product Quantity (no quantity was selected)\n\r";
		bValid = false;
	}
if (me.billingName.value.length<1) {
		msg += "Billing Name\n\r";
		bValid = false;
	}
	if (me.billingAddress1.value.length<1) {
		msg += "Billing Address\n\r";
		bValid = false;
	}
	if (me.billingCity.value.length<1) {
		msg += "Billing City\n\r";
		bValid = false;
	}	
	if (me.billingState.value.length<1) {
		msg += "Billing State\n\r";
		bValid = false;
	}	
	re = /()[0-9]{5}/;
	if (!me.billingZip.value.match(re)) {
		msg += "Billing Zip Code\n\r";
		bValid = false;
	}	
	if ((me.cardType.value!='visa') && (me.cardType!='mastercard')) {
		msg += "Card Type\n\r";
		bValid = false;
	}
	if (!ValidateCreditCard(me.cardNumber.value)) {
		msg += "Credit Card Number\n\r";
		bValid = false;
	}
	re = /(0[1-9]|1[0-2])[-\/\.\\](20\d\d)/;
	if (!me.cardExpiration.value.match(re)) {
		msg += "Credit Card Expiration Date\n\r";
		bValid = false;
	}
	re = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
	if (!me.email.value.match(re)) {
		msg += "Email Address\n\r";
		bValid = false;
	}
	if (me.mailingName.value.length<1) {
		msg += "Mailing Name\n\r";
		bValid = false;
	}
	if (me.mailingAddress1.value.length<1) {
		msg += "Mailing Address\n\r";
		bValid = false;
	}
	if (me.mailingCity.value.length<1) {
		msg += "Mailing City\n\r";
		bValid = false;
	}	
	if (me.mailingState.value.length<1) {
		msg += "Mailing State\n\r";
		bValid = false;
	}	
	re = /()[0-9]{5}/;
	if (!me.mailingZip.value.match(re)) {
		msg += "Mailing Zip Code\n\r";
		bValid = false;
	}	
	if (!bValid) {
		alert ("Please address the following fields before proceeding:\n\r\n\r"+msg);	
	}
	//return the result
	return bValid ;
}

function Next() {
	if (ValidatePurchaseForm()) {
		document.PurchaseForm.submit();
	}
}

function Reset() {
	document.PurchaseForm.reset();
}

function ValidateCreditCard(ccNumb) {
	/*
	This script and many more are available free online at
	The JavaScript Source!! http://javascript.internet.com
	Created by: David Leppek :: https://www.azcode.com/Mod10
	*/	
	
	var valid = "0123456789"  // Valid digits in a credit card number
	var len = ccNumb.length;  // The length of the submitted cc number
	var sCCN = ccNumb.toString();  // string of ccNumb
	//sCCN = sCCN.replace (/^\s+|\s+$/g,'');  // strip spaces
	sCCN = sCCN.replace (/ /g,'');  // strip spaces	
	var iCCN = parseInt(sCCN);  // integer of ccNumb
	var iTotal = 0;  // integer total set at zero
	var bNum = true;  // by default assume it is a number
	var bResult = false;  // by default assume it is NOT a valid cc
	var temp;  // temp variable for parsing string
	var calc;  // used for calculation of each digit
	
	// Determine if the ccNumb is in fact all numbers
	for (var j=0; j<len; j++) {
		temp = "" + sCCN.substring(j, j+1);
		if (valid.indexOf(temp) == "-1"){bNum = false;}
	}
	
	// if it is NOT a number, you can either alert to the fact, or just pass a failure
	if(!bNum){
		/*alert("Not a Number");*/
		bResult = false;
	}
	// Determine if it is the proper length 
	if((len == 0)&&(bResult)){  // nothing, field is blank AND passed above # check
		bResult = false;
	} else{  // ccNumb is a number and the proper length - let's see if it is a valid card number
		if(len >= 15){  // 15 or 16 for Amex or V/MC
			for(var i=len;i>0;i--){  // LOOP throught the digits of the card
				calc = parseInt(iCCN) % 10;  // right most digit
				calc = parseInt(calc);  // assure it is an integer
				iTotal += calc;  // running total of the card number as we loop - Do Nothing to first digit
				i--;  // decrement the count - move to the next digit in the card
				iCCN = iCCN / 10;                               // subtracts right most digit from ccNumb
				calc = parseInt(iCCN) % 10 ;    // NEXT right most digit
				calc = calc *2;                                 // multiply the digit by two
				// Instead of some screwy method of converting 16 to a string and then parsing 1 and 6 and then adding them to make 7,
				// I use a simple switch statement to change the value of calc2 to 7 if 16 is the multiple.
				switch(calc){
					case 10: calc = 1; break;       //5*2=10 & 1+0 = 1
					case 12: calc = 3; break;       //6*2=12 & 1+2 = 3
					case 14: calc = 5; break;       //7*2=14 & 1+4 = 5
					case 16: calc = 7; break;       //8*2=16 & 1+6 = 7
					case 18: calc = 9; break;       //9*2=18 & 1+8 = 9
					default: calc = calc;           //4*2= 8 &   8 = 8  -same for all lower numbers
				}                                               
			iCCN = iCCN / 10;  // subtracts right most digit from ccNum
			iTotal += calc;  // running total of the card number as we loop
		}  // END OF LOOP
		if ((iTotal%10)==0){  // check to see if the sum Mod 10 is zero
			bResult = true;  // This IS (or could be) a valid credit card number.
		} else {
			bResult = false;  // This could NOT be a valid credit card number
			}
		}
	}
	return bResult; // Return the results
}