%\iffalse
%<*copyright>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% fc_arith.sty package,                  2010-3-17     %%
%% Copyright (C) 1999-2002  D. P. Story                 %%
%%   dpstory@uakron.edu                                 %%
%%                                                      %%
%% This program can redistributed and/or modified under %%
%% the terms of the LaTeX Project Public License        %%
%% Distributed from CTAN archives in directory          %%
%% macros/latex/base/lppl.txt; either version 1 of the  %%
%% License, or (at your option) any later version.      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% History: Noel Vaillant began developing a better fc_arith.sty
%%   based on my earlier published fc_arith.sty. Many thanks
%%   to him for starting me off.
%%---------------------------------------------------------
%</copyright>
%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01]
%<package>\ProvidesPackage{fc_arith}
%<package> [2010/03/17 v0.1a fc_arith: PDF flash cards for arithmetic drill (dps)]
%<*driver>
\documentclass{ltxdoc}
\usepackage[colorlinks,hyperindex]{hyperref}
%\pdfstringdefDisableCommands{\let\\\textbackslash}
%\EnableCrossrefs \CodelineIndex
\begin{document}
\def\CMD#1{\textbackslash#1}
  \GetFileInfo{fc_arith.sty}
  \title{fc\_arith: Flash Cards for Arithmetic}
  \author{D. P. Story\\
    Email: \texttt{dpstory@uakron.edu}}
  \date{processed \today}
  \maketitle
  \tableofcontents
  \let\Email\texttt
  \DocInput{fc_arith.dtx}
  \PrintIndex
\end{document}
%</driver>
% \fi
% \MakeShortVerb{|}
% \StopEventually{}
%
% \DoNotIndex{\def,\edef,\gdef,\xdef,\global,\long,\let}
% \DoNotIndex{\expandafter,\string,\the,\ifx,\else,\fi}
% \DoNotIndex{\csname,\endcsname,\relax,\begingroup,\endgroup}
% \DoNotIndex{\DeclareTextCommand,\DeclareTextCompositeCommand}
% \DoNotIndex{\space,\@empty,\special}
%
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
%\section{Package Options}
%    \begin{macrocode}
\RequirePackage{xkeyval}
\RequirePackage{calc}
%    \end{macrocode}
%    \begin{macro}{allownegsub}
% The original arithmetic flash cards did not allow a negative difference,
% if this option is used, the differences are allowed to be negative.
%    \begin{macrocode}
\DeclareOptionX{allownegsub}{\def\fcAllowSub{true}}\def\fcAllowSub{false}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{nomenu}
% The menu allows to user to change the range of the numbers, using this
% option removes the menu.
%    \begin{macrocode}
\DeclareOptionX{nomenu}{\let\fc@usemenu=n}\let\fc@usemenu=y
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{operations}
% Give the ability to declare what operations FC should show. Supported operations
% are add, sub, mul, div. The default is all operations.
%    \begin{macrocode}
\DeclareOptionX{operations}[add,sub,mul,div]{\def\fc@operations{#1}}
\def\fc@operations{add,sub,mul,div}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{showkeypadlink}
% If the \texttt{nomenu} option is taken, you can select the \texttt{showkepadlink} so the
% user can toggle the keypad.
%    \begin{macrocode}
\DeclareOptionX{showkeypadlink}{\let\fc@keypadlink=y}
\let\fc@keypadlink=n
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{notimedscores}
% Do not tally timed scores. Some may not want the pressure!
%    \begin{macrocode}
\DeclareOptionX{notimedscores}{%
    \def\fcTimedScores{false}
    \let\fc@timedscores=n
}
\def\fcTimedScores{true}
\let\fc@timedscores=y
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
\ProcessOptionsX
\RequirePackage{eforms}[2010/03/21]
\RequirePackage{popupmenu}
%    \end{macrocode}
%\section{Main Code}
%    \begin{macrocode}
\newdimen\fcWidth
%    \end{macrocode}
% The keys for the \texttt{fcopera} family are defined here. These are % used with the \texttt{operations} option. These define the \texttt{add}, % \texttt{sub}, \texttt{mul}, and \texttt{div} operations.
%    \begin{macrocode}
\define@boolkey{fcopera}{add}[true]{}
\define@boolkey{fcopera}{sub}[true]{}
\define@boolkey{fcopera}{mul}[true]{}
\define@boolkey{fcopera}{div}[true]{}
%    \end{macrocode}
% We take the macro \cs{fc@operations} defined by the \texttt{operations} option, set
% the corresponding keys for the \texttt{fcopera} family.
%    \begin{macrocode}
\edef\fc@expand{\noexpand\setkeys{fcopera}{\fc@operations}}\fc@expand
%    \end{macrocode}
%    \begin{macro}{\DeclareArithParams}
% The builder of this arithmetic flash cards can hard-wire the ranges. Here is an
% example of usage:
%\begin{verbatim}
%\DeclareArithParams
%{%
%    addT={[2,20]},addB={[5,30]},
%    addDecT=none,addDecB=2,
%    subT={[1,5]},subB={[5,10]},
%    subDecT=1,subDecB=2,
%    mulT={[1,12]},mulB={[1,10]},
%    mulDecT=1,mulDecB=2,
%    divQ={[1,4]},divB={[1,10]},
%    divDecQ=1,divDecB=2
%}
%\end{verbatim}
% Below are defined the keys used by \cs{DeclareArithParams}.
%    \begin{macrocode}
\define@key{fcarithparams}{addT}[{[0,100]}]{\def\fcAddTParams{#1}}
\define@key{fcarithparams}{addB}[{[0,100]}]{\def\fcAddBParams{#1}}
\define@choicekey{fcarithparams}{addDecT}[\val\nr]{none,1,2}[none]{%
    \edef\fcaddDecT{\nr}}{}
\define@choicekey{fcarithparams}{addDecB}[\val\nr]{none,1,2}[none]{%
    \edef\fcaddDecB{\nr}}{}
\define@key{fcarithparams}{subT}[{[0,100]}]{\def\fcSubTParams{#1}}
\define@key{fcarithparams}{subB}[{[0,100]}]{\def\fcSubBParams{#1}}
\define@choicekey{fcarithparams}{subDecT}[\val\nr]{none,1,2}[none]{%
    \edef\fcsubDecT{\nr}}{}
\define@choicekey{fcarithparams}{subDecB}[\val\nr]{none,1,2}[none]{%
    \edef\fcsubDecB{\nr}}{}
\define@key{fcarithparams}{mulT}[{[0,100]}]{\def\fcMulTParams{#1}}
\define@key{fcarithparams}{mulB}[{[0,10]}]{\def\fcMulBParams{#1}}
\define@choicekey{fcarithparams}{mulDecT}[\val\nr]{none,1,2}[none]{%
    \edef\fcmulDecT{\nr}}{}
\define@choicekey{fcarithparams}{mulDecB}[\val\nr]{none,1,2}[none]{%
    \edef\fcmulDecB{\nr}}{}
\define@key{fcarithparams}{divQ}[{[0,10]}]{\def\fcDivQParams{#1}}
\define@key{fcarithparams}{divB}[{[0,10]}]{\def\fcDivBParams{#1}}
\define@choicekey{fcarithparams}{divDecQ}[\val\nr]{none,1,2}[none]{%
    \edef\fcdivDecQ{\nr}}{}
\define@choicekey{fcarithparams}{divDecB}[\val\nr]{none,1,2}[none]{%
    \edef\fcdivDecB{\nr}}{}
%    \end{macrocode}
% We set the defaults for these keys.
%    \begin{macrocode}
\setkeys{fcarithparams}{addT,addB,subT,subB,mulT,mulB,divQ,divB,%
    addDecT,addDecB,subDecT,subDecB,mulDecT,mulDecB,divDecQ,divDecB}
\newcommand{\DeclareArithParams}[1]{\setkeys{fcarithparams}{#1}}
\@onlypreamble\DeclareArithParams
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\timeUpMsg}
%    \begin{macro}{\rightMsg}
%    \begin{macro}{\wrongMsg}
%    \begin{macro}{\startAgainMsg}
%    \begin{macro}{\newCardMsg}
% Strings that can be redefined; the meanings are obvious.
%    \begin{macrocode}
\newcommand{\timeUpMsg}{Your Time is UP!}
\newcommand{\rightMsg}{Right!}
\newcommand{\wrongMsg}{Wrong!}
\newcommand{\startAgainMsg}{Start Again}
\newcommand{\newCardMsg}{New Card}
\newcommand{\toggleKeypad}{Toggle Keypad}
\newcommand{\operation}{Operation}
\newcommand{\numCorrect}{Number Correct}
\newcommand{\numAttempted}{Number Attempted}
\newcommand{\percentCorrect}{Percentage Correct}
\newcommand{\timedScores}{Timed Scores}
\newcommand{\fmtAnswer}{Answer:}
\newcommand{\kpDec}{.}
\newcommand{\kpMinus}{-}
\newcommand{\kpBack}{Back}
\newcommand{\kpEnter}{Enter}
\newcommand{\fcNoTiming}{No Timing}
\newcommand{\fcAddition}{Addition}
\newcommand{\fcSubtraction}{Subtraction}
\newcommand{\fcMultiplication}{Multiplication}
\newcommand{\fcDivision}{Division}
\newcommand{\fcSettings}{Settings}
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%    \end{macro}
%    \end{macro}
%    \end{macro}
%    \begin{macro}{\FCMenu}
% This is the menu system, it is normally placed in the running header
% on the left, though this can be changed.
%    \begin{macrocode}
\newcommand{\fcSettingsColor}{black}
\newcommand{\FCMenu}{\mbox{\setLinkText[\linktxtcolor{\fcSettingsColor}
   \A{\JS{processFcMenu();}}]{\fcSettings}}}
\if\fc@usemenu y\lheader{\FCMenu}\rheader{}\else
\lheader{}\rheader{}\fi
%    \end{macrocode}
%    \end{macro}
% \subsection{The form fields}
%    \begin{macro}{\tBGNoBorder}
%    \begin{macro}{\tBGNoBorderI}
%    \begin{macro}{\cBGNoBorder}
%    \begin{macro}{\cBGBorder}
%    \begin{macro}{\myNumPad}
% Some preset formatting for the various fields. May be redefined.
%    \begin{macrocode}
\newcommand{\tBGNoBorder}{\BC{}\BG{}\autoCenter{n}\textSize{0}
    \textColor{1 0 0}\Ff\FfReadOnly}
\newcommand{\tBGNoBorderI}{\BC{}\BG{}\autoCenter{n}\textSize{0}
    \textColor{0 0 0}}
\newcommand{\cBGNoBorder}{\Q{1}\BC{}\BG{}\autoCenter{n}\textSize{0}
    \textColor{0 0 0}\BG{.75 .75 .75}\Ff\FfReadOnly}
\newcommand{\cBGBorder}{\BC{0 0 0}\BG{.75 .75 .75}\autoCenter{n}
    \textSize{0}\textColor{0 0 0}}
\newcommand{\myNumPadI}{\F\FHidden\autoCenter{n}\textSize{8}
    \textFont{\fieldFont}\S{S}}
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%    \end{macro}
%    \end{macro}
%    \end{macro}
%    \begin{macro}{\setDimOf}
%    \begin{macro}{\monoSpaceFont}
%    \begin{macro}{\fieldFont}
% The following are some customization commands, used for setting field properties that
% are not included in the presets.
%    \begin{macrocode}
\newcommand{\setDimOf}[3]{\@namedef{widthOf#1}{#2}%
    \@namedef{heightOf#1}{#3}}
\newcommand{\monoSpaceFont}{CoBo}
\newcommand{\fieldFont}{Helv}
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%    \end{macro}
%    \begin{macro}{\arithProb}
% \cs{arithProb} consists of three fields: \texttt{top}, \texttt{operation}, and \texttt{bottom},
% these three fields are bundled together as a single unit. We use \textbf{courier-bold} for the \texttt{top} and \texttt{bottom}
% so we can align the decimal points, if there are any.
%    \begin{macrocode}
\setDimOf{top}{1in}{0.62in}
\setDimOf{operation}{.38in}{.62in}
\setDimOf{bottom}{1in}{0.62in}
\newcommand{\arithProb}{\mbox{\vbox{\offinterlineskip
    \hbox{\hspace*{\@nameuse{widthOfoperation}}%
        \textField[\presets{\tBGNoBorder}
            \textFont{\monoSpaceFont}\Q{2}]{top}%
            {\@nameuse{widthOf\Fld@name}}{\@nameuse{heightOf\Fld@name}}%
        }%
    \hbox{%
        \textField[\presets{\tBGNoBorder}
            \textSize{25}\Q{1}]{operation}{\@nameuse{widthOf\Fld@name}}%
            {\@nameuse{heightOf\Fld@name}}%
        \textField[\presets{\tBGNoBorder}
            \textFont{\monoSpaceFont}\Q{2}]{bottom}%
            {\@nameuse{widthOf\Fld@name}}{\@nameuse{heightOf\Fld@name}}%
    }}}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\alertbox}
%    \begin{macro}{\startAgain}
%    \begin{macro}{\inputRegion}
%    \begin{macro}{\newCard}
% More components of these flash cards: \cs{alertbox} displays the ``Right/Wrong'' message;
% \cs{startAgain} is a button for starting all over again, it takes an icon;
% \cs{inputRegion} is where the user inputs his/her answer;
% \cs{newCard} a push button for randomly geneating a new problem. These different elements
% can be placed anywhere.
%    \begin{macrocode}
\setDimOf{alertbox}{.88in}{.62in}
\setDimOf{StartAgain}{0.88in}{0.62in}
\setDimOf{result}{1.38in}{0.62in}
\setDimOf{NewProblem}{0.88in}{0.62in}
\newcommand{\alertbox}[1][]{\hbox{\textField[\presets{\tBGNoBorder}
    \textSize{0}#1]{alertbox}{\@nameuse{widthOf\Fld@name}}%
    {\@nameuse{heightOf\Fld@name}}}}
\edef\distillOpts{\ifnum\eq@drivernum=1 \else\noexpand\FB{false}
    \noexpand\I{null}\noexpand\TP{2}\fi}
\newcommand{\startAgain}[1][]{\hbox{\expandafter\pushButton\expandafter[\distillOpts
    \presets{\tBGNoBorderI}\textFont{\fieldFont}\S{S}
    \textSize{12}\CA{\startAgainMsg}\AC{\startAgainMsg}#1
    \A{\JS{startAgain();}}]{StartAgain}{\@nameuse{widthOf\Fld@name}}%
    {\@nameuse{heightOf\Fld@name}}}}
\newcommand{\inputRegion}[1][]{\hbox{\textField[\presets{\cBGNoBorder}
    \Ff{-\FfReadOnly}\Q{2}#1\AA{\AAValidate{validateResult();}
    \AAKeystroke{myNumber_Keystroke(numDecimals,1,0,0,"",true);}
    \AAFormat{try{%
        myNumber_Format(numDecimals,1,0,0,"",true);}catch(e){}}}
    ]{result}{\@nameuse{widthOf\Fld@name}}%
    {\@nameuse{heightOf\Fld@name}}}}
\newcommand{\newCard}[1][]{\hbox{\expandafter\pushButton\expandafter[\distillOpts
    \presets{\tBGNoBorderI}\textFont{\fieldFont}\S{S}
    \CA{\newCardMsg}\AC{\newCardMsg}#1\A{\JS{newCard();}}
    ]{NewProblem}{\@nameuse{widthOf\Fld@name}}%
    {\@nameuse{heightOf\Fld@name}}}}
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%    \end{macro}
%    \end{macro}
%    \begin{macro}{\cbTiming}
%    \begin{macro}{\ansField}
%    \begin{macro}{\cbOperation}
% \cs{cbTiming} is a dropdown menu for timing; \cs{ansField} is a text field where
% the correct answers are written; \cs{cbOperation} is a dropdown menu of operations.
%    \begin{macrocode}
% {\@nameuse{widthOf\Fld@name}}{\@nameuse{heightOf\Fld@name}}
\setDimOf{TimeDelay}{0.9in}{0.24in}
\setDimOf{ansregion}{.87in+10bp}{.24in}
\setDimOf{ChooseOperation}{1.38in-10bp}{0.24in}
\edef\isReadOnlyTiming{\if\fc@timedscores n\noexpand\Ff{\FfReadOnly}\fi}
\newcommand{\cbTiming}[1][]{\hbox{%
    \expandafter\comboBox\expandafter[\isReadOnlyTiming\presets{\cBGBorder}
        \textFont{\fieldFont}\V{600000}\DV{600000}#1
    \AA{\AAKeystroke{%
        if (!event.willCommit) timelimit=event.changeEx;}}
    ]{TimeDelay}{\@nameuse{widthOf\Fld@name}}%
    {\@nameuse{heightOf\Fld@name}}{%
    [(600000)(\fcNoTiming)][(30)(30 sec)][(25)(25 sec)][(20)(20 sec)]%
    [(15)(15 sec)][(10)(10 sec)][(5)(\space 5 sec)]}}%
}
\newcommand{\ansField}[1][]{\hbox{\textField[\presets{\cBGNoBorder}\Q{2}
    #1\AA{\AAFormat{%
        if (event.value!="") {\r
        try{myNumber_Format(numDecimals,1,0,0,"",true);\r
        event.value="\fmtAnswer\space" + event.value;}catch(e){};}}}
    ]{ansregion}{\@nameuse{widthOf\Fld@name}}%
     {\@nameuse{heightOf\Fld@name}}}%
}
\newcommand{\cbOperation}[1][]{\hbox{%
    \comboBox[\presets{\cBGBorder}\textFont{\fieldFont}#1
    \V{a}\DV{a}]{ChooseOperation}{\@nameuse{widthOf\Fld@name}}%
    {\@nameuse{heightOf\Fld@name}}{%
     \ifKV@fcopera@add[(a)(\fcAddition)]\fi%
     \ifKV@fcopera@sub[(s)(\fcSubtraction)]\fi%
     \ifKV@fcopera@mul[(m)(\fcMultiplication)]\fi%
     \ifKV@fcopera@div[(d)(\fcDivision)]\fi}}%
}
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%    \end{macro}
% \cs{szNum} is the width and height of a keypad button.
%    \begin{macrocode}
\newcommand{\szNum}{14bp}
%    \end{macrocode}
%    \begin{macro}{\Keypad}
% A keypad for the user to enter responses using the mouse only. Cool!
%    \begin{macrocode}
\newcommand{\Keypad}{%
    \vbox{\offinterlineskip\if\fc@keypadlink y
    \setlength{\fcWidth}{\szNum*4}%
    \hbox to\fcWidth{\small\hfill\setLink[\linktxtcolor{blue}
    \A{\JS{ToggleKeyPad()}}]{\toggleKeypad}\hfill}\vskip4bp\fi
    \hbox{\pushButton[\presets{\myNumPadI}\CA{7}
        \A{\JS{addDigit(7)}}]{num7}{\szNum}{\szNum}%
    \kern1bp\pushButton[\presets{\myNumPadI}\CA{8}
        \A{\JS{addDigit(8)}}]{num8}{\szNum}{\szNum}%
    \kern1bp\pushButton[\presets{\myNumPadI}\CA{9}
        \A{\JS{addDigit(9)}}]{num9}{\szNum}{\szNum}}%
    \vskip1bp
    \hbox{\pushButton[\presets{\myNumPadI}\CA{4}
        \A{\JS{addDigit(4)}}]{num4}{\szNum}{\szNum}%
    \kern1bp\pushButton[\presets{\myNumPadI}\CA{5}
        \A{\JS{addDigit(5)}}]{num5}{\szNum}{\szNum}%
    \kern1bp\pushButton[\presets{\myNumPadI}\CA{6}
        \A{\JS{addDigit(6)}}]{num6}{\szNum}{\szNum}}%
    \vskip1bp
    \hbox{\pushButton[\presets{\myNumPadI}\CA{1}
        \A{\JS{addDigit(1)}}]{num1}{\szNum}{\szNum}%
    \kern1bp\pushButton[\presets{\myNumPadI}\CA{2}
        \A{\JS{addDigit(2)}}]{num2}{\szNum}{\szNum}%
    \kern1bp\pushButton[\presets{\myNumPadI}\CA{3}
        \A{\JS{addDigit(3)}}]{num3}{\szNum}{\szNum}}%
    \vskip1bp
    \hbox{\pushButton[\presets{\myNumPadI}\CA{0}
        \A{\JS{addDigit(0)}}]{num0}{1bp+\szNum*2}{\szNum}%
    \kern1bp\pushButton[\presets{\myNumPadI}\CA{\kpDec}
                \A{\JS{addDigit("Dec")}}
            ]{Dec}{\szNum}{\szNum}\kern1bp
    \smash{\vbox{%
            \hbox{\pushButton[\presets{\myNumPadI}\CA{\kpMinus}
                \A{\JS{addDigit("Minus")}}
            ]{Minus}{\szNum}{\szNum}}\kern1bp
            \hbox{\pushButton[\presets{\myNumPadI}\CA{\kpBack}
                \textSize{0}\A{\JS{addDigit("Back")}}
            ]{Back}{\szNum}{\szNum}}\kern1bp
            \hbox{\pushButton[\presets{\myNumPadI}\CA{\kpEnter}
                \textSize{0}\A{\JS{addDigit("Enter")}}
            ]{Enter}{\szNum}{1bp+\szNum*2}}%
    }}}}%
}
%    \end{macrocode}
%    \end{macro}
% \cs{fcSep} is a standard separation between elements.
%    \begin{macrocode}
\def\fcSep{\quad}
%    \end{macrocode}
%    \begin{macro}{\statsFields}
% A collection of fields that summarize the attempts at responding to the arithmetic
% problem.
%    \begin{macrocode}
\setDimOf{fcSF}{0.37in}{0.25in}
\newcommand{\statsFieldOpColor}{1 0 0}
\newcommand{\statsFieldColor}{blue}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand{\statsFields}{%
%    \end{macrocode}
% The Addition column
%    \begin{macrocode}
\ifKV@fcopera@add
    \vbox{\offinterlineskip
    \hbox{\textField[\presets{\cBGNoBorder}\textColor{\statsFieldOpColor}
        \V{+}\DV{+}\Q{1}]{AddScore1}{\widthOffcSF}{\heightOffcSF}}%
    \hbox{\textField[\presets{\cBGNoBorder}
        ]{AddScore2}{\widthOffcSF}{\heightOffcSF}}%
    \hbox{\textField[\presets{\cBGNoBorder}
        ]{AddScore3}{\widthOffcSF}{\heightOffcSF}}%
    \hbox{\textField[\presets{\cBGNoBorder}
        ]{AddScore4}{\widthOffcSF}{\heightOffcSF}}%
\if\fc@timedscores y
    \hbox{\textField[\presets{\cBGNoBorder}
        ]{AddScore5}{\widthOffcSF}{\heightOffcSF}}%
\fi
    }\fcSep
\fi
%    \end{macrocode}
% The Subtraction column
%    \begin{macrocode}
\ifKV@fcopera@sub
\vbox{\offinterlineskip
    \hbox{\textField[\presets{\cBGNoBorder}\textColor{\statsFieldOpColor}
        \V{-}\DV{-}\Q{1}]{SubScore1}{\widthOffcSF}{\heightOffcSF}}
    \hbox{\textField[\presets{\cBGNoBorder}]{SubScore2}%
        {\widthOffcSF}{\heightOffcSF}}
    \hbox{\textField[\presets{\cBGNoBorder}]{SubScore3}%
        {\widthOffcSF}{\heightOffcSF}}
    \hbox{\textField[\presets{\cBGNoBorder}]{SubScore4}{\widthOffcSF}%
        {\heightOffcSF}}
\if\fc@timedscores y
    \hbox{\textField[\presets{\cBGNoBorder}]{SubScore5}{\widthOffcSF}%
        {\heightOffcSF}}
\fi
    }\fcSep
\fi
%    \end{macrocode}
% The Multiplication column
%    \begin{macrocode}
\ifKV@fcopera@mul
\vbox{\offinterlineskip
    \hbox{\textField[\presets{\cBGNoBorder}\textColor{\statsFieldOpColor}
        \V{x}\DV{x}\Q{1}]{MulScore1}{\widthOffcSF}{\heightOffcSF}}
    \hbox{\textField[\presets{\cBGNoBorder}]{MulScore2}{\widthOffcSF}%
        {\heightOffcSF}}
    \hbox{\textField[\presets{\cBGNoBorder}]{MulScore3}{\widthOffcSF}%
        {\heightOffcSF}}
    \hbox{\textField[\presets{\cBGNoBorder}]{MulScore4}{\widthOffcSF}%
        {\heightOffcSF}}
\if\fc@timedscores y
    \hbox{\textField[\presets{\cBGNoBorder}]{MulScore5}{\widthOffcSF}%
        {\heightOffcSF}}
\fi
    }\fcSep
\fi
%    \end{macrocode}
% The Division column
%    \begin{macrocode}
\ifKV@fcopera@div
\vbox{\offinterlineskip
    \hbox{\textField[\presets{\cBGNoBorder}\textColor{\statsFieldOpColor}
        \V{\string\367}\DV{\string\367}\Q{1}]{DivScore1}{\widthOffcSF}%
        {\heightOffcSF}}
    \hbox{\textField[\presets{\cBGNoBorder}]{DivScore2}{\widthOffcSF}%
        {\heightOffcSF}}
    \hbox{\textField[\presets{\cBGNoBorder}]{DivScore3}{\widthOffcSF}%
        {\heightOffcSF}}
    \hbox{\textField[\presets{\cBGNoBorder}]{DivScore4}{\widthOffcSF}%
        {\heightOffcSF}}
\if\fc@timedscores y
    \hbox{\textField[\presets{\cBGNoBorder}]{DivScore5}{\widthOffcSF}%
        {\heightOffcSF}}
\fi
    }\fcSep
\fi
%    \end{macrocode}
% Description column
%    \begin{macrocode}
\vbox{\offinterlineskip
    \hbox{\parbox[b][.25in][c]{.75in}{%
        \textcolor{blue}{\operation}\hfill}}
    \hbox{\parbox[b][.25in][c]{1.25in}{%
        \textcolor{blue}{\numCorrect}\hfill}}
    \hbox{\parbox[b][.25in][c]{1.25in}{%
        \textcolor{blue}{\numAttempted}\hfill}}
    \hbox{\parbox[b][.25in][c]{1.25in}{%
        \textcolor{blue}{\percentCorrect}\hfill}}
\if\fc@timedscores y
    \hbox{\textField[\presets{\cBGNoBorder}\textColor{\statsFieldOpColor}
        ]{ScoreTotal}{.51in}{.25in}\kern1bp
        \makebox[0pt][l]{\pushButton[\presets{\tBGNoBorder}
        \Ff{-\FfReadOnly}\S{S}\H{I}\textSize{10}
        \A{\JS{docTimeScores();}}]{Descrip5}{1in}{.25in}}%
        \parbox[b][.25in][c]{1in}{%
            \centering\textcolor{blue}{\timedScores}}}%
\fi
    }%
}
%    \end{macrocode}
%    \end{macro}
%\section{JavaScript Code}
%    \begin{macrocode}
\edef\bFCa{/\ifKV@fcopera@add/\else*\fi}
\edef\eFCa{\ifKV@fcopera@add/\else*\fi/}
\edef\bFCs{/\ifKV@fcopera@sub/\else*\fi}
\edef\eFCs{\ifKV@fcopera@sub/\else*\fi/}
\edef\bFCm{/\ifKV@fcopera@mul/\else*\fi}
\edef\eFCm{\ifKV@fcopera@mul/\else*\fi/}
\edef\bFCd{/\ifKV@fcopera@div/\else*\fi}
\edef\eFCd{\ifKV@fcopera@div/\else*\fi/}
\begin{insDLJS*}[_loadfcjs]{fcjs}
\begin{newsegment}{data}
var _loadfcjs=true;
var t, b, o, r, c, oAlert;
function getFieldObjects()
{
    t=this.getField("top");
    b=this.getField("bottom");
    o=this.getField("operation");
    r=this.getField("result");
    c=this.getField("ChooseOperation");
    oAlert=this.getField("alertbox");
    useKeyPad = (this.getField("Enter").display==display.visible);
}
var turnoff=false;
var timedScores=\fcTimedScores;
var useKeyPad = false;
var decimalPressed = false;
var keypadInput=false;
var operand='a';
var NumAddCorr=0;
var NumAddTried=0;
var NumSubCorr=0;
var NumSubTried=0;
var NumMulCorr=0;
var NumMulTried=0;
var NumDivCorr=0;
var NumDivTried=0;
timelimit=600000;
mybegin="";
getFieldObjects();
var numDecimals=0;
var addDecT = \fcaddDecT, addDecB = \fcaddDecB;
var addT_a = Number(\fcAddTParams[0]);
var addT_b = Number(\fcAddTParams[1]);
var addB_a = Number(\fcAddBParams[0]);
var addB_b = Number(\fcAddBParams[1]);
var subDecT = \fcsubDecT, subDecB = \fcsubDecB;
var subT_a = Number(\fcSubTParams[0]);
var subT_b = Number(\fcSubTParams[1]);
var subB_a = Number(\fcMulBParams[0]);
var subB_b = Number(\fcMulBParams[1]);
var mulDecT = \fcmulDecT, mulDecB = \fcmulDecB;
var mulT_a = Number(\fcMulTParams[0]);
var mulT_b = Number(\fcMulTParams[1]);
var mulB_a = Number(\fcMulBParams[0]);
var mulB_b = Number(\fcMulBParams[1]);
%    \end{macrocode}
%   Here, Q corresponds to the quotient, and B corresponds to the divisor
%    \begin{macrocode}
var divDecQ = \fcdivDecQ, divDecB = \fcdivDecB;
var divQ_a = Number(\fcDivQParams[0]);
var divQ_b = Number(\fcDivQParams[1]);
var divB_a = Number(\fcDivBParams[0]);
var divB_b = Number(\fcDivBParams[1]);
\end{newsegment}
\begin{newsegment}{updatescore}
function updatescore(f,t) {
    // console.println(t);
     var points;
     if(t<=5) points=6;
     if((t>5)&&(t<=10)) points=5;
     if((t>10)&&(t<=15)) points=4;
     if((t>15)&&(t<=20)) points=3;
     if((t>20)&&(t<=25)) points=2;
     if(t>=25) points=1;
     var oField=this.getField(f);
     if ( oField != null ) {
        oField.value+=points;
        this.getField("ScoreTotal").value+=points;
     }
}
function docTimeScores() {
    app.execDialog(fcTimedScoresDialog);
}
var fcTimedScoresDialog =
{
    // set a default value for radio button field
    initialize: function(dialog) {
    },
    // when user presses "Ok", this handler will execute first
    commit: function(dialog) {
    },
    // The Dialog Description
    description:
    {
        name: "PDF Flash Cards - Timed Scores",
        align_children: "align_left",
        elements:
        [
            {
                type: "view",
                align_children: "align_left",
                elements:
                [
                    {
                        type: "view",
                        align_children: "align_row",
                        elements:
                        [
                            {
                                type: "static_text",
                                item_id: "instr",
                                name: "Points are awarded, based on time, "
                                      +"for successfully solving a problem:"
                            }
                        ]
                    },
                    {
                        type: "view",
                        align_children: "align_row",
                        elements:
                        [
                            {
                                type: "gap",
                                width: 10
                            },
                            {
                                type: "static_text",
                                item_id: "hr01",
                                char_width: 22,
                                font: "dialog",
                                bold: true,
                                name: "Time elapsed"
                            },
                            {
                                type: "static_text",
                                item_id: "hr02",
                                font: "dialog",
                                bold: true,
                                name: "Points"
                            },
                        ]
                    },
                    {
                        type: "view",
                        align_children: "align_row",
                        elements:
                        [
                            {
                                type: "gap",
                                width: 10
                            },
                            {
                                type: "static_text",
                                item_id: "st11",
                                char_width: 22,
                                name: "Less then 5 sec"
                            },
                            {
                                type: "static_text",
                                item_id: "st12",
                                name: "   6"
                            },
                        ]
                    },
                    {
                        type: "view",
                        align_children: "align_row",
                        elements:
                        [
                            {
                                type: "gap",
                                width: 10
                            },
                            {
                                type: "static_text",
                                item_id: "st21",
                                char_width: 22,
                                name: "Between 5 and 10 sec"
                            },
                            {
                                type: "static_text",
                                item_id: "st22",
                                name: "   5"
                            },
                        ]
                    },
//---
                    {
                        type: "view",
                        align_children: "align_row",
                        elements:
                        [
                            {
                                type: "gap",
                                width: 10
                            },
                            {
                                type: "static_text",
                                item_id: "st31",
                                char_width: 22,
                                name: "Between 10 and 15 sec"
                            },
                            {
                                type: "static_text",
                                item_id: "st32",
                                name: "   4"
                            },
                        ]
                    },
//---
                    {
                        type: "view",
                        align_children: "align_row",
                        elements:
                        [
                            {
                                type: "gap",
                                width: 10
                            },
                            {
                                type: "static_text",
                                item_id: "st41",
                                char_width: 22,
                                name: "Between 10 and 20 sec"
                            },
                            {
                                type: "static_text",
                                item_id: "st42",
                                name: "   3"
                            },
                        ]
                    },
                ]
            },
//---
            {
                type: "view",
                align_children: "align_row",
                elements:
                [
                    {
                        type: "gap",
                        width: 10
                    },
                    {
                        type: "static_text",
                        item_id: "st51",
                        char_width: 22,
                        name: "Between 20 and 25 sec"
                    },
                    {
                        type: "static_text",
                        item_id: "st52",
                        name: "   2"
                    },
                ]
            },
//---
            {
                type: "view",
                align_children: "align_row",
                elements:
                [
                    {
                        type: "gap",
                        width: 10
                    },
                    {
                        type: "static_text",
                        item_id: "st61",
                        char_width: 22,
                        name: "Greater than 25 sec"
                    },
                    {
                        type: "static_text",
                        item_id: "st62",
                        name: "   1"
                    },
                ]
            },
//---
            {
                type: "view",
                align_children: "align_row",
                elements:
                [
                    {
                        alignment: "align_right",
                        type: "ok",
                    }
                ]
            }
        ]
    }
}
function validateResult()
{
    var oField;
    if (!turnoff && !keypadInput) {
%        event.target.readonly=true;
        MsgFlag=false;
        delay=true;
        timenow=new Date();
        mynow=util.printd("mmm d, yyyy, H:M:s",timenow);
        elapsedtime = (Date.parse(mynow)-Date.parse(mybegin))/1000;
        timeelapsed = (elapsedtime>timelimit);
        switch (operand) {
        case 'a':
            oField = this.getField("AddScore2");
            calculation=Number(t.value)+Number(b.value);
            if(timeelapsed) {
                if (timedScores) app.alert("\timeUpMsg",3);
                if ( oField != null ) oField.value=NumAddCorr;
            } else {
                if(Number(event.value)==calculation) {
                    MsgFlag=true;
                    if ( oField != null ) {
                        oField.value=++NumAddCorr;
                        updatescore("AddScore5",elapsedtime);
                    }
                }
                else
                    if ( oField != null ) oField.value=NumAddCorr;
            }
            oField = this.getField("AddScore3");
            if (oField != null ) oField.value=++NumAddTried;
            oField = this.getField("AddScore4");
            if (oField != null ) oField.value = util.printf("\%.0f",
                (NumAddCorr/NumAddTried)*100);
            break;
        case 's':
            oField=this.getField("SubScore2");
            calculation=Number(t.value)-Number(b.value);
            if(timeelapsed) {
                if (timedScores) app.alert("\timeUpMsg",3);
                oField.value=NumSubCorr;
            } else {
                if(Number(event.value)==calculation) {
                    MsgFlag=true;
                    if ( oField != null ) {
                        oField.value=++NumSubCorr;
                        updatescore("SubScore5",elapsedtime);
                    }
                } else
                    if ( oField != null ) oField.value=NumSubCorr;
            }
            oField=this.getField("SubScore3");
            if (oField != null) oField.value=++NumSubTried;
            oField=this.getField("SubScore4");
            if (oField != null) oField.value=util.printf("\%.0f",
                (NumSubCorr/NumSubTried)*100);
            break;
        case 'm':
            oField=this.getField("MulScore2");
            calculation=util.printf("\%."+numDecimals+"f",
                (t.value*b.value));
            if(timeelapsed) {
                if (timedScores) app.alert("\timeUpMsg",3);
                if (oField != null) oField.value=NumSubCorr;
            } else {
                if(Number(event.value)==Number(calculation)) {
                MsgFlag=true;
                if (oField != null) {
                    oField.value=++NumMulCorr;
                    updatescore("MulScore5",elapsedtime);
                }
            } else
                if (oField != null) oField.value=NumMulCorr;
            }
            oField=this.getField("MulScore3");
            if (oField != null)  oField.value=++NumMulTried;
            oField=this.getField("MulScore4");
            if (oField != null) oField.value=util.printf("\%.0f",
                (NumMulCorr/NumMulTried)*100);
            break;
        case 'd':
            oField=this.getField("DivScore2");
%            calculation=t.value/b.value;
            calculation=util.printf("\%."+numDecimals+"f",
                t.value/b.value);
             if(timeelapsed) {
                 if (timedScores) app.alert("\timeUpMsg",3);
                 if (oField != null) oField.value=NumDivCorr;
             } else {
                if(Number(event.value)==Number(calculation)) {
                MsgFlag=true;
                if (oField != null) {
                    oField.value=++NumDivCorr;
                    updatescore("DivScore5",elapsedtime);
                }
             } else
                 if ( oField != null ) oField.value=NumDivCorr;
             }
             oField = this.getField("DivScore3");
             if (oField != null) oField.value=++NumDivTried;
             oField = this.getField("DivScore4");
             if (oField != null) oField.value=util.printf("\%.0f",
                (NumDivCorr/NumDivTried)*100);
             break;
        }
        if(!timeelapsed) {
            if(MsgFlag) {
                oAlert.textColor=color.blue;
                oAlert.value="\rightMsg";
            } else {
                oAlert.textColor=color.red;
                oAlert.value="\wrongMsg";
            }
        }
        this.getField("ansregion").value=calculation;
        this.getField("NewProblem").setFocus() ;
        delay=false;
    }
}
function startAgain() {
    getFieldObjects();
    turnoff=true;
    event.rc=false;
    this.resetForm();
    operand='+';
    NumAddCorr=0;
    NumAddTried=0;
    NumSubCorr=0;
    NumSubTried=0;
    NumMulCorr=0;
    umMulTried=0;
    NumDivCorr=0;
    NumDivTried=0;
}
function newCard() {
    turnoff=true;
    this.resetForm(["result","top","bottom","ansregion","alertbox"]);
    operand = c.value;
    switch (operand)
    {
        case 'a':
        {
             o.value='+'; // addDecT
             numDecimals = Math.max(addDecT,addDecB);
             var topTemplate = "\%."+addDecT+"f";
             var botTemplate = "\%."+addDecB+"f";
             var matchTemplate = "\%."+ numDecimals +"f";
             var m=util.printf(topTemplate,
                (addT_b-addT_a)*Math.random()+addT_a);
             var n=util.printf(botTemplate,
                (addB_b-addB_a)*Math.random()+addB_a);
             m=util.printf(matchTemplate,m);
             n=util.printf(matchTemplate,n);
             var nWidth=(m.length < n.length) ? n.length : m.length;
             var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
             t.value=util.printf(commonTemplate,m);
             b.value=util.printf(commonTemplate,n);
             break;
        }
        case 's':
        {
            o.value="-";
            numDecimals = Math.max(subDecT,subDecB);
            var topTemplate = "\%."+subDecT+"f";
            var botTemplate = "\%."+subDecB+"f";
            var matchTemplate = "\%."+ numDecimals +"f";
            var m=util.printf(topTemplate,
                (subT_b-subT_a)*Math.random()+subT_a);
            var n=util.printf(botTemplate,
                (subB_b-subB_a)*Math.random()+subB_a);
            m=util.printf(matchTemplate,m);
            n=util.printf(matchTemplate,n);
            var nWidth=(m.length < n.length) ? n.length : m.length;
            var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
            t.value=util.printf(commonTemplate,m);
            b.value=util.printf(commonTemplate,n);
            if(!\fcAllowSub\space && (b.value>t.value))
            {
                var tmp = b.value;
                b.value = t.value;
                t.value = tmp;
            }
            break;
        }
        case 'm':
        {
            o.value='x';
            numDecimals=Math.max(mulDecT,mulDecB);
            var topTemplate = "\%."+mulDecT+"f";
            var botTemplate = "\%."+mulDecB+"f";
            var matchTemplate = "\%."+ numDecimals +"f";
            var m=util.printf(topTemplate,
                (mulT_b-mulT_a)*Math.random()+mulT_a);
            var n=util.printf(botTemplate,
                (mulB_b-mulB_a)*Math.random()+mulB_a);
            m=util.printf(matchTemplate,m);
            n=util.printf(matchTemplate,n);
            var nWidth=(m.length < n.length) ? n.length : m.length;
            var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
            t.value=util.printf(commonTemplate,m);
            b.value=util.printf(commonTemplate,n);
            numDecimals = mulDecT + mulDecB;
            break;
        }
        case 'd':
        {
%            o.value='/';
            o.value='\string\367'
            numDecimals=divDecQ+divDecB;
%            numDecimals=Math.max(divDecQ,divDecB);
            var topTemplate = "\%."+divDecQ+"f";
            var botTemplate = "\%."+divDecB+"f";
            var matchTemplate = "\%."+ numDecimals +"f";
            var n,m;
            var quotient=util.printf(topTemplate,
                divQ_a + (divQ_b-divQ_a)*Math.random());
            for(n=util.printf(botTemplate,
                divB_a + (divB_b-divB_a)*Math.random());
                n==0; n=util.printf("\%.0f",
                        divB_a + (divB_b-divB_a)*Math.random()));
            m=util.printf(matchTemplate,quotient*n);
            n=util.printf(matchTemplate,n);
            var nWidth=(m.length < n.length) ? n.length : m.length;
            var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
            t.value=util.printf(commonTemplate,m);
            b.value=util.printf(commonTemplate,n);
            numDecimals = divDecQ;
            break;
        }
    }
    // console.println("operation = " + o.value);
    turnoff=false;
    if (!useKeyPad) r.readonly=false;
    timebegin = new Date();
    mybegin = util.printd("mmm d, yyyy, H:M:s",timebegin);
    r.setFocus();
}
function addDigit(n) {
    if (oAlert.value != "") return;
    switch (n) {
        case "Enter":
            var tmp_value=r.valueAsString;
            this.resetForm(["result"]);
            keypadInput=false;
            r.value = tmp_value;
            break;
        case "Back":
            keypadInput=true;
            var tmp_value=r.valueAsString;
            if (tmp_value != "")
                r.value = tmp_value.substring(0,tmp_value.length-1);
            break;
        case "Dec":
            keypadInput=true;
            var v=r.valueAsString;
            v = v + ".";
            r.value = v
            break;
        case "Minus":
            keypadInput=true;
            var v=r.valueAsString;
            if (r.value < 0 ) {
                v = String(Math.abs(v));
            } else v = "-" + v;
            r.value = v;
            break;
        default:
            keypadInput=true;
            v=r.valueAsString
            v = v + String(n);
            r.value = v
    }
}
function ToggleKeyPad() {
    useKeyPad = !useKeyPad;
    this.delay=true;
    if (useKeyPad) {
        for (var i=0; i<= 9; i++)
            this.getField("num"+i).display=display.visible;
        this.getField("Back").display=display.visible;
        this.getField("Enter").display=display.visible;
        this.getField("Dec").display=display.visible;
        this.getField("Minus").display=display.visible;
        this.getField("result").readonly=true;
    } else {
        for (var i=0; i<= 9; i++)
            this.getField("num"+i).display=display.hidden;
        this.getField("Back").display=display.hidden;
        this.getField("Enter").display=display.hidden;
        this.getField("Dec").display=display.hidden;
        this.getField("Minus").display=display.hidden;
        this.getField("result").readonly=false;
    }
    this.delay=false;
}
\end{newsegment}
\begin{newsegment}{Custom Keystroke for Numbers}
function myNumber_Keystroke(nDec,sepStyle,negStyle,currStyle,
    strCurrency,bCurrencyPrepend) {
    var v = t.valueAsString;
    if ( v == "")
        { event.rc=false; this.resetForm(["result"]); }
    else
        if ( event.value != "-" && event.value != ".")
            AFNumber_Keystroke(nDec,sepStyle,negStyle,currStyle,
                strCurrency,bCurrencyPrepend);
}
function myNumber_Format(nDec,sepStyle,negStyle,currStyle,
    strCurrency,bCurrencyPrepend) {
    if ( !useKeyPad && event.value != "-" && event.value != ".")
        AFNumber_Format(nDec,sepStyle,negStyle,currStyle,
            strCurrency,bCurrencyPrepend);
}
\end{newsegment}
\begin{newsegment}{Option Dialog Box}
var fcDialog =
{
    // set a default value for radio button field
    initialize: function(dialog) {
        var addDT="AT0" + String(addDecT);
        var addDB="AB0" + String(addDecB);
        var subDT="ST0" + String(subDecT);
        var subDB="SB0" + String(subDecB);
        var mulDT="MT0" + String(mulDecT);
        var mulDB="MB0" + String(mulDecB);
        var divDQ="DQ0" + String(divDecQ);
        var divDB="DB0" + String(divDecB);
        var radioString = addDT +": true, " + addDB +": true, "
            + subDT + ": true, " + subDB + ": true, "
            + mulDT + ": true, " + mulDB + ": true, "
            + divDQ + ": true, " + divDB + ": true "
//console.println("radioString="+radioString);
        eval("dialog.load({" + radioString + "})");
        dialog.load({
            // Populate the addition first
            "aT_a": util.printf("\%.0f",addT_a),
            "aT_b": util.printf("\%.0f",addT_b),
            "aB_a": util.printf("\%.0f",addB_a),
            "aB_b": util.printf("\%.0f",addB_b),
            // subtraction
            "sT_a": util.printf("\%.0f",subT_a),
            "sT_b": util.printf("\%.0f",subT_b),
            "sB_a": util.printf("\%.0f",subB_a),
            "sB_b": util.printf("\%.0f",subB_b),
            // multiplication
            "mT_a": util.printf("\%.0f",mulT_a),
            "mT_b": util.printf("\%.0f",mulT_b),
            "mB_a": util.printf("\%.0f",mulB_a),
            "mB_b": util.printf("\%.0f",mulB_b),
            // division
            "dQ_a": util.printf("\%.0f",divQ_a),
            "dQ_b": util.printf("\%.0f",divQ_b),
            "dB_a": util.printf("\%.0f",divB_a),
            "dB_b": util.printf("\%.0f",divB_b)
        });
    },
    // when user presses "Ok", this handler will execute first
    commit: function(dialog) {
        var results = dialog.store();
        addT_a = Math.round(results["aT_a"]);
        addT_b = Math.round(results["aT_b"]);
        addB_a = Math.round(results["aB_a"]);
        addB_b = Math.round(results["aB_b"]);
        for (var i=0; i < 3; i++)
            if (results["AT0"+i]) { addDecT = i; break; }
        for (var i=0; i < 3; i++)
            if (results["AB0"+i]) { addDecB = i; break; }
        // subtraction
        subT_a = Math.round(results["sT_a"]);
        subT_b = Math.round(results["sT_b"]);
        subB_a = Math.round(results["sB_a"]);
        subB_b = Math.round(results["sB_b"]);
        for (var i=0; i < 3; i++)
            if (results["ST0"+i]) { subDecT = i; break; }
        for (var i=0; i < 3; i++)
            if (results["SB0"+i]) { subDecB = i; break; }
        // multiplication
        mulT_a = Math.round(results["mT_a"]);
        mulT_b = Math.round(results["mT_b"]);
        mulB_a = Math.round(results["mB_a"]);
        mulB_b = Math.round(results["mB_b"]);
        for (var i=0; i < 3; i++)
            if (results["MT0"+i]) { mulDecT = i; break; }
        for (var i=0; i < 3; i++)
            if (results["MB0"+i]) { mulDecB = i; break; }
        // division
        divQ_a = Math.round(results["dQ_a"]);
        divQ_b = Math.round(results["dQ_b"]);
        divB_a = Math.round(results["dB_a"]);
        divB_b = Math.round(results["dB_b"]);
        for (var i=0; i < 3; i++)
            if (results["DQ0"+i]) { divDecQ = i; break; }
        for (var i=0; i < 3; i++)
            if (results["DB0"+i]) { divDecB = i; break; }
    },
    // The Dialog Description
    description:
    {
        name: "PDF Flash Cards - Options",
        align_children: "align_left",
        elements:
        [
\bFCa
            {  // The Addition Cluster
                type: "cluster",
                name: "Addition",
                item_id: "add",
                align_children: "align_left",
                elements:
                [
                    {
                        type: "view",
                        align_children: "align_row",
                        elements:
                        [
                            {
                                type: "static_text",
                                item_id: "addRngT",
                                name: "Range Top      "
                            },
                            {
                                item_id: "aT_a",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "static_text",
                                item_id: "addRngToT",
                                name: " to "
                            },
                            {
                                item_id: "aT_b",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "view",
                                align_children: "align_distribute",
                                elements:
                                [
                                    {
                                        type: "static_text",
                                        item_id: "aDcT",
                                        name: "Decimals:"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "AT00",
                                        group_id: "AddT",
                                        name: "none"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "AT01",
                                        group_id: "AddT",
                                        name: "1",
                                    },
                                    {
                                        type: "radio",
                                        item_id: "AT02",
                                        group_id: "AddT",
                                        name: "2",
                                    },
                                ]
                            },
                        ]
                    },
                    {
                        type: "view",
                        align_children: "align_row",
                        elements:
                        [
                            {
                                type: "static_text",
                                item_id: "addRngB",
                                name: "Range Bottom"
                            },
                            {
                                item_id: "aB_a",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "static_text",
                                item_id: "addRngToB",
                                name: " to "
                            },
                            {
                                item_id: "aB_b",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "view",
                                align_children: "align_distribute",
                                elements:
                                [
                                    {
                                        type: "static_text",
                                        item_id: "aDcB",
                                        name: "Decimals:"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "AB00",
                                        group_id: "AddB",
                                        name: "none"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "AB01",
                                        group_id: "AddB",
                                        name: "1",
                                    },
                                    {
                                        type: "radio",
                                        item_id: "AB02",
                                        group_id: "AddB",
                                        name: "2",
                                    },
                                ]
                            },
                        ]
                    }
                ]
            }, // End Addition Cluster
\eFCa
\bFCs
            {  // The Subtraction Cluster
                type: "cluster",
                name: "Subtraction",
                item_id: "sub",
                align_children: "align_left",
                elements:
                [
                    {
                        type: "view",
                        align_children: "align_row",
                        elements:
                        [
                            {
                                type: "static_text",
                                item_id: "subRngT",
                                name: "Range Top      "
                            },
                            {
                                item_id: "sT_a",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "static_text",
                                item_id: "subRngToT",
                                name: " to "
                            },
                            {
                                item_id: "sT_b",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "view",
                                align_children: "align_distribute",
                                elements:
                                [
                                    {
                                        type: "static_text",
                                        item_id: "sDT",
                                        name: "Decimals:"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "ST00",
                                        group_id: "SubT",
                                        name: "none"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "ST01",
                                        group_id: "SubT",
                                        name: "1",
                                    },
                                    {
                                        type: "radio",
                                        item_id: "ST02",
                                        group_id: "SubT",
                                        name: "2",
                                    },
                                ]
                            },
                        ]
                    },
                    {
                        type: "view",
                        align_children: "align_row",
                        elements:
                        [
                            {
                                type: "static_text",
                                item_id: "subRngB",
                                name: "Range Bottom"
                            },
                            {
                                item_id: "sB_a",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "static_text",
                                item_id: "subRngToB",
                                name: " to "
                            },
                            {
                                item_id: "sB_b",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "view",
                                align_children: "align_distribute",
                                elements:
                                [
                                    {
                                        type: "static_text",
                                        item_id: "sDcB",
                                        name: "Decimals:"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "SB00",
                                        group_id: "SubB",
                                        name: "none"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "SB01",
                                        group_id: "SubB",
                                        name: "1",
                                    },
                                    {
                                        type: "radio",
                                        item_id: "SB02",
                                        group_id: "SubB",
                                        name: "2",
                                    },
                                ]
                            },
                        ]
                    }
                ]
            }, // End Subtraction Cluster
\eFCs
\bFCm
            {  // The Multiplication Cluster
                type: "cluster",
                name: "Multiplication",
                item_id: "mul",
                align_children: "align_left",
                elements:
                [
                    {
                        type: "view",
                        align_children: "align_row",
                        elements:
                        [
                            {
                                type: "static_text",
                                item_id: "mulRngT",
                                name: "Range Top      "
                            },
                            {
                                item_id: "mT_a",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "static_text",
                                item_id: "mulRngToT",
                                name: " to "
                            },
                            {
                                item_id: "mT_b",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "view",
                                align_children: "align_distribute",
                                elements:
                                [
                                    {
                                        type: "static_text",
                                        item_id: "mDcT",
                                        name: "Decimals:"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "MT00",
                                        group_id: "MulT",
                                        name: "none"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "MT01",
                                        group_id: "MulT",
                                        name: "1",
                                    },
                                    {
                                        type: "radio",
                                        item_id: "MT02",
                                        group_id: "MulT",
                                        name: "2",
                                    },
                                ]
                            },
                        ]
                    },
                    {
                        type: "view",
                        align_children: "align_row",
                        elements:
                        [
                            {
                                type: "static_text",
                                item_id: "mulRngB",
                                name: "Range Bottom"
                            },
                            {
                                item_id: "mB_a",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "static_text",
                                item_id: "mulRngToB",
                                name: " to "
                            },
                            {
                                item_id: "mB_b",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "view",
                                align_children: "align_distribute",
                                elements:
                                [
                                    {
                                        type: "static_text",
                                        item_id: "mDcB",
                                        name: "Decimals:"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "MB00",
                                        group_id: "MulB",
                                        name: "none"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "MB01",
                                        group_id: "MulB",
                                        name: "1",
                                    },
                                    {
                                        type: "radio",
                                        item_id: "MB02",
                                        group_id: "MulB",
                                        name: "2",
                                    },
                                ]
                            },
                        ]
                    }
                ]
            }, // End Multiplication Cluster
\eFCm
\bFCd
            {  // The Division Cluster
                type: "cluster",
                name: "Division",
                item_id: "div",
                align_children: "align_left",
                elements:
                [
                    {
                        type: "view",
                        align_children: "align_row",
                        elements:
                        [
                            {
                                type: "static_text",
                                item_id: "divRngQ",
                                name: "Range Quotient"
                            },
                            {
                                item_id: "dQ_a",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "static_text",
                                item_id: "divRngToT",
                                name: " to "
                            },
                            {
                                item_id: "dQ_b",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "view",
                                align_children: "align_distribute",
                                elements:
                                [
                                    {
                                        type: "static_text",
                                        item_id: "dDcQ",
                                        name: "Decimals:"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "DQ00",
                                        group_id: "DivQ",
                                        name: "none"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "DQ01",
                                        group_id: "DivQ",
                                        name: "1",
                                    },
                                    {
                                        type: "radio",
                                        item_id: "DQ02",
                                        group_id: "DivQ",
                                        name: "2",
                                    },
                                ]
                            },
                        ]
                    },
                    {
                        type: "view",
                        align_children: "align_row",
                        elements:
                        [
                            {
                                type: "static_text",
                                item_id: "divRngB",
                                name: "Range Divisor   "
                            },
                            {
                                item_id: "dB_a",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "static_text",
                                item_id: "divRngToB",
                                name: " to "
                            },
                            {
                                item_id: "dB_b",
                                type: "edit_text",
                                alignment: "align_fill",
                                width: 40,
                                height: 20
                            },
                            {
                                type: "view",
                                align_children: "align_distribute",
                                elements:
                                [
                                    {
                                        type: "static_text",
                                        item_id: "dDcB",
                                        name: "Decimals:"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "DB00",
                                        group_id: "DivB",
                                        name: "none"
                                    },
                                    {
                                        type: "radio",
                                        item_id: "DB01",
                                        group_id: "DivB",
                                        name: "1",
                                    },
                                    {
                                        type: "radio",
                                        item_id: "DB02",
                                        group_id: "DivB",
                                        name: "2",
                                    },
                                ]
                            },
                        ]
                    }
                ]
            }, // End Division Cluster
\eFCd
            {
                type: "view",
                align_children: "align_row",
                elements:
                [
                    {
                        alignment: "align_right",
                        type: "ok_cancel",
                    }
                ]
            }
        ]
    }
}
\end{newsegment}
\end{insDLJS*}
\begin{insDLJS}[fcMenu]{fcmd}{Menu Data}
\fcMenu
function processFcMenu() {
    var cChoice = \popUpMenu(fcMenu);
    if ( cChoice != null ) {
        switch(cChoice) {
            case "0": app.execDialog(fcDialog);
                    break;
            case "1": ToggleKeyPad();
                    break
            case "2": app.execMenuItem("GeneralInfo");
        }
    }
}
\end{insDLJS}
%    \end{macrocode}
%    \begin{macrocode}
\InputIfFileExists{fc_custom.def}{}{}
%    \end{macrocode}

%    \begin{macrocode}
%</package>
%    \end{macrocode}
