var reWhitespace = /^\s+$/;
var reLetter = /^[a-zA-Z]$/;
var reAlphabetic = /^[a-zA-Z]+$/;
var reAlphanumeric = /^[a-zA-Z0-9]+$/;
var reDigit = /^\d/;
var reLetterOrDigit = /^([a-zA-Z]|\d)$/;
var reInteger = /^\d+$/;
var reSignedInteger = /^(\+|\-)?\d+$/;
var reFloat = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/;
var reSignedFloat = /^(((\+|\-)?\d+(\.\d*)?)|((\+|\-)?(\d*\.)?\d+))$/;
var reEmail = /^.+\@.+\..+$/;
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var whitespace = " \t\n\r";
var phoneNumberDelimiters = "()- ";
var phoneNumberDelimiters2 = "";
var validUSPhoneChars = digits + phoneNumberDelimiters;
var validWorldPhoneChars = digits + phoneNumberDelimiters + "+";
var SSNDelimiters = ".- ";
var SSNDelimiters2 = "";
var validSSNChars = digits + SSNDelimiters;
var digitsInSocialSecurityNumber = 9;
var digitsInUSPhoneNumber = 10;
var ZIPCodeDelimiters = "-";
var ZIPCodeDelimeter = "-"
var validZIPCodeChars = digits + ZIPCodeDelimiters;
var digitsInZIPCode1 = 5;
var digitsInZIPCode2 = 9;
var creditCardDelimiters = ".- ";

var defaultEmptyOK = false;

var daysInMonth = new Array(12);
daysInMonth[1] = 31;
daysInMonth[2] = 29;
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;

var theDate = new Date();
var thisMonth = theDate.getMonth();
var thisYear = theDate.getFullYear();

var months = "January,February,March,April,May,June,July,August,September,October,November,December";

var codeDelimiter = ",";

var USStateDefault = "UT";
var USStateCodes = "AL,AK,AS,AZ,AR,CA,CO,CT,DE,DC,FM,FL,GA,GU,HI,ID,IL,IN,IA,KS,KY,LA,ME,MH,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,MP,OH,OK,OR,PW,PA,PR,RI,SC,SD,TN,TX,UT,VT,VI,VA,WA,WV,WI,WY,AE,AA,AE,AE,AP";
var USStates = "Alabama,Alaska,American Samoa,Arizona,Arkansas,California,Colorado,Connecticut,Delaware,District Of Columbia,Micronesia,Florida,Georgia,Guam,Hawaii,Idaho,Illinois,Indiana,Iowa,Kansas,Kentucky,Louisiana,Maine,Marshall Islands,Maryland,Massachusetts,Michigan,Minnesota,Mississippi,Missouri,Montana,Nebraska,Nevada,New Hampshire,New Jersey,New Mexico,New York,North Carolina,North Dakota,Mariana Islands,Oiho,Oklahoma,Oregon,Palau,Pennsylvania,Puerto Rico,Rhode Island,South Carolina,South Dakota,Tennessee,Texas,Utah,Vermont,Virgin Islands,Virginia,Washington,West Virginia,Wisconsin,Wyoming,Armed Forces Africa,Armed Forces Americas,Armed Forces Canada,Armed Forces Europe,Armed Forces Middle East,Armed Forces Pacific";

var defaultPrefix = " ";
var prefixes = " ,Mr,Mrs,Ms,Miss";

var defaultSuffix = " ";
var suffixes = " ,Jr,Sr";

var iErrorCount = 0;
var aError;
aError = new Array();

var eFirstName = "Please enter a first name.";
var eLastName = "Please enter a last name.";
var eAddress = "Please enter an address.";
var eCity = "Please enter a city.";
var eZip = "Please enter a valid zip code.";
var ePhone = "Please enter a valid phone number.";
var eEMail = "Please enter a valid email address.";
var eSSN = "Please enter a valid Social Security Number.";
var eBirthday = "Please enter a valid birth date.";
var eCCNumber = "Please enter a valid credit card number.";
var eState = "Please enter a valid state code.";
var eIntPhone = "Please enter a valid phone number.";
var ePass= "Please check password again.";
var eSelected= "Field not selected.";

function isEmpty(s) {
	return ((s == null) || (s.length == 0));
}

function isWhitespace(s) {
	return (isEmpty(s) || reWhitespace.test(s));
}

function stripCharsInRE(s, bag) {
	return s.replace(bag, "");
}

function stripCharsInBag(s, bag) {
	var i;
	var returnString = "";

	for (i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}

	return returnString;
}

function stripCharsNotInBag(s, bag) {
	var i;
	var returnString = "";

	for (i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (bag.indexOf(c) != -1) returnString += c;
	}

	return returnString;
}

function stripWhitespace(s) {
    return stripCharsInBag (s, whitespace);
}

function stripInitialWhitespace(s) {
	var i = 0;

	while ((i < s.length) && indexOf(s.charAt(i), whitespace))
		i++;
    
	return s.substring (i, s.length);
}

function isLetter(c) {
	return reLetter.test(c);
}

function isDigit(c) {
	return reDigit.test(c);
}

function isLetterOrDigit(c) {
	return reLetterOrDigit.test(c);
}

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);
}

function isSignedInteger(s) {
	if (isEmpty(s))
		if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
		else return (isSignedInteger.arguments[1] == true);

	else {
		return reSignedInteger.test(s);
	}
}

function isPositiveInteger(s) {
	var secondArg = defaultEmptyOK;

	if (isPositiveInteger.arguments.length > 1)
		secondArg = isPositiveInteger.arguments[1];

	return (isSignedInteger(s, secondArg)
		&& ( (isEmpty(s) && secondArg)  || (parseInt (s) > 0) ) );
}

function isNonnegativeInteger(s) {
	var secondArg = defaultEmptyOK;

	if (isNonnegativeInteger.arguments.length > 1)
		secondArg = isNonnegativeInteger.arguments[1];

	return (isSignedInteger(s, secondArg)
		&& ( (isEmpty(s) && secondArg)  || (parseInt (s) >= 0) ) );
}

function isNegativeInteger(s) {
	var secondArg = defaultEmptyOK;

	if (isNegativeInteger.arguments.length > 1)
		secondArg = isNegativeInteger.arguments[1];

	return (isSignedInteger(s, secondArg)
		&& ( (isEmpty(s) && secondArg)  || (parseInt (s) < 0) ) );
}

function isNonpositiveInteger(s) {
	var secondArg = defaultEmptyOK;

	if (isNonpositiveInteger.arguments.length > 1)
		secondArg = isNonpositiveInteger.arguments[1];

	return (isSignedInteger(s, secondArg)
		&& ( (isEmpty(s) && secondArg)  || (parseInt (s) <= 0) ) );
}

function isFloat(s) {
	if (isEmpty(s)) 
		if (isFloat.arguments.length == 1) return defaultEmptyOK;
		else return (isFloat.arguments[1] == true);

	return reFloat.test(s)
}

function isSignedFloat(s) {
	if (isEmpty(s)) 
		if (isSignedFloat.arguments.length == 1) return defaultEmptyOK;
		else return (isSignedFloat.arguments[1] == true);
	else {
		return reSignedFloat.test(s)
	}
}

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);
	}
}

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)
	}
}

function reformat(s) {
	var arg;
	var sPos = 0;
	var resultString = "";

	for (var i = 1; i < reformat.arguments.length; i++) {
		arg = reformat.arguments[i];
		if (i % 2 == 1) resultString += arg;
		else {
			resultString += s.substring(sPos, sPos + arg);
			sPos += arg;
		}
	}
	return resultString;
}

function isSSN(s) {
	if (isEmpty(s)) 
		if (isSSN.arguments.length == 1) return defaultEmptyOK;
		else return (isSSN.arguments[1] == true);
	return (isInteger(s) && s.length == digitsInSocialSecurityNumber)
}

function isEIN(s) {
	if (isEmpty(s)) 
		if (isEIN.arguments.length == 1) return defaultEmptyOK;
		else return (isEIN.arguments[1] == true);
	return (isInteger(s) && s.length >= 9)
}


function isUSPhoneNumber(s) {
	if (isEmpty(s)) 
		if (isUSPhoneNumber.arguments.length == 1) return defaultEmptyOK;
		else return (isUSPhoneNumber.arguments[1] == true);
	return (isInteger(s) && s.length == digitsInUSPhoneNumber)
}

function isInternationalPhoneNumber(s) {
	if (isEmpty(s)) 
		if (isInternationalPhoneNumber.arguments.length == 1) return defaultEmptyOK;
		else return (isInternationalPhoneNumber.arguments[1] == true);
	return (isPositiveInteger(s))
}

function isZIPCode(s) {
	if (isEmpty(s)) 
		if (isZIPCode.arguments.length == 1) return defaultEmptyOK;
		else return (isZIPCode.arguments[1] == true);
	return (isInteger(s) && 
			((s.length == digitsInZIPCode1) ||
			(s.length == digitsInZIPCode2)))
}

function isStateCode(s) {
		if (isEmpty(s)) 
		if (isStateCode.arguments.length == 1) return defaultEmptyOK;
		else return (isStateCode.arguments[1] == true);
	return ( (USStateCodes.indexOf(s) != -1) &&
			(s.indexOf(codeDelimiter) == -1) )
}

function isEmail(s) {
	if (isEmpty(s)) 
	if (isEmail.arguments.length == 1) return defaultEmptyOK;
	else return (isEmail.arguments[1] == true);

	else {
		return reEmail.test(s)
	}
}

function isYear(s) {
	if (isEmpty(s)) 
	if (isYear.arguments.length == 1) return defaultEmptyOK;
	else return (isYear.arguments[1] == true);
	if (!isNonnegativeInteger(s)) return false;
	return ((s.length == 2) || (s.length == 4));
}

function isIntegerInRange(s, a, b) {
	if (isEmpty(s)) 
	if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK;
	else return (isIntegerInRange.arguments[1] == true);

	if (!isInteger(s, false)) return false;

	var num = parseInt (s);
	return ((num >= a) && (num <= b));
}

function isMonth(s) {
	if (isEmpty(s)) 
	if (isMonth.arguments.length == 1) return defaultEmptyOK;
	else return (isMonth.arguments[1] == true);
	return isIntegerInRange (s, 1, 12);
}

function isDay(s) {
	if (isEmpty(s)) 
	if (isDay.arguments.length == 1) return defaultEmptyOK;
	else return (isDay.arguments[1] == true);   
	return isIntegerInRange (s, 1, 31);
}

function daysInFebruary(year) {
	return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function isDate(year, month, day) {
	if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;

	var intYear = parseInt(year);
	var intMonth = parseInt(month);
	var intDay = parseInt(day);

	if (intDay > daysInMonth[intMonth]) return false; 

	if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;

	return true;
}

function isChecked(field) {
	if (field.checked == true) return true;
	else return false;
}

function checkSelectedAnyInGroup(form, fieldName, error) {
	if (!error) error = eSelected;
	var elements = form.elements[fieldName];
	for( i = 0; i<elements.length; i++ )
	{
		if (elements[i].checked) return true;
	}
	addError(error);
	return false;
}


function checkSelected(theField, error) {
	if (!error) error = eSelected;
	if (isChecked(theField)) return true;
	else {
		addError(error);
		return false;
	}
}

function checkString(theField, error, emptyOK) {
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (isWhitespace(theField.value)) {
		addError(error);
		return false;
	} else {
		return true;
	}
}

function checkStateCode(theField, error, emptyOK) {
	if (! error) error = eState;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else
	{  theField.value = theField.value.toUpperCase();
		if (!isStateCode(theField.value, false)) {
			addError(error);
			return false;
		} else {
			return true;
		}
	}
}

function reformatZIPCode(ZIPString) {
	if (ZIPString.length == 5) return ZIPString;
	else return (reformat (ZIPString, "", 5, "-", 4));
}

function checkZIPCode(theField, error, emptyOK) {
	if (! error) error = eZip;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else
	{ var normalizedZIP = stripCharsInBag(theField.value, ZIPCodeDelimiters)
		if (!isZIPCode(normalizedZIP, false))  {
			addError(error);
			return false;
		} else {
			theField.value = reformatZIPCode(normalizedZIP);
			return true;
		}
	}
}

function reformatUSPhone(USPhone, theField) {
	return (reformat (USPhone, "", 3, "-", 3, "-", 4))
}

function checkUSPhone2(theField, error, emptyOK) {
	if (! error) error = ePhone;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField))) return true;
	else
	{  var normalizedPhone = stripCharsInBag(theField, phoneNumberDelimiters2)
		if (!isUSPhoneNumber(normalizedPhone, false)) {
			addError(error);
			return false;
		} else {
			return true;
		}
	}
}

function checkUSPhone(theField, error, emptyOK) {
	if (! error) error = ePhone;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else
	{  var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)
		if (!isUSPhoneNumber(normalizedPhone, false)) {
			addError(error);
			return false;
		} else {
			theField.value = reformatUSPhone(normalizedPhone)
			return true;
		}
	}
}


function checkPass(theField1,theField2, error) {
	if (! error) error = ePass;
	if ((theField1.value != theField2.value) || isEmpty(theField1.value) || isEmpty(theField2.value)) {
			addError(error);
			return false;
		} else {
			return true;
		}
}

function checkPass2(theField1,theField2, error,emptyOK) {
	if (! error) error = ePass;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField1.value))) return true;
	else {
		if (theField1.value != theField2.value) {
			addError(error);
			return false;
		} else {
			return true;
		}
	}
}

function checkInternationalPhone(theField, error, emptyOK) {
	if (! error) error = eIntPhone;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else
	{  if (!isInternationalPhoneNumber(theField.value, false)) {
			addError(error);
			return false;
		} else {
			return true;
		}
	}
}

function checkEmail(theField, error, emptyOK) {
	if (! error) error = eEMail;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else if (!isEmail(theField.value, false)) {
		addError(error);
		return false;
	} else {
		return true;
	}
}

function reformatSSN(SSN) {
	return (reformat (SSN, "", 3, "-", 2, "-", 4))
}
function reformatEIN(EIN) {
	return (reformat (EIN, "", 2, "-", 7))
}


function checkEIN(theField, error, emptyOK) {
	if (! error) error = eSSN;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else
	{  
		var normalizedEIN = stripCharsInBag(theField.value, SSNDelimiters)
		if (!isSSN(normalizedEIN, false))  {
			addError(error);
			return false;
		} else {
			theField.value = reformatEIN(normalizedEIN)
			return true;
		}
	}
}

function checkEIN2(theField, error, emptyOK) {
	if (! error) error = eSSN;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else
	{  var normalizedEIN = stripCharsInBag(theField.value, SSNDelimiters2)
		if (!isSSN(normalizedEIN, false))  {
			addError(error);
			return false;
		} else {
			return true;
		}
	}
}

function checkEIN3(theField, error, emptyOK) {
	if (! error) error = eSSN;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else
	{  var normalizedEIN = stripCharsInBag(theField.value, SSNDelimiters2)
		if (!isEIN(normalizedEIN, false))  {
			addError(error);
			return false;
		} else {
			theFiels.value = normalizedEIN;
			return true;
		}
	}
}


function checkSSN(theField, error, emptyOK) {
	if (! error) error = eSSN;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else
	{  var normalizedSSN = stripCharsInBag(theField.value, SSNDelimiters)
		if (!isSSN(normalizedSSN, false))  {
			addError(error);
			return false;
		} else {
			theField.value = reformatSSN(normalizedSSN)
			return true;
		}
	}
}

function checkSSN2(theField, error, emptyOK) {
	if (! error) error = eSSN;
	if (! emptyOK) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField))) return true;
	else
	{  var normalizedSSN = stripCharsInBag(theField, SSNDelimiters2)
		if (!isSSN(normalizedSSN, false))  {
			addError(error);
			return false;
		} else {
			return true;
		}
	}
}


function checkYear(theField, emptyOK) {
	if (checkYear.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (!isYear(theField.value, false)) 
		return false;
	else return true;
}

function checkMonth(theField, emptyOK) {
	if (checkMonth.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (!isMonth(theField.value, false)) 
		return false;
	else return true;
}

function checkDay(theField, emptyOK) {
	if (checkDay.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (!isDay(theField.value, false)) 
		return false;
	else return true;
}

function checkDate(yearField, monthField, dayField, error, OKtoOmitDay) { 
	if (checkDate.arguments.length == 4) OKtoOmitDay = false;
	if (!isYear(yearField.value)) addError(error); return false;
	if (!isMonth(monthField.value)) addError(error); return false;
	if ( (OKtoOmitDay == true) && isEmpty(dayField.value) ) return true;
	else if (!isDay(dayField.value)) {
		addError(error);
		return false;
	}
	if (isDate (yearField.value, monthField.value, dayField.value))
		return true;

	addError(error);
	return false
}

function checkDateAsString(dateField, error) { 
	if(!checkString(dateField)){
		addError(error);
		return false;
	}	
	parts=dateField.value.split("/");
	if(parts.length<3||parts.length>3){
		addError(error);
		return false;
	}
	month = parts[0];
	if(month.charAt(0)=='0') month=month.substring(1,month.length);
	day = parts[1];
	if(day.charAt(0)=='0') day=day.substring(1,day.length);
	year = parts[2];
	if(!isDate(year, month, day)){
		addError(error);
		return false;
	}
	return true;
}

function writeStates() {
	var selected = (writeStates.arguments.length == 1) ? writeStates.arguments[0] : USStateDefault;

	document.write('<select name=state>');
	
	aStateCodes = USStateCodes.split(codeDelimiter);
	aStates = USStates.split(codeDelimiter);
	for ( var x = 0; x < aStateCodes.length; x++ ) {
		if (aStateCodes[x] == selected) {
			document.write('<option value=\"'+ aStateCodes[x] + '\" selected>'+ aStates[x]);
		} else {
			document.write('<option value=\"'+ aStateCodes[x] + '\">'+ aStates[x]);
		}
	}
	
	document.write('</select>');
}

function writeCounties() {
	var selected = (writeCounties.arguments.length == 1) ? writeCounties.arguments[0] : CountyDefault;

	document.write('<select name=counties>');
	
	aCounties = UtahCounties.split(codeDelimiter);
	for ( var x = 0; x < aCounties.length; x++ ) {
		if (aCounties[x] == selected) {
			document.write('<option value=\"'+ aCounties[x] + '\" selected>'+ aCounties[x]);
		} else {
			document.write('<option value=\"'+ aCounties[x] + '\">'+ aCounties[x]);
		}
	}
	
	document.write('</select>');
}

function writeMonths(group) {
	var selected = (writeMonths.arguments.length == 2) ? writeMonths.arguments[1] : thisMonth;
	
	document.write('<select name=months_'+ group +' onChange=\"updateDays(\''+ group +'\', this.form)\">');
	
	aMonths = months.split(codeDelimiter);
	for ( var x = 0; x < aMonths.length; x++ ) {
		if (x == selected) {
			document.write('<option value=\"'+ x + '\" selected>'+ aMonths[x]);
		} else {
			document.write('<option value=\"'+ x + '\">'+ aMonths[x]);
		}
	}
	
	document.write('</select>');
}

function writeDays(group) {
	var OKtoOmitDay = (writeDays.arguments.length == 2) ? true : false;
	var selected = (writeDays.arguments.length == 3) ? writeDays.arguments[2] : theDate.getDate();

	document.write('<select name=\"days_'+ group +'\">');
	if (OKtoOmitDay) {
		document.write('<option value=\"\">none');
	}

	for ( var x = 1; x < (daysInMonth[thisMonth] + 1); x++ ) {
		if (x == selected) {
			document.write('<option value=\"'+ x + '\" selected>'+ x);
		} else {
			document.write('<option value=\"'+ x + '\">'+ x);
		}
	}
	
	document.write('</select>');
}

function writeYears(group, start, end) {
	var selected = (writeYears.arguments.length == 4) ? writeYears.arguments[3] : theDate.getFullYear();

	document.write('<select name=\"years_'+ group +'\" onChange=\"updateDays(\''+ group +'\', this.form)\">');
	
	for (x = start; x <= end; x++) {
		if (x == selected) {
			document.write('<option value=\"'+ x + '\" selected>'+ x);
		} else {
			document.write('<option value=\"'+ x + '\">'+ x);
		}
	}
	
	document.write('</select>');
}

function addError(s) {
	aError[iErrorCount] = s;
	iErrorCount++;
}

function returnError(newLine) {
	if (! newLine)
		newLine = '|'; //can also be '\n' or anything else you might need
	
	var sError = '';
	for (x=0; x < aError.length; x++) {
		sError += aError[x] + newLine;
	}
	
	aError = null;
	aError = new Array;
	iErrorCount = 0;
	return sError;
}

function returnError2(newLine) {
	if (! newLine)
		newLine = '\n'; //can also be '\n' or anything else you might need
	
	var sError = '';
	for (x=0; x < aError.length; x++) {
		sError += aError[x] + newLine;
	}
	
	aError = null;
	aError = new Array;
	iErrorCount = 0;
	return(sError);
}

function hasErrors() {
	return (aError.length == 0) ? false : true;
}

function errorWindow(error, width, height, startHTML, endHTML) {
	if (! error) error = returnError();
	set_error(error);
}
function errorWindow2(error, width, height, startHTML, endHTML) {
	if (! error) error = returnError2();
	alert(error);
}
/** function to make all checks for form "form"
 * Code sample
 * function validateNewsForm(form) {
 * var compound=new Array(
 * ["postDate", "date", "Please enter a valid Article Date."],
 * ["expirationDate", "date", "Please enter a valid Expiration Date"],
 * ["urlLink", "string", "Please enter a valid URL."],
 * ["text", "string", "Please enter a valid Article Text."],
 * ["categories", "group_check", "Please select a category."],
 * ["placement", "string", "Please enter a valid Placement."]);
 * 
 * checkAll(form, compound);
 * return false;
 * }
 * The first value of array element is form element's name
 * The second value is validation type
 * Now supported the following types:
 * 'password' - password checking (Attention - to validate password you should define 2 fileds in format passwordFld1Name|passwordFld2Name in the first array value
 * 'string'	- simple check for existance
 * 'usdate' - sheck date in us format			
 * 'group_check' - check is any of the multycheckboxes 	selected
 * 'check' - check is a checkbox checked
 * 'uszip' - check US zip code
 * 'us_phone' - check US phone			
 * 'phone' - check international phone
 * 'email' - check e-mail			
 * 'ssn' - check SSN
 * 'state_code' - check US state code 
 */
function checkAll(form, compound) 
{
	error="";
	for(iii=0;iii<compound.length;iii++)
	{
		validationType = compound[iii][1];
		errorMsg = compound[iii][2];
		if(validationType=='password')
		{
			fnames = compound[iii][0].split('|');
			if(fnames.length!=2){
				alert('To validate password you should define 2 fileds in format passwordFld1Name|passwordFld2Name');
				return false;
			}
			else if(!checkPass(form.elements[fnames[0]],form.elements[fnames[1]])) error+=errorMsg+"\n";
			continue;
		}
		fieldName = compound[iii][0];
		anElement = form.elements[fieldName];
		if(!anElement)
		{
			alert('From does not contains element with name '+fieldName);
			return false;
		}
		switch(validationType){

		  case 'string':
			if(!checkString(anElement)) error+=errorMsg+"\n";
			break;
			
		  case 'usdate':
		  	if(!checkDateAsString(anElement)) error+=errorMsg+"\n";
			break;
			
		  case 'group_check':
		  	if(!checkSelectedAnyInGroup(form,fieldName)) error+=errorMsg+"\n";
			break;			
			
		  case 'check':
		  	if(!checkSelected(anElement)) error+=errorMsg+"\n";
			break;			

		  case 'uszip':
		  	if(!checkZIPCode(anElement)) error+=errorMsg+"\n";
			break;			

		  case 'us_phone':
		  	if(!checkUSPhone(anElement)) error+=errorMsg+"\n";
			break;			
			
		  case 'phone':
		  	if(!checkInternationalPhone(anElement)) error+=errorMsg+"\n";
			break;						

		  case 'email':
		  	if(!checkEmail(anElement)) error+=errorMsg+"\n";
			break;						
			
		  case 'ssn':
		  	if(!checkSSN(anElement)) error+=errorMsg+"\n";
			break;						

		  case 'state_code':
		  	if(!checkStateCode(anElement)) error+=errorMsg+"\n";
			break;
			
		  case 'float':
		  	if(!isFloat(anElement.value)) error+=errorMsg+"\n";
			break;

		  case 'integer':
		  	if(!isInteger(anElement.value)) error+=errorMsg+"\n";
			break;			
			
		  default: 
			alert('Unsupported validation type '+validationType);
			return false;
	   }	
	}
	if(error!="")
	{ 
		alert(error);
		return false;
	}
	else return true;
}





