function getObjectById(name) {
	if (!name) return (null);
	if (document.getElementById) {
		var obj = document.getElementById(name);
		if (obj) return (obj);
	}
	if (document.all) {
		var obj = document.all[name];
		if (obj) return (obj);
	}
	if (document.forms) {
		var objs;
		for (var i = 0; i < document.forms.length; i++) {
			objs = document.forms[i].elements;
			if (objs[name]) return (objs[name]);
		}
	}
	alert("The object '" + name + "' could not be found, please inform us via email (info@beautyisskindeep.com) that this page is not working correctly.");
	return (null);
}

function back() {
	history.back();
}

function close() {
	window.close();
}

function submit(id, validationFunction) {
	var formObject = getObjectById(id);
	if (formObject != null) {
		if (validationFunction != null) {
			if (eval(validationFunction(id))) {
				formObject.submit();
			}
		} else {
			formObject.submit();
		}
	}
}

var validationMessagePrefix = "The form could not be submitted because of the following errors: \n\n";

function validateQuantity(id) {
	var formObject = getObjectById(id);
	if (formObject != null) {
		var success = true;
		var msg = validationMessagePrefix;
		if (formObject.quantity.value == "") {
			success = false;
			msg += "- Quantity is a required field\n";
		} else if (isNaN(parseInt(formObject.quantity.value))) {
			success = false;
			msg += "- Quantity must be a valid number\n";
		} else if (parseInt(formObject.quantity.value) < 1) {
			success = false;
			msg += "- Quantity must be greater than 0\n";
		}
		if (!success) {
			alert(msg);
		}
		return success;
	}
}

function validateFriend(id) {
	var formObject = getObjectById(id);
	if (formObject != null) {
		var success = true;
		var msg = validationMessagePrefix;
		if (formObject.emailAddress.value == "") {
			success = false;
			msg += "- Friend's email is a required field\n";
		}
		if (formObject.emailSubject.value == "") {
			success = false;
			msg += "- Subject is a required field\n";
		}
		if (formObject.emailBody.value == "") {
			success = false;
			msg += "- Body is a required field\n";
		}
		if (!success) {
			alert(msg);
		}
		return success;
	}
}

function validateCurrency(id) {
	var formObject = getObjectById(id);
	if (formObject != null) {
		var success = true;
		var msg = validationMessagePrefix;
		if (formObject.c.value == "") {
			success = false;
			msg += "- Amount is a required field\n";
		}
		if (isNaN(parseInt(formObject.c.value))) {
			success = false;
			msg += "- Amount must be a valid number\n";
		}
		if (!success) {
			alert(msg);
		}
		return success;
	}
}

function validateCheckout(id) {
	var formObject = getObjectById(id);
	if (formObject != null) {
		var success = true;
		var msg = validationMessagePrefix;
		if (formObject.name.value == "") {
			success = false;
			msg += "- Name is a required field\n";
		}
		if (formObject.dcountry.options[formObject.dcountry.selectedIndex].value == "UK") {
			if (formObject.postcode.value == "") {
				success = false;
				msg += "- Postcode is a required field\n";
			}
		}
		if (formObject.property.value == "") {
			success = false;
			msg += "- House number / name is a required field\n";
		}
		if (formObject.address.value == "") {
			success = false;
			msg += "- Address is a required field\n";
		}
		if (formObject.phone.value == "") {
			success = false;
			msg += "- Phone is a required field\n";
		}
		if (formObject.email.value == "") {
			success = false;
			msg += "- Email is a required field\n";
		} else if (!isValidEmail(formObject.email.value)) {
			success = false;
			msg += "- Email field is not valid, ensure it is in the form name@domain.com\n";
		}
		if (formObject.dcountry.options[formObject.dcountry.selectedIndex].value == "UK") {
			if (formObject.dpostcode.value == "") {
				success = false;
				msg += "- Delivery postcode is a required field\n";
			}
		}
		if (formObject.dproperty.value == "") {
			success = false;
			msg += "- Delivery house number / name is a required field\n";
		}
		if (formObject.daddress.value == "") {
			success = false;
			msg += "- Delivery address is a required field\n";
		}
		if (formObject.dcountry.options[formObject.dcountry.selectedIndex].value == "") {
			success = false;
			msg += "- Delivery country is a required field\n";
		}
		if (formObject.dphone.value == "") {
			success = false;
			msg += "- Delivery phone is a required field\n";
		}
		if (!success) {
			alert(msg);
		}
		formObject.address.value = formObject.property.value + " " + formObject.address.value;
		formObject.daddress.value = formObject.dproperty.value + " " + formObject.daddress.value;
		return success;
	}
}

function validatePayment(id) {
	var formObject = getObjectById(id);
	if (formObject != null) {
		var success = true;
		var msg = validationMessagePrefix;
		var cardNumber = stripSpaces(formObject.cc_no.value);
		if (formObject.cc_type.selectedIndex < 0) {
			success = false;
			msg += "- Card type is a required field\n";
		}
		if (cardNumber == "") {
			success = false;
			msg += "- Card number is a required field\n";
		} else if (isNaN(parseInt(cardNumber))) {
			success = false;
			msg += "- Card number must be a valid number\n";
		}
		if (formObject.cc_avs_no.value == "") {
			success = false;
			msg += "- CV2 number is a required field\n";
		} else if (isNaN(parseInt(formObject.cc_avs_no.value))) {
			success = false;
			msg += "- CV2 number must be a valid 3 digit number, you can find this on the reverse of your card\n";
		}
		if (formObject.cc_expires_1.selectedIndex < 0 || formObject.cc_expires_2.selectedIndex < 0) {
			success = false;
			msg += "- Expiry date is a required field\n";
		}
		if (success) {
			// Check for card test numbers
			if (cardNumber == "4242424242424242" || cardNumber == "0") {
				success = false;
				msg += "- Card number is invalid and cannot be accepted\n";
			}
		}
		if (success) {
			// Complete checksum on card number
			if (isValidCardNumber(cardNumber)) {
				// Check the date is valid
				var expiryMonth = parseInt(formObject.cc_expires_1.options[formObject.cc_expires_1.selectedIndex].value, 10);
				var expiryYear = parseInt(formObject.cc_expires_2.options[formObject.cc_expires_2.selectedIndex].value, 10);
				if (expiryMonth <= currentMonth && expiryYear <= currentYear) {
					success = false;
					msg += "- Expiry date is invalid, your card has already expired\n";
				}
				var selectedType = formObject.cc_type.options[formObject.cc_type.selectedIndex].value;
				if (selectedType == "Visa Delta" || selectedType == "Switch") {
					var fromMonth = parseInt(formObject.cc_from_1.options[formObject.cc_from_1.selectedIndex].value, 10);
					var fromYear = parseInt(formObject.cc_from_2.options[formObject.cc_from_2.selectedIndex].value, 10);
					if (expiryYear < fromYear || expiryYear == fromYear && fromMonth > currentMonth) {
						success = false;
						msg += "- Expiry date is invalid, your expiry date is earlier than your valid from date\n";
					}
					if (fromYear > currentYear || fromYear == currentYear && fromMonth > currentMonth) {
						success = false;
						msg += "- From date is invalid, your card is not valid yet\n";
					}
				}
			} else {
				success = false;
				msg += "- Card number is invalid, please recheck and try again\n";
			}
		}
		if (!success) {
			alert(msg);
		}
		return success;
	}
}

function validatePersonalShopper(id) {
	var formObject = getObjectById(id);
	if (formObject != null) {
		var success = true;
		var msg = validationMessagePrefix;
		if (formObject.question_1.options[formObject.question_1.selectedIndex].value == "") {
			success = false;
			msg += "- Question 1 is a required field\n";
		}
		if (!formObject.question_2[0].checked && !formObject.question_2[1].checked) {
			success = false;
			msg += "- Question 2 is a required field\n";
		}
		if (!formObject.question_3[0].checked && !formObject.question_3[1].checked && !formObject.question_3[2].checked) {
			success = false;
			msg += "- Question 3 is a required field\n";
		}
		if (!formObject.question_4[0].checked && !formObject.question_4[1].checked) {
			success = false;
			msg += "- Question 4 is a required field\n";
		}
		if (!formObject.question_5[0].checked && !formObject.question_5[1].checked) {
			success = false;
			msg += "- Question 5 is a required field\n";
		}
		if (!formObject.question_6[0].checked && !formObject.question_6[1].checked) {
			success = false;
			msg += "- Question 6 is a required field\n";
		}
		if (!formObject.question_7[0].checked && !formObject.question_7[1].checked) {
			success = false;
			msg += "- Question 7 is a required field\n";
		}
		if (!formObject.question_8[0].checked && !formObject.question_8[1].checked) {
			success = false;
			msg += "- Question 8 is a required field\n";
		}
		if (!success) {
			alert(msg);
		}
		return success;
	}
}

function isValidEmail(email) {
	var valid = true;
	var pattern = /^[0-9a-zA-Z_\-\.]+\x40([0-9a-zA-Z]+[\-|\.]{0,1})*([0-9a-zA-Z]+\.)[a-zA-Z]{2,}$/;
	valid = (email.match(pattern) != null);
	return valid;
}

function isValidCardNumber(cardNumber) {
	var checksum = 0;
	var digit;
	var cardNumberLength = cardNumber.length;
	if (cardNumberLength % 2 != 0) {
		cardNumberLength += 1;
		cardNumber = "0" + cardNumber;
	}
	for (var i = 0; i < cardNumberLength; i++) {
		digit = parseInt(cardNumber.charAt(i));
		if (i % 2 == 0) {
			digit *= 2;
			if (digit > 9) {
				digit = parseInt(digit / 10) + parseInt(digit % 10);
			}
		}
		checksum += digit;
	}
	if (checksum % 10 == 0) {
		return true;
	} else {
		return false;
	}
}

function stripSpaces(value) {
	var striped = new String(value).replace(" ", "");
	return striped;
}

function updateBasket() {
	var formObject = getObjectById('basketForm');
	if (formObject != null) {
		formObject.checkout.value = "no";
		formObject.submit();
	}
}

function checkout() {
	var formObject = getObjectById('basketForm');
	if (formObject != null) {
		formObject.checkout.value = "go";
		formObject.submit();
	}
}

function addressCopy(id) {
	var formObject = getObjectById(id);
	if (formObject != null) {
		if (formObject.delSame.checked) {
			formObject.daddress.value = formObject.address.value;
			formObject.dpostcode.value = formObject.postcode.value;
			formObject.dphone.value = formObject.phone.value;
			formObject.dproperty.value = formObject.property.value;
		} else {
			formObject.daddress.value = "";
			formObject.dpostcode.value = "";
			formObject.dphone.value = "";
			formObject.dproperty.value = "";
		}
	}
}
