// Global variable defaultEmptyOK defines default return value 
// for many functions when they are passed the empty string. 
// By default, they will return defaultEmptyOK.
//
// defaultEmptyOK is false, which means that by default, 
// these functions will do "strict" validation.  Function
// isInteger, for example, will only return true if it is
// passed a string containing an integer; if it is passed
// the empty string, it will return false.
//
// You can change this default behavior globally (for all 
// functions which use defaultEmptyOK) by changing the value
// of defaultEmptyOK.
//
// Most of these functions have an optional argument emptyOK
// which allows you to override the default behavior for 
// the duration of a function call.
//
// This functionality is useful because it is possible to
// say "if the user puts anything in this field, it must
// be an integer (or a phone number, or a string, etc.), 
// but it's OK to leave the field empty too."
// This is the case for fields which are optional but which
// must have a certain kind of content if filled in.

var defaultEmptyOK = false

// whitespace characters
var whitespace = " \t\n\r";

// Check whether string s is empty.

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

// Returns true if string s is empty or 
// whitespace characters only.

function isWhitespace (s)

{   var i;

    // Is s empty?
    if (isEmpty(s)) return true;

    // Search through string's characters one by one
    // until we find a non-whitespace character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);

        if (whitespace.indexOf(c) == -1) return false;
    }

    // All characters are whitespace.
    return true;
}

// isEmail (STRING s [, BOOLEAN emptyOK])
// 
// Email address must be of form a@b.c -- in other words:
// * there must be at least one character before the @
// * there must be at least one character before and after the .
// * the characters @ and . are both required
//
// For explanation of optional argument emptyOK,
// see comments of function isInteger.

function isEmail (s)
{   if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
   
    // is s whitespace?
    if (isWhitespace(s)) return false;
    
    // there must be >= 1 character before @, so we
    // start looking at character position 1 
    // (i.e. second character)
    var i = 1;
    var sLength = s.length;

    // look for @
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    // look for .
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    // there must be at least one character after the .
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function isDigit(theDigit) 
{ 
	var digitArray = new Array('0','1','2','3','4','5','6','7','8','9'),j; 

	for (j = 0; j < digitArray.length; j++) 
	{
		if (theDigit == digitArray[j])
		return true 
	} 
	return false 

} 
function digitsOnly(string)
{
	var i;
	for (i=0;i<=string.length-1;i++)
	{
		if(!isDigit(string.charAt(i)))
			return false;
	}
	return true;
}
function isValidPhoneNumber(phoneNumber)
{
	var minLength = 10;
	var maxLength = 20;
	
	if (isEmpty(phoneNumber)){
		return false;
	}
	if (phoneNumber.length < minLength || phoneNumber.length > maxLength)
	{	
		alert("Phone number must be between " + minLength + " and " + maxLength + " in length.\n\n" 
		+ "Please re-enter the number.");
		return false;
	}
	if (!digitsOnly(phoneNumber))
	{
		alert("Phone number must contain the digits 0-9 only and no spaces.\n\n"
		+ "Please re-enter the number.");
		return false;
	}
	return true;
}


function checkRadio(opFormElement){
	for(var i=0;i<opFormElement.length;i++){
		if (opFormElement[i].checked) return true;		
	}	
	return false;
}


function validateForm(){
	
	var zpErrors='';

	if (document.frm_book.cbo_title.value==''){
		zpErrors=zpErrors+"Please enter your title\n";
	}
	
	if (document.frm_book.txt_forename.value==''){
		zpErrors=zpErrors+"Please enter your forename\n";
	}
	
	if (document.frm_book.txt_surname.value==''){
		zpErrors=zpErrors+"Please enter your surname\n";
	}
		if (document.frm_book.txt_address1.value==''){
		zpErrors=zpErrors+"Please enter your Address\n";
	}
	
		if (document.frm_book.txt_postcode.value==''){
		zpErrors=zpErrors+"Please enter your Postcode\n";
	}
		if (document.frm_book.txt_email.value==''){
		zpErrors=zpErrors+"Please enter a valid Email Address\n";
	}
	if (document.frm_book.txt_email_confirm.value!=document.frm_book.txt_email.value){
		zpErrors=zpErrors+"Email address confirmation (please ensure both email addresses entered are the same)\n";	
	}
	if 	(!isValidPhoneNumber(document.frm_book.txt_phoneNumber.value)){
		zpErrors=zpErrors+"Please enter a valid Telephone Number\n";
	}

//keep as the last one

	if (zpErrors!=''){
		alert ('Please ensure you have answered the following questions:\n\n'+zpErrors);
		return false;
	}else{
		return true;
	}
}
