﻿		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 errx=0;
			var errorMsg='Please enter or change the following information (click link below):';
/* end changes for linked list */
//			var errorImg='../images/other/alert.gif';
//			var errorAlign='absmiddle';
//			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='reservedone';
			}
		// 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 ID
				switch(f.id.toLowerCase())
				{
					case 'covers':
						val = f.value;
						nmbr=/(^\d+$)/;
						pass = nmbr.test(val);
						if(f.value=='' || !pass){cf_adderr(f); errx++;}							
		// email is a special field and needs checking
//						if(f.id=='email' && !cf_isEmailAddr(f.value)){cf_adderr(f)}							
					break;
					case 'dateomt':
					var dayNames = new Array("Sun","Mon","Tues","Weds","Thurs","Fri","Sat");
					var monthNames = new Array("Jan","Feb","March","April","May","June","July","Aug","Sept","Oct","Nov","Dec");
					var now = new Date();
					tdy=(dayNames[now.getDay()] + " " + now.getDate() + " " + monthNames[now.getMonth()] + " " + now.getYear());
						if(f.value=='' || f.value=='click here to select date') {cf_adderr(f); errx++;}							
					break;
					case 'time':
						if(f.selectedIndex==0) {cf_adderr(f); errx++;}							
					break;
					case 'name':
						if(f.value=='' || f.value=='enter your name') {cf_adderr(f); errx++;}							
					break;
					case 'email':
						var ff=document.getElementById(reqfields[i+1]);
						val = ff.value;
						nmbr=/(^[\d \(\)\+\-]+$)/;
						pass = nmbr.test(val);
						// if mail and phone are blank
						if((f.value=='' || f.value=='enter your email') && (ff.value=='' || ff.value=='enter phone no')) { 	
							cf_adderr(f); errx++;; 
							cf_adderr(ff); errx++; 
						// else if phone is blank check mail
						} else if(ff.value=='' || ff.value=='enter phone no') {
							if(!cf_isEmailAddr(f.value)) {
								cf_adderr(f); errx++;
							}
						// else if mail is blank check phone
						} else {
							if((ff.value=='' || ff.value=='enter phone no' || !pass) ) {
								cf_adderr(ff); errx++;
							}
							if(f.value!='' && f.value!='enter your email' && !cf_isEmailAddr(f.value)) {
								cf_adderr(f); errx++;
							}
						}		
//						if(f.value!='' && f.value!='enter your email' && !cf_isEmailAddr(f.value)) {
//							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.align=errorAlign;
//				errorIndicator.title=errorTitle;
				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;
						}
					}
					if(sb)
					{
						sb.parentNode.insertBefore(em,sb);
					}	
				} 
/* added for linked list */
				var em=document.getElementById(errorID).getElementsByTagName('ul')[0];
				var newli=document.createElement('p');
				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='#'+o.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}$/);
			}
		}
