//
// FIELD VALIDATION CODE version 2.3

function genericFormValidate (theForm) {
    var i, sname, aname, errMessage, validationType, field, title, field2, title2, re, fieldToValidate;
    errMessage = "";
    for (var i=0;i <= theForm.elements.length;i++) {
        if (theForm.elements[i] && theForm.elements[i].name) {
            sname = theForm.elements[i].name;
            if ((sname.indexOf ("_validate_") != -1) && !(theForm.elements[i].disabled)) {
                field = sname.substring(0,sname.indexOf ("_validate_"));
                validationType = sname.substr(sname.indexOf ("_validate_")+10);
                fieldToValidate = theForm.elements[field]; // use for singletons--not selects, radios, etc.
                fieldToValidate2 = theForm.elements[field]; // for selects, radios, etc.
                if (theForm.elements[field].length && (theForm.elements[field].length > 1)) {
                    for (var j = 0; j < theForm.elements[field].length; j++) {
                        if (!theForm.elements[field][j].disabled) {
                            fieldToValidate = theForm.elements[field][j];
                        }
                    }
                }
                var tagstofind = String("|select|radio|");
                if (theForm.elements[field].length && (theForm.elements[field].length > 1) && (theForm.elements[field][0].tagName) && (tagstofind.indexOf(theForm.elements[field][0].tagName.toLowerCase()) > 0) ) {
                    for (var j = 0; j < theForm.elements[field].length; j++) {
                        if (!theForm.elements[field][j].disabled) {
                            fieldToValidate2 = theForm.elements[field][j];
                        }
                    }
                }
                if (fieldToValidate.title) {
                    title = fieldToValidate.title;
                } else {
                    title = field;
                }
                switch (validationType) {
                    case "required" :
                        if (fieldToValidate.value == "") {
                            errMessage += title + " is a required field\n";
                        };
                        break;
                    case "equalsfield" :
                        field2 = theForm.elements[i].value;
                        if (theForm.elements[field2].title) {
                            title2 = theForm.elements[field2].title;
                        } else {
                            title2 = theForm.elements[field2].name;
                        }
                        if (fieldToValidate.value != theForm.elements[field2].value) {
                            errMessage += title + " must match " + title2 + "\n";
                        }
                        break;
                    case "equals" :
                        if (theForm.elements[i].title) {
                            title2 = theForm.elements[i].title;
                        } else {
                            title2 = title + " must be '" + theForm.elements[i].value + "'";
                        }
                        if (fieldToValidate.value != theForm.elements[i].value) {
                            errMessage += title2 + "\n";
                        }
                        break;
                    case "notequal" :
                        if (theForm.elements[i].title) {
                            title2 = theForm.elements[i].title;
                        } else {
                            title2 = title + " cannot be '" + theForm.elements[i].value + "'";
                        }
                        if (fieldToValidate.value == theForm.elements[i].value) {
                            errMessage += title2 + "\n";
                        }
                        break;
                    case "regexp" :
                        re = new RegExp(theForm.elements[i].value);
                        if (theForm.elements[i].title) {
                            title2 = theForm.elements[i].title;
                        } else {
                            title2 = "is not a valid entry";
                        }
                        if (fieldToValidate.value && !fieldToValidate.value.match(re)) {
                            errMessage += title + " " + title2 +"\n";
                        }
                        break;
                    case "notregexp" :
                        re = new RegExp(theForm.elements[i].value);
                        if (theForm.elements[i].title) {
                            title2 = theForm.elements[i].title;
                        } else {
                            title2 = "is not a valid entry";
                        }
                        if (fieldToValidate.value && fieldToValidate.value.match(re)) {
                            errMessage += title + " " + title2 +"\n";
                        }
                        break;
                    case "date" :
                        /* the only problem with doing it this way is that JavaScript automatically corrects dates that don't make sense to ASP (like 22/22/2000) so, maybe you're better off using a reg-exp */
                        if (fieldToValidate.value && Date.parse(fieldToValidate.value) != Date.parse(fieldToValidate.value)) {
                            errMessage += title + " is not a valid date\n";
                        }
//                        var newDate = new Date(Date.parse(theForm.elements[field].value));
//                        alert (newDate);
                        break;
                    case "radiorequired" :
                        found = false;
                        for (counter = 0; counter < fieldToValidate2.length; counter++)
                        {
                            if (fieldToValidate2[counter].checked)
                                found = true; 
                        }
                        if (!found) {
                            errMessage += theForm.elements[i].value + "\n";
                        }
                        break;
                    case "selected" :
                        var isSelected = false
                        if (fieldToValidate2.multiple) {
                            var theoptions = fieldToValidate2.options;
                            for (var z=0; z<theoptions.length; z++) {
                                isSelected = isSelected || (theoptions[z].selected && (theoptions[z].value != ''));
                            }
                        } else {
                            isSelected = ((fieldToValidate2.selectedIndex != 0) && (fieldToValidate2.options[fieldToValidate2.selectedIndex].value != ''));
                        }
                        if (!isSelected) {
                            if (fieldToValidate2.title) {
                                errMessage += fieldToValidate2.title + " must be selected\n"
                            } else {
                                if (theForm.elements[i].title) {
                                    errMessage += theForm.elements[i].title + " must be selected\n"
                                } else {
                                    errMessage += title + " must be selected\n"
                                }
                            }
                        }
                        break;
                    case "checkgroup" :
                        var a = theForm.elements[i].value.split ('|');
                        var mincount = a[0];
                        var maxcount = a[1];
                        var thecount = 0;
                        for (var j=2; j<a.length; j++) {
                            if (theForm.elements[a[j]].checked) {
                                thecount++;
                            }
                        };
                        if (theForm.elements[i].title) {
                            title2 = theForm.elements[i].title;
                        } else {
                            title2 = "requires a selection";
                        }
                        if ((mincount > thecount) || ((maxcount >= 0) && (thecount > maxcount))) {
                            errMessage += title + " " + title2 + "\n";
                        }
                        break;
                    default : ;
                }
            }    
        }
    }
    if (errMessage.length > 0) {
        alert (errMessage);
        return false;
    } else {
        return true;
    }
}