{
	menus: {
		//  A quick preamble - defaults to warning about broken terminals
        newUserApplicationPre: {
            art: NEWUSER1
            next: newUserApplication
            desc: Applying
            config: {
                pause: true
                cls: true
                menuFlags: [ "noHistory" ]
            }
        }

        newUserApplication: {
            module: nua
            art: NUA
            next: [
                {
                    //  Initial SysOp does not send feedback to themselves
                    acs: ID1
                    next: fullLoginSequenceLoginArt
                }
                {
                    //  ...everyone else does
                    next: newUserFeedbackToSysOpPreamble
                }
            ]
            form: {
                0: {
                    mci: {
                        ET1: {
                            focus: true
                            argName: username
                            maxLength: @config:users.usernameMax
                            validate: @systemMethod:validateUserNameAvail
                        }
                        ET2: {
                            argName: realName
                            maxLength: @config:users.realNameMax
                            validate: @systemMethod:validateNonEmpty
                        }
                        MET3: {
                            argName: birthdate
                            maskPattern: "####/##/##"
                            validate: @systemMethod:validateBirthdate
                        }
                        ME4: {
                            argName: sex
                            maskPattern: A
                            textStyle: upper
                            validate: @systemMethod:validateNonEmpty
                        }
                        ET5: {
                            argName: location
                            maxLength: @config:users.locationMax
                            validate: @systemMethod:validateNonEmpty
                        }
                        ET6: {
                            argName: affils
                            maxLength: @config:users.affilsMax
                        }
                        ET7: {
                            argName: email
                            maxLength: @config:users.emailMax
                            validate: @systemMethod:validateEmailAvail
                        }
                        ET8: {
                            argName: web
                            maxLength: @config:users.webMax
                        }
                        ET9: {
                            argName: password
                            password: true
                            maxLength: @config:users.passwordMax
                            validate: @systemMethod:validatePasswordSpec
                        }
                        ET10: {
                            argName: passwordConfirm
                            password: true
                            maxLength: @config:users.passwordMax
                            validate: @method:validatePassConfirmMatch
                        }
                        TM12: {
                            argName: submission
                            items: [ "apply", "cancel" ]
                            submit: true
                        }
                    }

                    submit: {
                        *: [
                            {
                                value: { "submission" : 0 }
                                action: @method:submitApplication
                                extraArgs: {
                                    inactive: userNeedsActivated
                                    error: newUserCreateError
                                }
                            }
                            {
                                value: { "submission" : 1 }
                                action: @systemMethod:prevMenu
                            }
                        ]
                    }

                    actionKeys: @reference:common.escToPrev
                }
            }
        }

        //  A quick preamble - defaults to warning about broken terminals (SSH version)
        newUserApplicationPreSsh: {
            art: NEWUSER1
            next: newUserApplicationSsh
            desc: Applying
            config: {
                pause: true
                cls: true
                menuFlags: [ "noHistory" ]
            }
        }

        //
        //  SSH specialization of NUA
        //  Canceling this form logs off vs falling back to matrix
        //
        newUserApplicationSsh: {
            module: nua
            art: NUA
            fallback: logoff
            next: newUserFeedbackToSysOpPreamble
            form: {
                0: {
                    mci: {
                        ET1: {
                            focus: true
                            argName: username
                            maxLength: @config:users.usernameMax
                            validate: @systemMethod:validateUserNameAvail
                        }
                        ET2: {
                            argName: realName
                            maxLength: @config:users.realNameMax
                            validate: @systemMethod:validateNonEmpty
                        }
                        MET3: {
                            argName: birthdate
                            maskPattern: "####/##/##"
                            validate: @systemMethod:validateBirthdate
                        }
                        ME4: {
                            argName: sex
                            maskPattern: A
                            textStyle: upper
                            validate: @systemMethod:validateNonEmpty
                        }
                        ET5: {
                            argName: location
                            maxLength: @config:users.locationMax
                            validate: @systemMethod:validateNonEmpty
                        }
                        ET6: {
                            argName: affils
                            maxLength: @config:users.affilsMax
                        }
                        ET7: {
                            argName: email
                            maxLength: @config:users.emailMax
                            validate: @systemMethod:validateEmailAvail
                        }
                        ET8: {
                            argName: web
                            maxLength: @config:users.webMax
                        }
                        ET9: {
                            argName: password
                            password: true
                            maxLength: @config:users.passwordMax
                            validate: @systemMethod:validatePasswordSpec
                        }
                        ET10: {
                            argName: passwordConfirm
                            password: true
                            maxLength: @config:users.passwordMax
                            validate: @method:validatePassConfirmMatch
                        }
                        TM12: {
                            argName: submission
                            items: [ "apply", "cancel" ]
                            submit: true
                        }
                    }

                    submit: {
                        *: [
                            {
                                value: { "submission" : 0 }
                                action: @method:submitApplication
                                extraArgs: {
                                    inactive: userNeedsActivated
                                    error: newUserCreateError
                                }
                            }
                            {
                                value: { "submission" : 1 }
                                action: @systemMethod:logoff
                            }
                        ]
                    }

                    actionKeys: [
                        {
                            keys: [ "escape" ]
                            action: @systemMethod:logoff
                        }
                    ]
                }
            }
        }

        newUserFeedbackToSysOpPreamble: {
            art: LETTER
            config: { pause: true }
            next: newUserFeedbackToSysOp
        }

        newUserFeedbackToSysOp: {
            desc: Feedback to SysOp
            module: msg_area_post_fse
            next: [
                {
                    acs: AS2
                    next: fullLoginSequenceLoginArt
                }
                {
                    next: newUserInactiveDone
                }
            ]
            config: {
                art: {
                    header: MSGEHDR
                    body: MSGBODY
                    footerEditor: MSGEFTR
                    footerEditorMenu: MSGEMFT
                    help: MSGEHLP
                },
                editorMode: edit
                editorType: email
                messageAreaTag: private_mail
                toUserId: 1 /* always to +op */
            }
            form: {
                0: {
                    mci: {
                        TL1: {
                            argName: from
                        }
                        ET2: {
                            argName: to
                            focus: true
                            text: @sysStat:sysop_username
                            maxLength: 36
                            //  :TODO: readOnly: true
                        }
                        ET3: {
                            argName: subject
                            maxLength: 72
                            submit: true
                            text: New user feedback
                            validate: @systemMethod:validateMessageSubject
                        }
                    }
                    submit: {
                        3: [
                            {
                                value: { subject: null }
                                action: @method:headerSubmit
                            }
                        ]
                    }
                }
                1: {
                    mci: {
                        MT1: {
                            width: 79
                            argName: message
                            mode: edit
                        }
                    }

                    submit: {
                        *: [
                        	{
                        		value: message
                        		action: @method:editModeEscPressed
                        	}
                        ]
                    }
                    actionKeys: [
                        {
                            keys: [ "escape" ]
                            viewId: 1
                        }
                    ]
                },
                2: {
                    TLTL:  {
                        mci: {
                            TL1: {
                                width: 5
                            }
                            TL2: {
                                width: 4
                            }
                        }
                    }
                }
                3: {
                    HM: {
                        mci: {
                            HM1: {
                                //  :TODO: clear
                                items: [ "save", "help" ]
                            }
                        }
                        submit: {
                            *: [
                                {
                                    value: { 1: 0 }
                                    action: @method:editModeMenuSave
                                }
                                {
                                    value: { 1: 1 }
                                    action: @method:editModeMenuHelp
                                }
                            ]
                        }
                        actionKeys: [
                            {
                                keys: [ "escape" ]
                                action: @method:editModeEscPressed
                            }
                            {
                                keys: [ "?" ]
                                action: @method:editModeMenuHelp
                            }
                        ]
                    }
                }
            }
        }

        newUserInactiveDone: {
            desc: Finished with NUA
            art: DONE
            config: { pause: true }
            next: @menu:logoff
        }
	}
}