
function isFieldType(re, lbl, fld, rqd, minLen, maxLen) {
	var isValid = "";
	fld.style.backgroundColor = "white";
	if (fld.value.length == 0) {
		if (rqd) {
			isValid = lbl + " is required\n";
			fld.style.backgroundColor = "pink";
		}
	} else {
		if (maxLen > 0 && (fld.value.length < minLen || fld.value.length > maxLen )) {
			isValid = lbl + " must have between " + minLen + " and " + maxLen + " characters\n";
			fld.style.backgroundColor = "pink";
		} else {
			if (re.test(fld.value)==false) {
				isValid = lbl + " is not valid\n";	
				fld.style.backgroundColor = "pink";
			}
		}
	}
	return isValid;
}

function isForename(fld) {
	var pattern = /^[A-Za-z' -]*$/;
	return isFieldType(pattern, "Forename", fld, true, 2, 32);
}

function isSurname(fld) {
	var pattern = /^[A-Za-z' -]*$/;
	return isFieldType(pattern, "Surname", fld, true, 2, 64);
}

function isFullName(fld) {
	var pattern = /^[A-Za-z' -]*$/;
	return isFieldType(pattern, "Name", fld, true, 2, 50);
}

function isAddress1(fld) {
	var pattern = /^[A-Za-z0-9,' -]*$/;
	return isFieldType(pattern, "Address 1", fld, true, 2, 50);
}

function isAddress2(fld) {
	var pattern = /^[A-Za-z0-9,' -]*$/;
	return isFieldType(pattern, "Address 2", fld, false, 2, 50);
}

function isCity(fld) {
	var pattern = /^[A-Za-z0-9,' -]*$/;
	return isFieldType(pattern, "City", fld, true, 2, 40);
}

function isCounty(fld) {
	var pattern = /^[A-Za-z0-9,' -]*$/;
	return isFieldType(pattern, "County", fld, false, 2, 40);
}

function isUKPostCode(fld) {
	var pattern = /^[A-Z]{1,2}[1-9][A-Z0-9]{0,1} [0-9][A-Z]{2}$/;
	return isFieldType(pattern, "Post Code", fld, true, 0, 0);
}

function isUSZIPCode(fld) {
	var pattern = /^[0-9]{5}(-[0-9]{4})?$/;
	return isFieldType(pattern, "ZIP", fld, true, 2, 32);
}

function isOtherPostCode(fld) {
	var pattern = /^[A-z0-9\/ -]*$/;
	return isFieldType(pattern, "Post Code", fld, false, 2, 32);
}

function isPhoneArea(fld) {
	var pattern =  /^[0-9 -]*$/;
	return isFieldType(pattern, "Phone Area", fld, false, 2, 50);
}

function isPhoneNumber(fld) {
	var pattern =  /^[0-9 -]*$/;
	return isFieldType(pattern, "Phone Number", fld, false, 2, 50);
}

function isMobileNumber(fld) {
	var pattern =  /^[0-9 -]*$/;
	return isFieldType(pattern, "Mobile Number", fld, false, 2, 50);
}

function isEmail(fld) {
	var pattern = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*\.[A-Za-z]{2,4}$/;
	return isFieldType(pattern, "Email", fld, true, 2, 127);
}

function isSimplePassword(fld) {
	var pattern = /^[A-Za-z0-9]*$/;
	return isFieldType(pattern, "Password", fld, true, 8, 16);
}

function isComplexPassword(fld) {
	var pattern = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[A-Za-z0-9]*$/;
	return isFieldType(pattern, "Password", fld, true, 8, 16);
}

function passwordsMatch(pw1, pw2) {
	if (pw1.value == pw2.value) {
		pw2.style.backgroundColor = "white";
		return "";
	} else {
		pw2.style.backgroundColor = "pink";
		return "Passwords don't match";
	}
}

function isMemorablePlace(fld) {
	var pattern = /^.*$/;
	return isFieldType(pattern, "Memorable Place", fld, true, 2, 50);
}

function isMemorableDate(fld) {
	var pattern = /^.*$/;
	return isFieldType(pattern, "Memorable Date", fld, true, 5, 50);
}

function isMemorablePlaceOrDate(fld) {
	var pattern = /^.*$/;
	return isFieldType(pattern, "Memorable Place or Date", fld, true, 5, 50);
}

function isMessage(fld) {
	var pattern = /^[^:]*$/;
	return isFieldType(pattern, "Message", fld, true, 2, 2000);
}

function isItemCode(fld) {
	var pattern = /^.*$/;
	return isFieldType(pattern, "Item Code", fld, true, 2, 20);
}

function isProductCode(fld) {
	var pattern = /^.*$/;
	return isFieldType(pattern, "Product Code", fld, false, 2, 50);
}

function isItemName(fld) {
	var pattern = /^.*$/;
	return isFieldType(pattern, "Item", fld, true, 2, 127);
}

function isItemCost(fld) {
	var pattern = /^[0-9]{0,4}(.[0-9]{1,2})?$/;
	return isFieldType(pattern, "Price", fld, true, 1, 7);
}

function isItemDescription(fld) {
	var pattern = /^[\s\S]*$/;
	return isFieldType(pattern, "Description", fld, false, 2, 2000);
}

function isItemMedia(fld) {
	var pattern = /^.*$/;
	return isFieldType(pattern, "Media", fld, false, 2, 100);
}

function isItemPicture(fld) {
	var pattern = /^\w+\.(jpg|jppeg|gif)$/i;
	return isFieldType(pattern, "Picture", fld, false, 5, 100);
}

function isDate(fld) {
	var pattern = /^[0-3]?[0-9]\/[0-1]?[0-9]\/[0-9]{1,4}$/;
	var errMsg = isFieldType(pattern, "Date", fld, true, 5, 10);
	if (errMsg.length == 0) {
		var date_array = fld.value.split('/');
		var day = parseInt(date_array[0], 10);
		var month = parseInt(date_array[1], 10) - 1;
		var year = parseInt(date_array[2], 10);
		if (year < 2000) { year += 2000; }
		var source_date = new Date(year,month,day);
		if(year != source_date.getFullYear() || month != source_date.getMonth() || day != source_date.getDate())
		{
		 errMsg = "Date is not valid\n";
		}
	}
    return errMsg;
}

function fixPostCode(fld) {
  if (fld.value.length > 0) {
	var postCode = fld.value.toUpperCase().replace(/^\s+|\s+$/g,"");
    var pattern = /^[A-Z]{1,2}[1-9][A-Z0-9]{0,1} [0-9][A-Z]{2}$/;
    if (pattern.test(postCode)==true) {
        fld.value = postCode;
	} else {
      var pattern = /^[A-Z]{1,2}[1-9][A-Z0-9]?[0-9][A-Z]{2}$/;
      if (pattern.test(postCode)==true) {
        var pattern = /[0-9][A-Z]{2}/;
        fld.value = postCode.replace(pattern, " $&");
      }
    }
  }
}
  
function fixQuantity(fld) {
	fld.value = fld.value.replace(/\D/g, "");
	fld.value = parseInt(fld.value);
	if (isNaN(fld.value)) {
		fld.value = 1;
	} else {
		if (fld.value == 0) {
			fld.value = 1;
		} else {
			if (fld.value > 32767) {
				fld.value = 32767;
			}
		}
	}
}

function fixCost(fld) {
	fld.value = fld.value.replace(/[^\d\.]/g, "");
	fld.value = parseFloat(fld.value);
	if (isNaN(fld.value)) {
		fld.value = 0;
	} else {
		fld.value = Math.round(fld.value * 100) / 100  ;
	}
}
