// Trim whitespace from left and right sides of s.

function trim(s) {
    return s.replace(/^\s*/, "").replace(/\s*$/, "");
}

function validateRequired(form) {
    return validateRequired_Name(form, form.name);
}

function validateRequired_Name(form, name) {
    var isValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    //              oRequired = new required();
    var oRequired = eval(" new " + name + "_required();");
    var ctlRequireds = form.elements;
    for (var x in oRequired) {
        var ctlName = oRequired[x][0];
        for (var j = 0; j < ctlRequireds.length; j++) {
            if (ctlRequireds[j] != null && (ctlRequireds[j].name.indexOf(ctlName) != -1)) {

                var field = form[ctlRequireds[j].name];
                if (field.type == 'text' ||
                    field.type == 'textarea' ||
                    field.type == 'file' ||
                    field.type == 'select-one' ||
                    field.type == 'radio' ||
                    field.type == 'password') {

                    var value = '';
                    // get field's value
                    if (field.type == "select-one") {
                        var si = field.selectedIndex;
                        if (si >= 0) {
                            value = field.options[si].value;
                        }
                    } else {
                        value = field.value;
                    }

                    if (trim(value).length == 0) {

                        if (i == 0) {
                            focusField = field;
                        }
                        var emFound = false;
                        for (var ii = 0; ii < i; ii++) {
                            if (fields[ii].indexOf(oRequired[x][1]) != -1) {
                                emFound = true;
                                break;
                            }
                        }
                        if (!emFound) {
                            fields[i++] = oRequired[x][1];
                        }


                        isValid = false;
                    }

                } // if (field.type == 'text' ||
            } // if (ctlRequireds[j] != null
        }
        // for (j = 0; j < ctlRequireds.length; j++ )
    }
    // for (x in oRequired)
    if (fields.length > 0) {
        focusField.focus();
        //  alert("validateRequired:"+fields.join('\n'));
        alert(fields.join('\n'));
    }
    return isValid;
}

function validateEmail(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();

    var oEmail = eval(" new " + form.name + "_email();");
    for (var x in oEmail) {
        if ((form[oEmail[x][0]].type == 'text' ||
             form[oEmail[x][0]].type == 'textarea') &&
            (form[oEmail[x][0]].value.length > 0)) {
            if (!checkEmail(form[oEmail[x][0]].value)) {
                if (i == 0) {
                    focusField = form[oEmail[x][0]];
                }
                fields[i++] = oEmail[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        alert(fields.join('\n'));
    }
    return bValid;
}

/**
 * Reference: Eugene Glyantsev (glyantsev_e@mail.ru),
 * http://javascript.internet.com
 */


function checkEmail(emailStr) {
    if (emailStr.length == 0) {
        return true;
    }

    var emailPat = /^(.+)@(.+)$/;
    var specialChars = "\\+\\/\\-\\?=\\{\\}";

    var validChars = "[A-Za-z_0-9" + specialChars + "]";
    var domainValidChars = "[A-Za-z_0-9" + specialChars + "]";

    var quotedUser = "(\"[^\"]*\")";
    var ipDomainPat = /^(\d{1,3})[\.](\d{1,3})[\.](\d{1,3})[\.](\d{1,3})$/;

    var atom = validChars + '+';
    var domainAtom = domainValidChars + '+';

    var word = "(" + atom + "|" + quotedUser + ")";
    var userPat = new RegExp("^" + word + "(\\." + word + ")*$");    var domainPat = new RegExp("^" + domainAtom + "(\\." + domainAtom + ")+$");

    var tooManyDots = /([\&\'\*\+\/\-\?\=\^\{\}\~]{2,})/;
    var tooManyNumbers = /(\d{3,})/;

    var containsLetter = /[A-Za-z]+/;
    var containsNumber = /\d+/;

    var matchArray = emailStr.match(emailPat);
    if (matchArray == null) {
        return false;
    }

    var user = matchArray[1];
    var domain = matchArray[2];

    if (user.match(userPat) == null) {
        return false;
    }

    if (tooManyDots.test(user) || !containsLetter.test(user))
        return false;


    var IPArray = domain.match(ipDomainPat);

    if (IPArray) {
        for (var i = 1; i <= 4; i++) {
            if (IPArray[i] > 255) {
               return false;
            }
        }
        return true;
    }

    if (tooManyDots.test(domain) || tooManyNumbers.test(domain) || !containsLetter.test(domain))
        return false;

    var domainArray = domain.match(domainPat);
    var domainLength = (domainArray != null)?domainArray [domainArray.length-1] .length-1:0;

    return ( domainArray != null && (domainLength > 1 && domainLength < 5)
              && !containsNumber.test(domainArray[domainArray.length-1]));

}
