function dollar(num) {
	num = num * 100;
	num = Math.floor(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 updatePrice() {
	f = document.forms["store"].elements;
	total = parseFloat(f["Subtotal"].value);
	if (f["Discount"][1]) {		// array, so it's radio buttons
		for (i=0; i<f["Discount"].length; i++) {
			if (f["Discount"][i].checked) {
				total = parseFloat(f["Discount"][i].value);
			}
		}
	} else {	// no array, so it's a checkbox
		if (f["Discount"].checked) {
			total = parseFloat(f["Discount"].value);
		}
	}
	
	if (f["book"] && f["book"].checked) {
		total += 21.45;
		f["book_ship"][0].disabled = false;
		f["book_ship"][1].disabled = false;
		if (f["book_ship"][0].checked) {
			total += 4.5;
		}
	} else {
		f["book_ship"][0].checked = false;
		f["book_ship"][0].disabled = true;
		f["book_ship"][1].checked = true;
		f["book_ship"][1].disabled = true;
	}
	
	f["Total"].value = dollar(total);
}
	
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;
	}
}

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 = "\n";
	errorFlag = false;
	tempFlag = false;
	message = "Sorry, there appears to be a problem with your form submission." + lf + lf;
	lengthCheck = "Name Address City State";
	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 for min 5 characters
	if (f.elements["Zip"] && !stringCheck(f.elements["Zip"].value,"1234567890-",5,10)) {
		errorFlag = true;
		message += "Please enter a valid zip code." + lf + lf;
	}
	
	if (f.elements["billZip"] && !stringCheck(f.elements["billZip"].value,"1234567890-",5,10)) {
		errorFlag = true;
		message += "Please enter a valid billing zip code." + lf + lf;
	}
	
// Check phone # for valid characters
	if (!stringCheck(f.elements["Phone"].value,"1234567890()/-.x ",10,30)) {
		message += "Please enter a valid phone number in the format (555) 555-1212." + lf + lf;
		errorFlag = true;
	}
// Check for valid email syntax
	tempFlag = false;
	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) {
		errorFlag = true;
		message += "Please enter a valid email address." + lf + lf;
	}
// Check CC number
	cc = 0;
	field = f.elements["CCNumber"].value;
	field = field.replace(/\D/g,"");
	for (cc=0; cc<3; cc++) {
		if (f.CCType[cc].checked) {	break; }
	}
	if (cc == 0) {
		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
	}
	
// check to see terms have been read
	if (!f.elements["terms"].checked) {
		message += "Please read and agree to our terms and conditions." + lf + lf;
		errorFlag = true;
	}

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