From: <Saved by Windows Internet Explorer 8>
Subject: 
Date: Fri, 2 Jul 2010 11:04:38 -0500
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01CB19D6.5CF336D0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5931

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CB19D6.5CF336D0
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.grantsolutions.gov/gs/preaward/previewPublicAnnouncement.do?id=11689

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE></TITLE>
<META content=3D"text/html; charset=3Dutf-8" =
http-equiv=3DContent-Type><LINK=20
rel=3Dstylesheet type=3Dtext/css=20
href=3D"https://www.grantsolutions.gov/gs/styles/main.css">
<SCRIPT type=3Dtext/javascript=20
src=3D"https://www.grantsolutions.gov/gs/javascript/utility.js"></SCRIPT>=

<NOSCRIPT>
<META name=3DGENERATOR content=3D"MSHTML 8.00.6001.18928"></HEAD>
<BODY>JavaScript for some helper methods</NOSCRIPT>
<SCRIPT type=3Dtext/javascript=20
src=3D"https://www.grantsolutions.gov/gs/javascript/window.js"></SCRIPT>
 <NOSCRIPT>JavaScript for controlling window</NOSCRIPT>
<SCRIPT type=3Dtext/javascript=20
src=3D"https://www.grantsolutions.gov/gs/javascript/commons-validator.js"=
></SCRIPT>
 <NOSCRIPT>JavaScript for common validaton</NOSCRIPT>
<SCRIPT type=3Dtext/javascript=20
src=3D"https://www.grantsolutions.gov/gs/javascript/validation.js"></SCRI=
PT>
 <NOSCRIPT>JavaScript for validation</NOSCRIPT>
<SCRIPT type=3Dtext/javascript=20
src=3D"https://www.grantsolutions.gov/gs/javascript/contactsAdder.js"></S=
CRIPT>
 <NOSCRIPT>JavaScript for handling contacts</NOSCRIPT>=20
<META content=3Dno-cache http-equiv=3DCache-Control>
<META content=3Dno-cache http-equiv=3DPragma>
<META content=3D0 http-equiv=3DExpires><BR><!-- =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3DBeginning of Page header =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D -->
<DIV class=3DpageHeader align=3Dcenter></DIV><!-- =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3DEnd of Page header =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D -->
<TABLE border=3D0 width=3D"100%" align=3Dcenter>
  <TBODY>
  <TR>
    <TD><!-- =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3DBeginning of Header Section =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D -->
      <DIV style=3D"WIDTH: 100%; FLOAT: right; HEIGHT: 30px" =
id=3Dheader>
      <DIV style=3D"TEXT-ALIGN: right; COLOR: blue"=20
      class=3Dlogin>&nbsp;GrantSolutions-3.12 =
&nbsp;06/29/2010&nbsp;&nbsp; </DIV>
      <DIV=20
      style=3D"BACKGROUND-IMAGE: =
url(/gs/images/GSBanner-background.jpg); WIDTH: 100%"><IMG=20
      alt=3D"GrantSolutions Banner"=20
      src=3D"https://www.grantsolutions.gov/gs/images/GSBanner.jpg" =
width=3D602=20
      height=3D32> </DIV></DIV><!-- =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3DEnd of Header Section =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D --></TD></TR>
  <TR>
    <TD><!-- =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3DBeginning of Content Section =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D -->
      <FORM method=3Dpost name=3DpreviewAnnouncementForm=20
      action=3D/gs/preaward/previewPublicAnnouncement.do><INPUT =
value=3Dcancel=20
      type=3Dhidden name=3DcancelMapping> <INPUT type=3Dhidden =
name=3DtimeZone>=20
      <P align=3Dcenter><A=20
      href=3D"https://www.grantsolutions.gov/gs/homepage.gs"><IMG =
border=3D0=20
      name=3Dbanner alt=3D"GrantSolutions System"=20
      =
src=3D"https://www.grantsolutions.gov/gs/images/egrants_paint.gif"> =
</A></P>
      <P align=3Dcenter><SPAN class=3DsectionHeader>FY10 Support for =
Pregnant and=20
      Parenting Teens and Women FOA </SPAN></P>
      <HR>

      <P><SPAN class=3Dnotes>DISCLAIMER: <BR><BR><BR>NOTES: =
<BR></SPAN></P>
      <HR>

      <TABLE class=3DtextTable>
        <TBODY>
        <TR nowrap=3D"nowrap">
          <TD noWrap><B>ANNOUNCEMENT:</B> </TD>
          <TD>FY10 Support for Pregnant and Parenting Teens and Women =
FOA=20
        </TD></TR>
        <TR nowrap=3D"nowrap">
          <TD noWrap><B>PROGRAM OFFICE:</B> </TD>
          <TD>OPHS/OAH - Central Office </TD></TR>
        <TR nowrap=3D"nowrap">
          <TD noWrap><B>GRANT PROGRAM:</B> </TD>
          <TD>Support for Pregnant and Parenting Teens </TD></TR>
        <TR nowrap=3D"nowrap">
          <TD noWrap><B>CFDA:</B> </TD>
          <TD>93.500<BR></TD></TR>
        <TR nowrap=3D"nowrap">
          <TD vAlign=3Dtop noWrap><B>DUE DATE:</B> </TD>
          <TD vAlign=3Dtop>08/02/2010 08:00 PM&nbsp;(GMT - 05:00) =
Eastern Time=20
            (US &amp; Canada) <BR></TD></TR></TBODY></TABLE>
      <HR>

      <P>
      <P>To apply for this announcement, you may:</P>
      <OL>
        <LI><STRONG>Submit an electronic application:</STRONG><BR>In =
order to=20
        apply for new funding opportunities which are open to the public =
for=20
        competition, you may access the Grants.gov website portal. All =
funding=20
        opportunities and application kits are made available on =
Grants.gov. If=20
        your organization has/had a grantee business relationship with a =
grant=20
        program serviced by the Office of Grants Management, and you are =

        applying as part of ongoing grantee related activities, please =
access=20
        GrantSolutions.gov. In order to apply electronically you must =
first have=20
        a GrantSolutions user account. If you are already an existing =
grantee,=20
        please login to GrantSolutions using your existing grantee =
username and=20
        password. If you do not remember your account information or =
have not=20
        been assigned a grantee account, please contact the =
GrantSolutions Help=20
        Desk at 1-800-618-0223 or by email at <A=20
        =
href=3D"mailto:help@grantsolutions.gov">help@grantsolutions.gov</A> .=20
        GrantSolutions provides you the ability for existing grantee=20
        organizations to submit their entire application online. =
However, please=20
        note that all required signatures must still be "original =
hardcopy=20
        signatures" and must be received by the Grants Servicing Office =
by the=20
        due date requirements as specified in the grant announcement. =
<BR><BR>
        <LI><STRONG>Submit a paper application:</STRONG><BR>Please =
print,=20
        complete, and mail the required application kit enclosures to =
the Grants=20
        Servicing Office by the due date requirements as specified in =
the grant=20
        announcement. </LI></OL>
      <P><BR><STRONG>Agency Contacts:</STRONG><BR>Administrative and =
budgetary=20
      requirements: <BR>OSOPHS Office of Grants =
Management<BR>240-453-8822</P>
      <P><BR><BR>Program Requirements or Technical Assistance:<BR>OSOPHS =
Office=20
      of Adolescent Health<BR>Megan Landry<BR>240-453-8128<BR><A=20
      href=3D"mailto:oah.gov@hhs.gov">oah.gov@hhs.gov</A></P>
      <P>&nbsp;</P>
      <P></P>
      <HR>

      <DIV align=3Dcenter><BR>
      <TABLE class=3DlistTable>
        <TBODY>
        <TR>
          <TH colSpan=3D2>Grant Announcement </TH></TR>
        <TR>
          <TD>Support for Pregnant and Parenting Teens and Women FOA =
</TD>
          <TD><BR><A=20
            =
href=3D'javascript:openWin("/gs/servlet/document.DownloadPdfPublicServlet=
?document_id=3D168220",600,400,false,false,false,false,"")'>View=20
            File </A></TD></TR>
        <TR>
          <TH colSpan=3D2>Information for the Applicant </TH></TR>
        <TR>
          <TD>Support for Pregnant and Parenting Teens and Women =
Legislation=20
          </TD>
          <TD><BR><A=20
            =
href=3D'javascript:openWin("/gs/servlet/document.DownloadPdfPublicServlet=
?document_id=3D168221",600,400,false,false,false,false,"")'>View=20
            File </A></TD></TR>
        <TR>
          <TD>SF 424 Budget Form Download for Printing </TD>
          <TD><BR><A=20
            =
href=3D'javascript:openWin("/gs/servlet/document.DownloadPdfPublicServlet=
?document_id=3D147698",600,400,false,false,false,false,"")'>View=20
            File </A></TD></TR>
        <TR>
          <TD>SF424A Form Download for Printing </TD>
          <TD><BR><A=20
            =
href=3D'javascript:openWin("/gs/servlet/document.DownloadPdfPublicServlet=
?document_id=3D168623",600,400,false,false,false,false,"")'>View=20
            File </A></TD></TR>
        <TR>
          <TD>SF424B Download for Printing </TD>
          <TD><BR><A=20
            =
href=3D'javascript:openWin("/gs/servlet/document.DownloadPdfPublicServlet=
?document_id=3D168624",600,400,false,false,false,false,"")'>View=20
            File </A></TD></TR>
        <TR>
          <TD>SF-LLL Disclosure of Lobbying Activities Download for =
Printing=20
          </TD>
          <TD><BR><A=20
            =
href=3D'javascript:openWin("/gs/servlet/document.DownloadPdfPublicServlet=
?document_id=3D168625",600,400,false,false,false,false,"")'>View=20
            File </A></TD></TR></TBODY></TABLE></DIV>
      <DIV align=3Dcenter><BR><INPUT class=3Dbutton value=3DClose =
type=3Dsubmit name=3DbtnAction>=20
      </DIV></FORM><!-- =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3DEnd of Content Section =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D --></TD></TR>
  <TR>
    <TD><!-- =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3DBeginning of Footer Section =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D -->
      <TABLE border=3D0 width=3D"100%">
        <TBODY>
        <TR>
          <TD width=3D"100%"><IMG alt=3Dheader_stripe=20
            =
src=3D"https://www.grantsolutions.gov/gs/images/nav/header_stripe.gif"=20
            width=3D"100%" height=3D11> </TD></TR>
        <TR>
          <TD width=3D"100%" align=3Dmiddle><!-- contact info --><SPAN=20
            class=3Dclaimer><B>GrantSolutions User Support</B> | (202) =
401-5282 or=20
            (866) 577-0771 | <A=20
            =
href=3D"mailto:help@grantsolutions.gov?subject=3DGrantSolutions%20Help">m=
ailto:help@grantsolutions.gov?subject=3DGrantSolutions%20Help</A></SPAN> =

          </TD></TR>
        <TR>
          <TD width=3D"100%" align=3Dmiddle><!-- claimer --><SPAN =
class=3Dclaimer><A=20
            =
href=3D"http://www.grantsolutions.gov/cf/display/mkt/Contacts"=20
            target=3D_blank>Contact Us</A>&nbsp;&nbsp;|&nbsp; <A=20
            class=3DnotesBottomNav =
href=3D"http://www.hhs.gov/Accessibility.html"=20
            target=3D_blank>Web Accessibility</A>&nbsp;&nbsp;|&nbsp; <A=20
            class=3DnotesBottomNav =
href=3D"http://www.hhs.gov/Privacy.html"=20
            target=3D_blank>Privacy and Security =
Notice</A>&nbsp;&nbsp;|&nbsp; <A=20
            class=3DnotesBottomNav href=3D"http://www.hhs.gov/foia/"=20
            target=3D_blank>Freedom of Information =
Act</A>&nbsp;&nbsp;|&nbsp; <A=20
            class=3DnotesBottomNav =
href=3D"http://www.hhs.gov/Disclaimer.html"=20
            target=3D_blank>Disclaimers</A> =
</SPAN></TD></TR></TBODY></TABLE><!-- =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3DEnd of Footer Section =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D --></TD></TR></TBODY></TABLE></BODY></HTML>

------=_NextPart_000_0000_01CB19D6.5CF336D0
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: https://www.grantsolutions.gov/gs/images/GSBanner.jpg

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
cZLp+Ne1nKk+rsbbi1PBqXaInpMdOpnI7LSp3dVQ8ewbjJdPxr2s5Un1djbcWp4NS7RE9Jjp1M5H
ZaVO7qqHj2DcZLp+Ne1nKk+rsbbi1PBqXaInpMdOpnI7LSp3dVQ8exu4y3Uca9q972Un+j+Ttu23
tTwbluiJ6THTqZyOy0qd3VUPHsZuMl0/GvazlSfV2zbcWp4NS7RE9Jjp1M5HZaVO7qqHj2DcZLp+
Ne1nKk+rsbbi1PBqXaInpMdOpnI7LSp3dVQ8ewbjJdPxr2s5Un1djbcWp4NS7RE9Jjp1M5HZaVO7
qqHj2DcZLp+Ne1nKk+rsbbi1PBqXaInpMdOpnI7LSp3dVQ8ewbjJdPxr2s5Un1djbcWp4NS7RE9J
jp1M5HZaVO7qqHj2DcZLp+Ne1nKk+rsbbi1PBqXaInpMdOpnI7LSp3dVQ8ewbjJdPxr2s5Un1djb
cWp4NS7RE9Jjp1M5HZaVO7qqHj2DcZLp+Ne1nKk+rsbbi1PBqXaInpMdOpnI7LSp3dVQ8ewbjJdP
xr2s5Un1djbcWp4NS7RE9Jjp1M5HZaVO7qqHj2DcZLp+Ne1nKk+rsbbi1PBqXaInpMdOpnI7LSp3
dVQ8ewbjJdPxr2s5Un1djbcWp4NS7RE9Jjp1M5HZaVO7qqHj2DcZLp+Ne1nKk+rsbbi1PBqXaInp
MdOpnI7LSp3dVQ8ewbjJdPxr2s5Un1djbcWp4NS7RE9Jjp1M5HZaVO7qqHj2DcZLp+Ne1nKk+rsb
bi1PBqXaInpMdOpnI7LSp3dVQ8ewbjJdPxr2s5Un1djbcWp4NS7RE9Jjp1M5HZaVO7qqHj2DcZLp
+Ne1nKk+rsbbi1PBqXaInpMdOpnI7LSp3dVQ8ewbjJdPxr2s5Un1djbcWp4NS7RE9Jjp1M5HZaVO
7qqHj2DcZLp+Ne1nKk+rsbbi1PBqXaInpMdOpnI7LSp3c1Q8exo7TJdRnF69q+VJ9XY23FqeDUu0
RPSY6dTOR2WlTu6qh49jNxkun417WcqT6uxtuLU8Gpdoiekx06mcjstKnd1VDx7BuMl0/GvazlSf
V2Ntxang1LtET0mOnUzkdlpU7uqoePYNxkun417WcqT6uxtuLU8Gpdoiekx06mcjstKnd1VDx7Bu
Ml0/GvazlSfV2Ntxang1LtET0mOnUzkdlpU7uqoePYNxkun417WcqT6uxtuLU8Gpdoiekx06mcjs
tKnd1VDx7BuMl0/GvazlSfV2Ntxang1LtET0mOnUzkdlpU7uqoePYNxkun417WcqT6uxtuLU8Gpd
oiekx06mcjstKnd1VDx7BuMl0/GvazlSfV2Ntxang1LtET0mOnUzkdlpU7uqoePYNxkun417WcqT
6uxtuLU8Gpdoiekx06mcjstKnd1VDx7BuMl0/GvazlSfV2Ntxang1LtET0mOnUzkdlpU7uqoePYN
xkun417WcqT6uxtuLU8Gpdoiekx06mcjstKnd1VDx7BuMl0/GvazlSfV2Ntxang1LtET0mOnUzkd
lpU7uqoePYNxkun417WcqT6uxtuLU8Gpdoiekx06mcjstKnd1VDx7BuMl0/GvazlSfV2Ntxang1L
tET0mOnUzkdlpU7uqoePYNxkun417WcqT6uxtuLU8Gpdoiekx06mcjstKnd1VDx7BuMl0/GvazlS
fV2Ntxang1LtET0mOnUzkdlpU7uqoePYNxkun417WcqT6uxtuLU8Gpdoiekx06mcjstKnd1VDx7B
uMl0/GvazlSfV2Ntxang1LtET0mOnUzkdlpU7uqoePYNxkun417WcqT6uxtuLU8Gpdoiekx06mcj
stKnd1VDx7BuMl0/GvazlSfV23bc2p4NS3RE9Jjp1M5HZaVO7qqHj2DcZLp+Ne1nKk+rsbbm1PBq
W6InpMdOpnI7LSp3dVQ8ewbjJdPxr2s5Un1djbcWpP4NS0fRE9Jjp1M5HZaVO7qqHj2DcZLp+Ne1
nKk+rsbbm1PBqW6InpMdOpnI7LSp3dVQ8ewbjJdPxr2s5Un1djbc2p4NS3RE9JuOnSzjdllT7uan
+O4Nxkun417WcqT6uxtubU8Gpboiek3PTqZyOy0qd3VUPHsG4yXT8a9rOVJ9XbNtxang1LtET0m4
6dLON2WVPu5qf47g3GS6fjXtZypPq7btubU8Gpboiek3PTqZyOy0qd3VUPHsG4yXT8a9rOVJ9XY2
3NqeDUt0RPSY6dTOR2WlTu6qh49g3GS6fjXtZypPq7G25tTwaluiJ6THTqZyOy0qd3VUPHsG4yXT
8a9rOVJ9XbNtxang1LtET0mOnUzkdlpU7uqoePYNxkun417WcqT6uxtuLU8Gpdoiekx06mcjstKn
d1VDx7BuMl0/GvazlSfV23bc2p4NS3RE9Jjp1M5HZaVO7qqHj2DcZLp+Ne1nKk+rtm24tTwal2iJ
6THTqZyOy0qd3VUPHsG4yXT8a9rOVJ9XY23FqeDUu0RPSY6dTOR2WlTu6qh49g3GS6fjXtZypPq7
btuLU1/e3LqeKJ6THTqZyOy0qd3VUPHsG4yXUca9q+VKNXbNtxang1LtET0mOnUzkdlpU7uqoePY
Nxkun417WcqT6u27bm1PBqW6InpMdOpnI7LSp3dVQ8ewbjJdPxr2s5Un1djbc2p4NS3RE9Jjp1M5
HZaVO7qqHj2DcZLp+Ne1nKk+rsbbm1PBqW6InpMdOpnI7LSp3dVQ8ewbjJdPxr2s5Un1djbc2p4N
S3RE9Jjp1M5HZaVO7qqHj2DcZLp+Ne1nKk+rtm24tTwal2iJ6THTqZyOy0qd3VUPHsG4yXT8a9rO
VJ9XY23FqeDUu0RPSY6dTOR2WlTu6qh49g3GS6fjXtZypPq7btubU8Gpboiek3//2Q==

------=_NextPart_000_0000_01CB19D6.5CF336D0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: https://www.grantsolutions.gov/gs/images/egrants_paint.gif

R0lGODlh6QBTAPcAAAAAAP///////vv5/Pz7/vr5/vj3/fv7//7+//39/gAIiwAPje3u9wAWkenr
9wAZkgwlm+Tn9QAelQAblAAdk8vR7Obp9ufq9vb3+wAhnAAhmgAimgAhmQAfmAAglgAhlQMknAgo
nLK95M7V7c3U7ODk8+vu+e7w9wAnngAlnQAknAAlmgAjmQAklwAjlwQrpAQroQUqnwctpAcsowow
pA8zpD1atXGGyISW0I+g1JKi1Zen2bXA47zG58fP6snR6svT7MzT6efs/OXp9uPn9Ojr9QAongAq
nQApnQAnnAApmwEpoAErnwIsnwIqnwIrngMtoAMsnQQtoAQtngUtowUvoAYvogYtoAcwogcuoAgv
owgxoQkvoQkwnww1pQwzpAwyoA82ohA2pBM4pRQ7phg8pxg+pho/qB9DqSFGqyRIqyZKrSpNrixO
ry5RsC1QrjFSrzRWsjdZtDlZsjpZtDtbtD1dtDxbsj9euD5etkFftkJhtkVjuEdluU9tw01qvExo
ulBsvFRwvldyv1l0wVx3wF95wmN9w2d+w22Fx3KJyXWLynmOy32SzYCUz4aa0Iqd0pao2JSl1pmq
2J2t2qGw26Wz3ay64au43q+84a663r/M8cDN8LjE5L3H5cDK5sbP6MnR6Nnf8N3i8ebq9ert9ubp
8vH0/Pn6/fj5/AAsnwAsnQEunwEvnQIvnwo0ohtCqEBhtlh0vmeBxWqDxW2HxnGJyIKXzpKl1Zao
1ae23bPA4MPN59Xc7eLn9O3y/uTp9fT2+/Hz+J6w2s7c/M3W6uDm8+Po89DZ7OXr9/b5/+/y+OHk
6vP1+fr7/ff5/Pj7//X3+fv9/vb8/v3///j6+vr8+/3//fz9/PPz7v7++v///f7+/by3n/r36PLu
3u7t6ePdyMe3hs/Cl+/iue3n09agBLKEBMeWB+auCb6PCdGgEdysILiQHMmfJue5NdauObyZNN24
UMSmTtS6bN7Fe7mlbOXRltLJsOXj3ePVsNnX0v789/n39P7+/v///yH5BAEAAP8ALAAAAADpAFMA
AAj/AAMIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX
MGPKnEmzps2bOHPq3Mmzp0+D1wQKEICAIIJrQQP4G8gtANEA2ygKcEo1qdOpP7PCnLoNqYBrX4Nu
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
DUMUcUQSSzTxRBRTVHFF6QICADs=

------=_NextPart_000_0000_01CB19D6.5CF336D0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: https://www.grantsolutions.gov/gs/images/nav/header_stripe.gif

R0lGODlh7wALANUAAAAAAP///wQtmwwznhY8oh1Bph1BpShOtSlOtjdaujhauF54v2Z/wmtvenV8
jWtwe3V6hP/QK//RMP/UP//bWP700f7JJ/7hif7nnv7xyP7yzP7zz//00v+9AP++AP69AP6+AP/A
B/7AB/7DEv7EGf7GHv/VWP/WW//ZZ//ee/7ef//fgv/hi//ijP/klP/lmv/xyf/zz////wAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADIALAAAAADvAAsAAAb/wNKn
Qywaj8ikcslsOp/QqHRKrVZBHpB2y+16uSOLKEQum8/otHrNbrvf8Lh8Tq/XRfi8fs/nkzAXLYKD
hIWGh4iJiouMjY6PkJGSk5SVhS4vKiubnJ2en6ChoqOkpaanqKmqq6ytrp4sKSYntLW2t7i5uru8
vb6/wMHCw8TFxse3KBQREs3Oz9DR0tPU1dbX2Nna29zd3t/g0BMODQ/m5+jp6uvs7e7v8PHy8/T1
9vf4+ekQCggH/wADChxIsKDBgwgTKlzIsKHDhxAjShSYoMCAixgzatzIsaPHjyBDihxJsqTJkyhT
qtxogICAlzBjypxJs6bNmzhz6tzJs6fPI59AgwqdSYDBgqNIkypdyrSp06dQo0qdSrWq1atYs2pd
yiAIADs=

------=_NextPart_000_0000_01CB19D6.5CF336D0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.grantsolutions.gov/gs/styles/main.css

A:link {
	COLOR: #000080
}
A:visited {
	COLOR: #000000
}
A:active {
	COLOR: #cccccc
}
H4 {
	FONT-FAMILY: Arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold
}
TD {
	FONT-FAMILY: Arial; FONT-SIZE: 10pt
}
TH {
	BACKGROUND-COLOR: #cccccc; FONT-FAMILY: Arial; FONT-SIZE: 10pt; =
FONT-WEIGHT: bold
}
.align {
	FONT-FAMILY: Arial; FONT-SIZE: 10pt
}
.subheader {
	TEXT-ALIGN: center; BACKGROUND-COLOR: #94e3fe; FONT-STYLE: italic; =
FONT-FAMILY: Geneva, Verdana; FONT-SIZE: 8pt
}
.grayitout {
	BACKGROUND-COLOR: #c0c0c0
}
.yellowit {
	BACKGROUND-COLOR: #ffffbf
}
.blueit {
	BACKGROUND-COLOR: #94e3fe
}
.blueitbold {
	BACKGROUND-COLOR: #94e3fe; FONT-WEIGHT: bold
}
BODY {
	MARGIN-LEFT: 0px
}
.pageHeader {
	FONT-FAMILY: arial; FONT-SIZE: 12pt; FONT-WEIGHT: bold
}
.required {
	COLOR: red; VERTICAL-ALIGN: middle
}
.sectionHeader {
	FONT-SIZE: 12pt; FONT-WEIGHT: bold
}
.notesHeader {
	FONT-WEIGHT: bold; TEXT-DECORATION: underline
}
.notesLabel {
	FONT-WEIGHT: bold
}
.notes {
	FONT-SIZE: 8pt; FONT-WEIGHT: normal
}
.message {
	FONT-WEIGHT: bold
}
.disabled {
	BACKGROUND-COLOR: #cccccc
}
.numberField {
	TEXT-ALIGN: right
}
.login {
	FONT-FAMILY: Georgia, "Times New Roman", Times, serif; FONT-SIZE: 10px
}
.claimer {
	FONT-FAMILY: Arial, Helvetica, sans-serif; FONT-SIZE: 11px; =
VERTICAL-ALIGN: text-bottom
}
TABLE.listTable {
	BORDER-COLLAPSE: collapse; FONT-FAMILY: arial; EMPTY-CELLS: show; =
CLEAR: both; FONT-SIZE: 10pt; FONT-WEIGHT: normal
}
TABLE.listTable TH {
	BORDER-BOTTOM: #c1c1c1 1px solid; BORDER-LEFT: #c1c1c1 1px solid; =
PADDING-BOTTOM: 1px; BACKGROUND-COLOR: #cccccc; PADDING-LEFT: 5px; =
PADDING-RIGHT: 0px; BORDER-TOP: #c1c1c1 1px solid; FONT-WEIGHT: bold; =
BORDER-RIGHT: #c1c1c1 1px solid; PADDING-TOP: 1px
}
TABLE.listTable TR.subheader {
	BACKGROUND-COLOR: #eeeecc
}
TABLE.listTable TH.sectionHeader {
	TEXT-ALIGN: left
}
TABLE.listTable TH.centerAligned {
	TEXT-ALIGN: center
}
TABLE.listTable TH.leftAligned {
	TEXT-ALIGN: left
}
TABLE.listTable TD {
	BORDER-BOTTOM: #c1c1c1 1px solid; BORDER-LEFT: #c1c1c1 1px solid; =
PADDING-BOTTOM: 2px; PADDING-LEFT: 5px; PADDING-RIGHT: 0px; =
VERTICAL-ALIGN: top; BORDER-TOP: #c1c1c1 1px solid; BORDER-RIGHT: =
#c1c1c1 1px solid; PADDING-TOP: 2px
}
TABLE.listTable TD.rightAligned {
	TEXT-ALIGN: right
}
TABLE.listTable TD.space {
	BORDER-BOTTOM-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-TOP-STYLE: =
none; HEIGHT: 30px; BORDER-LEFT-STYLE: none
}
TABLE.listTable .summary {
	BACKGROUND-COLOR: #eeeecc
}
TABLE.listTable .total {
	BACKGROUND-COLOR: #e0e0e0
}
.listTable UL {
	PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-TOP: 0px
}
.listTable LI {
	PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-TOP: 0px
}
UL.hiddenItem {
	DISPLAY: none
}
UL.selectedItem {
	DISPLAY: inline
}
TABLE.textTable {
	BORDER-BOTTOM-STYLE: none; BORDER-RIGHT-STYLE: none; FONT-FAMILY: =
arial; BORDER-TOP-STYLE: none; EMPTY-CELLS: show; FONT-SIZE: 10pt; =
BORDER-LEFT-STYLE: none; FONT-WEIGHT: normal
}
.center {
	TEXT-ALIGN: center
}
.center TABLE {
	TEXT-ALIGN: left; MARGIN-LEFT: auto; MARGIN-RIGHT: auto
}
TABLE.textTable TH {
	BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 3px; BORDER-RIGHT-STYLE: =
none; BACKGROUND-COLOR: white; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; =
BORDER-TOP-STYLE: none; VERTICAL-ALIGN: top; BORDER-LEFT-STYLE: none; =
FONT-WEIGHT: bold; PADDING-TOP: 3px
}
TABLE.textTable TH.leftAligned {
	TEXT-ALIGN: left
}
TABLE.textTable TD {
	BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 3px; BORDER-RIGHT-STYLE: =
none; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP-STYLE: none; =
VERTICAL-ALIGN: top; BORDER-LEFT-STYLE: none; PADDING-TOP: 3px
}
TABLE.textTable TD.notes {
	BACKGROUND-COLOR: #f6f6f6
}
TABLE.errorTable {
	BORDER-COLLAPSE: collapse; FONT-FAMILY: arial; EMPTY-CELLS: show; =
CLEAR: both; FONT-SIZE: 10pt; FONT-WEIGHT: normal
}
TABLE.errorTable TH {
	BORDER-BOTTOM: #c1c1c1 1px solid; TEXT-ALIGN: center; BORDER-LEFT: =
#c1c1c1 1px solid; PADDING-BOTTOM: 1px; BACKGROUND-COLOR: #ffffbf; =
PADDING-LEFT: 5px; PADDING-RIGHT: 0px; COLOR: red; BORDER-TOP: #c1c1c1 =
1px solid; FONT-WEIGHT: bold; BORDER-RIGHT: #c1c1c1 1px solid; =
PADDING-TOP: 1px
}
TABLE.errorTable TD {
	BORDER-BOTTOM: #c1c1c1 1px solid; TEXT-ALIGN: left; BORDER-LEFT: =
#c1c1c1 1px solid; PADDING-BOTTOM: 2px; PADDING-LEFT: 5px; =
PADDING-RIGHT: 0px; VERTICAL-ALIGN: top; BORDER-TOP: #c1c1c1 1px solid; =
BORDER-RIGHT: #c1c1c1 1px solid; PADDING-TOP: 2px
}
.button {
	TEXT-ALIGN: center; FONT-WEIGHT: bold
}
.buttonGroup {
	TEXT-ALIGN: center; PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; =
PADDING-RIGHT: 5px; PADDING-TOP: 5px
}
.error {
	COLOR: red
}
.deled {
	COLOR: red; TEXT-DECORATION: line-through
}
.pagehelpcontent {
	BACKGROUND-COLOR: rgb(207,227,246); HEIGHT: 200px
}
.pagehelp {
=09
}
.pagehelpbutton {
	FLOAT: right
}
TABLE.accordion THEAD TR TH {
	BACKGROUND-COLOR: #aaaaaa
}
TABLE.accordion TBODY TR {
	BORDER-TOP-COLOR: black; BORDER-TOP-STYLE: solid
}
TABLE.accordion TBODY TR TD {
	BACKGROUND-COLOR: #dddddd
}
TABLE.accordion TD.accordionClose {
	BACKGROUND-IMAGE: url(../images/navigate_up.png); PADDING-LEFT: 24px; =
BACKGROUND-REPEAT: no-repeat; BACKGROUND-POSITION: left center
}
TABLE.accordion TD.accordionOpen {
	BACKGROUND-IMAGE: url(../images/navigate_down.png); PADDING-LEFT: 24px; =
BACKGROUND-REPEAT: no-repeat; BACKGROUND-POSITION: left center
}
TABLE.accordion TBODY TR.ajaxed TD {
	BACKGROUND-COLOR: white
}
TR.empty TD {
	BACKGROUND-COLOR: white
}
.pagingItem {
	PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.5em; MARGIN: 0px 2px; PADDING-LEFT: =
2px; PADDING-RIGHT: 2px; COLOR: #747474; FONT-SIZE: 0.9em; FONT-WEIGHT: =
normal; TEXT-DECORATION: none; PADDING-TOP: 0px
}
.pagingItemCurrent {
	PADDING-BOTTOM: 0px; MARGIN: 0px 2px; PADDING-LEFT: 2px; PADDING-RIGHT: =
2px; FONT-SIZE: 0.9em; FONT-WEIGHT: normal; PADDING-TOP: 0px
}
.pagingDots {
	FONT-WEIGHT: normal
}
.pagination SPAN A:hover {
	BACKGROUND-COLOR: #d2d2d2; COLOR: #fff; TEXT-DECORATION: none
}
.pagination IMG {
	VERTICAL-ALIGN: middle
}

------=_NextPart_000_0000_01CB19D6.5CF336D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.grantsolutions.gov/gs/javascript/utility.js

var changesMade =3D false;
var saveMsg =3D 'Your changes have been saved!';
var closeMsg =3D 'Save changes before closing?';
var onunloadMsg =3D 'Press the \"Save\", \"Submit\", or \"OK\" button on =
the current page.  ' +
						'If the current page disappears when you close this window, ' +
					 	'press \"Back\" on your browser.';
var unloadOk =3D false;

function noBoxClick(aform) {

	for (i =3D 0; i < aform.length; i++) {
		myOb =3D aform.elements[i];
		if (myOb.type =3D=3D 'checkbox' || myOb.type =3D=3D 'radio') {
			myOb.checked =3D myOb.defaultChecked;
		}
	}
}

function changesDetected() {
	changesMade =3D true;
}

function changesDetectedDemo() {
	changesMade =3D true;
}

function saveChangesDemo() {
	changesMade =3D false;
	// alert(saveMsg);
}

function saveChanges() {
	changesMade =3D false;
	// alert(saveMsg);
}

function checkChanges() {
	if (!unloadOk) {
		if (!changesMade) {}
			else {
				changesMade =3D false;
				saveChanges =3D confirm(closeMsg);
				if (saveChanges) {
					alert(onunloadMsg);
 				}
			}
	}
}

function checkChangesButton(aform, frametype, url) {
	if (!changesMade) {
		if (frametype =3D=3D 'window') {
			opener.focus();
			window.close();
		}
		else if (url) location.href=3Durl;
		else history.back();
	} else {
		changesMade =3D false;
		saveChanges =3D confirm(closeMsg);
		if (saveChanges) {
			aform.submit();
			// alert(saveMsg);
			if (frametype =3D=3D 'window') {
				opener.focus();
				window.close();
			}
		}
		else {
			if (frametype =3D=3D 'window') {
				opener.focus();
				window.close();
			}
			else if (url) location.href=3Durl;
			else history.back();
		}
	}
}

function checkChangesDemo() {
	if (!unloadOk) {
		if (!changesMade) {
		} else {
			changesMade =3D false;
			saveChanges =3D confirm(closeMsg);
			if (saveChanges) {
				alert(onunloadMsg);
			}
		}
	}
}


function submitFormWindow(aform) {
	unloadOk =3D true;
	aform.submit();
	// alert(saveMsg);
	opener.focus();
	window.close();
}

function submitFormMain(aform) {
	unloadOk =3D true;
	aform.submit();
	// alert(saveMsg);
}

/* focusfields is an array of the input objects
 * numbers is an array of the corresponding input values to calculate
 * names is an array of the titles of the fields to be
 * returned in the alert box.
 */

function calculate(focusfields, numbers, names) {

	var total =3D 0;

	// make sure all values in the numbers array are numbers

	for (i =3D 0; i < numbers.length; i++) {
		if (numbers[i] =3D=3D '') numbers[i] =3D 0;
		if (isNaN(numbers[i])) {
			alert('You must enter a number in the \'' +
				names[i] + '\' field.');
			   focusfields[i].focus();
			return total;
		}
		/*
		else if (numbers[i].indexOf(' ') !=3D -1) {
			alert('The \'' + names[i] + '\' field can not ' +
				'contain spaces.');
			   focusfields[i].focus();
			return total;
		}
		*/
	}

	// calculate values



	for (i =3D 0; i < numbers.length; i++) {
		total +=3D parseFloat(numbers[i]);
	}

	return total;
}

function validWholeNum(num) {

	if (num.toUpperCase().indexOf('E') !=3D -1 ||=20
		num.indexOf('.') !=3D -1 ||=20
		isNaN(num))
			return false;

	return true;
}

/* numbers =3D an array of the html form input objects
 * names =3D a corresponding array of labels to refer to the objects for =
alerts
 */

function getTotal(numbers, names) {

	var total =3D 0;

	// make sure all values in the numbers array are numbers

	for (i =3D 0; i < numbers.length; i++) {
		if (numbers[i].value =3D=3D '') numbers[i].value =3D 0;
		if (!validWholeNum(numbers[i].value)) {
			alert('You must enter a whole number in the \'' +
				names[i] + '\' field.  Please do not enter decimal points or dollar =
signs.');
			   numbers[i].focus();
			return total;
		}
	}

	// calculate values
=09
	for (i =3D 0; i < numbers.length; i++) {
		total +=3D parseInt(numbers[i].value, 10);
	}

	return total;
}

function blurBox(box) {
	// alert('This is a read only field!');
	box.blur();
	return false;
}

function checkForParent() {
	alert('right under checkForParent');
	 parent_specs =3D 'width=3D800,height=3D600' +
   	',menubar=3Dyes,scrollbars=3Dyes,location=3Dyes,directories=3Dyes,' =
+
		'status=3Dyes,toolbar=3Dyes,resizable=3Dyes';

	alert('right under if opener.closed || parent.closed');
	if (opener.closed) {
		alert('right under if opener.closed || parent.closed');
		var relogin =3D confirm('Your session has ended ' +
			'because you closed the main browser window.  Press OK to re-login to =
EGMS.');
		if (relogin) {
			alert('under if relogin');
			var mainWindow =3D =
window.open('http://opadeveloper.tyc.com:8001/demo','',parent_specs);
			mainWindow.focus();
			// window.close();
		}
	} else {
		alert('right under else');
		window.close();
	}
}

function greetUser(user) {
	var today;
	var now;
	var greeting;

	today =3D new Date();
	now =3D today.getHours();

	if (now < 12) {
		greeting =3D '<center><b><font face=3D\"Georgia\" color=3D\"navy\" =
size=3D\"2\">Good morning, ' + user + '!</font></b></center>';
	} else if (now >=3D 12 && now < 17) {
		greeting =3D '<center><b><font face=3D\"Georgia\" color=3D\"navy\" =
size=3D\"2\">Good afternoon, ' + user + '!</font></b></center>';
	} else {
		greeting =3D '<center><b><font face=3D\"Georgia\" color=3D\"navy\" =
size=3D\"2\">Good evening, ' + user + '!</font></b></center>';
	}
	return greeting;
}

function getTimeZone() {

	var now =3D new Date();
	var offset =3D now.getTimezoneOffset() / 60;

	if (offset =3D=3D 3)=20
		return "ATL";
	else if (offset =3D=3D 4)=20
		return "EST";
	else if (offset =3D=3D 5)=20
		return "CST";
	else if (offset =3D=3D 6)=20
		return "MTN";
	else if (offset =3D=3D 7)=20
		return "PAC";

	else=20
		return "";

}

function cancelChanges(aform,frametype,url) {

	if (aform.FIRST_NAME.value =3D=3D '') {
		alert("Please enter person's first name.");
		aform.FIRST_NAME.focus();
		return false;
	}

	if (aform.LAST_NAME.value =3D=3D '') {
		alert("Please enter person's last name.");
		aform.LAST_NAME.focus();
		return false;
	}

	if =
(aform.role_description.options[aform.role_description.selectedIndex].val=
ue =3D=3D 'NONE') {
		alert("Please enter a valid role.");
		aform.role_description.focus();
		return false;
	}

	if =
(aform.code_description.options[aform.code_description.selectedIndex].val=
ue =3D=3D 'NONE') {
		alert("Please enter a valid race.");
		aform.code_description.focus();
		return false;
	}

	var ok =3D =
checkDate(aform.DATE_OF_BIRTH,aform.DATE_OF_BIRTH.value,'can_be_blank');
	if (!ok) {
		return false;
	}

	if (!changesMade) {
		if (frametype =3D=3D 'window') {
			opener.focus();
			window.close();
			return true;
		} else if (url) {
			location.href=3Durl;
			return true;
		} else
			return false;

	} else {
		changesMade =3D false;
		saveChanges =3D confirm(closeMsg);
		if (saveChanges) {
			aform.submit();
			if (frametype =3D=3D 'window') {
				opener.focus();
				window.close();
				return true;
			}
			if (url) {
				return true;
			}
		} else{
			if (frametype =3D=3D 'window') {
				opener.focus();
				window.close();
				return true;
			} else if (url) {
				location.href=3Durl;
				return true;
			} else
				return false;
		}
	}
}


// trim function for string objects
String.prototype.trim =3D function() {
	// skip leading and trailing whitespace
	// and return everything in between
	var x=3Dthis;
	x=3Dx.replace(/^\s*(.*)/, "$1");
	x=3Dx.replace(/(.*?)\s*$/, "$1");
	return x;
}

//resort column function
function reSort(colName) {
	if (document.getElementById('orderBy').value =3D=3D colName) {
		if (document.getElementById('direction').value =3D=3D "0") {
			document.getElementById('direction').value =3D "1";
		} else {
			document.getElementById('direction').value =3D "0";
		}
	} else {
		document.getElementById('direction').value =3D "1";
	}
=09
	document.getElementById('orderBy').value =3D colName;
	document.forms[0].submit();
}

function doValidateCountry() {

	var country =3D document.getElementById("COUNTRY");
=09
	if(country.value !=3D '' && country.value !=3D 'USA') {=09
		if(navigator.appName.indexOf('Microsoft') > -1)
			setStyle(1);
		else
			setVisibility(1);
=09
	} else {
		if(navigator.appName.indexOf('Microsoft') > -1)
			setStyle(2);
		else
			setVisibility(2);
	}
=09
}

function setVisibility(flag) {
	var zip =3D document.getElementById("ZIP_ROW");
	var state =3D document.getElementById("STATE_ROW");
	var province =3D document.getElementById("PROVINCE_ROW");
	var postal =3D document.getElementById("POSTAL_ROW");
	var county =3D document.getElementById("COUNTY_ROW");
=09
	if(flag =3D=3D 1) {
		zip.style.visibility =3D "collapse";
		state.style.visibility =3D "collapse";
		county.style.visibility =3D "collapse";
		province.style.visibility =3D "visible";
		postal.style.visibility =3D "visible";	=09
	} else {
		zip.style.visibility =3D "visible";
		state.style.visibility =3D "visible";
		county.style.visibility =3D "visible";
		province.style.visibility =3D "collapse";
		postal.style.visibility =3D "collapse";	=09
	}
}

function setStyle(flag) {
	var zip =3D document.getElementById("ZIP_ROW");
	var state =3D document.getElementById("STATE_ROW");
	var province =3D document.getElementById("PROVINCE_ROW");
	var postal =3D document.getElementById("POSTAL_ROW");
	if(flag =3D=3D 1) {
		zip.style.display =3D "none";
		state.style.display =3D "none";
		province.style.display =3D "inline";
		postal.style.display =3D "inline";
	} else {
		zip.style.display =3D "inline";
		state.style.display =3D "inline";
		province.style.display =3D "none";
		postal.style.display =3D "none";
	}
}


function limitText(limitField, limitNum) {
    if (limitField.value.length > limitNum) {
        limitField.value =3D limitField.value.substring(0, limitNum);
    }
}

------=_NextPart_000_0000_01CB19D6.5CF336D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.grantsolutions.gov/gs/javascript/window.js

var popup;

function openWin(url, width, height, isresizable, showmenu, showtoolbar, =
showscrollbar, name) {
=09
	if (!width) width =3D 700;
	if (!height) height =3D 500;
=09
	fromleft =3D Math.floor((screen.width / 2) - (width / 2));
	fromtop =3D Math.floor((screen.height / 2) - (height / 2));
	specs =3D 'width=3D' + width + ',height=3D' + height + ',left=3D' +=20
			fromleft + ',top=3D' + fromtop;

	/*
	if (isresizable) specs +=3D ',resizable=3D' + isresizable;
	else specs +=3D ',resizable=3Dyes';
	*/

	specs +=3D ',resizable=3Dyes';

	if (showmenu) specs +=3D ',menubar=3D' + showmenu;
        if (showtoolbar) specs +=3D ',toolbar=3D' + showtoolbar;
        if (showscrollbar){
            specs +=3D ',scrollbars=3D' +showscrollbar;
        }
        else {
           specs +=3D ',scrollbars=3Dyes';=20
        }

	if  (!popup || popup.closed) {
		if (!name) {
			popup =3D window.open(url, '', specs);
		} else {
			popup =3D window.open(url, name, specs);
		}
	=09
		popup.focus();
	}
	else {
	=09
		popup.close();
		if (!name) {
			popup =3D window.open(url, '', specs);
		} else {
			popup =3D window.open(url, name, specs);
		}
		popup.focus();
	}
}

function loadOpener(aform, url) {
	aform.submit();
	opener.focus();
	window.close();
}

------=_NextPart_000_0000_01CB19D6.5CF336D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.grantsolutions.gov/gs/javascript/commons-validator.js


    /*$RCSfile: validateMask.js,v $ $Rev: 376673 $ $Date: 2006-02-10 =
13:42:31 +0000 (Fri, 10 Feb 2006) $ */
    /**
    * Check to see if fields are a valid using a regular expression.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */
    function validateMask(form) {
        var isValid =3D true;
        var focusField =3D null;
        var i =3D 0;
        var fields =3D new Array();
=20
        var oMasked =3D eval('new ' + jcv_retrieveFormName(form) +  =
'_mask()');     =20
        for (var x in oMasked) {
            if (!jcv_verifyArrayElement(x, oMasked[x])) {
                continue;
            }
            var field =3D form[oMasked[x][0]];
            if (!jcv_isFieldPresent(field)) {
              continue;
            }

            if ((field.type =3D=3D 'hidden' ||
                field.type =3D=3D 'text' ||
                 field.type =3D=3D 'textarea' ||
				 field.type =3D=3D 'file') &&
                 (field.value.length > 0)) {

                if (!jcv_matchPattern(field.value, =
oMasked[x][2]("mask"))) {
                    if (i =3D=3D 0) {
                        focusField =3D field;
                    }
                    fields[i++] =3D oMasked[x][1];
                    isValid =3D false;
                }
            }
        }

        if (fields.length > 0) {
           jcv_handleErrors(fields, focusField);
        }
        return isValid;
    }

    function jcv_matchPattern(value, mask) {
       return mask.exec(value);
    }

    /*$RCSfile: validateInteger.js,v $ $Rev: 376673 $ $Date: 2006-02-10 =
13:42:31 +0000 (Fri, 10 Feb 2006) $ */
    /**
    * Check to see if fields are a valid integer.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */
    function validateInteger(form) {
        var bValid =3D true;
        var focusField =3D null;
        var i =3D 0;
        var fields =3D new Array();
=20
        var oInteger =3D eval('new ' + jcv_retrieveFormName(form) +  =
'_IntegerValidations()');
        for (var x in oInteger) {
            if (!jcv_verifyArrayElement(x, oInteger[x])) {
                continue;
            }
            var field =3D form[oInteger[x][0]];
            if (!jcv_isFieldPresent(field)) {
              continue;
            }

            if ((field.type =3D=3D 'hidden' ||
                field.type =3D=3D 'text' ||
                field.type =3D=3D 'textarea' ||
                field.type =3D=3D 'select-one' ||
                field.type =3D=3D 'radio')) {

                var value =3D '';
                // get field's value
                if (field.type =3D=3D "select-one") {
                    var si =3D field.selectedIndex;
                    if (si >=3D 0) {
                        value =3D field.options[si].value;
                    }
                } else {
                    value =3D field.value;
                }

                if (value.length > 0) {

                    if (!jcv_isDecimalDigits(value)) {
                        bValid =3D false;
                        if (i =3D=3D 0) {
                            focusField =3D field;
                        }
                        fields[i++] =3D oInteger[x][1];

                    } else {
                        var iValue =3D parseInt(value, 10);
                        if (isNaN(iValue) || !(iValue >=3D -2147483648 =
&& iValue <=3D 2147483647)) {
                            if (i =3D=3D 0) {
                                focusField =3D field;
                            }
                            fields[i++] =3D oInteger[x][1];
                            bValid =3D false;
                       }
                   }
               }
            }
        }
        if (fields.length > 0) {
           jcv_handleErrors(fields, focusField);
        }
        return bValid;
    }

    /*$RCSfile: validateShort.js,v $ $Rev: 376673 $ $Date: 2006-02-10 =
13:42:31 +0000 (Fri, 10 Feb 2006) $ */
    /**
    *  Check to see if fields are a valid short.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */
    function validateShort(form) {
        var bValid =3D true;
        var focusField =3D null;
        var i =3D 0;
        var fields =3D new Array();
=20
        var oShort =3D eval('new ' + jcv_retrieveFormName(form) +  =
'_ShortValidations()');

        for (var x in oShort) {
            if (!jcv_verifyArrayElement(x, oShort[x])) {
                continue;
            }
            var field =3D form[oShort[x][0]];
            if (!jcv_isFieldPresent(field)) {
              continue;
            }

            if ((field.type =3D=3D 'hidden' ||
                field.type =3D=3D 'text' ||
                field.type =3D=3D 'textarea' ||
                field.type =3D=3D 'select-one' ||
                field.type =3D=3D 'radio')) {

                var value =3D '';
                // get field's value
                if (field.type =3D=3D "select-one") {
                    var si =3D field.selectedIndex;
                    if (si >=3D 0) {
                        value =3D field.options[si].value;
                    }
                } else {
                    value =3D field.value;
                }

                if (value.length > 0) {
                    if (!jcv_isDecimalDigits(value)) {
                        bValid =3D false;
                        if (i =3D=3D 0) {
                            focusField =3D field;
                        }
                        fields[i++] =3D oShort[x][1];

                    } else {

                        var iValue =3D parseInt(value, 10);
                        if (isNaN(iValue) || !(iValue >=3D -32768 && =
iValue <=3D 32767)) {
                            if (i =3D=3D 0) {
                                focusField =3D field;
                            }
                            fields[i++] =3D oShort[x][1];
                            bValid =3D false;
                        }
                   }
               }
            }
        }
        if (fields.length > 0) {
           jcv_handleErrors(fields, focusField);
        }
        return bValid;
    }

    /*$RCSfile: validateByte.js,v $ $Rev: 376673 $ $Date: 2006-02-10 =
13:42:31 +0000 (Fri, 10 Feb 2006) $ */
    /**
    * Check to see if fields are a valid byte.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */
    function validateByte(form) {
        var bValid =3D true;
        var focusField =3D null;
        var i =3D 0;
        var fields =3D new Array();
       =20
        var oByte =3D eval('new ' + jcv_retrieveFormName(form) + =
'_ByteValidations()');

        for (var x in oByte) {
            if (!jcv_verifyArrayElement(x, oByte[x])) {
                continue;
            }
            var field =3D form[oByte[x][0]];
            if (!jcv_isFieldPresent(field)) {
              continue;
            }

            if ((field.type =3D=3D 'hidden' ||
                field.type =3D=3D 'text' ||
                field.type =3D=3D 'textarea' ||
                field.type =3D=3D 'select-one' ||
                field.type =3D=3D 'radio')) {

                var value =3D '';
                // get field's value
                if (field.type =3D=3D "select-one") {
                    var si =3D field.selectedIndex;
                    if (si >=3D 0) {
                        value =3D field.options[si].value;
                    }
                } else {
                    value =3D field.value;
                }

                if (value.length > 0) {
                    if (!jcv_isDecimalDigits(value)) {
                        bValid =3D false;
                        if (i =3D=3D 0) {
                            focusField =3D field;
                        }
                        fields[i++] =3D oByte[x][1];

                    } else {

                        var iValue =3D parseInt(value, 10);
                        if (isNaN(iValue) || !(iValue >=3D -128 && =
iValue <=3D 127)) {
                            if (i =3D=3D 0) {
                                focusField =3D field;
                            }
                            fields[i++] =3D oByte[x][1];
                            bValid =3D false;
                        }
                    }
                }

            }
        }
        if (fields.length > 0) {
           jcv_handleErrors(fields, focusField);
        }
        return bValid;
    }

    /*$RCSfile: validateCreditCard.js,v $ $Rev: 376673 $ $Date: =
2006-02-10 13:42:31 +0000 (Fri, 10 Feb 2006) $ */
    /**
    * Check to see if fields are a valid creditcard number based on Luhn =
checksum.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */
    function validateCreditCard(form) {
        var bValid =3D true;
        var focusField =3D null;
        var i =3D 0;
        var fields =3D new Array();
=20
        var oCreditCard =3D eval('new ' + jcv_retrieveFormName(form) +  =
'_creditCard()');

        for (var x in oCreditCard) {
            if (!jcv_verifyArrayElement(x, oCreditCard[x])) {
                continue;
            }
            var field =3D form[oCreditCard[x][0]];
            if (!jcv_isFieldPresent(field)) {
              continue;
            }
            if ((field.type =3D=3D 'text' ||
                 field.type =3D=3D 'textarea') &&
                (field.value.length > 0)) {
                if (!jcv_luhnCheck(field.value)) {
                    if (i =3D=3D 0) {
                        focusField =3D field;
                    }
                    fields[i++] =3D oCreditCard[x][1];
                    bValid =3D false;
                }
            }
        }
        if (fields.length > 0) {
            jcv_handleErrors(fields, focusField);
        }
        return bValid;
    }

    /**
     * Checks whether a given credit card number has a valid Luhn =
checksum.
     * This allows you to spot most randomly made-up or garbled credit =
card numbers immediately.
     * Reference: http://www.speech.cs.cmu.edu/~sburke/pub/luhn_lib.html
     */
    function jcv_luhnCheck(cardNumber) {
        if (jcv_isLuhnNum(cardNumber)) {
            var no_digit =3D cardNumber.length;
            var oddoeven =3D no_digit & 1;
            var sum =3D 0;
            for (var count =3D 0; count < no_digit; count++) {
                var digit =3D parseInt(cardNumber.charAt(count));
                if (!((count & 1) ^ oddoeven)) {
                    digit *=3D 2;
                    if (digit > 9) digit -=3D 9;
                };
                sum +=3D digit;
            };
            if (sum =3D=3D 0) return false;
            if (sum % 10 =3D=3D 0) return true;
        };
        return false;
    }

    function jcv_isLuhnNum(argvalue) {
        argvalue =3D argvalue.toString();
        if (argvalue.length =3D=3D 0) {
            return false;
        }
        for (var n =3D 0; n < argvalue.length; n++) {
            if ((argvalue.substring(n, n+1) < "0") ||
                (argvalue.substring(n,n+1) > "9")) {
                return false;
            }
        }
        return true;
    }

    /*$RCSfile: validateFloat.js,v $ $Rev: 376673 $ $Date: 2006-02-10 =
13:42:31 +0000 (Fri, 10 Feb 2006) $ */
    /**
    * Check to see if fields are a valid float.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */
    function validateFloat(form) {
        var bValid =3D true;
        var focusField =3D null;
        var i =3D 0;
        var fields =3D new Array();
=20
        var oFloat =3D eval('new ' + jcv_retrieveFormName(form) +  =
'_FloatValidations()');
        for (var x in oFloat) {
            if (!jcv_verifyArrayElement(x, oFloat[x])) {
                continue;
            }
        	var field =3D form[oFloat[x][0]];
            if (!jcv_isFieldPresent(field)) {
              continue;
            }
        =09
            if ((field.type =3D=3D 'hidden' ||
                field.type =3D=3D 'text' ||
                field.type =3D=3D 'textarea' ||
                field.type =3D=3D 'select-one' ||
                field.type =3D=3D 'radio')) {
       =20
            	var value =3D '';
                // get field's value
                if (field.type =3D=3D "select-one") {
                    var si =3D field.selectedIndex;
                    if (si >=3D 0) {
                        value =3D field.options[si].value;
                    }
                } else {
                    value =3D field.value;
                }
       =20
                if (value.length > 0) {
                    // remove '.' before checking digits
                    var tempArray =3D value.split('.');
                    //Strip off leading '0'
                    var zeroIndex =3D 0;
                    var joinedString=3D tempArray.join('');
                    while (joinedString.charAt(zeroIndex) =3D=3D '0') {
                        zeroIndex++;
                    }
                    var noZeroString =3D =
joinedString.substring(zeroIndex,joinedString.length);

                    if (!jcv_isAllDigits(noZeroString) || =
tempArray.length > 2) {
                        bValid =3D false;
                        if (i =3D=3D 0) {
                            focusField =3D field;
                        }
                        fields[i++] =3D oFloat[x][1];

                    } else {
	                var iValue =3D parseFloat(value);
	                if (isNaN(iValue)) {
	                    if (i =3D=3D 0) {
	                        focusField =3D field;
	                    }
	                    fields[i++] =3D oFloat[x][1];
	                    bValid =3D false;
	                }
                    }
                }
            }
        }
        if (fields.length > 0) {
           jcv_handleErrors(fields, focusField);
        }
        return bValid;
    }

    /*$RCSfile: validateIntRange.js,v $ $Rev: 376673 $ $Date: 2006-02-10 =
13:42:31 +0000 (Fri, 10 Feb 2006) $ */
    /**
    * Check to see if fields is in a valid integer range.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */
    function validateIntRange(form) {
        var isValid =3D true;
        var focusField =3D null;
        var i =3D 0;
        var fields =3D new Array();
=20
        var oRange =3D eval('new ' + jcv_retrieveFormName(form) +  =
'_intRange()');       =20
        for (var x in oRange) {
            if (!jcv_verifyArrayElement(x, oRange[x])) {
                continue;
            }
            var field =3D form[oRange[x][0]];
            if (jcv_isFieldPresent(field)) {
                var value =3D '';
                if (field.type =3D=3D 'hidden' ||
                    field.type =3D=3D 'text' || field.type =3D=3D =
'textarea' ||
                    field.type =3D=3D 'radio' ) {
                    value =3D field.value;
                }
                if (field.type =3D=3D 'select-one') {
                    var si =3D field.selectedIndex;
                    if (si >=3D 0) {
                        value =3D field.options[si].value;
                    }
                }
                if (value.length > 0) {
                    var iMin =3D parseInt(oRange[x][2]("min"));
                    var iMax =3D parseInt(oRange[x][2]("max"));
                    var iValue =3D parseInt(value, 10);
                    if (!(iValue >=3D iMin && iValue <=3D iMax)) {
                        if (i =3D=3D 0) {
                            focusField =3D field;
                        }
                        fields[i++] =3D oRange[x][1];
                        isValid =3D false;
                    }
                }
            }
        }
        if (fields.length > 0) {
            jcv_handleErrors(fields, focusField);
        }
        return isValid;
    }
    /*$RCSfile: validateUtilities.js,v $ $Rev: 376673 $ $Date: =
2006-02-10 13:42:31 +0000 (Fri, 10 Feb 2006) $ */

  /**
  * This is a place holder for common utilities used across the =
javascript validation
  *
  **/

  /**
   * Retreive the name of the form
   * @param form The form validation is taking place on.
   */
  function jcv_retrieveFormName(form) {

      // Please refer to Bugs 31534, 35127, 35294, 37315 & 38159
      // for the history of the following code

      var formName;

      if (form.getAttributeNode) {
          if (form.getAttributeNode("id") && =
form.getAttributeNode("id").value) {
              formName =3D form.getAttributeNode("id").value;
          } else {
              formName =3D form.getAttributeNode("name").value;
          }
      } else if (form.getAttribute) {
          if (form.getAttribute("id")) {
              formName =3D form.getAttribute("id");
          } else {
              formName =3D form.attributes["name"];
          }
      } else {
          if (form.id) {
              formName =3D form.id;
          } else {
              formName =3D form.name;
          }
      }

      return formName;

  } =20

  /**
   * Handle error messages.
   * @param messages Array of error messages.
   * @param focusField Field to set focus on.
   */
  function jcv_handleErrors(messages, focusField) {
      if (focusField && focusField !=3D null) {
          var doFocus =3D true;
          if (focusField.disabled || focusField.type =3D=3D 'hidden') {
              doFocus =3D false;
          }
          if (doFocus &&=20
              focusField.style &&=20
              focusField.style.visibility &&
              focusField.style.visibility =3D=3D 'hidden') {
              doFocus =3D false;
          }
          if (doFocus) {
              focusField.focus();
          }
      }
      alert(messages.join('\n'));
  }

  /**
   * Checks that the array element is a valid
   * Commons Validator element and not one inserted by
   * other JavaScript libraries (for example the
   * prototype library inserts an "extends" into
   * all objects, including Arrays).
   * @param name The element name.
   * @param value The element value.
   */
  function jcv_verifyArrayElement(name, element) {
      if (element && element.length && element.length =3D=3D 3) {
          return true;
      } else {
          return false;
      }
  }

  /**
   * Checks whether the field is present on the form.
   * @param field The form field.
   */
  function jcv_isFieldPresent(field) {
      var fieldPresent =3D true;
      if (field =3D=3D null || field =3D=3D undefined) {
          fieldPresent =3D false;
      } else {
          if (field.disabled) {
              fieldPresent =3D false;
          }
      }
      return fieldPresent;
  }

  /**
   * Check a value only contains valid numeric digits
   * @param argvalue The value to check.
   */
  function jcv_isAllDigits(argvalue) {
      argvalue =3D argvalue.toString();
      var validChars =3D "0123456789";
      var startFrom =3D 0;
      if (argvalue.substring(0, 2) =3D=3D "0x") {
         validChars =3D "0123456789abcdefABCDEF";
         startFrom =3D 2;
      } else if (argvalue.charAt(0) =3D=3D "0") {
         validChars =3D "01234567";
         startFrom =3D 1;
      } else if (argvalue.charAt(0) =3D=3D "-") {
          startFrom =3D 1;
      }

      for (var n =3D startFrom; n < argvalue.length; n++) {
          if (validChars.indexOf(argvalue.substring(n, n+1)) =3D=3D -1) =
return false;
      }
      return true;
  }

  /**
   * Check a value only contains valid decimal digits
   * @param argvalue The value to check.
   */
  function jcv_isDecimalDigits(argvalue) {
      argvalue =3D argvalue.toString();
      var validChars =3D "0123456789";

      var startFrom =3D 0;
      if (argvalue.charAt(0) =3D=3D "-") {
          startFrom =3D 1;
      }

      for (var n =3D startFrom; n < argvalue.length; n++) {
          if (validChars.indexOf(argvalue.substring(n, n+1)) =3D=3D -1) =
return false;
      }
      return true;
  }

   /*$RCSfile: validateDate.js,v $ $Rev: 376673 $ $Date: 2006-02-10 =
13:42:31 +0000 (Fri, 10 Feb 2006) $ */
    /**
    * Check to see if fields are a valid date.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */
    function validateDate(form) {
       var bValid =3D true;
       var focusField =3D null;
       var i =3D 0;
       var fields =3D new Array();
=20
       var oDate =3D eval('new ' + jcv_retrieveFormName(form) +  =
'_DateValidations()');

       for (var x in oDate) {
            if (!jcv_verifyArrayElement(x, oDate[x])) {
                continue;
            }
           var field =3D form[oDate[x][0]];
           if (!jcv_isFieldPresent(field)) {
             continue;
           }
           var value =3D field.value;
           var isStrict =3D true;
           var datePattern =3D oDate[x][2]("datePatternStrict");
           // try loose pattern
           if (datePattern =3D=3D null) {
               datePattern =3D oDate[x][2]("datePattern");
               isStrict =3D false;
           }   =20
           if ((field.type =3D=3D 'hidden' ||
                field.type =3D=3D 'text' ||
                field.type =3D=3D 'textarea') &&
               (value.length > 0) && (datePattern.length > 0)) {
                 var MONTH =3D "MM";
                 var DAY =3D "dd";
                 var YEAR =3D "yyyy";
                 var orderMonth =3D datePattern.indexOf(MONTH);
                 var orderDay =3D datePattern.indexOf(DAY);
                 var orderYear =3D datePattern.indexOf(YEAR);
                 if ((orderDay < orderYear && orderDay > orderMonth)) {
                     var iDelim1 =3D orderMonth + MONTH.length;
                     var iDelim2 =3D orderDay + DAY.length;
                     var delim1 =3D datePattern.substring(iDelim1, =
iDelim1 + 1);
                     var delim2 =3D datePattern.substring(iDelim2, =
iDelim2 + 1);
                     if (iDelim1 =3D=3D orderDay && iDelim2 =3D=3D =
orderYear) {
                        dateRegexp =3D isStrict=20
                             ? new RegExp("^(\\d{2})(\\d{2})(\\d{4})$")=20
                             : new =
RegExp("^(\\d{1,2})(\\d{1,2})(\\d{4})$");
                     } else if (iDelim1 =3D=3D orderDay) {
                        dateRegexp =3D isStrict=20
                             ? new RegExp("^(\\d{2})(\\d{2})[" + delim2 =
+ "](\\d{4})$")
                             : new RegExp("^(\\d{1,2})(\\d{1,2})[" + =
delim2 + "](\\d{4})$");
                     } else if (iDelim2 =3D=3D orderYear) {
                        dateRegexp =3D isStrict
                             ? new RegExp("^(\\d{2})[" + delim1 + =
"](\\d{2})(\\d{4})$")
                             : new RegExp("^(\\d{1,2})[" + delim1 + =
"](\\d{1,2})(\\d{4})$");
                     } else {
                        dateRegexp =3D isStrict
                             ? new RegExp("^(\\d{2})[" + delim1 + =
"](\\d{2})[" + delim2 + "](\\d{4})$")
                             : new RegExp("^(\\d{1,2})[" + delim1 + =
"](\\d{1,2})[" + delim2 + "](\\d{4})$");
                     }
                     var matched =3D dateRegexp.exec(value);
                     if(matched !=3D null) {
                        if (!jcv_isValidDate(matched[2], matched[1], =
matched[3])) {
                           if (i =3D=3D 0) {
                               focusField =3D field;
                           }
                           fields[i++] =3D oDate[x][1];
                           bValid =3D  false;
                        }
                     } else {
                        if (i =3D=3D 0) {
                            focusField =3D field;
                        }
                        fields[i++] =3D oDate[x][1];
                        bValid =3D  false;
                     }
                 } else if ((orderMonth < orderYear && orderMonth > =
orderDay)) {
                     var iDelim1 =3D orderDay + DAY.length;
                     var iDelim2 =3D orderMonth + MONTH.length;
                     var delim1 =3D datePattern.substring(iDelim1, =
iDelim1 + 1);
                     var delim2 =3D datePattern.substring(iDelim2, =
iDelim2 + 1);
                     if (iDelim1 =3D=3D orderMonth && iDelim2 =3D=3D =
orderYear) {
                         dateRegexp =3D isStrict=20
                            ? new RegExp("^(\\d{2})(\\d{2})(\\d{4})$")
                            : new =
RegExp("^(\\d{1,2})(\\d{1,2})(\\d{4})$");
                     } else if (iDelim1 =3D=3D orderMonth) {
                         dateRegexp =3D isStrict
                            ? new RegExp("^(\\d{2})(\\d{2})[" + delim2 + =
"](\\d{4})$")
                            : new RegExp("^(\\d{1,2})(\\d{1,2})[" + =
delim2 + "](\\d{4})$");
                     } else if (iDelim2 =3D=3D orderYear) {
                         dateRegexp =3D isStrict
                            ? new RegExp("^(\\d{2})[" + delim1 + =
"](\\d{2})(\\d{4})$")
                            : new RegExp("^(\\d{1,2})[" + delim1 + =
"](\\d{1,2})(\\d{4})$");
                     } else {
                         dateRegexp =3D isStrict
                            ? new RegExp("^(\\d{2})[" + delim1 + =
"](\\d{2})[" + delim2 + "](\\d{4})$")
                            : new RegExp("^(\\d{1,2})[" + delim1 + =
"](\\d{1,2})[" + delim2 + "](\\d{4})$");
                     }
                     var matched =3D dateRegexp.exec(value);
                     if(matched !=3D null) {
                         if (!jcv_isValidDate(matched[1], matched[2], =
matched[3])) {
                             if (i =3D=3D 0) {
                                  focusField =3D field;
                             }
                             fields[i++] =3D oDate[x][1];
                             bValid =3D  false;
                          }
                     } else {
                         if (i =3D=3D 0) {
                             focusField =3D field;
                         }
                         fields[i++] =3D oDate[x][1];
                         bValid =3D  false;
                     }
                 } else if ((orderMonth > orderYear && orderMonth < =
orderDay)) {
                     var iDelim1 =3D orderYear + YEAR.length;
                     var iDelim2 =3D orderMonth + MONTH.length;
                     var delim1 =3D datePattern.substring(iDelim1, =
iDelim1 + 1);
                     var delim2 =3D datePattern.substring(iDelim2, =
iDelim2 + 1);
                     if (iDelim1 =3D=3D orderMonth && iDelim2 =3D=3D =
orderDay) {
                         dateRegexp =3D isStrict
                            ? new RegExp("^(\\d{4})(\\d{2})(\\d{2})$")
                            : new =
RegExp("^(\\d{4})(\\d{1,2})(\\d{1,2})$");
                     } else if (iDelim1 =3D=3D orderMonth) {
                         dateRegexp =3D isStrict
                            ? new RegExp("^(\\d{4})(\\d{2})[" + delim2 + =
"](\\d{2})$")
                            : new RegExp("^(\\d{4})(\\d{1,2})[" + delim2 =
+ "](\\d{1,2})$");
                     } else if (iDelim2 =3D=3D orderDay) {
                         dateRegexp =3D isStrict
                            ? new RegExp("^(\\d{4})[" + delim1 + =
"](\\d{2})(\\d{2})$")
                            : new RegExp("^(\\d{4})[" + delim1 + =
"](\\d{1,2})(\\d{1,2})$");
                     } else {
                         dateRegexp =3D isStrict
                            ? new RegExp("^(\\d{4})[" + delim1 + =
"](\\d{2})[" + delim2 + "](\\d{2})$")
                            : new RegExp("^(\\d{4})[" + delim1 + =
"](\\d{1,2})[" + delim2 + "](\\d{1,2})$");
                     }
                     var matched =3D dateRegexp.exec(value);
                     if(matched !=3D null) {
                         if (!jcv_isValidDate(matched[3], matched[2], =
matched[1])) {
                             if (i =3D=3D 0) {
                                 focusField =3D field;
                             }
                             fields[i++] =3D oDate[x][1];
                             bValid =3D  false;
                         }
                     } else {
                          if (i =3D=3D 0) {
                              focusField =3D field;
                          }
                          fields[i++] =3D oDate[x][1];
                          bValid =3D  false;
                     }
                 } else {
                     if (i =3D=3D 0) {
                         focusField =3D field;
                     }
                     fields[i++] =3D oDate[x][1];
                     bValid =3D  false;
                 }
          }
       }
       if (fields.length > 0) {
          jcv_handleErrors(fields, focusField);
       }
       return bValid;
    }
   =20
    function jcv_isValidDate(day, month, year) {
	    if (month < 1 || month > 12) {
            return false;
        }
        if (day < 1 || day > 31) {
            return false;
        }
        if ((month =3D=3D 4 || month =3D=3D 6 || month =3D=3D 9 || month =
=3D=3D 11) &&
            (day =3D=3D 31)) {
            return false;
        }
        if (month =3D=3D 2) {
            var leap =3D (year % 4 =3D=3D 0 &&
               (year % 100 !=3D 0 || year % 400 =3D=3D 0));
            if (day>29 || (day =3D=3D 29 && !leap)) {
                return false;
            }
        }
        return true;
    }

    /*$RCSfile: validateRequired.js,v $ $Rev: 376673 $ $Date: 2006-02-10 =
13:42:31 +0000 (Fri, 10 Feb 2006) $ */
    /**
    *  Check to see if fields must contain a value.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */

    function validateRequired(form) {
        var isValid =3D true;
        var focusField =3D null;
        var i =3D 0;
        var fields =3D new Array();

        var oRequired =3D eval('new ' + jcv_retrieveFormName(form) +  =
'_required()');

        for (var x in oRequired) {
            if (!jcv_verifyArrayElement(x, oRequired[x])) {
                continue;
            }
            var field =3D form[oRequired[x][0]];

            if (!jcv_isFieldPresent(field)) {
                fields[i++] =3D oRequired[x][1];
                isValid=3Dfalse;
            } else if ((field.type =3D=3D 'hidden' ||
                field.type =3D=3D 'text' ||
                field.type =3D=3D 'textarea' ||
                field.type =3D=3D 'file' ||
                field.type =3D=3D 'radio' ||
                field.type =3D=3D 'checkbox' ||
                field.type =3D=3D 'select-one' ||
                field.type =3D=3D 'password')) {

                var value =3D '';
                // get field's value
                if (field.type =3D=3D "select-one") {
                    var si =3D field.selectedIndex;
                    if (si >=3D 0) {
                        value =3D field.options[si].value;
                    }
                } else if (field.type =3D=3D 'radio' || field.type =
=3D=3D 'checkbox') {
                    if (field.checked) {
                        value =3D field.value;
                    }
                } else {
                    value =3D field.value;
                }

                if (trim(value).length =3D=3D 0) {

                    if ((i =3D=3D 0) && (field.type !=3D 'hidden')) {
                        focusField =3D field;
                    }
                    fields[i++] =3D oRequired[x][1];
                    isValid =3D false;
                }
            } else if (field.type =3D=3D "select-multiple") {=20
                var numOptions =3D field.options.length;
                lastSelected=3D-1;
                for(loop=3DnumOptions-1;loop>=3D0;loop--) {
                    if(field.options[loop].selected) {
                        lastSelected =3D loop;
                        value =3D field.options[loop].value;
                        break;
                    }
                }
                if(lastSelected < 0 || trim(value).length =3D=3D 0) {
                    if(i =3D=3D 0) {
                        focusField =3D field;
                    }
                    fields[i++] =3D oRequired[x][1];
                    isValid=3Dfalse;
                }
            } else if ((field.length > 0) && (field[0].type =3D=3D =
'radio' || field[0].type =3D=3D 'checkbox')) {
                isChecked=3D-1;
                for (loop=3D0;loop < field.length;loop++) {
                    if (field[loop].checked) {
                        isChecked=3Dloop;
                        break; // only one needs to be checked
                    }
                }
                if (isChecked < 0) {
                    if (i =3D=3D 0) {
                        focusField =3D field[0];
                    }
                    fields[i++] =3D oRequired[x][1];
                    isValid=3Dfalse;
                }
            }  =20
        }
        if (fields.length > 0) {
           jcv_handleErrors(fields, focusField);
        }
        return isValid;
    }
   =20
    // Trim whitespace from left and right sides of s.
    function trim(s) {
        return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
    }

   /*$RCSfile: validateFloatRange.js,v $ $Rev: 376673 $ $Date: =
2006-02-10 13:42:31 +0000 (Fri, 10 Feb 2006) $ */
    /**
    * Check to see if fields are in a valid float range.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */
    function validateFloatRange(form) {
        var isValid =3D true;
        var focusField =3D null;
        var i =3D 0;
        var fields =3D new Array();
       =20
        var oRange =3D eval('new ' + jcv_retrieveFormName(form) +  =
'_floatRange()');
        for (var x in oRange) {
            if (!jcv_verifyArrayElement(x, oRange[x])) {
                continue;
            }
            var field =3D form[oRange[x][0]];
            if (!jcv_isFieldPresent(field)) {
              continue;
            }
           =20
            if ((field.type =3D=3D 'hidden' ||
                field.type =3D=3D 'text' || field.type =3D=3D =
'textarea') &&
                (field.value.length > 0)) {
       =20
                var fMin =3D parseFloat(oRange[x][2]("min"));
                var fMax =3D parseFloat(oRange[x][2]("max"));
                var fValue =3D parseFloat(field.value);
                if (!(fValue >=3D fMin && fValue <=3D fMax)) {
                    if (i =3D=3D 0) {
                        focusField =3D field;
                    }
                    fields[i++] =3D oRange[x][1];
                    isValid =3D false;
                }
            }
        }
        if (fields.length > 0) {
            jcv_handleErrors(fields, focusField);
        }
        return isValid;
    }

    /*$RCSfile: validateMinLength.js,v $ $Rev: 376673 $ $Date: =
2006-02-10 13:42:31 +0000 (Fri, 10 Feb 2006) $ */
    /**
    * A field is considered valid if greater than the specified minimum.
    * Fields are not checked if they are disabled.
    * <p>
    * <strong>Caution:</strong> Using <code>validateMinLength</code> on =
a password field in a=20
    *  login page gives unnecessary information away to hackers. While =
it only slightly
    *  weakens security, we suggest using it only when modifying a =
password.</p>
    * @param form The form validation is taking place on.
    */
    function validateMinLength(form) {
        var isValid =3D true;
        var focusField =3D null;
        var i =3D 0;
        var fields =3D new Array();

        var oMinLength =3D eval('new ' + jcv_retrieveFormName(form) +  =
'_minlength()');

        for (var x in oMinLength) {
            if (!jcv_verifyArrayElement(x, oMinLength[x])) {
                continue;
            }
            var field =3D form[oMinLength[x][0]];
            if (!jcv_isFieldPresent(field)) {
              continue;
            }

            if ((field.type =3D=3D 'hidden' ||
                field.type =3D=3D 'text' ||
                field.type =3D=3D 'password' ||
                field.type =3D=3D 'textarea')) {

                /* Adjust length for carriage returns - see Bug 37962 */
                var lineEndLength =3D oMinLength[x][2]("lineEndLength");
                var adjustAmount =3D 0;
                if (lineEndLength) {
                    var rCount =3D 0;
                    var nCount =3D 0;
                    var crPos =3D 0;
                    while (crPos < field.value.length) {
                        var currChar =3D field.value.charAt(crPos);
                        if (currChar =3D=3D '\r') {
                            rCount++;
                        }
                        if (currChar =3D=3D '\n') {
                            nCount++;
                        }
                        crPos++;
                    }
                    var endLength =3D parseInt(lineEndLength);
                    adjustAmount =3D (nCount * endLength) - (rCount + =
nCount);
                }

                var iMin =3D parseInt(oMinLength[x][2]("minlength"));
                if ((trim(field.value).length > 0) && =
((field.value.length + adjustAmount) < iMin)) {
                    if (i =3D=3D 0) {
                        focusField =3D field;
                    }
                    fields[i++] =3D oMinLength[x][1];
                    isValid =3D false;
                }
            }
        }
        if (fields.length > 0) {
           jcv_handleErrors(fields, focusField);
        }
        return isValid;
    }

    /*$RCSfile: validateMaxLength.js,v $ $Rev: 376673 $ $Date: =
2006-02-10 13:42:31 +0000 (Fri, 10 Feb 2006) $ */
    /**
    * A field is considered valid if less than the specified maximum.
    * Fields are not checked if they are disabled.
    * <p>
    * <strong>Caution:</strong> Using <code>validateMaxLength</code> on =
a password field in a=20
    *  login page gives unnecessary information away to hackers. While =
it only slightly
    *  weakens security, we suggest using it only when modifying a =
password.</p>
    * @param form The form validation is taking place on.
    */
    function validateMaxLength(form) {
        var isValid =3D true;
        var focusField =3D null;
        var i =3D 0;
        var fields =3D new Array();
=20
        var oMaxLength =3D eval('new ' + jcv_retrieveFormName(form) +  =
'_maxlength()');       =20
        for (var x in oMaxLength) {
            if (!jcv_verifyArrayElement(x, oMaxLength[x])) {
                continue;
            }
            var field =3D form[oMaxLength[x][0]];
            if (!jcv_isFieldPresent(field)) {
              continue;
            }

            if ((field.type =3D=3D 'hidden' ||
                field.type =3D=3D 'text' ||
                field.type =3D=3D 'password' ||
                field.type =3D=3D 'textarea')) {

                /* Adjust length for carriage returns - see Bug 37962 */
                var lineEndLength =3D oMaxLength[x][2]("lineEndLength");
                var adjustAmount =3D 0;
                if (lineEndLength) {
                    var rCount =3D 0;
                    var nCount =3D 0;
                    var crPos =3D 0;
                    while (crPos < field.value.length) {
                        var currChar =3D field.value.charAt(crPos);
                        if (currChar =3D=3D '\r') {
                            rCount++;
                        }
                        if (currChar =3D=3D '\n') {
                            nCount++;
                        }
                        crPos++;
                    }
                    var endLength =3D parseInt(lineEndLength);
                    adjustAmount =3D (nCount * endLength) - (rCount + =
nCount);
                }

                var iMax =3D parseInt(oMaxLength[x][2]("maxlength"));
                if ((field.value.length + adjustAmount)  > iMax) {
                    if (i =3D=3D 0) {
                        focusField =3D field;
                    }
                    fields[i++] =3D oMaxLength[x][1];
                    isValid =3D false;
                }
            }
        }
        if (fields.length > 0) {
           jcv_handleErrors(fields, focusField);
        }
        return isValid;
    }

    /*$RCSfile: validateEmail.js,v $ $Rev: 376673 $ $Date: 2006-02-10 =
13:42:31 +0000 (Fri, 10 Feb 2006) $ */
    /**
    * Check to see if fields are a valid email address.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */
    function validateEmail(form) {
        var bValid =3D true;
        var focusField =3D null;
        var i =3D 0;
        var fields =3D new Array();

        var oEmail =3D eval('new ' + jcv_retrieveFormName(form) +  =
'_email()');

        for (var x in oEmail) {
            if (!jcv_verifyArrayElement(x, oEmail[x])) {
                continue;
            }
            var field =3D form[oEmail[x][0]];
            if (!jcv_isFieldPresent(field)) {
              continue;
            }
            if ((field.type =3D=3D 'hidden' ||=20
                 field.type =3D=3D 'text' ||
                 field.type =3D=3D 'textarea') &&
                (field.value.length > 0)) {
                if (!jcv_checkEmail(field.value)) {
                    if (i =3D=3D 0) {
                        focusField =3D field;
                    }
                    fields[i++] =3D oEmail[x][1];
                    bValid =3D false;
                }
            }
        }
        if (fields.length > 0) {
            jcv_handleErrors(fields, focusField);
        }
        return bValid;
    }

    /**
     * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
     * http://javascript.internet.com
     */
    function jcv_checkEmail(emailStr) {
        if (emailStr.length =3D=3D 0) {
            return true;
        }
        // TLD checking turned off by default
        var checkTLD=3D0;
        var =
knownDomsPat=3D/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|inf=
o|pro|museum)$/;
        var emailPat=3D/^(.+)@(.+)$/;
        var specialChars=3D"\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
        var validChars=3D"\[^\\s" + specialChars + "\]";
        var quotedUser=3D"(\"[^\"]*\")";
        var =
ipDomainPat=3D/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
        var atom=3DvalidChars + '+';
        var word=3D"(" + atom + "|" + quotedUser + ")";
        var userPat=3Dnew RegExp("^" + word + "(\\." + word + ")*$");
        var domainPat=3Dnew RegExp("^" + atom + "(\\." + atom +")*$");
        var matchArray=3DemailStr.match(emailPat);
        if (matchArray=3D=3Dnull) {
            return false;
        }
        var user=3DmatchArray[1];
        var domain=3DmatchArray[2];
        for (i=3D0; i<user.length; i++) {
            if (user.charCodeAt(i)>127) {
                return false;
            }
        }
        for (i=3D0; i<domain.length; i++) {
            if (domain.charCodeAt(i)>127) {
                return false;
            }
        }
        if (user.match(userPat)=3D=3Dnull) {
            return false;
        }
        var IPArray=3Ddomain.match(ipDomainPat);
        if (IPArray!=3Dnull) {
            for (var i=3D1;i<=3D4;i++) {
                if (IPArray[i]>255) {
                    return false;
                }
            }
            return true;
        }
        var atomPat=3Dnew RegExp("^" + atom + "$");
        var domArr=3Ddomain.split(".");
        var len=3DdomArr.length;
        for (i=3D0;i<len;i++) {
            if (domArr[i].search(atomPat)=3D=3D-1) {
                return false;
            }
        }
        if (checkTLD && domArr[domArr.length-1].length!=3D2 &&=20
            domArr[domArr.length-1].search(knownDomsPat)=3D=3D-1) {
            return false;
        }
        if (len<2) {
            return false;
        }
        return true;
    }

------=_NextPart_000_0000_01CB19D6.5CF336D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.grantsolutions.gov/gs/javascript/validation.js

function checkPassword(currpass, newpass, confpass) {
	if (currpass =3D=3D '' || newpass =3D=3D '' ||
			confpass =3D=3D '') {
                alert('You must fill in all the fields to change your =
password.  Please try again.');
                return false;
   }
   if (newpass.length < 6 )
   {
   	alert('Passwords must be at least 6 characters long.  Please try =
again.');
   	return false;
   }
   if (currpass.indexOf(' ') !=3D -1 || newpass.indexOf(' ') !=3D -1 ||
           confpass.indexOf(' ') !=3D -1) {
                alert('The password fields can NOT contain spaces. =
Please try again.');
                return false;
   }
   if (newpass !=3D confpass) {
                alert('The \"New Password\" field and the \"Confirm New =
Password\" field ' +
                        'do not match.  Please try again.');
                return false;
   }
   if (newpass =3D=3D currpass) {
		alert('You entered the same values for your new password and your =
current password.  Please try again.');
		return false;
	}
	return true;
}

function fileOkay(obj) {

	var badChars;
	var invalidMsg;
	var leadingMsg;
	var trailingMsg;
	var fileName;

	// invalidMsg =3D 'The file name you entered contains invalid =
characters.';
	invalidMsg =3D 'The filename entered contains one of the following =
invalid characters: \n';
	invalidMsg +=3D '"`", "~", "!", "@", "#", "$", "%", "^", "*", "(", ")", =
"{", "}", "[", \n';
    invalidMsg +=3D '"]", ";", "+", "=3D", "|", "\'", "\"", ",", ">", =
"<", "?" \n';
=09
    leadingMsg =3D 'The file name you entered contains leading white =
spaces.';
	trailingMsg =3D 'The file name you entered contains trailing white =
spaces.';
	badChars =3D '`~!@#$%^*(){}[];+=3D|\'\",><?'; // accept &
	fileName =3D obj.value;

	// check value for leading and trailing spaces
	if (fileName.length =3D=3D 0)
		return true;

	if (fileName.charAt(0) =3D=3D ' ') {
		alert(leadingMsg);
		return false;
	}

	if (fileName.charAt(fileName.length - 1) =3D=3D ' ') {
		alert(trailingMsg);
		return false;
	}

	// check file for invalid characters
	for (i =3D 0; i < badChars.length; i++) {
		if (fileName.indexOf(badChars.charAt(i)) !=3D -1) {
			alert(invalidMsg);
			return false;
		}
	}

	return true;
}

function checkFile(varname, varvalue, extension) {
	var msg =3D 'You are attempting to upload a file with the wrong =
extension.  ' +
		'The file in the active field needs to have the \'' + extension + '\' =
extension.';
	var dot_index =3D varvalue.lastIndexOf(extension);
	if (varvalue =3D=3D '') return true;
	if (dot_index =3D=3D -1) {
		alert(msg);
		varname.focus();
		return false;
	}
	else {
		if (varvalue.lastIndexOf('.') > dot_index) {
			alert(msg);
			varname.focus();
			return false;
		}
	}
	return true;
}

function checkDate(varname, varvalue, can_be_blank) {

	var msg =3D checkDateReturnMsg(varvalue, can_be_blank);

	if (msg !=3D null) {
		alert(msg);
		varname.focus();
		return false;
	}
	else {
   	return true;
	}
}

function checkDateReturnMsg(varvalue, can_be_blank) {
  =20
	var r_formatMsg =3D 'Please use MM/DD/YYYY format for date fields.';
	var r_monthMsg =3D 'The month you entered does not exist.  Please =
correct it.';
	var r_dayMsg =3D 'The day you entered does not exist.  Please correct =
it.';
	var r_yearMsg =3D 'The year you entered does not exist.  Please correct =
it.';
	var r_numMsg =3D 'The amount you entered is not a number.  Please try =
again.';
	var r_noLeap1582 =3D 'February does not have 29 days in the year you =
entered.';
	var r_notLeapYear =3D 'February does not have 29 days in the year you =
entered.';

   if (can_be_blank) {
		if (varvalue =3D=3D '') {
			return null;
		}
	}

	var j;
	var month;
	var day;
	var year;

	// check whether length < 8 or > 10, if so return false;

	if ((varvalue.length < 8) || (varvalue.length > 10))  {
		return r_formatMsg;
	}

	// check whether it's a date when length =3D 8
	if (varvalue.length =3D=3D 8) {

	 if ((varvalue.charAt(1)!=3D '/') || (varvalue.charAt(3) !=3D '/')) {
		return r_formatMsg;
	 }

	  for (j=3D0; j<8; j++) {
	   	if ( j!=3D1 && j!=3D3) {
	         if (isNaN(varvalue.charAt(j))) {
					return r_formatMsg;
				}
	  		}
	   }

	   month =3D parseInt(varvalue.substring(0,1), 10);
	   day =3D parseInt(varvalue.substring(2,3), 10);
		year =3D parseInt(varvalue.substring(4), 10);
	}

	// check whether it's a date when length =3D 9
	if (varvalue.length =3D=3D 9) {

	   if (varvalue.charAt(4)!=3D '/') {
			return r_formatMsg;
		}

	   if ((varvalue.charAt(1)=3D=3D'/') && !isNaN(varvalue.charAt(2))) {
			month =3D parseInt(varvalue.substring(0,1), 10);
			if (varvalue.charAt(2) =3D=3D '0') {
				day =3D parseInt(varvalue.substring(3,4), 10);
				year =3D parseInt(varvalue.substring(5), 10);
			}
			else  {
				day =3D parseInt(varvalue.substring(2,4), 10);
				year =3D parseInt(varvalue.substring(5), 10);
			}
	   }

		else if ((varvalue.charAt(2)=3D=3D'/') && !isNaN(varvalue.charAt(1))) =
{
			if (varvalue.charAt(0) =3D=3D '0')
				month =3D parseInt(varvalue.substring(1,2), 10);
			else
				month =3D parseInt(varvalue.substring(0,2), 10);
			day =3D parseInt(varvalue.substring(3,4), 10);
			year =3D parseInt(varvalue.substring(5), 10);
	   }

		else {
			return r_formatMsg;
		}

      for (j=3D0; j<9; j++) {
	      if ( j!=3D4 && j!=3D1 && j!=3D2) {
	         if (isNaN(varvalue.charAt(j))) {
		      	return r_formatMsg;
				}
	      }
	   }

	}

	// check whether it's a date when length =3D 10
	if (varvalue.length =3D=3D10) {

	   if ((varvalue.charAt(2)!=3D '/') || (varvalue.charAt(5) !=3D '/')) {
			return r_formatMsg;
		}

	   for (j=3D0; j<10; j++) {
	   	if ( j!=3D2 && j!=3D5) {
	      	if (isNaN(varvalue.charAt(j))) {
					return r_formatMsg;
				}
	       }
	   }
		if (varvalue.charAt(3) =3D=3D '0')
			day =3D parseInt(varvalue.substring(4,5), 10);
		else
			day =3D parseInt(varvalue.substring(3,5), 10);
		if (varvalue.charAt(0) =3D=3D '0')
			month =3D parseInt(varvalue.substring(1,2), 10);
		else
	   	month =3D parseInt(varvalue.substring(0,2), 10);
	   year =3D parseInt(varvalue.substring(6), 10);
	}

	if (year < 1) {
	    return r_yearMsg;
	}

	if (month > 12 || month < 1) {
	    return r_monthMsg;
	}
	if (day > 31 || day < 1) {
	    return r_dayMsg;
	}

	if ((day =3D=3D 31) && (month=3D=3D4 || month=3D=3D6 || month=3D=3D9 || =
month =3D=3D 11)) {
	    return r_dayMsg;
	}

	if ((day > 29) && (month =3D=3D 2)) {
		return r_dayMsg;
	}

	if ((day =3D=3D 29) && (month =3D=3D 2)) {
		if (year < 1582) {
			return r_noLeap1582;
		}
		if ( !(  ( (year % 4 =3D=3D 0) && (year % 100 !=3D 0) ) || (year % 400 =
=3D=3D 0) ))
		{
			return r_notLeapYear;
		}
	}

	return null;

}

function incrementDays(dateString, num, can_be_blank) {

	var msg;

	var origMonth;
	var origDay;
	var origYear;

	var incrMonth;
	var incrDay;
	var incrYear;

	var maxMonths;
	var maxDays;

	if (num > 28) return null;

	msg =3D checkDateReturnMsg(dateString, can_be_blank);
	if (msg !=3D null) return null;

	origMonth =3D getDateSegment(0, dateString);
	origDay =3D getDateSegment(1, dateString);
	origYear =3D getDateSegment(2, dateString);
	maxMonths =3D 12;
	maxDays =3D getMaxDays(origMonth, origYear);

	incrMonth =3D origMonth;
	incrDay =3D origDay + num;
	incrYear =3D origYear;

	if (incrDay <=3D 0) {
		incrMonth =3D origMonth -1;
		if (incrMonth < 1) {
			incrMonth =3D maxMonths + incrMonth;
			incrYear =3D origYear - 1;
		}
		maxDays =3D getMaxDays(incrMonth, incrYear);
		incrDay =3D maxDays + incrDay;
	}
	else if ((incrDay - maxDays) > 0) {
   	incrDay =3D incrDay - maxDays;
		incrMonth =3D origMonth + 1;
	}

        if (incrMonth > 12) {
		incrMonth =3D 1;
		incrYear =3D incrYear + 1;
	}

        if (incrMonth < 10 || incrDay < 10) {
            if (incrMonth < 10 && incrDay < 10) {
                return ('0' + incrMonth + '/' + '0' + incrDay + '/' + =
incrYear);
            } else if (incrMonth < 10) {
                return ('0' + incrMonth + '/' + incrDay + '/' + =
incrYear);
            } else if (incrDay < 10) {
                return (incrMonth + '/' + '0' + incrDay + '/' + =
incrYear);
            }
        }
	return (incrMonth + '/' + incrDay + '/' + incrYear);


}

function increment30Days(varname, dateString, can_be_blank) {

	var msg;

	var origMonth;
	var origDay;
	var origYear;

	var incrMonth;
	var incrDay;
	var incrYear;

	var maxMonths;
	var maxDays;

	checkDate(varname, dateString, can_be_blank);

	origMonth =3D getDateSegment(0, dateString);
	origDay =3D getDateSegment(1, dateString);
	origYear =3D getDateSegment(2, dateString);
	maxMonths =3D 12;
	maxDays =3D getMaxDays(origMonth, origYear);

	incrMonth =3D origMonth;
	incrDay =3D origDay + 30;
	incrYear =3D origYear;

	if (incrDay <=3D 0) {
		incrMonth =3D origMonth -1;
		if (incrMonth < 1) {
			incrMonth =3D maxMonths + incrMonth;
			incrYear =3D origYear - 1;
		}
		maxDays =3D getMaxDays(incrMonth, incrYear);
		incrDay =3D maxDays + incrDay;
	}
	else if ((incrDay - maxDays) > 0) {
   	incrDay =3D incrDay - maxDays;
		incrMonth =3D origMonth + 1;
	}

        if (incrMonth > 12) {
		incrMonth =3D 1;
		incrYear =3D incrYear + 1;
	}

        if (incrMonth < 10 || incrDay < 10) {
            if (incrMonth < 10 && incrDay < 10) {
                return ('0' + incrMonth + '/' + '0' + incrDay + '/' + =
incrYear);
            } else if (incrMonth < 10) {
                return ('0' + incrMonth + '/' + incrDay + '/' + =
incrYear);
            } else if (incrDay < 10) {
                return (incrMonth + '/' + '0' + incrDay + '/' + =
incrYear);
            }
        }
	return (incrMonth + '/' + incrDay + '/' + incrYear);


}

function incrementMonths(dateString, num, can_be_blank) {

	var msg;

	var origMonth;
	var origDay;
	var origYear;

	var incrMonth;
	var incrDay;
	var incrYear;

	var maxMonths;
	var maxDays;

	if (num > 12) return null;

	msg =3D checkDateReturnMsg(dateString, can_be_blank);
	if (msg !=3D null) return null;

	origMonth =3D getDateSegment(0, dateString);
	origDay =3D getDateSegment(1, dateString);
	origYear =3D getDateSegment(2, dateString);
	maxMonths =3D 12;
	maxDays =3D getMaxDays(origMonth, origYear);

	incrMonth =3D origMonth + num;
	incrDay =3D origDay;
	incrYear =3D origYear;

	if (incrMonth <=3D 0) {
		incrMonth =3D maxMonths + incrMonth;
		incrYear =3D origYear - 1;
	}
	else if ((incrMonth - maxMonths) > 0) {
   	incrMonth =3D incrMonth - maxMonths;
		incrYear =3D incrYear + 1;
	}

	maxDays =3D getMaxDays(incrMonth, incrYear);

	while (incrDay > maxDays) {
		incrDay =3D incrDay - 1;
	}

        if (incrMonth < 10 || incrDay < 10) {
            if (incrMonth < 10 && incrDay < 10) {
                return ('0' + incrMonth + '/' + '0' + incrDay + '/' + =
incrYear);
            } else if (incrMonth < 10) {
                return ('0' + incrMonth + '/' + incrDay + '/' + =
incrYear);
            } else if (incrDay < 10) {
                return (incrMonth + '/' + '0' + incrDay + '/' + =
incrYear);
            }
        }

	return (incrMonth + '/' + incrDay + '/' + incrYear);

}

function incrementYears(dateString, num, can_be_blank) {

	var msg;

	var origMonth;
	var origDay;
	var origYear;

	var incrMonth;
	var incrDay;
	var incrYear;

	msg =3D checkDateReturnMsg(dateString, can_be_blank);
	if (msg !=3D null) return null;

	origMonth =3D getDateSegment(0, dateString);
	origDay =3D getDateSegment(1, dateString);
	origYear =3D getDateSegment(2, dateString);

	incrMonth =3D origMonth;
	incrDay =3D origDay;
	incrYear =3D origYear + num;

        if (incrMonth < 10 || incrDay < 10) {
            if (incrMonth < 10 && incrDay < 10) {
                return ('0' + incrMonth + '/' + '0' + incrDay + '/' + =
incrYear);
            } else if (incrMonth < 10) {
                return ('0' + incrMonth + '/' + incrDay + '/' + =
incrYear);
            } else if (incrDay < 10) {
                return (incrMonth + '/' + '0' + incrDay + '/' + =
incrYear);
            }
        }

	return (incrMonth + '/' + incrDay + '/' + incrYear);

}


function getDateSegment(index, dateString) {

	var segment;
	var dateParts;

	dateParts =3D dateString.split('/');
	segment =3D removeLeadingZero(dateParts[index]);
	segment =3D parseInt(segment, 10);

	return segment;
}

function removeLeadingZero(segment) {

	if (segment.length =3D=3D 2 && segment.charAt(0) =3D=3D '0') {
		return segment.substring(1);
	}
	else {
		return segment;
	}

}

function getMaxDays(month, year) {

	var leapYear;
	var maxDays;

	leapYear =3D isLeapYear(year);

	if (month =3D=3D 1 || month =3D=3D 3 || month =3D=3D 5 ||
		month =3D=3D 7 || month =3D=3D 8 || month =3D=3D 10 || month =3D=3D =
12) {

		maxDays =3D 31;
	}

	else if (month =3D=3D 2) {
		if (leapYear)
			maxDays =3D 29;
		else
			maxDays =3D 28;
	}

	else
		maxDays =3D 30;

	return maxDays;

}

function isLeapYear(year) {

	if (year < 1582) {
		return false;
	}
	else if (!(((year % 4 =3D=3D 0) && (year % 100 !=3D 0) ) || (year % 400 =
=3D=3D 0) )) {
		return false;
	}
	else {
		return true;
	}
}

function checkBirthDate(varname, varvalue, can_be_blank) {

	var r_formatMsg =3D 'Please use MM/DD/YYYY format for date fields.';
	var r_monthMsg =3D 'The month you entered does not exist.  Please =
correct it.';
	var r_dayMsg =3D 'The day you entered does not exist.  Please correct =
it.';
	var r_yearMsg =3D 'The year you entered does not exist.  Please correct =
it.';
	var r_numMsg =3D 'The amount you entered is not a number.  Please try =
again.';
	var r_birthMsg =3D 'The date you entered can not be a future date.  =
Please correct it.';

   if (can_be_blank) {
		if (varvalue =3D=3D '') {
			return true;
		}
	}

	var j;
	var month;
	var day;
	var year;

	// check whether length < 8 or > 10, if so return false;

	if ((varvalue.length < 8) || (varvalue.length > 10))  {
		varname.focus();
		alert(r_formatMsg);
		return false;
	}

	// check whether it's a date when length =3D 8
	if (varvalue.length =3D=3D 8) {

	 if ((varvalue.charAt(1)!=3D '/') || (varvalue.charAt(3) !=3D '/')) {
		alert(r_formatMsg);
		varname.focus();
		return false;
	 }

	  for (j=3D0; j<8; j++) {
	   	if ( j!=3D1 && j!=3D3) {
	         if (isNaN(varvalue.charAt(j))) {
					alert(r_formatMsg);
					varname.focus();
					return false;
	  	   	}
	  		}
	   }

	   month =3D parseInt(varvalue.substring(0,1), 10);
	   day =3D parseInt(varvalue.substring(2,3), 10);
		year =3D parseInt(varvalue.substring(4), 10);
	}

	// check whether it's a date when length =3D 9
	if (varvalue.length =3D=3D 9) {

	   if (varvalue.charAt(4)!=3D '/') {
			alert(r_formatMsg);
			varname.focus();
			return false;
	   }

	   if ((varvalue.charAt(1)=3D=3D'/') && !isNaN(varvalue.charAt(2))) {
			month =3D parseInt(varvalue.substring(0,1), 10);
			if (varvalue.charAt(2) =3D=3D '0') {
				day =3D parseInt(varvalue.substring(3,4), 10);
				year =3D parseInt(varvalue.substring(5), 10);
			}
			else  {
				day =3D parseInt(varvalue.substring(2,4), 10);
				year =3D parseInt(varvalue.substring(5), 10);
			}
	   }

		else if ((varvalue.charAt(2)=3D=3D'/') && !isNaN(varvalue.charAt(1))) =
{
			if (varvalue.charAt(0) =3D=3D '0')
				month =3D parseInt(varvalue.substring(1,2), 10);
			else
				month =3D parseInt(varvalue.substring(0,2), 10);
			day =3D parseInt(varvalue.substring(3,4), 10);
			year =3D parseInt(varvalue.substring(5), 10);
	   }

		else {
			alert(r_formatMsg);
			varname.focus();
			return false;
	   }

      for (j=3D0; j<9; j++) {
	      if ( j!=3D4 && j!=3D1 && j!=3D2) {
	         if (isNaN(varvalue.charAt(j))) {
		      	alert(r_formatMsg);
					varname.focus();
		      	return false;
	         }
	      }
	   }

	}

	// check whether it's a date when length =3D 10
	if (varvalue.length =3D=3D10) {

	   if ((varvalue.charAt(2)!=3D '/') || (varvalue.charAt(5) !=3D '/')) {
			alert(r_formatMsg);
			varname.focus();
	   	return false;
      }

	   for (j=3D0; j<10; j++) {
	   	if ( j!=3D2 && j!=3D5) {
	      	if (isNaN(varvalue.charAt(j))) {
					alert(r_formatMsg);
					varname.focus();
					return false;
				}
	       }
	   }
		if (varvalue.charAt(3) =3D=3D '0')
			day =3D parseInt(varvalue.substring(4,5), 10);
		else
			day =3D parseInt(varvalue.substring(3,5), 10);
		if (varvalue.charAt(0) =3D=3D '0')
			month =3D parseInt(varvalue.substring(1,2), 10);
		else
	   	month =3D parseInt(varvalue.substring(0,2), 10);
	   year =3D parseInt(varvalue.substring(6), 10);
	}

	if (year < 1) {
	    alert(r_yearMsg);
		 varname.focus();
	    return false;
   }

	if (month > 12 || month < 1) {
	    alert(r_monthMsg);
		 varname.focus();
	    return false;
   }
	if (day > 31 || day < 1) {
	    alert(r_dayMsg);
		 varname.focus();
	    return false;
   }

	if ((day =3D=3D 31) && (month=3D=3D4 || month=3D=3D6 || month=3D=3D9 || =
month =3D=3D 11)) {
	    alert(r_dayMsg);
		 varname.focus();
	    return false;
   }

	if ((day > 29) && (month =3D=3D 2)) {
		alert(r_dayMsg);
		varname.focus();
		return false;
	}

	var today =3D new Date();
	var bday =3D new Date(year, month - 1, day);

	if (bday > today) {
	  alert(r_birthMsg);
	  varname.focus();
	  return false;
	}

	return true;

}

function checkDateEqual(varname, varvalue, can_be_blank, varname2, =
varvalue2, can_be_blank2, customMsg) {

	var r_formatMsg =3D 'Please use MM/DD/YYYY format for date fields.';
	var r_monthMsg =3D 'The month you entered does not exist.  Please =
correct it.';
	var r_dayMsg =3D 'The day you entered does not exist.  Please correct =
it.';
	var r_yearMsg =3D 'The year you entered does not exist.  Please correct =
it.';
	var r_numMsg =3D 'The amount you entered is not a number.  Please try =
again.';

       if (can_be_blank) {
		if (varvalue =3D=3D '') {
			return true;
		}
	}

        if (can_be_blank2) {
		if (varvalue2 =3D=3D '') {
			return true;
		}
	}

	var j;
	var month;
	var day;
	var year;

        var j2;
	var month2;
	var day2;
	var year2;

	// check whether length < 8 or > 10, if so return false;

	if ((varvalue.length < 8) || (varvalue.length > 10))  {
		varname.focus();
		alert(r_formatMsg);
		return false;
	}

        if ((varvalue2.length < 8) || (varvalue2.length > 10))  {
		varname2.focus();
		alert(r_formatMsg);
		return false;
	}

	// check whether First Date is a date when length =3D 8
	if (varvalue.length =3D=3D 8) {

	 if ((varvalue.charAt(1)!=3D '/') || (varvalue.charAt(3) !=3D '/')) {
		alert(r_formatMsg);
		varname.focus();
		return false;
	 }

	  for (j=3D0; j<8; j++) {
	   	if ( j!=3D1 && j!=3D3) {
	         if (isNaN(varvalue.charAt(j))) {
					alert(r_formatMsg);
					varname.focus();
					return false;
                 }
                }
	   }

	   month =3D parseInt(varvalue.substring(0,1), 10);
	   day =3D parseInt(varvalue.substring(2,3), 10);
           year =3D parseInt(varvalue.substring(4), 10);
	}

        // check whether Second Date is a date when length =3D 8
        if (varvalue2.length =3D=3D 8) {

	 if ((varvalue2.charAt(1)!=3D '/') || (varvalue2.charAt(3) !=3D '/')) {
		alert(r_formatMsg);
		varname2.focus();
		return false;
	 }

	  for (j2=3D0; j2<8; j2++) {
	   	if ( j2!=3D1 && j2!=3D3) {
	         if (isNaN(varvalue2.charAt(j))) {
					alert(r_formatMsg);
					varname2.focus();
					return false;
                 }
                }
	   }

	   month2 =3D parseInt(varvalue2.substring(0,1), 10);
	   day2 =3D parseInt(varvalue2.substring(2,3), 10);
           year2 =3D parseInt(varvalue2.substring(4), 10);
	}

	// check whether First Date is a date when length =3D 9
	if (varvalue.length =3D=3D 9) {

	   if (varvalue.charAt(4)!=3D '/') {
			alert(r_formatMsg);
			varname.focus();
			return false;
	   }

	   if ((varvalue.charAt(1)=3D=3D'/') && !isNaN(varvalue.charAt(2))) {
              month =3D parseInt(varvalue.substring(0,1), 10);
              if (varvalue.charAt(2) =3D=3D '0') {
                      day =3D parseInt(varvalue.substring(3,4), 10);
                      year =3D parseInt(varvalue.substring(5), 10);
              } else  {
                      day =3D parseInt(varvalue.substring(2,4), 10);
                      year =3D parseInt(varvalue.substring(5), 10);
              }
	   } else if ((varvalue.charAt(2)=3D=3D'/') && =
!isNaN(varvalue.charAt(1))) {
              if (varvalue.charAt(0) =3D=3D '0')
                      month =3D parseInt(varvalue.substring(1,2), 10);
              else
                      month =3D parseInt(varvalue.substring(0,2), 10);
              day =3D parseInt(varvalue.substring(3,4), 10);
              year =3D parseInt(varvalue.substring(5), 10);
	   } else {
              alert(r_formatMsg);
              varname.focus();
              return false;
	   }

          for (j=3D0; j<9; j++) {
	      if ( j!=3D4 && j!=3D1 && j!=3D2) {
	         if (isNaN(varvalue.charAt(j))) {
		      	alert(r_formatMsg);
                        varname.focus();
		      	return false;
	         }
	      }
	   }
	}

        // check whether Second Date is a date when length =3D 9
	if (varvalue2.length =3D=3D 9) {

	   if (varvalue2.charAt(4)!=3D '/') {
			alert(r_formatMsg);
			varname2.focus();
			return false;
	   }

	   if ((varvalue2.charAt(1)=3D=3D'/') && !isNaN(varvalue2.charAt(2))) {
              month2 =3D parseInt(varvalue2.substring(0,1), 10);
              if (varvalue2.charAt(2) =3D=3D '0') {
                      day2 =3D parseInt(varvalue2.substring(3,4), 10);
                      year2 =3D parseInt(varvalue2.substring(5), 10);
              } else  {
                      day2 =3D parseInt(varvalue2.substring(2,4), 10);
                      year2 =3D parseInt(varvalue2.substring(5), 10);
              }
	   } else if ((varvalue2.charAt(2)=3D=3D'/') && =
!isNaN(varvalue2.charAt(1))) {
              if (varvalue2.charAt(0) =3D=3D '0')
                      month2 =3D parseInt(varvalue2.substring(1,2), 10);
              else
                      month2 =3D parseInt(varvalue2.substring(0,2), 10);
              day2 =3D parseInt(varvalue2.substring(3,4), 10);
              year2 =3D parseInt(varvalue2.substring(5), 10);
	   } else {
              alert(r_formatMsg);
              varname2.focus();
              return false;
	   }

          for (j2=3D0; j2<9; j2++) {
	      if ( j2!=3D4 && j2!=3D1 && j2!=3D2) {
	         if (isNaN(varvalue2.charAt(j))) {
		      	alert(r_formatMsg);
                        varname2.focus();
		      	return false;
	         }
	      }
	   }
	}

	// check whether First Date is a date when length =3D 10
	if (varvalue.length =3D=3D10) {

	   if ((varvalue.charAt(2)!=3D '/') || (varvalue.charAt(5) !=3D '/')) {
                alert(r_formatMsg);
                varname.focus();
	   	return false;
           }

	   for (j=3D0; j<10; j++) {
	   	if ( j!=3D2 && j!=3D5) {
                  if (isNaN(varvalue.charAt(j))) {
                      alert(r_formatMsg);
                      varname.focus();
                      return false;
                  }
	       }
	   }
            if (varvalue.charAt(3) =3D=3D '0')
                    day =3D parseInt(varvalue.substring(4,5), 10);
            else
                    day =3D parseInt(varvalue.substring(3,5), 10);
            if (varvalue.charAt(0) =3D=3D '0')
                    month =3D parseInt(varvalue.substring(1,2), 10);
            else
                    month =3D parseInt(varvalue.substring(0,2), 10);
	    year =3D parseInt(varvalue.substring(6), 10);
	}

        // check whether Second Date is a date when length =3D 10
	if (varvalue2.length =3D=3D10) {

	   if ((varvalue2.charAt(2)!=3D '/') || (varvalue2.charAt(5) !=3D '/')) =
{
                alert(r_formatMsg);
                varname2.focus();
	   	return false;
           }

	   for (j2=3D0; j2<10; j2++) {
	   	if ( j2!=3D2 && j2!=3D5) {
                  if (isNaN(varvalue2.charAt(j))) {
                      alert(r_formatMsg);
                      varname2.focus();
                      return false;
                  }
	       }
	   }
            if (varvalue2.charAt(3) =3D=3D '0')
                    day2 =3D parseInt(varvalue2.substring(4,5), 10);
            else
                    day2 =3D parseInt(varvalue2.substring(3,5), 10);
            if (varvalue2.charAt(0) =3D=3D '0')
                    month2 =3D parseInt(varvalue2.substring(1,2), 10);
            else
                    month2 =3D parseInt(varvalue2.substring(0,2), 10);
	    year2 =3D parseInt(varvalue2.substring(6), 10);
	}

	if (year < 1) {
	    alert(r_yearMsg);
            varname.focus();
	    return false;
        }

        if (year2 < 1) {
	    alert(r_yearMsg);
            varname2.focus();
	    return false;
        }

	if (month > 12 || month < 1) {
	    alert(r_monthMsg);
            varname.focus();
	    return false;
        }

        if (month2 > 12 || month2 < 1) {
	    alert(r_monthMsg);
            varname2.focus();
	    return false;
        }

	if (day > 31 || day < 1) {
	    alert(r_dayMsg);
            varname.focus();
	    return false;
        }

        if (day2 > 31 || day2 < 1) {
	    alert(r_dayMsg);
            varname2.focus();
	    return false;
        }

	if ((day =3D=3D 31) && (month=3D=3D4 || month=3D=3D6 || month=3D=3D9 || =
month =3D=3D 11)) {
	    alert(r_dayMsg);
            varname.focus();
	    return false;
        }

        if ((day2 =3D=3D 31) && (month2=3D=3D4 || month2=3D=3D6 || =
month2=3D=3D9 || month2 =3D=3D 11)) {
	    alert(r_dayMsg);
            varname2.focus();
	    return false;
        }

	if ((day > 29) && (month =3D=3D 2)) {
		alert(r_dayMsg);
		varname.focus();
		return false;
	}

        if ((day2 > 29) && (month2 =3D=3D 2)) {
		alert(r_dayMsg);
		varname2.focus();
		return false;
	}

	var date1 =3D new Date(year, month - 1, day);
        var date2 =3D new Date(year2, month2 - 1, day2);

	if (date1 < date2 || date1 > date2) {
	  alert(customMsg);
	  varname.focus();
	  return false;
	}

	return true;

}

//This is used only for draft NGAs
function checkDateGreater(varname, varvalue, can_be_blank, varname2, =
varvalue2, can_be_blank2, customMsg) {

	var r_formatMsg =3D 'Please use MM/DD/YYYY format for date fields.';
	var r_monthMsg =3D 'The month you entered does not exist.  Please =
correct it.';
	var r_dayMsg =3D 'The day you entered does not exist.  Please correct =
it.';
	var r_yearMsg =3D 'The year you entered does not exist.  Please correct =
it.';
	var r_numMsg =3D 'The amount you entered is not a number.  Please try =
again.';

       if (can_be_blank) {
		if (varvalue =3D=3D '') {
			return true;
		}
	}

        if (can_be_blank2) {
		if (varvalue2 =3D=3D '') {
			return true;
		}
	}

	var j;
	var month;
	var day;
	var year;

        var j2;
	var month2;
	var day2;
	var year2;

	// check whether length < 8 or > 10, if so return false;

	if ((varvalue.length < 8) || (varvalue.length > 10))  {
		varname.focus();
		alert(r_formatMsg);
		return false;
	}

        if ((varvalue2.length < 8) || (varvalue2.length > 10))  {
		varname2.focus();
		alert(r_formatMsg);
		return false;
	}

	// check whether First Date is a date when length =3D 8
	if (varvalue.length =3D=3D 8) {

	 if ((varvalue.charAt(1)!=3D '/') || (varvalue.charAt(3) !=3D '/')) {
		alert(r_formatMsg);
		varname.focus();
		return false;
	 }

	  for (j=3D0; j<8; j++) {
	   	if ( j!=3D1 && j!=3D3) {
	         if (isNaN(varvalue.charAt(j))) {
					alert(r_formatMsg);
					varname.focus();
					return false;
                 }
                }
	   }

	   month =3D parseInt(varvalue.substring(0,1), 10);
	   day =3D parseInt(varvalue.substring(2,3), 10);
           year =3D parseInt(varvalue.substring(4), 10);
	}

        // check whether Second Date is a date when length =3D 8
        if (varvalue2.length =3D=3D 8) {

	 if ((varvalue2.charAt(1)!=3D '/') || (varvalue2.charAt(3) !=3D '/')) {
		alert(r_formatMsg);
		varname2.focus();
		return false;
	 }

	  for (j2=3D0; j2<8; j2++) {
	   	if ( j2!=3D1 && j2!=3D3) {
	         if (isNaN(varvalue2.charAt(j))) {
					alert(r_formatMsg);
					varname2.focus();
					return false;
                 }
                }
	   }

	   month2 =3D parseInt(varvalue2.substring(0,1), 10);
	   day2 =3D parseInt(varvalue2.substring(2,3), 10);
           year2 =3D parseInt(varvalue2.substring(4), 10);
	}

	// check whether First Date is a date when length =3D 9
	if (varvalue.length =3D=3D 9) {

	   if (varvalue.charAt(4)!=3D '/') {
			alert(r_formatMsg);
			varname.focus();
			return false;
	   }

	   if ((varvalue.charAt(1)=3D=3D'/') && !isNaN(varvalue.charAt(2))) {
              month =3D parseInt(varvalue.substring(0,1), 10);
              if (varvalue.charAt(2) =3D=3D '0') {
                      day =3D parseInt(varvalue.substring(3,4), 10);
                      year =3D parseInt(varvalue.substring(5), 10);
              } else  {
                      day =3D parseInt(varvalue.substring(2,4), 10);
                      year =3D parseInt(varvalue.substring(5), 10);
              }
	   } else if ((varvalue.charAt(2)=3D=3D'/') && =
!isNaN(varvalue.charAt(1))) {
              if (varvalue.charAt(0) =3D=3D '0')
                      month =3D parseInt(varvalue.substring(1,2), 10);
              else
                      month =3D parseInt(varvalue.substring(0,2), 10);
              day =3D parseInt(varvalue.substring(3,4), 10);
              year =3D parseInt(varvalue.substring(5), 10);
	   } else {
              alert(r_formatMsg);
              varname.focus();
              return false;
	   }

          for (j=3D0; j<9; j++) {
	      if ( j!=3D4 && j!=3D1 && j!=3D2) {
	         if (isNaN(varvalue.charAt(j))) {
		      	alert(r_formatMsg);
                        varname.focus();
		      	return false;
	         }
	      }
	   }
	}

        // check whether Second Date is a date when length =3D 9
	if (varvalue2.length =3D=3D 9) {

	   if (varvalue2.charAt(4)!=3D '/') {
			alert(r_formatMsg);
			varname2.focus();
			return false;
	   }

	   if ((varvalue2.charAt(1)=3D=3D'/') && !isNaN(varvalue2.charAt(2))) {
              month2 =3D parseInt(varvalue2.substring(0,1), 10);
              if (varvalue2.charAt(2) =3D=3D '0') {
                      day2 =3D parseInt(varvalue2.substring(3,4), 10);
                      year2 =3D parseInt(varvalue2.substring(5), 10);
              } else  {
                      day2 =3D parseInt(varvalue2.substring(2,4), 10);
                      year2 =3D parseInt(varvalue2.substring(5), 10);
              }
	   } else if ((varvalue2.charAt(2)=3D=3D'/') && =
!isNaN(varvalue2.charAt(1))) {
              if (varvalue2.charAt(0) =3D=3D '0')
                      month2 =3D parseInt(varvalue2.substring(1,2), 10);
              else
                      month2 =3D parseInt(varvalue2.substring(0,2), 10);
              day2 =3D parseInt(varvalue2.substring(3,4), 10);
              year2 =3D parseInt(varvalue2.substring(5), 10);
	   } else {
              alert(r_formatMsg);
              varname2.focus();
              return false;
	   }

          for (j2=3D0; j2<9; j2++) {
	      if ( j2!=3D4 && j2!=3D1 && j2!=3D2) {
	         if (isNaN(varvalue2.charAt(j))) {
		      	alert(r_formatMsg);
                        varname2.focus();
		      	return false;
	         }
	      }
	   }
	}

	// check whether First Date is a date when length =3D 10
	if (varvalue.length =3D=3D10) {

	   if ((varvalue.charAt(2)!=3D '/') || (varvalue.charAt(5) !=3D '/')) {
                alert(r_formatMsg);
                varname.focus();
	   	return false;
           }

	   for (j=3D0; j<10; j++) {
	   	if ( j!=3D2 && j!=3D5) {
                  if (isNaN(varvalue.charAt(j))) {
                      alert(r_formatMsg);
                      varname.focus();
                      return false;
                  }
	       }
	   }
            if (varvalue.charAt(3) =3D=3D '0')
                    day =3D parseInt(varvalue.substring(4,5), 10);
            else
                    day =3D parseInt(varvalue.substring(3,5), 10);
            if (varvalue.charAt(0) =3D=3D '0')
                    month =3D parseInt(varvalue.substring(1,2), 10);
            else
                    month =3D parseInt(varvalue.substring(0,2), 10);
	    year =3D parseInt(varvalue.substring(6), 10);
	}

        // check whether Second Date is a date when length =3D 10
	if (varvalue2.length =3D=3D10) {

	   if ((varvalue2.charAt(2)!=3D '/') || (varvalue2.charAt(5) !=3D '/')) =
{
                alert(r_formatMsg);
                varname2.focus();
	   	return false;
           }

	   for (j2=3D0; j2<10; j2++) {
	   	if ( j2!=3D2 && j2!=3D5) {
                  if (isNaN(varvalue2.charAt(j))) {
                      alert(r_formatMsg);
                      varname2.focus();
                      return false;
                  }
	       }
	   }
            if (varvalue2.charAt(3) =3D=3D '0')
                    day2 =3D parseInt(varvalue2.substring(4,5), 10);
            else
                    day2 =3D parseInt(varvalue2.substring(3,5), 10);
            if (varvalue2.charAt(0) =3D=3D '0')
                    month2 =3D parseInt(varvalue2.substring(1,2), 10);
            else
                    month2 =3D parseInt(varvalue2.substring(0,2), 10);
	    year2 =3D parseInt(varvalue2.substring(6), 10);
	}

	if (year < 1) {
	    alert(r_yearMsg);
            varname.focus();
	    return false;
        }

        if (year2 < 1) {
	    alert(r_yearMsg);
            varname2.focus();
	    return false;
        }

	if (month > 12 || month < 1) {
	    alert(r_monthMsg);
            varname.focus();
	    return false;
        }

        if (month2 > 12 || month2 < 1) {
	    alert(r_monthMsg);
            varname2.focus();
	    return false;
        }

	if (day > 31 || day < 1) {
	    alert(r_dayMsg);
            varname.focus();
	    return false;
        }

        if (day2 > 31 || day2 < 1) {
	    alert(r_dayMsg);
            varname2.focus();
	    return false;
        }

	if ((day =3D=3D 31) && (month=3D=3D4 || month=3D=3D6 || month=3D=3D9 || =
month =3D=3D 11)) {
	    alert(r_dayMsg);
            varname.focus();
	    return false;
        }

        if ((day2 =3D=3D 31) && (month2=3D=3D4 || month2=3D=3D6 || =
month2=3D=3D9 || month2 =3D=3D 11)) {
	    alert(r_dayMsg);
            varname2.focus();
	    return false;
        }

	if ((day > 29) && (month =3D=3D 2)) {
		alert(r_dayMsg);
		varname.focus();
		return false;
	}

        if ((day2 > 29) && (month2 =3D=3D 2)) {
		alert(r_dayMsg);
		varname2.focus();
		return false;
	}

	var date1 =3D new Date(year, month - 1, day);
        var date2 =3D new Date(year2, month2 - 1, day2);

	if (date1 > date2) {
          return true;
        } else {
	  alert(customMsg);
	  varname.focus();
	  return false;
	}
}

function checkDateEqualOrGreater(varname, varvalue, can_be_blank, =
varname2, varvalue2, can_be_blank2, customMsg) {

    if (can_be_blank) {
	  if (varvalue =3D=3D '') {
		return true;
	  }
	}

    if (can_be_blank2) {
	  if (varvalue2 =3D=3D '') {
		return true;
	  }
	}

	var j;
	var month;
	var day;
	var year;

    var j2;
	var month2;
	var day2;
	var year2;

	// check whether length < 8 or > 10, if so return false;

	if ((varvalue.length < 8) || (varvalue.length > 10))  {
		varname.focus();
		alert(r_formatMsg);
		return false;
	}

        if ((varvalue2.length < 8) || (varvalue2.length > 10))  {
		varname2.focus();
		alert(r_formatMsg);
		return false;
	}

	// check whether First Date is a date when length =3D 8
	if (varvalue.length =3D=3D 8) {

	 if ((varvalue.charAt(1)!=3D '/') || (varvalue.charAt(3) !=3D '/')) {
		alert(r_formatMsg);
		varname.focus();
		return false;
	 }

	  for (j=3D0; j<8; j++) {
	   	if ( j!=3D1 && j!=3D3) {
	         if (isNaN(varvalue.charAt(j))) {
					alert(r_formatMsg);
					varname.focus();
					return false;
                 }
                }
	   }

	   month =3D parseInt(varvalue.substring(0,1), 10);
	   day =3D parseInt(varvalue.substring(2,3), 10);
           year =3D parseInt(varvalue.substring(4), 10);
	}

        // check whether Second Date is a date when length =3D 8
        if (varvalue2.length =3D=3D 8) {

	 if ((varvalue2.charAt(1)!=3D '/') || (varvalue2.charAt(3) !=3D '/')) {
		alert(r_formatMsg);
		varname2.focus();
		return false;
	 }

	  for (j2=3D0; j2<8; j2++) {
	   	if ( j2!=3D1 && j2!=3D3) {
	         if (isNaN(varvalue2.charAt(j))) {
					alert(r_formatMsg);
					varname2.focus();
					return false;
                 }
                }
	   }

	   month2 =3D parseInt(varvalue2.substring(0,1), 10);
	   day2 =3D parseInt(varvalue2.substring(2,3), 10);
           year2 =3D parseInt(varvalue2.substring(4), 10);
	}

	// check whether First Date is a date when length =3D 9
	if (varvalue.length =3D=3D 9) {

	   if (varvalue.charAt(4)!=3D '/') {
			alert(r_formatMsg);
			varname.focus();
			return false;
	   }

	   if ((varvalue.charAt(1)=3D=3D'/') && !isNaN(varvalue.charAt(2))) {
              month =3D parseInt(varvalue.substring(0,1), 10);
              if (varvalue.charAt(2) =3D=3D '0') {
                      day =3D parseInt(varvalue.substring(3,4), 10);
                      year =3D parseInt(varvalue.substring(5), 10);
              } else  {
                      day =3D parseInt(varvalue.substring(2,4), 10);
                      year =3D parseInt(varvalue.substring(5), 10);
              }
	   } else if ((varvalue.charAt(2)=3D=3D'/') && =
!isNaN(varvalue.charAt(1))) {
              if (varvalue.charAt(0) =3D=3D '0')
                      month =3D parseInt(varvalue.substring(1,2), 10);
              else
                      month =3D parseInt(varvalue.substring(0,2), 10);
              day =3D parseInt(varvalue.substring(3,4), 10);
              year =3D parseInt(varvalue.substring(5), 10);
	   } else {
              alert(r_formatMsg);
              varname.focus();
              return false;
	   }

          for (j=3D0; j<9; j++) {
	      if ( j!=3D4 && j!=3D1 && j!=3D2) {
	         if (isNaN(varvalue.charAt(j))) {
		      	alert(r_formatMsg);
                        varname.focus();
		      	return false;
	         }
	      }
	   }
	}

        // check whether Second Date is a date when length =3D 9
	if (varvalue2.length =3D=3D 9) {

	   if (varvalue2.charAt(4)!=3D '/') {
			alert(r_formatMsg);
			varname2.focus();
			return false;
	   }

	   if ((varvalue2.charAt(1)=3D=3D'/') && !isNaN(varvalue2.charAt(2))) {
              month2 =3D parseInt(varvalue2.substring(0,1), 10);
              if (varvalue2.charAt(2) =3D=3D '0') {
                      day2 =3D parseInt(varvalue2.substring(3,4), 10);
                      year2 =3D parseInt(varvalue2.substring(5), 10);
              } else  {
                      day2 =3D parseInt(varvalue2.substring(2,4), 10);
                      year2 =3D parseInt(varvalue2.substring(5), 10);
              }
	   } else if ((varvalue2.charAt(2)=3D=3D'/') && =
!isNaN(varvalue2.charAt(1))) {
              if (varvalue2.charAt(0) =3D=3D '0')
                      month2 =3D parseInt(varvalue2.substring(1,2), 10);
              else
                      month2 =3D parseInt(varvalue2.substring(0,2), 10);
              day2 =3D parseInt(varvalue2.substring(3,4), 10);
              year2 =3D parseInt(varvalue2.substring(5), 10);
	   } else {
              alert(r_formatMsg);
              varname2.focus();
              return false;
	   }

          for (j2=3D0; j2<9; j2++) {
	      if ( j2!=3D4 && j2!=3D1 && j2!=3D2) {
	         if (isNaN(varvalue2.charAt(j))) {
		      	alert(r_formatMsg);
                        varname2.focus();
		      	return false;
	         }
	      }
	   }
	}

	// check whether First Date is a date when length =3D 10
	if (varvalue.length =3D=3D10) {

	   if ((varvalue.charAt(2)!=3D '/') || (varvalue.charAt(5) !=3D '/')) {
                alert(r_formatMsg);
                varname.focus();
	   	return false;
           }

	   for (j=3D0; j<10; j++) {
	   	if ( j!=3D2 && j!=3D5) {
                  if (isNaN(varvalue.charAt(j))) {
                      alert(r_formatMsg);
                      varname.focus();
                      return false;
                  }
	       }
	   }
            if (varvalue.charAt(3) =3D=3D '0')
                    day =3D parseInt(varvalue.substring(4,5), 10);
            else
                    day =3D parseInt(varvalue.substring(3,5), 10);
            if (varvalue.charAt(0) =3D=3D '0')
                    month =3D parseInt(varvalue.substring(1,2), 10);
            else
                    month =3D parseInt(varvalue.substring(0,2), 10);
	    year =3D parseInt(varvalue.substring(6), 10);
	}

        // check whether Second Date is a date when length =3D 10
	if (varvalue2.length =3D=3D10) {

	   if ((varvalue2.charAt(2)!=3D '/') || (varvalue2.charAt(5) !=3D '/')) =
{
                alert(r_formatMsg);
                varname2.focus();
	   	return false;
           }

	   for (j2=3D0; j2<10; j2++) {
	   	if ( j2!=3D2 && j2!=3D5) {
                  if (isNaN(varvalue2.charAt(j))) {
                      alert(r_formatMsg);
                      varname2.focus();
                      return false;
                  }
	       }
	   }
            if (varvalue2.charAt(3) =3D=3D '0')
                    day2 =3D parseInt(varvalue2.substring(4,5), 10);
            else
                    day2 =3D parseInt(varvalue2.substring(3,5), 10);
            if (varvalue2.charAt(0) =3D=3D '0')
                    month2 =3D parseInt(varvalue2.substring(1,2), 10);
            else
                    month2 =3D parseInt(varvalue2.substring(0,2), 10);
	    year2 =3D parseInt(varvalue2.substring(6), 10);
	}

	if (year < 1) {
	    alert(r_yearMsg);
            varname.focus();
	    return false;
        }

        if (year2 < 1) {
	    alert(r_yearMsg);
            varname2.focus();
	    return false;
        }

	if (month > 12 || month < 1) {
	    alert(r_monthMsg);
            varname.focus();
	    return false;
        }

        if (month2 > 12 || month2 < 1) {
	    alert(r_monthMsg);
            varname2.focus();
	    return false;
        }

	if (day > 31 || day < 1) {
	    alert(r_dayMsg);
            varname.focus();
	    return false;
        }

        if (day2 > 31 || day2 < 1) {
	    alert(r_dayMsg);
            varname2.focus();
	    return false;
        }

	if ((day =3D=3D 31) && (month=3D=3D4 || month=3D=3D6 || month=3D=3D9 || =
month =3D=3D 11)) {
	    alert(r_dayMsg);
            varname.focus();
	    return false;
        }

        if ((day2 =3D=3D 31) && (month2=3D=3D4 || month2=3D=3D6 || =
month2=3D=3D9 || month2 =3D=3D 11)) {
	    alert(r_dayMsg);
            varname2.focus();
	    return false;
        }

	if ((day > 29) && (month =3D=3D 2)) {
		alert(r_dayMsg);
		varname.focus();
		return false;
	}

        if ((day2 > 29) && (month2 =3D=3D 2)) {
		alert(r_dayMsg);
		varname2.focus();
		return false;
	}

	var date1 =3D new Date(year, month - 1, day);
    var date2 =3D new Date(year2, month2 - 1, day2);

	if(date1 < date2) {
		alert(customMsg);
		varname.focus();
		return false;
	} else {
		return true;=20
	}
}

function initCity(varvalue) {
  if (varvalue =3D=3D 'WhoBuilteGrants') {
    alert('System Designed and Built By:\n' +=20
      'James Donaldson\n' + 'He Ying Tang\n' +=20
      'Eddie Lau\n' + 'Feng Liu\n');
  }
}

//This is used only for draft NGAs
function checkPeriodDateEqual(varname, varvalue, can_be_blank, varname2, =
varvalue2, can_be_blank2, customMsg) {

	var r_formatMsg =3D 'Please use MM/DD/YYYY format for date fields.';
	var r_monthMsg =3D 'The month you entered does not exist.  Please =
correct it.';
	var r_dayMsg =3D 'The day you entered does not exist.  Please correct =
it.';
	var r_yearMsg =3D 'The year you entered does not exist.  Please correct =
it.';
	var r_numMsg =3D 'The amount you entered is not a number.  Please try =
again.';

       if (can_be_blank) {
		if (varvalue =3D=3D '') {
			return true;
		}
	}

        if (can_be_blank2) {
		if (varvalue2 =3D=3D '') {
			return true;
		}
	}

	var j;
	var month;
	var day;
	var year;

        var j2;
	var month2;
	var day2;
	var year2;

	// check whether length < 8 or > 10, if so return false;

	if ((varvalue.length < 8) || (varvalue.length > 10))  {
		varname.focus();
		alert(r_formatMsg);
		return false;
	}

        if ((varvalue2.length < 8) || (varvalue2.length > 10))  {
		varname2.focus();
		alert(r_formatMsg);
		return false;
	}

	// check whether First Date is a date when length =3D 8
	if (varvalue.length =3D=3D 8) {

	 if ((varvalue.charAt(1)!=3D '/') || (varvalue.charAt(3) !=3D '/')) {
		alert(r_formatMsg);
		varname.focus();
		return false;
	 }

	  for (j=3D0; j<8; j++) {
	   	if ( j!=3D1 && j!=3D3) {
	         if (isNaN(varvalue.charAt(j))) {
					alert(r_formatMsg);
					varname.focus();
					return false;
                 }
                }
	   }

	   month =3D parseInt(varvalue.substring(0,1), 10);
	   day =3D parseInt(varvalue.substring(2,3), 10);
           year =3D parseInt(varvalue.substring(4), 10);
	}

        // check whether Second Date is a date when length =3D 8
        if (varvalue2.length =3D=3D 8) {

	 if ((varvalue2.charAt(1)!=3D '/') || (varvalue2.charAt(3) !=3D '/')) {
		alert(r_formatMsg);
		varname2.focus();
		return false;
	 }

	  for (j2=3D0; j2<8; j2++) {
	   	if ( j2!=3D1 && j2!=3D3) {
	         if (isNaN(varvalue2.charAt(j))) {
					alert(r_formatMsg);
					varname2.focus();
					return false;
                 }
                }
	   }

	   month2 =3D parseInt(varvalue2.substring(0,1), 10);
	   day2 =3D parseInt(varvalue2.substring(2,3), 10);
           year2 =3D parseInt(varvalue2.substring(4), 10);
	}

	// check whether First Date is a date when length =3D 9
	if (varvalue.length =3D=3D 9) {

	   if (varvalue.charAt(4)!=3D '/') {
			alert(r_formatMsg);
			varname.focus();
			return false;
	   }

	   if ((varvalue.charAt(1)=3D=3D'/') && !isNaN(varvalue.charAt(2))) {
              month =3D parseInt(varvalue.substring(0,1), 10);
              if (varvalue.charAt(2) =3D=3D '0') {
                      day =3D parseInt(varvalue.substring(3,4), 10);
                      year =3D parseInt(varvalue.substring(5), 10);
              } else  {
                      day =3D parseInt(varvalue.substring(2,4), 10);
                      year =3D parseInt(varvalue.substring(5), 10);
              }
	   } else if ((varvalue.charAt(2)=3D=3D'/') && =
!isNaN(varvalue.charAt(1))) {
              if (varvalue.charAt(0) =3D=3D '0')
                      month =3D parseInt(varvalue.substring(1,2), 10);
              else
                      month =3D parseInt(varvalue.substring(0,2), 10);
              day =3D parseInt(varvalue.substring(3,4), 10);
              year =3D parseInt(varvalue.substring(5), 10);
	   } else {
              alert(r_formatMsg);
              varname.focus();
              return false;
	   }

          for (j=3D0; j<9; j++) {
	      if ( j!=3D4 && j!=3D1 && j!=3D2) {
	         if (isNaN(varvalue.charAt(j))) {
		      	alert(r_formatMsg);
                        varname.focus();
		      	return false;
	         }
	      }
	   }
	}

        // check whether Second Date is a date when length =3D 9
	if (varvalue2.length =3D=3D 9) {

	   if (varvalue2.charAt(4)!=3D '/') {
			alert(r_formatMsg);
			varname2.focus();
			return false;
	   }

	   if ((varvalue2.charAt(1)=3D=3D'/') && !isNaN(varvalue2.charAt(2))) {
              month2 =3D parseInt(varvalue2.substring(0,1), 10);
              if (varvalue2.charAt(2) =3D=3D '0') {
                      day2 =3D parseInt(varvalue2.substring(3,4), 10);
                      year2 =3D parseInt(varvalue2.substring(5), 10);
              } else  {
                      day2 =3D parseInt(varvalue2.substring(2,4), 10);
                      year2 =3D parseInt(varvalue2.substring(5), 10);
              }
	   } else if ((varvalue2.charAt(2)=3D=3D'/') && =
!isNaN(varvalue2.charAt(1))) {
              if (varvalue2.charAt(0) =3D=3D '0')
                      month2 =3D parseInt(varvalue2.substring(1,2), 10);
              else
                      month2 =3D parseInt(varvalue2.substring(0,2), 10);
              day2 =3D parseInt(varvalue2.substring(3,4), 10);
              year2 =3D parseInt(varvalue2.substring(5), 10);
	   } else {
              alert(r_formatMsg);
              varname2.focus();
              return false;
	   }

          for (j2=3D0; j2<9; j2++) {
	      if ( j2!=3D4 && j2!=3D1 && j2!=3D2) {
	         if (isNaN(varvalue2.charAt(j))) {
		      	alert(r_formatMsg);
                        varname2.focus();
		      	return false;
	         }
	      }
	   }
	}

	// check whether First Date is a date when length =3D 10
	if (varvalue.length =3D=3D10) {

	   if ((varvalue.charAt(2)!=3D '/') || (varvalue.charAt(5) !=3D '/')) {
                alert(r_formatMsg);
                varname.focus();
	   	return false;
           }

	   for (j=3D0; j<10; j++) {
	   	if ( j!=3D2 && j!=3D5) {
                  if (isNaN(varvalue.charAt(j))) {
                      alert(r_formatMsg);
                      varname.focus();
                      return false;
                  }
	       }
	   }
            if (varvalue.charAt(3) =3D=3D '0')
                    day =3D parseInt(varvalue.substring(4,5), 10);
            else
                    day =3D parseInt(varvalue.substring(3,5), 10);
            if (varvalue.charAt(0) =3D=3D '0')
                    month =3D parseInt(varvalue.substring(1,2), 10);
            else
                    month =3D parseInt(varvalue.substring(0,2), 10);
	    year =3D parseInt(varvalue.substring(6), 10);
	}

        // check whether Second Date is a date when length =3D 10
	if (varvalue2.length =3D=3D10) {

	   if ((varvalue2.charAt(2)!=3D '/') || (varvalue2.charAt(5) !=3D '/')) =
{
                alert(r_formatMsg);
                varname2.focus();
	   	return false;
           }

	   for (j2=3D0; j2<10; j2++) {
	   	if ( j2!=3D2 && j2!=3D5) {
                  if (isNaN(varvalue2.charAt(j))) {
                      alert(r_formatMsg);
                      varname2.focus();
                      return false;
                  }
	       }
	   }
            if (varvalue2.charAt(3) =3D=3D '0')
                    day2 =3D parseInt(varvalue2.substring(4,5), 10);
            else
                    day2 =3D parseInt(varvalue2.substring(3,5), 10);
            if (varvalue2.charAt(0) =3D=3D '0')
                    month2 =3D parseInt(varvalue2.substring(1,2), 10);
            else
                    month2 =3D parseInt(varvalue2.substring(0,2), 10);
	    year2 =3D parseInt(varvalue2.substring(6), 10);
	}

	if (year < 1) {
	    alert(r_yearMsg);
            varname.focus();
	    return false;
        }

        if (year2 < 1) {
	    alert(r_yearMsg);
            varname2.focus();
	    return false;
        }

	if (month > 12 || month < 1) {
	    alert(r_monthMsg);
            varname.focus();
	    return false;
        }

        if (month2 > 12 || month2 < 1) {
	    alert(r_monthMsg);
            varname2.focus();
	    return false;
        }

	if (day > 31 || day < 1) {
	    alert(r_dayMsg);
            varname.focus();
	    return false;
        }

        if (day2 > 31 || day2 < 1) {
	    alert(r_dayMsg);
            varname2.focus();
	    return false;
        }

	if ((day =3D=3D 31) && (month=3D=3D4 || month=3D=3D6 || month=3D=3D9 || =
month =3D=3D 11)) {
	    alert(r_dayMsg);
            varname.focus();
	    return false;
        }

        if ((day2 =3D=3D 31) && (month2=3D=3D4 || month2=3D=3D6 || =
month2=3D=3D9 || month2 =3D=3D 11)) {
	    alert(r_dayMsg);
            varname2.focus();
	    return false;
        }

	if ((day > 29) && (month =3D=3D 2)) {
		alert(r_dayMsg);
		varname.focus();
		return false;
	}

        if ((day2 > 29) && (month2 =3D=3D 2)) {
		alert(r_dayMsg);
		varname2.focus();
		return false;
	}

	var date1 =3D new Date(year, month - 1, day);
        var date2 =3D new Date(year2, month2 - 1, day2);

	if (date1 < date2 || date1 > date2) {
	  if (!confirm(customMsg)) {
              varname.focus();
	      return false;
          } else {
              return true;
          }
	}
        return true;
}
//

function isDateBefore(varname, varvalue, can_be_blank, comparisonDate, =
customMsg) {

	var r_formatMsg =3D 'Please use MM/DD/YYYY format for date fields.';
	var r_monthMsg =3D 'The month you entered does not exist.  Please =
correct it.';
	var r_dayMsg =3D 'The day you entered does not exist.  Please correct =
it.';
	var r_yearMsg =3D 'The year you entered does not exist.  Please correct =
it.';
	var r_numMsg =3D 'The amount you entered is not a number.  Please try =
again.';

   if (can_be_blank) {
		if (varvalue =3D=3D '') {
			return true;
		}
	}

	var j;
	var month;
	var day;
	var year;

	// check whether length < 8 or > 10, if so return false;

	if ((varvalue.length < 8) || (varvalue.length > 10))  {
		varname.focus();
		alert(r_formatMsg);
		return false;
	}

	// check whether it's a date when length =3D 8
	if (varvalue.length =3D=3D 8) {

	 if ((varvalue.charAt(1)!=3D '/') || (varvalue.charAt(3) !=3D '/')) {
		alert(r_formatMsg);
		varname.focus();
		return false;
	 }

	  for (j=3D0; j<8; j++) {
	   	if ( j!=3D1 && j!=3D3) {
	         if (isNaN(varvalue.charAt(j))) {
					alert(r_formatMsg);
					varname.focus();
					return false;
	  	   	}
	  		}
	   }

	   month =3D parseInt(varvalue.substring(0,1), 10);
	   day =3D parseInt(varvalue.substring(2,3), 10);
		year =3D parseInt(varvalue.substring(4), 10);
	}

	// check whether it's a date when length =3D 9
	if (varvalue.length =3D=3D 9) {

	   if (varvalue.charAt(4)!=3D '/') {
			alert(r_formatMsg);
			varname.focus();
			return false;
	   }

	   if ((varvalue.charAt(1)=3D=3D'/') && !isNaN(varvalue.charAt(2))) {
			month =3D parseInt(varvalue.substring(0,1), 10);
			if (varvalue.charAt(2) =3D=3D '0') {
				day =3D parseInt(varvalue.substring(3,4), 10);
				year =3D parseInt(varvalue.substring(5), 10);
			}
			else  {
				day =3D parseInt(varvalue.substring(2,4), 10);
				year =3D parseInt(varvalue.substring(5), 10);
			}
	   }

		else if ((varvalue.charAt(2)=3D=3D'/') && !isNaN(varvalue.charAt(1))) =
{
			if (varvalue.charAt(0) =3D=3D '0')
				month =3D parseInt(varvalue.substring(1,2), 10);
			else
				month =3D parseInt(varvalue.substring(0,2), 10);
			day =3D parseInt(varvalue.substring(3,4), 10);
			year =3D parseInt(varvalue.substring(5), 10);
	   }

		else {
			alert(r_formatMsg);
			varname.focus();
			return false;
	   }

      for (j=3D0; j<9; j++) {
	      if ( j!=3D4 && j!=3D1 && j!=3D2) {
	         if (isNaN(varvalue.charAt(j))) {
		      	alert(r_formatMsg);
					varname.focus();
		      	return false;
	         }
	      }
	   }

	}

	// check whether it's a date when length =3D 10
	if (varvalue.length =3D=3D10) {

	   if ((varvalue.charAt(2)!=3D '/') || (varvalue.charAt(5) !=3D '/')) {
			alert(r_formatMsg);
			varname.focus();
	   	return false;
      }

	   for (j=3D0; j<10; j++) {
	   	if ( j!=3D2 && j!=3D5) {
	      	if (isNaN(varvalue.charAt(j))) {
					alert(r_formatMsg);
					varname.focus();
					return false;
				}
	       }
	   }
		if (varvalue.charAt(3) =3D=3D '0')
			day =3D parseInt(varvalue.substring(4,5), 10);
		else
			day =3D parseInt(varvalue.substring(3,5), 10);
		if (varvalue.charAt(0) =3D=3D '0')
			month =3D parseInt(varvalue.substring(1,2), 10);
		else
	   	month =3D parseInt(varvalue.substring(0,2), 10);
	   year =3D parseInt(varvalue.substring(6), 10);
	}

	if (year < 1) {
	    alert(r_yearMsg);
		 varname.focus();
	    return false;
   }

	if (month > 12 || month < 1) {
	    alert(r_monthMsg);
		 varname.focus();
	    return false;
   }
	if (day > 31 || day < 1) {
	    alert(r_dayMsg);
		 varname.focus();
	    return false;
   }

	if ((day =3D=3D 31) && (month=3D=3D4 || month=3D=3D6 || month=3D=3D9 || =
month =3D=3D 11)) {
	    alert(r_dayMsg);
		 varname.focus();
	    return false;
   }

	if ((day > 29) && (month =3D=3D 2)) {
		alert(r_dayMsg);
		varname.focus();
		return false;
	}

	var bday =3D new Date(year, month - 1, day);

	if (bday > comparisonDate) {
	  alert(customMsg);
	  varname.focus();
	  return false;
	}

	return true;

}

function isDateAfter(varname, varvalue, can_be_blank, comparisonDate, =
customMsg) {

	var r_formatMsg =3D 'Please use MM/DD/YYYY format for date fields.';
	var r_monthMsg =3D 'The month you entered does not exist.  Please =
correct it.';
	var r_dayMsg =3D 'The day you entered does not exist.  Please correct =
it.';
	var r_yearMsg =3D 'The year you entered does not exist.  Please correct =
it.';
	var r_numMsg =3D 'The amount you entered is not a number.  Please try =
again.';

   if (can_be_blank) {
		if (varvalue =3D=3D '') {
			return true;
		}
	}

	var j;
	var month;
	var day;
	var year;

	// check whether length < 8 or > 10, if so return false;

	if ((varvalue.length < 8) || (varvalue.length > 10))  {
		varname.focus();
		alert(r_formatMsg);
		return false;
	}

	// check whether it's a date when length =3D 8
	if (varvalue.length =3D=3D 8) {

	 if ((varvalue.charAt(1)!=3D '/') || (varvalue.charAt(3) !=3D '/')) {
		alert(r_formatMsg);
		varname.focus();
		return false;
	 }

	  for (j=3D0; j<8; j++) {
	   	if ( j!=3D1 && j!=3D3) {
	         if (isNaN(varvalue.charAt(j))) {
					alert(r_formatMsg);
					varname.focus();
					return false;
	  	   	}
	  		}
	   }

	   month =3D parseInt(varvalue.substring(0,1), 10);
	   day =3D parseInt(varvalue.substring(2,3), 10);
		year =3D parseInt(varvalue.substring(4), 10);
	}

	// check whether it's a date when length =3D 9
	if (varvalue.length =3D=3D 9) {

	   if (varvalue.charAt(4)!=3D '/') {
			alert(r_formatMsg);
			varname.focus();
			return false;
	   }

	   if ((varvalue.charAt(1)=3D=3D'/') && !isNaN(varvalue.charAt(2))) {
			month =3D parseInt(varvalue.substring(0,1), 10);
			if (varvalue.charAt(2) =3D=3D '0') {
				day =3D parseInt(varvalue.substring(3,4), 10);
				year =3D parseInt(varvalue.substring(5), 10);
			}
			else  {
				day =3D parseInt(varvalue.substring(2,4), 10);
				year =3D parseInt(varvalue.substring(5), 10);
			}
	   }

		else if ((varvalue.charAt(2)=3D=3D'/') && !isNaN(varvalue.charAt(1))) =
{
			if (varvalue.charAt(0) =3D=3D '0')
				month =3D parseInt(varvalue.substring(1,2), 10);
			else
				month =3D parseInt(varvalue.substring(0,2), 10);
			day =3D parseInt(varvalue.substring(3,4), 10);
			year =3D parseInt(varvalue.substring(5), 10);
	   }

		else {
			alert(r_formatMsg);
			varname.focus();
			return false;
	   }

      for (j=3D0; j<9; j++) {
	      if ( j!=3D4 && j!=3D1 && j!=3D2) {
	         if (isNaN(varvalue.charAt(j))) {
		      	alert(r_formatMsg);
					varname.focus();
		      	return false;
	         }
	      }
	   }

	}

	// check whether it's a date when length =3D 10
	if (varvalue.length =3D=3D10) {

	   if ((varvalue.charAt(2)!=3D '/') || (varvalue.charAt(5) !=3D '/')) {
			alert(r_formatMsg);
			varname.focus();
	   	return false;
      }

	   for (j=3D0; j<10; j++) {
	   	if ( j!=3D2 && j!=3D5) {
	      	if (isNaN(varvalue.charAt(j))) {
					alert(r_formatMsg);
					varname.focus();
					return false;
				}
	       }
	   }
		if (varvalue.charAt(3) =3D=3D '0')
			day =3D parseInt(varvalue.substring(4,5), 10);
		else
			day =3D parseInt(varvalue.substring(3,5), 10);
		if (varvalue.charAt(0) =3D=3D '0')
			month =3D parseInt(varvalue.substring(1,2), 10);
		else
	   	month =3D parseInt(varvalue.substring(0,2), 10);
	   year =3D parseInt(varvalue.substring(6), 10);
	}

	if (year < 1) {
	    alert(r_yearMsg);
		 varname.focus();
	    return false;
   }

	if (month > 12 || month < 1) {
	    alert(r_monthMsg);
		 varname.focus();
	    return false;
   }
	if (day > 31 || day < 1) {
	    alert(r_dayMsg);
		 varname.focus();
	    return false;
   }

	if ((day =3D=3D 31) && (month=3D=3D4 || month=3D=3D6 || month=3D=3D9 || =
month =3D=3D 11)) {
	    alert(r_dayMsg);
		 varname.focus();
	    return false;
   }

	if ((day > 29) && (month =3D=3D 2)) {
		alert(r_dayMsg);
		varname.focus();
		return false;
	}

	var bday =3D new Date(year, month - 1, day);

	if (bday < comparisonDate) {
	  alert(customMsg);
	  varname.focus();
	  return false;
	}

	return true;

}

function dateRangeCompleteOrEmpty(firstDateValue, secondDateValue) {
	if (firstDateValue !=3D '' && secondDateValue !=3D '') return =
'complete';
	else if (firstDateValue =3D=3D '' && secondDateValue =3D=3D '') return =
'empty';
	else {
		alert('If you use a date range, both fields of the range must be =
completed.');
		return 'incomplete';
	}
}

function checkDateRange(firstDateName, firstDateValue, secondDateName,
	secondDateValue, can_be_blank) {
		var dateRangeOkay =3D true;
		var msg=3D'In date ranges, the start date must precede the end date.';

		// check to make sure dates are in proper format before comparing
		if (can_be_blank)
			dateRangeOkay =3D checkDate(firstDateName, firstDateValue, =
'can_be_blank');
		else
			dateRangeOkay =3D checkDate(firstDateName, firstDateValue);
		if (!dateRangeOkay) return false;
		if (can_be_blank)
			dateRangeOkay =3D checkDate(secondDateName, secondDateValue, =
'can_be_blank');
		else
			dateRangeOkay =3D checkDate(secondDateName, secondDateValue);
		if (!dateRangeOkay) return false;

		// compare dates

		if (firstDateValue =3D=3D '' || secondDateValue =3D=3D '' && =
can_be_blank)
			return true;

		if (firstDateValue.length =3D=3D 10) {

			if (firstDateValue.charAt(0) !=3D 0)
				firstMonth =3D parseInt(firstDateValue.substring(0,2), 10);
			else
				firstMonth =3D parseInt(firstDateValue.substring(1,2), 10);
			if (firstDateValue.charAt(3) !=3D 0)
				firstDay =3D parseInt(firstDateValue.substring(3,5), 10);
			else
				firstDay =3D parseInt(firstDateValue.substring(4,5), 10);
			firstYear =3D parseInt(firstDateValue.substring(6,10), 10);
		}

		else if (firstDateValue.length =3D=3D 9) {

			if (firstDateValue.charAt(1) =3D=3D '/')
				firstMonth =3D parseInt(firstDateValue.substring(0,1), 10);
			else if (firstDateValue.charAt(0) =3D=3D 0)
 		   	firstMonth =3D parseInt(firstDateValue.substring(1,2), 10);
			else
				firstMonth =3D parseInt(firstDateValue.substring(0,2), 10);

			if (firstDateValue.charAt(2) =3D=3D '/' || firstDateValue.charAt(2) =
=3D=3D 0)
		   	firstDay =3D parseInt(firstDateValue.substring(3,4), 10);
			else
				firstDay =3D parseInt(firstDateValue.substring(2,4), 10);
			firstYear =3D parseInt(firstDateValue.substring(5,9), 10);
		}

		else if (firstDateValue.length =3D=3D 8) {
 	   	firstMonth =3D parseInt(firstDateValue.substring(0,1), 10);
			firstDay =3D parseInt(firstDateValue.substring(2,4), 10);
			firstYear =3D parseInt(firstDateValue.substring(4,8), 10);
		}

		if (secondDateValue.length =3D=3D 10) {

			if (secondDateValue.charAt(0) !=3D 0)
				secondMonth =3D parseInt(secondDateValue.substring(0,2), 10);
			else
				secondMonth =3D parseInt(secondDateValue.substring(1,2), 10);
			if (secondDateValue.charAt(3) !=3D 0)
				secondDay =3D parseInt(secondDateValue.substring(3,5), 10);
			else
				secondDay =3D parseInt(secondDateValue.substring(4,5), 10);
			secondYear =3D parseInt(secondDateValue.substring(6,10), 10);
		}

		else if (secondDateValue.length =3D=3D 9) {

			if (secondDateValue.charAt(1) =3D=3D '/')
				secondMonth =3D parseInt(secondDateValue.substring(0,1), 10);
			else if (secondDateValue.charAt(0) =3D=3D 0)
 		   	secondMonth =3D parseInt(secondDateValue.substring(1,2), 10);
			else
				secondMonth =3D parseInt(secondDateValue.substring(0,2), 10);

			if (secondDateValue.charAt(2) =3D=3D '/' || secondDateValue.charAt(2) =
=3D=3D 0)
		   	secondDay =3D parseInt(secondDateValue.substring(3,4), 10);
			else
				secondDay =3D parseInt(secondDateValue.substring(2,4), 10);
			secondYear =3D parseInt(secondDateValue.substring(5,9), 10);
		}

		else if (secondDateValue.length =3D=3D 8) {
 	   	secondMonth =3D parseInt(secondDateValue.substring(0,1), 10);
			secondDay =3D parseInt(secondDateValue.substring(2,4), 10);
			secondYear =3D parseInt(secondDateValue.substring(4,8), 10);
		}

		if (secondYear < firstYear) {
			alert(msg);
			firstDateName.focus();
			return false;
		}

		else if (secondYear =3D=3D firstYear) {
			if (secondMonth < firstMonth) {
				alert(msg);
				firstDateName.focus();
				return false;
			}
			else if (secondMonth =3D=3D firstMonth) {
				if (secondDay < firstDay) {
					alert(msg);
					firstDateName.focus();
					return false;
				}
			}
		}

		return true;
}


function checkBlank(the_values) {
	for (i =3D 0; i < the_values.length; i++) {
		if (the_values[i] =3D=3D '') {
			alert('You left one or more required fields blank.  ' +
				'Required fields are marked with asterisks.');
			return false;
		}
	}
	return true;
}

function checkBlankAndFocus(the_objects, the_values, the_fields) {
	for (i =3D 0; i < the_values.length; i++) {
		if (the_values[i] =3D=3D '') {
			alert('You left the \'' + the_fields[i] + '\' field blank.');
			the_objects[i].focus();
			return false;
		}
	}
	return true;
}

function isBlank(the_objects, the_fields) {
	for (i =3D 0; i < the_objects.length; i++) {
		if (the_objects[i].value =3D=3D '') {
			alert('You left the \'' + the_fields[i] + '\' field blank.');
			the_objects[i].focus();
			return false;
		}
	}
	return true;
}


function checkBlanks(the_objects, the_messages) {
	for (i =3D 0; i < the_objects.length; i++) {
		if (the_objects[i].value =3D=3D '') {
			alert('Please enter ' + the_messages[i] + ' field.');
			the_objects[i].focus();
			return false;
		}
	}
	return true;
}

function ifAnyFillAll(values, msg) {
	var oneExists =3D false;

	for (i =3D 0; i < values.length; i++) {

		if (values[i] !=3D '') {
 	   	oneExists =3D true;
			break;
		}
	}

	if (!oneExists) return true;
	for (i =3D 0; i < values.length; i++) {

		if (values[i] =3D=3D '') {
			alert(msg);
			return false;
		}
	}
	return true;
}

// Check: "@" and "." must exist
//        one or more "." but one "@"
function checkEmail(varname, varvalue, can_be_blank) {
	if (can_be_blank && varvalue =3D=3D '') return true;
=09
	if (varvalue.indexOf ('@',0) =3D=3D -1 || varvalue.indexOf ('.',0) =
=3D=3D -1) {
		alert('\nE-mail fields require that ' +
			  'a \'@\' and a \'.\' be used.\n\nPlease re-enter the e-mail =
address.');
		varname.focus();
		return false;
	}
=09
	if( varvalue.indexOf('@') < varvalue.lastIndexOf('@') ) {
		alert('E-mail fields only require one \'@\'.\n\nPlease re-enter the =
e-mail address.');
		varname.focus();
		return false;
	}
	=09
	var re =3D new RegExp('[-\\.\\w]+@[-\\.\\w]+(\\.\\w+)+$');
	var item =3D trim(varvalue);
=09
	if(!re.test(item)) {
		alert('Invalid e-mail address.\n\nPlease re-enter.');
		varname.focus();
		return false;
	}
=09
	return true;
}

function checkNum(varname, varvalue, msg, can_be_blank) {
	if (can_be_blank && varvalue =3D=3D '') return true;
	var myChar;
	var proceed =3D !(isNaN(varvalue));
	if (!proceed) {
		alert(msg);
		varname.focus();
		return false;
	}
	for (i =3D 0; i < varvalue.length; i++) {
		myChar =3D varvalue.charAt(i);
		if (myChar =3D=3D 'E' || myChar =3D=3D 'e') {
			alert(msg);
			varname.focus();
			return false;
		}
	}
	return true;
}

function checkNumber(varname, varvalue, fieldname, can_be_blank) {
	if (!can_be_blank) {
		if (varvalue =3D=3D '') {
			alert('The \'' + fieldname + '\' field can not be left blank.');
			varname.focus();
			return false;
		}
	}
	for (var i =3D 0; i < varvalue.length; i++) {
   	var c =3D varvalue.charAt(i);
      	if (!(parseFloat(c) >=3D 0) && !(parseFloat(c) <=3D 9) && c !=3D =
'.') {
         	alert('The \'' + fieldname + '\' field can only contain =
numerical digits and decimal points');
		  		varname.focus();
				return false;
        	}
   }
	return true;
}

function checkDecimal(varname, varvalue, fieldname, scale, can_be_blank) =
{
	var decimalPointPos;
	var decimalPointCount;
=09
	decimalPointCount =3D 0;
	decimalPointPos =3D -1;
=09
	if (!can_be_blank) {
		if (varvalue =3D=3D '') {
			alert('The \'' + fieldname + '\' field can not be left blank.');
			varname.focus();
			return false;
		}
	}
=09
	for (var i =3D 0; i < varvalue.length; i++) {
		var c =3D varvalue.charAt(i);
		if (!(parseFloat(c) >=3D 0) && !(parseFloat(c) <=3D 9) && c !=3D '.') =
{
			alert('The \'' + fieldname + '\' field can only contain numerical =
digits and decimal point');
			varname.focus();
			return false;
		} else if ( c =3D=3D '.') {
			decimalPointCount ++;
			decimalPointPos =3D i;
		}
	}

	if (decimalPointCount > 1) {
		alert('The \'' + fieldname + '\' field can only contain numerical =
digits and decimal point');
		varname.focus();
		return false;
	}
=09
	if ((decimalPointPos =3D=3D -1) || (decimalPointPos >=3D =
(varvalue.length - 1 - scale))) {
		return true;
	} else {
		alert('The \'' + fieldname + '\' field can only contain ' + scale + ' =
decimal positions');
		varname.focus();
		return false;
	}
}

function checkWholeNumber(varname, varvalue, msg, can_be_blank) {
=09
	if (can_be_blank && varvalue =3D=3D '') {
		return true;
	}
=09
	if (!can_be_blank && varvalue =3D=3D '') {
		alert(msg);
		varname.focus();
		return false;
	}
	var proceed =3D !(isNaN(varvalue));
	if (!proceed) {
		alert(msg);
		varname.focus();
		return false;
	}=09
  for (i =3D 0; i < varvalue.length; i++) {
    var c =3D varvalue.charAt(i);
    if (i =3D=3D 0 && varvalue.length > 1) {
      if (parseInt(c, 10) =3D=3D 0) {
          alert('All number fields should only contain numeric digits. ' =
+
					'Please do not enter commas, decimal points, dollar signs, negative =
numbers, and leading zeros.');
			  	varname.focus();
					return false;
			}
	  }
    if (!(parseInt(c, 10) >=3D 0) && !(parseInt(c, 10) <=3D 9)) {
	     alert('All number fields should only contain numeric digits. ' +
			 'Please do not enter commas, decimal points, dollar signs, negative =
numbers, and leading zeros.');
			  varname.focus();
				return false;
    }
   }
  return true;
}




function validNumberRange(htmlField, htmlFieldLabel, minNum, maxNum, =
canBeBlank) {

	var msg =3D 'The ' + htmlFieldLabel + ' field can only contain a number =
between ' +
		minNum + ' and ' + maxNum + '.';

	if (canBeBlank && htmlField.value =3D=3D '') return true;
	if (isNaN(htmlField.value)) {
		alert(msg);
		htmlField.focus();
		return false;
	}

	var num =3D parseFloat(htmlField.value);
	if (num < minNum || num > maxNum) {
		alert(msg);
		htmlField.focus();
		return false;
	}

	return true;

}

function isWholeNumber(the_numbers, the_fields, can_be_blanks) {
	for (var i =3D 0; i < the_numbers.length; i++) {
		if (can_be_blanks) {
			if (can_be_blanks[i] =3D=3D 'N') {
				if (the_numbers[i].value =3D=3D '') {
					alert('The \'' + the_fields[i] + '\' field can not be left =
blank.');
					the_numbers[i].focus();
					return false;
				}
			}
		}
		for (var j =3D 0; j < the_numbers[i].value.length; j++) {
	   	var c =3D the_numbers[i].value.charAt(j);
				if (j =3D=3D 0 && the_numbers[i].value.length > 1) {
					if (parseInt(c, 10) =3D=3D 0) {
						alert('All number fields should only contain numeric digits. ' +
							'Please do not enter commas, decimal points, dollar signs, =
negative numbers, and leading zeros.');
			  			the_numbers[i].focus();
						return false;
					}
				}
	      	if (!(parseInt(c, 10) >=3D 0) && !(parseInt(c, 10) <=3D 9)) {
	         	alert('All number fields should only contain numeric digits. =
' +
							'Please do not enter commas, decimal points, dollar signs, =
negative numbers, and leading zeros.');
			  		the_numbers[i].focus();
					return false;
	        	}
	   }

	}
	return true;
}

function hasQuote(fields) {

	for (i =3D 0; i < fields.length; i++) {

		if (fields[i].value.indexOf('\'') !=3D -1 ||
			fields[i].value.indexOf('\"') !=3D -1) {

			alert('Please do not enter single quotes or double quotes in search =
criteria fields.');
			fields[i].focus();
			return true;

		}
	}

	return false;
}

function convertDay(varday){
    var text=3D "";

   if(varday =3D=3D 1){
      text =3D "Monday";
   }else if (varday =3D=3D 2){
      text =3D "Tuesday";
   }else if (varday =3D=3D 3){
      text =3D "Wednesday";
   }else if (varday =3D=3D 4){
      text =3D "Thursday";
   }else if (varday =3D=3D 5){
      text =3D "Friday";
   }else if (varday =3D=3D 6){
      text =3D "Saturday";
   }else if (varday =3D=3D 7){
      text =3D "Sunday";
   }

  return text;
}

function convertMonth(varMonth){
  var month =3D"";

   if(varMonth =3D=3D 0){
     month =3D "January";
   }else if(varMonth =3D=3D 1){
     month =3D "February";
   }else if (varMonth =3D=3D 2){
     month =3D "March";
   }else if (varMonth =3D=3D 3){
     month =3D "April";
   }else if (varMonth =3D=3D 4){
     month =3D "May";
   }else if (varMonth =3D=3D 5){
     month =3D "June";
   } else if (varMonth =3D=3D 6){
     month =3D "July";
   } else if (varMonth =3D=3D 7){
     month =3D "August";
   } else if (varMonth =3D=3D 8){
     month =3D "September";
   } else if (varMonth =3D=3D 9){
     month =3D "October";
   } else if (varMonth =3D=3D 10){
     month =3D "November";
   } else if (varMonth =3D=3D 11){
     month =3D "December";
   }

   return month;
}

function trim(item) {
   var x =3D item;
   x =3D x.replace(/^\s*(.*)/, "$1");
   x =3D x.replace(/(.*?)\s*$/, "$1");
   return x;
}

function isDate(s){
	// make sure it is in the expected format
    if (s.search(/^\d{1,2}\/\d{1,2}\/\d{4}/g) !=3D 0)	=20
        return false;
=20
    // remove other separators that are not valid with the Date class
    s =3D s.replace(/[\-|\.|_]/g, "/");

    // convert it into a date instance
    var dt =3D new Date(Date.parse(s));
    // check the components of the date
    // since Date instance automatically rolls over each component
    var arrDateParts =3D s.split("/");
    return (
        dt.getMonth() =3D=3D arrDateParts[0]-1 &&
        dt.getDate() =3D=3D arrDateParts[1] &&
        dt.getFullYear() =3D=3D arrDateParts[2]);
=20
}

function isEmpty(value) {

    if (value =3D=3D undefined || value =3D=3D null || value =3D=3D '') =
{
       return true
    }=20

    return false=20
}
------=_NextPart_000_0000_01CB19D6.5CF336D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.grantsolutions.gov/gs/javascript/contactsAdder.js

function addContact(type) {
	var tbody =3D document.getElementById("body" + type);
	var nextRow =3D tbody.rows.length;
=09
	var totalRows =3D document.getElementById("bodyPhone").rows.length +
		document.getElementById("bodyEmail").rows.length;
	//append new row to table
	var row =3D tbody.insertRow(nextRow);
=09
	//first column - contact type + 2 hidden fields
	var col1 =3D row.insertCell(0);
	if (type =3D=3D 'Phone') {
		col1.setAttribute("headers", "phoneContactType");
	} else {
		col1.setAttribute("headers", "emailContactType");
	}
	var e1 =3D document.createElement("input");
	e1.setAttribute("type", "hidden");
	e1.setAttribute("name", "alt"+type);
	e1.setAttribute("value", totalRows);
	col1.appendChild(e1);
=09
	var e1a =3D document.createElement("input");
	e1a.setAttribute("type", "hidden");
	e1a.setAttribute("name", "alt"+type+"_"+totalRows);
	e1a.setAttribute("value", "false");
	col1.appendChild(e1a);
=09
	var sel1 =3D document.createElement("select");
	sel1.setAttribute("name", "contactType" + type + "_" + totalRows);
	sel1.options[0] =3D new Option("Work", "WORK");
	sel1.options[1] =3D new Option("Home", "HOME");
	if (type =3D=3D 'Phone') {
		sel1.options[2] =3D new Option("Mobile", "MOBILE");
	}
	col1.appendChild(sel1);
=09
	//second column - phone type
	if (type =3D=3D 'Phone') {
		var col2 =3D row.insertCell(1);
		col2.setAttribute("headers", "phoneType");
		var sel2 =3D document.createElement("select");
		sel2.setAttribute("name", "phoneType" + "_" + totalRows);
		sel2.options[0] =3D new Option("Voice", "VOICE");
		sel2.options[1] =3D new Option("Fax", "FAX");
		sel2.options[2] =3D new Option("TTY", "TTY");
		sel2.options[3] =3D new Option("Other", "OTHER");
		col2.appendChild(sel2);
	}
=09
	//third column - value
	var col3;
	if (type =3D=3D 'Phone') {
		col3=3D row.insertCell(2);
		col3.setAttribute("headers", "phoneValue");
	} else {
		col3 =3D row.insertCell(1);
		col3.setAttribute("headers", "emailValue");
	}
	var e2 =3D document.createElement("input");
	e2.setAttribute("type", "text");
	e2.setAttribute("name", type + "_" + totalRows);
	e2.setAttribute("value", "");
	e2.setAttribute("id", type + "_" + totalRows);
	if (type =3D=3D 'Phone') {
		e2.setAttribute("maxlength", "20");
	} else {
		e2.setAttribute("maxlength", "55");
	}
	col3.appendChild(e2);
=09
	//fourth column - primary
	var col4;
	if (type =3D=3D 'Phone') {
		col4 =3D row.insertCell(3);
		col4.setAttribute("headers", "primaryPhone");
	} else {
		col4 =3D row.insertCell(2);
		col4.setAttribute("headers", "primaryEmail");
	}
	col4.setAttribute("align", "center");
	var e3 =3D document.createElement("input");
	e3.setAttribute("type", "radio");
	if (type =3D=3D "Phone") {
		e3.setAttribute("name", "primaryPhoneNumber.id");
	} else {
		e3.setAttribute("name", "primaryEmailAddress.id");
	}
	e3.setAttribute("value", totalRows);
	if (nextRow =3D=3D 0) {
		e3.setAttribute("selected", "selected");
	}
	col4.appendChild(e3);
=09
	//fifth column - preferred
	var col5;
	if (type =3D=3D 'Phone') {
		col5 =3D row.insertCell(4);
		col5.setAttribute("headers", "preferredPhone");
	} else {
		col5 =3D row.insertCell(3);
		col5.setAttribute("headers", "preferredEmail");
	}
	col5.setAttribute("align", "center");
	var e4 =3D document.createElement("input");
	e4.setAttribute("type", "radio");
	e4.setAttribute("name", "preferredContact.id");
	e4.setAttribute("value", totalRows);
	if (nextRow =3D=3D 0) {
		e4.setAttribute("selected", "selected");
	}
	col5.appendChild(e4);
=09
	//sixth column - delete
	var col6;
	if (type =3D=3D 'Phone') {
		col6 =3D row.insertCell(5);
		col6.setAttribute("headers", "deletePhone");
	} else {
		col6 =3D row.insertCell(4);
		col6.setAttribute("headers", "deleteEmail");
	}
	col6.setAttribute("align", "center");
	var e5 =3D document.createElement("input");
	e5.setAttribute("type", "checkbox");
	e5.setAttribute("name", "delete" + type);
	e5.setAttribute("value", totalRows);
	col6.appendChild(e5);

}

function countryChanged(obj) {
	var country =3D obj.options[obj.selectedIndex].value;
=09
	if (country =3D=3D 'USA') {
		document.getElementById("usstate").style.display =3D "";
		document.getElementById("uszip").style.display =3D "";
		document.getElementById("foreignProvince").style.display =3D "none";
		document.getElementById("foreignZip").style.display =3D "none";
	} else {
		document.getElementById("usstate").style.display =3D "none";
		document.getElementById("uszip").style.display =3D "none";
		document.getElementById("foreignProvince").style.display =3D "";
		document.getElementById("foreignZip").style.display =3D "";
=09
	}


}

function validateContacts() {
	var inputs =3D document.getElementsByTagName("INPUT");
	var preferredId;
	var primaryPhone;
	var primaryEmail;
=09
	//preferred contact
	for (var i=3D0;i<inputs.length;i++) {
		if (inputs[i].type =3D=3D "radio" && inputs[i].name =3D=3D =
"preferredContact.id" &&
			inputs[i].checked) {
			preferredId =3D document.getElementById(inputs[i].id).value;
			break;
		}
	}
	//primary phone
	for (var i=3D0;i<inputs.length;i++) {
		if (inputs[i].type =3D=3D "radio" && inputs[i].name =3D=3D =
"primaryPhoneNumber.id" &&
			inputs[i].checked) {
			primaryPhone =3D document.getElementById(inputs[i].id).value;
			break;
		}
	}
	for (var i=3D0;i<inputs.length;i++) {
		if (inputs[i].type =3D=3D "radio" && inputs[i].name =3D=3D =
"primaryEmailAddress.id" &&
			inputs[i].checked) {
			primaryEmail =3D document.getElementById(inputs[i].id).value;
			break;
		}
	}

	if (preferredId !=3D primaryPhone && preferredId !=3D primaryEmail) {
		alert("The Preferred Contact must be the Primary Phone or the Primary =
Email Address");
		return false;
	}
	for (var i=3D0;i<inputs.length;i++) {
		if (inputs[i].type =3D=3D "checkbox" && inputs[i].name =3D=3D =
"deletePhone" &&
			inputs[i].checked) {
			if (inputs[i].value =3D=3D preferredId) {
				alert("The Preferred Contact cannot be deleted");
				return false;
			} else if (inputs[i].value =3D=3D primaryPhone) {
				alert("The Primary Phone cannot be deleted");
				return false;
			}
		} else if (inputs[i].type =3D=3D "checkbox" && inputs[i].name =3D=3D =
"deleteEmail" &&
			inputs[i].checked) {
			if (inputs[i].value =3D=3D preferredId) {
				alert("The Preferred Contact cannot be deleted");
				return false;
			} else if (inputs[i].value =3D=3D primaryEmail) {
				alert("The Primary Email Address cannot be deleted");
				return false;
			}
		} else if (inputs[i].type =3D=3D "text" && =
inputs[i].name.indexOf("Phone_") =3D=3D 0) {
			var phoneNumber =3D inputs[i].value;
			AddEditPerson.validatePhone(phoneNumber, {
			callback:function(data) {
				dwr.util.setValue("validationResult", data);
				}
			});
			if (dwr.util.getValue("validationResult") =3D=3D "false") {
				alert ("Invalid phone number");
				setTimeout("document.getElementById('" + inputs[i].id + =
"').focus()",1000);
				return false;
			}
		} else if (inputs[i].type =3D=3D "text" && =
inputs[i].name.indexOf("Email_") =3D=3D 0) {
			var email =3D inputs[i].value;
			AddEditPerson.validateEmail(email, {
			callback:function(data) {
				dwr.util.setValue("validationResult", data);
				}
			});
			if (dwr.util.getValue("validationResult") =3D=3D "false") {
				alert ("Invalid email address");
				setTimeout("document.getElementById('" + inputs[i].id + =
"').focus()",1000);
				return false;
			}
		}
	}
=09
=09
	return true;
}


------=_NextPart_000_0000_01CB19D6.5CF336D0--

