\documentclass{article}
\usepackage[designiv]{web}
\usepackage[usehyforms]{grayhints}

\addtoWebHeight{1in}
\def\cs#1{\texttt{\char`\\#1}}
\parindent0pt


\begin{document}
\begin{Form}
\begin{center}\large\bfseries Gray Hints
\end{center}
The `gray hint' technique requires modifications to the Format,
Keystroke, OnFocus, and OnBlur events.\medskip

\renewcommand\LayoutTextField[2]{#2}
\renewcommand\LayoutChoiceField[2]{#2}

\TextField[%
    name={Name.First},
    height=11bp,
    width=2in,
    color={\matchGray},
    keystroke=\KeyToGray,
    format={\FmtToGray{First Name}},
    onfocus={\FocusToBlack},
    onblur={\BlurToBlack}]{First Name:}\quad
\TextField[%
    name={Name.Laat},
    height=11bp,
    width=2in,
    color={\matchGray},
    keystroke=\KeyToGray,
    format={\FmtToGray{Last Name}},
    onfocus={\FocusToBlack},
    onblur={\BlurToBlack}]{}\medskip

\TextField[%
    name=Datefield,
    height=11bp,
    width=1in,
    color={\matchGray},
    keystroke={AFDate_KeystrokeEx("yyyy/mm/dd");\KeyToGray},
    format={AFDate_FormatEx("yyyy/mm/dd");\FmtToGray{yyyy/mm/dd}},
    onfocus={\FocusToBlack},
    onblur={\BlurToBlack}]{}\medskip

The next three fields perform calculations, the last one is the sum of the
first two. These are fields formatted as numbers. To prevent `Total' field
from displaying a zero (0) when the dependent fields are empty (and to
display its gray hint instead), a document JavaScript function was developed,
named \texttt{AllowCalc(cArray)}. This function returns \texttt{true} if any
of the fields listed in \texttt{cArray} has a value and returns
\texttt{false}, otherwise.\smallskip

\TextField[%
    name=Integer.First,
    height=11bp,
    width=1in,
    color={\matchGray},
    keystroke={AFNumber_Keystroke(0,1,0,0,"",true);\KeyToGray},
    format={AFNumber_Format(0,1,0,0,"",true); \FmtToGray{First Integer}},
    onfocus=\FocusToBlack,
    onblur=\BlurToBlack
]{}\smallskip

\TextField[%
    name=Integer.Second,
    height=11bp,
    width=1in,
    color=\matchGray,
    keystroke={AFNumber_Keystroke(0,1,0,0,"",true); \KeyToGray},
    format={AFNumber_Format(0,1,0,0,"",true); \FmtToGray{Second Integer}},
    onfocus=\FocusToBlack,
    onblur=\BlurToBlack
]{}\smallskip

\TextField[%
    name=TotalNumber,
    height=11bp,
    width=1in,
    color=\matchGray,
    keystroke={AFNumber_Keystroke(0,1,0,0,"",true);\KeyToGray},
    format={AFNumber_Format(0,1,0,0,"",true); \FmtToGray{Total}},
    calculate={var cArray=new Array("Integer");
        if (AllowCalc(cArray))AFSimple_Calculate("SUM", cArray ); \CalcToGray},
    onfocus=\FocusToBlack,
    onblur=\BlurToBlack
]{}\medskip

The gray hint technique can apply to editable combo boxes as well.\smallskip

\ChoiceMenu[%
    name=combo,
    combo,
    width=1.65in,
    height=11bp,
    color={\matchGray},
    edit,
    keystroke=\KeyToGray,
    format={\FmtToGray{Enter your favorite food}},
    onfocus=\FocusToBlack,
    onblur=\BlurToBlack
]{}{Meat,Potatoes,Rice,Onions,Pickles}\medskip

The color scheme of the gray hints can be changed using
\cs{normalGrayColors}. The initial value of \cs{textColor}, which sets the
color of the text, must match, for appearance sake, the choice for the gray
color; for this reason, the \cs{matchGray} command was developed.\smallskip

\normalGrayColors{color.blue}{color.magenta}

\TextField[%
    name=Pet,
    width=1in,
    height=11bp,
    color=\matchGray,
    keystroke=\KeyToGray,
    format=\FmtToGray{Pet's name},
    onfocus=\FocusToBlack,
    onblur=\BlurToBlack
]{Pet}\medskip

\PushButton[%
    height=11bp,
    name=reset,
    onclick={this.resetForm();}]{Reset}\medskip

\end{Form}
\end{document}
