// 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'
			var errorMsg='Please enter or change any highlighted fields.';
			var errorImg='/warning.gif';
			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.nextSibling && /img/i.test(f.nextSibling.nodeName)) /*Original*/
				if(f.nextSibling && (f.nextSibling.className == 'failed_validation errorbackground'))
				{
					f.parentNode.removeChild(f.nextSibling);
				}
//				f.className='';
				f.style.background = '#ffffff';
//				f.style.border='1px solid #fff';
//				f.style.padding='0 0 0 0.5em';
//				f.style.margin='0 0 0.6em 0';

			}
		// 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!='Price' && f.id!='Ad_url'){cf_adderr(f,'Required')}							
		// Price is a special field and needs checking
					if(f.id=='Price' && f.value==''){cf_adderr(f,'Required')}
						else if(f.id=='Price' && !cf_isNumber(f.value)){cf_adderr(f,'May contain only digits 0-9 and one decimal point if required')}
					if(f.id=='Ad_url' && f.value==''){cf_adderr(f,'Required')}
						else if(f.id=='Ad_url' && !cf_isUrl(f.value)){cf_adderr(f,'May contain only letters (a-z), numbers (0-9), a hyphen (-) and/or an underscore (_)')}				

						
					break;
					case 'textarea':
					if(f.value==''){cf_adderr(f,'Please enter some text')}							
					break;
					case 'checkbox':
					if(!f.checked){cf_adderr(f,'Please tick box','noborder')}	/*original*/						
					break;
					case 'radio':
					if(!f.checked){cf_adderr(f,'You must answer "Yes"','noborder')}	/*original*/						
					break;
					case 'select-one':
//					if(!f.selectedIndex && f.selectedIndex==0){cf_adderr(f,'Please select one')}							
					if(f.value==''){cf_adderr(f,'Please select one')}							
					break;
				}
			}
			return !document.getElementById(errorID);

			/* Tool methods */
			function cf_adderr(o,p,q)
			{
				// create image, add to and colourise the error fields
				var errorIndicator=document.createElement('span');
				errorIndicator.innerHTML=p;

//				o.className=errorClass;
//				o.parentNode.insertBefore(errorIndicator,o); /* Original */
				o.parentNode.insertBefore(errorIndicator,o.nextSibling); 
				if (q == 'noborder')
				{
				o.style.background = 'transparent';
//				o.style.border='0 solid #000000';
//				o.style.padding='0';
//				o.style.margin='0 0 0.1em 0';
				}
				else
				{
				o.style.background = '#FFD7DA';
//				o.style.border='1px solid #000000';
//				o.style.padding='0 0 0 0.5em';
//				o.style.margin='0 0 0.6em 0';
				o.style.float='left';
				}
/*				o.nextSibling.style.padding = '0 1em 0 20px'; 
				o.nextSibling.style.background = '#FFD7DA url(/warning.gif) no-repeat';
				o.nextSibling.className = 'errorbackground'; //
*/				o.nextSibling.className = 'failed_validation errorbackground'; /* If change also change test on line 30 */
				

			// 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);
					// 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); /* Original */
					}	
				} 
			}
			function cf_isNumber(str) 
			{
			    return str.match(/^\d+(\.\d+)?$/);
			}
			function cf_isUrl(str) 
			{
			    return str.match(/^[\-_a-z0-9-]+$/);
			}
			function cf_isEmailAddr(str) 
			{
			    return str.match(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/);
//			    return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
				
				/* Look at later for multiple email addresses.
				var emailReg = // Your email Regex here;
var myStr    = "me@domain.com, me2@domain.com, me3@domain.com"; // simulated data from a textfield
var emails   = myStr.split( /, ?/ );

for ( var i = 0; ( email = emails[i] ); i++ )
{
    if ( ! emailReg.test( email ) )
    {
        // didn't validate, do whatever here
    }
    else
    {
        // did validate
    }
}
				*/
			}
		}
