function validateStep4()
{
	var isValid = true;
	var errors = "";
	
	//Billing Info
	if (document.getElementById('billingName').value == "")
	{
		errors += 'Billing Name is Required. \n';
		isValid = false;
	}
	if (document.getElementById('billingAddress').value == "")
	{
		errors += 'Billing Address is Required. \n';
		isValid = false;
	}
	if (document.getElementById('billingCity').value == "")
	{
		errors += 'Billing City is Required. \n';
		isValid = false;
	}
	if (document.getElementById('billingState').options[document.getElementById('billingState').selectedIndex].value == "NotSelected")	
	{
		errors += 'Billing State is Required. \n';
		isValid = false;
	}
	if (document.getElementById('billingZipcode').value == "")
	{
		errors += 'Billing Zip Code is Required. \n';
		isValid = false;
	}
	if (document.getElementById('billingPhoneNumber').value == "")
	{
		errors += 'Billing Phone Number is Required. \n';
		isValid = false;
	}
	if (document.getElementById('billingEmail').value == "")
	{
		errors += 'Email Address is Required. \n';
		isValid = false;
	}
	
	//Shipping Info
	if (document.getElementById('shippingName').value == "")
	{
		errors += 'Shipping Name is Required. \n';
		isValid = false;
	}
	if (document.getElementById('shippingAddress').value == "")
	{
		errors += 'Shipping Address is Required. \n';
		isValid = false;
	}
	if (document.getElementById('shippingCity').value == "")
	{
		errors += 'Shipping City is Required. \n';
		isValid = false;
	}
	if (document.getElementById('shippingState').options[document.getElementById('shippingState').selectedIndex].value == "NotSelected")
	{
		errors += 'Shipping State is Required. \n';
		isValid = false;
	}
	if (document.getElementById('shippingZipcode').value == "")
	{
		errors += 'Shipping Zip Code is Required. \n';
		isValid = false;
	}

	//Credit Card Info
	if (document.getElementById('creditCardNameOnCard').value == "")
	{
		errors += 'Name On Card is Required. \n';
		isValid = false;
	}
	if (document.getElementById('creditCardType').options[document.getElementById('creditCardType').selectedIndex].value == "NotSelected")
	{
		errors += 'Credit Card Type is Required. \n';
		isValid = false;
	}
	if (document.getElementById('creditCardNumber').value == "")
	{
		errors += 'Credit Card Number is Required. \n';		
		isValid = false;
	}	
	if (checkCreditCardNumber(document.getElementById('creditCardNumber').value) != "")
	{
		errors += checkCreditCardNumber(document.getElementById('creditCardNumber').value);
		isValid = false;
	}	
	if (document.getElementById('creditCardExpirationMonth').options[document.getElementById('creditCardExpirationMonth').selectedIndex].value == "NotSelected")
	{
		errors += 'Credit Card Expiration Month is Required. \n';
		isValid = false;
	}
	if (document.getElementById('creditCardExpirationYear').options[document.getElementById('creditCardExpirationYear').selectedIndex].value == "NotSelected")
	{
		errors += 'Credit Card Expiration Year is Required. \n';
		isValid = false;
	}	
	
	if (document.getElementById('referredBy').value == "" && document.getElementById('referredByNone').checked == false)
	{
		errors += 'Referral is required. \n';
		isValid = false;
	}	
	
	if (document.getElementById('referredByNone').checked == true)
	{
		document.getElementById('referredBy').value = "";
	}
	
	//document.getElementById('comments').value = stripHTML(document.getElementById('comments').value);
	
	if (!isValid)
	{
		//Page isn't valid
		//Show errors on required fields and redirect to step4
		alert(errors);		
		document.forms['PaymentForm'].action = "add_payment_info.php?redirectURL=step4.php";
	}
	if (isValid)
	{
		//Page is valid, store the payment info and send to step5 for review
		document.forms['PaymentForm'].action = "add_payment_info.php?redirectURL=step5.php";
		document.forms['PaymentForm'].submit();
	}
	
	return isValid;
}

function checkCreditCardNumber(creditCardNumber)
{
	if (creditCardNumber.charAt(0) == '3')
	{
		if (creditCardNumber.length < 15)
			return "The American Express number is not valid. \n";
		else
			return "";
	}
	else if (creditCardNumber.charAt(0) == '4')
	{ 	
		if (creditCardNumber.length < 16)
			return "The Visa number is not valid. \n";
		else
			return "";
	}
	else if (creditCardNumber.charAt(0) == '5')
	{
		if (creditCardNumber.length < 16)
			return "The Master Card number is not valid. \n";
		else
			return "";
	}	
	else if (creditCardNumber.charAt(0) == '6')
	{ 
		if (creditCardNumber.length < 16)
			return "The Discover number is not valid. \n";
		else
			return "";
	}		
	else
		return "The Credit Card number is not valid. \n";
}

function stripLetters(field)
{
	var oldString = field.value;
	var newString = "";
	
	for (var i = 0; i < oldString.length; i++)
	{
		if (!isNaN(oldString.charAt(i)))
		{
			newString += oldString.charAt(i);
		}
	}	
	
	field.value = newString;
}

function stripAllButLetters(field)
{
	var oldString = field.value;
	var newString = "";
	
	for (var i = 0; i < oldString.length; i++)
	{
		if ((oldString.charCodeAt(i) > 64 && oldString.charCodeAt(i) < 91) || (oldString.charCodeAt(i) > 96 && oldString.charCodeAt(i) < 123) || oldString.charCodeAt(i) == 32)
		{
			newString += oldString.charAt(i);
		}
	}	
	
	field.value = newString;
}

function stripNonCreditCardChars(field)
{
	limitMaxChars(field, 16);
	
	var oldString = field.value;
	var newString = "";
	
	for (var i = 0; i < oldString.length; i++)
	{
		if (!isNaN(oldString.charAt(i)))
		{
			newString += oldString.charAt(i);
		}
	}	
	
	field.value = newString;
}

function stripNonZipcodeChars(field)
{
	limitMaxChars(field, 5);
	
	var oldString = field.value;
	var newString = "";
	
	for (var i = 0; i < oldString.length; i++)
	{
		if (!isNaN(oldString.charAt(i)))
		{
			newString += oldString.charAt(i);
		}
	}	
	
	field.value = newString;
}

function stripNonPhoneNumberChars(field)
{
	limitMaxChars(field, 10);

	var oldString = field.value;
	var newString = "";
	
	for (var i = 0; i < oldString.length; i++)
	{
		if (!isNaN(oldString.charAt(i)))
		{
			newString += oldString.charAt(i);
		}
	}	
	
	field.value = newString;
}

function stripNonEmailChars(field)
{
	var oldString = field.value;
	var newString = "";
	
	for (var i = 0; i < oldString.length; i++)
	{
		if ((oldString.charCodeAt(i) > 32 && oldString.charCodeAt(i) < 127))
		{
			newString += oldString.charAt(i);
		}
	}	
	
	field.value = newString;
}

function stripHTML(oldString) 
{
   var firstPass = "";
   var secondPass = "";
   var inTag = false;

   //Look for html tags like <script> or <b>
   for (var i = 0; i < oldString.length; i++) 
   {
		if (oldString.charAt(i) == '<') 
			inTag = true;

		if (oldString.charAt(i) == '>') 
		{
			inTag = false;
			i++;
		}

		if (!inTag) 
			firstPass += oldString.charAt(i);		
   }
   
   inTag = false;
   
   //Look for tags using literals like &lt; and &gt;
   for (i = 0; i < firstPass.length; i++) 
   {
		if (firstPass.charAt(i) == '&') 
			inTag = true;

		if (firstPass.charAt(i) == ';') 
		{
			inTag = false;
			i++;
		}

		if (!inTag) 
			secondPass += firstPass.charAt(i);		
   }

   return secondPass;
}           

function limitMaxChars(field, maxChars)            
{
	if (field.value.length > maxChars)
	{
		var oldString = field.value;
		var newString = "";
		
		newString = oldString.substring(0, maxChars);
		
		field.value = newString;
	}
}			

function validateQuantity(formName) 
{
	try
	{
		if (formName.weddingFavorsPerfume.value != "") 
		{
			if (formName.weddingFavorsPerfume.value < 10 && formName.weddingFavorsPerfume.value > 0) 
			{
				alert("There is a minimum quantity of 10 on Wedding Favor items.");
				formName.weddingFavorsPerfume.focus();
				return false;
			}
		}
		if (formName.weddingFavorsLotion.value != "") 
		{
			if (formName.weddingFavorsLotion.value < 10 && formName.weddingFavorsLotion.value > 0) 
			{
				alert("There is a minimum quantity of 10 on Wedding Favor items.");
				formName.weddingFavorsLotion.focus();
				return false;
			}
		}
		if (formName.weddingFavorsShowerGel.value != "") 
		{
			if (formName.weddingFavorsShowerGel.value < 10 && formName.weddingFavorsShowerGel.value > 0) 
			{
				alert("There is a minimum quantity of 10 on Wedding Favor items.");
				formName.weddingFavorsShowerGel.focus();
				return false;
			}
		}
	}
	catch (e)
	{
		return false;
	}
	
	return true;
}

function checkEngraving()
{
	var errors = "";
	
	if (document.getElementById("engraveOption1").checked)
	{
		if (document.getElementById('bridesFirstName').value == "" )
			errors += "Option 1 requires the bride's name.\n";
		if (document.getElementById('groomsFirstName').value == "" )
			errors += "Option 1 requires the groom's name.\n";
		if (document.getElementById('weddingDateMonth').value == "NotSelected" )
			errors += "Option 1 requires the wedding date month.\n";
		if (document.getElementById('weddingDateDay').value == "NotSelected" )
			errors += "Option 1 requires the wedding date day.\n";
		if (document.getElementById('weddingDateYear').value == "NotSelected" )
			errors += "Option 1 requires the wedding date year.\n";			
	}
	else if (document.getElementById("engraveOption2").checked)
	{
		if (document.getElementById('personalMessageOption2').value == "" )
			errors += "Option 2 requires a personal message.\n";
	}
	else if (document.getElementById("engraveOption3").checked)
	{
		if (document.getElementById('personalMessageOption3').value == "" )
			errors += "Option 3 requires a personal message.\n";
	}
	
	if (errors != "")
	{
		alert(errors);
		if (document.forms["EngraveForm"].action.indexOf("redirectURL") >= 0)
			document.forms["EngraveForm"].action += "&errors=true";
		else
			document.forms["EngraveForm"].action += "?errors=true";
	}
}