// JavaScript Document
// JavaScript Document
function checkform(of)
	{
	// 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 linked list */
		var errorMsg='One or more fields need correcting before sending. Please check below.';
    /* end changes for linked list */
		var errorImg='ico_error.png';
		var errorAlt='Error';
		var errorTitle='This field has an error!';
		var reqfields=document.getElementById('required').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.previousSibling && /img/i.test(f.previousSibling.nodeName))
			{
				f.parentNode.removeChild(f.previousSibling);
			}
			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.value=='Name') && f.id!='email'){cf_adderr(f)}							
	// email is a special field and needs checking
					if(f.id=='email' && !cf_isEmailAddr(f.value)){cf_adderr(f)}							
				break;
				case 'textarea':
					if(f.value=='' || f.value=='Comments'){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; --I do not need the image next to the input--*/
			o.className=errorClass;
			//o.parentNode.insertBefore(errorIndicator,o);				
			

			// 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))
				em.appendChild(newp);
           /* added for linked list */
				var newul=document.createElement('ul');		
				em.appendChild(newul);
           /* end added for linked 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;
					}
				}*/
				
				var sb=of.getElementsByTagName('input')[0]; //I want the alert box at the top of the first element. Otherwise take code on top
				
				if(sb)
				{
					sb.parentNode.insertBefore(em,sb);
				}	
			} 
          /* added for linked list */
			var em=document.getElementById(errorID).getElementsByTagName('ul')[0];
			var newli=document.createElement('li');
			var newa=document.createElement('a');
			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;
				}
			}
			
			newa.appendChild(document.createTextNode(txt));
			newa.href='#'+f.id;
			newa.onclick=function()
			{
				var loc=this.href.match(/#(\w.+)/)[1];
				document.getElementById(loc).focus();
				return false;
			}
			newli.appendChild(newa);
			em.appendChild(newli);
			
			
       /* end added for linked list */
		}
		function cf_isEmailAddr(str) 
		{
			return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
		}
	}
