function checkForm(of) {

	var reqfields,em,i,f,ty;
	var labels,fieldnames;
	fieldnames=new Array();
	if(document.getElementsByTagName('label').length>0) {
		labels=document.getElementsByTagName('label');
		for(i=0;i<labels.length;i++) {
			fieldnames[labels[i].htmlFor]=labels[i].firstChild.nodeValue;
		}
	}

	if(document.getElementById('required')) {
		reqfields=document.getElementById('required').value.split(',');
		if(document.getElementById('errormsg')){
			em=document.getElementById('errormsg');
			em.parentNode.removeChild(em);
		}
		
		for(i=0;i<reqfields.length;i++) {
			f=document.getElementById(reqfields[i]);
			if(f.previousSibling && /images/i.test(f.previousSibling.nodeName)){
				f.parentNode.removeChild(f.previousSibling);
			}
			f.style.background='transparent';
			if(f){
				ty=f.type.toLowerCase();
				switch(ty) {
					case 'text':
						if(f.value==''){adderr(f.id,fieldnames[f.id],of)}							
						if(f.id=='email' && !isEmailAddr(f.value)){adderr(f.id,fieldnames[f.id],of)}							
					break;
					case 'textarea':
						if(f.value==''){adderr(f.id,fieldnames[f.id],of)}							
					break;
					case 'checkbox':
						if(!f.checked){adderr(f.id,fieldnames[f.id],of)}							
					break;
					/* extend as needed */
				}
			}
			
		}
		
	}
	if(document.getElementById('errormsg')) {
		return false;
	}
}


function adderr(id,name,of) {
 	var se,i,nli,na,newli;
	i=document.createElement('img');
	i.src='../images/alert.gif';
	i.alt='Fehler';
	i.title='Dieses Feld enthält einen Fehler';
	se=document.getElementById(id);
	se.parentNode.insertBefore(i,se)
	se.style.background='#fcc';
	if(!document.getElementById('errormsg')) {
		var em=document.createElement('p');
		em.id='errormsg';
		em.appendChild(document.createTextNode('Bitte füllen Sie die fehlenden Felder aus: '))
		ul=document.createElement('ul');
		ul.id='errorlist';
		em.appendChild(ul);
		for(var i=0;i<of.getElementsByTagName('input').length;i++) {
			if(/submit/i.test(of.getElementsByTagName('input')[i].getAttribute('type'))) {
				var sb=of.getElementsByTagName('input')[i];
				break;
			}
		}
		em.style.border='2px solid #c00';
		em.style.padding='5px';
		em.style.width='20em';
		sb.parentNode.insertBefore(em,sb);
	}
	if(id=='email' && !isEmailAddr(document.getElementById(id).value)) {
		pn=document.createElement('p');
		pn.appendChild(document.createTextNode('Your email seems to be invalid'))	
		document.getElementById('errormsg').appendChild(pn);
	}
	newli=document.createElement('li');
	newli.appendChild(document.createTextNode(name))
	document.getElementById('errorlist').appendChild(newli);
}


function isEmailAddr(str) {
    return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
}