
var W3CDOM = (document.getElementsByTagName && document.createElement);
//zet op false wanneer een alertwindow moet worden getoond ipv meldingen achter de velden
//W3CDOM = false;
var MultipleErrors = false
//zet op true om per radiobutton een foutmelding te geven (alleen handig wanneer de radiobuttons ONDER elkaar staan
//MultipleErrors = true

var config = new Array();
//type rule,elementnaam,foutmelding
config['contactform'] = new Array();
config['contactform'][0] = new Array('required','naam','Dit veld is verplicht.');
config['contactform'][1] = new Array('required','email','Dit veld is verplicht.');
config['contactform'][2] = new Array('isemail','email','Geen juist emailadres.');
config['contactform'][3] = new Array('required','vraag','Dit veld is verplicht.');
config['cdshop'] = new Array();
config['cdshop'][0] = new Array('required','naam','Dit veld is verplicht.');
config['cdshop'][1] = new Array('required','adres','Dit veld is verplicht.');
config['cdshop'][2] = new Array('required','postcode','Dit veld is verplicht.');
config['cdshop'][3] = new Array('required','plaats','Dit veld is verplicht.');
config['cdshop'][4] = new Array('required','land','Dit veld is verplicht.');
config['cdshop'][5] = new Array('required','email','Dit veld is verplicht.');
config['cdshop'][6] = new Array('isemail','email','Geen juist emailadres.');
config['nexworkform'] = new Array();
config['nexworkform'][0] = new Array('required','afzender','Dit veld is verplicht.');
config['nexworkform'][1] = new Array('required','to','Dit veld is verplicht.');
config['nexworkform'][2] = new Array('required','subject','Dit veld is verplicht.');
config['nexworkform'][3] = new Array('required','body','Dit veld is verplicht.');
config['guestbookform'] = new Array();
config['guestbookform'][0] = new Array('required','gNaam','Dit veld is verplicht.');
config['guestbookform'][1] = new Array('required','gMessage','Dit veld is verplicht.');

function validate(formname)
{
	firstError = null;
	validForm = true;
	errorstring = '';
	formname = formname.name;
	var x = document.forms[formname].elements;
	for (var i=0;i<config[formname].length;i++)
	{
		for (var j=0;j<x.length;j++)
		{
			if (config[formname][i][1] == x[j].name) 
			{
				switch (config[formname][i][0])
				{
					case 'required':
						if (!getValue(x[j])) writeError(x[j],config[formname][i][2]);	break;
					case 'isemail':
						if (x[j].value.indexOf('@') == -1) writeError(x[j],config[formname][i][2]); break;
					case 'ishyperlink':
						if (x[j].value.indexOf('http://') == -1) writeError(x[j],config[formname][i][2]);	break;
				}
			}
		}		
	}
	if (!W3CDOM && errorstring != '') alert(errorstring);
	if (firstError)	firstError.focus();
	return validForm;
}

function getValue(ele) 
{
	el = ele.form.elements[ele.name], i = el.length
	switch (ele.type)
	{
		case 'text':
			if (el.value) return el.value;
			break;
		case 'password':
			if (el.value) return el.value;
			break;
		case 'radio':
			if (i) { while (i--) { if (el[i].checked) return el[i].value; }	}
			else { if(el.checked) return el.value; }
			break;
		case 'checkbox':
			if (i) { while (i--) { if (el[i].checked) return el[i].value; }	}
			else { if(el.checked) return el.value; }
			break;
		case 'select-one':
			if (el.options[el.selectedIndex].value) return el.options[el.selectedIndex].value
			break;
		case 'select-multiple':
			if (el.value) return el.value;
			break;
		case 'textarea':
			if (el.value) return el.value;
			break;
	}
	return false;
}

function writeError(obj,message)
{
	if (firstError==null) firstError = obj;
	validForm = false;
	errorstring += obj.name + ': ' + message + '\n';	
	if (MultipleErrors) {	if (obj.hasError) return }
	else
	{
		var el = obj.form.elements[obj.name], i = el.length;
		if (i && obj.type != 'select-one' && obj.type != 'select-multiple') { while (i--) { if (el[i].hasError) return } }
		else { if (obj.hasError) return	}	
	}
	if (W3CDOM)
	{
		obj.className += ' error';
		if (obj.type=='radio' || obj.type=='checkbox') {
			var el = obj.form.elements[obj.name], i = el.length;
			if (i) { while (i--) el[i].onclick = removeError;	}
			else el.onclick = removeError;
		}
		else obj.onchange = removeError;
		var sp = document.createElement('span');
		sp.className = 'error';
		sp.appendChild(document.createTextNode(message));
		obj.parentNode.appendChild(sp);
		obj.hasError = sp;
	}
	else obj.hasError = true;
}

function removeError() 
{
	if (this.type=='radio' || this.type=='checkbox') 
	{
		var el = this.form.elements[this.name], i = el.length;
		if (i)
		{
			while (i--) 
			{
				obj = el[i];
				if (obj.className.lastIndexOf(' ')!=-1) obj.className = obj.className.substring(0,obj.className.lastIndexOf(' '));
				if (obj.hasError) obj.parentNode.removeChild(obj.hasError);
				obj.hasError = null; obj.onclick = null;
			}
		}
		else
		{
			obj = el;
			if (obj.className.lastIndexOf(' ')!=-1) obj.className = obj.className.substring(0,obj.className.lastIndexOf(' '));
			if (obj.hasError) obj.parentNode.removeChild(obj.hasError);
			obj.hasError = null; obj.onclick = null;
		}
	}
	else 
	{
		this.className = this.className.substring(0,this.className.lastIndexOf(' '));
		this.parentNode.removeChild(this.hasError);
		this.hasError = null; this.onchange = null;
	}	
}
