function check_date(field){
var checkstr = "0123456789";
var DateField = field;
var Datevalue = "";
var DateTemp = "";
var separator = "/";
var day;
var month;
var year;
var leap = 0;
var err = 0;
var i;
   err = 0;
   DateValue = DateField.value;
   /* Delete all chars except 0..9 */
   for (i = 0; i < DateValue.length; i++) {
	  if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
	     DateTemp = DateTemp + DateValue.substr(i,1);
	  }
   }
   DateValue = DateTemp;
   /* Always change date to 8 digits - string*/
   /* if year is entered as 2-digit / always assume 20xx */
   if (DateValue.length == 6) {
      DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
   if (DateValue.length != 8) {
      err = 19;}
   /* year is wrong if year = 0000 */
   year = DateValue.substr(4,4);
   if (year == 0) {
      err = 20;
   }
   /* Validation of month*/
   month = DateValue.substr(2,2);
   if ((month < 1) || (month > 12)) {
      err = 21;
   }
   /* Validation of day*/
   day = DateValue.substr(0,2);
   if (day < 1) {
     err = 22;
   }
   /* Validation leap-year / february / day */
   if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
      leap = 1;
   }
   if ((month == 2) && (leap == 1) && (day > 29)) {
      err = 23;
   }
   if ((month == 2) && (leap != 1) && (day > 28)) {
      err = 24;
   }
   /* Validation of other months */
   if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
      err = 25;
   }
   if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
      err = 26;
   }
   /* if 00 ist entered, no error, deleting the entry */
   if ((day == 0) && (month == 0) && (year == 00)) {
      err = 0; day = ""; month = ""; year = ""; separator = "";
   }
   /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
   if (err == 0) {	   
	   jobStart = new Date(year, month-1, day);
	   today = new Date();
	   if (jobStart.getTime() < today.getTime()) {
			alert("Please enter a future date.");
			DateField.select();
	  		DateField.focus();
			return false;
		}
		else {	   
      		DateField.value = day + separator + month + separator + year;
	  		return true;
		}
   }
   /* Error-message if err != 0 */
   else {
      alert("Please enter a valid date in the form dd/mm/yyyy");
      DateField.select();
	  DateField.focus();
	  return false;
   }
}


function isEmailAddr(email)
{
  var result = false;
  var theStr = new String(email);
  var index = theStr.indexOf("@");
  if (index > 0)
  {
    var pindex = theStr.indexOf(".",index);
    if ((pindex > index+1) && (theStr.length > pindex+1))
	result = true;
  }
  return result;
}

function validRequired(formField,fieldLabel)
{
	var result = true;
	
	if (formField.value == "")
	{
		alert('Please enter a value for the "' + fieldLabel +'" field.');
		formField.focus();
		result = false;
	}
	
	return result;
}


function validEmail(formField,fieldLabel,required)
{
	var result = true;
	
	if (required && !validRequired(formField,fieldLabel))
		result = false;

	if (result && ((formField.value.length < 3) || !isEmailAddr(formField.value)) )
	{
		alert("Please enter a complete email address in the form: yourname@yourdomain.com");
		formField.focus();
		result = false;
	}

  return result;

}

function IsNumeric(sText)
{
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;
 
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
}

// UK Postcode validation - John Gardner - http://www.braemoor.co.uk/software/postcodes.shtml modified by Rod Andrews
function checkPostCode(formField) {
  var alpha1 = "[abcdefghijklmnoprstuwyz]";
  var alpha2 = "[abcdefghklmnopqrstuvwxy]";
  var alpha3 = "[abcdefghjkstuw]";
  var alpha4 = "[abehmnprvwxy]";
  var alpha5 = "[abdefghjlnpqrstuwxyz]";
  var pcexp = new Array ();
  pcexp.push (new RegExp ("^(" + alpha1 + "{1}" + alpha2 + "?[0-9]{1,2})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));
  pcexp.push (new RegExp ("^(" + alpha1 + "{1}[0-9]{1}" + alpha3 + "{1})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));
  pcexp.push (new RegExp ("^(" + alpha1 + "{1}" + alpha2 + "?[0-9]{1}" + alpha4 +"{1})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));
  pcexp.push (/^(GIR)(\s*)(0AA)$/i);
  pcexp.push (/^(bfpo)(\s*)([0-9]{1,4})$/i);
  pcexp.push (/^(bfpo)(\s*)(c\/o\s*[0-9]{1,3})$/i);
  pcexp.push (/^([A-Z]{4})(\s*)(1ZZ)$/i);
  var postCode = formField.value;
  var valid = false;
  for ( var i=0; i<pcexp.length; i++){
    if (pcexp[i].test(postCode)){
      pcexp[i].exec(postCode);
      postCode = RegExp.$1.toUpperCase() + " " + RegExp.$3.toUpperCase();
      postCode = postCode.replace (/C\/O\s*/,"c/o ");
      valid = true;
      break;
    }
  }
  if (valid) {return postCode;} 
  else {
	  	alert("Please enter the postcode in a valid format, e.g. AA99 9AA");
		formField.focus();
	  	return false;}
}

function aCheckboxIsTicked(theForm) {
	result = true;
	var counter = 0;
	for(var i=0; i < theForm.length; i++) {
		var e = theForm.elements[i];	
		if ((e.name.substr(0,5) == "chkbx") && (e.checked)) {
			counter++;	
		}
	}
	if (counter == 0) {
		alert("Please tick at least one category!");
		result = false;
	}
	return result;
}

function confirmDelete() {
	result = confirm("Do you really want to permanently delete this member's details?");
	return result;
}

function longEnough(text) {
	result = true;
	if (text.value.length < 50) {
		alert("Please provide a more detailed description of the job\nin order for an accurate quote to be given.");
		result = false;
	}
	return result;
}

function validMobile(mobileNumber) {
	result = true;
	if (!IsNumeric(mobileNumber.value)) {
		alert("Numbers only in the mobile field, please");
		mobileNumber.focus();
		result = false;	
	}
	if ((mobileNumber.value.length != 11)||(mobileNumber.value.substr(0,2) != "07")) {
		alert("Please enter mobile number in the format 07xxxxxxxxx");
		mobileNumber.focus();
		result = false;
	}
	return result
}

function validateForm(theForm)
{
		
if (btnWhichButton.value == 'Delete Member' ) {
	return confirmDelete();
} 
else {	

	if (theForm.Title.value == "Select")
	{
		alert("Please select a title");
		theForm.Title.focus();
		return false;
	}
	
  	if (!validRequired(theForm.Forename,"Forename"))
  		return false;
  		
	if (!validRequired(theForm.Surname,"Surname"))
  		return false;
	
  	if (!validRequired(theForm.CompanyName,"Company"))
  		return false;
		
	if (!validEmail(theForm.Email,"Email",true))
  		return false;
		
	if (!validRequired(theForm.Address1,"No. / House Name & Street"))
  		return false;
		
	if (!validRequired(theForm.Town,"Town/City"))
  		return false;
  		
	if (!validRequired(theForm.Telephone,"Telephone"))
  		return false;
		
	if (theForm.SMS.checked) {
		if (!validMobile(theForm.Mobile))
			{return false;}
	}
  		
	if (!validRequired(theForm.Postcode,"Postcode"))
  		return false;
	if (!checkPostCode(theForm.Postcode))
		return false;
		
	if (!validRequired(theForm.Password,"Password"))
		return false;
		
	if (!aCheckboxIsTicked(theForm))
		return false;
		
	if (theForm.chkbx2.checked) {
		if (!validRequired(theForm.OtherTrade,"Specify other"))
			{return false;}
	}
		
	if (!validRequired(theForm.turingTest,"Word shown on orange background"))
  		return false;
		
	return true;
	
}

}

function validateJobForm(theForm, loggedin) {

if (loggedin == "no") {
	if (theForm.Title.value == "Select")
	{
		alert("Please select a title");
		theForm.Title.focus();
		return false;
	}
	
  	if (!validRequired(theForm.Forename,"Forename"))
  		return false;
  		
	if (!validRequired(theForm.Surname,"Surname"))
  		return false;

	if (!validEmail(theForm.Email,"Email",true))
  		return false;
  		
	if (!validRequired(theForm.Telephone,"Telephone"))
  		return false;
  		
	if (!validRequired(theForm.Postcode,"Postcode"))
  		return false;
	if (!checkPostCode(theForm.Postcode))
		return false;
		
	if (!validRequired(theForm.Password,"Password"))
		return false;	
}

	if (!validRequired(theForm.Titleofjob,"Brief title of job"))
  		return false;
		
	if (!longEnough(theForm.Jobdescription))
  		return false;
		
	//if (!validRequired(theForm.Budget,"Approximate Budget"))
  		//return false;
		
	if (!validRequired(theForm.Startdate,"Job Start Date"))
  		return false;
		
	if (!check_date(theForm.Startdate))
		return false;
		
	if (!validRequired(theForm.turingTest,"Word shown on orange background"))
  		return false;
		
}

function validateCustomerForm(theForm) {
	
	if (theForm.Title.value == "Select")
	{
		alert("Please select a title");
		theForm.Title.focus();
		return false;
	}
	
  	if (!validRequired(theForm.Forename,"Forename"))
  		return false;
  		
	if (!validRequired(theForm.Surname,"Surname"))
  		return false;
		
	if (!validEmail(theForm.Email,"Email",true))
  		return false;
  		
	if (!validRequired(theForm.Telephone,"Telephone"))
  		return false;
  		
	if (!validRequired(theForm.Postcode,"Postcode"))
  		return false;
	if (!checkPostCode(theForm.Postcode))
		return false;
		
	if (!validRequired(theForm.Password,"Password"))
		return false;
		
	return true;
}

function validateAddIntroducer(theForm) {
	
	if (theForm.Title.value == "Select")
	{
		alert("Please select a title");
		theForm.Title.focus();
		return false;
	}
	
  	if (!validRequired(theForm.Forename,"Forename"))
  		return false;
  		
	if (!validRequired(theForm.Surname,"Surname"))
  		return false;
		
	if (!validRequired(theForm.CompanyName,"Company"))
  		return false;
		
	if (!validEmail(theForm.Email,"Email",true))
  		return false;
		
	if (!validRequired(theForm.Address1,"Number and Street"))
  		return false;
		
	if (!validRequired(theForm.Town,"Town"))
  		return false;
		
	if (!validRequired(theForm.Telephone,"Telephone"))
  		return false;
  		
	if (!validRequired(theForm.Postcode,"Postcode"))
  		return false;
	if (!checkPostCode(theForm.Postcode))
		return false;
		
	if (!validRequired(theForm.Password,"Password"))
  		return false;
		
	if (!validRequired(theForm.BankName,"Name of Bank"))
  		return false;
		
	if (!validRequired(theForm.AccountName,"Account Name"))
  		return false;
		
	if (!validRequired(theForm.AccountNumber,"Account Number"))
  		return false;
		
	if (!validRequired(theForm.SortCode,"Sort Code"))
  		return false;
		
	//if (!theForm.AgreeToTerms.checked){
		//alert("You must agree to our terms and conditions before proceeding.");
		//theForm.AgreeToTerms.focus();
		//return false;
	//}
		
	return true;
}

function validateAddContractor(theForm) {
	
	if (theForm.Title.value == "Select")
	{
		alert("Please select a title");
		theForm.Title.focus();
		return false;
	}
	
  	if (!validRequired(theForm.Forename,"Forename"))
  		return false;
  		
	if (!validRequired(theForm.Surname,"Surname"))
  		return false;
		
	if (!validRequired(theForm.CompanyName,"Company"))
  		return false;
		
	if (!validEmail(theForm.Email,"Email",true))
  		return false;
  		
	if (!validRequired(theForm.Postcode,"Postcode"))
  		return false;
	if (!checkPostCode(theForm.Postcode))
		return false;
		
	if (!aCheckboxIsTicked(theForm))
		return false;
		
	return true;
}

function validateFeedback(theForm) {
	
	if (theForm.CompanyID.value == 1) {
		alert("Please select a contractor!");
		theForm.CompanyID.focus();
		return false;
	}
	
	if (!validRequired(theForm.Comments,"Comments"))
  		return false;
		
	return true;
}

function validateTicket(theForm) {
	
if (theForm.ContractorID.value == 1) {
		alert("Please select a contractor!");
		theForm.ContractorID.focus();
		return false;
	}
	
	if (!validRequired(theForm.IntroducerContactName,"Originator Name"))
  		return false;
		
	if (!validRequired(theForm.IntroducerTelephone,"Originator Telephone Number"))
  		return false;
	
	if (!validRequired(theForm.JobTitle,"Brief Job Description"))
  		return false;
	
	if (!validRequired(theForm.JobDetails,"Full Job Details"))
  		return false;

	if (!validRequired(theForm.FullName,"Full Name"))
  		return false;
		
	if (!validRequired(theForm.Address1,"House No. and Street"))
  		return false;
		
	if (!validRequired(theForm.Postcode,"Postcode"))
  		return false;
	if (!checkPostCode(theForm.Postcode))
		return false;

	if (!validRequired(theForm.Telephone,"Telephone"))
  		return false;
		
	if (!validEmail(theForm.Email,"Email",true))
  		return false;
  	
	return true;
}

function validateSetFees(theForm) {
	
	if (!validRequired(theForm.ProFee,"Fee"))
  		return false;
	
	if (!IsNumeric(theForm.ProFee.value)) {
		alert("Numbers and decimal point only in the Fee field please!");
		return false;
	}
	
	if (theForm.ProFee.value < 10) {
		alert("Fee must be 10 or more!");
		return false;
	}
}

var btnWhichButton; // the global variable

function validateMailingList(theForm) {
	
	if (btnWhichButton != 'Check' ) {
		
		if (!validRequired(theForm.Subject,"Subject"))
  		return false;
	
		if (!validRequired(theForm.Message,"Message"))
  		return false;
		
	}
	
	var selObj = document.getElementById('Recipients');
  	var i;
  	var count = 0;
  	for (i=0; i<selObj.options.length; i++) {
    	if (selObj.options[i].selected) {
      	//selectedArray[count] = selObj.options[i].value;
      	count++;
    	}
	}
	if (count == 0)  {
		alert("Please select a recipient subcategory!");
		return false;
	}
	
}

function validateUnsubscribe(theForm) {
		
	if (!validEmail(theForm.Email,"Email",true))
  		return false;
	
	if (!validRequired(theForm.Password,"Password"))
  		return false;
		
	if (!validRequired(theForm.Feedback,"Feedback"))
  		return false;
}

function validateMasterIntro(theForm) {
	
	if (!validRequired(theForm.ProID,"Professional ID"))
  		return false;
		
	if (!IsNumeric(theForm.ProID.value)) {
		alert("Numbers only in the Professional ID field please!");
		theForm.ProID.focus();
		return false;
	}

	if (!validRequired(theForm.Password,"Password"))
  		return false;
}

function validate_SO(theForm) {
	
	if (!validRequired(theForm.BankName,"Bank Name"))
  		return false;
		
	if (!validRequired(theForm.BankAddress,"Bank Address"))
  		return false;
		
	if (theForm.DateField.value == "dd/mm/yyyy") {
		alert("Please enter a starting date");
		theForm.DateField.focus();
		return false;	
	}
	
	if (!check_date(theForm.DateField))
		return false;
		
	if (!validRequired(theForm.PayeeBankName,"Your bank name"))
  		return false;
		
	if (!validRequired(theForm.PayeeBankNumber,"Your bank account number"))
  		return false;
		
	if (!validRequired(theForm.PayeeBankSortCode,"Your bank sort code"))
  		return false;
		
}
