
if (RobertRTG == null || typeof(RobertRTG) != "object") { var RobertRTG = new Object();}

if (RobertRTG.Form == null || typeof(RobertRTG.Form) != "object") { RobertRTG.Form = new Object();}

RobertRTG.Form = {
	AddressMatchFlip: function (checkbox) {
		var form = document.forms[0];
		if (checkbox.checked == true) {
			form.ShippingFirstName.value = form.BillingFirstName.value;
			form.ShippingLastName.value = form.BillingLastName.value;
			form.ShippingStreetAddress1.value = form.BillingStreetAddress1.value;
			form.ShippingStreetAddress2.value = form.BillingStreetAddress2.value;
			form.ShippingCity.value = form.BillingCity.value;
			form.ShippingState.value = form.BillingState.value;
			form.ShippingZip.value = form.BillingZip.value;
		} else {
			form.ShippingFirstName.value = "";
			form.ShippingLastName.value = "";
			form.ShippingStreetAddress1.value = "";
			form.ShippingStreetAddress2.value = "";
			form.ShippingCity.value = "";
			form.ShippingState.value = "";
			form.ShippingZip.value = "";
		}
	},
	CheckoutValidator: function (form) {
		var valid = true;
		var reason = "";
		for (i=0; i<form.elements.length; i++) {
			if (form.elements[i].className == "required" && this.checkField(form.elements[i]) == false) {
				reason += "Field " + form.elements[i].name + " must be filled in\n";
				valid = false;
			} else {
				valid = valid && true;
			}
		}

		if (this.checkCCNumber(form.CCNumber) == false) {
			reason += "Invalid Credit Card Number or Type.\n";
		} else {
			valid = valid && true;
		}

		if (this.checkCCDates(form.CCExpMonth, form.CCExpYear) == false) {
			reason += "Invalid Credit Card Expiration Date.\n";
			valid = false;
		} else {
			valid = valid && true;
		}

		if (valid == false)
			alert(reason);
		return valid;
	},
	AdminOrderValidator: function (form) {
		var valid = true;
		var reason = "";
		for (i=0; i<form.elements.length; i++) {
			if (form.elements[i].className == "required" && this.checkField(form.elements[i]) == false) {
				reason += "Field " + form.elements[i].name + " must be filled in\n";
				valid = false;
			} else {
				valid = valid && true;
			}
		}

		/* Skip these for admins
		if (this.checkCCNumber(form.CCNumber) == false) {
			reason += "Invalid Credit Card Number.\n";
		} else {
			valid = valid && true;
		}

		if (this.checkCCDates(form.CCExpDate, form.CCExpDate) == false) {
			reason += "Invalid Credit Card Expiration Date.\n";
			valid = false;
		} else {
			valid = valid && true;
		}
		*/

		if (valid == false)
			alert(reason);
		return valid;
	},
	formatCCNumber: function (field) {
		//Strip -'s and spaces
		field.value = field.value.replace(/[-\s]/g, "");
	},
	changeSelectBg: function (select) {
		select.className = select.options[select.selectedIndex].className;
	},
	checkField: function (field) {
		if (field.value == "" || field.value == null)
			return false;
		else
			return true;
	},
	checkCCNumber: function (field) {
		var valid = false;
		var payTypes = creditCards;
		var length=field.value.length;
		var type=this.getCCType(field.value);
		if ((length == 13 && type == "Visa") || (length == 14 && type == "Diners Club") || (length == 15 && (type == "American Express" || type == "JCB")) || (length == 16 && (type == "Visa" || type == "MasterCard" || type == "Discover" || type == "Diners Club" || type == "JCB"))) {
			// Valid length
			if (type in payTypes) {
				if (!isNaN(field.value)) {
					// Is numeric
					var checkSumTotal = 0;
					var oddoeven = length & 1;
				
					// This is better to account for Amex
					for (var count = 0; count < length; count++) {
						var digit = parseInt(field.value.charAt(count));
						if (!((count & 1) ^ oddoeven)) {
							digit *= 2;
							if (digit > 9)
								digit -= 9;
						}
						checkSumTotal += digit;
					}

/*				for (var digitCounter = length - 1; digitCounter > 0; digitCounter--) {
					checkSumTotal += parseInt(field.value.charAt(digitCounter));
					digitCounter--;
					numberProduct = String((field.value.charAt(digitCounter) * 2));
					for (var productDigitCounter = 0; productDigitCounter < numberProduct.length; productDigitCounter++) {
						checkSumTotal += parseInt(numberProduct.charAt(productDigitCounter));
					}
				}*/
				
					valid = (checkSumTotal % 10 == 0);
				} else {
					valid = false;
				}
			} else {
				valid = false;
			}
		} else {
			valid = false;
		}

		return(valid);
	},	
	checkCCDates: function (field, yearField) {
		var valid = false;
		var today = new Date();
		if ((yearField.value > today.getFullYear()) && (field.value != ""))
			valid = true;
		else if ((field.value-1 >= today.getMonth()) && (yearField.value == today.getFullYear()) && (field.value != ""))
			valid = true;
		else
			valid = false;
		return valid;
	},
	getCCType: function (ccNum) {
		if (ccNum.substr(0, 2) == "51" || ccNum.substr(0, 2) == "52" || ccNum.substr(0, 2) == "53" || ccNum.substr(0, 2) == "54" || ccNum.substr(0, 2) == "55") {
			return "MasterCard";
		} else if (ccNum.substr(0, 1) == "4") { 
			return "Visa";
		} else if (ccNum.substr(0, 2) == "34" || ccNum.substr(0, 2) == "37") {
			return "American Express";
		} else if (ccNum.substr(0, 4) == "6011" || ccNum.substr(0, 2) == "65") {
			return "Discover";
		} else if (ccNum.substr(0, 3) == "300" || ccNum.substr(0, 3) == "301" || ccNum.substr(0, 3) == "302" || ccNum.substr(0, 3) == "303" || ccNum.substr(0, 3) == "304" || ccNum.substr(0, 3) == "305" || ccNum.substr(0, 2) == "36" || ccNum.substr(0, 2) == "38") {
			return "Diners Club";
		} else if (ccNum.substr(0, 2) == "35" || ccNum.substr(0, 4) == "1800" || ccNum.substr(0, 4) == "2131") {
			return "JCB";
		} else {
			return "none";
		}		
	}
}

