function checkform2(of){
  return checker(of,document.getElementById('required2'));
}
function checkform(of){
  return checker(of,document.getElementById('required'));
}

function checker(of,req){
	// Test if DOM is available and there is an element called required
	if(!document.getElementById || !document.createTextNode){return;}
	if(!document.getElementById('required')){return;}

	// Define error messages and split the required fields
	var errorID='errormsg';
	var errorClass='error'
	
	/* changes for named list */
	var errorMsg='Please enter or change the following fields:';
	
	/* end changes for named list */
	var errorImg='http://www.americanchateau.com/alert.gif';
	var errorAlt='Error';
	var errorTitle='This field has an error!';
	var reqfields=req.value.split(',');

	// Cleanup old mess
	// if there is an old errormessage field, delete it
	if(document.getElementById(errorID)){
		var em=document.getElementById(errorID);
		em.parentNode.removeChild(em);
	}

	// remove old images and classes from the required fields
	for(var i=0;i<reqfields.length;i++){
		var f=document.getElementById(reqfields[i]);
		if(!f){continue;}
		if(f.nextSibling && /img/i.test(f.nextSibling.nodeName)){
			f.parentNode.removeChild(f.nextSibling);
		}
		f.className='';
	}

	// loop over required fields
	for(var i=0;i<reqfields.length;i++){
  		// check if required field is there
		var f=document.getElementById(reqfields[i]);
		if(!f){continue;}
		// test if the required field has an error, 
		// according to its type
		switch(f.type.toLowerCase()){
			case 'text':
				if ((f.value=='' && f.id!='email')&& f.id!='email2'){cf_adderr(f)}							
				// email is a special field and needs checking
				if(f.id=='email' && !cf_isEmailAddr(f.value)){cf_adderr(f)}
                        if(f.id=='email2' && !cf_isEmailAddr(f.value)){cf_adderr(f)}							
				break;
                  case 'password':
				if(f.value==''){cf_adderr(f)}
                        else {	
                           if(f.id=='confirm' && f.value!=document.getElementById('password').value){cf_adderr(f)}
                           if(f.id=='confirm2' && f.value!=document.getElementById('password2').value){cf_adderr(f)}
                        }							
				break;						
			case 'textarea':
				if(f.value==''){cf_adderr(f)}							
				break;
			case 'checkbox':
				if(!f.checked){cf_adderr(f)}							
				break;
			case 'select-one':
				if(!f.selectedIndex && f.selectedIndex==0){cf_adderr(f)}							
				break;
		}
	}
	return !document.getElementById(errorID);

	/* Tool methods */
	function cf_adderr(o){
		// create image, add to and colourise the error fields
		var errorIndicator=document.createElement('img');
		errorIndicator.alt=errorAlt;
		errorIndicator.src=errorImg;
		errorIndicator.title=errorTitle;
		o.className=errorClass;
		o.parentNode.insertBefore(errorIndicator,o.nextSibling);

		// Check if there is no error message
		if(!document.getElementById(errorID)){
			// create errormessage and insert before submit button
			var em=document.createElement('div');
			em.id=errorID;
			var newp=document.createElement('p');
			newp.appendChild(document.createTextNode(errorMsg))
			// clone and insert the error image
			newp.appendChild(errorIndicator.cloneNode(true));
			em.appendChild(newp);
			/* added for named list */
			var newul=document.createElement('ul');		
			em.appendChild(newul);
			/* end added for named list */
			// find the submit button 
			for(var i=0;i<of.getElementsByTagName('input').length;i++){
				if(/submit/i.test(of.getElementsByTagName('input')[i].type)){
					var sb=of.getElementsByTagName('input')[i];
					break;
				}
			}
			if(sb){

				sb.parentNode.insertBefore(em,sb);
                        var em2=document.createElement('p');
                        sb.parentNode.insertBefore(em2,sb);
			}	
		} 

		/* added for named list */
		var em=document.getElementById(errorID).getElementsByTagName('ul')[0];
		var newli=document.createElement('li');
		for(var i=0;i<of.getElementsByTagName('label').length;i++){
			if(of.getElementsByTagName('label')[i].htmlFor==o.id){
				var txt=of.getElementsByTagName('label')[i].firstChild.nodeValue;
				break;
			}
		}
		newli.appendChild(document.createTextNode(txt));
		em.appendChild(newli);
		/* end added for named list */
	}


	function cf_isEmailAddr(str){
		return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
	}
}
