
    errDivs         = new Array();
    noDisableForm   = false;

    function __constructError(formName, fieldId, textError, sfx) {
        fieldId     = fieldId + '_err' + sfx;
        mainErrDiv  = document.getElementById(formName + 'ErrCont' + sfx);
        errDiv      = document.getElementById(fieldId);
        if (null == errDiv) {
            mainErrDiv.innerHTML    = mainErrDiv.innerHTML + '<span id="' + fieldId + '"></span>';
            errDiv  = document.getElementById(fieldId);
        }
        errDiv.innerHTML    = '<br>'
            + '<img src="/images/warning-icon.png" title="warning" align="absmiddle"> '
            + textError;
        errDivs[errDivs.length]   = fieldId;
    }


    function constructError(formName, fieldId, textError) {
        if (!noDisableForm) return;
        __constructError(formName, fieldId, textError, '');
        __constructError(formName, fieldId, textError, 'Btm');
        var value='';
        if (document.getElementById(fieldId + 'Id').value) {
            value = document.getElementById(fieldId + 'Id').value;
        }
        callNAJAXFuncInBackground('logSignupError', textError + ' (<font color="red">value: ' + value + '</font>)');
        setFormDisabledStatus(formName, true);
    }

    function __destructError(formName, fieldId, sfx) {
        errDiv  = document.getElementById(fieldId + '_err' + sfx);
        if (null != errDiv) {
            errDiv.innerHTML    = '';
        }
    }

    function destructError(formName, fieldId) {
        __destructError(formName, fieldId, '');
        __destructError(formName, fieldId, 'Btm');
        setFormDisabledStatus(formName, false);
    }

    function setFormDisabledStatus(formName, status) {
        if (noDisableForm) {
            return true;
        }

        if (!isCanSubmit()) {
            status  = true;
        }

        for (i = 0; i < document.forms[formName].length; i++) {
            var tempobj = document.forms[formName].elements[i];
            if (tempobj.type.toLowerCase() == "submit" || tempobj.type.toLowerCase() == "reset") {
//                tempobj.disabled = status;
            }
        }
        return !status;
    }

    function isCanSubmit() {
        canSubmit   = true;
        for (i = 0; i < errDivs.length; i++) {
            errDiv  = document.getElementById(errDivs[i]);
            if (null != errDiv && '' != errDiv.innerHTML) {
                canSubmit   = false;
            }
        }
        return canSubmit;
    }

    function checkAllFields(formName) {
        fields          = document.forms[formName].elements;
        noDisableForm   = true;
        for (i = 0; i < fields.length; i++) {
            func    = fields[i].onblur;
            if (undefined != func) {
                func.call();
            }
        }
        noDisableForm   = false;
        ret             = setFormDisabledStatus(formName, false);
        return ret;
    }
