/* Form input validation functions */

/* required field (any character) */
function valReq(st) {
	var results = "";
	 if (!st == null || !st == ""){results = "pass";}
	 else {results = "Please complete required field.\n";}
	return results;
}

/* any email address */
function valEmail(add) {
	var results = "";
	 if (add.match(/^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/)){results = "pass";}
	 else {results = "Please supply a valid email address.\n";}
	return results;
}

/* any soton email address */
function valSotEmail(add) {
	var results = "";
	 if (add.match(/^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@([\w]+\.)?soton\.ac\.uk$/)){results = "pass";}
	 else {results = "Please supply a valid University of Southampton email address.\n"	;}
	return results;
}

/* any UK phone number */
function valUKPhone(num) {
	var results = "";
	 if (num.match(/^\(?\d\d\d\)? ?\d\d\)? ?\d\d\d ?\d\d\d$/)){results = "pass";}
	 else {results = "Please supply a valid UK phone number (including area code).\n";}
	return results;
}

/* any phone number */
function valPhone(num) {
	var results = "";
	 if (num.match(/^[\(\) -+\d]{7,24}$/)){results = "pass";}
	 else {results = "Please supply a valid phone number (including area code).\n";}
	return results;
}

/* soton staff number */
function valSotStaffNo(num) {
	var results = "";
	 if (num.match(/^(1-)?1\d{6}$/)){results = "pass";}
	 else {results = "Please supply a valid University of Southampton staff number.\n";}
	return results;
}

/* soton ID number */
function valSotIDNo(num) {
	var results = "";
	 if (num.match(/^(((1-|2-|3-|4-|5-|6-|7-)?\d{7,8})|(X\d{6}))$/)){results = "pass";}
	 else {results = "Please supply a valid University of Southampton ID number.\n"	;}
	return results;
}

/* ISS user name */
function valISSUser(id) {
	var results = "";
	 if (id.match(/^[a-z][a-z0-9]{1,7}$/)){results = "pass";}
	 else {results = "Please supply a valid ISS username.\n";}
	return results;
}

/* Names (just checks for at least 6 letters and/or spaces) */
function valName(name) {
	var results = "";
	if (name.match(/^[a-zA-Z| ]{5,}$/)) {results = "pass";}
	else {results = "Please supply your full name.\n"}
	return results;
}

/* School (just checks for at least 6 letters and/or spaces) */
function valSchool(name) {
	var results = "";
	if (name.match(/^[a-zA-Z| ]{3,}$/)) {results = "pass";}
	else {results = "Please supply your School name.\n";}
	return results;
}

/* comments (just checks for a string over 3 characters */
function valComment(txt) {
	var results = "";
	if (txt.length < 4) {results = "Please supply more than three characters.\n";}
	else {results = "pass"}
	return results;
}

/* any floating point number */
function valAnyNum(num) {
	var results = "";
	if (num.match(/^[0-9]*\.?[0-9]+$/)) {results = "pass";}
	else {results = "Please supply a number that uses only digits and\nzero or one decimal points.\n";}
	return results;
}

/* number in any format */
function valNumDigits(num) {
	var results = "";
	if (num.match(/^[0-9]+$/)) {results = "pass";}
	else {results = "Please supply a number comprised of digits only.\n";}
	return results;
}

/* UG course code - single */
function valUGCourseC(code) {
	var results = "";
	if (code.match(/^[A-Za-z]{1,2}[0-9]{2,3}$/)) {results = "pass";}
	else {results = "Please supply a valid course code.\n";}
	return results;
}

/* UG course codes - list */
function valUGCourseCList(codes) {
	var results = "";
	if (codes.match(/^[A-Za-z]{1,2}[0-9]{2,3}((( |, |,)([A-Za-z]{1,2}[0-9]{2,3})+)+)?$/)) {results = "pass";}
	else {results = "Please list course codes, separated by spaces or commas.\n";}
	return results;
}

/* Date (format 'dd/mm/yyyy', 'dd mm yyyy' or 'dd-mm-yyyy') */
function valDate(dte) {
	var results = "";
	if (dte.match(/^(?:(?:0?[1-9]|1\d|2[0-8])(\/|-)(?:0?[1-9]|1[0-2]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:31(\/|-)(?:0?[13578]|1[02]))|(?:(?:29|30)(\/|-)(?:0?[1,3-9]|1[0-2])))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(29(\/|-)0?2)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/)) {results = "pass";}
	else {results = "Please supply a valid date in the format\n'dd/mm/yyyy' or 'dd-mm-yyyy'.\n";}
	return results;
}

/* Four-digit year */
function valYear(year) {
	var results = "";
	if (year.match(/^(19|20)\d\d$/)) {results = "pass";}
	else {results = "Please supply a valid four-digit year.\n";}
	return results;
}

/* UK Post Code */
function valPostCode(code) {
	var results = "";
	if (code.match(/^[A-Za-z]{1,2}[\d]{1,2}([A-Za-z])?\s?[\d][A-Za-z]{2}$/)) {results = "pass";}
	else {results = "Please supply a valid UK Post Code.\n";}
	return results;
}

/* Student Reference Number */
function valSRefNum(num) {
	var results = "";
	if (num.match(/^2\d{7}$/)) { results = "pass"; }
	else { results = "Please supply a valid Student Application Number (starting\nwith \'2\', followed by seven digits).\n"; }
}

/* Accommodation application number */
function valAccomAppNum(num) {
	var results = "";
	if (num.match(/^WEB-\d{6}$/i)) { results = "pass"; }
	else { results = "Please supply a valid Accommodation Application Number\n(starting with \'WEB-\', followed by six digits).\n"; }
}
