$(document).ready(function(){
	$("#mobile_number_field").mask("9999-9999-999");

	function getAge(birthDate) {
		var raw_date = birthDate;
		var dobArr = raw_date.split("/");
		var dob = new Date();
		dob.setFullYear(dobArr[2], dobArr[0]-1, dobArr[1]);
		
		var now = new Date();
		
		function isLeap(year) {
		return (((year % 4)==0) && ((year % 100)!=0) || ((year % 400)==0));
		}
		
		// days since the birthdate    
		var days = Math.floor((now.getTime() - dob.getTime())/1000/60/60/24);
		var age = 0;
		// iterate the years
		for (var y = dob.getFullYear(); y <= now.getFullYear(); y++){
		var daysInYear = isLeap(y) ? 366 : 365;
			if (days >= daysInYear){
			  days -= daysInYear;
			  age++;
			  // increment the age only if there are available enough days for the year.
			}
		}
		return age;
	}
	jQuery.validator.addMethod("minimumAge", function(element) {
			return getAge(element) >= 13;
	});
	
	// validate signup form on keyup and submit
	var validator = $("#registerForm").validate({
		errorLabelContainer: "#error_container",
		wrapper: "li",
		errorClass: "reg_error",
		rules: {
		firstname: "required",
		lastname: "required",
		birthdate: {
			date: true,
			required: true,
			minimumAge: true
		}, 
		consent: {
		  required: function(element) {
			  var gage = getAge($("#birthdate").val());
			  if(gage >=13 && gage < 18){
				 $("#ls_consent").show();
				 return true;
			  } else {
				 $("#ls_consent").hide();
				 return false;
			  }
		  }
		},
		gender: "required",
		mobile: {
			required:true,
			NumberFormat: true,
			remote: "check_mobile.php"
		},
		username: {
			required: true,
			NoSpCharacters: true,
			rangelength:[3,10],
			remote: "check_username.php"
		},
		password: {
			required: true,
			NoSpCharacters: true,
			rangelength:[3,8]
		},
		re_password: {
			required: true,
			equalTo: "#password"
		},
		email: {
			required: true,
			email: true, 
			remote: "check_email.php"
		},
		security_question: "required",
		security_answer: "required",
		agree: "required"
		},
		messages: {
			firstname: "Please enter your firstname",
			lastname: "Please enter your lastname",
			birthdate: {
				date: "Please enter a valid date of birth in mm/dd/yyyy format",
				required: "Please enter date of birth in mm/dd/yyyy format",
				minimumAge: "Under 13 years old are not allowed to register"
			}, 
			consent: "If you are under 18 your must have your parent's consent to register, by proceeding with your registration, it means your parents have given permission.",
			gender: "Please select your gender",
			mobile: {
				required: "Please enter your mobile number",
				NumberFormat: "Please enter your mobile number in xxxx-xxxx-xxx format",
				remote: jQuery.format("Mobile number {0} is already in use")
			},
			username: {
				required: "Please enter a username",
				NoSpCharacters: "Username must be in alpha-numeric characters",
				rangelength: "Username must be alpha-numeric min of 3 and max. of 10 characters",
				remote: jQuery.format("Username {0} is already in use")
			},
			password: {
				required: "Please enter your password",
				NoSpCharacters: "Password must be in alpha-numeric min of 3 and max. of 8 characters",
				rangelength: "Password must be alpha-numeric min of 3 and max. of 8 characters"
			},
			re_password: {
				required: "Please enter your password",
				equalTo: "Please enter the same password as above"
			},
			email: {
				required: "Please enter a valid email address",
				email: "Please enter a valid email address",
				remote: jQuery.format("Email {0} is already in use")
			},
			security_question: "Select your security question",
			security_answer: "Enter your security answer",
			agree: "Please accept our terms&condition"
		},
		invalidHandler: function(form, validator) {
			$("#error_container").show();
		},
		unhighlight: function(element, errorClass) {
			if (this.numberOfInvalids() == 0) {
				$("#error_container").hide();
			}
			$(element).removeClass(errorClass);
		}
	});
	$("#ls_consent").hide();
	$("#birthdate").mask("99/99/9999");
	$("#mobile").mask("9999-9999-999");

	$("#birthdate").blur(function() {
	  $("#consent").valid();
	});
	$("#terms").colorbox();
	$("#fr_terms").colorbox();
	
	// validate signup form on keyup and submit
	var validator = $("#fullRegForm").validate({
		errorClass: "warning",
		rules: {
			fr_firstname: "required",
			fr_lastname: "required",
			fr_birthdate: {
				date: true,
				required: true,
				minimumAge: true
			}, 
			fr_consent: {
			  required: function(element) {
				  var age = getAge($("#fr_birthdate").val());
				  if(age >=13 && age < 18){
					  $("#reg_consent").show();
					  return true;
				  } else {
					  $("#reg_consent").hide();
					  return false;
				  }
			  }
			},
			fr_gender: "required",
			fr_mobile: {
				required:true,
				NumberFormat:true,
				remote:"check_mobile.php"
			},
			fr_username: {
				required: true,
				NoSpCharacters: true,
				rangelength:[3,10],
				remote : "check_username.php"

			},
			fr_password: {
				required: true,
				NoSpCharacters: true,
				rangelength:[3,8]
			},
			fr_re_password: {
				required: true,
				equalTo: "#fr_password"
			},
			fr_email: {
				required: true,
				email: true,
				remote : "check_email.php"
			},
			fr_security_question: "required",
			fr_security_answer: "required",
			fr_agree: "required"
		},
		messages: {
			fr_firstname: "Please enter your firstname",
			fr_lastname: "Please enter your lastname",
			fr_birthdate: {
				date: "Please enter a valid date of birth in mm/dd/yyyy format",
				required: "Please enter date of birth in mm/dd/yyyy format",
				minimumAge: "Under 13 years old are not allowed to register"
			}, 
			fr_consent: "If you are under 18 your must have your parent's consent to register, by proceeding with your registration, it means your parents have given permission.",
			fr_gender: "Please select your gender",
			fr_mobile: {
				required: "Please enter your mobile number",
				NumberFormat: "Please enter your mobile number in xxxx-xxxx-xxx format",
				remote: jQuery.format("Mobile number {0} is already in use")
			},
			fr_username: {
				required: "Please enter a username",
				NoSpCharacters: "Username must be alpha-numeric, min of 3 and max. of 10 characters",
				rangelength: "Username must be alpha-numeric, min of 3 and max. of 10 characters",
				remote: jQuery.format("Username {0} is already in use")
			},
			fr_password: {
				required: "Please enter your password, alpha-numeric min of 3 and max. of 8 characters",
				NoSpCharacters: "Password must be alpha-numeric, min of 3 and max. of 10 characters",
				rangelength: "Password must be alpha-numeric, min of 3 and max. of 8 characters"
			},
			fr_re_password: {
				required: "Please enter the same password as above",
				equalTo: "Please enter the same password as above"
			},
			fr_email: {
				required : "Email is required",
				email : "Please enter a valid email address",
				remote: jQuery.format("Email {0} is already in use")
			},
			fr_security_question: "Select your security question",
			fr_security_answer: "Enter your security answer",
			fr_agree: "Please accept our terms&condition"
		}
	});
	$("#reg_consent").hide();
	$("#fr_birthdate").mask("99/99/9999");
	$("#fr_mobile").mask("9999-9999-999");
	$("#fr_birthdate").blur(function() {
	  $("#fr_consent").valid();
	});
});
