// Javacript document (UTF-8)
// www.watusi.co.uk/..../form.js
// Author: watusi.co.uk
// Version: 4/10/08

// Form validation messages corresponding to field names of invalid values
	var msgEmail = 		"Please provide a valid email address e.g. name@example.org";
	var msgPhone = 		"Please provide a valid phone number e.g. 01159410888";
	var msgQuestion = 	"Please enter your question!";
	var msgMessage = 	"Please enter your message!";
	var msgName = 		"Please enter your full name";
	var msgFirstName = 	"Please enter your first name";
	var msgLastName = 	"Please enter your last name";
	var msgOrg = 		"Please enter your organisation/company name";
	var msgRegion = 	"Please enter your town or region";
	var msgAddress = 	"Please enter your full address";	
	var msgPostcode = 	"Please provide a valid UK postcode e.g. TW9 1AJ ";

function softAlert(ob) { // a jquery alternative to browser alert box
	$(ob).animate( { marginLeft:"-10px"}, 50 ).animate( { marginLeft:"10px" }, 30 ).animate( { marginLeft:"-10px" }, 30 ).animate( { marginLeft:"0px" }, 50 );
}

// function to test form field value against regular expression, and alert user if test fails
function checkValid(ob,msg,regex){ 
  if (!ob) { return true; } // no objections if field doesn't exist anyway
  if (regex.test(ob.value)) return true; else { 
	  // alert(msg); 
	  softAlert(ob); // a jquery alternative to browser alert box
	  ob.focus(); 
	  return false; 
  }
}

// function to test any two values are not same (or not empty for example) and alert message if so 
function checkNotValue(ob,val,msg){ 
  if (!ob) { return true; } // no objections if field doesn't exist anyway
  if ((ob)&&(ob.value!=val)) return true; else { 
	  // alert(msg); 
	  softAlert(ob); // a jquery alternative to browser alert box
	  ob.focus(); 
	  return false; 
  }
}

// Form values must satisfy these tests (else return false)
function checkForm(form){
	return ( 
		checkValid(form.name,msgName,/([A-Za-zЁ-өÀ-əẀ-ỹ]{2,})/) // full name contains min 2 char string
		//&&checkValid(form.firstname,msgFirstName,/([A-Za-zЁ-өÀ-əẀ-ỹ]{1,})/) // first name contains a letter
		//&&checkValid(form.lastname,msgLastName,/([A-Za-zЁ-өÀ-əẀ-ỹ]{2,})/) // last name contains letters
		//&&checkValid(form.organisation,msgOrg,/([A-Za-zЁ-өÀ-əẀ-ỹ]{2,})/) // organisation contains letters 
		//&&checkValid(form.region,msgRegion,/([A-Za-zЁ-өÀ-əẀ-ỹ]{2,})/) // region contains letters 
		//&&checkValid(form.address,msgAddress,/([A-Za-zЁ-өÀ-əẀ-ỹ\s]{10,})/) // address contains 10+ letters/spaces
		//&&checkValid(form.postcode,msgPostcode,/(GIR 0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])\s?[0-9][ABD-HJLNP-UW-Z]{2})/i) // postcode is valid
		&&checkValid(form.phone,msgPhone,/^$|([0-9]-?){11,}/) // empty value OR contains 11+ digits (optional '-' separator) 
		&&checkValid(form.email,msgEmail,/^$|([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/) // empty OR valid email
		//&&checkValid(form.question,msgQuestion,/([A-Za-zЁ-өÀ-əẀ-ỹ\s]{5,})/) // question contains 5+ letters/spaces
		&&checkNotValue(form.email,form.phone.value,msgEmail) // phone AND Email not same (i.e empty)
		&&checkNotValue(form.message,'',msgMessage) // message not empty
		//&&(false) // dont submit
	);
}