<!-- Copyright 2000 by void (aka Arjan Haverkamp)      -->
<!-- You are free to borrow and modify this Javascript -->
<!-- but keep this credit intact!                      -->
<!-- Thanks, arjan@avoid.org, http://www.avoid.org     -->

if (document.images) {
   var bang = new Image(); bang.src = "/pics/bang.gif";
   var star = new Image(); star.src = "/pics/star.gif";
   var blank = new Image(); blank.src = "/pics/pixel.gif";
}

function message(id, alt) {
	var ms = msgs[id];
	if (alt) ms = ms.replace(/#1/g, alt);
	alert(ms);
	return false;
} // End of Function

function preCheck() {
// This function is only needed, when the user hits the back- or
// forward-button in his browser. We need to check again, in order
// to let bangs and stars disappear.
	for (k = 0; k < document.js_form.elements.length; k++) {
		naam = document.js_form.elements[k].name;
		if (naam.charAt(0) == "j" && naam.charAt(1) == "s")
			checkField(document.js_form.elements[k], 1, true);
	}
} // End of Function

function inputCorrect(bool, img_name, first_time) {
// If 'bool' == true: 'img_name' becomes a blank.
// If 'bool' == false: 'img_name' becomes a bang.
	if (document.images) {
		if (bool)
			document.images[img_name].src = blank.src;
		else {
			if (first_time)
				document.images[img_name].src = star.src;
			else
            			document.images[img_name].src = bang.src;
		}
	}
} // End of Function

function checkField(ft, nr_required, first_time) {
// This function is called to check whether a required textfield was
// actually filled!
	if (!document.images) return;
	if ((ft.type == "select-multiple" || ft.type == "checkbox") && !nr_required)
		nr_required = 1;
     
	var ok = false;
	if (ft.type == "text" || ft.type == "textarea") {
		ok = ft.value != "";
		if (ft.value == "http://") ok = false;
	}
	else if (ft.type == "select-one")
		ok = ft.options[ft.selectedIndex].value != "-1";
	else if (ft.type == "select-multiple") {
		selected_counter = 0;
		for (i = 0; i < ft.length; i++)
			if(ft.options[i].selected) 
				selected_counter++;
		ok = selected_counter >= nr_required;
	} else if (ft.type == "radio") {
		for (i = 0; i < document.js_form.elements.length; i++) {
			if (document.js_form.elements[i].name == ft.name && document.js_form.elements[i].checked) {
				ok = true; 
				break;
			}
		}
	} else if (ft.type == "checkbox") {
		selected_counter = 0;
		for (i = 0; i < document.js_form.elements.length; i++) {
			if (document.js_form.elements[i].name == ft.name && document.js_form.elements[i].checked)
				selected_counter++;
		}
		ok = selected_counter >= nr_required;
	} else if (ft.type == "hidden")
		return;
	else
		message(0, ft.type);
	inputCorrect(ok, ft.name, first_time);
} // End of Function

function validNumber(nr) {
	var re = new RegExp("^[0-9]+$");
	if (!re.test(nr)) {
		return message(1);
	} else
		return true;
} // End of Function

function validString(string) {
	var re = new RegExp("^[A-Za-z\-\_ ]+$");
	if (!re.test(string)) 
		return message(2);
	else
		return true;
} // End of Function

function validZIPcode(pc) {
	var re = new RegExp("^" + zipcodeFormat + "$");
	if (!re.test(pc)) 
		return message(3)
	else
		return true;
} // End of Function

function validDate(dob) {
	re = new RegExp("^[0-9]+$");
	d = dob.substring(dateFormat.indexOf("DD"), dateFormat.indexOf("DD")+2);
	m = dob.substring(dateFormat.indexOf("MM"), dateFormat.indexOf("MM")+2);
	y = dob.substring(dateFormat.indexOf("YYYY"), dateFormat.indexOf("YYYY")+4);

	var l = false;
	if (((y % 400 == 0) && (y % 100 != 0)) || (y % 400 == 0)) l = true;
	
	var error = false;
	if (!re.test(d) || !re.test(m) || !re.test(y)) error = true;
	else if (y < 1 || d < 1 || m < 1 || m > 12) error = true;
	else if (!l && m == 2 && d > 28) error = true;
	else if (l && m == 2 && d > 29) error = true;
	else if ((m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12) && d > 31) error = true;
	else if (d > 30) error = true;
	if (error) 
		return message(4, dateFormat)
	else
		return true;
} // End of Function

function validEmail(mail) {
	var re = new RegExp("^[^@]+@(\[?)([A-Za-z0-9\_\-]+\\.)+[A-Za-z0-9\_\-]+(\]?)$");
	if (!re.test(mail)) 
		return message(5);
	else
		return true;
} // End of Function

function validURL(url) {
	var re = new RegExp("^http://.+$");
	if (!re.test(url)) 
		return message(6);
	else
		return true;
} // End of Function
	
function checkAllFields() {
// Checks if all required fields are filled with values that make sense.

   	// Which fields are required exactly?
	for (i = 0; i < document.images.length; i++) {
		im = document.images[i].src;
		nm = document.images[i].name;
		if (nm.substring(0,3) == "js_" && (im.indexOf("star.gif") != -1 || im.indexOf("bang.gif") != -1))
			return message(8);
	}
	for (i = 0; i < document.js_form.elements.length; i++) {
		elem = document.js_form.elements[i].name;
		if(elem.charAt(0) == "j" && elem.charAt(1) == "s") {
			if (elem.charAt(3) == "t") {
			// Textfield

				value = document.js_form.elements[elem].value;
				if (value == "") {
				// Check if some value is entered at all.
					message(7);
					document.js_form.elements[elem].focus();
					return false;
				} else if(elem.charAt(4) == "n" && !validNumber(value)) {
				// Numbers only.
					document.js_form.elements[elem].focus();
					return false;
				} else if (elem.charAt(4) == "s" && !validString(value)) {
				// Letters (string) only.
					document.js_form.elements[elem].focus();
					return false;
				} else if (elem.charAt(4) == "z" && !validZIPcode(value)) {
				// ZIPcode only.
					document.js_form.elements[elem].focus();
					return false;
				} else if (elem.charAt(4) == "d" && !validDate(value)) {
				// Dates only.
					document.js_form.elements[elem].focus();
					return false;
				} else if (elem.charAt(4) == "e" && !validEmail(value)) {
				// E-mail addresses only.
					document.js_form.elements[elem].focus();
					return false;
				} else if (elem.charAt(4) == "u" && !validURL(value)) {
				// URL's only.
					document.js_form.elements[elem].focus();
					return false;
				} else if (elem.charAt(4) == "a") {
				// Anything is allowed here.
				}
			}
		}
	}
	return true;
} // End of Function
