﻿// JScript File


function formValidator(boxPosition) {
    this.fields = new Object();
    this.ebox = new errorBox(boxPosition);
    this.fErrors = new Object();
    this.comparedFields = new Object();
    this.radioButtons = new Object();
    this.exclamation = "<strong>!</strong>&nbsp;&nbsp;&nbsp;";
}

formValidator.prototype.addErrorMessage = function(errorID,errorMsg,hasExclamation) {
    var errorSet = new Object();

    if(hasExclamation) {
        errorMsg = this.exclamation + errorMsg;
    }

    errorSet.errorID = errorID;
    errorSet.hasExclamation = hasExclamation;
    errorSet.errorMsg = errorMsg;
    
    this.fErrors[errorID] = errorSet;
}

formValidator.prototype.addField = function(fieldId,errorMsg,hasExclamation,validationType) {
    if(hasExclamation) {
        errorMsg = this.exclamation + errorMsg;
    }
    this.fields[fieldId] = new formField(fieldId,errorMsg,validationType);
}

formValidator.prototype.removeField = function(fieldId) {
    this.fields[fieldId] = null;
}

formValidator.prototype.addComparedFields = function(setName,fieldId1, fieldId2, errorMsg) {
    var fieldSet = new Object();
    fieldSet.field1 = new formField(fieldId1,"",null);
    fieldSet.field2 = new formField(fieldId2,"",null);
    fieldSet.errorMsg = errorMsg;
    
    this.comparedFields[setName] = fieldSet;
}

formValidator.prototype.addRadioButtons = function(name,errorMsg) {
    var radioSet = new Object();
    var radioArray = document.getElementsByName(name);
    
    for (var i = 0; i < radioArray.length; i++) {
        radioSet[i] = radioArray[i].checked;
    }
    
    this.radioButtons[name] = new Object();
    this.radioButtons[name].radioSet = radioSet;
    this.radioButtons[name].errorMsg = errorMsg;
}

formValidator.prototype.validate = function(event) {
    var valid = true;
    this.ebox.clearErrors();
    
    var hasValues = this.checkFields();
    var sameValues = this.compareFields();
    var validRadios = this.checkRadios();
    var forcedErrors = this.checkForcedErrors();
    
    valid = hasValues && sameValues && validRadios && forcedErrors ? true : false;
    
    if(!valid) {
        this.ebox.show(event);
        return false;
    }
    else {
        return true;
    }
}

formValidator.prototype.checkForcedErrors = function() {
    var result = true;
    
    for(fError in this.fErrors) {
        if (fError != 'extend') {
            f = this.fErrors[fError];

            this.ebox.addError(f.errorID,f.errorMsg);
            result = false;
        }
    }
    
    return result;
}

formValidator.prototype.checkFields = function() {
    var result = true;
    
    for(field in this.fields) {
        if (field != 'extend') {
            f = this.fields[field];
            
            if (!f.validate()) {
                result = false;
                this.ebox.addError(f.id,f.errorMsg);
            }
        }
    }
    
    return result;
}

formValidator.prototype.compareFields = function() {
    var result = true;
    
    for(fieldSet in this.comparedFields) {
        if (fieldSet != 'extend') {
            var fSet = this.comparedFields[fieldSet];
            
            if(fSet.field1.value != fSet.field2.value) {
                result = false;
                this.ebox.addError(fieldSet,this.exclamation + fSet.errorMsg);
            }
        }
    }
    
    return result;
}

formValidator.prototype.checkRadios = function() {
    var result = true;
    
    for(var radioSet in this.radioButtons) {
        if(radioSet != 'extend') {
            var rSet = this.radioButtons[radioSet].radioSet;
            var hasChecked = false;
            
            for(var radio in rSet) {
                if(radio != 'extend') {
                    if (rSet[radio]) hasChecked = true;
                }
            }
            
            if (!hasChecked) {
                result = false;
                this.ebox.addError(radioSet,this.exclamation + this.radioButtons[radioSet].errorMsg);
            }
        }
    
    }
    
    return result;
}
