function DCH_validateForm()
{
// defaults for the script
   var errors = '';
   var dateerror      = '';
   var oMyForm = document.contactform;
// regular expression patterns
   var validemail     = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
   var validname      = /^([a-zA-Z\-'])+ *([a-zA-Z\- '])*$/;
   var validpc1       = /^[a-zA-Z0-9 ]{2,}$/;
   var validpc2       = /^[a-zA-Z0-9 ]{3,}$/;
   var valid3digit    = /^[0-9]{3}$/;
   var valid4digit    = /^[0-9]{4}$/;
   var validcurrency  = /^[0-9]{4,}$/;
   var validphone     = /^[\d ]{10,}$/;

// test for basic mandatory form field values
   if(oMyForm.ap1_title.value =='')
   { errors+='Select your title from the list.\n'; }
   if(!validname.test(oMyForm.ap1_name.value))
   { errors+='Provide your first name.\n'; }
   if(!validname.test(oMyForm.ap1_surname.value))
   { errors+='Provide your last name.\n'; }
// DATE OF BIRTH CHECK
   if(oMyForm.ap1_day.value != '' && oMyForm.ap1_mnth.value != '' && oMyForm.ap1_yr.value != '')
   {
      if(!valid4digit.test(oMyForm.ap1_yr.value))
      { dateerror++; }
      if((oMyForm.ap1_day.value == 31) && (oMyForm.ap1_mnth.value == 4 || oMyForm.ap1_mnth.value == 6 || oMyForm.ap1_mnth.value == 9 || oMyForm.ap1_mnth.value == 11))
      { dateerror++; }
      if((oMyForm.ap1_day.value > 29) && (oMyForm.ap1_mnth.value == 2)) 
      { dateerror++; }
   }
   else 
   { dateerror++; }
   if(dateerror) 
   { errors+='Invalid date for date of birth.\n'; }
// END OF DATE OF BIRTH CHECK
   if(!validemail.test(oMyForm.email.value))
   { errors+='Provide a valid email address.\n'; }
   if(!validphone.test(oMyForm.ap1_phone.value))
   { errors+='Please provide your contact number.\n'; }
   if(oMyForm.ap1_address.value =='')
   { errors+='Provide your postal address.\n'; }
   if(!validpc1.test(oMyForm.ap1_pc1.value) || !validpc2.test(oMyForm.ap1_pc2.value))
   { errors+='Please provide a valid postcode.\n'; }
   if((oMyForm.ap1_years_at_address.value =='') || (oMyForm.ap1_months_at_address.value ==''))
   { errors+='Please provide time at address.\n'; }
   if(oMyForm.ap1_marital_status.value =='')
   { errors+='Provide your Marital Status.\n'; }
   if(oMyForm.ap1_electoral_roll.value =='')
   { errors+='Are you on the electoral register?.\n'; }
   if(oMyForm.ap1_residential_status.value =='')
   { errors+='Provide your residential Status.\n'; }
   if(oMyForm.ap1_employment_status.value =='')
   { errors+='Select your employment status from the list.\n'; }
   if(oMyForm.ap1_gross.value =='')
   { errors+='Provide Gross Annual income\n'; }


// loan requirement checks
   if( (!validcurrency.test(oMyForm.mortgage_amount.value) ) || (parseInt(oMyForm.mortgage_amount.value) < 15000 ) )
   { errors+='Provide required mortgage amount (at least £15000).\n'; }
   if(oMyForm.repayment_type.value =='')
   { errors+='Select repayment type.\n'; }
   if(oMyForm.mortgage.value =='')
   { errors+='Select the required mortgage type from the list.\n'; }
   if(isNaN(oMyForm.Term_preferred.value) || (oMyForm.Term_preferred.value <3))
   {errors+='Please state required repayment period.\n';}
   if(oMyForm.rate_preferred.value =='')
   { errors+='Select prefered rate.\n'; }
   if( (!validcurrency.test(oMyForm.Price_or_value.value) ) || (parseInt(oMyForm.Price_or_value.value) < 15000 ) )
   { errors+='Provide purchase price/estimated value.\n'; }

// show errors or submit form
   if (errors){alert('We cannot accept your application until the following fields are completed\n-----------------------------------------------------------------------------\n'+errors);}
   else{oMyForm.submit();}
}
