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][2];
        errorMsg = compound[iii][1];
        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;
        }
        var isEmptyOK = false;
        if( compound[iii].length > 3 )
            isEmptyOK = compound[iii][3];
            
        switch(validationType){

          case 'string':
            if(!checkString(anElement,"",isEmptyOK)) error+=errorMsg+"\n";
            break;
            
          case 'usdate':
            if(!checkDateAsString(anElement,"",isEmptyOK)) 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,"",isEmptyOK)) error+=errorMsg+"\n";
            break;          

          case 'us_phone':
            if(!checkUSPhone(anElement,"", isEmptyOK)) error+=errorMsg+"\n";
            break;          
            
          case 'phone':
            if(!checkInternationalPhone(anElement, "", isEmptyOK)) error+=errorMsg+"\n";
            break;                      

          case 'email':
            if(!checkEmail(anElement,"",isEmptyOK)) error+=errorMsg+"\n";
            break;                      
            
          case 'ssn':
            if(!checkSSN(anElement,"",isEmptyOK)) error+=errorMsg+"\n";
            break;                      

          case 'state_code':
            if(!checkStateCode(anElement,"",isEmptyOK)) error+=errorMsg+"\n";
            break;
            
          case 'float':
            if(!isFloat(anElement.value,"",isEmptyOK)) error+=errorMsg+"\n";
            break;

          case 'integer':
            if(!isInteger(anElement.value,"",isEmptyOK)) error+=errorMsg+"\n";
            break;          
            
          default: 
            alert('Unsupported validation type '+validationType);
            return false;
       }    
    }
    if(error!="")
    { 
        alert(error);
        return false;
    }
    else return true;
}





