

var defaultEmptyOK = false;

// CONSTANT STRING DECLARATIONS
// (grouped for ease of translation and localization)

// regular expressions used for checking fields

var reEmail = /^([a-zA-Z0-9_\.\'\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
var reZIP = /(^\d{5}$)|(^\d{9}$)|(^\d{5}-\d{4}$)/;
var reWhitespace = /^\s+$/;
var reAlphanumeric = /^[a-zA-Z0-9 ]+$/;
var reInteger = /^[\d ]+$/;
var reAlphabetic = /^[a-zA-Z ]+$/;
var reDate= /(0[1-9]|1[012])[\/](0[1-9]|[12][0-9]|3[01])[\/](20)\d\d/;

// 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){
	// Is s empty?
	return (isEmpty(s) || reWhitespace.test(s));
}

/* FUNCTIONS TO INTERACTIVELY CHECK VARIOUS FIELDS. */

// isAlphanumeric (STRING s [, BOOLEAN emptyOK])
//
// Returns true if string s is English letters
// (A .. Z, a..z) and numbers only.
//
// For explanation of optional argument emptyOK,
// see comments of function isInteger.
//
// NOTE: Need i18n version to support European characters.
// This could be tricky due to different character
// sets and orderings for various languages and platforms.

function isAlphanumeric(s){
	var i;
	if(isEmpty(s)){
		if(isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
		else return (isAlphanumeric.arguments[1] == true);
	}else{
		return reAlphanumeric.test(s);
	}
}

// isInteger (STRING s [, BOOLEAN emptyOK])
//
// Returns true if all characters in string s are numbers.
//
// Accepts non-signed integers only. Does not accept floating
// point, exponential notation, etc.
//
// We don't use parseInt because that would accept a string
// with trailing non-numeric characters.
//
// By default, returns defaultEmptyOK if s is empty.
// There is an optional second argument called emptyOK.
// emptyOK is used to override for a single function call
//      the default behavior which is specified globally by
//      defaultEmptyOK.
// If emptyOK is false (or any value other than true),
//      the function will return false if s is empty.
// If emptyOK is true, the function will return true if s is empty.
//
// EXAMPLE FUNCTION CALL:     RESULT:
// isInteger ("5")            true
// isInteger ("")             defaultEmptyOK
// isInteger ("-5")           false
// isInteger ("", true)       true
// isInteger ("", false)      false
// isInteger ("5", false)     true

function isInteger(s){
	var i;
	if(isEmpty(s)){
       	if(isInteger.arguments.length == 1) return defaultEmptyOK;
       	else return (isInteger.arguments[1] == true);
      }
	return reInteger.test(s);
}

// isAlphabetic (STRING s [, BOOLEAN emptyOK])
//
// Returns true if string s is English letters
// (A .. Z, a..z) only.
//
function isAlphabetic(s){
	var i;
	if(isEmpty(s)){
		if(isAlphabetic.arguments.length == 1) return defaultEmptyOK;
		else return (isAlphabetic.arguments[1] == true);
	}else{
		return reAlphabetic.test(s);
	}
}


// EDITS

//strip whitespace
function stripWhitespace(s){
	var sStripped = "";
	for(n=0;n<s.length;n++){
		var ch = s.charAt(n);
		if( !isWhitespace(ch) )
			sStripped += ch;
	}
	return sStripped;
}

// individual elements checking -- return FALSE if action required, TRUE if all is well

// check Comments textbox length. Defaults to 500 characters. Return false if empty
function checkComments(commentsField){
	if(isEmpty(commentsField.value)){
		alert("Please enter a Comment/Question.");
		commentsField.focus();
		return false;
	}
	return true;
}

// check Comments textbox length. Defaults to 500 characters. Return false if exceeded
function checkCommentsLength(commentsField,maxlength){
	if(!maxlength)maxlength=500;
	var comments = commentsField.value;
	if( comments.length > maxlength ){
		alert("Please condense your comment/question to "+maxlength+" characters.\nThe current amount of characters is "+comments.length+".");
		commentsField.focus();
		return false;  // max length exceeded
	}
	return true;
}

// check Name
function checkField(nameField,desc){
	if(!desc)desc="";
	if(isEmpty(nameField.value)){
		alert("Please enter "+desc);
		nameField.focus();
		return false;
	}
	return true;
}

// check Name
function checkName(nameField,label){
	if(!label)label="";
	else label +=" ";
	if(isEmpty(nameField.value)){
		alert("Please enter your "+label+"name.");
		nameField.focus();
		return false;
	}
	return true;
}

// check Organization
function checkOrganization(orgField){
	if(isEmpty(orgField.value)){
		alert("Please enter your organization.");
		orgField.focus();
		return false;
	}
	return true;
}

// check Email to conform to standard email format
function checkEmail(emailField){
	if (!reEmail.test(emailField.value)||emailField.value==""){
		alert('Please enter a valid email address.');
		emailField.focus();
		return false;
	}
	return true;
}

// check State selected from drop-down
function checkStateSelected(stateSelectField){
	if(stateSelectField.selectedIndex==0){
		alert("Please select a state.");
		stateSelectField.focus();
		return false;
	}
	return true;
}

// check ZIP to confirm to standard format
function checkZIP(ZIPfield){
	s = stripWhitespace(ZIPfield.value);
	if(!reZIP.test(s)){
		alert("Please enter a valid ZIP code.");
		ZIPfield.focus();
		return false;
	}
	return true;
}

//validate date
function checkDate(sField){
	var s = sField.value;
	if(isEmpty(s) || !reDate.test(s)){
		alert("Please enter a valid date (mm/dd/yyyy).");
		sField.focus();
		return false;
	}
	return true;
}

// check Contact Method
// check form element values before submitting
// if all fields look good return true so that the form can be submitted

function checkContactMethod(frm){
	for (i = 0; i < frm.elements.length; i++){
		if (frm.elements[i].type == "radio" && frm.elements[i].name == "preferredContactMethod" && frm.elements[i].checked){
			if(frm.elements[i].value == "Email"){
				if(!checkEmail(frm.customerEmail)){
					return false;
				}
			}

			if(frm.elements[i].value == "Phone"){
				nCheckLength = frm.nr_PhoneAreaCode.value.length + frm.nr_PhonePrefix.value.length + frm.nr_PhoneSuffix.value.length;
				if (nCheckLength >= 1 ){
					if( !phoneFieldsValidate(frm,frm.nr_PhoneAreaCode,frm.nr_PhonePrefix,frm.nr_PhoneSuffix) ){
						return false;
					}
				}else if(nCheckLength==0){
					alert("Please enter a complete phone number using numbers only.");
					frm.nr_PhoneAreaCode.focus();
					return false;
				}
			}

			if(frm.elements[i].value == "Fax"){
				nCheckLength = frm.nr_FaxAreaCode.value.length + frm.nr_FaxPrefix.value.length + frm.nr_FaxSuffix.value.length;
				if (nCheckLength >= 1 ){
					if( !phoneFieldsValidate(frm,frm.nr_FaxAreaCode,frm.nr_FaxPrefix,frm.nr_FaxSuffix,"fax") ){
						return false;
					}
				}else if(nCheckLength==0){
					alert("Please enter a complete fax number using numbers only.");
					frm.nr_FaxAreaCode.focus();
					return false;
				}
			}

			if(frm.elements[i].value == "Postal Mail"){
				if( frm.customerAddress1.value=="" ){
					alert("Please enter your street address.");
					frm.customerAddress1.focus();
					return false;
				}

				if( frm.city.value=="" ){
					alert("Please enter your city.");
					frm.city.focus();
					return false;
				}

				if( !checkStateSelected(frm.customerState) ){
					return false;
				}

				if( !checkZIP(frm.customerZipcode) ){
					return false;
				}
			}
		}
	}
	return true;
}
