function validateForm(theForm)
{
	var errMsg = ''; var rtnVal = false;
	CopyShippingAddress();
	if (document.getElementById('divEmailData').style.display == 'block')
	{
		errMsg += validateEmail(theForm.Email);
		errMsg += validatePassword(theForm.Password,theForm.ConfirmPassword);
	}
	if (document.getElementById('divAccountData').style.display == 'block')
	{
		errMsg += validatePhone(theForm.Phone);
		errMsg += validateGeneric('First Name', theForm.FirstName);
		errMsg += validateGeneric('Last Name', theForm.LastName);
		errMsg += validateGeneric('Shipping Street', theForm.MailingStreet);
		errMsg += validateGeneric('Shipping City', theForm.MailingCity);
		errMsg += validateGeneric('Billing Street', theForm.BillingStreet);
		errMsg += validateGeneric('Billing City', theForm.BillingCity);
		errMsg += validatePostalCode('Shipping Postal Code', theForm.MailingPostalCode);
		errMsg += validatePostalCode('Billing Postal Code', theForm.BillingPostalCode);
		errMsg += validateCountry(theForm.MailingCountry);
		errMsg += validateCountry(theForm.BillingCountry);
	}
	if (errMsg != '') alert('Please fix the following error(s):\n\n' + errMsg);
	else
	{
		rtnVal = true;
		SetMailingDisplay(false);
	}
	return rtnVal;
}

function validateEmail(email)
{
	var rtnVal = '';
	var regEmail = new RegExp("^([a-zA-Z0-9_.\\-+])+@(([a-zA-Z0-9\\-])+\\.)+[a-zA-Z0-9]{2,4}$");
	if(!regEmail.test(email.value))
	{
		rtnVal = 'Invalid Email address.\n';
		email.value = '';
	}
	return rtnVal;
}

function validatePassword(pass1, pass2)
{
	var rtnVal = ''; var checkChars = "\"'`\\<>()";
	for (var i = 0; i < checkChars.length; i++)
	{
		if (pass1.value.indexOf(checkChars.charAt(i)) != -1) rtnVal += checkChars.charAt(i);
	}
	if (rtnVal != '') rtnVal = 'Password can not contain (' + rtnVal + ').\n';
	if (pass1.value.length < 6) rtnVal += 'Password must be at least 6 characters long.\n';
	if (pass1.value != pass2.value) rtnVal += 'Password and Confirm Password do not match.\n';
	if (rtnVal != '')
	{
		pass1.value = '';
		pass2.value = '';
	}
	return rtnVal;
}

function validateGeneric(displayName, input)
{
	var rtnVal = ''; var checkChars = "\"'`\\<>()^";
	for (var i = 0; i < checkChars.length; i++)
	{
		if (input.value.indexOf(checkChars.charAt(i)) != -1) rtnVal += checkChars.charAt(i);
	}
	if (rtnVal != '')
	{
		rtnVal = displayName + ' can not contain (' + rtnVal + ').\n';
		input.value = '';
	}
	return rtnVal;
}

function validateCountry(country)
{
	var rtnVal = '';
	if(country.value != 'Canada')
	{
		rtnVal = 'Only available in Canada.\n';
		country.value = '';
	}
	return rtnVal;
}

function validatePhone(phone)
{
	//strip out acceptable non-numeric characters, then test to see if its a valid number with 10 digits
	var rtnVal = ''; var stripped = phone.value;
	stripped = stripped.split('(').join('');
	stripped = stripped.split(')').join('');
	stripped = stripped.split('.').join('');
	stripped = stripped.split('-').join('');
	stripped = stripped.split(' ').join('');
	if (isNaN(stripped)) rtnVal = "The phone number contains illegal characters.";
	else if (stripped.length != 10) rtnVal = 'The phone number is the wrong length. Make sure to include the area code.\n';
	if (rtnVal != '') phone.value = '';
	return rtnVal;
}

function validatePostalCode(displayName, postalCode)
{
	var rtnVal = '';
	var regCode = new RegExp("^[A-Z]\\d[A-Z]\\d[A-Z]\\d$");
	postalCode.value = postalCode.value.toUpperCase();
	var code = postalCode.value.split(' ').join('');
	if(!regCode.test(code))
	{
		rtnVal = 'Invalid ' + displayName + ' address.\n';
		postalCode.value = '';
	}
	return rtnVal;
}

function CopyShippingAddress()
{
	var cb = document.getElementById('cbCopyShipping');
	var boolDisabled = false;
	if (cb.checked)
	{
		boolDisabled = true;
		document.getElementById('MailingStreet').value = document.getElementById('BillingStreet').value;
		document.getElementById('MailingCity').value = document.getElementById('BillingCity').value;
		document.getElementById('MailingProvince').value = document.getElementById('BillingProvince').value;
		document.getElementById('MailingPostalCode').value = document.getElementById('BillingPostalCode').value;
		document.getElementById('MailingCountry').value = document.getElementById('BillingCountry').value;
	}
	SetMailingDisplay(boolDisabled);
}

function SetMailingDisplay(val)
{
	document.getElementById('MailingStreet').disabled = val;
	document.getElementById('MailingCity').disabled = val;
	document.getElementById('MailingProvince').disabled = val;
	document.getElementById('MailingPostalCode').disabled = val;
	document.getElementById('MailingCountry').disabled = val;
}
