// 'global' misc_form_functions.js v1.2
var monthdays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

function getDaysForMonth(month, year) {
	if ((month == 2) && (year % 4 == 0) && ((year % 400 == 0) || !(year % 100 == 0))) {
		return (monthdays[month-1] + 1);
	} else {
		return (monthdays[month-1]);
	}
}

function formDateCheck(datetype, formDayField, formMonthField, formYearField, dateToday, yearsArray) {
	// Check a complete date has been entered
	if (formDayField.selectedIndex == 0) {
		return(formError("Please enter a "+datetype+" Day", formDayField));
	}
	if (formMonthField.selectedIndex == 0) {
		return(formError("Please enter a "+datetype+" Month", formMonthField));
	}
	if (formYearField.selectedIndex == 0) {
		return(formError("Please enter a "+datetype+" Year", formYearField));
	}
	// Check not before today
	if (formYearField.selectedIndex == 1) { //this year
		if (formMonthField.selectedIndex < (dateToday.getMonth() + 1)) { //before this month
			return(formError("Invalid "+datetype+" date, before today", formMonthField));
		} else if (formMonthField.selectedIndex == (dateToday.getMonth() + 1)) { //this month
			if (formDayField.selectedIndex < dateToday.getDate()) { //before this date
				return(formError("Invalid "+datetype+" date, before today", formDayField));
			} else if (formDayField.selectedIndex == dateToday.getDate()) { //today
				return(formError("Sorry, you cannot choose a "+datetype+" date of today", formDayField));
			}
		}
	// Check not more than a year ahead
	} else if (formYearField.selectedIndex == 2) { //next year
		if (formMonthField.selectedIndex > (dateToday.getMonth() + 1)) { //after this month
			return(formError("Sorry, you cannot choose a "+datetype+" date more than a year in advance", formMonthField));
		} else if (formMonthField.selectedIndex == (dateToday.getMonth() + 1)) { //this month
			if (formDayField.selectedIndex > dateToday.getDate()) { //after this date
				return(formError("Sorry, you cannot choose a "+datetype+" date more than a year in advance", formDayField));
			}
		}
	}
	// Check valid date
	if (formDayField.selectedIndex > getDaysForMonth(formMonthField.selectedIndex, yearsArray[formYearField.selectedIndex])) {
		return(formError("Invalid "+datetype+" date", formDayField));
	}
	return true;
}

function formBlankError(message, formfield) {
	if (formfield != null) {
		formfield.value = "";
	}
	return formError(message, formfield);
}

function formError(message, formfield) {
	alert(message);
	if (formfield != null) {
		formfield.focus();
	}
	return false;
}

function isBlank(fieldvalue) {
	if (fieldvalue == null) return true;
	if (fieldvalue.length == 0) return true;
	var blankchars = " \t\n\r";
	for (i=0;i<fieldvalue.length;i++) {
		letter = fieldvalue.charAt(i);
		if (blankchars.indexOf(letter) == -1) return false;
	}
	return true;
}

function hasBlank(fieldvalue) {
	if (fieldvalue.indexOf(' ') != -1) return true;
	if (fieldvalue.indexOf('\t') != -1) return true;
	if (fieldvalue.indexOf('\n') != -1) return true;
	return false;
}

function isEmail(email) {
	if (isBlank(email)) return false;
	if (hasBlank(email)) return false;
	atpos = email.indexOf('@');
	if ((atpos < 1) || (atpos > email.length - 4)) return false;
	if (email.charAt(atpos + 1) == '.') return false;
	dotpos = email.lastIndexOf('.');
	if ((dotpos < atpos + 2) || (dotpos > email.length - 2)) return false;
	return true;
}

function checkBlank(label, formfield) {
	if (isBlank(formfield.value)) {
		return(formBlankError("Please enter " + label, formfield));
	}
	return true;
}

function checkEmail(label, formfield) {
	if (!checkBlank(label, formfield)) return false;
	if (hasBlank(formfield.value)) {
		return(formError("Please check there are no spaces in " + label, formfield));
	}
	if (!isEmail(formfield.value)) {
		return(formError("Please check " + label + " is correct", formfield));
	}
	return true;
}

function checkNumber(label, formfield) {
	if (!checkBlank("the "+label, formfield)) return false;
	if (isNaN(formfield.value)) {
		return(formBlankError("Please enter a valid "+label, formfield));
	}
	return true;
}

function checkOrderReference(label, formfield) {
	if (!checkBlank("the "+label, formfield)) return false;
	if (formfield.value.length != 7) {
		return(formError("Please enter a valid "+label, formfield));
	}
	return true;
}

function formatPenceAs(inputNum, currency) {
	inputNum = parseInt(inputNum);
	sign = ""; pounds = "0"; pence = "00";
	if (isNaN(inputNum)) {
		inputNum = "";
	} else {
		if (inputNum < 0) {
			sign = "-";
			inputNum *= -1;
		}
		inputTxt = "" + inputNum;
		txtLen = inputTxt.length;

		if (txtLen < 3) {
			pounds = "0";
			pence = inputTxt;
			while (pence.length < 2) {
				pence = "0" + pence;
			}
		} else {
			pounds = inputTxt.substr(0, txtLen-2);
			pence = inputTxt.substr(txtLen-2,txtLen);
		}
	}
	return sign+currency+pounds+"."+pence;
}

function escapeField(formfield) {
		formfield.value = replace(formfield.value,'"',"'");
}

function setList(type, category, string, formName, changeFunc) {
	writeout(type + "_list", "<INPUT TYPE=HIDDEN NAME='" + type + "list' VALUE='" + category + "'><SELECT NAME='" + type + "' SIZE=1 onChange='" + changeFunc + "'>" + string + "</SELECT>");
	eval("document." + formName + "." + type + ".disabled = " + (category == 0));
}

function showCategory(type, category, formName, changeFunc) {
	if (eval("document." + formName + "." + type + "list.value != " + category)) {
		string = eval(type + "list[" + category + "]");
		setList(type, category, string, formName, changeFunc);
	}
}
