var checkForm = function (f) {
	var err = [];
	// loop over the elements, and require any with class="required"
	for (var xx=0; xx<f.elements.length; xx++) {
		var el = f.elements[xx];
		formFieldDefaultSubmit(el);
		if (/\brequired\b/.test(el.className) && el.value == '') {
			err.push(el.name.replace('_',' '));
		}
	}
	if (err.length) {
		var str = 'Your form cannot be submitted without more information.';
		if (err.length == 1) {
			str += 'The required field "'+ err[0] +'" must have an entry.\n\n';
		} else {
			str += 'These required fields must have an entry:\n\t';
			str += err.join('\n\t');
			str += '\n\n';
		}
		str += 'Please fill in all required field'+(err.length == 1 ?'':'s')+' and submit the form again.';
		alert(str);
		return false;
	} else {
		return true;
	}
}

// make the title of a form field into the default value when class="defaultToTitle"
var formFieldDefault = function (el, OnOff, SelectFocus) {
	var Val = el.value;
	var Def = el.title;
	if (OnOff) {
		if (Val == Def) el.value = '';
		el.className = el.className.replace(/\s*\bdefaultToTitleDefault\b/, '');
	} else {
		if (Val == '') {
			el.value = Def;
			el.className += ' defaultToTitleDefault';
		}
	}
	if (SelectFocus) {
		el.focus();
		el.select();
	}
}
var formFieldDefaultFocus  = function ()   { formFieldDefault(this, true,  true ); }
var formFieldDefaultBlur   = function ()   { formFieldDefault(this, false, false); }
var formFieldDefaultSubmit = function (el) { formFieldDefault(el,   true,  false); }

var formFieldDefaultLoad = function (f) {
	for (var xx=0; xx<f.elements.length; xx++) {
		var el = f.elements[xx];
		if (/\bdefaultToTitle\b/.test(el.className)) {
			el.onfocus = formFieldDefaultFocus;
			el.onblur  = formFieldDefaultBlur;
			formFieldDefault(el, false, false);
			el.className += ' defaultedToTitle';
		}
	}
	window.onbeforeunload = function(f) {
		return function() {
			for (var xx=0; xx<f.elements.length; xx++) {
				formFieldDefault(f.elements[xx], true, false);
			}
		}
	}(f);
}
