﻿$(document).ready(function () {
	//global vars
	var form = $("#aspnetForm");
	var firstName = $("#FirstName");
	var firstNameInfo = $("#firstNameInfo");
	var lastName = $("#LastName");
	var lastNameInfo = $("#lastNameInfo");
	var email = $("#SubscribeEmail");
	var emailInfo = $("#emailInfo");
	var postcode = $("#Postcode");
	var postcodeInfo = $("#postcodeInfo");
	var dobDay = $("#DOBDay");
	var dobMonth = $("#DOBMonth");
	var dobYear = $("#DOBYear");
	var dobInfo = $("#dobInfo");
	var consentGiven = $("#ConsentGiven");
	var consentGivenInfo = $("#consentGivenInfo");
	var isOver18 = $("#IsOver18");
	var isOver18Info = $("#isOver18Info");

	//On blur
	firstName.blur(validateFirstName);
	lastName.blur(validateLastName);
	email.blur(validateEmail);
	postcode.blur(validatePostcode);
	dobDay.change(validateDob);
	dobMonth.change(validateDob);
	dobYear.change(validateDob);

	//On key press
	firstName.keyup(validateFirstName);
	lastName.keyup(validateLastName);
	email.keyup(validateEmail);
	postcode.keyup(validateLastName);

	//On Submitting
	form.submit(function () {
		if (validateFirstName() & validateLastName() & validateEmail() & validatePostcode() & validateDob() & validateConsentGiven() & validateIsOver18())
			return true
		else
			return false;
	});

	//validation functions
	function validateFirstName() {
		//if it's NOT valid
		if (firstName.val().length < 2) {
			firstNameInfo.text("First Name is not valid");
			firstNameInfo.addClass("error");
			return false;
		}
		//if it's valid
		else {
			firstNameInfo.text("");
			firstNameInfo.removeClass("error");
			return true;
		}
	}
	function validateLastName() {
		//if it's NOT valid
		if (lastName.val().length < 2) {
			lastNameInfo.text("Last Name is not valid");
			lastNameInfo.addClass("error");
			return false;
		}
		//if it's valid
		else {
			lastNameInfo.text("");
			lastNameInfo.removeClass("error");
			return true;
		}
	}
	function validateEmail() {
		//testing regular expression
		var a = $("#SubscribeEmail").val();
		var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/;
		//if it's valid email
		if (filter.test(a)) {
			emailInfo.text("");
			emailInfo.removeClass("error");
			return true;
		}
		//if it's NOT valid
		else {
			emailInfo.text("E-mail is not valid");
			emailInfo.addClass("error");
			return false;
		}
		return true;
	}
	function validatePostcode() {
		//if it's NOT valid
		if (postcode.val().length < 3) {
			postcodeInfo.text("Postcode is not valid");
			postcodeInfo.addClass("error");
			return false;
		}
		//if it's valid
		else {
			postcodeInfo.removeClass("error");
			postcodeInfo.text("");
			return true;
		}
	}
	function validateDob() {
		var day = dobDay.val();
		var month = dobMonth.val();
		var year = dobYear.val();
		if ((day.length == 0) || (month.length == 0) || (year.length == 0)) {
			dobInfo.text("Date of Birth is not valid");
			dobInfo.addClass("error");
			return false;
		}
		else {
			var dob = new Date(parseInt(year), (parseInt(month) - 1), parseInt(day));
			var now = new Date();
			var dob18 = new Date((now.getFullYear() - 18), now.getMonth(), now.getDate());
			if (dob >= dob18) {
				dobInfo.text("You must be over 18");
				dobInfo.addClass("error");
				return false;
			} else {
				dobInfo.removeClass("error");
				dobInfo.text("");
				return true;
			}
		}
	}
	function validateConsentGiven() {
		if (consentGiven[0].checked == false) {
			consentGivenInfo.text("Required");
			consentGivenInfo.addClass("error");
			return false;
		}
		else {
			consentGivenInfo.removeClass("error");
			consentGivenInfo.text("");
			return true;
		}
	}
	function validateIsOver18() {
		if (isOver18[0].checked == false) {
			isOver18Info.text("Required");
			isOver18Info.addClass("error");
			return false;
		}
		else {
			isOver18Info.removeClass("error");
			isOver18Info.text("");
			return true;
		}
	}
});
