function checkContactForm(form, formFields, emailField, errorMessageElementId) {
	var badElements = new Array();
	errorFound = "0";
	NumFound = "0";
	errorMessage = "";	
	
	var companyname = document.getElementById(formFields[0].id);
	if (isAlphabetic(companyname.value, true) != true) {
		badElements[badElements.length] = formFields[0];
	} else if (isWhitespace(companyname.value) !=false) {
		badElements[badElements.length] = formFields[0];
	}	
	var firstname = document.getElementById(formFields[1].id);
	if (isAlphabetic(firstname.value, true) != true) {
		badElements[badElements.length] = formFields[1];
	} else if (isWhitespace(firstname.value) !=false) {
		badElements[badElements.length] = formFields[1];
	}
	
	var lastname = document.getElementById(formFields[2].id);
	if (isAlphabetic(lastname.value, true) != true) {
		badElements[badElements.length] = formFields[2];
	} else if (isWhitespace(lastname.value) !=false) {
		badElements[badElements.length] = formFields[2];
	}	

	var address = document.getElementById(formFields[3].id);
	if (isAlphanumeric(address.value, true) != true) {
		badElements[badElements.length] = formFields[3];
	}
	
    var email = document.getElementById(emailField.id);
    if (isValidEmailStrict(email.value) != true) {
        badElements[badElements.length] = emailField;
    } else if (isWhitespace(email.value)) {
        badElements[badElements.length] = emailField;
	}	
	
    var details = document.getElementById(formFields[7].id);
    if (isAlphanumeric(details.value) != true) {
        badElements[badElements.length] = formFields[7];
    }

	for (var i = 0; i < formFields.length; i++) {
      var formFieldElement = document.getElementById(formFields[i].id);
      if (formFieldElement.nodeName == 'SELECT' && formFieldElement.selectedIndex < 1) {
         badElements[badElements.length] = formFields[i];
		}
	}
	
	   // show error messages
   if (badElements.length > 0 ) {
      var errorMessages = '';
      var errorMessageHolder = document.getElementById(errorMessageElementId);
      
		for (var i = 0; i < badElements.length; i++) {
			var element = badElements[i];
			document.getElementById(element.id).style.color = '#ff0000';
			errorMessages += '*&nbsp;The ' + element.name + ' field value is not valid<br />';
		}
		
      errorMessageHolder.innerHTML = errorMessages;
      return false;
   }
   else {
      return true;
   }

//end function
} 

function checkFreightForm(form, formFields, emailField, errorMessageElementId) {
	var badElements = new Array();
	errorFound = "0";
	NumFound = "0";
	errorMessage = "";	
	
	var companyname = document.getElementById(formFields[0].id);
	if (isAlphabetic(companyname.value, true) != true) {
		badElements[badElements.length] = formFields[0];
	} else if (isWhitespace(companyname.value) !=false) {
		badElements[badElements.length] = formFields[0];
	}	
	var firstname = document.getElementById(formFields[1].id);
	if (isAlphabetic(firstname.value, true) != true) {
		badElements[badElements.length] = formFields[1];
	} else if (isWhitespace(firstname.value) !=false) {
		badElements[badElements.length] = formFields[1];
	}
	
	var lastname = document.getElementById(formFields[2].id);
	if (isAlphabetic(lastname.value, true) != true) {
		badElements[badElements.length] = formFields[2];
	} else if (isWhitespace(lastname.value) !=false) {
		badElements[badElements.length] = formFields[2];
	}	

    var email = document.getElementById(emailField.id);
    if (isValidEmailStrict(email.value) != true) {
        badElements[badElements.length] = emailField;
    } else if (isWhitespace(email.value)) {
        badElements[badElements.length] = emailField;
	}	

	var destination = document.getElementById(formFields[6].id);
	if (isAlphanumeric(destination.value, true) != true) {
		badElements[badElements.length] = formFields[6];
	}

	var commodity = document.getElementById(formFields[8].id);
	if (isAlphabetic(commodity.value, true) != true) {
		badElements[badElements.length] = formFields[8];
	} else if (isWhitespace(commodity.value) !=false) {
		badElements[badElements.length] = formFields[8];
	}

	var skids = document.getElementById(formFields[11].id);
	if (isNumeric(skids.value, true) != true) {
		badElements[badElements.length] = formFields[11];
	} else if (isWhitespace(skids.value) !=false) {
		badElements[badElements.length] = formFields[11];
	}
	
	var weight = document.getElementById(formFields[12].id);
	if (isNumeric(weight.value, true) != true) {
		badElements[badElements.length] = formFields[12];
	} else if (isWhitespace(weight.value) !=false) {
		badElements[badElements.length] = formFields[12];
	}		
	
    var comments = document.getElementById(formFields[13].id);
    if (isAlphanumeric(comments.value) != true) {
        badElements[badElements.length] = formFields[13];
    }

	for (var i = 0; i < formFields.length; i++) {
      var formFieldElement = document.getElementById(formFields[i].id);
      if (formFieldElement.nodeName == 'SELECT' && formFieldElement.selectedIndex < 1) {
         badElements[badElements.length] = formFields[i];
		}
	}
	
	   // show error messages
   if (badElements.length > 0 ) {
      var errorMessages = '';
      var errorMessageHolder = document.getElementById(errorMessageElementId);
      
		for (var i = 0; i < badElements.length; i++) {
			var element = badElements[i];
			document.getElementById(element.id).style.color = '#ff0000';
			errorMessages += '*&nbsp;The ' + element.name + ' field value is not valid<br />';
		}
		
      errorMessageHolder.innerHTML = errorMessages;
      return false;
   }
   else {
      return true;
   }

//end function
} 

/*********************************************************************************************************/
// function to find if a string contains white spaces
	// whitespace characters
	var whitespace = " \t\n\r";
/*********************************************************************************************************/
      // Check whether string s is empty.
      function isEmpty(s)
      { return ((s == null) || (s.length == 0)) }

/*********************************************************************************************************/
		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;
		}


/************************************************
DESCRIPTION: Removes leading and trailing spaces. PARAMETERS: Source string from which spaces will be removed; RETURNS: Source string with whitespaces removed.
*************************************************/ 
function trimAll( strValue ) {
 var objRegExp = /^(\s*)$/;

    //check for all spaces
    if(objRegExp.test(strValue)) {
       strValue = strValue.replace(objRegExp, '');
       if( strValue.length == 0)
          return strValue;
    }
    
   //check for leading & trailing spaces
   objRegExp = /^(\s*)([\W\w]*)(\b\s*$)/;
   if(objRegExp.test(strValue)) {
       //remove leading and trailing whitespace characters
       strValue = strValue.replace(objRegExp, '$2');
    }
  return strValue;
}

// Check that the number of characters in a string is between a max and a min
function isValidLength(string, min, max) {
if (string.length < min || string.length > max) return false;
else return true;
}

// Check that a credit card number is valid based using the LUHN formula (mod10 is 0)
function isValidCreditCard(number) {
number = '' + number;

if (number.length > 16 || number.length < 13 ) return false;
else if (getMod10(number) != 0) return false;
else if (arguments[1]) {
var type = arguments[1];
var first2digits = number.substring(0, 2);
var first4digits = number.substring(0, 4);

if (type.toLowerCase() == 'visa' && number.substring(0, 1) == 4 &&
(number.length == 16 || number.length == 13 )) return true;
else if (type.toLowerCase() == 'mastercard' && number.length == 16 &&
(first2digits == '51' || first2digits == '52' || first2digits == '53' || first2digits == '54' || first2digits == '55')) return true;
else if (type.toLowerCase() == 'american express' && number.length == 15 && 
(first2digits == '34' || first2digits == '37')) return true;
else if (type.toLowerCase() == 'diners club' && number.length == 14 && 
(first2digits == '30' || first2digits == '36' || first2digits == '38')) return true;
else if (type.toLowerCase() == 'discover' && number.length == 16 && first4digits == '6011') return true;
else if (type.toLowerCase() == 'enroute' && number.length == 15 && 
(first4digits == '2014' || first4digits == '2149')) return true;
else if (type.toLowerCase() == 'jcb' && number.length == 16 &&
(first4digits == '3088' || first4digits == '3096' || first4digits == '3112' || first4digits == '3158' || first4digits == '3337' || first4digits == '3528')) return true;

    // if the above card types are all the ones that the site accepts, change the line below to 'else return false'
    else return true;
}
else return true;
}

// Check that an email address is valid based on RFC 821 (?)
function isValidEmail(address) {
if (address != '' && address.search) {
      if (address.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1) return true;
      else return false;
}

   // allow empty strings to return true - screen these with either a 'required' test or a 'length' test
   else return true;
}

// Check that an email address has the form something@something.something
// This is a stricter standard than RFC 821 (?) which allows addresses like postmaster@localhost
function isValidEmailStrict(address) {
if (isValidEmail(address) == false) return false;
var domain = address.substring(address.indexOf('@') + 1);
if (domain.indexOf('.') == -1) return false;
if (domain.indexOf('.') == 0 || domain.indexOf('.') == domain.length - 1) return false;
return true;
}

// Check that a US zip code is valid
function isValidZipcode(zipcode) {
zipcode = removeSpaces(zipcode);
if (!(zipcode.length == 5 || zipcode.length == 9 || zipcode.length == 10)) return false;
   if ((zipcode.length == 5 || zipcode.length == 9) && !isNumeric(zipcode)) return false;
   if (zipcode.length == 10 && zipcode.search && zipcode.search(/^\d{5}-\d{4}$/) == -1) return false;
   return true;
}

// Check that a Canadian postal code is valid
function isValidPostalcode(postalcode) {
if (postalcode.search) {
postalcode = removeSpaces(postalcode);
if (postalcode.length == 6 && postalcode.search(/^[a-zA-Z]\d[a-zA-Z]\d[a-zA-Z]\d$/) != -1) return true;
else if (postalcode.length == 7 && postalcode.search(/^[a-zA-Z]\d[a-zA-Z]-\d[a-zA-Z]\d$/) != -1) return true;
else return false;
}
return true;
}

// Check that a US or Canadian phone number is valid
function isValidUSPhoneNumber(areaCode, prefixNumber, suffixNumber) {
   if (arguments.length == 1) {
      var phoneNumber = arguments[0];
      phoneNumber = phoneNumber.replace(/\D+/g, '');
      var length = phoneNumber.length;
      if (phoneNumber.length >= 7) {
         var areaCode = phoneNumber.substring(0, length-7);
         var prefixNumber = phoneNumber.substring(length-7, length-4);
         var suffixNumber = phoneNumber.substring(length-4);
      }
      else return false;
   }
   else if (arguments.length == 3) {
      var areaCode = arguments[0];
      var prefixNumber = arguments[1];
      var suffixNumber = arguments[2];
   }
   else return true;

   if (areaCode.length != 3 || !isNumeric(areaCode) || prefixNumber.length != 3 || !isNumeric(prefixNumber) || suffixNumber.length != 4 || !isNumeric(suffixNumber)) return false;
   return true;
}

// Check that a string contains only letters and numbers
function isAlphanumeric(string){
	var BadChars = "~!@#$%^\&*()_-=+|\\{}[];:\".<>/?";
	var i = 0
	var x = 0
	var NumFound = "0";
	for (i=0; i <= string.length -1; i++) {
	for (x=0; x <= BadChars.length -1; x++) {
	if(string.charAt(i) == BadChars.charAt(x)) {
		return false;
	}
	return true;
	}
	}
}
/*function isAlphanumeric(string, ignoreWhiteSpace) {
if (string.search) {
if ((ignoreWhiteSpace && string.search(/[^\w\s]/) != -1) || (!ignoreWhiteSpace && string.search(/\W/) != -1)) return false;
}
return true;
}*/

function isAlphabetic1(string, ignoreWhiteSpace) {
if (string.search) {
if (ignoreWhiteSpace && string.search(/[^\.a-zA-Z\s]/) != -1) return false;
}
return true;
}

// Check that a string contains only letters
function isAlphabetic(string)
{
if (val.match(/^[\.a-zA-Z]+$/))
{
return true;
}
else
{
return false;
}
}
function isAlphabetic(string, ignoreWhiteSpace) {
if (string.search) {
if ((ignoreWhiteSpace && string.search(/[^\.a-zA-Z\s]/) != -1) || (!ignoreWhiteSpace && string.search(/[^\.a-zA-Z]/) != -1)) return false;
}
return true;
}

// Check that a string contains only numbers
function isNumeric(string, ignoreWhiteSpace) {
if (string.search) {
if ((ignoreWhiteSpace && string.search(/[^\d\s]/) != -1) || (!ignoreWhiteSpace && string.search(/\D/) != -1)) return false;
}
return true;
}

// Remove characters that might cause security problems from a string 
function removeBadCharacters(string) {
if (string.replace) {
string.replace(/[<>\"%;\)\(&\+]/, '');
}
return string;
}

// Remove all spaces from a string
function removeSpaces(string) {
var newString = '';
for (var i = 0; i < string.length; i++) {
if (string.charAt(i) != ' ') newString += string.charAt(i);
}
return newString;
}

// Remove leading and trailing whitespace from a string
function trimWhitespace(string) {
var newString  = '';
var substring  = '';
beginningFound = false;

// copy characters over to a new string
// retain whitespace characters if they are between other characters
for (var i = 0; i < string.length; i++) {

// copy non-whitespace characters
if (string.charAt(i) != ' ' && string.charCodeAt(i) != 9) {

// if the temporary string contains some whitespace characters, copy them first
if (substring != '') {
newString += substring;
substring = '';
}
newString += string.charAt(i);
if (beginningFound == false) beginningFound = true;
}

// hold whitespace characters in a temporary string if they follow a non-whitespace character
else if (beginningFound == true) substring += string.charAt(i);
}
return newString;
}

// Returns a checksum digit for a number using mod 10
function getMod10(number) {

// convert number to a string and check that it contains only digits
// return -1 for illegal input
number = '' + number;
number = removeSpaces(number);
if (!isNumeric(number)) return -1;

// calculate checksum using mod10
var checksum = 0;
for (var i = number.length - 1; i >= 0; i--) {
var isOdd = ((number.length - i) % 2 != 0) ? true : false;
digit = number.charAt(i);

if (isOdd) checksum += parseInt(digit);
else {
var evenDigit = parseInt(digit) * 2;
if (evenDigit >= 10) checksum += 1 + (evenDigit - 10);
else checksum += evenDigit;
}
}
return (checksum % 10);
}