%\iffalse
%<*copyright>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% eCards.sty package,                  2003-3-10       %%
%% 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.      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%</copyright>
%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01]
%<package>\ProvidesPackage{eCards}
%<package> [2003/05/18 v1.0 eCards: An electronic flash cards package (dps)]
%<*driver>
\documentclass{ltxdoc}
\usepackage[dviwindo,colorlinks,hyperindex]{hyperref}
%\pdfstringdefDisableCommands{\let\\\textbackslash}
%\EnableCrossrefs \CodelineIndex
\begin{document}
  \GetFileInfo{eCards.sty}
  \title{eCards: Electronic Flash Cards}
  \author{D. P. Story\\
    Email: \texttt{dpstory@uakron.edu}}
  \date{processed \today}
  \maketitle
  \tableofcontents
  \let\Email\texttt
  \DocInput{eCards.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{Introduction}
%
% The initial version of this package was developed at the request of my colleague, Dr.\ Thomas
% Price, for use in the senior honors project of Ms.\ Katie Jones on
% \href{http://www.math.uakron.edu/~teprice/Trig/}{Trig Flash Cards}.
% Upon completion of the honors project, I generalized and extended
% the original package developed specifically for them.
%
% \section{Documentation}
%
% In this section, the major elements of this package are highlighted. For those
% who want to know more, you can peruse the {\LaTeX} code, there are comments
% contained there as well.
%
% \subsection{Preamble: Required Packages and Options}
%
% \subsubsection{Required Packages}
%
% This package depends heavily on the
% \textbf{\href{http://www.math.uakron.edu/~dpstory/webeq.html}
% {Acro\negthinspace\TeX{} eDucation Bundle}}: (1) the \textsf{web}
% package provides page setup, backgrounds, and navigational
% elements; (2) the \textsf{exerquiz} package allows you to author
% the questions, both non-responsive and responsive (fill-in and
% multiple choice); and (3) the \textsf{insdljs} packages is the
% mechanism for introducing document-level JavaScripts into the
% final document.
%
% Each of the packages listed above have their own required packages:
% \textsf{hyperref}, \textsf{color}, \textsf{verbatim}, \textsf{everyshi}
% and \textsf{eso-pic}. Theses are all available as part of the standard
% distribution of {\LaTeX} or through any CTAN site.
%
% \subsubsection{Options}
%
% \paragraph{eCards options.}\hskip-\lastskip\
% The \textsf{eCards} package really has only 4 options:
% \begin{enumerate}
%    \item \texttt{nohints}: If you do not want to provide hints in your eCards,
%        use this option. See also the comments in \Nameref{hint}.
%    \item \texttt{listing}:\label{listing} This option gives you a printable version of your
%        eCards. In this way, you can proofread, check your questions, hints,
%        and answers. Suggested packages and options are given below:
%\begin{verbatim}
%\usepackage[<driver_option>,forpaper,tight,nodirectory]{web}
%\usepackage[solutionsafter,proofing,preview]{exerquiz}
%\usepackage[listing]{eCards}
%\end{verbatim}
%   \item \texttt{memLogo}: The logo, if any, is read and re-read
%       for each page on which it appears.  Using this option, the logo
%    is read once and saved in a box for use.
%   \item \texttt{custom}: If this option is chosen, the package
%        will look for and input a file \texttt{eCard.cus}. This file can
%        be used to customize the environments. This file should be kept
%        in the source directory, not in the {\LaTeX} search path.
% \end{enumerate}
%
% \paragraph{Other options.}\hskip-\lastskip\
% Selecting the various options of the \textsf{web} and
% \textsf{exerquiz} packages can give you different looks.  It is
% important to be aware of all the options associated with these
% two package; in the paragraphs below, various options are
% discussed that may be useful in \textsf{eCards}.
%
%\paragraph{Useful Web Package Options.}\hskip-\lastskip\
% There are three background/panel options: \texttt{usetemplates},
% \texttt{rightpanel} and \texttt{leftpanel}.  Using the
% \texttt{usetemplates} option does not give you the vertical
% navigational strip, but it does give you the background colors;
% the \texttt{rightpanel} and \texttt{leftpanel} given you a
% vertical panel on the right and left, respectively.  Use one of
% these three options only, if any at all. Using none of these three
% will just get you the default white background.
%
%There are certain ``standard'' page designs, or you can create your own using
%the \cs{margins} and \cs{screensize}; the demo document has
%\begin{verbatim}
%\margins{.25in}{.25in}{24pt}{.25in} % left,right,top, bottom
%\screensize{3.72in}{366.24bp}       % height, width
%\end{verbatim}
% See the \textsf{Web} package documentation for details on these and other
% options.
%
% \paragraph{Useful Exerquiz Package Options.}\hskip-\lastskip\
% If you are not using  multiple choice or fill-in questions, you should use
% the \texttt{exercisesonly} option. This removes much of the document level JavaScript
% from the PDF document.
%
% For authors that use the full Acrobat~5.0, or the newer Acrobat
% 6.0 Standard or Acrobat 6.0 Professional, you can use the
% \texttt{execJS} option. If this option is taken, then when the
% document is first loaded into Acrobat (following distillation, or
% creation using \textsf{dvipdfm} or \textsf{pdftex}), the document
% will be automatically saved; this saves any imported document
% level JavaScript in the document. The document always needs to be saved
% after creation so save the scripts with the document, this does it automatically
% so you can't forget to do it---as one of my colleagues once did.
%
% The \texttt{nosolutions} option removes the \texttt{response} environment
% leaving only the questions. The \texttt{proofing} and \texttt{preview} options
% can be useful for proofreading, as described in the \texttt{\hyperref[listing]{listing}}
% option described above.
%
% \subsection{\protect\cs{begin\{document\}}: Start creating Cards}
%
% The process of creating these electronic cards is quite simple, the sections below
% describe the various environments used.
%
% \subsubsection{The \texttt{card} Environment}
%
% The main environment is the \texttt{card} environment, which is used for posing
% questions, offering a hint, and an answer. The \hypertarget{cardsyntax}{syntax} is
%\begin{verbatim}
%\begin{card}
%   < a question >
%   \begin{response}
%       \begin{hint}
%           < a hint >
%       \end{hint}
%       \begin{answer}
%           < an answer >
%       \end{answer}
%   \end{response}
%\end{card}
%\end{verbatim}
% \textcolor{red}{Important.} You can pose a question which requires
% a verbal response, or one for which there is a choice of
% alternatives, or a fill-in the blank (math or text). See the demo
% file \texttt{eCardstst.tex} for examples.
%
%   \subsubsection{The \texttt{response} Environment}
%
% Immediately following and nested within the \texttt{card} environment is the \texttt{response}
% environment.  This sets things up for the responses to the question: the hint
% and the answer.
%
%   \subsubsection{The \texttt{hint} Environment}\label{hint}
%
% The first environment to appear within the \texttt{response} is
% the \texttt{hint} environment.  Here you can provide additional
% information to help the student answer the question successfully.
% I've you've posed a multiple choice or fill-in question, you can simply
% copy the multiple choice or fill-in into the hint, just as I have done
% in the demo file \texttt{eCardstst.tex}.
%
% In this release, hints can be provided for \textbf{all} of the questions or for
% \textbf{none} of the questions. You can enter hints using the
% \texttt{hint} environment, illustrated \hyperlink{cardsyntax}{above}, or not include a
% \texttt{hint} environment.  When you do not want to include
% hints---whether you've entered the environments or not---use the
% \texttt{nohints} package option. This will convert the
% \texttt{hint} environment into a \texttt{comments}, and redefined
% some of the navigational buttons.
%
% \subsubsection{\texttt{answer} Environment}
%
% After the hint environment comes the answer environment where the answer to the original question
% can be presented. At the end of this environment, you need to back out of your nest:
% \verb+\end{answer}+, \verb+\end{response}+ and \verb+\end{card}+.
%
% \subsection{\protect\cs{end\{document\}}}
%
% \section{Main Code}
%
% \subsection{Declare Options}
%
% This package builds upon the \textbf{Acro\negthinspace\TeX{} eDucation Bundle}, the options of the
% \textsf{web} and \textsf{exerquiz} packages can be used with with \textsf{eCards}. Additional options
% are declared below.
%    \begin{macro}{memLogo}
% The logo, if any, is read and re-read for each page on which it appears.  Using this
% option, the logo is read once and saved in a box for use.
%    \begin{macrocode}
\DeclareOption{memLogo}{\let\@memLogo=y}
\let\@memLogo=n
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{listing}
% The \texttt{listing} gives a listing of questions, hints, and answers. When used in conjunction
% with various \textsf{exerquiz} options, this option can be used to review all cards and answers.
% Suggested options:
%\begin{verbatim}
%\usepackage[<driver_option>,forpaper,tight,nodirectory]{web}
%\usepackage[solutionsafter,proofing,preview]{exerquiz}
%\usepackage[memLogo,listing]{eCards}
%\end{verbatim}
% The boolean switch \cs{ecListing} can be used to get a better looking listing by removing
% graphics---see the demo file \texttt{eCardstst.tex}.
%    \begin{macrocode}
\DeclareOption{listing}{\ecListingtrue}
\newif\ifecListing \ecListingfalse
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{custom}
% If this option is chosen, the package will look for and input a file \texttt{eCard.cus}.
% This file can be used to customize the environments. This file should be kept in the
% source directory, not in the {\LaTeX} search path.
%    \begin{macrocode}
\DeclareOption{custom}{\let\@ecCustom=y}
\let\@ecCustom=n
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{nohints}
% In some applications, the author may not want to have hints provided, so, compile
% the document with the \texttt{nohints} option.
%    \begin{macrocode}
\DeclareOption{nohints}
    {%
        \let\@ecNoHints=y
        \def\hintDest{ex.\exnoCard}%
        \def\solnDest{ex.\exnoCard}%
    }
\let\@ecNoHints=n
\def\hintDest{ex.\exnoCard}%
\def\solnDest{ex.\exnoCard.s}%
%    \end{macrocode}
%    \end{macro}
% \subsection{ProcessOptions and Required Packages}
%    \begin{macrocode}
\ProcessOptions
\RequirePackage{web}
\RequirePackage{exerquiz}
%\RequirePackage{graphicx}
%    \end{macrocode}
% \subsection{String Data}
%    \begin{macro}{\cardsFinishedMsg}
% When user finishes the cards, a message appears announcing that event. The
% \cs{cardsFinishedMsg} holds the content of that message.
%    \begin{macrocode}
\newcommand{\cardsFinishedMsg}[1]{\def\CARDSFINISHED{#1}}
\cardsFinishedMsg{You've seen all the cards!}
%    \end{macrocode}
%    \end{macro}
% \subsection{Colors for Backgrounds}
% Some definitions for coloring the background page for the question page, the
% hint page and the answer page.
%    \begin{macrocode}
\textBgColor{cornsilk}
\def\cardColor#1{\def\@cardColor{#1}}
\def\hintColor#1{\def\@hintColor{#1}}
\def\solnColor#1{\def\@solnColor{#1}}
%    \end{macrocode}
% Default colors
%    \begin{macrocode}
\cardColor{vlightblue}
\hintColor{cornsilk}
\solnColor{webyellow}
%    \end{macrocode}
% \subsection{Modifying Exerquiz Environments}
%    \begin{macrocode}
\let\web@copyright=\@gobble
\let\exnoCard=\the@exno
\let\web@rightheader=\@empty
\def\io#1{\immediate\write\@auxout{#1}}
%    \end{macrocode}
% \subsubsection{Modify the \texttt{exercise} Environment}
% The \cs{endsolnexerhookaux} macro gets executed just prior to the end of the
% solution environment, but before the final trailer is written to the .sol file. Here,
% we use it to insert a navigational bar at the bottom of the solution page.
%    \begin{macrocode}
\def\endsolnexerhookaux{%
    \ifnum\@panelconfig=0\relax
        \immediate\write\verbatim@out
            {\string\insNaviBar*{\hfil\string\NextCard\hfil}}%
    \fi
}
\def\include@solutions{%
    \let\webnewpage=\relax
    \immediate\closeout\ex@solns
    \ifeq@nosolutions\else
        \iftherearesolutions\newpage\markright{\exsecrunhead}%
            \ifx\webnewpage\relax
                \def\webnewpage{\let\webnewpage=\newpage}%
            \fi
            \eqsolutionshook
            \addcontentsline{toc}{section}
                {\protect\numberline{}\exsectitle}%
            \input{\jobname.sol}%
        \fi
    \fi
}
%    \end{macrocode}
% Write the total number of questions (cards) to the aux file.
%    \begin{macrocode}
\AtEndDocument{\io{\string\gdef\string\totalCards{\the@exno}}\clearpage}
%    \end{macrocode}
% This macro holds the number of cards composed.
%    \begin{macrocode}
\def\theNumCards{\csname totalCards\endcsname}
%    \end{macrocode}
% \cs{nMarker} identifies the type of page, 0 for a question, 1 for a hint, 2 for a solution
%    \begin{macrocode}
\def\nMarker{0}
%    \end{macrocode}
% Redefine \cs{ReturnTo} so there is no link, we encourage the user to use the navigational
% buttons.
%    \begin{macrocode}
\def\ReturnTo#1#2{\eq@fititin#2}
%    \end{macrocode}
% Miscellaneous macro definitions associated with the \textsf{exercise} environment.
%    \begin{macrocode}
\renewcommand\exsecrunhead{}
\renewcommand\exlabel{}
\renewcommand\exsectitle{}
%    \end{macrocode}
% \subsubsection{Modify the \texttt{shortquiz} Environment}
%    \begin{environment}{multiChoice}
% An environment for posing a multiple choice question, based on the \texttt{shortquiz} environment
% of \textsf{exerquiz}.
%    \begin{macrocode}
\newenvironment{multiChoice}[1]
{%
    \par\smallskip\def\aftershortquizskip{}%
    \def\sq@priorhook{}\renewcommand\sqlabel{\@gobble}%
    \ifnum\nMarker=0\relax
        \def\sqWrongRespJS{app.alert(\eqsqwgmsg,3);
            this.gotoNamedDest("\hintDest");}%
%            this.gotoNamedDest("ex.\exnoCard");}%
    \fi
    \begin{shortquiz}
        \begin{answers}[\solnDest]{#1}%
%        \begin{answers}[ex.\exnoCard.s]{#1}%
}%
{%
        \end{answers}
    \end{shortquiz}
}
%    \end{macrocode}
%    \end{environment}
% \subsubsection{Modify the \texttt{oQuestion} Environment}
% Set the appearance of any text fields that the author might use.
%    \begin{macrocode}
\everyRespBoxTxt{\BG{1 1 1}}\everyRespBoxMath{\BG{1 1 1}}
%    \end{macrocode}
%    \begin{environment}{fillIn}
% The \texttt{fillIn} environment one to pose a fill in type question, either
% text or math.  Based on the \texttt{oQuestion} environment of \textsf{exerquiz}.
%    \begin{macrocode}
\newenvironment{fillIn}
{%
    \def\RespBoxTxtOnBlur{ecOnBlurRespBox(retn, \exnoCard, \nMarker);}%
    \unskip\begin{oQuestion}{\ifnum\nMarker>0\relax
        \solnDest\else\hintDest\fi}%
%    \unskip\begin{oQuestion}{ex.\exnoCard\ifnum\nMarker>0.s\fi}%
}
{\end{oQuestion}}
%    \end{macrocode}
%    \end{environment}

% \subsection{New Environments}
% \subsubsection{The \texttt{card} Environment}
%    \begin{environment}{card}
% This is the main environment for writing questions, hints and answers. This environment
% encloses all.
%    \begin{macrocode}
\newenvironment{card}
{%
    \newpage
    \gdef\nMarker{0}
    \def\eqexheader{\noindent}
        \renewcommand\exsllabelformat{\noindent}
    \renewcommand\exrtnlabelformat{}
    \renewcommand\exsecrunhead{}
    \ifnum\@panelconfig=0\relax
        \def\exersolnheadhook
            {\string\def\string\solndest{\solnDest}}%
%            {\string\def\string\solndest{ex.\exnoCard.s}}%
    \else
        \def\exersolnheadhook{\string\def\string\exnoCard{\exnoCard}%
            \string\def\string\solndest{\solnDest}%
            \string\gdef\string\nMarker
                {\if\@ecNoHints y2\else1\fi}\string\defineSoln}%
%            \string\def\string\solndest{ex.\exnoCard.s}%
%            \string\gdef\string\nMarker{1}\string\defineSoln}%
    \fi
    \begin{exercise}
        \textBgColor{\@cardColor}%
        \headCard
}%
{%
        \tailCard
    \end{exercise}%
    \ifnum\@panelconfig=0\relax\aftergroup\cardNaviBar\fi
}
%    \end{macrocode}
%    \end{environment}
%    \begin{macro}{\headCard}
% The ``design'' of the ``question'' page. Can re-design.
%    \begin{macrocode}
\newcommand{\headCard}
{%
    \vspace*{\stretch{.1}}%
    \begin{center}%
    \Large\textbf{QUESTION}\par\vspace*{.25in}%
    \begin{minipage}{.85\linewidth}%
        \large\unskip\noindent\ignorespaces%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\tailCard}
% Complete any environments begun by \cs{headCard}
%    \begin{macrocode}
\newcommand{\tailCard}
{%
    \end{minipage}
    \end{center}
    \par\vspace{\stretch{2}}%
}
%    \end{macrocode}
%    \end{macro}
% \subsubsection{The \texttt{response} Environment}
%    \begin{environment}{response}
% Nested within the \texttt{card} environment is the
% \texttt{response} environment, which, in turn, contains the
% \texttt{hint} and \texttt{answer} environments. This basically
% the \texttt{solution} environment for an \texttt{exercise} of
% \textsf{exerquiz}.
%    \begin{macrocode}
\newenvironment{response}
    {\solnexer@woparts[0pt]}{\endsolnexer@woparts}
%    \end{macrocode}
%    \end{environment}
%    \begin{environment}{hint}
% Right now, a hint is required. Place this environment within the \texttt{response}
% environment and \textit{before} the \texttt{answer} environment.
%    \begin{macrocode}
\newenvironment{hint}
{%
    \textBgColor{\@hintColor}%
    \headHint
}%
{%
    \tailHint
    \ifnum\@panelconfig=0\relax
        \insNaviBar{\hfill\hintSoln\ \hintNextCard\hfill}\fi
    \newpage\gdef\nMarker{2}\noindent\hypertarget{\solndest}{}%
}
\if\@ecNoHints y%
    \let\hint=\comment
    \let\endhint=\endcomment
\fi
%    \end{macrocode}
%    \end{environment}
%    \begin{macro}{\headHint}
% The ``design'' of the ``hint'' page. Can re-design.
%    \begin{macrocode}
\newcommand{\headHint}
{%
    \vspace*{\stretch{.1}}%
    \begin{center}%
        \Large\textbf{HINT}\par\vspace*{.25in}%
        \begin{minipage}{.85\linewidth}%
        \large\unskip\noindent\ignorespaces%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\tailHint}
% Close any environments begun in \cs{headHint}
%    \begin{macrocode}
\newcommand{\tailHint}
{%
        \end{minipage}
    \end{center}
    \par\vspace{\stretch{2}}%
}
%    \end{macrocode}
%    \end{macro}
% \subsubsection{The \texttt{answer} Environment}
%    \begin{environment}{answer}
% The \texttt{answer} environment follows the \texttt{hint}, also listed within
% the \texttt{response} environment.
%    \begin{macrocode}
\newenvironment{answer}
{%
    \textBgColor{\@solnColor}%
    \headAnswer
}%
{%
    \tailAnswer
}
%    \end{macrocode}
%    \end{environment}
%    \begin{macro}{\headAnswer}
% The ``design'' of the ``answer'' page. Can re-design.
%    \begin{macrocode}
\newcommand{\headAnswer}
{%
    \vspace*{\stretch{.1}}%
    \begin{center}%
        \Large\textbf{ANSWER} \\\vspace*{.25in}%
        \begin{minipage}{.85\linewidth}%
        \large\unskip\noindent\ignorespaces%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\tailAnswer}
% Close any environments opened by \cs{headAnswer}
%    \begin{macrocode}
\newcommand{\tailAnswer}
{%
        \end{minipage}
    \end{center}
    \vspace*{\stretch{2}}
}
%    \end{macrocode}
%    \end{macro}
% \subsection{Navigational Support}
% In this section we build navigational support.
%    \begin{macrocode}
\def\iconWidth{40pt}\def\iconHeight{15pt}
%    \end{macrocode}
%    \begin{macro}{\ecHomePage}
%    \begin{macro}{\ecLogo}
%    \begin{macro}{\ecLogoLink}
% \cs{ecHomePage}, for the `Home' button, and \cs{ecLogo}, for the logo. The argument
% for \cs{ecLogo} should be a LaTeX graphics command such as \cs{includegraphics}. See
% the default for an example. With \cs{ecLogoLink}, you can optionally associate a link
% with your logo.
%    \begin{macrocode}
\def\ecHomePage#1{\def\@ecHomePage{#1}}
\ecHomePage{http://www.math.uakron.edu/\string~dpstory/acrotex.html}
\def\ecLogo#1{\def\@ecLogo{#1}}
\ecLogo{\includegraphics[scale=.4]{graphics/uakron}}
\def\ecLogoLink#1{\def\@ecLogoLink{#1}}
\let\@ecLogoLink=\@empty
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%    \end{macro}
% \subsubsection{Define JS Actions for Icons}
% Below are some JavaScript definitions that are used for navigation.
%    \begin{macrocode}
\def\makeesc#1{\catcode`#1=0\relax}
%    \end{macrocode}
%    \DescribeMacro{\fsJS}\noindent
% Action for the fullscreen button `FS'.
%    \begin{macrocode}
\begin{defineJS}{\fsJS}
if (app.viewerVersion < 5.0)
    app.fullscreen = !app.fullscreen
else
{
    app.fs.cursor = cursor.visible;
    app.fs.defaultTransition = "";
    app.fs.useTimer = false;
    app.fs.isFullScreen = !app.fs.isFullScreen;
}
\end{defineJS}
%    \end{macrocode}
%    \DescribeMacro{\beginJS}
% This is the JavaScript for the begin button `Begin'.
%    \begin{macrocode}
\begin{defineJS}[\makeesc\@]{\beginJS}
aCardsReviewed = new Array();
getNextCard();
this.resetForm();
var f = this.getField("ex");
if ( f != null )
{
    var g = f.getArray();
    for (var i = 0; i < g.length; i++)
        g[i].strokeColor  = @eqDefaultColor;
}
\end{defineJS}
%    \end{macrocode}
% \subsubsection{Define Nagational Icons}
% Some navigation icons, \cs{newNaviIcon} is defined in the \textsf{Web Package}.
%    \begin{macrocode}
% if  nohint option is used, this is the JS action when hint is clicked.
\newcommand\noHintJSAction{}
\newNaviIcon[j]{\Soln}\iconWidth\iconHeight{\footnotesize Soln}
    {\ifnum\nMarker=2\relax\else
        this.gotoNamedDest("\solnDest");\fi}
%        this.gotoNamedDest("ex.\exnoCard.s");\fi}
\newNaviIcon[j]{\Hint}\iconWidth\iconHeight{\footnotesize Hint}
    {\if\@ecNoHints y\noHintJSAction
        \else\ifnum\nMarker=0this.gotoNamedDest("\hintDest");\fi\fi}
%    {\if\@ecNoHints y\noHintJSAction
%       \else\ifnum\nMarker=0 this.gotoNamedDest("ex.\exnoCard");\fi\fi}
\newNaviIcon[j]{\NextCard}\iconWidth\iconHeight{\footnotesize Next}
    {getNextCard();}
\newNaviIcon[j]{\hintNextCard}\iconWidth\iconHeight
    {\footnotesize Next}{getNextCard();}
\newNaviIcon[j]{\hintSoln}\iconWidth\iconHeight{\footnotesize Soln}
    {this.gotoNamedDest("\solndest");}
\newNaviIcon[j]{\Begin}\iconWidth\iconHeight
    {\footnotesize Begin}{\beginJS}
\newNaviIcon[l]{\Home}\iconWidth\iconHeight{\footnotesize Home}
    {\ifnum\arabic{page}=1\relax\def\next{\href{\@ecHomePage}}\else
    \def\next{\hyperlink{page.1}}\fi\next}
\newNaviIcon[j]{\FullScreen}\iconWidth\iconHeight
    {\footnotesize FS}{\fsJS}
\newNaviIcon[j]{\Close}\iconWidth\iconHeight{\footnotesize Close}
    {app.execMenuItem("Close")}
%    \end{macrocode}
% If \cs{@memLogo} has a value of `y', then the logo is put in a box and copied
% onto each page; otherwise, the logo is read from its file on each page.
%    \begin{macrocode}
\edef\@@Logo{\if\@memLogo y\relax
    \noexpand\unhcopy\noexpand\Logo\else\noexpand\@ecLogo\fi}
%    \end{macrocode}
% Build the button panel for the navigational bar. Can re-design as desired.
%    \begin{macrocode}
\ifnum\@panelconfig>0\relax
%    \end{macrocode}
% if \cs{@panelconfig} (a macro defined in \textsf{web}, is positive, then the author has chosen
% a left or a right navigational panel. So, we must build a panel.
%    \begin{macro}{\panelNaviGroup}
% This is the group of panel buttons used for navigational purposes.
%    \begin{macrocode}
    \renewcommand\panelNaviGroup
    {%
        \def\iconWidth{28pt}
        \ifnum\thepage=1\relax
            \parbox[c]{58pt}
            {%
                \Begin\hfil\FullScreen\\
                \Close\hfil\Home
            }%
            \else
            \parbox[c]{58pt}
            {%
                {\ifnum\nMarker>0\relax
                    \navibarTextColor{lightblue}\fi
                 \if\@ecNoHints y\relax
                    \navibarTextColor{lightblue}\fi\Hint}\hfil
                {\ifnum\nMarker=2\relax
                    \navibarTextColor{lightblue}\fi\Soln}\\
                \NextCard\hfil\Home
            }%
        \fi
    }
%    \end{macrocode}
%    \end{macro}
% If \cs{@memLogo} is `y', create a new box, read logo with \cs{@ecLogo}, and store
% in box
%    \begin{macrocode}
    \newbox\Logo
    \if\@memLogo y\relax
        \AtBeginDocument{\global\setbox\Logo = \hbox{\@ecLogo}}
    \fi
%    \end{macrocode}
%    \begin{macro}{\buildpanel}
% The \cs{buildpanel} command is defined in the \textsf{Web Package} and determines the layout of
% the vertical navigational panel. You can re-design your own.
%    \begin{macrocode}
    \buildpanel
    {%
        \ifx\@ecLogoLink\@empty\@@Logo
        \else\href{\@ecLogoLink}{\@@Logo}\fi
        \par\vspace{\stretch{1}}%
        \rotatebox{-90}{\aebLogo}%
        \par\vspace{\stretch{1}}%
        \panelNaviGroup
    }
%    \end{macrocode}
%    \end{macro}
% Delay the expansion of the \cs{newNaviIcon} macro for the solution page
%    \begin{macrocode}
    \def\defineSoln{\newNaviIcon[j]{\Soln}\iconWidth\iconHeight
        {\footnotesize Soln}{this.gotoNamedDest("\solndest");}
        \def\sqWrongRespJS{app.alert(\eqsqwgmsg,3);
            this.gotoNamedDest("\solndest");}%
    }
\else
%    \end{macrocode}
%    \begin{macro}{\cardNavibar}
% \cs{@panelconfig} must be zero, the author does not want a navigational panel, so well
% put buttons at the bottom of each page to navigate by.
% Standard navigational bar.
%    \begin{macrocode}
    \def\cardNaviBar{\insNaviBar{\hfill
        \if\@ecNoHints n\Hint\ \fi\Soln\ \NextCard \ \Home\hfill}%
    }
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
\fi
%    \end{macrocode}
% \subsection{Document Level JavaScript}
% Insert document level JavaScripts to get the functionality of randomly selected questions.
%
% \smallskip\noindent If author has used the \texttt{nodljs} or \texttt{exercises} only, then
% we need to turn the \textsf{insdljs} package back on by emitting
%    \begin{macrocode}
\let\importdljs=y
%    \end{macrocode}
% This is the JavaScript to control the eCards action. Some global variables followed by the
% \texttt{getNextCard()} method.
%    \begin{macrocode}
\begin{insDLJS}[isCardloaded]{flashcrd}{Flash Card JS}
var isCardloaded=true;
var maxNumberCards = 100;
var aCardsReviewed = new Array();
var cardsFinished = "\CARDSFINISHED";
function getNextCard()
{
    numCards = \theNumCards;
    var nCardsReviewed = aCardsReviewed.length;
    if ( nCardsReviewed == numCards )
    {
        app.alert(cardsFinished,3);
        this.gotoNamedDest("page.1");
    }
    else
    {
        var look4Next = true;
        while (look4Next)
        {
            var nextCard = Math.random();
            nextCard *= maxNumberCards;
            nextCard = Math.ceil(nextCard);
            nextCard \%= numCards;
            nextCard += 1;
            for ( var i = 0; i < nCardsReviewed; i++)
                if ( aCardsReviewed[i] == nextCard ) break;
            if ( i == nCardsReviewed ) look4Next = false;
        }
        aCardsReviewed.push(nextCard);
        this.gotoNamedDest("qex."+nextCard);
    }
}
%    \end{macrocode}
% We also define a function \texttt{ecOnBlurRespBox()} to
% correctly control the page changes: If a wrong answer is given, then we go to
% the hint or the solution depending on whether user is responding to the original
% question or to the hint.
%    \begin{macrocode}
function ecOnBlurRespBox (retn, exnoCard, nMarker)
{
    if (retn != null) {
        if (retn) {
            app.alert(\eqsqrtmsg,3);
            var dest = "ex." + exnoCard + ".s";
            this.gotoNamedDest(dest);
        }
        else {
            app.alert(\eqsqwgmsg,3);
            if (nMarker==0) {
                var dest = "ex." + exnoCard;
                this.gotoNamedDest(dest);
            }
            else {
                var dest = "ex." + exnoCard + ".s";
                this.gotoNamedDest(dest);
            }
        }
    }
    else {
        var str = event.target.value.toString();
        if (str.replace(/\s/g,"") == "")
        event.target.strokeColor = \eqDefaultColor;
    }
}
\end{insDLJS}
%    \end{macrocode}
% This requires the document author to be using the full Acrobat 5.0 or greater, not
% just the Adobe Reader.
%    \begin{macrocode}
\begin{execJS}{execjs}
app.execMenuItem("Save");
\end{execJS}
%    \end{macrocode}
% If we have the \texttt{listing} option taken, then we import the \texttt{eCardsList.def}
% file to redefine portions of the \texttt{card} environment.
% just the Adobe Reader.
%    \begin{macrocode}
\ifecListing
    \input{eCardsList.def}
\fi
%    \end{macrocode}
% If document author  wants to modify these environments, s/he can place redefinitions in
% \texttt{eCard.cus}.
%    \begin{macrocode}
\if\@ecCustom y\InputIfFileExists{eCard.cus}{}{}\fi
%</package>
%    \end{macrocode}
% \subsection{Support for the \texttt{listing} option}
% When the \texttt{listing} option is taken, we list out the questions, hints, and answers.
% In this section, a number of environments and commands are defined, the name of each
% begin with `\texttt{listing@}'. The document author can \cs{renewcommand} there to
% create a printed listing of easy review. If you say
%\begin{verbatim}
%\usepackage[dvipsone,forpaper,tight,nodirectory]{web}
%\usepackage[execJS,solutionsafter,proofing,preview]{exerquiz}
%\usepackage[memLogo,listing]{eCards}
%\end{verbatim}
% then the multiple choice and fill-in questions will display the correct answers. Place any
% customizations in a text field named \texttt{eCards.cus}, and use the \texttt{custom}
% option.
% \subsubsection{The \texttt{card} Environment}
%    \begin{macrocode}
%<*listing>
%    \end{macrocode}
%    \begin{environment}{card}
% This is the main environment for writing questions, hints and answers. This environment
% encloses all.
%    \begin{macrocode}
\newcounter{ecCnt}
\renewcommand\exsolafter{}
\eqexerskip{0pt}
\newenvironment{listing@card}
{%
    \stepcounter{ecCnt}%
    \gdef\nMarker{0}%
    \def\eqexheader{\noindent}%
        \renewcommand\exsllabelformat{\noindent}%
    \renewcommand\exrtnlabelformat{}%
    \renewcommand\exsecrunhead{}%
    \begin{exercise}%
        \textBgColor{\@cardColor}%
        \headCard
}%
{%
        \tailCard
    \end{exercise}%
}
%\let\card = \listing@card
%\let\endcard = \endlisting@card
%    \end{macrocode}
%    \end{environment}
%    \begin{macro}{\headCard}
% The ``design'' of the ``question'' page. Can re-design.
%    \begin{macrocode}
\newcommand{\listing@headCard}
{%
    \unskip\makebox[0pt][r]
        {\textbf{\arabic{ecCnt}.\enspace}}\ignorespaces%
}
%\let\headCard = \listing@headCard
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\tailCard}
% Complete any environments begun by \cs{headCard}
%    \begin{macrocode}
\newcommand{\listing@tailCard}{\par}
%\let\tailCard = \listing@tailCard
%    \end{macrocode}
%    \end{macro}
% \subsubsection{The \texttt{response} Environment}
%    \begin{environment}{response}
% Nested within the \texttt{card} environment is the
% \texttt{response} environment, which, in turn, contains the
% \texttt{hint} and \texttt{answer} environments. This basically
% the \texttt{solution} environment for an \texttt{exercise} of
% \textsf{exerquiz}.
%    \begin{macrocode}
\newenvironment{listing@response}
    {\solnexer@woparts[0pt]}{\endsolnexer@woparts}
%\let\headresponse = \listing@response
%\let\endresponse = \listing@response
%    \end{macrocode}
%    \end{environment}
%    \begin{environment}{hint}
% Right now, a hint is required. Place this environment within the \texttt{response}
% environment and \textit{before} the \texttt{answer} environment.
%    \begin{macrocode}
\newenvironment{listing@hint}
{%
    \textBgColor{\@hintColor}%
    \headHint
}%
{%
    \tailHint
}
%\let\headhint = \listing@hint
%\let\endhint = \listing@endhint
%    \end{macrocode}
%    \end{environment}
%    \begin{macro}{\headHint}
% The ``design'' of the ``hint'' page. Can re-design.
%    \begin{macrocode}
\newcommand{\listing@headHint}
{%
    \unskip\par\textit{Hint}:\space\ignorespaces
}
%\let\headHint = \listing@headHint
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\tailHint}
% Close any environments begun in \cs{headHint}
%    \begin{macrocode}
\newcommand{\listing@tailHint}{}
%\let\tailHint = \listing@tailHint
%    \end{macrocode}
%    \end{macro}
% \subsubsection{The \texttt{answer} Environment}
%    \begin{macro}{\headAnswer}
% The ``design'' of the ``answer'' page. Can re-design.
%    \end{macro}
%    \begin{environment}{answer}
% The \texttt{answer} environment follows the \texttt{hint}, also listed within
% the \texttt{response} environment.
%    \begin{macrocode}
\newenvironment{listing@answer}
{%
    \textBgColor{\@solnColor}%
    \headAnswer
}%
{%
    \tailAnswer
}
%\let\answer = \listing@answer
%\let\endanswer = \listing@endanswer
%    \end{macrocode}
%    \end{environment}
%    \begin{macrocode}
\newcommand{\listing@headAnswer}
{%
    \unskip\par\textit{Answer}:\space\ignorespaces
}
%\let\headAnswer = \listing@headAnswer
%    \end{macrocode}
%    \begin{macro}{\tailAnswer}
% Close any environments opened by \cs{headAnswer}
%    \begin{macrocode}
\newcommand{\listing@tailAnswer}{}
%\let\tailAnswer = \listing@tailAnswer
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
\AtBeginDocument{%
    \let\card = \listing@card
    \let\endcard = \endlisting@card
    \let\headCard = \listing@headCard
    \let\tailCard = \listing@tailCard
    \let\headresponse = \listing@response
    \let\endresponse = \listing@response
    \let\headhint = \listing@hint
    \let\endhint = \listing@endhint
    \let\headHint = \listing@headHint
    \let\tailHint = \listing@tailHint
    \let\answer = \listing@answer
    \let\endanswer = \listing@endanswer
    \let\headAnswer = \listing@headAnswer
    \let\tailAnswer = \listing@tailAnswer
}
%</listing>
%    \end{macrocode}
\endinput
