<!--// Email form validationfunctions: Copyright, 1998-2004 adpDesign, Southport, UK

function validate()
{
	if(checkForm(document.forms[0]))		
		document.contact.submit();
} 

function count(s,c)
{                   //Returns num of chars c in string s
	var num=0;
	var len=s.length;
	if(len>0){
		for(var i=0;i<len;i++){
			if(s.charAt(i)==c){
				num++;
			}
		}
	}
	return num;
}
   
function trimRight(str)
{               //Remove trailing spaces chars from str
	var len = str.length;
	if(len > 0){
		for(var i = len - 1; i >= 0; i--){
			if(str.charAt(i) == " "){
				str = str.substring(0,i);
			}
			else{
				break;
			}
		}
	}
	return str;
}
   
function trimLeft(str)
{                //Remove leading spaces
	len=str.length;
	if(len>0){
		for(var i=0;i<len;i++){
			if(str.charAt(i)==" "){
				str=str.substring(i+1,len);
			}
			else{
				break;
			}
		}
	}
	return str;
}
   
function trim(str)
{                    //Remove leading & trailing spaces   
	return trimLeft(trimRight(str));
}   
   
function checkForm(form)
{        
	var test = true;
	var phoneLen = 0;
	var emailLen = 0;
	
	for(var i = 0; i < form.length; i++){
		
		var field=form[i];  
		
		if(field.name == "Name"){
			test = checkName(field);
			if(!test)
				break;
		}
		if(field.name == "Telephone"){
			phoneLen = field.value.length > 0;
			test = checkPhone(field);
			if(!test)
				break;
		}
		if(field.name == "EmailAddress"){
			emailLen = field.value.length > 0;
			test = checkEmail(field);
			if(!test)
				break;
		}
		if(field.name == "Message"){
			test = checkMessage(field);
			if(!test)
				break;
		}
	}
	
	if(test){
		test = phoneLen || emailLen;
		if(!test)			
			showError(form['EmailAddress'],"You must provide an email address or a 'phone number");
	}
	
	return test;
}               

function modifyQuotes(str)
{
	var sQuote = "'";
	var dQuote = "\" ";

	 while(str.indexOf(dQuote) != -1)
		str = str.replace(dQuote,sQuote);

	return str;
}
        
function showError(field,msg)
{
	alert(msg);
	field.focus();
}
             
function setFocus()
{       
	field.focus();
	field.select();       
}
    
function emailOK(value)
{	
	if(!validEmailChars(value)    //valid e-mail chars only                  
		|| !checkAt(value)            //one and one only "@"
		|| !checkPeriod(value)        //no doubles and none at start and end
		|| !checkHome(value)          //receiving emails only
		||  count(value,"[")>1        //max of one '['
		||  count(value,"]")>1){      //ditto
		return false;
	}
	
	return true;
}
       
function checkEmail(field)
{
	var email=trim(field.value);
	if(!email.length)
		return true;
	if(!emailOK(email)){		
		showError(field,"Your email address is incorrect");
		return false;
	}        
	else{         
		return checkEmailTypos(field);
	}
}
   
function checkEmailTypos(field)
{
	var id="your";
	var numChecks=1;
	var typos=new Array("com.uk");
	var tipex=new Array("co.uk");
	var email=trim(field.value);
           
	var amend=email;
	while(amend.charAt(amend.length-2).toLowerCase()==amend.charAt(amend.length-1).toLowerCase()){      
		amend=amend.substring(0,amend.length-1);
	}   
      
	for(var i=0;i<numChecks;i++){
		var typo=typos[i];
		var index=amend.toLowerCase().lastIndexOf(typo);
		if(index>0){                  
			amend=amend.substring(0,index)+tipex[i]+amend.substring(index+1+tipex[i].length);
		}
		if(amend!=email){
			if(confirmChange(id,email,amend)){
				email=amend;           
				field.value=email;
			}
			break;
		}
	}
	return true;
}
   
function confirmChange(id,email,amend)
{
	var msg="Possible typo in "+id+" email address.\n \n";          
	msg+="Click 'OK' to replace  "+email+"  with  "+amend+"\n";
	msg+="Hit 'Cancel' to continue without changing the address.\n \n";

	return confirm(msg);               
}
   
function validEmailChars(email)
{  
	if(email.length==0){return true;}
	var test=true;            
	if(email.indexOf("[[")!=-1){test=false;}
	if(email.indexOf("]]")!=-1){test=false;}
	if(email.indexOf("[]")!=-1){test=false;}      
	if(email.indexOf("@@")!=-1){test=false;}
	if(email.indexOf("..")!=-1){test=false;}    
	if(email.indexOf(".]")!=-1){test=false;}
	if(email.indexOf("[.")!=-1){test=false;}
	if(email.indexOf(".@")!=-1){test=false;}
	if(email.indexOf("@.")!=-1){test=false;}
	if(email.indexOf("-[")!=-1){test=false;}
	if(email.indexOf("]-")!=-1){test=false;}      
            
	if(test){
		for(var i=0;i<email.length;i++){
			var c=email.charAt(i).toLowerCase();
			if(!((c>="a" && c<="z") ||
				(parseInt(c)<=9) ||
				(c=="@") ||
				(c==".") ||
				(c=="-") ||
				(c=="_") ||
				(c=="[") ||               
				(c=="]"))){
					test=false;
					break;               
			}
		}                     
	}      
	return test;
}
   
function checkAt(email)
{
	var pos=email.indexOf('@');
	if(pos<=0 || pos==email.length-1){return false;}
	if(email.indexOf('@',pos+1)>0){return false;}
	return true;
}
   
function checkPeriod(email)
{
	var pos=email.indexOf('.');
	if(pos==0 || pos==email.length-1){return false;}
	while(pos!=-1){
		newPos=email.indexOf('.',pos+1);
		if(newPos==pos+1){return false;}
		pos=newPos;
	}
	pos=email.indexOf("@");    
	if(email.indexOf(".",pos)==-1){return false;}
      
	return true;
}
   
function checkHome(email)
{
	return true;
}      

function checkName(field)
{
	var name=trim(field.value);
	if(name.length==0){
		showError(field,"Your name is not specified");  
		return false;
	}
	return true;
}
   
function nameOK(str)
{
	if(str.length>0){
		for(var i=0;i<name.length;i++){
			if(!validNameChar(name.toLowerCase().charAt(i))){        
				return false;
			}
		}
		return true;
	}
	return false;
}
   
function validNameChar(nameChar)
{
	if(nameChar>='a' && nameChar<='z'){
		return true;
	}
	if(nameChar==' '){
		return true;
	}
	for(var i=0;i<=9;i++){
		if(nameChar==i){
			return true;
		}
	}
	return false;
}

function checkMessage(field)
{
	var line=trim(field.value);  
	if(!line.length){
		showError(field,"No message text provided");
		return false;
	}
	if(!checkHtml(line)){
		showError(field,"Illegal character in message (HTML tags not allowed)");
		return false;
	}
	else{
		return true;
	}     
}
   
function checkHtml(line)
{     
	if(line.indexOf('<')!=-1 || line.indexOf('>')!=-1){
		return false;
	}
	else if(line.indexOf('http')!=-1){
		return false;
	}
	else{         
		return true;
	}
}            
   
function checkQuote(line)
{
	if(line.indexOf('"')==-1 && line.indexOf("'")==-1){
		return line;
	}
	var string=" ";
	for(var i=0;i<line.length;i++){
		if(line.charAt(i)=='"'){
			string+="'";
		}               
		else{
			string+=line.charAt(i);
		}
	}
	return string;
}
   
function checkPhone(field)
{
	var num=trim(field.value);  
	if(!num.length)
		return true;		 
	for(var i=0;i<num.length;i++){
		if(num.length < 7 || !checkPhoneDigit(num.charAt(i))){
			showError(field,"Error in the provided 'phone number"); 
			return false;
		}		  
	}
	return true;
}

function checkPhoneDigit(digit)
{
	var ok = new Array("(",")","+","-"," ","0","1","2","3","4","5","6","7","8","9");
	for(var i=0;i<ok.length;i++){
		if(digit==ok[i])
			return true;
	}
	return false;
}

