var bookPrice = 22;
var shipUSA = 3;
var shipIntl = 9;

function dollar(num) {
	num = num * 100;
	num = Math.round(num);
	num = num/100;
	num = num.toString();
	if (num.indexOf(".")<0) {
		num += ".00";
	} else {
		if (num.substr(num.indexOf(".")+1).length < 2) {
			num += "0";
		}
	}
	return num;
}

function testEmail(addr) {
	valid = /^[.\w-]+@([\w-]+\.)+[a-zA-Z]{2,6}$/;
	return valid.test(addr);
}

function friends() {
	field = document.forms["store"].elements;
	if (!(testEmail(field.friend1.value) && testEmail(field.friend2.value))) {
		// don't throw error message if one still blank
		if (field.friend1.value.length > 0 && field.friend2.value.length > 0) {
			alert("Please enter two valid email addresses to take advantage of this offer.");
		}
	} else {
		if (field.friend1.value == field.friend2.value) {
			alert("Please enter two valid email addresses to take advantage of this offer.");
		}
	}
	updatePrice();
}

function updatePrice() {
// Check memberQty and nonMemberQty for valid #'s
	tempFlag = false;
	permissible = "1234567890";
	field = document.store.Qty.value;
	for (i=0; i < 2; i++) {
		if (permissible.lastIndexOf(field.charAt(i))==-1) {
			tempFlag = true;
		}
	}
	Qty = parseInt(field,10);
	if (field.length == 0) { Qty=0 }
	if (tempFlag) { 
		alert("Please enter numbers only here.");
	} else {
		field = document.forms["store"].elements;
		field.Subtotal.value = dollar(Qty * bookPrice);
/*		if (field.friend1.value.length + field.friend2.value.length > 0) {
			if (testEmail(field.friend1.value) && testEmail(field.friend2.value)) {
				if (field.friend1.value != field.friend2.value) {
					field.Subtotal.value = dollar(Qty * 34.95 - 5);
				}
			} 
		} */
		if (field["shipCountry"].value=="USA" || field["billCountry"].value=="USA") {
			temp = parseInt(field["shipZip"].value,10);
			if (temp>90000 && temp<96163) {
				field["Tax"].value = dollar(field["Subtotal"].value * .0725);
			} else {
				field["Tax"].value = 0.00;
			}
			temp = parseInt(field["billZip"].value,10);
			if (temp>90000 && temp<96163) {
				field["Tax"].value = dollar(field["Subtotal"].value * .0725);
			} else {
				field["Tax"].value = 0.00;
			}
		} else {	// international
			field["Tax"].value = 0.00;
		}
		if (field["shipCountry"].value=="USA") {
			document.store.Shipping.value = Qty * shipUSA;
		} else {
			document.store.Shipping.value = Qty * shipIntl;
		}
		document.store.Total.value = dollar(parseFloat(document.store.Subtotal.value) + parseFloat(document.store.Tax.value) + parseFloat(document.store.Shipping.value));
	}
}
	
function shipSame() {
	if (document.store.same.checked) {
		document.store.shipName.value = document.store.billName.value;
		document.store.shipAddress.value = document.store.billAddress.value;
		document.store.shipCity.value = document.store.billCity.value;
		document.store.shipState.value = document.store.billState.value;
		document.store.shipZip.value = document.store.billZip.value;
		document.store.shipCountry.selectedIndex = document.store.billCountry.selectedIndex;
	}
	updatePrice();
}

function stringCheck(input,permissible,minLen,maxLen) {
// checks for permissible characters and length
	good = true;
	if (input.length < minLen) { good = false; }
	if (input.length > maxLen) { good = false; }
	for (i=0; i < input.length; i++) {
		if (permissible.lastIndexOf(input.charAt(i))==-1) {
			good = false;
		}
	}
	return good;
}

function checkForm(formName) {
	lf = String.fromCharCode(13);
	errorFlag = false;
	tempFlag = false;
	message = "Sorry, there appears to be a problem with your form submission." + lf + lf;
	lengthCheck = "billName shipName billAddress shipAddress billCity shipCity billState shipState";
	f = document.forms[formName];
// Check to make sure all lengthCheck fields have info
	for (i=0; i < f.elements.length; i++) {
		field = f.elements[i];
		if (lengthCheck.lastIndexOf(field.name)>-1) {
			if (field.value.length == 0) {
				if (errorFlag) {
					message += field.name + ", "
				} else {	
					errorFlag = true;
					message += "You need to fill in the following fields:" + lf;
					message += field.name + ", "
				}
			}
		}
	}
	if (errorFlag) {
		message = message.substr(0,message.length-2) + "." + lf + lf;
	}
// Check zip in US
	zipRegExp = /\d{5}/;
	if (f.elements["billCountry"].value=="USA") {
	/*	if (f.elements["billZip"].value.length < 5 || f.elements["shipZip"].value.length < 5) {
			errorFlag = true;
			message += "Please enter a valid zip code." + lf + lf;
		} */
		
		if (!zipRegExp.test(f.elements["billZip"].value) || f.elements["billZip"].value.length > 10) {
			errorFlag = true;
			message += "Please enter a valid billing Zip code." + lf + lf;
		}
	}
	
	if (f.elements["shipCountry"].value=="USA") {
		if (!zipRegExp.test(f.elements["shipZip"].value) || f.elements["shipZip"].value.length > 10) {
			errorFlag = true;
			message += "Please enter a valid shipping Zip code." + lf + lf;
		}
	}
	
// Check phone # for min 10 digits
	permissible = "1234567890";
	field = f.elements["Phone"].value;
	temp = "";
	for (i=0; i < field.length; i++) {
		if (permissible.lastIndexOf(field.charAt(i))!=-1) {
			temp += field.charAt(i);
		}
	}
	if (temp.length < 10) {
		message += "Please enter a minimum 10 digit phone number." + lf + lf;
		errorFlag = true;
	}

// Check for valid email syntax
/*	tempFlag = false;
	valid = /^[.\w-]+@([\w-]+\.)+[a-zA-Z]{2,6}$/;
	field = f.elements["email"].value;
	if (field.indexOf("@") < 1) {
		tempFlag = true
	}
	if ((field.lastIndexOf(".") < field.length - 4) || (field.lastIndexOf(".") > field.length - 3)) {
		tempFlag = true
	}
	if (tempFlag) { */
	if (!testEmail(f.elements["email"].value)) {
		errorFlag = true;
		message += "Please enter a valid email address." + lf + lf;
	}
// Check CC number and security code
	cc = 0;
	tempFlag = false;
	field = f.elements["CCNumber"].value;
	permissible = "1234567890";
	for (cc=0; cc<3; cc++) {
		if (f.CCType[cc].checked) {	break; }
	}
	if (cc == 0) {	// amex
		size = 15;
		ccv = 4;
	} else {
		size = 16;
		ccv = 3;
	}
	if (!stringCheck(field,"1234567890",size,size)) {
		errorFlag = true;
		message += "Please enter a " + size + " digit " + f.CCType[cc].value + " number, with no spaces." + lf + lf;	
	}
	field = f.elements["CCCode"].value;
	if (!stringCheck(field,"1234567890",ccv,ccv)) {
		errorFlag = true;
		message += "Please enter a " + ccv + " digit security code." + lf + lf;	
	}

// Check CCExpMonth and CCExpYear
	var today = new Date();
	if ((parseInt(f.elements["CCExpMonth"].value,10)-1 < today.getMonth()) && (parseInt(f.elements["CCExpYear"].value,10) <= today.getYear())) {
		errorFlag = true;
		message += "You have entered an expiration date that has already passed." + lf + lf
	}

// Final routine	
	if (errorFlag) {
		alert (message);
		return false;
	} else {
		return true;
	}
}
