<!-- 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 = "/images/bang.gif";
   var star = new Image(); star.src = "/images/star.gif";
   var blank = new Image(); blank.src = "/images/pixel.gif";
}

function message(id, alt)
{
	var ms = msgs[id];
	if (alt) ms = ms.replace(/#1/g, alt);
	alert(ms);
	return false;
}

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);
	}
}

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;
		}
	}
}

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" || ft.type == 'password')
	{
		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);
}

function validNumber(nr)
{
	var re = new RegExp("^[0-9]+$");
	if (!re.test(nr)) {
		return message(1);
	}
	else
		return true;
}

function validString(string)
{
	var re = new RegExp("^[A-Za-z\-\_ ]+$");
	if (!re.test(string)) 
		return message(2);
	else
		return true;
}

function validZIPcode(pc)
{
	var re = new RegExp("^" + zipcodeFormat + "$");
	if (!re.test(pc)) 
		return message(3)
	else
		return true;
}

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);
	d++;d--;m++;m--;y++;y--;

	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;
}

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;
}

function validURL(url)
{
	var re = new RegExp("^http://.+$");
	if (!re.test(url)) 
		return message(6);
	else
		return true;
}
	
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;
}

