From: "Saved by Windows Internet Explorer 8"
Subject: Bonds Career Center Interest Form
Date: Mon, 23 Jan 2012 09:12:52 -0500
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01CCD9AF.2F84AC70"
X-MimeOLE: Produced By Microsoft MimeOLE V6.1.7601.17609

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CCD9AF.2F84AC70
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.greenville.k12.sc.us/gcsd/schools/forms_career/bonds.asp

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>Bonds Career =
Center Interest Form</TITLE>
<META content=3D"text/html; charset=3Dutf-8" =
http-equiv=3DContent-Type><LINK=20
rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.greenville.k12.sc.us/gcsd/schools/forms_career/cc_styl=
e.css">
<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.greenville.k12.sc.us/gcsd/schools/forms_career/SpryVali=
dationTextField.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.greenville.k12.sc.us/gcsd/schools/forms_career/SpryVali=
dationSelect.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.greenville.k12.sc.us/gcsd/schools/forms_career/SpryVali=
dationTextarea.js"></SCRIPT>
<LINK rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.greenville.k12.sc.us/gcsd/schools/forms_career/SpryVal=
idationTextField.css"><LINK=20
rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.greenville.k12.sc.us/gcsd/schools/forms_career/SpryVal=
idationSelect.css"><LINK=20
rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.greenville.k12.sc.us/gcsd/schools/forms_career/SpryVal=
idationTextarea.css">
<META name=3DGENERATOR content=3D"MSHTML 8.00.7601.17699"></HEAD>
<BODY>
<DIV id=3Dcontainer>
<H2>J. Harley Bonds Career Center Application 2012-13</H2>
<P>This application shows your interest in the course but does not =
register you=20
for the course. Check with your&nbsp;Counselor for information about how =
to=20
indicate that you would like to take a course at Bonds in the Student=20
Registration System. You will be notified via the email address provided =
on this=20
application regarding your acceptance to the career center.&nbsp;</P>Any =

student, NEW or RETURNING, who is interested in attending Bonds Career =
Center=20
during the 2012-13 school year MUST complete this application.&nbsp;=20
<FORM id=3Dform1 onsubmit=3D"return CheckRequiredFields()" method=3Dget =
name=3Dform1=20
action=3D../../../cgi-bin/formmail.asp><BR>
<P><LABEL>Last Name:<SPAN id=3Dsprytextfield2> <INPUT id=3D"Last Name"=20
name=3D"Last Name"> <SPAN class=3DtextfieldRequiredMsg>A value is=20
required.</SPAN></SPAN></LABEL> =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;First Name:=20
<SPAN id=3Dsprytextfield3><LABEL><INPUT id=3D"First Name" name=3D"First =
Name">=20
</LABEL><SPAN class=3DtextfieldRequiredMsg>A value is=20
required.</SPAN></SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Middle =
Name:<SPAN=20
id=3Dsprytextfield6> <LABEL><INPUT id=3D"Middle Name" name=3D"Middle =
Name">=20
</LABEL></SPAN></P>
<P>Mailing Address: <SPAN id=3Dsprytextfield1><LABEL><INPUT id=3DStreet =
name=3DStreet>=20
</LABEL><SPAN class=3DtextfieldRequiredMsg>A value is=20
required.</SPAN></SPAN>&nbsp;&nbsp;&nbsp;City: <SPAN=20
id=3Dsprytextfield4><LABEL><INPUT id=3DCity name=3DCity> </LABEL><SPAN=20
class=3DtextfieldRequiredMsg>A value is=20
required.</SPAN></SPAN>&nbsp;&nbsp;State:<SPAN id=3Dsprytextfield7> =
<LABEL><INPUT=20
id=3DState name=3DState> </LABEL></SPAN>&nbsp;&nbsp;Zip:<SPAN =
id=3Dsprytextfield5>=20
<LABEL><INPUT id=3DZip name=3DZip> </LABEL><SPAN =
class=3DtextfieldRequiredMsg>A value=20
is required.</SPAN></SPAN></P>
<P>Home School: <LABEL><SPAN id=3Dspryselect1><SPAN =
class=3DselectRequiredMsg>Please=20
select an item.</SPAN></SPAN> <SELECT id=3DHSCHOOL size=3D1 =
name=3DSchool> <OPTION=20
  selected value=3D"Choose One">Choose One</OPTION> <OPTION>Berea =
High</OPTION>=20
  <OPTION>Blue Ridge High</OPTION> <OPTION>Carolina High</OPTION>=20
  <OPTION>Eastside High</OPTION> <OPTION>Greenville High</OPTION> =
<OPTION>Greer=20
  High</OPTION> <OPTION>Hillcrest High</OPTION> <OPTION>JL Mann =
High</OPTION>=20
  <OPTION>Mauldin High</OPTION> <OPTION>Riverside High</OPTION>=20
  <OPTION>Southside High</OPTION> <OPTION>TR High</OPTION> <OPTION>Wade =
Hampton=20
  High</OPTION> <OPTION>Woodmont High</OPTION> <OPTION>Charter =
School</OPTION>=20
  <OPTION>Home School</OPTION> <OPTION>Private School</OPTION></SELECT>=20
</LABEL>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Curre=
nt=20
Grade: <SPAN id=3Dspryselect2><LABEL><SELECT id=3DGrade name=3DGrade> =
<OPTION=20
  selected>Choose One</OPTION> <OPTION value=3D8>8</OPTION> <OPTION=20
  value=3D9>9</OPTION> <OPTION value=3D10>10</OPTION> <OPTION =
value=3D11>11</OPTION>=20
  <OPTION value=3D12>12</OPTION></SELECT> </LABEL><SPAN=20
class=3DselectRequiredMsg>Please select an=20
item.</SPAN></SPAN>&nbsp;&nbsp;&nbsp;&nbsp;Email Address: <LABEL><SPAN=20
id=3Dsprytextfield9><INPUT id=3D"Student Email" size=3D40 =
name=3D"Student Email"> <SPAN=20
class=3DtextfieldRequiredMsg>A value is required.</SPAN></SPAN></LABEL> =
</P>
<P>Home Phone:<SPAN id=3Dsprytextfield14> <LABEL><INPUT id=3D"Home =
Phone"=20
name=3D"Home Phone">=20
</LABEL></SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Student Cell=20
Phone:<SPAN id=3Dsprytextfield8> <LABEL><INPUT id=3D"Student Cell"=20
name=3D"Student Cell"> </LABEL></SPAN></P>
<DIV class=3Dspecial align=3Dright>Be sure to check this email account =
frequently=20
for correspondence from the career center. </DIV>
<P>&nbsp;</P>
<P>Father's Name:<SPAN id=3Dsprytextfield10> <LABEL><INPUT id=3DFather =
name=3DFather>=20
</LABEL></SPAN>&nbsp; Father's Cell Phone <SPAN =
id=3Dsprytextfield11><LABEL><INPUT=20
id=3D"Father's Cell" name=3D"Father's Cell"> </LABEL></SPAN>&nbsp;</P>
<P>Mother's Name<SPAN id=3Dsprytextfield12> <LABEL><INPUT id=3DMother =
name=3DMother>=20
</LABEL></SPAN>&nbsp;&nbsp;Mother's Cell Phone <SPAN=20
id=3Dsprytextfield13><LABEL><INPUT id=3D"Mother's Cell" name=3D"Mother's =
Cell">=20
</LABEL></SPAN></P>
<P>Courses Offered; View the table below, select your top two choices, =
answer=20
the questions below, then enter the security code, then click =
=E2=80=9CSubmit.=E2=80=9D</P>
<P>First Choice: <LABEL><SPAN id=3Dspryselect3><SPAN=20
class=3DselectRequiredMsg>Please select an item.</SPAN></SPAN> <SELECT=20
id=3D"First Choice" name=3DFirst_Choice> <OPTION selected>First =
Choice</OPTION>=20
  <OPTION value=3D"Animal Science 1A/1B">Animal Science 1A/1B</OPTION> =
<OPTION=20
  value=3D"Animation Foundations/Advanced Animation ">Animation=20
  Foundations/Advanced Animation</OPTION> <OPTION=20
  value=3D"Automotive Technology 1A/1B ">Automotive Technology =
1A/1B</OPTION>=20
  <OPTION value=3D"Automotive Technology 1C/1D ">Automotive Technology=20
  1C/1D</OPTION> <OPTION value=3D"Biomedical Science: year 1 =
(PBS/HBS)">Biomedical=20
  Science: year 1 (PBS/HBS)</OPTION> <OPTION=20
  value=3D"Biomedical Science: year 2 (MI/BI)">Biomedical Science: year =
2=20
  (MI/BI)</OPTION> <OPTION value=3D"Building Construction =
1A/1B">Building=20
  Construction 1A/1B</OPTION> <OPTION=20
  value=3D"Building Construction 2A/2B ">Building Construction =
2A/2B</OPTION>=20
  <OPTION value=3D"CADD: Mechanical Design1A/Architecture =
Design1A">CADD:=20
  Mechanical Design1A/Architecture Design1A</OPTION> <OPTION=20
  value=3D"Computer Service Technology 1A/1B ">Computer Service =
Technology=20
  1A/1B</OPTION> <OPTION value=3D"Computer Service Technology =
2A/2B">Computer=20
  Service Technology 2A/2B</OPTION> <OPTION=20
  value=3D"Cosmetology 1A/1B">Cosmetology 1A/1B</OPTION> <OPTION=20
  value=3D"Cosmetology 2A/2B">Cosmetology 2A/2B</OPTION> <OPTION=20
  value=3D"Culinary Arts 1A/1B">Culinary Arts 1A/1B</OPTION> <OPTION=20
  value=3D"Culinary Arts 2A/2B">Culinary Arts 2A/2B</OPTION> <OPTION=20
  value=3D"Esthetics 1A/1B">Esthetics 1A/1B</OPTION> <OPTION=20
  value=3D"Health Science =E2=80=93 MUST select specific course(s) =
below">Health Science =E2=80=93=20
  MUST select specific course(s) below</OPTION> <OPTION=20
  value=3D"Horticulture 1A/1B">Horticulture 1A/1B</OPTION> <OPTION=20
  value=3D"Machine Tool Technology 1A/1B">Machine Tool Technology =
1A/1B</OPTION>=20
  <OPTION value=3D"Machine Tool Technology 2A/2B">Machine Tool =
Technology=20
  2A/2B</OPTION> <OPTION value=3D"Mechatronics Engineering =
1A/1B">Mechatronics=20
  Engineering 1A/1B</OPTION> <OPTION=20
  value=3D"Mechatronics Engineering 2A/2B ">Mechatronics Engineering=20
  2A/2B</OPTION> <OPTION value=3D"Webpage Design 1A/1B">Webpage Design=20
  1A/1B</OPTION> <OPTION value=3D"Welding Technology 1A/1B">Welding =
Technology=20
  1A/1B</OPTION> <OPTION value=3D"Welding Technology 2A/2B">Welding =
Technology=20
  2A/2B</OPTION></SELECT></LABEL> </P>
<P>Second Choice: <SPAN id=3Dspryselect4><SPAN =
class=3DselectRequiredMsg>Please=20
select an item.</SPAN></SPAN> <SELECT id=3D"Second Choice2" =
name=3D"Second Choice">=20
  <OPTION selected>Second Choice</OPTION> <OPTION=20
  value=3D"Animal Science 1A/1B">Animal Science 1A/1B</OPTION> <OPTION=20
  value=3D"Animation Foundations/Advanced Animation ">Animation=20
  Foundations/Advanced Animation</OPTION> <OPTION=20
  value=3D"Automotive Technology 1A/1B ">Automotive Technology =
1A/1B</OPTION>=20
  <OPTION value=3D"Automotive Technology 1C/1D ">Automotive Technology=20
  1C/1D</OPTION> <OPTION value=3D"Biomedical Science: year 1 =
(PBS/HBS)">Biomedical=20
  Science: year 1 (PBS/HBS)</OPTION> <OPTION=20
  value=3D"Biomedical Science: year 2 (MI/BI)">Biomedical Science: year =
2=20
  (MI/BI)</OPTION> <OPTION value=3D"Building Construction =
1A/1B">Building=20
  Construction 1A/1B</OPTION> <OPTION=20
  value=3D"Building Construction 2A/2B ">Building Construction =
2A/2B</OPTION>=20
  <OPTION value=3D"CADD: Mechanical Design1A/Architecture =
Design1A">CADD:=20
  Mechanical Design1A/Architecture Design1A</OPTION> <OPTION=20
  value=3D"Computer Service Technology 1A/1B ">Computer Service =
Technology=20
  1A/1B</OPTION> <OPTION value=3D"Computer Service Technology =
2A/2B">Computer=20
  Service Technology 2A/2B</OPTION> <OPTION=20
  value=3D"Cosmetology 1A/1B">Cosmetology 1A/1B</OPTION> <OPTION=20
  value=3D"Cosmetology 2A/2B">Cosmetology 2A/2B</OPTION> <OPTION=20
  value=3D"Culinary Arts 1A/1B">Culinary Arts 1A/1B</OPTION> <OPTION=20
  value=3D"Culinary Arts 2A/2B">Culinary Arts 2A/2B</OPTION> <OPTION=20
  value=3D"Esthetics 1A/1B">Esthetics 1A/1B</OPTION> <OPTION=20
  value=3D"Health Science =E2=80=93 MUST select specific course(s) =
below">Health Science =E2=80=93=20
  MUST select specific course(s) below</OPTION> <OPTION=20
  value=3D"Horticulture 1A/1B">Horticulture 1A/1B</OPTION> <OPTION=20
  value=3D"Machine Tool Technology 1A/1B">Machine Tool Technology =
1A/1B</OPTION>=20
  <OPTION value=3D"Machine Tool Technology 2A/2B">Machine Tool =
Technology=20
  2A/2B</OPTION> <OPTION value=3D"Mechatronics Engineering =
1A/1B">Mechatronics=20
  Engineering 1A/1B</OPTION> <OPTION=20
  value=3D"Mechatronics Engineering 2A/2B ">Mechatronics Engineering=20
  2A/2B</OPTION> <OPTION value=3D"Webpage Design 1A/1B">Webpage Design=20
  1A/1B</OPTION> <OPTION value=3D"Welding Technology 1A/1B">Welding =
Technology=20
  1A/1B</OPTION> <OPTION value=3D"Welding Technology 2A/2B">Welding =
Technology=20
  2A/2B</OPTION> <OPTION value=3D"I=E2=80=99m ONLY interested in my =
FIRST choice">I=E2=80=99m ONLY=20
  interested in my FIRST choice</OPTION></SELECT> </P>
<P>If Health Science is your program choice, please select one of the =
following=20
courses of study:<SPAN id=3Dspryselect5> <LABEL =
for=3DIfHealth></LABEL><SELECT=20
id=3DIfHealth name=3DIfHealth> <OPTION selected>CHOOSE ONE ONLY IF =
INTERESTED IN=20
  HEALTH SCIENCE</OPTION> <OPTION=20
  value=3D"Intro to Health Sci  ONLY:  for rising 10th graders ">Intro =
to Health=20
  Sci ONLY: for rising 10th graders</OPTION> <OPTION=20
  value=3D"Intro to Health Sci / Anatomy in Clay">Intro to Health Sci / =
Anatomy in=20
  Clay</OPTION> <OPTION value=3D"Intro to Health Sci / Sports Medicine =
1">Intro to=20
  Health Sci / Sports Medicine 1</OPTION> <OPTION=20
  value=3D"Intro to Health Sci / Medical Terminology">Intro to Health =
Sci /=20
  Medical Terminology</OPTION> <OPTION=20
  value=3D"Intro / CNA (12th graders who have not previously taken =
Health Science at Bonds) ">Intro=20
  / CNA (12th graders who have not previously taken Health Science at=20
  Bonds)</OPTION> <OPTION=20
  value=3D"I am a returning Bonds Health Science student and will =
discuss course options with my teacher. ">I=20
  am a returning Bonds Health Science student and will discuss course =
options=20
  with my teacher.</OPTION></SELECT> <SPAN =
class=3DselectRequiredMsg>Please select=20
an item.</SPAN></SPAN> </P>
<TABLE class=3Dtdgrnlt border=3D1 cellSpacing=3D0 cellPadding=3D2 =
width=3D800=20
align=3Dcenter>
  <TBODY>
  <TR>
    <TD vAlign=3Dtop width=3D"50%">
      <UL>
        <LI>Animal Science 1A/1B $135=20
        <LI>Animation Foundations/Advanced Animation (EC)&nbsp; $55=20
        <LI>Automotive Technology 1A/1B (EC)&nbsp; $340=20
        <LI>Automotive Technology 1C/1D (EC)&nbsp; $50=20
        <LI>Building Construction 1A/1B (EC)&nbsp; $123=20
        <LI>Building Construction 2A/2B (EC) $60=20
        <LI>CADD: Mechanical Design1A/Architecture Design1A (EC)&nbsp; =
$55=20
        <LI>Computer Service Technology 1A/1B (EC)&nbsp;$50=20
        <LI>Computer Service Technology 2A/2B (EC) $50=20
        <LI>Cosmetology 1A/1B&nbsp; $300=20
        <LI>Cosmetology 2A/2B&nbsp;$180 for state board exam=20
        <LI>Culinary Arts 1A/1B (EC)&nbsp;$130=20
        <LI>Culinary Arts 2A/2B (EC) $130=20
        <LI>Esthetics 1A/1B&nbsp;&nbsp; $340 (+ $165 state board exam)=20
        <LI>Horticulture 1A/1B&nbsp; $55=20
        <LI>Machine Tool Technology 1A/1B (EC)&nbsp;&nbsp;$55=20
        <LI>Machine Tool Technology 2A/2B (EC)&nbsp;&nbsp;$55=20
        <LI>Mechatronics Engineering 1A/1B (EC)&nbsp; $55=20
        <LI>Mechatronics Engineering 2A/2B (EC)&nbsp; $55=20
        <LI>Webpage Design 1A/1B (EC) &nbsp;$55=20
        <LI>Welding Technology 1A/1B (EC)&nbsp;&nbsp; $125=20
        <LI>Welding Technology 2A/2B (EC)&nbsp;&nbsp; $50 =
</LI></UL></TD>
    <TD vAlign=3Dtop width=3D"50%">
      <P><STRONG>Health Science: </STRONG>(H) &nbsp;one time $60 =
approximate=20
      cost per year</P>
      <UL>
        <LI>Gerontology (Certified Nursing Assistant:12th grade only, =
2nd sem=20
        $165)=20
        <LI>Health Science 2A (Anatomy in Clay) &nbsp;&nbsp;=20
        <LI>Intro to Health Science Technology (1st health sci course)=20
        <LI>Medical Terminology &nbsp;&nbsp;=20
        <LI>Pharmacy Technician &nbsp;&nbsp;(12th grade only, $250)=20
        <LI>Sports Medicine I &nbsp;&nbsp;=20
        <LI>Sports Medicine II </LI></UL>
      <P><STRONG>Biomedical Science (PLTW) </STRONG>one time $85 approx =
cost per=20
      year</P>
      <UL>
        <LI>Principles of Biomedical Science&nbsp; (1st sem, year 1)=20
        <LI>Human Body Systems (2nd sem, year 1) =
&nbsp;&nbsp;&nbsp;&nbsp;=20
        <LI>Medical Intervention (H)&nbsp; (1st sem, year 2)=20
        <LI>Biomedical Innovations (H)&nbsp; (2nd&nbsp; sem, year 2)=20
  </LI></UL></TD></TR>
  <TR>
    <TD vAlign=3Dtop colSpan=3D2>
      <P>Approximate associated costs are listed beside each program and =
are=20
      subject to change.&nbsp; The associated costs listed include the =
annual=20
      SkillsUSA membership fee, cost of professional dress, and cost of =
other=20
      supplies and student organization membership fee, if =
applicable.&nbsp;=20
</P>
      <P>(H)&nbsp; Courses in this program offer an introductory course. =
Each=20
      course <STRONG>following</STRONG> the introductory course will be =
offered=20
      at&nbsp; an honors level.&nbsp; </P>
      <P>(EC) Indicates that early college credit is available.&nbsp; =
Student=20
      must take the Greenville Tech ASSET, meet qualifying scores, =
&nbsp;and=20
      turn in appropriate paperwork to receive early college =
credit.&nbsp; If=20
      all students do not qualify for early college in a particular =
class, the=20
      course may not be offered with early college credit. Courses =
offered for=20
      early college credit offer a GPA weight equivalent to an AP or IB=20
      course.</P></TD></TR></TBODY></TABLE>
<P>Why do you want to attend Bonds Career Center? <LABEL><SPAN =
id=3Dsprytextarea1><TEXTAREA id=3D"Why Attend?" cols=3D70 name=3D"Why =
Attend?"></TEXTAREA>=20
</SPAN><BR></LABEL></P>
<P>Why are you interested in the class you have selected?<SPAN =
id=3Dsprytextarea2>=20
<LABEL><TEXTAREA id=3D"Why Class?" cols=3D66 name=3D"Why =
Class?"></TEXTAREA>=20
</LABEL></SPAN></P>
<P>What are your plans after high school?<SPAN id=3Dsprytextarea3> =
<LABEL><TEXTAREA id=3DPlans? cols=3D77 name=3DPlans?></TEXTAREA> =
</LABEL></SPAN></P>
<P>What is your ultimate career goal and how will attending Bonds help =
you reach=20
your goal?<SPAN id=3Dsprytextarea4> <LABEL><TEXTAREA id=3DGoals? =
cols=3D42 name=3DGoals?></TEXTAREA> </LABEL></SPAN></P>
<P>Comments:<SPAN id=3Dsprytextarea5> <LABEL><TEXTAREA id=3DComments =
cols=3D100 name=3DComments></TEXTAREA>=20
</LABEL></SPAN></P>
<P><IMG id=3Dcaptchaimg border=3D0 alt=3D"security code"=20
src=3D"http://www.greenville.k12.sc.us/HDWASPFormCaptcha/ASPFormCaptcha.a=
sp?width=3D180&amp;height=3D60&amp;letter_count=3D5&amp;min_size=3D14&amp=
;distort=3D1&amp;rcolor=3D0&amp;noise=3D2&amp;ncolor=3DCC6666&amp;bcolor=3D=
ffffff&amp;tcolor=3D000000"=20
width=3D180 height=3D60><BR>Enter Security Code:<BR><INPUT =
id=3Dhdcaptcha=20
name=3Dhdcaptcha> <BR>
<SCRIPT type=3Dtext/javascript>function HDW_getCookie(name){  var cname =
=3D name + "=3D";var dc =3D document.cookie; dc =3D =
dc.replace(/%5F/g,"_"); if(dc.length > 0) {begin =3D dc.indexOf(cname); =
if (begin !=3D -1) {begin +=3D cname.length; end =3D dc.indexOf(";", =
begin); if(end =3D=3D -1) end =3D dc.length; var rt =3D =
dc.substring(begin, end); rt =3D rt.replace(/\+/g," "); return =
unescape(rt); } } return null;}try {var items =3D =
document.getElementsByTagName("input");for(i=3D0;i < items.length;i++)if =
(items[i].name !=3D "hdcaptcha" && items[i].name !=3D "hdwfail" )try{var =
ck =3D HDW_getCookie("hdw"+items[i].name);if (ck !=3D "" && ck !=3D =
null){if (items[i].type =3D=3D "checkbox")items[i].checked =3D true;else =
if (items[i].type =3D=3D "radio" && items[i].value =3D=3D =
ck)items[i].checked =3D true; else items[i].value =3D ck;}} catch (e) =
{}var items =3D document.getElementsByTagName("select");for(i=3D0;i < =
items.length;i++)try{var ck =3D HDW_getCookie("hdw"+items[i].name);if =
(ck !=3D "" && ck !=3D null){for (j=3D0;j < items[i].length;j++)if =
(items[i].options[j].value =3D=3D ck)items[i].selectedIndex =3D j;  }} =
catch (e) {}var items =3D =
document.getElementsByTagName("textarea");for(i=3D0;i < =
items.length;i++)try{var ck =3D HDW_getCookie("hdw"+items[i].name);if =
(ck !=3D "" && ck !=3D null)items[i].value =3D ck;} catch (e) {}} catch =
(e) {}</SCRIPT>
</P>
<P><INPUT id=3Dsubmin value=3DSubmit type=3Dsubmit name=3Dsubmit> <INPUT =
id=3Dreset value=3DReset type=3Dreset name=3Dreset> </P><INPUT =
value=3D1/23/2012=20
type=3Dhidden name=3DDATE> <INPUT id=3Drecipient =
value=3Dapplyatbcc@greenville.k12.sc.us=20
type=3Dhidden name=3Drecipient> <INPUT id=3Dsubject value=3D"2011-12 Web =
Application"=20
type=3Dhidden name=3Dsubject> <INPUT id=3Dredirect=20
value=3D/gcsd/schools/forms_career/bonds2.asp type=3Dhidden =
name=3Dredirect> <INPUT=20
id=3Drequired value=3Demail type=3Dhidden name=3Drequired> <INPUT =
id=3Dhdwfail=20
value=3D/gcsd/schools/forms_career/bonds_error.asp type=3Dhidden =
name=3Dhdwfail>=20
</FORM></DIV>
<SCRIPT type=3Dtext/javascript>
<!--
var sprytextfield2 =3D new =
Spry.Widget.ValidationTextField("sprytextfield2");
var sprytextfield3 =3D new =
Spry.Widget.ValidationTextField("sprytextfield3");
var spryselect1 =3D new Spry.Widget.ValidationSelect("spryselect1");
var sprytextfield1 =3D new =
Spry.Widget.ValidationTextField("sprytextfield1");
var sprytextfield4 =3D new =
Spry.Widget.ValidationTextField("sprytextfield4");
var sprytextfield5 =3D new =
Spry.Widget.ValidationTextField("sprytextfield5");
var spryselect3 =3D new Spry.Widget.ValidationSelect("spryselect3");
var spryselect2 =3D new Spry.Widget.ValidationSelect("spryselect2");
var sprytextfield6 =3D new =
Spry.Widget.ValidationTextField("sprytextfield6", "none", =
{isRequired:false});
var sprytextfield7 =3D new =
Spry.Widget.ValidationTextField("sprytextfield7", "none", =
{isRequired:false});
var sprytextfield10 =3D new =
Spry.Widget.ValidationTextField("sprytextfield10", "none", =
{isRequired:false});
var sprytextfield11 =3D new =
Spry.Widget.ValidationTextField("sprytextfield11", "none", =
{isRequired:false});
var sprytextfield12 =3D new =
Spry.Widget.ValidationTextField("sprytextfield12", "none", =
{isRequired:false});
var sprytextfield13 =3D new =
Spry.Widget.ValidationTextField("sprytextfield13", "none", =
{isRequired:false});
var sprytextarea5 =3D new =
Spry.Widget.ValidationTextarea("sprytextarea5", {isRequired:false});
var sprytextarea4 =3D new =
Spry.Widget.ValidationTextarea("sprytextarea4", {isRequired:false});
var sprytextarea3 =3D new =
Spry.Widget.ValidationTextarea("sprytextarea3", {isRequired:false});
var sprytextarea1 =3D new =
Spry.Widget.ValidationTextarea("sprytextarea1", {isRequired:false});
var sprytextarea2 =3D new =
Spry.Widget.ValidationTextarea("sprytextarea2", {isRequired:false});
var sprytextfield8 =3D new =
Spry.Widget.ValidationTextField("sprytextfield8", "none", =
{isRequired:false});
var sprytextfield9 =3D new =
Spry.Widget.ValidationTextField("sprytextfield9");
var spryselect5 =3D new Spry.Widget.ValidationSelect("spryselect5");
//-->
</SCRIPT>
</BODY></HTML>

------=_NextPart_000_0000_01CCD9AF.2F84AC70
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.greenville.k12.sc.us/HDWASPFormCaptcha/ASPFormCaptcha.asp?width=180&height=60&letter_count=5&min_size=14&distort=1&rcolor=0&noise=2&ncolor=CC6666&bcolor=ffffff&tcolor=000000

Qk2MFQAAAAAAADYAAAAoAAAAsgAAADwAAAABABgAAAAAAFYVAAASCwAAEgsAAAAAAAAAAAAA////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
ZmbM////////////////////////////////////////////////////////////////////ZmbM
////////////////////ZmbM////////////////////////ZmbM////ZmbM////////////////
////ZmbM////////////////////////////////////////////////////////////////////
////ZmbM////ZmbM////ZmbM////////////ZmbMZmbM////////////////////////////////
////ZmbM////////////////ZmbM////////////////ZmbM////////////////////ZmbM////
////////////ZmbM////////////////////////////////ZmbM////////////////////////
////////////////////////////ZmbM////////ZmbM////////////////////////ZmbM////
////ZmbMZmbM////////////AAD///9mZsz///////////////////////////////9mZsxmZsz/
//////////////////////////9mZsxmZsz///////////////////////////9mZsxmZsz/////
//////////////////////////////////////////////////9mZsz///////////9mZsz/////
//////////////9mZsz///////9mZsz///////9mZsz///////////////////////////9mZsz/
//////////////////////9mZsz/////////////////////////////////////////////////
//////////9mZsz/////////////////////////////////////////////////////////////
//////////////////////9mZsxmZsz///////////////////9mZsz/////////////////////
//////////////////9mZsz///////////////////9mZsz/////////////////////////////
//////////////////////////////////9mZsz/////////////////////////////////////
//////////////////////////////////////////////////////8AAP///////////2ZmzP//
/////////2ZmzP///////////////2ZmzP///////////2ZmzP///////////////2ZmzP//////
/////2ZmzP///////////////2ZmzP///////////////2ZmzP//////////////////////////
/////////////2ZmzP///2ZmzP///////////////2ZmzP//////////////////////////////
/////////////////////////////////////////////2ZmzP//////////////////////////
/////////////2ZmzP///////////////////2ZmzP///////////////////////////2ZmzP//
////////////////////////////////////////////////////////////////////////////
/2ZmzP//////////////////////////////////////////////////////////////////////
/////////////////////////2ZmzP///////2ZmzP///////////////////////////2ZmzP//
/////////////////////////////////////2ZmzP//////////////////////////////////
/////////wAA////////ZmbM////////////////////////////////ZmbM////////////////
////////////////ZmbM////////////////////////////////ZmbMZmbM////////////////
////////////////////////////////////////////////////ZmbM////////////////////
ZmbM////////////////////////ZmbM////ZmbM////////////////////ZmbM////////////
////////////////////////////////////////////////////////////ZmbM////ZmbM////
ZmbM////////////ZmbMZmbM////////////////////////////////////ZmbM////////////
////ZmbM////////////////ZmbM////////////////////ZmbM////////////////ZmbM////
////////////////////////////ZmbM////////////////////////////////////////////
////////ZmbM////////ZmbM////////////////////////////////////ZmbMZmbM////////
////////////ZmbM////////ZmbM////////////AAD///////////////////9mZsz/////////
//////////////////////9mZsz///////////////////////////////9mZsz/////////////
//////////////////////////////9mZsz///////////9mZsz///////////////////9mZsz/
//////9mZsz///////9mZsz///////////////////////////9mZsz/////////////////////
//9mZsz///////////////////////////////////////////////////////////9mZsz/////
////////////////////////////////////////////////////////////////////////////
//9mZsxmZsz///////////////////9mZsz///////////////////////////////////////9m
Zsz///////////////////9mZsz/////////////////////////////////////////////////
//////////////9mZsz///////////////////////////////////////9mZsz/////////////
//////////////////////////////////////9mZsz///////////////////////////8AAP//
/////////////2ZmzP///////////////////////////////2ZmzP//////////////////////
/////////2ZmzP///////////////////////////////////////////////////////2ZmzP//
/2ZmzP///////////////2ZmzP//////////////////////////////////////////////////
/////////////////////////2ZmzP///////////////////////////////////////2ZmzP//
/////////////////2ZmzP///////////////////////////2ZmzP//////////////////////
/////////////////////////////////////////////////////////2ZmzP//////////////
////////////////////////////////////////////////////////////////////////////
/////2ZmzP///////2ZmzP///////////////////////////2ZmzP//////////////////////
/////////////////////////////2ZmzP//////////////////////////////////////////
/////////////////////////wAA////////ZmbM////////////////////ZmbM////////ZmbM
////////////////////ZmbM////////ZmbM////////////////////ZmbM////////ZmbM////
////////////////////////////////ZmbM////////////////////ZmbM////////////////
////////ZmbM////ZmbM////////////////////ZmbM////////////////////////////////
////////////////////////////////////////ZmbM////ZmbM////ZmbM////////////ZmbM
ZmbM////////////////////////////////////ZmbM////////////////ZmbM////////////
////ZmbM////////////////////ZmbM////////////////ZmbM////////////////////////
////////ZmbM////////////////////////////////////////////////////ZmbM////////
ZmbM////////////////////////////////////ZmbM////////////////////////////ZmbM
////ZmbM////////////////////////////////////ZmbM////////AAD///////////////9m
Zsz///////////////////////////////9mZsz///////////////////////////////9mZsz/
//////////////////////////9mZsz///////////////////9mZsz///////9mZsz///////9m
Zsz///////////////////////////9mZsz///////////////////////9mZsz/////////////
//////////////////////////////////////////////9mZsz/////////////////////////
//////////////////////////////////////////////////////////9mZsxmZsz/////////
//////////9mZsz///////////////////////////////////////9mZsz/////////////////
//9mZsz///////////////////////////////////////////////////////////////9mZsz/
//////////////////////////////////////9mZsz/////////////////////////////////
//////////////////////9mZsz///////////////////////9mZsz///9mZsz/////////////
//////////8AAP//////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////2ZmzP//////////////
/2ZmzP//////////////////////////////////////////////////////////////////////
/////2ZmzP///////////////////////////////////////2ZmzP///////////////////2Zm
zP///////////////////////////2ZmzP//////////////////////////////////////////
/////////////////////////////////////2ZmzP//////////////////////////////////
/////////////////////////////////////////////////////////////2ZmzP///////2Zm
zP///////////////////////////2ZmzP//////////////////////////////////////////
/////////2ZmzP//////////////////////////////////////////////////////////////
/////////2ZmzP///////2ZmzP///////////////wAA////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////ZmbM////////////////////ZmbM////////////////////////ZmbM////ZmbM
////////////////////ZmbM////////////////////////////////////////////////////
////////////////////ZmbM////ZmbM////ZmbM////////////ZmbMZmbM////////////////
////////////////////ZmbM////////////////ZmbM////////////////ZmbM////////////
////////ZmbM////////////////ZmbM////////////////////////////////ZmbM////////
////////////////////////////////////////////ZmbM////////ZmbM////////////////
////////////////////ZmbM////////////////////////////ZmbM////////////////////
ZmbM////////////////////ZmbM////////ZmbM////////////////ZmbMZmbM////////AAD/
//////////////9mZsz///////////////////////////////9mZsz/////////////////////
//////////9mZsz///////////////////////////9mZsz///////9mZsz/////////////////
//////////9mZsz///////////////////////9mZsz/////////////////////////////////
//////////////////////////9mZsz/////////////////////////////////////////////
//////////////////////////////////////9mZsxmZsz///////////////////9mZsz/////
//////////////////////////////////9mZsz///////////////////9mZsz/////////////
//////////////////////////////////////////////////9mZsz/////////////////////
//////////////////9mZsz/////////////////////////////////////////////////////
//9mZsz/////////////////////////////////////////////////////////////////////
//////////////////////////8AAGZmzP///////////////////////////////2ZmzP//////
/////////////////////////2ZmzP///////////////////////////////2ZmzP//////////
/////////////////////////////////////////////////////////////2ZmzP//////////
/////////////////////////////2ZmzP///////////////////2ZmzP//////////////////
/////////2ZmzP//////////////////////////////////////////////////////////////
/////////////////2ZmzP//////////////////////////////////////////////////////
/////////////////////////////////////////2ZmzP///////2ZmzP//////////////////
/////////2ZmzP///////////////////////////////////////////////////2ZmzP//////
/////////////////////////////////////////////2ZmzP///////////2ZmzP///////2Zm
zP///////////////////////////////////////////////////////wAA////////////////
ZmbM////////////////////////////////ZmbM////////////////////////////////ZmbM
////////////////////////////////////////////ZmbM////ZmbM////////////////////
ZmbM////////////////////////////////////////////////////////////////////////
ZmbM////ZmbM////ZmbM////////////ZmbMZmbM////////////////////////////////////
ZmbM////////////////ZmbM////////////////ZmbM////////////////////ZmbM////////
////////ZmbM////////////////////////////////ZmbM////////////////////////////
////////////////////////ZmbM////////ZmbM////////////////////////////////////
ZmbM////////////////////////////ZmbM////////////////////ZmbM////////////////
////////////////////////////////////ZmbMZmbM////////////////////////////////
ZmbM////////AAD///9mZsz///9mZsz///////////////////////9mZsz///9mZsz/////////
//////////////9mZsz///9mZsz///////////////////////9mZsz///////////9mZsz/////
//////////////////9mZsz/////////////////////////////////////////////////////
//////9mZsz/////////////////////////////////////////////////////////////////
//////////////////9mZsxmZsz///////////////////9mZsz/////////////////////////
//////////////9mZsz///////////////////9mZsz/////////////////////////////////
//////////////////////////////9mZsz///////////////////////////////////////9m
Zsz///////////////////////////////////////////////////////9mZsz/////////////
//////////////////////////////////9mZsz///9mZsz///////////9mZsz/////////////
//////////////////9mZsz///////////////////8AAP///2ZmzP//////////////////////
/2ZmzP///2ZmzP///////////////////////2ZmzP///2ZmzP///////////////////////2Zm
zP///2ZmzP///////////////////////////////2ZmzP//////////////////////////////
/////////2ZmzP///////////////////2ZmzP///////////////////////////2ZmzP//////
/////////////////////////////////////////////////////////////////////////2Zm
zP//////////////////////////////////////////////////////////////////////////
/////////////////////2ZmzP///////2ZmzP///////////////////////////2ZmzP//////
/////////////////////////////////////////////2ZmzP//////////////////////////
/////////////////////////2ZmzP///////////2ZmzP///////2ZmzP//////////////////
/2ZmzP///////////////////////////////2ZmzP///2ZmzP///////////////////////wAA
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////ZmbM////////////////
////////////////////////////////////////////////////////ZmbM////ZmbM////ZmbM
////////////ZmbMZmbM////////////////////////////////////ZmbM////////////////
ZmbM////////////////ZmbM////////////////////ZmbM////////////////ZmbM////////
////////////////////////ZmbM////////////////////////////////////////////////
////ZmbM////////ZmbM////////////////////////////////////ZmbM////////////////
////////////ZmbM////////////////////ZmbM////////////////////////////////////
////////////////ZmbM////////////////////////////////////ZmbM////////////////
////////////////////////////AAD///9mZsz///////////////////////////////9mZsz/
//////////////////////////////9mZsz///////////////////////////////9mZsz///9m
Zsz///////////////////////////////////////////////////////////9mZsz/////////
//////////////////////////////////////////////////////////////////////////9m
ZsxmZsz///////////////////9mZsz///////////////////////////////////////9mZsz/
//////////////////9mZsz/////////////////////////////////////////////////////
//////////9mZsz///////////////////////////////////////9mZsz/////////////////
//////////////////////////////////////9mZsz/////////////////////////////////
//////////////9mZsz///9mZsz///////////9mZsz/////////////////////////////////
//9mZsz///////////////9mZsz///////////////9mZsz///////////8AAP//////////////
/////2ZmzP///////2ZmzP///////////////////2ZmzP///////2ZmzP//////////////////
/2ZmzP///////2ZmzP///////////////////////////////////////////////2ZmzP//////
/////////////2ZmzP///////////////////////////2ZmzP//////////////////////////
/////////////////////////////////////////////////////2ZmzP//////////////////
////////////////////////////////////////////////////////////////////////////
/2ZmzP///////2ZmzP///////////////////////////2ZmzP//////////////////////////
/////////////////////////2ZmzP//////////////////////////////////////////////
/////2ZmzP///////////2ZmzP///////2ZmzP///////////////////2ZmzP//////////////
/////////////////////////////////////////////////////////////////////2ZmzP//
/////////////wAA////////////////////////////////ZmbM////////////////////////
////////ZmbM////////////////////////////////ZmbM////////////////////////////
////////////////////////////////////ZmbM////ZmbM////ZmbM////////////ZmbMZmbM
////////////////////////////////////ZmbM////////////////ZmbM////////////////
ZmbM////////////////////ZmbM////////////////ZmbM////////////////////////////
////ZmbM////////////////////////////////////////////////////ZmbM////////ZmbM
////////////////////////////////////ZmbM////////////////////////////ZmbM////
////////////////ZmbM////////////////////////////////////////////////////ZmbM
////////////////////////////////////////////////////ZmbM////////////////////
////////ZmbM////////////////ZmbM////////////AAD///////9mZsz///////9mZsz/////
//9mZsz///////9mZsz///////9mZsz///////9mZsz///////9mZsz///////9mZsz///////9m
Zsz///////9mZsz///////////////////////////9mZsz/////////////////////////////
//////////////////////////////////////////////////////9mZsxmZsz/////////////
//////9mZsz///////////////////////////////////////9mZsz///////////////////9m
Zsz///////////////////////////////////////////////////////////////9mZsz/////
//////////////////////////////////9mZsz/////////////////////////////////////
//////////////////9mZsz///////////////////////////////////////////////9mZsz/
//9mZsz///////////9mZsz///////////////////////////////////9mZsxmZsxmZsz/////
//////9mZsz///////////9mZsz///////////////////////////////////////////////8A
AP//////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////2ZmzP///////////////////2ZmzP//
/////////////////////////2ZmzP//////////////////////////////////////////////
/////////////////////////////////2ZmzP//////////////////////////////////////
/////////////////////////////////////////////////////////2ZmzP///////2ZmzP//
/////////////////////////2ZmzP//////////////////////////////////////////////
/////2ZmzP///////////////////////////////////////////////////2ZmzP//////////
/2ZmzP///////2ZmzP///////////////////2ZmzP//////////////////////////////////
/////////////////////////////////////////2ZmzP//////////////////////////////
/////////////////////////////wAA////////////////////////////ZmbM////////////
////////////////////ZmbM////////////////////////////////ZmbM////////////////
////////////////ZmbM////ZmbM////ZmbM////////////ZmbMZmbM////////////////////
////////////////ZmbM////////////////ZmbM////////////////ZmbM////////////////
////ZmbM////////////////ZmbM////////////////////////////////ZmbM////////////
////////////////////////////////////////ZmbM////////ZmbM////////////////////
////////////////ZmbM////////////////////////////ZmbM////////////////////ZmbM
////////////////////////////////////////////////////ZmbM////////////////////
////////////////////////////////ZmbM////////////////////////////////////ZmbM
////////ZmbM////////////////////////////////////////////////AAD///9mZsz/////
//////////////////////////9mZsz///////////////////////////////9mZsz/////////
//////////////////////9mZsz/////////////////////////////////////////////////
//////////////////////////////////9mZsxmZsz///////////////////9mZsz/////////
//////////////////////////////9mZsz///////////////////9mZswAAAD/////////////
//////////////////////////////////////////////9mZsz/////////////////////////
//////////////9mZsz///////////////////////////////////////////////////////9m
Zsz///////////////////////////////////////////////9mZsz///9mZsz///////////9m
Zsz///////////////////////////////////9mZsxmZsxmZsz///////////9mZsz/////////
////////////////////////////////////////////////////////////////////////////
//////////////8AAP///////////////2ZmzP///////////////////////////////2ZmzP//
/////////////////////////////2ZmzP//////////////////////////////////////////
/////2ZmzP//////////////////////////////////////////////////////////////////
/////////////2ZmzP//////////////////////////////////////////////////////////
/////////////wAAAAAAAP///////////////2ZmzP///////2ZmzP//////////////////////
/////2ZmzP///////////////////////////////wAAAAAAAAAAAAAAAP///2ZmzP//////////
/////////////////////wAAAAAAAAAAAAAAAP///2ZmzP///////////2ZmzP///////2ZmzP//
/////////////////2ZmzP//////////////////////////////////////////////////////
/////////////////////2ZmzP///////////////2ZmzP//////////////////////////////
/////////////////////////////////////2ZmzP///wAA////////////ZmbM////////////
////////////////////ZmbM////////////////////////////////ZmbM////////////////
////////////////////////////ZmbMZmbM////////////////////////////////////ZmbM
////////////////ZmbM////////////////ZmbM////////////////////ZmbM////////////
////ZmbM////////////////////////////////ZmbMAAAA////////////////////////////
////////////////////ZmbM////////ZmbM////////////////////////////////AAAAZmbM
AAAAAAAAAAAAAAAA////////////ZmbM////////////////AAAAZmbMAAAAAAAAAAAAAAAA////
////////////////////////////////ZmbM////////////////////////////////////////
////////////ZmbM////////////////////////////////////ZmbM////////////////////
////////////////////////////////////////////ZmbM////////////////////ZmbM////
AAD///9mZsz///////////////////////////////9mZsz/////////////////////////////
//9mZsz///////////////////////////////9mZsz/////////////////////////////////
//////////////9mZsxmZsz///////////////////9mZsz/////////////////////////////
//////////9mZsz///////////////////9mZsz///////////////8AAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAD///////////9mZsz///////////////////////////////////////9mZsz/
//////////////////8AAAAAAAD///////////8AAAAAAAD///////9mZsz///////////8AAAAA
AAD///////////////8AAAAAAAD///9mZsz///9mZsz///////////9mZsz/////////////////
//////////////////9mZsxmZsxmZsz///////////9mZsz/////////////////////////////
//////////////////////////9mZsz///////////9mZsz/////////////////////////////
//////////////////////////////8AAP//////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////2ZmzP//
/////////////////////////////////////////wAAAAAAAAAAAAAAAP//////////////////
/////////wAAAAAAAGZmzAAAAAAAAGZmzAAAAAAAAAAAAP///////////////2ZmzP///wAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAP///////////////2ZmzP///wAAAAAAAP///////////////wAA
AAAAAP///////////////2ZmzP///wAAAAAAAGZmzP///////2ZmzAAAAAAAAP///////////2Zm
zP//////////////////////////////////////////////////////////////////////////
/2ZmzP///////////////2ZmzP///////////////////////////////////////2ZmzP///2Zm
zP///////////////2ZmzP///2ZmzP///////////2ZmzP///////////////wAA////////////
////////ZmbM////////////////////////////////ZmbM////////////////////////////
////ZmbM////////////////////////////////////////////ZmbM////////////////ZmbM
////////////////ZmbM////////////////////ZmbM////////////////ZmbM////AAAAAAAA
AAAAAAAAAAAAAAAA////ZmbM////////////////AAAAAAAA////////////AAAAAAAA////////
ZmbM////////ZmbM////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmbM////////////////////
////AAAAZmbM////////////////AAAAZmbM////////////////////////////////////////
////AAAAAAAAZmbM////////////////////////////////////////////////////ZmbM////
////////////////////////////////ZmbM////////////////////////////////////////
////////////////////////////ZmbM////////////////ZmbM////////////////////////
////ZmbM////////AAD///////////////////////////////9mZsz/////////////////////
//////////9mZsz///////////////////////////////9mZsz///////////////////9mZsxm
Zsz///////////////////9mZsz///////////////////////////////////////9mZsz/////
//////////////9mZswAAAAAAAAAAAD///////8AAAAAAAAAAAD///////////////////////8A
AAAAAABmZsz///8AAAAAAAD///////////////////////////9mZsz///8AAAAAAAD/////////
//////////////////////////////////9mZswAAAAAAAD///////////8AAAAAAAD/////////
//////////9mZsz///9mZsz///////////9mZswAAAAAAAD///////////////////////////9m
ZsxmZsxmZsz///////////9mZsz/////////////////////////////////////////////////
//////9mZsz///////////9mZsz///////////////////9mZsz///////9mZsz/////////////
//////////////////////////////9mZsz///////////8AAGZmzGZmzP//////////////////
/////////2ZmzGZmzP///////////////////////////2ZmzGZmzP//////////////////////
/////2ZmzGZmzP///////////////////////////////////2ZmzP//////////////////////
/////////////////////////////////////////////////wAAAAAAAP///////////////2Zm
zAAAAP///2ZmzP///////////////wAAAAAAAP///2ZmzAAAAP//////////////////////////
/////////////////wAAAGZmzP///////////////////////////////////wAAAAAAAAAAAAAA
AGZmzAAAAAAAAP///2ZmzP///////2ZmzP///////////////////2ZmzAAAAAAAAAAAAP//////
/////////////////////////////////////////////////////////2ZmzP//////////////
/2ZmzP///////////////////////////////////////2ZmzP///2ZmzP///////////////2Zm
zP///////////////////////////////////////2ZmzP///////////2ZmzP//////////////
/wAA////ZmbMZmbM////////////////ZmbM////////ZmbMZmbM////////////////ZmbM////
////ZmbMZmbM////////////////ZmbM////////ZmbMZmbM////ZmbM////////////////ZmbM
////////////////////ZmbM////////////////ZmbM////////////////////////////////
ZmbMAAAAAAAA////////////////AAAAAAAA////////////////////ZmbMAAAAAAAAZmbMAAAA
AAAA////////////////////////////ZmbM////////////////AAAAAAAA////ZmbM////////
////////////ZmbMAAAAAAAA////AAAAAAAAAAAA////////////////////////////ZmbM////
////////AAAAAAAAAAAA////////////////////////////ZmbM////////////////////////
////////////ZmbM////////////////////////////////////////////////////////////
////////ZmbM////////////////////ZmbM////////////////////////ZmbM////ZmbM////
////////////////////////ZmbM////AAD/////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//9mZsz///////////////////////////////////////9mZsz///////////////////9mZsz/
//////////////////////////////8AAAAAAAD///////////////8AAAAAAABmZsz/////////
//////////////////8AAAAAAAAAAABmZsz/////////////////////////////////////////
//////////8AAABmZsz///////////////////////////////8AAAAAAAD///////9mZsz///9m
Zsz///////////9mZsz///////////////////////////////8AAABmZsxmZsxmZsz/////////
//9mZsz///////////////////////////////////////////////////////9mZsz/////////
//9mZsz///////////////////9mZsz///////9mZsz///////9mZsz/////////////////////
//////9mZsxmZsz///////////////////////////9mZsz///////////////8AAP//////////
/////2ZmzP///////////////////////////////2ZmzP//////////////////////////////
/2ZmzP//////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////2ZmzP///wAAAGZmzP//////
/////////wAAAAAAAP///2ZmzP///////////////////////////////wAAAAAAAAAAAP//////
/2ZmzP///////////////////////////////////////wAAAAAAAP///2ZmzP///////////2Zm
zP///wAAAGZmzP///////////////////2ZmzP//////////////////////////////////////
/wAAAAAAAP///////////////////////////2ZmzP///////////////2ZmzP//////////////
/////////////////////////2ZmzP///2ZmzP///////////////2ZmzP//////////////////
/////////////////////////////////////////////////////////////////2ZmzP//////
/////////////////wAA////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
ZmbM////////////////ZmbM////////////////////////////////ZmbM////////////////
////////////////AAAAAAAA////////////ZmbMAAAAAAAAZmbM////////////////////////
////////AAAAZmbMAAAA////////////////////////ZmbM////////////////////ZmbM////
////AAAAAAAA////////////////////////AAAAAAAA////ZmbM////AAAAAAAA////////////
////////////AAAAAAAA////////ZmbMAAAAAAAA////////////////////////////ZmbM////
////////////////////////////////////////////////////////////////ZmbM////////
////////////ZmbM////////////////////////ZmbM////ZmbM////////////////////////
////ZmbM////////////////////////////////////////AAD///////9mZsz/////////////
//////////////////9mZsz///////////////////////////////9mZsz/////////////////
//////////////9mZsz///////9mZsz///////////////////9mZsz/////////////////////
//////////////////////////////////////////9mZswAAAAAAAD///////////////8AAAAA
AAD///////9mZsz///////////////////////////////8AAAAAAAD///////////////9mZsz/
//////////////////////////////8AAAAAAAD///////9mZsz///9mZsz///////8AAABmZswA
AAAAAAAAAAAAAAD///////////////////9mZsxmZsxmZswAAAAAAAAAAABmZswAAAAAAAD/////
//////////////////////////////////////////9mZsz///////////9mZsz/////////////
//////9mZsz///////9mZsz///////9mZsz///////////////////////////9mZsz/////////
//////////////9mZsz/////////////////////////////////////////////////////////
//8AAP///////////////2ZmzP///////////////////////////////2ZmzP//////////////
/////////////////2ZmzP//////////////////////////////////////////////////////
/////////////////////////////////2ZmzP///////2ZmzP//////////////////////////
/2ZmzAAAAAAAAP///////////////wAAAAAAAP///////////////////2ZmzP//////////////
/////////////////////////////////////2ZmzAAAAAAAAP///2ZmzP///////2ZmzAAAAP//
/////////////2ZmzP///////////wAAAAAAAAAAAAAAAP//////////////////////////////
/////wAAAAAAAAAAAGZmzP///////////////2ZmzP//////////////////////////////////
/////2ZmzP///2ZmzP///////////////2ZmzP//////////////////////////////////////
/////////////////////////////////////2ZmzP//////////////////////////////////
/2ZmzGZmzP///////////////////////wAA////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////ZmbM////////////////////////////////////
////////////////ZmbM////////ZmbMAAAAAAAAAAAA////////AAAAAAAAAAAA////ZmbM////
////////////////////////ZmbM////////////////////ZmbM////////////////////AAAA
AAAAAAAA////////AAAAAAAAAAAAZmbM////////////////////////////////////////////
////////ZmbM////////////////////////////////////ZmbM////////////////////////
////////////////////////////////////////////ZmbM////////////////////ZmbM////
////////////////////ZmbM////ZmbM////////////////////ZmbM////////////////////
////////////////////////////////////////////////////////////////AABmZsz/////
//////////////////9mZsz///9mZsz///////////////////////9mZsz///9mZsz/////////
//////////////9mZsz///9mZsz/////////////////////////////////////////////////
//////////////////////9mZsz///////////////////////////////////////9mZswAAAAA
AAAAAAAAAAAAAAAAAAD///////////////////////////////9mZsz/////////////////////
//////////////////////////9mZswAAABmZswAAAAAAAAAAABmZsz/////////////////////
//////////////9mZsxmZsxmZsz///////////9mZsz/////////////////////////////////
//////////////////////9mZsz///////////9mZsz///////////////////9mZsz///////9m
Zsz///////9mZsz///////////////////////////9mZsz///////////////////////9mZsz/
////////////////////////////////////////////////////////////////////////////
//9mZsz///////////8AAGZmzP///////////////2ZmzP///////////2ZmzP//////////////
/2ZmzP///////////2ZmzP///////////////2ZmzP///////////2ZmzP//////////////////
/////////////2ZmzP///////2ZmzP///////////////////////////2ZmzP//////////////
/////////////////////////////wAAAAAAAGZmzAAAAP//////////////////////////////
/////////////////2ZmzP///////////2ZmzP///////2ZmzP///////////wAAAAAAAGZmzAAA
AP///////////////////////////////////////////////////////////////////////2Zm
zP///////////////2ZmzP///////////////////////////////////////2ZmzP///2ZmzP//
/////////////2ZmzP//////////////////////////////////////////////////////////
/////////////////2ZmzP//////////////////////////////////////////////////////
/////////////////////////////////////////////////wAA////////////ZmbM////////
////////////////////////ZmbM////////////////////////////////ZmbM////////////
////////////////////////////////////////////////////////////////////////ZmbM
////////ZmbM////////////////////////////////////ZmbM////////////////////////
////ZmbM////////////////////ZmbM////////////////////////////////////////////
////////ZmbM////////////////////////////////////////////////////ZmbM////////
////////////////////////////ZmbM////////////////////////////////////////////
////////////////////////ZmbM////////////////////ZmbM////////////////////////
ZmbM////ZmbM////////////////////ZmbM////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////AAD/////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//9mZsz///////////////////////////////////////9mZsz/////////////////////////
//////////////////////////////9mZsz/////////////////////////////////////////
//////9mZsz///9mZsz///////////9mZsz///////////////////////////////////9mZsxm
ZsxmZsz///////////9mZsz/////////////////////////////////////////////////////
//9mZsz///////////9mZsz///////////////////9mZsz///////9mZsz///////9mZsz/////
//////////////////////9mZsz///////////////////////9mZsz/////////////////////
//////////////////////////////////////9mZsz///////////////9mZsz///////////9m
Zsz///////9mZsz///////////////////8AAP///2ZmzP//////////////////////////////
/2ZmzP///////////////////////////////2ZmzP///////////////////////////////2Zm
zP///2ZmzP///////////////////////////2ZmzP//////////////////////////////////
/////////////////2ZmzP///////////////////////////////////////////////////2Zm
zP///////////2ZmzP///////2ZmzP///////////////////2ZmzP//////////////////////
/////////////////////////////////////////////////////2ZmzP///////////////2Zm
zP///////////////////////////////////////2ZmzP///2ZmzP///////////////2ZmzP//
/////////////////////////////////////////////////////////////////////////2Zm
zP///////////////////////////////////////2ZmzP///////////////////2ZmzP//////
/////////////////////////////////////////////////////////////////wAA////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////ZmbM////////ZmbM////////
////////////////////////////ZmbM////////////////////////////ZmbM////////////
////////ZmbM////////////////////////////////////////////////////ZmbM////////
////////////////////////////////////////////ZmbM////////////////////////////
////////ZmbM////////////////////////////////////////////////////////////////
////ZmbM////////////////////ZmbM////////////////////////ZmbM////ZmbM////////
////////////ZmbM////////////////////////////////////////////////////////////
////////////ZmbM////ZmbM////ZmbM////////////////////////////////////////ZmbM
////////////////////AAD///////////////////////////9mZsz/////////////////////
//////////9mZsz///////////////////////////////9mZsz/////////////////////////
//////////////////////////9mZsz/////////////////////////////////////////////
//////////9mZsz///////////////////////////////////////////////9mZsz///9mZsz/
//////////9mZsz///////////////////////////////////9mZsxmZsxmZsz///////////9m
Zsz///////////////////////////////////////////////////////9mZsz///////////9m
Zsz///////////////////9mZsz///////9mZsz///////9mZsz/////////////////////////
//9mZsz///////////////////////9mZsz/////////////////////////////////////////
//////////////////9mZsz///////////////////////////////////////////9mZsz/////
//////////////////////////////////9mZsz///////////8AAP///2ZmzP//////////////
/////2ZmzP///////2ZmzP///////////////////2ZmzP///////2ZmzP//////////////////
/2ZmzP///////2ZmzP///////////////////////////////////////////////////////2Zm
zP///////////////////////////////////////////////////2ZmzP///////////2ZmzP//
/////2ZmzP///////////////////2ZmzP//////////////////////////////////////////
/////////////////////////////////2ZmzP///////////////2ZmzP//////////////////
/////////////////////2ZmzP///2ZmzP///////////////2ZmzP//////////////////////
/////////////////////////////////////////////////////2ZmzP//////////////////
/////////////////////2ZmzP///////////////////2ZmzP//////////////////////////
/2ZmzP//////////////////////////////////////////////////////////////////////
/////wAA////////////////////ZmbMZmbM////ZmbM////////////////////ZmbMZmbM////
ZmbM////////////////////ZmbMZmbM////ZmbM////////////////////////////////////
////////ZmbM////////////////////////////ZmbM////////////////////ZmbM////////
////////////////////////////////////////////ZmbM////////////////////////////
////////////////////////ZmbM////////////////////////////////////ZmbM////////
////////////////////////////////////////////////////////////ZmbM////////////
////////ZmbM////////////////////////ZmbM////ZmbM////////////////////ZmbM////
////////////////////////////////////////////////////////////////////ZmbM////
ZmbM////ZmbM////////////ZmbMZmbM////////////////////ZmbM////////////////////
////////////////////////////ZmbM////AAD///////9mZsxmZsz/////////////////////
//////9mZsxmZsz///////////////////////////9mZsxmZsz/////////////////////////
//9mZsxmZsz///////////////////////////////////////////////////////9mZsz/////
//////////////////////////////////////////9mZsz///9mZsz///////////9mZsz/////
//////////////////////////////9mZsxmZsxmZsz///////////9mZsz/////////////////
//////////////////////////////////////9mZsz///////////9mZsz/////////////////
//9mZsz///////9mZsz///////9mZsz///////////////////////////9mZsz/////////////
//////////9mZsz///////////////////////////////////////////////////////////9m
Zsz/////////////////////////////////////////////////////////////////////////
//////////////9mZsz///////////////////////////////////////////////8AAP//////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////2ZmzP//////////////////
/////////////////////////////////2ZmzP///////////2ZmzP///////2ZmzP//////////
/////////2ZmzP//////////////////////////////////////////////////////////////
/////////////2ZmzP///////////////2ZmzP//////////////////////////////////////
/2ZmzP///2ZmzP///////////////2ZmzP//////////////////////////////////////////
/////////////////////////////////2ZmzP//////////////////////////////////////
/2ZmzP///////////////////2ZmzP///////////////////////////2ZmzP//////////////
////////////////////////////////////////////////////////////////////////////
/2ZmzP///////////////wAA////////ZmbM////////////////////////////////ZmbM////
////////////////////////////ZmbM////////////////////////////////ZmbM////////
////////////////////ZmbM////////////////////ZmbM////////////////////////////
////////////////////////ZmbM////////////////////////////////////////////////
////ZmbM////////////////////////////////////ZmbM////////////////////////////
////////////////////////////////////////ZmbM////////////////////ZmbM////////
////////////////ZmbM////ZmbM////////////////////ZmbM////////////////////////
////////////////////////////////////////////////ZmbM////ZmbM////ZmbM////////
////ZmbMZmbM////////////////////////////////////ZmbM////////////////////////
////////ZmbM////////////////////////////////////////AABmZsz/////////////////
//////////////9mZsz///////////////////////////////9mZsz/////////////////////
//////////9mZsz///////////////////////////////9mZsz/////////////////////////
//////////////////////9mZsz///9mZsz///////////9mZsz/////////////////////////
//////////9mZsxmZsxmZsz///////////9mZsz/////////////////////////////////////
//////////////////9mZsz///////////9mZsz///////////////////9mZsz///////9mZsz/
//////9mZsz///////////////////////////9mZsz///////////////////////9mZsz/////
//////////////////////////////////////////////////////9mZsz/////////////////
//////////////////////////////////////////////////////////////////9mZsxmZsz/
//////////////////////////////////////////////9mZsz///9mZsz///////////9mZsz/
//////8AAP//////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////2ZmzP///////////2ZmzP///////2ZmzP///////////////////2ZmzP//////
/////////////////////////////////////////////////////////////////////2ZmzP//
/////////////2ZmzP///////////////////////////////////////2ZmzP///2ZmzP//////
/////////2ZmzP//////////////////////////////////////////////////////////////
/////////////2ZmzP///////////////////////////////////////2ZmzP//////////////
/////2ZmzP///////////////////////////2ZmzP//////////////////////////////////
/////////////////////////////////////////////2ZmzP///////2ZmzP//////////////
/////2ZmzP///////////////////////////wAA////////////////ZmbM////////////////
////////////////ZmbM////////////////////////////////ZmbM////////////////////
ZmbM////////////////////ZmbM////////////////////////////////////////////////
////ZmbM////////////////////////////////////////////////////ZmbM////////////
////////////////////////ZmbM////////////////////////////////////////////////
////////////////////ZmbM////////////////////ZmbM////////////////////////ZmbM
////ZmbM////////////////////ZmbM////////////////////////////////////////////
////////////////////////////ZmbM////ZmbM////ZmbM////////////ZmbMZmbM////////
////////////////////////////ZmbM////////////////ZmbM////////////////ZmbM////
////////////////////////////////////////////////ZmbM////////////////AAD/////
//9mZsz///////////////////////////////9mZsz///////////////////////////////9m
Zsz///////////////////////////9mZsz/////////////////////////////////////////
//9mZsz///9mZsz///////////9mZsz///////////////////////////////////9mZsxmZsxm
Zsz///////////9mZsz///////////////////////////////////////////////////////9m
Zsz///////////9mZsz///////////////////9mZsz///////9mZsz///////9mZsz/////////
//////////////////9mZsz///////////////////////9mZsz/////////////////////////
//////////////////////////////////9mZsz/////////////////////////////////////
//////////////////////////////////////////////9mZsxmZsz///////////////////9m
Zsz///////////////////////////////9mZsz///////////9mZsz///////////9mZsz///9m
Zsz///////////////////8AAP///////////////////////////////2ZmzP//////////////
/////////////////2ZmzP///////////////////////////////2ZmzP///////////2ZmzP//
/////////2ZmzP///////2ZmzP///////////////////2ZmzP//////////////////////////
/////////////////////////////////////////////////2ZmzP///////////////2ZmzP//
/////////////////////////////////////2ZmzP///2ZmzP///////////////2ZmzP//////
/////////////////////////////////////////////////////////////////////2ZmzP//
/////////////////////////////////////2ZmzP///////////////////2ZmzP//////////
/////////////////2ZmzP//////////////////////////////////////////////////////
/////////////////////////2ZmzP//////////////////////////////////////////////
/////////////////////2ZmzP///////////////////////////wAA////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////ZmbM////////////
////////////////////////////////////////ZmbM////////////////////////////////
////ZmbM////////////////////////////////////////////////////////////////////
ZmbM////////////////////ZmbM////////////////////////ZmbM////ZmbM////////////
////////ZmbM////////////////////////////////////////////////////////////////
////////ZmbM////ZmbM////ZmbM////////////ZmbMZmbM////////////////////////////
////////ZmbM////////////////ZmbM////////////////ZmbM////////////////////ZmbM
////////////////ZmbM////////ZmbM////////////////////////////////////ZmbM////
////////AAD/////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////9mZsz///9mZsz/////
//////9mZsz///////////////////////////////////9mZsxmZsxmZsz///////////9mZsz/
//////////////////////////////////////////////////////9mZsz///////////9mZsz/
//////////////////9mZsz///////9mZsz///////9mZsz///////////////////////////9m
Zsz///////////////////////9mZsz/////////////////////////////////////////////
//////////////9mZsz/////////////////////////////////////////////////////////
//////////////////////////9mZsxmZsz///////////////////9mZsz/////////////////
//////////////////////9mZsz///////////////////9mZsz///9mZsz/////////////////
//////////////9mZsz///////////////////8AAP///////////////////////2ZmzP//////
/////////////////////////2ZmzP///////////////////////////////2ZmzP//////////
/////////////////////////2ZmzP//////////////////////////////////////////////
/////////////////////////////2ZmzP///////////////2ZmzP//////////////////////
/////////////////2ZmzP///2ZmzP///////////////2ZmzP//////////////////////////
/////////////////////////////////////////////////2ZmzP//////////////////////
/////////////////2ZmzP///////////////////2ZmzP///////////////////////////2Zm
zP//////////////////////////////////////////////////////////////////////////
/////2ZmzP//////////////////////////////////////////////////////////////////
/////////////////////////////////2ZmzP///////////////////////////////wAA////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////ZmbM////////////////////////////////
////////////////////ZmbM////////////////////////////////////ZmbM////////////
////////////////////////////////////////////////////////ZmbM////////////////
////ZmbM////////////////////////ZmbM////ZmbM////////////////////ZmbM////////
////////////////////////////////////////////////////////////////ZmbM////ZmbM
////ZmbM////////////ZmbMZmbM////////////////////////////////////ZmbM////////
////////ZmbM////////////////ZmbM////////////////////ZmbM////////////////ZmbM
////////////////////////////////ZmbM////////////ZmbM////////////////ZmbM////
////ZmbM////////////////AAD///////////////////////////////9mZsz/////////////
//////////////////9mZsz///////////////////////////////9mZsz///9mZsz/////////
//////////////////////////9mZsxmZsxmZsz///////////9mZsz/////////////////////
//////////////////////////////////9mZsz///////////9mZsz///////////////////9m
Zsz///////9mZsz///////9mZsz///////////////////////////9mZsz/////////////////
//////9mZsz///////////////////////////////////////////////////////////9mZsz/
////////////////////////////////////////////////////////////////////////////
//////9mZsxmZsz///////////////////9mZsz/////////////////////////////////////
//9mZsz///////////////////9mZsz///////////////////////////////////////9mZsz/
//////////////////////////////////////9mZsz///////////8AAP///2ZmzP//////////
/////////////2ZmzP///2ZmzP///////////////////////2ZmzP///2ZmzP//////////////
/////////2ZmzP//////////////////////////////////////////////////////////////
/////////2ZmzP///////////////2ZmzP///////////////////////////////////////2Zm
zP///2ZmzP///////////////2ZmzP//////////////////////////////////////////////
/////////////////////////////2ZmzP///////////////////////////////////////2Zm
zP///////////////////2ZmzP///////////////////////////2ZmzP//////////////////
/////////////////////////////////////////////////////////////2ZmzP//////////
////////////////////////////////////////////////////////////////////////////
/////////2ZmzP///////////////////////////////2ZmzP//////////////////////////
/////////wAAAAA=

------=_NextPart_000_0000_01CCD9AF.2F84AC70
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.greenville.k12.sc.us/gcsd/schools/forms_career/cc_style.css

BODY {
	PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #999; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; FONT-FAMILY: Verdana, Geneva, sans-serif; =
FONT-SIZE: 10px; PADDING-TOP: 0px
}
#container {
	PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #fff; MARGIN: 0px auto; =
PADDING-LEFT: 10px; WIDTH: 900px; PADDING-RIGHT: 10px; PADDING-TOP: 10px
}
.special {
	TEXT-ALIGN: left; BACKGROUND-COLOR: #ffc; MARGIN-TOP: -10px; WIDTH: =
600px; FLOAT: left; COLOR: red; FONT-SIZE: 9px; MARGIN-RIGHT: 20px
}
H2 {
	FONT-FAMILY: Georgia, "Times New Roman", Times, serif; COLOR: #060; =
FONT-SIZE: 24px
}

------=_NextPart_000_0000_01CCD9AF.2F84AC70
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.greenville.k12.sc.us/gcsd/schools/forms_career/SpryValidationTextField.css

.textfieldRequiredMsg {
	DISPLAY: none
}
.textfieldInvalidFormatMsg {
	DISPLAY: none
}
.textfieldMinValueMsg {
	DISPLAY: none
}
.textfieldMaxValueMsg {
	DISPLAY: none
}
.textfieldMinCharsMsg {
	DISPLAY: none
}
.textfieldMaxCharsMsg {
	DISPLAY: none
}
.textfieldValidMsg {
	DISPLAY: none
}
.textfieldRequiredState .textfieldRequiredMsg {
	BORDER-BOTTOM: #cc3333 1px solid; BORDER-LEFT: #cc3333 1px solid; =
DISPLAY: inline; COLOR: #cc3333; BORDER-TOP: #cc3333 1px solid; =
BORDER-RIGHT: #cc3333 1px solid
}
.textfieldInvalidFormatState .textfieldInvalidFormatMsg {
	BORDER-BOTTOM: #cc3333 1px solid; BORDER-LEFT: #cc3333 1px solid; =
DISPLAY: inline; COLOR: #cc3333; BORDER-TOP: #cc3333 1px solid; =
BORDER-RIGHT: #cc3333 1px solid
}
.textfieldMinValueState .textfieldMinValueMsg {
	BORDER-BOTTOM: #cc3333 1px solid; BORDER-LEFT: #cc3333 1px solid; =
DISPLAY: inline; COLOR: #cc3333; BORDER-TOP: #cc3333 1px solid; =
BORDER-RIGHT: #cc3333 1px solid
}
.textfieldMaxValueState .textfieldMaxValueMsg {
	BORDER-BOTTOM: #cc3333 1px solid; BORDER-LEFT: #cc3333 1px solid; =
DISPLAY: inline; COLOR: #cc3333; BORDER-TOP: #cc3333 1px solid; =
BORDER-RIGHT: #cc3333 1px solid
}
.textfieldMinCharsState .textfieldMinCharsMsg {
	BORDER-BOTTOM: #cc3333 1px solid; BORDER-LEFT: #cc3333 1px solid; =
DISPLAY: inline; COLOR: #cc3333; BORDER-TOP: #cc3333 1px solid; =
BORDER-RIGHT: #cc3333 1px solid
}
.textfieldMaxCharsState .textfieldMaxCharsMsg {
	BORDER-BOTTOM: #cc3333 1px solid; BORDER-LEFT: #cc3333 1px solid; =
DISPLAY: inline; COLOR: #cc3333; BORDER-TOP: #cc3333 1px solid; =
BORDER-RIGHT: #cc3333 1px solid
}
.textfieldValidState INPUT {
	BACKGROUND-COLOR: #b8f5b1
}
INPUT.textfieldValidState {
	BACKGROUND-COLOR: #b8f5b1
}
INPUT.textfieldRequiredState {
	BACKGROUND-COLOR: #ff9f9f
}
.textfieldRequiredState INPUT {
	BACKGROUND-COLOR: #ff9f9f
}
INPUT.textfieldInvalidFormatState {
	BACKGROUND-COLOR: #ff9f9f
}
.textfieldInvalidFormatState INPUT {
	BACKGROUND-COLOR: #ff9f9f
}
INPUT.textfieldMinValueState {
	BACKGROUND-COLOR: #ff9f9f
}
.textfieldMinValueState INPUT {
	BACKGROUND-COLOR: #ff9f9f
}
INPUT.textfieldMaxValueState {
	BACKGROUND-COLOR: #ff9f9f
}
.textfieldMaxValueState INPUT {
	BACKGROUND-COLOR: #ff9f9f
}
INPUT.textfieldMinCharsState {
	BACKGROUND-COLOR: #ff9f9f
}
.textfieldMinCharsState INPUT {
	BACKGROUND-COLOR: #ff9f9f
}
INPUT.textfieldMaxCharsState {
	BACKGROUND-COLOR: #ff9f9f
}
.textfieldMaxCharsState INPUT {
	BACKGROUND-COLOR: #ff9f9f
}
.textfieldFocusState INPUT {
	BACKGROUND-COLOR: #ffffcc
}
INPUT.textfieldFocusState {
	BACKGROUND-COLOR: #ffffcc
}
.textfieldFlashText INPUT {
	COLOR: red !important
}
INPUT.textfieldFlashText {
	COLOR: red !important
}
.textfieldHintState INPUT {
=09
}
INPUT.textfieldHintState {
=09
}

------=_NextPart_000_0000_01CCD9AF.2F84AC70
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.greenville.k12.sc.us/gcsd/schools/forms_career/SpryValidationSelect.css

.selectRequiredMsg {
	DISPLAY: none
}
.selectInvalidMsg {
	DISPLAY: none
}
.selectRequiredState .selectRequiredMsg {
	BORDER-BOTTOM: #cc3333 1px solid; BORDER-LEFT: #cc3333 1px solid; =
DISPLAY: inline; COLOR: #cc3333; BORDER-TOP: #cc3333 1px solid; =
BORDER-RIGHT: #cc3333 1px solid
}
.selectInvalidState .selectInvalidMsg {
	BORDER-BOTTOM: #cc3333 1px solid; BORDER-LEFT: #cc3333 1px solid; =
DISPLAY: inline; COLOR: #cc3333; BORDER-TOP: #cc3333 1px solid; =
BORDER-RIGHT: #cc3333 1px solid
}
.selectValidState SELECT {
	BACKGROUND-COLOR: #b8f5b1
}
SELECT.selectValidState {
	BACKGROUND-COLOR: #b8f5b1
}
SELECT.selectRequiredState {
	BACKGROUND-COLOR: #ff9f9f
}
.selectRequiredState SELECT {
	BACKGROUND-COLOR: #ff9f9f
}
SELECT.selectInvalidState {
	BACKGROUND-COLOR: #ff9f9f
}
.selectInvalidState SELECT {
	BACKGROUND-COLOR: #ff9f9f
}
.selectFocusState SELECT {
	BACKGROUND-COLOR: #ffffcc
}
SELECT.selectFocusState {
	BACKGROUND-COLOR: #ffffcc
}

------=_NextPart_000_0000_01CCD9AF.2F84AC70
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.greenville.k12.sc.us/gcsd/schools/forms_career/SpryValidationTextarea.css

.textareaRequiredMsg {
	DISPLAY: none
}
.textareaMinCharsMsg {
	DISPLAY: none
}
.textareaMaxCharsMsg {
	DISPLAY: none
}
.textareaValidMsg {
	DISPLAY: none
}
.textareaRequiredState .textareaRequiredMsg {
	BORDER-BOTTOM: #cc3333 1px solid; BORDER-LEFT: #cc3333 1px solid; =
DISPLAY: inline; COLOR: #cc3333; BORDER-TOP: #cc3333 1px solid; =
BORDER-RIGHT: #cc3333 1px solid
}
.textareaMinCharsState .textareaMinCharsMsg {
	BORDER-BOTTOM: #cc3333 1px solid; BORDER-LEFT: #cc3333 1px solid; =
DISPLAY: inline; COLOR: #cc3333; BORDER-TOP: #cc3333 1px solid; =
BORDER-RIGHT: #cc3333 1px solid
}
.textareaMaxCharsState .textareaMaxCharsMsg {
	BORDER-BOTTOM: #cc3333 1px solid; BORDER-LEFT: #cc3333 1px solid; =
DISPLAY: inline; COLOR: #cc3333; BORDER-TOP: #cc3333 1px solid; =
BORDER-RIGHT: #cc3333 1px solid
}
.textareaValidState TEXTAREA {
	BACKGROUND-COLOR: #b8f5b1
}
TEXTAREA.textareaValidState {
	BACKGROUND-COLOR: #b8f5b1
}
TEXTAREA.textareaRequiredState {
	BACKGROUND-COLOR: #ff9f9f
}
.textareaRequiredState TEXTAREA {
	BACKGROUND-COLOR: #ff9f9f
}
TEXTAREA.textareaMinCharsState {
	BACKGROUND-COLOR: #ff9f9f
}
.textareaMinCharsState TEXTAREA {
	BACKGROUND-COLOR: #ff9f9f
}
TEXTAREA.textareaMaxCharsState {
	BACKGROUND-COLOR: #ff9f9f
}
.textareaMaxCharsState TEXTAREA {
	BACKGROUND-COLOR: #ff9f9f
}
.textareaFocusState TEXTAREA {
	BACKGROUND-COLOR: #ffffcc
}
TEXTAREA.textareaFocusState {
	BACKGROUND-COLOR: #ffffcc
}
.textareaFlashState TEXTAREA {
	COLOR: red !important
}
TEXTAREA.textareaFlashState {
	COLOR: red !important
}
TEXTAREA.textareaHintState {
=09
}
.textareaHintState TEXTAREA {
=09
}

------=_NextPart_000_0000_01CCD9AF.2F84AC70
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.greenville.k12.sc.us/gcsd/schools/forms_career/SpryValidationTextField.js

// SpryValidationTextField.js - version 0.37 - Spry Pre-Release 1.6.1
//
// Copyright (c) 2006. Adobe Systems Incorporated.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions =
are met:
//
//   * Redistributions of source code must retain the above copyright =
notice,
//     this list of conditions and the following disclaimer.
//   * Redistributions in binary form must reproduce the above copyright =
notice,
//     this list of conditions and the following disclaimer in the =
documentation
//     and/or other materials provided with the distribution.
//   * Neither the name of Adobe Systems Incorporated nor the names of =
its
//     contributors may be used to endorse or promote products derived =
from this
//     software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS =
"AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, =
THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR =
PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS =
BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR =
BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER =
IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR =
OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED =
OF THE
// POSSIBILITY OF SUCH DAMAGE.

var Spry;
if (!Spry) Spry =3D {};
if (!Spry.Widget) Spry.Widget =3D {};

Spry.Widget.BrowserSniff =3D function()
{
	var b =3D navigator.appName.toString();
	var up =3D navigator.platform.toString();
	var ua =3D navigator.userAgent.toString();

	this.mozilla =3D this.ie =3D this.opera =3D this.safari =3D false;
	var re_opera =3D /Opera.([0-9\.]*)/i;
	var re_msie =3D /MSIE.([0-9\.]*)/i;
	var re_gecko =3D /gecko/i;
	var re_safari =3D /(applewebkit|safari)\/([\d\.]*)/i;
	var r =3D false;

	if ( (r =3D ua.match(re_opera))) {
		this.opera =3D true;
		this.version =3D parseFloat(r[1]);
	} else if ( (r =3D ua.match(re_msie))) {
		this.ie =3D true;
		this.version =3D parseFloat(r[1]);
	} else if ( (r =3D ua.match(re_safari))) {
		this.safari =3D true;
		this.version =3D parseFloat(r[2]);
	} else if (ua.match(re_gecko)) {
		var re_gecko_version =3D /rv:\s*([0-9\.]+)/i;
		r =3D ua.match(re_gecko_version);
		this.mozilla =3D true;
		this.version =3D parseFloat(r[1]);
	}
	this.windows =3D this.mac =3D this.linux =3D false;

	this.Platform =3D ua.match(/windows/i) ? "windows" :
					(ua.match(/linux/i) ? "linux" :
					(ua.match(/mac/i) ? "mac" :
					ua.match(/unix/i)? "unix" : "unknown"));
	this[this.Platform] =3D true;
	this.v =3D this.version;

	if (this.safari && this.mac && this.mozilla) {
		this.mozilla =3D false;
	}
};

Spry.is =3D new Spry.Widget.BrowserSniff();

Spry.Widget.ValidationTextField =3D function(element, type, options)
{
	type =3D Spry.Widget.Utils.firstValid(type, "none");
	if (typeof type !=3D 'string') {
		this.showError('The second parameter in the constructor should be the =
validation type, the options are the third parameter.');
		return;
	}
	if (typeof Spry.Widget.ValidationTextField.ValidationDescriptors[type] =
=3D=3D 'undefined') {
		this.showError('Unknown validation type received as the second =
parameter.');
		return;
	}
	options =3D Spry.Widget.Utils.firstValid(options, {});
	this.type =3D type;
	if (!this.isBrowserSupported()) {
		//disable character masking and pattern behaviors for low level =
browsers
		options.useCharacterMasking =3D false;
	}
	this.init(element, options);

	//make sure we validate at least on submit
	var validateOn =3D =
['submit'].concat(Spry.Widget.Utils.firstValid(this.options.validateOn, =
[]));
	validateOn =3D validateOn.join(",");

	this.validateOn =3D 0;
	this.validateOn =3D this.validateOn | (validateOn.indexOf('submit') =
!=3D -1 ? Spry.Widget.ValidationTextField.ONSUBMIT : 0);
	this.validateOn =3D this.validateOn | (validateOn.indexOf('blur') !=3D =
-1 ? Spry.Widget.ValidationTextField.ONBLUR : 0);
	this.validateOn =3D this.validateOn | (validateOn.indexOf('change') =
!=3D -1 ? Spry.Widget.ValidationTextField.ONCHANGE : 0);

	if (Spry.Widget.ValidationTextField.onloadDidFire)
		this.attachBehaviors();
	else
		Spry.Widget.ValidationTextField.loadQueue.push(this);
};

Spry.Widget.ValidationTextField.ONCHANGE =3D 1;
Spry.Widget.ValidationTextField.ONBLUR =3D 2;
Spry.Widget.ValidationTextField.ONSUBMIT =3D 4;

Spry.Widget.ValidationTextField.ERROR_REQUIRED =3D 1;
Spry.Widget.ValidationTextField.ERROR_FORMAT =3D 2;
Spry.Widget.ValidationTextField.ERROR_RANGE_MIN =3D 4;
Spry.Widget.ValidationTextField.ERROR_RANGE_MAX =3D 8;
Spry.Widget.ValidationTextField.ERROR_CHARS_MIN =3D 16;
Spry.Widget.ValidationTextField.ERROR_CHARS_MAX =3D 32;

/* validation parameters:
 *  - characterMasking : prevent typing of characters not matching an =
regular expression
 *  - regExpFilter : additional regular expression to disalow typing of =
characters=20
 *		(like the "-" sign in the middle of the value); use for partial =
matching of the currently typed value;
 * 		the typed value must match regExpFilter at any moment
 *  - pattern : enforce character on each position inside a pattern =
(AX0?)
 *  - validation : function performing logic validation; return false if =
failed and the typedValue value on success
 *  - minValue, maxValue : range validation; check if typedValue inside =
the specified range
 *  - minChars, maxChars : value length validation; at least/at most =
number of characters
 * */
Spry.Widget.ValidationTextField.ValidationDescriptors =3D {
	'none': {
	},
	'custom': {
	},
	'integer': {
		characterMasking: /[\-\+\d]/,
		regExpFilter: /^[\-\+]?\d*$/,
		validation: function(value, options) {
			if (value =3D=3D '' || value =3D=3D '-' || value =3D=3D '+') {
				return false;
			}
			var regExp =3D /^[\-\+]?\d*$/;
			if (!regExp.test(value)) {
				return false;
			}
			options =3D options || {allowNegative:false};
			var ret =3D parseInt(value, 10);
			if (!isNaN(ret)) {
				var allowNegative =3D true;
				if (typeof options.allowNegative !=3D 'undefined' && =
options.allowNegative =3D=3D false) {
					allowNegative =3D false;
				}
				if (!allowNegative && value < 0) {
					ret =3D false;
				}
			} else {
				ret =3D false;
			}
			return ret;
		}
	},
	'real': {
		characterMasking: /[\d\.,\-\+e]/i,
		regExpFilter: /^[\-\+]?\d(?:|\.,\d{0,2})|(?:|e{0,1}[\-\+]?\d{0,})$/i,
		validation: function (value, options) {
			var regExp =3D =
/^[\+\-]?[0-9]+([\.,][0-9]+)?([eE]{0,1}[\-\+]?[0-9]+)?$/;
			if (!regExp.test(value)) {
				return false;
			}
			var ret =3D parseFloat(value);
			if (isNaN(ret)) {
				ret =3D false;
			}
			return ret;
		}
	},
	'currency': {
		formats: {
			'dot_comma': {
				characterMasking: /[\d\.\,\-\+\$]/,
				regExpFilter: /^[\-\+]?(?:[\d\.]*)+(|\,\d{0,2})$/,
				validation: function(value, options) {
					var ret =3D false;
					//2 or no digits after the comma
					if (/^(\-|\+)?\d{1,3}(?:\.\d{3})*(?:\,\d{2}|)$/.test(value) || =
/^(\-|\+)?\d+(?:\,\d{2}|)$/.test(value)) {
						value =3D value.toString().replace(/\./gi, '').replace(/\,/, '.');
						ret =3D parseFloat(value);
					}
					return ret;
				}
			},
			'comma_dot': {
				characterMasking: /[\d\.\,\-\+\$]/,
				regExpFilter: /^[\-\+]?(?:[\d\,]*)+(|\.\d{0,2})$/,
				validation: function(value, options) {
					var ret =3D false;
					//2 or no digits after the comma
					if (/^(\-|\+)?\d{1,3}(?:\,\d{3})*(?:\.\d{2}|)$/.test(value) || =
/^(\-|\+)?\d+(?:\.\d{2}|)$/.test(value)) {
						value =3D value.toString().replace(/\,/gi, '');
						ret =3D parseFloat(value);
					}
					return ret;
				}
			}
		}
	},
	'email': {
		characterMasking: /[^\s]/,
		validation: function(value, options) {
			var rx =3D /^[\w\.-]+@[\w\.-]+\.\w+$/i;
			return rx.test(value);
		}
	},
	'date': {
		validation: function(value, options) {
			var formatRegExp =3D =
/^([mdy]+)[\.\-\/\\\s]+([mdy]+)[\.\-\/\\\s]+([mdy]+)$/i;
			var valueRegExp =3D this.dateValidationPattern;
			var formatGroups =3D options.format.match(formatRegExp);
			var valueGroups =3D value.match(valueRegExp);
			if (formatGroups !=3D=3D null && valueGroups !=3D=3D null) {
				var dayIndex =3D -1;
				var monthIndex =3D -1;
				var yearIndex =3D -1;
				for (var i=3D1; i<formatGroups.length; i++) {
					switch (formatGroups[i].toLowerCase()) {
						case "dd":
							dayIndex =3D i;
							break;
						case "mm":
							monthIndex =3D i;
							break;
						case "yy":
						case "yyyy":
							yearIndex =3D i;
							break;
					}
				}
				if (dayIndex !=3D -1 && monthIndex !=3D -1 && yearIndex !=3D -1) {
					var maxDay =3D -1;
					var theDay =3D parseInt(valueGroups[dayIndex], 10);
					var theMonth =3D parseInt(valueGroups[monthIndex], 10);
					var theYear =3D parseInt(valueGroups[yearIndex], 10);

					// Check month value to be between 1..12
					if (theMonth < 1 || theMonth > 12) {
						return false;
					}
				=09
					// Calculate the maxDay according to the current month
					switch (theMonth) {
						case 1:	// January
						case 3: // March
						case 5: // May
						case 7: // July
						case 8: // August
						case 10: // October
						case 12: // December
							maxDay =3D 31;
							break;
						case 4:	// April
						case 6: // June
						case 9: // September
						case 11: // November
							maxDay =3D 30;
							break;
						case 2: // February
							if ((parseInt(theYear/4, 10) * 4 =3D=3D theYear) && (theYear % =
100 !=3D 0 || theYear % 400 =3D=3D 0)) {
								maxDay =3D 29;
							} else {
								maxDay =3D 28;
							}
							break;
					}

					// Check day value to be between 1..maxDay
					if (theDay < 1 || theDay > maxDay) {
						return false;
					}
				=09
					// If successfull we'll return the date object
					return (new Date(theYear, theMonth - 1, theDay));   //JavaScript =
requires a month between 0 and 11
				}
			} else {
				return false;
			}
		}
	},
	'time': {
		validation: function(value, options) {
			//	HH:MM:SS T
			var formatRegExp =3D /([hmst]+)/gi;
			var valueRegExp =3D /(\d+|AM?|PM?)/gi;
			var formatGroups =3D options.format.match(formatRegExp);
			var valueGroups =3D value.match(valueRegExp);
			//mast match and have same length
			if (formatGroups !=3D=3D null && valueGroups !=3D=3D null) {
				if (formatGroups.length !=3D valueGroups.length) {
					return false;
				}

				var hourIndex =3D -1;
				var minuteIndex =3D -1;
				var secondIndex =3D -1;
				//T is AM or PM
				var tIndex =3D -1;
				var theHour =3D 0, theMinute =3D 0, theSecond =3D 0, theT =3D 'AM';
				for (var i=3D0; i<formatGroups.length; i++) {
					switch (formatGroups[i].toLowerCase()) {
						case "hh":
							hourIndex =3D i;
							break;
						case "mm":
							minuteIndex =3D i;
							break;
						case "ss":
							secondIndex =3D i;
							break;
						case "t":
						case "tt":
							tIndex =3D i;
							break;
					}
				}
				if (hourIndex !=3D -1) {
					var theHour =3D parseInt(valueGroups[hourIndex], 10);
					if (isNaN(theHour) || theHour > (formatGroups[hourIndex] =3D=3D =
'HH' ? 23 : 12 )) {
						return false;
					}
				}
				if (minuteIndex !=3D -1) {
					var theMinute =3D parseInt(valueGroups[minuteIndex], 10);
					if (isNaN(theMinute) || theMinute > 59) {
						return false;
					}
				}
				if (secondIndex !=3D -1) {
					var theSecond =3D parseInt(valueGroups[secondIndex], 10);
					if (isNaN(theSecond) || theSecond > 59) {
						return false;
					}
				}
				if (tIndex !=3D -1) {
					var theT =3D valueGroups[tIndex].toUpperCase();
					if (
						formatGroups[tIndex].toUpperCase() =3D=3D 'TT' && =
!/^a|pm$/i.test(theT) ||=20
						formatGroups[tIndex].toUpperCase() =3D=3D 'T' && =
!/^a|p$/i.test(theT)
					) {
						return false;
					}
				}
				var date =3D new Date(2000, 0, 1, theHour + (theT.charAt(0) =3D=3D =
'P'?12:0), theMinute, theSecond);
				return date;
			} else {
				return false;
			}
		}
	},
	'credit_card': {
		characterMasking: /\d/,
		validation: function(value, options) {
			var regExp =3D null;
			options.format =3D options.format || 'ALL';
			switch (options.format.toUpperCase()) {
				case 'ALL': regExp =3D /^[3-6]{1}[0-9]{12,18}$/; break;
				case 'VISA': regExp =3D /^4(?:[0-9]{12}|[0-9]{15})$/; break;
				case 'MASTERCARD': regExp =3D /^5[1-5]{1}[0-9]{14}$/; break;
				case 'AMEX': regExp =3D /^3(4|7){1}[0-9]{13}$/; break;
				case 'DISCOVER': regExp =3D /^6011[0-9]{12}$/; break;
				case 'DINERSCLUB': regExp =3D =
/^3(?:(0[0-5]{1}[0-9]{11})|(6[0-9]{12})|(8[0-9]{12}))$/; break;
			}
			if (!regExp.test(value)) {
				return false;
			}
			var digits =3D [];
			var j =3D 1, digit =3D '';
			for (var i =3D value.length - 1; i >=3D 0; i--) {
				if ((j%2) =3D=3D 0) {
					digit =3D parseInt(value.charAt(i), 10) * 2;
					digits[digits.length] =3D digit.toString().charAt(0);
					if (digit.toString().length =3D=3D 2) {
						digits[digits.length] =3D digit.toString().charAt(1);
					}
				} else {
					digit =3D value.charAt(i);
					digits[digits.length] =3D digit;
				}
				j++;
			}
			var sum =3D 0;
			for(i=3D0; i < digits.length; i++ ) {
				sum +=3D parseInt(digits[i], 10);
			}
			if ((sum%10) =3D=3D 0) {
				return true;
			}
			return false;
		}
	},
	'zip_code': {
		formats: {
			'zip_us9': {
				pattern:'00000-0000'
			},
			'zip_us5': {
				pattern:'00000'
			},
			'zip_uk': {
				characterMasking: /[\dA-Z\s]/,
				validation: function(value, options) {
					//check one of the following masks
					// AN NAA, ANA NAA, ANN NAA, AAN NAA, AANA NAA, AANN NAA
					return /^[A-Z]{1,2}\d[\dA-Z]?\s?\d[A-Z]{2}$/.test(value);
				}
			},
			'zip_canada': {
				characterMasking: /[\dA-Z\s]/,
				pattern: 'A0A 0A0'
			},
			'zip_custom': {}
		}
	},
	'phone_number': {
		formats: {
			//US phone number; 10 digits
			'phone_us': {
				pattern:'(000) 000-0000'
			},
			'phone_custom': {}
		}
	},
	'social_security_number': {
		pattern:'000-00-0000'
	},
	'ip': {
		characterMaskingFormats: {
			'ipv4': /[\d\.]/i,
			'ipv6_ipv4': /[\d\.\:A-F\/]/i,
			'ipv6': /[\d\.\:A-F\/]/i
		},
		validation: function (value, options) {
			return Spry.Widget.ValidationTextField.validateIP(value, =
options.format);
		}
	},

	'url': {
		characterMasking: /[^\s]/,
		validation: function(value, options) {
			//fix for ?ID=3D223429 and ?ID=3D223387
			/* the following regexp matches components of an URI as specified in =
http://tools.ietf.org/html/rfc3986#page-51 page 51, Appendix B.
				scheme    =3D $2
				authority =3D $4
				path      =3D $5
				query     =3D $7
				fragment  =3D $9
			*/
			var URI_spliter =3D =
/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;
			var parts =3D value.match(URI_spliter);
			if (parts && parts[4]) {
				//encode each component of the domain name using Punycode encoding =
scheme: http://tools.ietf.org/html/rfc3492
				var host  =3D parts[4].split(".");
				var punyencoded =3D '';
				for (var i=3D0; i<host.length; i++) {
					punyencoded =3D Spry.Widget.Utils.punycode_encode(host[i], 64);
					if (!punyencoded) {
						return false;
					} else {
						if (punyencoded !=3D (host[i] + "-")) {
							host[i] =3D 'xn--' + punyencoded;
						}
					}
				}
				host =3D host .join(".");
				//the encoded domain name is replaced into the original URL to be =
validated again later as URL
				value =3D value.replace(URI_spliter, "$1//" + host + "$5$6$8");
			}

			//fix for ?ID=3D223358 and ?ID=3D223594
			//the following validates an URL using ABNF rules as defined in =
http://tools.ietf.org/html/rfc3986 , Appendix A., page 49
			//except host which is extracted by match[1] and validated separately
			/*
			 * userinfo=3D	=
(?:(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=3D:]|%[0-9a-f]{2,2})*\@)?
			 * host=3D			=
(?:((?:(?:[a-z0-9][a-z0-9\-]*[a-z0-9]|[a-z0-9])\.)*(?:[a-z][a-z0-9\-]*[a-=
z0-9]|[a-z])|(?:\[[^\]]*\]))
			 * pathname=3D	=
(?:\/(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=3D\:\@]|%[0-9a-f]{2,2})*)*
			 * query=3D			=
(?:\?(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=3D\:\@\/\?]|%[0-9a-f]{2,2})*)?=

			 * anchor=3D		=
(?:\#(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=3D\:\@\/\?]|%[0-9a-f]{2,2})*)?=

			 */
			var regExp =3D =
/^(?:https?|ftp)\:\/\/(?:(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=3D:]|%[0-9=
a-f]{2,2})*\@)?(?:((?:(?:[a-z0-9][a-z0-9\-]*[a-z0-9]|[a-z0-9])\.)*(?:[a-z=
][a-z0-9\-]*[a-z0-9]|[a-z])|(?:\[[^\]]*\]))(?:\:[0-9]*)?)(?:\/(?:[a-z0-9\=
-\._~\!\$\&\'\(\)\*\+\,\;\=3D\:\@]|%[0-9a-f]{2,2})*)*(?:\?(?:[a-z0-9\-\._=
~\!\$\&\'\(\)\*\+\,\;\=3D\:\@\/\?]|%[0-9a-f]{2,2})*)?(?:\#(?:[a-z0-9\-\._=
~\!\$\&\'\(\)\*\+\,\;\=3D\:\@\/\?]|%[0-9a-f]{2,2})*)?$/i;

			var valid =3D value.match(regExp);
			if (valid) {
				//extract the  address from URL
				var address =3D valid[1];

				if (address) {
					if (address =3D=3D '[]') {
						return false;
					}
					if (address.charAt(0) =3D=3D '[' ) {
						//IPv6 address or IPv4 enclosed in square brackets
						address =3D address.replace(/^\[|\]$/gi, '');
						return Spry.Widget.ValidationTextField.validateIP(address, =
'ipv6_ipv4');
					} else {
						if (/[^0-9\.]/.test(address)) {
							return true;
						} else {
							//check if hostname is all digits and dots and then check for =
IPv4
							return Spry.Widget.ValidationTextField.validateIP(address, =
'ipv4');
						}
					}
				} else {
					return true;
				}
			} else {
				return false;
			}
		}
	}
};

/*
2.2.1. Preferred
x:x:x:x:x:x:x:x, where the 'x's are the hexadecimal values of the eight =
16-bit pieces of the address.
Examples:
	FEDC:BA98:7654:3210:FEDC:BA98:7654:3210
	1080:0:0:0:8:800:200C:417A
Note that it is not necessary to write the leading zeros in an
individual field, but there must be at least one numeral in every
field (except for the case described in 2.2.2.).

2.2.2. Compressed
The use of "::" indicates multiple groups of 16-bits of zeros.
The "::" can only appear once in an address.  The "::" can also be
used to compress the leading and/or trailing zeros in an address.
	1080:0:0:0:8:800:200C:417A --> 1080::8:800:200C:417A
	FF01:0:0:0:0:0:0:101 --> FF01::101
	0:0:0:0:0:0:0:1 --> ::1
	0:0:0:0:0:0:0:0 --> ::

2.5.4 IPv6 Addresses with Embedded IPv4 Addresses
	IPv4-compatible IPv6 address (tunnel IPv6 packets over IPv4 routing =
infrastructures)
	::0:129.144.52.38
	IPv4-mapped IPv6 address (represent the addresses of IPv4-only nodes as =
IPv6 addresses)
	::ffff:129.144.52.38

The text representation of IPv6 addresses and prefixes in Augmented BNF =
(Backus-Naur Form) [ABNF] for reference purposes.
[ABNF http://tools.ietf.org/html/rfc2234]
      IPv6address =3D hexpart [ ":" IPv4address ]
      IPv4address =3D 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT

      IPv6prefix  =3D hexpart "/" 1*2DIGIT

      hexpart =3D hexseq | hexseq "::" [ hexseq ] | "::" [ hexseq ]
      hexseq  =3D hex4 *( ":" hex4)
      hex4    =3D 1*4HEXDIG
*/
Spry.Widget.ValidationTextField.validateIP =3D function (value, format)
{
	var validIPv6Addresses =3D [
		//preferred
		/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}(?:\/\d{1,3})?$/i,

		//various compressed
		/^[a-f0-9]{0,4}::(?:\/\d{1,3})?$/i,
		/^:(?::[a-f0-9]{1,4}){1,6}(?:\/\d{1,3})?$/i,
		/^(?:[a-f0-9]{1,4}:){1,6}:(?:\/\d{1,3})?$/i,
		/^(?:[a-f0-9]{1,4}:)(?::[a-f0-9]{1,4}){1,6}(?:\/\d{1,3})?$/i,
		/^(?:[a-f0-9]{1,4}:){2}(?::[a-f0-9]{1,4}){1,5}(?:\/\d{1,3})?$/i,
		/^(?:[a-f0-9]{1,4}:){3}(?::[a-f0-9]{1,4}){1,4}(?:\/\d{1,3})?$/i,
		/^(?:[a-f0-9]{1,4}:){4}(?::[a-f0-9]{1,4}){1,3}(?:\/\d{1,3})?$/i,
		/^(?:[a-f0-9]{1,4}:){5}(?::[a-f0-9]{1,4}){1,2}(?:\/\d{1,3})?$/i,
		/^(?:[a-f0-9]{1,4}:){6}(?::[a-f0-9]{1,4})(?:\/\d{1,3})?$/i,


		//IPv6 mixes with IPv4
		/^(?:[a-f0-9]{1,4}:){6}(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,
		/^:(?::[a-f0-9]{1,4}){0,4}:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,
		/^(?:[a-f0-9]{1,4}:){1,5}:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,
		=
/^(?:[a-f0-9]{1,4}:)(?::[a-f0-9]{1,4}){1,4}:(?:\d{1,3}\.){3}\d{1,3}(?:\/\=
d{1,3})?$/i,
		=
/^(?:[a-f0-9]{1,4}:){2}(?::[a-f0-9]{1,4}){1,3}:(?:\d{1,3}\.){3}\d{1,3}(?:=
\/\d{1,3})?$/i,=09
		=
/^(?:[a-f0-9]{1,4}:){3}(?::[a-f0-9]{1,4}){1,2}:(?:\d{1,3}\.){3}\d{1,3}(?:=
\/\d{1,3})?$/i,
		=
/^(?:[a-f0-9]{1,4}:){4}(?::[a-f0-9]{1,4}):(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{=
1,3})?$/i
	];
	var validIPv4Addresses =3D [
		//IPv4
		/^(\d{1,3}\.){3}\d{1,3}$/i
	];
	var validAddresses =3D [];
	if (format =3D=3D 'ipv6' || format =3D=3D 'ipv6_ipv4') {
		validAddresses =3D validAddresses.concat(validIPv6Addresses);
	}
	if (format =3D=3D 'ipv4' || format =3D=3D 'ipv6_ipv4') {
		validAddresses =3D validAddresses.concat(validIPv4Addresses);
	}

	var ret =3D false;
	for (var i=3D0; i<validAddresses.length; i++) {
		if (validAddresses[i].test(value)) {
			ret =3D true;
			break;
		}
	}

	if (ret && value.indexOf(".") !=3D -1) {
		//if address contains IPv4 fragment, it must be valid; all 4 groups =
must be less than 256
		var ipv4 =3D value.match(/:?(?:\d{1,3}\.){3}\d{1,3}/i);
		if(!ipv4) {
			return false;
		}
		ipv4 =3D ipv4[0].replace(/^:/, '');
		var pieces =3D ipv4.split('.');
		if (pieces.length !=3D 4) {
			return false;
		}
		var regExp =3D /^[\-\+]?\d*$/;
		for (var i=3D0; i< pieces.length; i++) {
			if (pieces[i] =3D=3D '') {
				return false;
			}
			var piece =3D parseInt(pieces[i], 10);
			if (isNaN(piece) || piece > 255 || !regExp.test(pieces[i]) || =
pieces[i].length>3 || /^0{2,3}$/.test(pieces[i])) {
				return false;
			}
		}
	}
	if (ret && value.indexOf("/") !=3D -1) {
		// if prefix-length is specified must be in [1-128]
		var prefLen =3D value.match(/\/\d{1,3}$/);
		if (!prefLen) return false;
		var prefLenVal =3D parseInt(prefLen[0].replace(/^\//,''), 10);
		if (isNaN(prefLenVal) || prefLenVal > 128 || prefLenVal < 1) {
			return false;
		}
	}
	return ret;
};

Spry.Widget.ValidationTextField.onloadDidFire =3D false;
Spry.Widget.ValidationTextField.loadQueue =3D [];

Spry.Widget.ValidationTextField.prototype.isBrowserSupported =3D =
function()
{
	return Spry.is.ie && Spry.is.v >=3D 5 && Spry.is.windows
		||
	Spry.is.mozilla && Spry.is.v >=3D 1.4
		||
	Spry.is.safari
		||
	Spry.is.opera && Spry.is.v >=3D 9;
};

Spry.Widget.ValidationTextField.prototype.init =3D function(element, =
options)
{
	this.element =3D this.getElement(element);
	this.errors =3D 0;
	this.flags =3D {locked: false, restoreSelection: true};
	this.options =3D {};
	this.event_handlers =3D [];

	this.validClass =3D "textfieldValidState";
	this.focusClass =3D "textfieldFocusState";
	this.requiredClass =3D "textfieldRequiredState";
	this.hintClass =3D "textfieldHintState";
	this.invalidFormatClass =3D "textfieldInvalidFormatState";
	this.invalidRangeMinClass =3D "textfieldMinValueState";
	this.invalidRangeMaxClass =3D "textfieldMaxValueState";
	this.invalidCharsMinClass =3D "textfieldMinCharsState";
	this.invalidCharsMaxClass =3D "textfieldMaxCharsState";
	this.textfieldFlashTextClass =3D "textfieldFlashText";
	if (Spry.is.safari) {
		this.flags.lastKeyPressedTimeStamp =3D 0;
	}

	switch (this.type) {
		case 'phone_number':options.format =3D =
Spry.Widget.Utils.firstValid(options.format, 'phone_us');break;
		case 'currency':options.format =3D =
Spry.Widget.Utils.firstValid(options.format, 'comma_dot');break;
		case 'zip_code':options.format =3D =
Spry.Widget.Utils.firstValid(options.format, 'zip_us5');break;
		case 'date':
			options.format =3D Spry.Widget.Utils.firstValid(options.format, =
'mm/dd/yy');
			break;
		case 'time':
			options.format =3D Spry.Widget.Utils.firstValid(options.format, =
'HH:mm');
			options.pattern =3D options.format.replace(/[hms]/gi, =
"0").replace(/TT/gi, 'AM').replace(/T/gi, 'A');
			break;
		case 'ip':
			options.format =3D Spry.Widget.Utils.firstValid(options.format, =
'ipv4');
			options.characterMasking =3D =
Spry.Widget.ValidationTextField.ValidationDescriptors[this.type].characte=
rMaskingFormats[options.format];=20
			break;
	}

	//retrieve the validation type descriptor to be used with this instance =
(base on type and format)
	//widgets may have different validations depending on format (like =
zip_code with formats)
	var validationDescriptor =3D {};
	if (options.format && =
Spry.Widget.ValidationTextField.ValidationDescriptors[this.type].formats)=
 {
		if =
(Spry.Widget.ValidationTextField.ValidationDescriptors[this.type].formats=
[options.format]) {
			Spry.Widget.Utils.setOptions(validationDescriptor, =
Spry.Widget.ValidationTextField.ValidationDescriptors[this.type].formats[=
options.format]);
		}
	} else {
		Spry.Widget.Utils.setOptions(validationDescriptor, =
Spry.Widget.ValidationTextField.ValidationDescriptors[this.type]);
	}

	//set default values for some parameters which were not aspecified
	options.useCharacterMasking =3D =
Spry.Widget.Utils.firstValid(options.useCharacterMasking, false);
	options.hint =3D Spry.Widget.Utils.firstValid(options.hint, '');
	options.isRequired =3D Spry.Widget.Utils.firstValid(options.isRequired, =
true);
	options.additionalError =3D =
Spry.Widget.Utils.firstValid(options.additionalError, false);
	if (options.additionalError)
		options.additionalError =3D this.getElement(options.additionalError);

	//set widget validation parameters
	//get values from validation type descriptor
	//use the user specified values, if defined
	options.characterMasking =3D =
Spry.Widget.Utils.firstValid(options.characterMasking, =
validationDescriptor.characterMasking);
	options.regExpFilter =3D =
Spry.Widget.Utils.firstValid(options.regExpFilter, =
validationDescriptor.regExpFilter);
	options.pattern =3D Spry.Widget.Utils.firstValid(options.pattern, =
validationDescriptor.pattern);
	options.validation =3D Spry.Widget.Utils.firstValid(options.validation, =
validationDescriptor.validation);
	if (typeof options.validation =3D=3D 'string') {
		options.validation =3D eval(options.validation);
	}

	options.minValue =3D Spry.Widget.Utils.firstValid(options.minValue, =
validationDescriptor.minValue);
	options.maxValue =3D Spry.Widget.Utils.firstValid(options.maxValue, =
validationDescriptor.maxValue);

	options.minChars =3D Spry.Widget.Utils.firstValid(options.minChars, =
validationDescriptor.minChars);
	options.maxChars =3D Spry.Widget.Utils.firstValid(options.maxChars, =
validationDescriptor.maxChars);

	Spry.Widget.Utils.setOptions(this, options);
	Spry.Widget.Utils.setOptions(this.options, options);
};

Spry.Widget.ValidationTextField.prototype.destroy =3D function() {
	if (this.event_handlers)
		for (var i=3D0; i<this.event_handlers.length; i++) {
			Spry.Widget.Utils.removeEventListener(this.event_handlers[i][0], =
this.event_handlers[i][1], this.event_handlers[i][2], false);
		}
	try { delete this.element; } catch(err) {}
	try { delete this.input; } catch(err) {}
	try { delete this.form; } catch(err) {}
	try { delete this.event_handlers; } catch(err) {}
	try { this.selection.destroy(); } catch(err) {}
	try { delete this.selection; } catch(err) {}

	var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
	var qlen =3D q.length;
	for (var i =3D 0; i < qlen; i++) {
		if (q[i] =3D=3D this) {
			q.splice(i, 1);
			break;
		}
	}
};

Spry.Widget.ValidationTextField.prototype.attachBehaviors =3D function()
{
	if (this.element) {
		if (this.element.nodeName =3D=3D "INPUT") {
			this.input =3D this.element;
		} else {
			this.input =3D =
Spry.Widget.Utils.getFirstChildWithNodeNameAtAnyLevel(this.element, =
"INPUT");
		}
	}

	if (this.input) {
		if (this.maxChars) {
			this.input.removeAttribute("maxLength");
		}
		this.putHint();
		this.compilePattern();
		if (this.type =3D=3D 'date') {
			this.compileDatePattern();
		}
		this.input.setAttribute("AutoComplete", "off");
		this.selection =3D new Spry.Widget.SelectionDescriptor(this.input);
		this.oldValue =3D this.input.value;

		var self =3D this;
		this.event_handlers =3D [];

		this.event_handlers.push([this.input, "keydown", function(e) { if =
(self.isDisabled()) return true; return self.onKeyDown(e || event); }]);
		this.event_handlers.push([this.input, "keypress", function(e) { if =
(self.isDisabled()) return true; return self.onKeyPress(e || event); =
}]);
		if (Spry.is.opera) {
			this.event_handlers.push([this.input, "keyup", function(e) { if =
(self.isDisabled()) return true; return self.onKeyUp(e || event); }]);
		}

		this.event_handlers.push([this.input, "focus", function(e) { if =
(self.isDisabled()) return true; return self.onFocus(e || event); }]);
		this.event_handlers.push([this.input, "blur", function(e) { if =
(self.isDisabled()) return true; return self.onBlur(e || event); }]);

		this.event_handlers.push([this.input, "mousedown", function(e) { if =
(self.isDisabled()) return true; return self.onMouseDown(e || event); =
}]);

		var changeEvent =3D=20
			Spry.is.mozilla || Spry.is.opera || Spry.is.safari?"input":
			Spry.is.ie?"propertychange":
			"change";
		this.event_handlers.push([this.input, changeEvent, function(e) { if =
(self.isDisabled()) return true; return self.onChange(e || event); }]);

		if (Spry.is.mozilla || Spry.is.safari) {
			//oninput event on mozilla does not fire ondragdrop
			this.event_handlers.push([this.input, "dragdrop", function(e) { if =
(self.isDisabled()) return true; self.removeHint();return =
self.onChange(e || event); }]);
		} else if (Spry.is.ie){
			//ondrop&onpropertychange crash on IE=20
			this.event_handlers.push([this.input, "drop", function(e) { if =
(self.isDisabled()) return true; return self.onDrop(e || event); }]);
		}

		for (var i=3D0; i<this.event_handlers.length; i++) {
			Spry.Widget.Utils.addEventListener(this.event_handlers[i][0], =
this.event_handlers[i][1], this.event_handlers[i][2], false);
		}

		// submit
		this.form =3D Spry.Widget.Utils.getFirstParentWithNodeName(this.input, =
"FORM");
		if (this.form) {
			// if no "onSubmit" handler has been attached to the current form, =
attach one
			if (!this.form.attachedSubmitHandler && !this.form.onsubmit) {
				this.form.onsubmit =3D function(e) { e =3D e || event; return =
Spry.Widget.Form.onSubmit(e, e.srcElement || e.currentTarget) };
				this.form.attachedSubmitHandler =3D true;                =20
			}
			if (!this.form.attachedResetHandler) {
				Spry.Widget.Utils.addEventListener(this.form, "reset", function(e) { =
e =3D e || event; return Spry.Widget.Form.onReset(e, e.srcElement || =
e.currentTarget) }, false);
				this.form.attachedResetHandler =3D true;                =20
			}
			// add the currrent widget to the "onSubmit" check queue;
			Spry.Widget.Form.onSubmitWidgetQueue.push(this);
		}
	}=09
};

Spry.Widget.ValidationTextField.prototype.isDisabled =3D function() {
	return this.input && (this.input.disabled || this.input.readOnly) || =
!this.input;
};

Spry.Widget.ValidationTextField.prototype.getElement =3D function(ele)
{
	if (ele && typeof ele =3D=3D "string")
		return document.getElementById(ele);
	return ele;
};

Spry.Widget.ValidationTextField.addLoadListener =3D function(handler)
{
	if (typeof window.addEventListener !=3D 'undefined')
		window.addEventListener('load', handler, false);
	else if (typeof document.addEventListener !=3D 'undefined')
		document.addEventListener('load', handler, false);
	else if (typeof window.attachEvent !=3D 'undefined')
		window.attachEvent('onload', handler);
};

Spry.Widget.ValidationTextField.processLoadQueue =3D function(handler)
{
	Spry.Widget.ValidationTextField.onloadDidFire =3D true;
	var q =3D Spry.Widget.ValidationTextField.loadQueue;
	var qlen =3D q.length;
	for (var i =3D 0; i < qlen; i++)
		q[i].attachBehaviors();
};

Spry.Widget.ValidationTextField.addLoadListener(Spry.Widget.ValidationTex=
tField.processLoadQueue);
Spry.Widget.ValidationTextField.addLoadListener(function(){
	Spry.Widget.Utils.addEventListener(window, "unload", =
Spry.Widget.Form.destroyAll, false);
});

Spry.Widget.ValidationTextField.prototype.setValue =3D =
function(newValue) {
	this.flags.locked =3D true;
	this.input.value =3D newValue;
	this.flags.locked =3D false;
	this.oldValue =3D newValue;
	if (!Spry.is.ie) {
		this.onChange();
	}
};

/**
 * save the state of the input (selection and value) so we can revert to =
it
 * should call this just before modifying the input value
 */
Spry.Widget.ValidationTextField.prototype.saveState =3D function()
{
	this.oldValue =3D this.input.value;
	this.selection.update();
};

Spry.Widget.ValidationTextField.prototype.revertState =3D =
function(revertValue)
{
	if (revertValue !=3D this.input.value) {
		this.input.readOnly =3D true;
		this.input.value =3D revertValue;
		this.input.readOnly =3D false;
		if (Spry.is.safari && this.flags.active) {
			this.input.focus();
		}
	}
  if (this.flags.restoreSelection) {
	this.selection.moveTo(this.selection.start, this.selection.end);
  }

	this.redTextFlash();
};

Spry.Widget.ValidationTextField.prototype.removeHint =3D function()
{
	if (this.flags.hintOn) {
		this.input.value =3D "";
		this.flags.hintOn =3D false;
		this.removeClassName(this.element, this.hintClass);
		this.removeClassName(this.additionalError, this.hintClass);
	}
};

Spry.Widget.ValidationTextField.prototype.putHint =3D function()
{
	if(this.hint && this.input && this.input.type =3D=3D "text" && =
this.input.value =3D=3D "") {
		this.flags.hintOn =3D true;
		this.input.value =3D this.hint;
		this.addClassName(this.element, this.hintClass);
		this.addClassName(this.additionalError, this.hintClass);
	}
};

Spry.Widget.ValidationTextField.prototype.redTextFlash =3D function()
{
	var self =3D this;
	this.addClassName(this.element, this.textfieldFlashTextClass);
	setTimeout(function() {
		self.removeClassName(self.element, self.textfieldFlashTextClass)
	}, 100);
};

Spry.Widget.ValidationTextField.prototype.doValidations =3D =
function(testValue, revertValue)
{
	if (this.isDisabled()) return false;

	if (this.flags.locked) {
		return false;
	}

	if (testValue.length =3D=3D 0 && !this.isRequired) {
		this.errors =3D 0;
		return false;
	}
	this.flags.locked =3D true;

	var mustRevert =3D false;
	var continueValidations =3D true;
	if (!this.options.isRequired && testValue.length =3D=3D 0) {
		continueValidations =3D false;
	}

	var errors =3D 0;
	var fixedValue =3D testValue;

	//characterMasking - test if all characters are valid with the =
characterMasking (keyboard filter)
	if (this.useCharacterMasking && this.characterMasking) {
		for(var i=3D0; i<testValue.length; i++) {
			if (!this.characterMasking.test(testValue.charAt(i))) {
				errors =3D errors | Spry.Widget.ValidationTextField.ERROR_FORMAT;
				fixedValue =3D revertValue;
				mustRevert =3D true;
				break;
			}
		}
	}

	//regExpFilter - character mask positioning (additional mask to =
restrict some characters only in some position)
	if (!mustRevert && this.useCharacterMasking && this.regExpFilter) {
		if (!this.regExpFilter.test(fixedValue)) {
			errors =3D errors | Spry.Widget.ValidationTextField.ERROR_FORMAT;
			mustRevert =3D true;
		}
	}

	//pattern - testValue matches the pattern so far
	if (!mustRevert && this.pattern) {
		var currentRegExp =3D this.patternToRegExp(testValue.length);
		if (!currentRegExp.test(testValue)) {
			errors =3D errors | Spry.Widget.ValidationTextField.ERROR_FORMAT;
			mustRevert =3D true;
		} else if (this.patternLength !=3D testValue.length) {
			//testValue matches pattern so far, but it's not ok if it does not =
have the proper length
			//do not revert, but should show the error
			errors =3D errors | Spry.Widget.ValidationTextField.ERROR_FORMAT;
		}
	}

	if (fixedValue =3D=3D '') {
		errors =3D errors | Spry.Widget.ValidationTextField.ERROR_REQUIRED;
	}

	if (!mustRevert && this.pattern && this.useCharacterMasking) {
		var n =3D this.getAutoComplete(testValue.length);
		if (n) {
			fixedValue +=3D n;
		}
	}

	if(!mustRevert && this.minChars !=3D=3D null  && continueValidations) {
		if (testValue.length < this.minChars) {
			errors =3D errors | Spry.Widget.ValidationTextField.ERROR_CHARS_MIN;
			continueValidations =3D false;
		}
	}

	if(!mustRevert && this.maxChars !=3D=3D null && continueValidations) {
		if (testValue.length > this.maxChars) {
			errors =3D errors | Spry.Widget.ValidationTextField.ERROR_CHARS_MAX;
			continueValidations =3D false;
		}
	}

	//validation - testValue passes widget validation function
	if (!mustRevert && this.validation && continueValidations) {
		var value =3D this.validation(fixedValue, this.options);
		if (false =3D=3D=3D value) {
			errors =3D errors | Spry.Widget.ValidationTextField.ERROR_FORMAT;
			continueValidations =3D false;
		} else {
			this.typedValue =3D value;
		}
	}

	if(!mustRevert && this.validation && this.minValue !=3D=3D null && =
continueValidations) {
		var minValue =3D this.validation(this.minValue.toString(), =
this.options);
		if (minValue !=3D=3D false) {
			if (this.typedValue < minValue) {
				errors =3D errors | Spry.Widget.ValidationTextField.ERROR_RANGE_MIN;
				continueValidations =3D false;
			}
		}
	}

	if(!mustRevert && this.validation && this.maxValue !=3D=3D null && =
continueValidations) {
		var maxValue =3D this.validation(this.maxValue.toString(), =
this.options);
		if (maxValue !=3D=3D false) {
			if( this.typedValue > maxValue) {
				errors =3D errors | Spry.Widget.ValidationTextField.ERROR_RANGE_MAX;
				continueValidations =3D false;
			}
		}
	}

	//an invalid value was tested; must make sure it does not get inside =
the input
	if (this.useCharacterMasking && mustRevert) {
		this.revertState(revertValue);
	}

	this.errors =3D errors;
	this.fixedValue =3D fixedValue;

	this.flags.locked =3D false;

	return mustRevert;
};

Spry.Widget.ValidationTextField.prototype.onChange =3D function(e)
{
	if (Spry.is.opera && this.flags.operaRevertOnKeyUp) {
		return true;
	}
	if (Spry.is.ie && e && e.propertyName !=3D 'value') {
		return true;
	}

	if (this.flags.drop) {
		//delay this if it's a drop operation
		var self =3D this;
		setTimeout(function() {
			self.flags.drop =3D false;
			self.onChange(null);
		}, 0);
		return;
	}

	if (this.flags.hintOn) {
		return true;
	}

	if (this.keyCode =3D=3D 8 || this.keyCode =3D=3D 46 ) {
		var mustRevert =3D this.doValidations(this.input.value, =
this.input.value);
		this.oldValue =3D this.input.value;
		if ((mustRevert || this.errors) && this.validateOn & =
Spry.Widget.ValidationTextField.ONCHANGE) {
			var self =3D this;
			setTimeout(function() {self.validate();}, 0);
			return true;
		}
	}

	var mustRevert =3D this.doValidations(this.input.value, this.oldValue);
	if ((!mustRevert || this.errors) && this.validateOn & =
Spry.Widget.ValidationTextField.ONCHANGE) {
		var self =3D this;
		setTimeout(function() {self.validate();}, 0);
	}
	return true;
};

Spry.Widget.ValidationTextField.prototype.onKeyUp =3D function(e) {
	if (this.flags.operaRevertOnKeyUp) {
		this.setValue(this.oldValue);
		Spry.Widget.Utils.stopEvent(e);
		this.selection.moveTo(this.selection.start, this.selection.start);
		this.flags.operaRevertOnKeyUp =3D false;
		return false;
	}
	if (this.flags.operaPasteOperation) {
		window.clearInterval(this.flags.operaPasteOperation);
		this.flags.operaPasteOperation =3D null;
	}
};

Spry.Widget.ValidationTextField.prototype.operaPasteMonitor =3D =
function() {
	if (this.input.value !=3D this.oldValue) {
		var mustRevert =3D this.doValidations(this.input.value, =
this.input.value);
		if (mustRevert) {
			this.setValue(this.oldValue);
			this.selection.moveTo(this.selection.start, this.selection.start);
		} else {
			this.onChange();
		}
	}
};


Spry.Widget.ValidationTextField.prototype.compileDatePattern =3D =
function ()=20
{
	var dateValidationPatternString =3D "";
	var groupPatterns =3D [];
	var fullGroupPatterns =3D [];
	var autocompleteCharacters =3D [];
=09
=09
	var formatRegExp =3D =
/^([mdy]+)([\.\-\/\\\s]+)([mdy]+)([\.\-\/\\\s]+)([mdy]+)$/i;
	var formatGroups =3D this.options.format.match(formatRegExp);
	if (formatGroups !=3D=3D null) {
		for (var i=3D1; i<formatGroups.length; i++) {
			switch (formatGroups[i].toLowerCase()) {
				case "dd":
					groupPatterns[i-1] =3D "\\d{1,2}";
					fullGroupPatterns[i-1] =3D "\\d\\d";
					dateValidationPatternString +=3D "(" + groupPatterns[i-1] + ")";
					autocompleteCharacters[i-1] =3D null;
					break;
				case "mm":
					groupPatterns[i-1] =3D "\\d{1,2}";
					fullGroupPatterns[i-1] =3D "\\d\\d";
					dateValidationPatternString +=3D "(" + groupPatterns[i-1] + ")";
					autocompleteCharacters[i-1] =3D null;
					break;
				case "yy":
					groupPatterns[i-1] =3D "\\d{1,2}";
					fullGroupPatterns[i-1] =3D "\\d\\d";
					dateValidationPatternString +=3D "(\\d\\d)";
					autocompleteCharacters[i-1] =3D null;
					break;
				case "yyyy":
					groupPatterns[i-1] =3D "\\d{1,4}";
					fullGroupPatterns[i-1] =3D "\\d\\d\\d\\d";
					dateValidationPatternString +=3D "(\\d\\d\\d\\d)";
					autocompleteCharacters[i-1] =3D null;
					break;
				default:
					groupPatterns[i-1] =3D fullGroupPatterns[i-1] =3D =
Spry.Widget.ValidationTextField.regExpFromChars(formatGroups[i]);
					dateValidationPatternString +=3D "["+ groupPatterns[i-1] + "]";
					autocompleteCharacters[i-1] =3D formatGroups[i];
			}
		}
	}
	this.dateValidationPattern =3D new RegExp("^" + =
dateValidationPatternString + "$" , "");
	this.dateAutocompleteCharacters =3D autocompleteCharacters;
	this.dateGroupPatterns =3D groupPatterns;
	this.dateFullGroupPatterns =3D fullGroupPatterns;
	this.lastDateGroup =3D formatGroups.length-2;
};

Spry.Widget.ValidationTextField.prototype.getRegExpForGroup =3D function =
(group)=20
{
	var ret =3D '^';
	for (var j =3D 0; j <=3D group; j++) ret +=3D =
this.dateGroupPatterns[j];
	ret +=3D '$';
	return new RegExp(ret, "");=09
};

Spry.Widget.ValidationTextField.prototype.getRegExpForFullGroup =3D =
function (group)=20
{
	var ret =3D '^';
	for (var j =3D 0; j < group; j++) ret +=3D this.dateGroupPatterns[j];
	ret +=3D this.dateFullGroupPatterns[group];
	return new RegExp(ret, "");=09
};

Spry.Widget.ValidationTextField.prototype.getDateGroup =3D =
function(value, pos)=20
{
	if (pos =3D=3D 0) return 0;
	var test_value =3D value.substring(0, pos);
	for (var i=3D0; i <=3D this.lastDateGroup; i++)=20
		if (this.getRegExpForGroup(i).test(test_value)) return i;
	return -1;
};


Spry.Widget.ValidationTextField.prototype.isDateGroupFull =3D =
function(value, group)=20
{
	return this.getRegExpForFullGroup(group).test(value);
};

Spry.Widget.ValidationTextField.prototype.isValueValid =3D =
function(value, pos, group)=20
{
	var test_value =3D value.substring(0, pos);
	return this.getRegExpForGroup(group).test(test_value);
};


Spry.Widget.ValidationTextField.prototype.isPositionAtEndOfGroup =3D =
function (value, pos, group)
{
	var test_value =3D value.substring(0, pos);
	return this.getRegExpForFullGroup(group).test(test_value);
};

Spry.Widget.ValidationTextField.prototype.nextDateDelimiterExists =3D =
function (value, pos, group)
{
	var autocomplete =3D this.dateAutocompleteCharacters[group+1];
	if (value.length < pos  + autocomplete.length)=20
		return false;
	else=20
	{
		var test_value =3D value.substring(pos, pos+autocomplete.length);
		if (test_value =3D=3D autocomplete)=20
			return true;
	}
	return false;
};



Spry.Widget.ValidationTextField.prototype.onKeyPress =3D function(e)
{
	if (this.flags.skp) {
		this.flags.skp =3D false;
		Spry.Widget.Utils.stopEvent(e);
		return false;
	}

	if (e.ctrlKey || e.metaKey || !this.useCharacterMasking) {
		return true;
	}
/*
	if (Spry.is.safari) {
		if ( (e.timeStamp - this.flags.lastKeyPressedTimeStamp)<10 ) {
			return true;
		}
		this.flags.lastKeyPressedTimeStamp =3D e.timeStamp;
	}
*/
	if (Spry.is.opera && this.flags.operaRevertOnKeyUp) {
		Spry.Widget.Utils.stopEvent(e);
		return false;
	}

	if (this.keyCode =3D=3D 8 || this.keyCode =3D=3D 46) {
		var mr =3D this.doValidations(this.input.value, this.input.value);
		if (mr) {
			return true;
		}
	}

	var pressed =3D Spry.Widget.Utils.getCharacterFromEvent(e);

	if (pressed && this.characterMasking) {
		if (!this.characterMasking.test(pressed)) {
			Spry.Widget.Utils.stopEvent(e);
			this.redTextFlash();
			return false;
		}
	}

	if(pressed && this.pattern) {
		var currentPatternChar =3D =
this.patternCharacters[this.selection.start];
		if (/[ax]/i.test(currentPatternChar)) {
			//convert the entered character to the pattern character case
			if (currentPatternChar.toLowerCase() =3D=3D currentPatternChar) {
				pressed =3D pressed.toLowerCase();
			} else {
				pressed =3D pressed.toUpperCase();
			}
		}

		var autocomplete =3D this.getAutoComplete(this.selection.start);
		if (this.selection.start =3D=3D this.oldValue.length) {
			if (this.oldValue.length < this.patternLength) {
				if (autocomplete) {
					Spry.Widget.Utils.stopEvent(e);
					var futureValue =3D this.oldValue.substring(0, =
this.selection.start) + autocomplete + pressed;
					var mustRevert =3D this.doValidations(futureValue, this.oldValue);
					if (!mustRevert) {
						this.setValue(this.fixedValue);
						this.selection.moveTo(this.fixedValue.length, =
this.fixedValue.length);
					} else {
						this.setValue(this.oldValue.substring(0, this.selection.start) + =
autocomplete);
						this.selection.moveTo(this.selection.start + autocomplete.length, =
this.selection.start + autocomplete.length);
					}
					return false;
				}
			} else {
				Spry.Widget.Utils.stopEvent(e);
				this.setValue(this.input.value);
				return false;
			}
		} else if (autocomplete) {
			Spry.Widget.Utils.stopEvent(e);
			this.selection.moveTo(this.selection.start + autocomplete.length, =
this.selection.start + autocomplete.length);
			return false;
		}

		Spry.Widget.Utils.stopEvent(e);

		var futureValue =3D this.oldValue.substring(0, this.selection.start) + =
pressed + this.oldValue.substring(this.selection.start + 1);
		var mustRevert =3D this.doValidations(futureValue, this.oldValue);

		if (!mustRevert) {
			autocomplete =3D this.getAutoComplete(this.selection.start + 1);
			this.setValue(this.fixedValue);
			this.selection.moveTo(this.selection.start + 1 + autocomplete.length, =
this.selection.start + 1 + autocomplete.length);
		} else {
			this.selection.moveTo(this.selection.start, this.selection.start);
		}

		return false;
	}
=09
=09
	if (pressed && this.type =3D=3D 'date' && this.useCharacterMasking)=20
	{
		var group =3D this.getDateGroup(this.oldValue, this.selection.start);
		if (group !=3D -1) {
			Spry.Widget.Utils.stopEvent(e);
			if ( (group % 2) !=3D0 )=20
				group ++;
		=09
			if (this.isDateGroupFull(this.oldValue, group))=20
			{
				if(this.isPositionAtEndOfGroup(this.oldValue, this.selection.start, =
group))
				{
					if(group =3D=3D this.lastDateGroup)=20
					{
						this.redTextFlash(); return false;
					}
					else=20
					{
						// add or jump over autocomplete delimiter
						var autocomplete =3D this.dateAutocompleteCharacters[group+1];
					=09
						if (this.nextDateDelimiterExists(this.oldValue, =
this.selection.start, group))
						{
							var autocomplete =3D this.dateAutocompleteCharacters[group+1];
						=09
							this.selection.moveTo(this.selection.start + autocomplete.length, =
this.selection.start + autocomplete.length);
							if (pressed =3D=3D autocomplete)=20
								return false;
						=09
							if (this.isDateGroupFull(this.oldValue, group+2))=20
								// need to overwrite first char in the next digit group
								futureValue =3D this.oldValue.substring(0, this.selection.start) =
+ pressed + this.oldValue.substring(this.selection.start + 1);
							else
								futureValue =3D this.oldValue.substring(0, this.selection.start) =
+ pressed + this.oldValue.substring(this.selection.start);
							=09
							if (!this.isValueValid(futureValue, this.selection.start + 1, =
group +2 ))=20
							{
								this.redTextFlash(); return false;					=09
							}
							else
							{
								this.setValue (futureValue);
								this.selection.moveTo(this.selection.start + 1, =
this.selection.start + 1);								=09
							}
							return false;				=09
						}
						else=20
						{
							var autocomplete =3D this.dateAutocompleteCharacters[group+1];
						=09
							var insertedValue =3D autocomplete + pressed;
							futureValue =3D this.oldValue.substring(0, this.selection.start) =
+ insertedValue + this.oldValue.substring(this.selection.start);
							if (!this.isValueValid(futureValue, this.selection.start + =
insertedValue.length, group +2 ))=20
							{
								// block this type
								insertedValue =3D autocomplete;
								futureValue =3D this.oldValue.substring(0, this.selection.start) =
+ insertedValue + this.oldValue.substring(this.selection.start);
								this.setValue (futureValue);
								this.selection.moveTo(this.selection.start + =
insertedValue.length, this.selection.start + insertedValue.length);						=
		=09
								this.redTextFlash(); return false;
							}
							else=20
							{
								this.setValue (futureValue);
								this.selection.moveTo(this.selection.start + =
insertedValue.length, this.selection.start + insertedValue.length);						=
		=09
								return false;
							}
						}
					=09
					}
				}
				else
				{
					// it's not the end of the full digits group
				=09
					// overwrite
					var movePosition =3D 1;
					futureValue =3D this.oldValue.substring(0, this.selection.start) + =
pressed + this.oldValue.substring(this.selection.start + 1);
					if (!this.isValueValid(futureValue, this.selection.start + 1, =
group))=20
					{
						this.redTextFlash(); return false;
					}
					else=20
					{
						if(this.isPositionAtEndOfGroup(futureValue, =
this.selection.start+1, group))=20
						{
							if (group !=3D this.lastDateGroup)
							{
								if (this.nextDateDelimiterExists(futureValue, =
this.selection.start + 1, group))
								{
									var autocomplete =3D this.dateAutocompleteCharacters[group+1];
									movePosition =3D 1 + autocomplete.length;
								}
								else
								{
									var autocomplete =3D this.dateAutocompleteCharacters[group+1];
									futureValue =3D this.oldValue.substring(0, =
this.selection.start) + pressed + autocomplete + =
this.oldValue.substring(this.selection.start + 1);
									movePosition =3D 1 + autocomplete.length;
								}
							}
						}
						this.setValue (futureValue);
						this.selection.moveTo(this.selection.start + movePosition, =
this.selection.start + movePosition);								=09
						return false;						=09
					}		=09
				}
			}
			else
			{
				// date group is not full
				// insert
				futureValue =3D this.oldValue.substring(0, this.selection.start) + =
pressed + this.oldValue.substring(this.selection.start);
				var movePosition =3D 1;
				if (!this.isValueValid(futureValue, this.selection.start + 1, group) =
&& !this.isValueValid(futureValue, this.selection.start + 1, group+1))=20
				{
					this.redTextFlash(); return false;
				}
				else=20
				{
					var autocomplete =3D this.dateAutocompleteCharacters[group+1];
					if (pressed =3D=3D autocomplete)=20
					{
						if (this.nextDateDelimiterExists(this.oldValue, =
this.selection.start, group))
						{
							futureValue =3D this.oldValue;
							movePosition =3D 1;
						}
					}
					else
					{
						if(this.isPositionAtEndOfGroup(futureValue, =
this.selection.start+1, group))=20
						{
							if (group !=3D this.lastDateGroup)
							{
								if (this.nextDateDelimiterExists(futureValue, =
this.selection.start + 1, group))
								{
									var autocomplete =3D this.dateAutocompleteCharacters[group+1];
									movePosition =3D 1 + autocomplete.length;
								}
								else
								{
									var autocomplete =3D this.dateAutocompleteCharacters[group+1];
									futureValue =3D this.oldValue.substring(0, =
this.selection.start) + pressed + autocomplete + =
this.oldValue.substring(this.selection.start + 1);
									movePosition =3D 1 + autocomplete.length;
								}
							}
						}
					}
					this.setValue (futureValue);
					this.selection.moveTo(this.selection.start + movePosition, =
this.selection.start + movePosition);								=09
					return false;					=09
				}=09
			}
		}
		return false;
	}
=09
};

Spry.Widget.ValidationTextField.prototype.onKeyDown =3D function(e)
{
	this.saveState();
	this.keyCode =3D e.keyCode;

	if (Spry.is.opera) {
		if (this.flags.operaPasteOperation) {
			window.clearInterval(this.flags.operaPasteOperation);
			this.flags.operaPasteOperation =3D null;
		}
		if (e.ctrlKey) {
			var pressed =3D Spry.Widget.Utils.getCharacterFromEvent(e);
			if (pressed && 'vx'.indexOf(pressed.toLowerCase()) !=3D -1) {
				var self =3D this;
				this.flags.operaPasteOperation =3D window.setInterval(function() { =
self.operaPasteMonitor();}, 1);
				return true;
			}
		}
	}

	if (this.keyCode !=3D 8 && this.keyCode !=3D 46 && =
Spry.Widget.Utils.isSpecialKey(e)) {
		return true;
	}
	if (this.keyCode =3D=3D 8 || this.keyCode =3D=3D 46 ) {
		var mr =3D this.doValidations(this.input.value, this.input.value);
		if (mr) {
			return true;
		}
	}

	//DELETE
	if (this.useCharacterMasking && this.pattern && this.keyCode =3D=3D 46) =
{
		if (e.ctrlKey) {
			//delete from selection until end
			this.setValue(this.input.value.substring(0, this.selection.start));
		} else if (this.selection.end =3D=3D this.input.value.length || =
this.selection.start =3D=3D this.input.value.length-1){
			//allow key if selection is at end (will delete selection)
			return true;
		} else {
			this.flags.operaRevertOnKeyUp =3D true;
		}
		if (Spry.is.mozilla && Spry.is.mac) {
			this.flags.skp =3D true;
		}
		Spry.Widget.Utils.stopEvent(e);
		return false;
	}

	//BACKSPACE
	if (this.useCharacterMasking && this.pattern && !e.ctrlKey && =
this.keyCode =3D=3D 8) {
		if (this.selection.start =3D=3D this.input.value.length) {
			//delete with BACKSPACE from the end of the input value only
			var n =3D this.getAutoComplete(this.selection.start, -1);
			this.setValue(this.input.value.substring(0, this.input.value.length - =
(Spry.is.opera?0:1) - n.length));
			if (Spry.is.opera) {
				//cant stop the event on Opera, we'll just preserve the selection so =
delete will act on it
				this.selection.start =3D this.selection.start - 1 - n.length;
				this.selection.end =3D this.selection.end - 1 - n.length;
			}
		} else if (this.selection.end =3D=3D this.input.value.length){
			//allow BACKSPACE if selection is at end (will delete selection)
			return true;
		} else {
			this.flags.operaRevertOnKeyUp =3D true;
		}
		if (Spry.is.mozilla && Spry.is.mac) {
			this.flags.skp =3D true;
		}=20
		Spry.Widget.Utils.stopEvent(e);
		return false;
	}

	return true;
};

Spry.Widget.ValidationTextField.prototype.onMouseDown =3D function(e)
{
	if (this.flags.active) {
		//mousedown fires before focus
		//avoid double saveState on first focus by mousedown by checking if =
the control has focus
		//do nothing if it's not focused because saveState will be called =
onfocus
		this.saveState();
	}
};

Spry.Widget.ValidationTextField.prototype.onDrop =3D function(e)
{
	//mark that a drop operation is in progress to avoid race conditions =
with event handlers for other events
	//especially onchange and onfocus
	this.flags.drop =3D true;
	this.removeHint();
	this.saveState();
	this.flags.active =3D true;
	this.addClassName(this.element, this.focusClass);
	this.addClassName(this.additionalError, this.focusClass);
};

Spry.Widget.ValidationTextField.prototype.onFocus =3D function(e)
{
	if (this.flags.drop) {
		return;
	}
	this.removeHint();

	if (this.pattern && this.useCharacterMasking) {
		var autocomplete =3D this.getAutoComplete(this.selection.start);
		this.setValue(this.input.value + autocomplete);
		this.selection.moveTo(this.input.value.length, =
this.input.value.length);
	}
=09
	this.saveState();
	this.flags.active =3D true;
	this.addClassName(this.element, this.focusClass);
	this.addClassName(this.additionalError, this.focusClass);
};
=09
Spry.Widget.ValidationTextField.prototype.onBlur =3D function(e)
{
	this.flags.active =3D false;
	this.removeClassName(this.element, this.focusClass);
	this.removeClassName(this.additionalError, this.focusClass);
	this.flags.restoreSelection =3D false;
	var mustRevert =3D this.doValidations(this.input.value, =
this.input.value);
	this.flags.restoreSelection =3D true;

	if (this.validateOn & Spry.Widget.ValidationTextField.ONBLUR) {
		this.validate();
	}
	var self =3D this;
	setTimeout(function() {self.putHint();}, 10);
	return true;
};

Spry.Widget.ValidationTextField.prototype.compilePattern =3D function() =
{
	if (!this.pattern) {
		return;
	}
	var compiled =3D [];
	var regexps =3D [];
	var patternCharacters =3D [];
	var idx =3D 0;
	var c =3D '', p =3D '';
	for (var i=3D0; i<this.pattern.length; i++) {
		c =3D this.pattern.charAt(i);
		if (p =3D=3D '\\') {
			if (/[0ABXY\?]/i.test(c)) {
				regexps[idx - 1] =3D c;
			} else {
				regexps[idx - 1] =3D =
Spry.Widget.ValidationTextField.regExpFromChars(c);
			}
			compiled[idx - 1] =3D c;
			patternCharacters[idx - 1] =3D null;
			p =3D '';
			continue;
		}
		regexps[idx] =3D Spry.Widget.ValidationTextField.regExpFromChars(c);
		if (/[0ABXY\?]/i.test(c)) {
			compiled[idx] =3D null;
			patternCharacters[idx] =3D c;
		} else if (c =3D=3D '\\') {
			compiled[idx] =3D c;
			patternCharacters[idx] =3D '\\';
		} else {
			compiled[idx] =3D c;
			patternCharacters[idx] =3D null;
		}
		idx++;
		p =3D c;
	}

	this.autoCompleteCharacters =3D compiled;
	this.compiledPattern =3D regexps;
	this.patternCharacters =3D patternCharacters;
	this.patternLength =3D compiled.length;
};

Spry.Widget.ValidationTextField.prototype.getAutoComplete =3D =
function(from, direction) {
	if (direction =3D=3D -1) {
		var n =3D '', m =3D '';
		while(from && (n =3D this.getAutoComplete(--from) )) {
			m =3D n;
		}
		return m;
	}
	var ret =3D '', c =3D '';
	for (var i=3Dfrom; i<this.autoCompleteCharacters.length; i++) {
		c =3D this.autoCompleteCharacters[i];
		if (c) {
			ret +=3D c;
		} else {
			break;
		}
	}
	return ret;
};

Spry.Widget.ValidationTextField.regExpFromChars =3D function (string) {
	//string contains pattern characters
	var ret =3D '', character =3D '';
	for (var i =3D 0; i<string.length; i++) {
		character =3D string.charAt(i);
		switch (character) {
			case '0': ret +=3D '\\d';break;
			case 'A': ret +=3D '[A-Z]';break;
//			case 'A': ret +=3D =
'[\u0041-\u005A\u0061-\u007A\u0100-\u017E\u0180-\u0233\u0391-\u03CE\u0410=
-\u044F\u05D0-\u05EA\u0621-\u063A\u0641-\u064A\u0661-\u06D3\u06F1-\u06FE]=
';break;
			case 'a': ret +=3D '[a-z]';break;
//			case 'a': ret +=3D '[\u0080-\u00FF]';break;
			case 'B': case 'b': ret +=3D '[a-zA-Z]';break;
			case 'x': ret +=3D '[0-9a-z]';break;
			case 'X': ret +=3D '[0-9A-Z]';break;
			case 'Y': case 'y': ret +=3D '[0-9a-zA-Z]';break;
			case '?': ret +=3D '.';break;
			case '1':case '2':case '3':case '4':case '5':case '6':case '7':case =
'8':case '9':
				ret +=3D character;
				break;
			case 'c': case 'C': case 'e': case 'E': case 'f': case 'F':case =
'r':case 'd': case 'D':case 'n':case 's':case 'S':case 'w':case 'W':case =
't':case 'v':
				ret +=3D character;
				break;
			default: ret +=3D '\\' + character;
		}
	}
	return ret;
};

Spry.Widget.ValidationTextField.prototype.patternToRegExp =3D =
function(len) {
	var ret =3D '^';
	var end =3D Math.min(this.compiledPattern.length, len);
	for (var i=3D0; i < end; i++) {
		ret +=3D this.compiledPattern[i];
	}
	ret +=3D '$';
	ret =3D new RegExp(ret, "");
	return ret;
};

Spry.Widget.ValidationTextField.prototype.resetClasses =3D function() {
	var classes =3D [this.requiredClass, this.invalidFormatClass, =
this.invalidRangeMinClass, this.invalidRangeMaxClass, =
this.invalidCharsMinClass, this.invalidCharsMaxClass, this.validClass];
	for (var i=3D0; i < classes.length; i++)
	{
		this.removeClassName(this.element, classes[i]);
		this.removeClassName(this.additionalError, classes[i]);
	}
};

Spry.Widget.ValidationTextField.prototype.reset =3D function() {
	this.removeHint();
	this.oldValue =3D this.input.defaultValue;
=09
	this.resetClasses();
	if (Spry.is.ie) {
		//this will fire the onpropertychange event right after the className =
changed on the container element
		//IE6 will not fire the first onpropertychange on an input type text =
after a onreset handler if inside that handler the className of one of =
the elements inside the form has been changed
		//to reproduce: change the className of one of the elements inside the =
form from within the onreset handler; then the onpropertychange does not =
fire the first time
		this.input.forceFireFirstOnPropertyChange =3D true;
		this.input.removeAttribute("forceFireFirstOnPropertyChange");
	}
	var self =3D this;
	setTimeout(function() {self.putHint();}, 10);
};

Spry.Widget.ValidationTextField.prototype.validate =3D function() {

	this.resetClasses();
	//possible states: required, format, rangeMin, rangeMax, charsMin, =
charsMax
	if (this.validateOn & Spry.Widget.ValidationTextField.ONSUBMIT) {

		this.removeHint();
		this.doValidations(this.input.value, this.input.value);

		if(!this.flags.active) {
			var self =3D this;
			setTimeout(function() {self.putHint();}, 10);
		}
	}

	if (this.isRequired && this.errors & =
Spry.Widget.ValidationTextField.ERROR_REQUIRED) {
		this.addClassName(this.element, this.requiredClass);
		this.addClassName(this.additionalError, this.requiredClass);
		return false;
	}

	if (this.errors & Spry.Widget.ValidationTextField.ERROR_FORMAT) {
		this.addClassName(this.element, this.invalidFormatClass);
		this.addClassName(this.additionalError, this.invalidFormatClass);
		return false;
	}

	if (this.errors & Spry.Widget.ValidationTextField.ERROR_RANGE_MIN) {
		this.addClassName(this.element, this.invalidRangeMinClass);
		this.addClassName(this.additionalError, this.invalidRangeMinClass);
		return false;
	}

	if (this.errors & Spry.Widget.ValidationTextField.ERROR_RANGE_MAX) {
		this.addClassName(this.element, this.invalidRangeMaxClass);
		this.addClassName(this.additionalError, this.invalidRangeMaxClass);
		return false;
	}

	if (this.errors & Spry.Widget.ValidationTextField.ERROR_CHARS_MIN) {
		this.addClassName(this.element, this.invalidCharsMinClass);
		this.addClassName(this.additionalError, this.invalidCharsMinClass);
		return false;
	}

	if (this.errors & Spry.Widget.ValidationTextField.ERROR_CHARS_MAX) {
		this.addClassName(this.element, this.invalidCharsMaxClass);
		this.addClassName(this.additionalError, this.invalidCharsMaxClass);
		return false;
	}

	this.addClassName(this.element, this.validClass);
	this.addClassName(this.additionalError, this.validClass);
	return true;
};

Spry.Widget.ValidationTextField.prototype.addClassName =3D function(ele, =
className)
{
	if (!ele || !className || (ele.className && ele.className.search(new =
RegExp("\\b" + className + "\\b")) !=3D -1))
		return;
	ele.className +=3D (ele.className ? " " : "") + className;
};

Spry.Widget.ValidationTextField.prototype.removeClassName =3D =
function(ele, className)
{
	if (!ele || !className || (ele.className && ele.className.search(new =
RegExp("\\b" + className + "\\b")) =3D=3D -1))
		return;
	ele.className =3D ele.className.replace(new RegExp("\\s*\\b" + =
className + "\\b", "g"), "");
};
Spry.Widget.ValidationTextField.prototype.showError =3D function(msg)
{
	alert('Spry.Widget.TextField ERR: ' + msg);
};
/**
 * SelectionDescriptor is a wrapper for input type text selection =
methods and properties=20
 * as implemented by various  browsers
 */
Spry.Widget.SelectionDescriptor =3D function (element)
{
	this.element =3D element;
	this.update();
};

Spry.Widget.SelectionDescriptor.prototype.update =3D function()
{
	if (Spry.is.ie && Spry.is.windows) {
		var sel =3D this.element.ownerDocument.selection;
		if (this.element.nodeName =3D=3D "TEXTAREA") {
			if (sel.type !=3D 'None') {
				try{var range =3D sel.createRange();}catch(err){return;}
				if (range.parentElement() =3D=3D this.element){
					var range_all =3D =
this.element.ownerDocument.body.createTextRange();
					range_all.moveToElementText(this.element);
					for (var sel_start =3D 0; =
range_all.compareEndPoints('StartToStart', range) < 0; sel_start ++){
						range_all.moveStart('character', 1);
					}
					this.start =3D sel_start;
					// create a selection of the whole this.element
					range_all =3D this.element.ownerDocument.body.createTextRange();
					range_all.moveToElementText(this.element);
					for (var sel_end =3D 0; range_all.compareEndPoints('StartToEnd', =
range) < 0; sel_end++){
						range_all.moveStart('character', 1);
					}
					this.end =3D sel_end;
					this.length =3D this.end - this.start;
					// get selected and surrounding text
					this.text =3D range.text;
		 		}
			}       =20
		} else if (this.element.nodeName =3D=3D "INPUT"){
			try{this.range =3D sel.createRange();}catch(err){return;}
			this.length =3D this.range.text.length;
			var clone =3D this.range.duplicate();
			this.start =3D -clone.moveStart("character", -10000);
			clone =3D this.range.duplicate();
			clone.collapse(false);
			this.end =3D -clone.moveStart("character", -10000);
			this.text =3D this.range.text;
		}
	} else {
		var tmp =3D this.element;
		var selectionStart =3D 0;
		var selectionEnd =3D 0;
       =20
		try { selectionStart =3D tmp.selectionStart;} catch(err) {}
		try { selectionEnd =3D tmp.selectionEnd;} catch(err) {}

		if (Spry.is.safari) {
			if (selectionStart =3D=3D 2147483647) {
				selectionStart =3D 0;
			}
			if (selectionEnd =3D=3D 2147483647) {
				selectionEnd =3D 0;
			}
		}
		this.start =3D selectionStart;
		this.end =3D selectionEnd;
		this.length =3D selectionEnd - selectionStart;
		this.text =3D this.element.value.substring(selectionStart, =
selectionEnd);
	}
};

Spry.Widget.SelectionDescriptor.prototype.destroy =3D function() {
	try { delete this.range} catch(err) {}
	try { delete this.element} catch(err) {}
};

Spry.Widget.SelectionDescriptor.prototype.move =3D function(amount)
{
	if (Spry.is.ie && Spry.is.windows) {
		this.range.move("character", amount);
		this.range.select();
	} else {
		try { this.element.selectionStart++;}catch(err) {}
	}
	this.update();
};

Spry.Widget.SelectionDescriptor.prototype.moveTo =3D function(start, =
end)
{
	if (Spry.is.ie && Spry.is.windows) {
		if (this.element.nodeName =3D=3D "TEXTAREA") {
			var ta_range =3D this.element.createTextRange();
			this.range =3D this.element.createTextRange();
			this.range.move("character", start);
			this.range.moveEnd("character", end - start);
		=09
			var c1 =3D this.range.compareEndPoints("StartToStart", ta_range);
			if (c1 < 0) {
				this.range.setEndPoint("StartToStart", ta_range);
			}

			var c2 =3D this.range.compareEndPoints("EndToEnd", ta_range);
			if (c2 > 0) {
				this.range.setEndPoint("EndToEnd", ta_range);
			}
		} else if (this.element.nodeName =3D=3D "INPUT"){
			this.range =3D this.element.ownerDocument.selection.createRange();
			this.range.move("character", -10000);
			this.start =3D this.range.moveStart("character", start);
			this.end =3D this.start + this.range.moveEnd("character", end - =
start);
		}
		this.range.select();
	} else {
		this.start =3D start;
		try { this.element.selectionStart =3D start;} catch(err) {}
		this.end =3D end;
		try { this.element.selectionEnd =3D end;} catch(err) {}
	}
	this.ignore =3D true;
	this.update();
};

Spry.Widget.SelectionDescriptor.prototype.moveEnd =3D function(amount)
{
	if (Spry.is.ie && Spry.is.windows) {
		this.range.moveEnd("character", amount);
		this.range.select();
	} else {
		try { this.element.selectionEnd++;} catch(err) {}
	}
	this.update();
};

Spry.Widget.SelectionDescriptor.prototype.collapse =3D function(begin)
{
	if (Spry.is.ie && Spry.is.windows) {
		this.range =3D this.element.ownerDocument.selection.createRange();
		this.range.collapse(begin);
		this.range.select();
	} else {
		if (begin) {
			try { this.element.selectionEnd =3D this.element.selectionStart;} =
catch(err) {}
		} else {
			try { this.element.selectionStart =3D this.element.selectionEnd;} =
catch(err) {}
		}
	}

	this.update();
};

//////////////////////////////////////////////////////////////////////
//
// Spry.Widget.Form - common for all widgets
//
//////////////////////////////////////////////////////////////////////

if (!Spry.Widget.Form) Spry.Widget.Form =3D {};
if (!Spry.Widget.Form.onSubmitWidgetQueue) =
Spry.Widget.Form.onSubmitWidgetQueue =3D [];

if (!Spry.Widget.Form.validate) {
	Spry.Widget.Form.validate =3D function(vform) {
		var isValid =3D true;
		var isElementValid =3D true;
		var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
		var qlen =3D q.length;
		for (var i =3D 0; i < qlen; i++) {
			if (!q[i].isDisabled() && q[i].form =3D=3D vform) {
				isElementValid =3D q[i].validate();
				isValid =3D isElementValid && isValid;
			}
		}
		return isValid;
	}
};

if (!Spry.Widget.Form.onSubmit) {
	Spry.Widget.Form.onSubmit =3D function(e, form)
	{
		if (Spry.Widget.Form.validate(form) =3D=3D false) {
			return false;
		}
		return true;
	};
};

if (!Spry.Widget.Form.onReset) {
	Spry.Widget.Form.onReset =3D function(e, vform)
	{
		var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
		var qlen =3D q.length;
		for (var i =3D 0; i < qlen; i++) {
			if (!q[i].isDisabled() && q[i].form =3D=3D vform && =
typeof(q[i].reset) =3D=3D 'function') {
				q[i].reset();
			}
		}
		return true;
	};
};

if (!Spry.Widget.Form.destroy) {
	Spry.Widget.Form.destroy =3D function(form)
	{
		var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
		for (var i =3D 0; i < Spry.Widget.Form.onSubmitWidgetQueue.length; =
i++) {
			if (q[i].form =3D=3D form && typeof(q[i].destroy) =3D=3D 'function') =
{
				q[i].destroy();
				i--;
			}
		}
	}
};

if (!Spry.Widget.Form.destroyAll) {
	Spry.Widget.Form.destroyAll =3D function()
	{
		var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
		for (var i =3D 0; i < Spry.Widget.Form.onSubmitWidgetQueue.length; =
i++) {
			if (typeof(q[i].destroy) =3D=3D 'function') {
				q[i].destroy();
				i--;
			}
		}
	}
};

//////////////////////////////////////////////////////////////////////
//
// Spry.Widget.Utils
//
//////////////////////////////////////////////////////////////////////

if (!Spry.Widget.Utils)	Spry.Widget.Utils =3D {};

Spry.Widget.Utils.punycode_constants =3D {
	base : 36, tmin : 1, tmax : 26, skew : 38, damp : 700,
  initial_bias : 72, initial_n : 0x80, delimiter : 0x2D,
  maxint : 2<<26-1
};

Spry.Widget.Utils.punycode_encode_digit =3D function (d) {
  return String.fromCharCode(d + 22 + 75 * (d < 26));
};

Spry.Widget.Utils.punycode_adapt =3D function (delta, numpoints, =
firsttime) {
	delta =3D firsttime ? delta / this.punycode_constants.damp : delta >> =
1;
	delta +=3D delta / numpoints;
=09
	for (var k =3D 0; delta > ((this.punycode_constants.base - =
this.punycode_constants.tmin) * this.punycode_constants.tmax) / 2; k =
+=3D this.punycode_constants.base) {
		delta /=3D this.punycode_constants.base - =
this.punycode_constants.tmin;
	}
	return k + (this.punycode_constants.base - this.punycode_constants.tmin =
+ 1) * delta / (delta + this.punycode_constants.skew);
};

/**
 * returns a 	Punicode representation of a UTF-8 string
 * adapted from http://tools.ietf.org/html/rfc3492
 */
Spry.Widget.Utils.punycode_encode =3D function (input, max_out) {
	var inputc =3D input.split("");
	input =3D [];
	for(var i=3D0; i<inputc.length; i++) {
		input.push(inputc[i].charCodeAt(0));
	}
	var output =3D '';

  var h, b, j, m, q, k, t;
	var input_len =3D input.length;
  var n =3D this.punycode_constants.initial_n;
  var delta =3D 0;
  var bias =3D this.punycode_constants.initial_bias;
  var out =3D 0;

  for (j =3D 0; j < input_len; j++) {
		if (input[j] < 128) {
			if (max_out - out < 2) {
				return false;
			}
			output +=3D String.fromCharCode(input[j]);
			out++;
		}
	}

	h =3D b =3D out;
	if (b > 0) {
		output +=3D String.fromCharCode(this.punycode_constants.delimiter);
		out++;
	}

  while (h < input_len)	{
		for (m =3D this.punycode_constants.maxint, j =3D 0; j < input_len; =
j++) {
			if (input[j] >=3D n && input[j] < m) {
				m =3D input[j];
			}
		}
		if (m - n > (this.punycode_constants.maxint - delta) / (h + 1)) {
			return false;
		}
	=09
		delta +=3D (m - n) * (h + 1);
		n =3D m;

		for (j =3D 0; j < input_len; j++) {
			if (input[j] < n ) {
				if (++delta =3D=3D 0) {
					return false;
				}
			}

			if (input[j] =3D=3D n) {
				for (q =3D delta, k =3D this.punycode_constants.base; true; k +=3D =
this.punycode_constants.base) {
					if (out >=3D max_out) {
						return false;
					}

					t =3D k <=3D bias ? this.punycode_constants.tmin : k >=3D bias + =
this.punycode_constants.tmax ? this.punycode_constants.tmax : k - bias;
					if (q < t) {
						break;
					}

					output +=3D this.punycode_encode_digit(t + (q - t) % =
(this.punycode_constants.base - t));
					out++;
					q =3D (q - t) / (this.punycode_constants.base - t);
				}

				output +=3D this.punycode_encode_digit(q);
				out++;
				bias =3D this.punycode_adapt(delta, h + 1, h =3D=3D b);
				delta =3D 0;
				h++;
			}
		}
		delta++, n++;
	}

  return output;
};

Spry.Widget.Utils.setOptions =3D function(obj, optionsObj, =
ignoreUndefinedProps)
{
	if (!optionsObj)
		return;
	for (var optionName in optionsObj)
	{
		if (ignoreUndefinedProps && optionsObj[optionName] =3D=3D undefined)
			continue;
		obj[optionName] =3D optionsObj[optionName];
	}
};

Spry.Widget.Utils.firstValid =3D function() {
	var ret =3D null;
	for(var i=3D0; i<Spry.Widget.Utils.firstValid.arguments.length; i++) {
		if (typeof(Spry.Widget.Utils.firstValid.arguments[i]) !=3D =
'undefined') {
			ret =3D Spry.Widget.Utils.firstValid.arguments[i];
			break;
		}
	}
	return ret;
};


Spry.Widget.Utils.specialCharacters =3D =
",8,9,16,17,18,20,27,33,34,35,36,37,38,40,45,144,192,63232,";
Spry.Widget.Utils.specialSafariNavKeys =3D =
"63232,63233,63234,63235,63272,63273,63275,63276,63277,63289,";
Spry.Widget.Utils.specialNotSafariCharacters =3D "39,46,91,92,93,";

Spry.Widget.Utils.specialCharacters +=3D =
Spry.Widget.Utils.specialSafariNavKeys;

if (!Spry.is.safari) {
	Spry.Widget.Utils.specialCharacters +=3D =
Spry.Widget.Utils.specialNotSafariCharacters;
}

Spry.Widget.Utils.isSpecialKey =3D function (ev) {
	return Spry.Widget.Utils.specialCharacters.indexOf("," + ev.keyCode + =
",") !=3D -1;
};

Spry.Widget.Utils.getCharacterFromEvent =3D function(e){
	var keyDown =3D e.type =3D=3D "keydown";

	var code =3D null;
	var character =3D null;
	if(Spry.is.mozilla && !keyDown){
		if(e.charCode){
			character =3D String.fromCharCode(e.charCode);
		} else {
			code =3D e.keyCode;
		}
	} else {
		code =3D e.keyCode || e.which;
		if (code !=3D 13) {
			character =3D String.fromCharCode(code);
		}
	}

	if (Spry.is.safari) {
		if (keyDown) {
			code =3D e.keyCode || e.which;
			character =3D String.fromCharCode(code);
		} else {
			code =3D e.keyCode || e.which;
			if (Spry.Widget.Utils.specialCharacters.indexOf("," + code + ",") =
!=3D -1) {
				character =3D null;
			} else {
				character =3D String.fromCharCode(code);
			}
		}
	}

	if(Spry.is.opera) {
		if (Spry.Widget.Utils.specialCharacters.indexOf("," + code + ",") !=3D =
-1) {
			character =3D null;
		} else {
			character =3D String.fromCharCode(code);
		}
	}

	return character;
};

Spry.Widget.Utils.getFirstChildWithNodeNameAtAnyLevel =3D function(node, =
nodeName)
{
	var elements  =3D node.getElementsByTagName(nodeName);
	if (elements) {
		return elements[0];
	}
	return null;
};

Spry.Widget.Utils.getFirstParentWithNodeName =3D function(node, =
nodeName)
{
	while (node.parentNode
			&& node.parentNode.nodeName.toLowerCase() !=3D nodeName.toLowerCase()
			&& node.parentNode.nodeName !=3D 'BODY') {
		node =3D node.parentNode;
	}

	if (node.parentNode && node.parentNode.nodeName.toLowerCase() =3D=3D =
nodeName.toLowerCase()) {
		return node.parentNode;
	} else {
		return null;
	}
};

Spry.Widget.Utils.destroyWidgets =3D function (container)
{
	if (typeof container =3D=3D 'string') {
		container =3D document.getElementById(container);
	}

	var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
	for (var i =3D 0; i < Spry.Widget.Form.onSubmitWidgetQueue.length; i++) =
{
		if (typeof(q[i].destroy) =3D=3D 'function' && =
Spry.Widget.Utils.contains(container, q[i].element)) {
			q[i].destroy();
			i--;
		}
	}
};

Spry.Widget.Utils.contains =3D function (who, what)
{
	if (typeof who.contains =3D=3D 'object') {
		return what && who && (who =3D=3D what || who.contains(what));
	} else {
		var el =3D what;
		while(el) {
			if (el =3D=3D who) {
				return true;
			}
			el =3D el.parentNode;
		}
		return false;
	}
};

Spry.Widget.Utils.addEventListener =3D function(element, eventType, =
handler, capture)
{
	try
	{
		if (element.addEventListener)
			element.addEventListener(eventType, handler, capture);
		else if (element.attachEvent)
			element.attachEvent("on" + eventType, handler, capture);
	}
	catch (e) {}
};

Spry.Widget.Utils.removeEventListener =3D function(element, eventType, =
handler, capture)
{
	try
	{
		if (element.removeEventListener)
			element.removeEventListener(eventType, handler, capture);
		else if (element.detachEvent)
			element.detachEvent("on" + eventType, handler, capture);
	}
	catch (e) {}
};

Spry.Widget.Utils.stopEvent =3D function(ev)
{
	try
	{
		this.stopPropagation(ev);
		this.preventDefault(ev);
	}
	catch (e) {}
};

/**
 * Stops event propagation
 * @param {Event} ev the event
 */
Spry.Widget.Utils.stopPropagation =3D function(ev)
{
	if (ev.stopPropagation)
	{
		ev.stopPropagation();
	}
	else
	{
		ev.cancelBubble =3D true;
	}
};

/**
 * Prevents the default behavior of the event
 * @param {Event} ev the event
 */
Spry.Widget.Utils.preventDefault =3D function(ev)
{
	if (ev.preventDefault)
	{
		ev.preventDefault();
	}
	else
	{
		ev.returnValue =3D false;
	}
};

------=_NextPart_000_0000_01CCD9AF.2F84AC70
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.greenville.k12.sc.us/gcsd/schools/forms_career/SpryValidationSelect.js

// SpryValidationSelect.js - version 0.10 - Spry Pre-Release 1.6.1
//
// Copyright (c) 2006. Adobe Systems Incorporated.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions =
are met:
//
//   * Redistributions of source code must retain the above copyright =
notice,
//     this list of conditions and the following disclaimer.
//   * Redistributions in binary form must reproduce the above copyright =
notice,
//     this list of conditions and the following disclaimer in the =
documentation
//     and/or other materials provided with the distribution.
//   * Neither the name of Adobe Systems Incorporated nor the names of =
its
//     contributors may be used to endorse or promote products derived =
from this
//     software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS =
"AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, =
THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR =
PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS =
BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR =
BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER =
IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR =
OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED =
OF THE
// POSSIBILITY OF SUCH DAMAGE.

var Spry;
if (!Spry) Spry =3D {};
if (!Spry.Widget) Spry.Widget =3D {};

Spry.Widget.ValidationSelect =3D function(element, opts)
{
	this.init(element);

	Spry.Widget.Utils.setOptions(this, opts);

	// set validateOn flags
	var validateOn =3D ['submit'].concat(this.validateOn || []);
	validateOn =3D validateOn.join(",");
	this.validateOn =3D 0 | (validateOn.indexOf('submit') !=3D -1 ? =
Spry.Widget.ValidationSelect.ONSUBMIT : 0);
	this.validateOn =3D this.validateOn | (validateOn.indexOf('blur') !=3D =
-1 ? Spry.Widget.ValidationSelect.ONBLUR : 0);
	this.validateOn =3D this.validateOn | (validateOn.indexOf('change') =
!=3D -1 ? Spry.Widget.ValidationSelect.ONCHANGE : 0);

	if (this.additionalError)
		this.additionalError =3D this.getElement(this.additionalError);

	// Unfortunately in some browsers like Safari, the Stylesheets our
	// page depends on may not have been loaded at the time we are called.
	// This means we have to defer attaching our behaviors until after the
	// onload event fires, since some of our behaviors rely on dimensions
	// specified in the CSS.

	if (Spry.Widget.ValidationSelect.onloadDidFire)
		this.attachBehaviors();
	else=20
		Spry.Widget.ValidationSelect.loadQueue.push(this);
};

Spry.Widget.ValidationSelect.ONCHANGE =3D 1;
Spry.Widget.ValidationSelect.ONBLUR =3D 2;
Spry.Widget.ValidationSelect.ONSUBMIT =3D 4;

Spry.Widget.ValidationSelect.prototype.init =3D function(element)
{
	this.element =3D this.getElement(element);
	this.additionalError =3D false;
	this.selectElement =3D null;
	this.form =3D null;
	this.event_handlers =3D [];
=09
	 // this.element can be either the container (<span>)
	 // or the <select> element, when no error messages are used.
=09
	this.requiredClass =3D "selectRequiredState";
	this.invalidClass =3D "selectInvalidState";
	this.focusClass =3D "selectFocusState";
	this.validClass =3D "selectValidState";
=09
	this.emptyValue =3D "";
	this.invalidValue =3D null;
	this.isRequired =3D true;
=09
	this.validateOn =3D ["submit"];  // change, blur, submit
	// flag used to avoid cascade validation when both=20
	// onChange and onBlur events are used to trigger validation
	this.validatedByOnChangeEvent =3D false;
};

Spry.Widget.ValidationSelect.prototype.destroy =3D function() {
	if (this.event_handlers)
		for (var i=3D0; i<this.event_handlers.length; i++) {
			Spry.Widget.Utils.removeEventListener(this.event_handlers[i][0], =
this.event_handlers[i][1], this.event_handlers[i][2], false);
		}
	try { delete this.element; } catch(err) {}
	try { delete this.selectElement; } catch(err) {}
	try { delete this.form; } catch(err) {}
	try { delete this.event_handlers; } catch(err) {}

	var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
	var qlen =3D q.length;
	for (var i =3D 0; i < qlen; i++) {
		if (q[i] =3D=3D this) {
			q.splice(i, 1);
			break;
		}
	}
};

Spry.Widget.ValidationSelect.onloadDidFire =3D false;
Spry.Widget.ValidationSelect.loadQueue =3D [];

Spry.Widget.ValidationSelect.prototype.getElement =3D function(ele)
{
	if (ele && typeof ele =3D=3D "string")
		return document.getElementById(ele);
	return ele;
};

Spry.Widget.ValidationSelect.processLoadQueue =3D function(handler)
{
	Spry.Widget.ValidationSelect.onloadDidFire =3D true;
	var q =3D Spry.Widget.ValidationSelect.loadQueue;
	var qlen =3D q.length;
	for (var i =3D 0; i < qlen; i++)
		q[i].attachBehaviors();
};

Spry.Widget.ValidationSelect.addLoadListener =3D function(handler)
{
	if (typeof window.addEventListener !=3D 'undefined')
		window.addEventListener('load', handler, false);
	else if (typeof document.addEventListener !=3D 'undefined')
		document.addEventListener('load', handler, false);
	else if (typeof window.attachEvent !=3D 'undefined')
		window.attachEvent('onload', handler);
};

Spry.Widget.ValidationSelect.addLoadListener(Spry.Widget.ValidationSelect=
.processLoadQueue);
Spry.Widget.ValidationSelect.addLoadListener(function(){
	Spry.Widget.Utils.addEventListener(window, "unload", =
Spry.Widget.Form.destroyAll, false);
});

Spry.Widget.ValidationSelect.prototype.attachBehaviors =3D function()
{
	// find the SELECT element inside current container
	if (this.element.nodeName =3D=3D "SELECT") {
		this.selectElement =3D this.element;
	} else {
		this.selectElement =3D =
Spry.Widget.Utils.getFirstChildWithNodeNameAtAnyLevel(this.element, =
"SELECT");
	}

	if (this.selectElement) {
		var self =3D this;
		this.event_handlers =3D [];
		// focus
		// attach on beforeactivate instead of focus for
		//      - IE 6 (to overcome this bug: setting a class name onfocus =
does not affect the open dropdown)
		//      - IE 7 (to overcome this bug: setting a class name, closes the =
select)
		var focusEventName =3D "focus";
		var ua =3D navigator.userAgent.match(/msie (\d+)\./i);
		if (ua) {
			ua =3D parseInt(ua[1], 10);
			if (ua >=3D 6) {
				focusEventName =3D "beforeactivate";
			}
		}
		this.event_handlers.push([this.selectElement, focusEventName, =
function(e) { if (self.isDisabled()) return true; return =
self.onFocus(e); }]);
		// blur
		this.event_handlers.push([this.selectElement, "blur", function(e) { if =
(self.isDisabled()) return true; return self.onBlur(e); }]);
		// change
		if (this.validateOn & Spry.Widget.ValidationSelect.ONCHANGE) {
			this.event_handlers.push([this.selectElement, "change", function(e) { =
if (self.isDisabled()) return true; return self.onChange(e); }]);
			this.event_handlers.push([this.selectElement, "keypress", function(e) =
{ if (self.isDisabled()) return true; return self.onChange(e); }]);
		}

		for (var i=3D0; i<this.event_handlers.length; i++) {
			Spry.Widget.Utils.addEventListener(this.event_handlers[i][0], =
this.event_handlers[i][1], this.event_handlers[i][2], false);
		}

		// submit
		this.form =3D =
Spry.Widget.Utils.getFirstParentWithNodeName(this.selectElement, =
"FORM");
		if (this.form) {
			// if no "onSubmit" handler has been attached to the current form, =
attach one
			if (!this.form.attachedSubmitHandler && !this.form.onsubmit) {
				this.form.onsubmit =3D function(e) { e =3D e || event; return =
Spry.Widget.Form.onSubmit(e, e.srcElement || e.currentTarget) };
				this.form.attachedSubmitHandler =3D true;                =20
			}
			if (!this.form.attachedResetHandler) {
				Spry.Widget.Utils.addEventListener(this.form, "reset", function(e) { =
e =3D e || event; return Spry.Widget.Form.onReset(e, e.srcElement || =
e.currentTarget) }, false);
				this.form.attachedResetHandler =3D true;                =20
			}
			// add the currrent widget to the "onSubmit" check queue;
			Spry.Widget.Form.onSubmitWidgetQueue.push(this);
		}
	}
};


Spry.Widget.ValidationSelect.prototype.addClassName =3D function(ele, =
className)
{
	if (!ele || !className || (ele.className && ele.className.search(new =
RegExp("\\b" + className + "\\b")) !=3D -1))
		return;
	ele.className +=3D (ele.className ? " " : "") + className;
};

Spry.Widget.ValidationSelect.prototype.removeClassName =3D function(ele, =
className)
{
	if (!ele || !className || (ele.className && ele.className.search(new =
RegExp("\\b" + className + "\\b")) =3D=3D -1))
		return;
	ele.className =3D ele.className.replace(new RegExp("\\s*\\b" + =
className + "\\b", "g"), "");
};



Spry.Widget.ValidationSelect.prototype.onFocus =3D function(e)
{
	this.hasFocus =3D true;
	this.validatedByOnChangeEvent =3D false;
	this.addClassName(this.element, this.focusClass);
	this.addClassName(this.additionalError, this.focusClass);
};

Spry.Widget.ValidationSelect.prototype.onBlur =3D function(e)
{
	this.hasFocus =3D false;
	var doValidation =3D false;
	if (this.validateOn & Spry.Widget.ValidationSelect.ONBLUR)
		doValidation =3D true;
	if (doValidation && !this.validatedByOnChangeEvent)
		this.validate();
	this.removeClassName(this.element, this.focusClass);
	this.removeClassName(this.additionalError, this.focusClass);
};

Spry.Widget.ValidationSelect.prototype.onChange =3D function(e)
{
	this.hasFocus =3D false;
	this.validate();
	this.validatedByOnChangeEvent =3D true;
};

Spry.Widget.ValidationSelect.prototype.reset =3D function() {
	this.removeClassName(this.element, this.requiredClass);
	this.removeClassName(this.element, this.invalidClass);
	this.removeClassName(this.element, this.validClass);
	this.removeClassName(this.additionalError, this.requiredClass);
	this.removeClassName(this.additionalError, this.invalidClass);
	this.removeClassName(this.additionalError, this.validClass);
};

Spry.Widget.ValidationSelect.prototype.validate =3D function() {
	this.reset();
	// check isRequired
	if (this.isRequired) {
		// there are no options, or no option has been selected
		if (this.selectElement.options.length =3D=3D 0 || =
this.selectElement.selectedIndex =3D=3D -1) {
			this.addClassName(this.element, this.requiredClass);
			this.addClassName(this.additionalError, this.requiredClass);
			return false;
		}
		// the current selected option has no "value" attribute
		// when no value is set, browsers implement different behaviour for =
the value property
		// IE: value =3D blank string ("")
		// FF, Opera: value =3D option text
		if =
(this.selectElement.options[this.selectElement.selectedIndex].getAttribut=
e("value") =3D=3D null) {
			this.addClassName(this.element, this.requiredClass);
			this.addClassName(this.additionalError, this.requiredClass);
			return false;
		}
		// the current selected option has blank string ("") value
		if (this.selectElement.options[this.selectElement.selectedIndex].value =
=3D=3D this.emptyValue) {
			this.addClassName(this.element, this.requiredClass);
			this.addClassName(this.additionalError, this.requiredClass);
			return false;
		}
		// the current selected option has "disabled" attribute
		// IE 6 allows to select such options
		if =
(this.selectElement.options[this.selectElement.selectedIndex].disabled) =
{
			this.addClassName(this.element, this.requiredClass);
			this.addClassName(this.additionalError, this.requiredClass);
			return false;
		}
	}
	if (this.invalidValue) {
		if (this.selectElement.options.length > 0 &&=20
			this.selectElement.selectedIndex !=3D -1 &&
			this.selectElement.options[this.selectElement.selectedIndex].value =
=3D=3D this.invalidValue) {
			this.addClassName(this.element, this.invalidClass);
			this.addClassName(this.additionalError, this.invalidClass);
			return false;
		}
	}
	this.addClassName(this.element, this.validClass);
	this.addClassName(this.additionalError, this.validClass);
	return true;
};

Spry.Widget.ValidationSelect.prototype.isDisabled =3D function() {
	return this.selectElement.disabled;=09
};

//////////////////////////////////////////////////////////////////////
//
// Spry.Widget.Form - common for all widgets
//
//////////////////////////////////////////////////////////////////////

if (!Spry.Widget.Form) Spry.Widget.Form =3D {};
if (!Spry.Widget.Form.onSubmitWidgetQueue) =
Spry.Widget.Form.onSubmitWidgetQueue =3D [];

if (!Spry.Widget.Form.validate) {
	Spry.Widget.Form.validate =3D function(vform) {
		var isValid =3D true;
		var isElementValid =3D true;
		var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
		var qlen =3D q.length;
		for (var i =3D 0; i < qlen; i++) {
			if (!q[i].isDisabled() && q[i].form =3D=3D vform) {
				isElementValid =3D q[i].validate();
				isValid =3D isElementValid && isValid;
			}
		}
		return isValid;
	}
};

if (!Spry.Widget.Form.onSubmit) {
	Spry.Widget.Form.onSubmit =3D function(e, form)
	{
		if (Spry.Widget.Form.validate(form) =3D=3D false) {
			return false;
		}
		return true;
	};
};

if (!Spry.Widget.Form.onReset) {
	Spry.Widget.Form.onReset =3D function(e, vform)
	{
		var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
		var qlen =3D q.length;
		for (var i =3D 0; i < qlen; i++) {
			if (!q[i].isDisabled() && q[i].form =3D=3D vform && =
typeof(q[i].reset) =3D=3D 'function') {
				q[i].reset();
			}
		}
		return true;
	};
};

if (!Spry.Widget.Form.destroy) {
	Spry.Widget.Form.destroy =3D function(form)
	{
		var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
		for (var i =3D 0; i < Spry.Widget.Form.onSubmitWidgetQueue.length; =
i++) {
			if (q[i].form =3D=3D form && typeof(q[i].destroy) =3D=3D 'function') =
{
				q[i].destroy();
				i--;
			}
		}
	}
};

if (!Spry.Widget.Form.destroyAll) {
	Spry.Widget.Form.destroyAll =3D function()
	{
		var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
		for (var i =3D 0; i < Spry.Widget.Form.onSubmitWidgetQueue.length; =
i++) {
			if (typeof(q[i].destroy) =3D=3D 'function') {
				q[i].destroy();
				i--;
			}
		}
	}
};

//////////////////////////////////////////////////////////////////////
//
// Spry.Widget.Utils
//
//////////////////////////////////////////////////////////////////////

if (!Spry.Widget.Utils)	Spry.Widget.Utils =3D {};

Spry.Widget.Utils.setOptions =3D function(obj, optionsObj, =
ignoreUndefinedProps)
{
	if (!optionsObj)
		return;
	for (var optionName in optionsObj)
	{
		if (ignoreUndefinedProps && optionsObj[optionName] =3D=3D undefined)
			continue;
		obj[optionName] =3D optionsObj[optionName];
	}
};


Spry.Widget.Utils.getFirstChildWithNodeNameAtAnyLevel =3D function(node, =
nodeName)
{
	var elements  =3D node.getElementsByTagName(nodeName);
	if (elements) {
		return elements[0];
	}
	return null;
};

Spry.Widget.Utils.getFirstParentWithNodeName =3D function(node, =
nodeName)
{
	while (node.parentNode
			&& node.parentNode.nodeName.toLowerCase() !=3D nodeName.toLowerCase()
			&& node.parentNode.nodeName !=3D 'BODY') {
		node =3D node.parentNode;
	}

	if (node.parentNode && node.parentNode.nodeName.toLowerCase() =3D=3D =
nodeName.toLowerCase()) {
		return node.parentNode;
	} else {
		return null;
	}
};

Spry.Widget.Utils.destroyWidgets =3D function (container)
{
	if (typeof container =3D=3D 'string') {
		container =3D document.getElementById(container);
	}

	var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
	for (var i =3D 0; i < Spry.Widget.Form.onSubmitWidgetQueue.length; i++) =
{
		if (typeof(q[i].destroy) =3D=3D 'function' && =
Spry.Widget.Utils.contains(container, q[i].element)) {
			q[i].destroy();
			i--;
		}
	}
};

Spry.Widget.Utils.contains =3D function (who, what)
{
	if (typeof who.contains =3D=3D 'object') {
		return what && who && (who =3D=3D what || who.contains(what));
	} else {
		var el =3D what;
		while(el) {
			if (el =3D=3D who) {
				return true;
			}
			el =3D el.parentNode;
		}
		return false;
	}
};

Spry.Widget.Utils.addEventListener =3D function(element, eventType, =
handler, capture)
{
	try
	{
		if (element.addEventListener)
			element.addEventListener(eventType, handler, capture);
		else if (element.attachEvent)
			element.attachEvent("on" + eventType, handler, capture);
	}
	catch (e) {}
};

Spry.Widget.Utils.removeEventListener =3D function(element, eventType, =
handler, capture)
{
	try
	{
		if (element.removeEventListener)
			element.removeEventListener(eventType, handler, capture);
		else if (element.detachEvent)
			element.detachEvent("on" + eventType, handler, capture);
	}
	catch (e) {}
};



------=_NextPart_000_0000_01CCD9AF.2F84AC70
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.greenville.k12.sc.us/gcsd/schools/forms_career/SpryValidationTextarea.js

// SpryValidationTextarea.js - version 0.17 - Spry Pre-Release 1.6.1
//
// Copyright (c) 2006. Adobe Systems Incorporated.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions =
are met:
//
//   * Redistributions of source code must retain the above copyright =
notice,
//     this list of conditions and the following disclaimer.
//   * Redistributions in binary form must reproduce the above copyright =
notice,
//     this list of conditions and the following disclaimer in the =
documentation
//     and/or other materials provided with the distribution.
//   * Neither the name of Adobe Systems Incorporated nor the names of =
its
//     contributors may be used to endorse or promote products derived =
from this
//     software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS =
"AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, =
THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR =
PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS =
BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR =
BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER =
IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR =
OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED =
OF THE
// POSSIBILITY OF SUCH DAMAGE.

var Spry;
if (!Spry) Spry =3D {};
if (!Spry.Widget) Spry.Widget =3D {};

Spry.Widget.BrowserSniff =3D function()
{
	var b =3D navigator.appName.toString();
	var up =3D navigator.platform.toString();
	var ua =3D navigator.userAgent.toString();

	this.mozilla =3D this.ie =3D this.opera =3D this.safari =3D false;
	var re_opera =3D /Opera.([0-9\.]*)/i;
	var re_msie =3D /MSIE.([0-9\.]*)/i;
	var re_gecko =3D /gecko/i;
	var re_safari =3D /(applewebkit|safari)\/([\d\.]*)/i;
	var r =3D false;

	if ( (r =3D ua.match(re_opera))) {
		this.opera =3D true;
		this.version =3D parseFloat(r[1]);
	} else if ( (r =3D ua.match(re_msie))) {
		this.ie =3D true;
		this.version =3D parseFloat(r[1]);
	} else if ( (r =3D ua.match(re_safari))) {
		this.safari =3D true;
		this.version =3D parseFloat(r[2]);
	} else if (ua.match(re_gecko)) {
		var re_gecko_version =3D /rv:\s*([0-9\.]+)/i;
		r =3D ua.match(re_gecko_version);
		this.mozilla =3D true;
		this.version =3D parseFloat(r[1]);
	}
	this.windows =3D this.mac =3D this.linux =3D false;

	this.Platform =3D ua.match(/windows/i) ? "windows" :
					(ua.match(/linux/i) ? "linux" :
					(ua.match(/mac/i) ? "mac" :
					ua.match(/unix/i)? "unix" : "unknown"));
	this[this.Platform] =3D true;
	this.v =3D this.version;

	if (this.safari && this.mac && this.mozilla) {
		this.mozilla =3D false;
	}
};

Spry.is =3D new Spry.Widget.BrowserSniff();


Spry.Widget.ValidationTextarea =3D function(element, options){
=09
	options =3D Spry.Widget.Utils.firstValid(options, {});
	this.flags =3D {locked: false};
	this.options =3D {};
	this.element =3D element;
	this.init(element);

	if (!this.isBrowserSupported()){
		return;=09
	}

	options.useCharacterMasking =3D =
Spry.Widget.Utils.firstValid(options.useCharacterMasking, true);
	options.hint =3D Spry.Widget.Utils.firstValid(options.hint, '');
	options.isRequired =3D Spry.Widget.Utils.firstValid(options.isRequired, =
true);
	options.additionalError =3D =
Spry.Widget.Utils.firstValid(options.additionalError, false);

	Spry.Widget.Utils.setOptions(this, options);
	Spry.Widget.Utils.setOptions(this.options, options);

	if (options.additionalError)
		this.additionalError =3D this.getElement(options.additionalError);

	//make sure we validate at least on submit
	var validateOn =3D =
['submit'].concat(Spry.Widget.Utils.firstValid(this.options.validateOn, =
[]));
	validateOn =3D validateOn.join(",");
	this.validateOn =3D 0;
	this.validateOn =3D this.validateOn | (validateOn.indexOf('submit') =
!=3D -1 ? Spry.Widget.ValidationTextarea.ONSUBMIT : 0);
	this.validateOn =3D this.validateOn | (validateOn.indexOf('blur') !=3D =
-1 ? Spry.Widget.ValidationTextarea.ONBLUR : 0);
	this.validateOn =3D this.validateOn | (validateOn.indexOf('change') =
!=3D -1 ? Spry.Widget.ValidationTextarea.ONCHANGE : 0);

	if (Spry.Widget.ValidationTextarea.onloadDidFire){
		this.attachBehaviors();
	}else{
		Spry.Widget.ValidationTextarea.loadQueue.push(this);
	}
};

Spry.Widget.ValidationTextarea.ONCHANGE =3D 1;
Spry.Widget.ValidationTextarea.ONBLUR =3D 2;
Spry.Widget.ValidationTextarea.ONSUBMIT =3D 4;

Spry.Widget.ValidationTextarea.INITIAL =3D 'Initial';
Spry.Widget.ValidationTextarea.REQUIRED =3D 'Required';
Spry.Widget.ValidationTextarea.INVALID =3D 'Invalid Format';
Spry.Widget.ValidationTextarea.MINIMUM =3D 'Minimum Number of Chars Not =
Met';
Spry.Widget.ValidationTextarea.MAXIMUM =3D 'Maximum Number of Chars =
Exceeded';
Spry.Widget.ValidationTextarea.VALID =3D 'Valid';

Spry.Widget.ValidationTextarea.prototype.init =3D function(element)
{
	this.element =3D this.getElement(element);
	this.event_handlers =3D [];

	this.requiredClass =3D "textareaRequiredState";
	this.invalidCharsMaxClass =3D "textareaMaxCharsState";
	this.invalidCharsMinClass =3D "textareaMinCharsState";
	this.validClass =3D "textareaValidState";
	this.focusClass =3D "textareaFocusState";
	this.hintClass =3D "textareaHintState";
	this.textareaFlashClass =3D "textareaFlashState";

	this.isMaxInvalid =3D false;
	this.isMinInvalid =3D false;
	this.isRequireInvalid =3D false;
=09
	this.safariClicked =3D false;
	this.state =3D Spry.Widget.ValidationTextarea.INITIAL;
};

Spry.Widget.ValidationTextarea.prototype.destroy =3D function() {
	if (this.event_handlers)
		for (var i=3D0; i<this.event_handlers.length; i++) {
			Spry.Widget.Utils.removeEventListener(this.event_handlers[i][0], =
this.event_handlers[i][1], this.event_handlers[i][2], false);
		}
	try { delete this.element; } catch(err) {}
	try { delete this.input; } catch(err) {}
	try { delete this.counterEl; } catch(err) {}
	try { delete this.form; } catch(err) {}
	try { delete this.event_handlers; } catch(err) {}
	try { this.cursorPosition.destroy(); } catch(err) {}
	try { delete this.cursorPosition; } catch(err) {}
	try { this.initialCursor.destroy(); } catch(err) {}
	try { delete this.initialCursor; } catch(err) {}

	var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
	var qlen =3D q.length;
	for (var i =3D 0; i < qlen; i++) {
		if (q[i] =3D=3D this) {
			q.splice(i, 1);
			break;
		}
	}
};

Spry.Widget.ValidationTextarea.prototype.isDisabled =3D function() {
	return this.input && (this.input.disabled || this.input.readOnly) || =
!this.input;
};

Spry.Widget.ValidationTextarea.prototype.getElement =3D function(ele)
{
	if (ele && typeof ele =3D=3D "string")
		return document.getElementById(ele);
	return ele;
};


Spry.Widget.ValidationTextarea.addLoadListener =3D function(handler){
	if (typeof window.addEventListener !=3D 'undefined'){
		window.addEventListener('load', handler, false);
	}else if (typeof document.addEventListener !=3D 'undefined'){
		document.addEventListener('load', handler, false);
	}else if (typeof window.attachEvent !=3D 'undefined'){
		window.attachEvent('onload', handler);
	}
};

Spry.Widget.ValidationTextarea.processLoadQueue =3D function(handler){
	Spry.Widget.ValidationTextarea.onloadDidFire =3D true;
	var q =3D Spry.Widget.ValidationTextarea.loadQueue;
	var qlen =3D q.length;
	for (var i =3D 0; i < qlen; i++){
		q[i].attachBehaviors();
	}
};

Spry.Widget.ValidationTextarea.onloadDidFire =3D false;
Spry.Widget.ValidationTextarea.loadQueue =3D [];
Spry.Widget.ValidationTextarea.addLoadListener(Spry.Widget.ValidationText=
area.processLoadQueue);
Spry.Widget.ValidationTextarea.addLoadListener(function(){
	Spry.Widget.Utils.addEventListener(window, "unload", =
Spry.Widget.Form.destroyAll, false);
});

Spry.Widget.ValidationTextarea.prototype.isBrowserSupported =3D =
function()
{
	return Spry.is.ie && Spry.is.v >=3D 5 && Spry.is.windows
		||
	Spry.is.mozilla && Spry.is.v >=3D 1.4
		||
	Spry.is.safari
		||
	Spry.is.opera && Spry.is.v >=3D 9;
};

/*=20
 * register our input to different event notifiers=20
 *
 */
Spry.Widget.ValidationTextarea.prototype.attachBehaviors =3D function()
{
	if (this.element){
		if (this.element.nodeName =3D=3D "TEXTAREA") {
			this.input =3D this.element;
		} else {
			this.input =3D =
Spry.Widget.Utils.getFirstChildWithNodeNameAtAnyLevel(this.element, =
"TEXTAREA");
		}
	}
	if (this.options && this.options.counterType && =
(this.options.counterType =3D=3D 'chars_count' || =
this.options.counterType =3D=3D 'chars_remaining')){
			this.counterEl =3D document.getElementById(this.options.counterId);
			this.counterChar();
	}

	if (this.input) {
		this.input.setAttribute("AutoComplete", "off");
		this.putHint();
		this.cursorPosition =3D new =
Spry.Widget.SelectionDescriptor(this.input);

		var self =3D this;
		this.event_handlers =3D [];

		//attach the pattern related event handlers (to stop invalid keys)=20
		if (this.useCharacterMasking) {
			if (Spry.is.ie){
				this.event_handlers.push([this.input, "propertychange", function(e) =
{ return self.onKeyEvent(e || event); }]);
				this.event_handlers.push([this.input, "drop", function(e) { return =
self.onDrop (e || event); }]);
				this.event_handlers.push([this.input, "keypress", function(e) { =
return self.onKeyPress(e || event); }]);
			} else{
				this.event_handlers.push([this.input, "keydown", function(e) { =
return self.onKeyDown(e); }]);
				this.event_handlers.push([this.input, "keypress", function(e) { =
return self.safariKeyPress(e); }]);
				this.event_handlers.push([this.input, "keyup", function(e) { return =
self.safariValidate(e); }]);
				if (Spry.is.safari){
					this.event_handlers.push([this.input, "mouseup", function(e) { =
return self.safariMouseUp(e); }]);
					this.event_handlers.push([this.input, "mousedown", function(e) { =
return self.safariMouseDown(e); }]);
				} else {
					//Firefox bug: 355219
					//this.event_handlers.push([this.input, "input", function(e) { =
self.onKeyEvent(e); return true;}]);
					this.event_handlers.push([this.input, "dragdrop", function(e) { =
return self.onKeyEvent(e); }]);
					this.event_handlers.push([this.input, "dragenter", function(e) { =
self.removeHint(); return self.onKeyDown(e); }]);
					this.event_handlers.push([this.input, "dragexit", function(e) { =
return self.putHint(); }]);
				}
			}
			// we need to save an initial state in case of invalid input
			this.event_handlers.push([this.input, "keydown", function(e) {return =
self.onKeyDown(e || event); }]);
		}

		this.event_handlers.push([this.input, "focus", function(e) { return =
self.onFocus(e || event); }]);
		this.event_handlers.push([this.input, "mousedown", function(e) { =
return self.onMouseDown(e || event); }]);
		this.event_handlers.push([this.input, "blur", function(e) { return =
self.onBlur(e || event); }]);

		if (this.validateOn & Spry.Widget.ValidationTextarea.ONCHANGE){
				if (Spry.is.ie){
						this.event_handlers.push([this.input, "propertychange", =
function(e) { return self.onChange(e || event); }]);
						this.event_handlers.push([this.input, "drop", function(e) { return =
self.onChange(e || event); }]);
				} else{
						this.event_handlers.push([this.input, "keydown", function(e) { =
return self.onKeyDown(e); }]);
						this.event_handlers.push([this.input, "keypress", function(e) { =
return self.safariChangeKeyPress(e); }]);
						this.event_handlers.push([this.input, "keyup", function(e) { =
return self.safariChangeValidate(e); }]);
						if (Spry.is.safari){
							this.event_handlers.push([this.input, "mouseup", function(e) { =
return self.safariChangeMouseUp(e); }]);
							this.event_handlers.push([this.input, "mousedown", function(e) { =
return self.safariMouseDown(e); }]);
						} else {
							// Firefox bug: 355219
							//this.event_handlers.push([this.input, "input", function(e) { =
return self.onChange(e); }]);
							this.event_handlers.push([this.input, "dragdrop", function(e) =
{return self.onChange(e); }]);
							this.event_handlers.push([this.input, "dragenter", function(e) { =
self.removeHint(); return self.onKeyDown(e); }]);
							this.event_handlers.push([this.input, "dragexit", function(e) { =
return self.putHint(); }]);
						}
				}
		}
		// The counter should be called directly when no enforcement or change =
restrictions exists
		if (! (this.validateOn & Spry.Widget.ValidationTextarea.ONCHANGE) && =
!this.useCharacterMasking){
				if (Spry.is.ie){
						this.event_handlers.push([this.input, "propertychange", =
function(e) { return self.counterChar(); }]);
						this.event_handlers.push([this.input, "drop", function(e) { return =
self.counterChar(); }]);
				} else{
						this.event_handlers.push([this.input, "keypress", function(e) { =
return self.counterChar(); }]);
						this.event_handlers.push([this.input, "keyup", function(e) { =
return self.counterChar(); }]);
						if (Spry.is.safari){
							this.event_handlers.push([this.input, "mouseup", function(e) { =
return self.counterChar(); }]);
						} else {
							// Firefox bug: 355219
							//this.event_handlers.push([this.input, "input", function(e) { =
return self.onChange(e); }]);
							this.event_handlers.push([this.input, "dragdrop", function(e) =
{return self.counterChar(); }]);
						}
				}
		}

		for (var i=3D0; i<this.event_handlers.length; i++) {
			Spry.Widget.Utils.addEventListener(this.event_handlers[i][0], =
this.event_handlers[i][1], this.event_handlers[i][2], false);
		}

		this.form =3D Spry.Widget.Utils.getFirstParentWithNodeName(this.input, =
"FORM");
		if (this.form) {
			if (!this.form.attachedSubmitHandler && !this.form.onsubmit) {
				this.form.onsubmit =3D function(e) { e =3D e || event; return =
Spry.Widget.Form.onSubmit(e, e.srcElement || e.currentTarget) };
				this.form.attachedSubmitHandler =3D true;                =20
			}
			if (!this.form.attachedResetHandler) {
				Spry.Widget.Utils.addEventListener(this.form, "reset", function(e) { =
e =3D e || event; return Spry.Widget.Form.onReset(e, e.srcElement || =
e.currentTarget) }, false);
				this.form.attachedResetHandler =3D true;                =20
			}
			// add the currrent widget to the "onSubmit" check queue;
			Spry.Widget.Form.onSubmitWidgetQueue.push(this);
		}
	}
	this.saveState();
};

Spry.Widget.ValidationTextarea.prototype.onTyping =3D function(e){
	if (this.input.disabled =3D=3D true || this.input.readOnly =3D=3D =
true){
			return;=09
	}

	if (!this.initialCursor){
		this.initialCursor =3D this.cursorPosition;=09
	}
	// on IE a stack overflow appears
	if (this.flags.locked){
			return true;
	}

	var val =3D this.input.value;

	var ret =3D true;
=09
	if (this.flags.hintOn){
		return true;
	}
 	if (e && this.input && this.options && this.options.maxChars > 0 && =
ret){
		if ( val.length > this.options.maxChars  &&=20
							((!Spry.Widget.Utils.isSpecialKey(e) && this.cursorPosition.start =
=3D=3D this.cursorPosition.end) ||
				 			 (Spry.Widget.Utils.isSpecialKey(e) && val !=3D =
this.initialValue) ||
				 				this.cursorPosition.start !=3D this.cursorPosition.end)
			 ){
					// cut the extra chars and display error
					this.flags.locked =3D true;
					var initial =3D this.initialValue;
					var start =3D this.initialCursor.start;
					var end =3D this.initialCursor.end;
					if (initial.length && this.initialCursor.end < initial.length) {
							// we try to behave more like maxlength textfield
							var tmp =3D end - start + this.options.maxChars - initial.length;
							var newValue =3D initial.substring(0, start) + =
val.substring(start, start+tmp) + initial.substring(end, initial.length =
< this.options.maxChars ? initial.length:this.options.maxChars);
							end =3D start + tmp;
					}else{
							var newValue =3D val.substring(0, this.options.maxChars);
							end =3D start =3D this.options.maxChars;
					}
					if (Spry.is.ie) {
						this.input.innerText =3D newValue;
					} else {
						this.input.value =3D newValue;
					}
					this.redTextFlash();
					this.cursorPosition.moveTo(end, end);
					this.flags.locked =3D false;
					ret =3D false;
			} else{
					this.setState(Spry.Widget.ValidationTextarea.VALID);
					this.isMaxInvalid =3D false;
			}
	}
	this.counterChar();
	return ret;
};

Spry.Widget.ValidationTextarea.prototype.validateMinRequired =3D =
function(val){
	var oldInvalid =3D false;
	if (typeof this.notFireMinYet =3D=3D 'undefined'){
		this.notFireMinYet =3D false;
	}else{
		oldInvalid =3D true;
		this.notFireMinYet =3D true;
	}
	if (this.onBlurOn){
		this.notFireMinYet =3D true;
	}else if (!this.onKeyEventOn){
		this.notFireMinYet =3D true;
	}

	if (this.input && this.options && this.options.isRequired){
			if (val.length > 0 && this.isRequireInvalid && (!this.hint || =
(this.hint && !this.flags.hintOn) || (this.hint && val !=3D =
this.hint))){
						this.switchClassName(this.validClass);
						this.setState(Spry.Widget.ValidationTextarea.VALID);
						this.isRequireInvalid =3D false;
			}else if ((val.length =3D=3D 0 || !(!this.hint || (this.hint && =
!this.flags.hintOn) || (this.hint && val !=3D this.hint))) && =
(!this.isRequireInvalid || oldInvalid)){
						if (this.notFireMinYet || Spry.is.ie){
							this.switchClassName(this.requiredClass);
							this.setState(Spry.Widget.ValidationTextarea.REQUIRED);
						}
						this.isRequireInvalid =3D true;
						this.isMinInvalid =3D false;
			}
	}
	if (this.input && this.options && this.options.minChars > 0 && =
!this.isRequireInvalid){
			if (val.length >=3D this.options.minChars && (!this.hint || =
(this.hint && !this.flags.hintOn) || (this.hint && val !=3D this.hint)) =
&& this.isMinInvalid){
						this.switchClassName(this.validClass);
						this.setState(Spry.Widget.ValidationTextarea.VALID);
						this.isMinInvalid =3D false;
			}else if ( (val.length < this.options.minChars || (this.hint && val =
=3D=3D this.hint && this.flags.hintOn)) && !this.isMinInvalid){
						this.switchClassName(this.invalidCharsMinClass);
						this.setState(Spry.Widget.ValidationTextarea.MINIMUM);
						this.isMinInvalid =3D true;
			}
	}
};
Spry.Widget.ValidationTextarea.prototype.counterChar =3D function(){
	if (!this.counterEl || !this.options || !this.options.counterType || =
(this.options.counterType !=3D 'chars_remaining' && =
this.options.counterType !=3D 'chars_count')){
		return;=09
	}

	if (this.options.counterType =3D=3D 'chars_remaining') {
		if (this.options.maxChars > 0){
			if (this.flags.hintOn){
				this.setCounterElementValue(this.options.maxChars);
			} else {
				if (this.options.maxChars > this.input.value.length){
					this.setCounterElementValue(this.options.maxChars - =
this.input.value.length);
				}else{
					this.setCounterElementValue(0);
				}
			}
		}
	} else {
		if (this.flags.hintOn){
			this.setCounterElementValue(0);
		} else {
			if (this.useCharacterMasking && typeof this.options.maxChars !=3D =
'undefined' && this.options.maxChars < this.input.value.length){
				this.setCounterElementValue(this.options.maxChars);
			} else {
				this.setCounterElementValue(this.input.value.length);
			}
		}
	}
};

Spry.Widget.ValidationTextarea.prototype.setCounterElementValue =3D =
function(val){
		if ( this.counterEl.nodeName.toLowerCase() !=3D 'input' &&=20
			this.counterEl.nodeName.toLowerCase() !=3D 'textarea' &&
			this.counterEl.nodeName.toLowerCase() !=3D 'select' &&
			this.counterEl.nodeName.toLowerCase() !=3D 'img'){
			this.counterEl.innerHTML =3D val;
		}
};
Spry.Widget.ValidationTextarea.prototype.reset =3D function() {
	this.removeHint();
	this.removeClassName(this.requiredClass);
	this.removeClassName(this.invalidCharsMinClass);
	this.removeClassName(this.invalidCharsMaxClass);
	this.removeClassName(this.validClass);
	this.setState(Spry.Widget.ValidationTextarea.INITIAL);
	var self =3D this;
	setTimeout(function() {self.putHint();self.counterChar();}, 10);
};

Spry.Widget.ValidationTextarea.prototype.validate =3D function(){
	if (this.input.disabled =3D=3D true || this.input.readOnly =3D=3D =
true){
			return true;=09
	}

  if (this.validateOn & Spry.Widget.ValidationTextarea.ONSUBMIT) {
    this.removeHint();
  }
 =20
	var val =3D this.input.value;
	this.validateMinRequired(val);

	var ret =3D !this.isMinInvalid && !this.isRequireInvalid;

	if (ret && this.options.maxChars > 0 && !this.useCharacterMasking){
			if (val.length <=3D this.options.maxChars || (this.hint && this.hint =
=3D=3D val && this.flags.hintOn))	{
					this.switchClassName(this.validClass);
					this.setState(Spry.Widget.ValidationTextarea.VALID);
				  this.isMaxInvalid =3D false;
			}else{
					this.switchClassName(this.invalidCharsMaxClass);
					this.setState(Spry.Widget.ValidationTextarea.MAXIMUM);
					this.isMaxInvalid =3D true;=09
			}
	}
	ret =3D ret && !this.isMaxInvalid;
	if (ret) {
		this.switchClassName(this.validClass);
	}
	this.counterChar();=09
	return ret;
};

Spry.Widget.ValidationTextarea.prototype.setState =3D =
function(newstate){
	this.state =3D newstate;
};

Spry.Widget.ValidationTextarea.prototype.getState =3D function(){
	return this.state;
};

Spry.Widget.ValidationTextarea.prototype.removeHint =3D function()
{
	if (this.flags.hintOn)=20
	{
		this.flags.locked =3D true;
		this.input.value =3D "";
		this.flags.locked =3D false;
		this.flags.hintOn =3D false;
		this.removeClassName(this.hintClass);
	}
};

Spry.Widget.ValidationTextarea.prototype.putHint =3D function()
{
	if(this.hint && this.input.value =3D=3D "") {
		this.flags.hintOn =3D true;
		this.input.value =3D this.hint;
		this.addClassName(this.hintClass);
	}
};

Spry.Widget.ValidationTextarea.prototype.redTextFlash =3D function()
{
	var self =3D this;
	this.addClassName(this.textareaFlashClass);
	setTimeout(function() {
		self.removeClassName(self.textareaFlashClass)
	}, 200);
};


Spry.Widget.ValidationTextarea.prototype.onKeyPress =3D function(e)
{
	//ENTER has length 2 on IE Windows, so will exceed maxLength on =
proximity
	if (Spry.is.ie && Spry.is.windows && e.keyCode =3D=3D 13) {
		if ( (this.initialCursor.length + this.options.maxChars - =
this.input.value.length) < 2) {
			Spry.Widget.Utils.stopEvent(e);
			return false;
		}
	}
};

Spry.Widget.ValidationTextarea.prototype.onKeyDown =3D function(e)
{=20
	this.saveState();
	this.keyCode =3D e.keyCode;
	return true;
};

/*
 * hadle for the max chars restrictions
 * if key pressed or the input text is invalid it returns false
 *=20
 */
Spry.Widget.ValidationTextarea.prototype.onKeyEvent =3D function(e){
	// on IE we look only for this input value changes
	if (e.type =3D=3D 'propertychange' && e.propertyName !=3D 'value'){
			return true;
	}

	var allow =3D this.onTyping(e);

	if (!allow){
		Spry.Widget.Utils.stopEvent(e);
	}
	//return allow;
};

/*
 * handle for the min or required value
 * if the input text is invalid it returns false
 *=20
 */
Spry.Widget.ValidationTextarea.prototype.onChange =3D function(e){
	if (Spry.is.ie && e && e.type =3D=3D 'propertychange' && e.propertyName =
!=3D 'value') {
		return true;
	}

	if (this.flags.drop) {
		//delay this if it's a drop operation
		var self =3D this;
		setTimeout(function() {
			self.flags.drop =3D false;
			self.onChange(null);
		}, 0);
		return true;
	}
	if (this.flags.hintOn) {
		return true;
	}
	this.onKeyEventOn =3D true;
	var answer =3D this.validate();
	this.onKeyEventOn =3D false;
	return answer;
};

Spry.Widget.ValidationTextarea.prototype.onMouseDown =3D function(e)
{
	if (this.flags.active) {
		//mousedown fires before focus
		//avoid double saveState on first focus by mousedown by checking if =
the control has focus
		//do nothing if it's not focused because saveState will be called =
onfocus
		this.saveState();
	}
};

Spry.Widget.ValidationTextarea.prototype.onDrop =3D function(e)
{
	//mark that a drop operation is in progress to avoid race conditions =
with event handlers for other events
	//especially onchange and onfocus
	this.flags.drop =3D true;
	this.removeHint();

	if (Spry.is.ie) {
		var rng =3D document.body.createTextRange();
		rng.moveToPoint(e.x, e.y);
		rng.select();
	}

	this.saveState();
	this.flags.active =3D true;
	this.addClassName(this.focusClass);
};

Spry.Widget.ValidationTextarea.prototype.onFocus =3D function(e)
{
	if (this.flags.drop) {
		return;
	}
	this.removeHint();
	this.saveState();
	this.flags.active =3D true;
	this.addClassName(this.focusClass);
};

Spry.Widget.ValidationTextarea.prototype.onBlur =3D function(e){
	this.removeClassName(this.focusClass);

	if (this.validateOn & Spry.Widget.ValidationTextarea.ONBLUR) {
		this.onBlurOn =3D true;
		this.validate();
		this.onBlurOn =3D false;
	}

	this.flags.active =3D false;
	var self =3D this;
	setTimeout(function() {self.putHint();}, 10);
};

Spry.Widget.ValidationTextarea.prototype.safariMouseDown =3D =
function(e){
	this.safariClicked =3D true;
};
Spry.Widget.ValidationTextarea.prototype.safariChangeMouseUp =3D =
function(e){
		if (!this.safariClicked){
			this.onKeyDown(e);=20
			return this.safariChangeValidate(e, false);
		}else{
			this.safariClicked =3D false;
			return true;
		}
};

Spry.Widget.ValidationTextarea.prototype.safariMouseUp =3D function(e){
		if (!this.safariClicked){
			this.onKeyDown(e);
			return this.safariValidate(e, false);
		}else{
			this.safariClicked =3D false;
			return true;
		}
};

Spry.Widget.ValidationTextarea.prototype.safariKeyPress =3D function(e){
	this.safariFlag =3D new Date();
	return this.safariValidate(e, true);
};

Spry.Widget.ValidationTextarea.prototype.safariValidate =3D function(e, =
recall)
{
	if (e.keyCode && Spry.Widget.Utils.isSpecialKey(e) && e.keyCode !=3D 8 =
&& e.keyCode !=3D 46){
		return true;
	}
	var answer =3D this.onTyping(e);

	// the answer to this is not yet final - we schedule another closing =
check
	if (new Date() - this.safariFlag < 1000 && recall){
		var self =3D this;
		setTimeout(function(){self.safariValidate(e, false);}, 1000);
	}
	return answer;
};

Spry.Widget.ValidationTextarea.prototype.safariChangeKeyPress =3D =
function(e){
	this.safariChangeFlag =3D new Date();
	return this.safariChangeValidate(e, true);
};

Spry.Widget.ValidationTextarea.prototype.safariChangeValidate =3D =
function(e, recall){
=09
	if(e.keyCode && Spry.Widget.Utils.isSpecialKey(e) && e.keyCode !=3D 8 =
&& e.keyCode !=3D 46){
		return true;=09
	}
	var answer =3D this.onChange(e);

	// the answer to this is not yet final - we schedule another closing =
check
	if (new Date() - this.safariChangeFlag < 1000 && recall){
		var self =3D this;
		setTimeout(function(){ self.safariChangeValidate(e, false);}, 1000 - =
new Date() + this.safariChangeFlag);
	}
	return answer;
};

/*
 * save an initial state of the input to restore if the value is invalid
 *=20
 */
Spry.Widget.ValidationTextarea.prototype.saveState =3D function(e){
=09
	// we don't need this initial value that is already invalid
	if (this.options.maxChars > 0 && this.input.value.length > =
this.options.maxChars){
		return;
	}
	this.cursorPosition.update();
	if (!this.flags.hintOn){
		this.initialValue =3D this.input.value;
	}else{
		this.initialValue =3D '';
	}
	this.initialCursor =3D this.cursorPosition;=20
	return true;
};

Spry.Widget.ValidationTextarea.prototype.checkClassName =3D =
function(ele, className){
	if (!ele || !className){
		return false;
	}
	if (typeof ele =3D=3D 'string' ) {
		ele =3D document.getElementById(ele);
		if (!ele){
			return false;=09
		}
	}
	if (!ele.className){
		ele.className =3D ' ';
	}
	return ele;
};

Spry.Widget.ValidationTextarea.prototype.switchClassName =3D function =
(className){
	var classes =3D [this.invalidCharsMaxClass, this.validClass, =
this.requiredClass, this.invalidCharsMinClass];

	for (var k =3D 0; k < classes.length; k++){
		if (classes[k] !=3D className){
				this.removeClassName(classes[k]);		=09
		}
	}

	this.addClassName(className);
};

Spry.Widget.ValidationTextarea.prototype.addClassName =3D =
function(clssName){
	var ele =3D this.checkClassName(this.element, clssName);
	var add =3D this.checkClassName(this.additionalError, clssName);

	if (!ele || ele.className.search(new RegExp("\\b" + clssName + "\\b")) =
!=3D -1){
	  return;
	}
	this.element.className +=3D ' ' + clssName;
	if (add)
		add.className +=3D ' ' + clssName;
};

Spry.Widget.ValidationTextarea.prototype.removeClassName =3D =
function(className){
	var ele =3D this.checkClassName(this.element, className);
	var add =3D this.checkClassName(this.additionalError, className);
	if (!ele){
	  return;=09
	}
	ele.className =3D ele.className.replace(new RegExp("\\s*\\b" + =
className + "\\b", "g"), '');
	if (add){
		add.className =3D add.className.replace(new RegExp("\\s*\\b" + =
className + "\\b", "g"), '');
	}
};=20

/**
 * SelectionDescriptor is a wrapper for input type text selection =
methods and properties=20
 * as implemented by various  browsers
 */
Spry.Widget.SelectionDescriptor =3D function (element)
{
	this.element =3D element;
	this.update();
};

Spry.Widget.SelectionDescriptor.prototype.update =3D function()
{
	if (Spry.is.ie && Spry.is.windows) {
		var sel =3D this.element.ownerDocument.selection;
		if (this.element.nodeName =3D=3D "TEXTAREA") {
			if (sel.type !=3D 'None') {
				try{var range =3D sel.createRange();}catch(err){return;}
				if (range.parentElement() =3D=3D this.element){
					var range_all =3D =
this.element.ownerDocument.body.createTextRange();
					range_all.moveToElementText(this.element);
					for (var sel_start =3D 0; =
range_all.compareEndPoints('StartToStart', range) < 0; sel_start ++){
						range_all.moveStart('character', 1);
					}
					this.start =3D sel_start;
					// create a selection of the whole this.element
					range_all =3D this.element.ownerDocument.body.createTextRange();
					range_all.moveToElementText(this.element);
					for (var sel_end =3D 0; range_all.compareEndPoints('StartToEnd', =
range) < 0; sel_end++){
						range_all.moveStart('character', 1);
					}
					this.end =3D sel_end;
					this.length =3D this.end - this.start;
					// get selected and surrounding text
					this.text =3D range.text;
		 		}
			}       =20
		} else if (this.element.nodeName =3D=3D "INPUT"){
			try{this.range =3D sel.createRange();}catch(err){return;}
			this.length =3D this.range.text.length;
			var clone =3D this.range.duplicate();
			this.start =3D -clone.moveStart("character", -10000);
			clone =3D this.range.duplicate();
			clone.collapse(false);
			this.end =3D -clone.moveStart("character", -10000);
			this.text =3D this.range.text;
		}
	} else {
		var tmp =3D this.element;
		var selectionStart =3D 0;
		var selectionEnd =3D 0;
       =20
		try { selectionStart =3D tmp.selectionStart;} catch(err) {}
		try { selectionEnd =3D tmp.selectionEnd;} catch(err) {}

		if (Spry.is.safari) {
			if (selectionStart =3D=3D 2147483647) {
				selectionStart =3D 0;
			}
			if (selectionEnd =3D=3D 2147483647) {
				selectionEnd =3D 0;
			}
		}
		this.start =3D selectionStart;
		this.end =3D selectionEnd;
		this.length =3D selectionEnd - selectionStart;
		this.text =3D this.element.value.substring(selectionStart, =
selectionEnd);
	}
};
Spry.Widget.SelectionDescriptor.prototype.destroy =3D function() {
	try { delete this.range} catch(err) {}
	try { delete this.element} catch(err) {}
};

Spry.Widget.SelectionDescriptor.prototype.moveTo =3D function(start, =
end)
{
	if (Spry.is.ie && Spry.is.windows) {
		if (this.element.nodeName =3D=3D "TEXTAREA") {
			var ta_range =3D this.element.createTextRange();
			this.range =3D this.element.createTextRange();
			this.range.move("character", start);
			this.range.moveEnd("character", end - start);
		=09
			var c1 =3D this.range.compareEndPoints("StartToStart", ta_range);
			if (c1 < 0) {
				this.range.setEndPoint("StartToStart", ta_range);
			}

			var c2 =3D this.range.compareEndPoints("EndToEnd", ta_range);
			if (c2 > 0) {
				this.range.setEndPoint("EndToEnd", ta_range);
			}
		} else if (this.element.nodeName =3D=3D "INPUT"){
			this.range =3D this.element.ownerDocument.selection.createRange();
			this.range.move("character", -10000);
			this.start =3D this.range.moveStart("character", start);
			this.end =3D this.start + this.range.moveEnd("character", end - =
start);
		}
		this.range.select();
	} else {
		this.start =3D start;
		try { this.element.selectionStart =3D start; } catch(err) {}
		this.end =3D end;
		try { this.element.selectionEnd =3D end; } catch(err) {}
	}
	this.ignore =3D true;
	this.update();
};

//////////////////////////////////////////////////////////////////////
//
// Spry.Widget.Form - common for all widgets
//
//////////////////////////////////////////////////////////////////////

if (!Spry.Widget.Form) Spry.Widget.Form =3D {};
if (!Spry.Widget.Form.onSubmitWidgetQueue) =
Spry.Widget.Form.onSubmitWidgetQueue =3D [];

if (!Spry.Widget.Form.validate) {
	Spry.Widget.Form.validate =3D function(vform) {
		var isValid =3D true;
		var isElementValid =3D true;
		var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
		var qlen =3D q.length;
		for (var i =3D 0; i < qlen; i++) {
			if (!q[i].isDisabled() && q[i].form =3D=3D vform) {
				isElementValid =3D q[i].validate();
				isValid =3D isElementValid && isValid;
			}
		}
		return isValid;
	}
};

if (!Spry.Widget.Form.onSubmit) {
	Spry.Widget.Form.onSubmit =3D function(e, form)
	{
		if (Spry.Widget.Form.validate(form) =3D=3D false) {
			return false;
		}
		return true;
	};
};

if (!Spry.Widget.Form.onReset) {
	Spry.Widget.Form.onReset =3D function(e, vform)
	{
		var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
		var qlen =3D q.length;
		for (var i =3D 0; i < qlen; i++) {
			if (!q[i].isDisabled() && q[i].form =3D=3D vform && =
typeof(q[i].reset) =3D=3D 'function') {
				q[i].reset();
			}
		}
		return true;
	};
};

if (!Spry.Widget.Form.destroy) {
	Spry.Widget.Form.destroy =3D function(form)
	{
		var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
		for (var i =3D 0; i < Spry.Widget.Form.onSubmitWidgetQueue.length; =
i++) {
			if (q[i].form =3D=3D form && typeof(q[i].destroy) =3D=3D 'function') =
{
				q[i].destroy();
				i--;
			}
		}
	}
};

if (!Spry.Widget.Form.destroyAll) {
	Spry.Widget.Form.destroyAll =3D function()
	{
		var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
		for (var i =3D 0; i < Spry.Widget.Form.onSubmitWidgetQueue.length; =
i++) {
			if (typeof(q[i].destroy) =3D=3D 'function') {
				q[i].destroy();
				i--;
			}
		}
	}
};

//////////////////////////////////////////////////////////////////////
//
// Spry.Widget.Utils
//
//////////////////////////////////////////////////////////////////////

if (!Spry.Widget.Utils)	Spry.Widget.Utils =3D {};

Spry.Widget.Utils.setOptions =3D function(obj, optionsObj, =
ignoreUndefinedProps)
{
	if (!optionsObj)
		return;
	for (var optionName in optionsObj)
	{
		if (ignoreUndefinedProps && optionsObj[optionName] =3D=3D undefined)
			continue;
		obj[optionName] =3D optionsObj[optionName];
	}
};

Spry.Widget.Utils.firstValid =3D function() {
	var ret =3D null;
	for(var i=3D0; i<Spry.Widget.Utils.firstValid.arguments.length; i++) {
		if (typeof(Spry.Widget.Utils.firstValid.arguments[i]) !=3D =
'undefined') {
			ret =3D Spry.Widget.Utils.firstValid.arguments[i];
			break;
		}
	}
	return ret;
};

Spry.Widget.Utils.specialSafariNavKeys =3D =
",63232,63233,63234,63235,63272,63273,63275,63276,63277,63289,";

Spry.Widget.Utils.specialCharacters =3D =
",8,9,16,17,18,20,27,33,34,35,36,37,38,39,40,45,46,91,92,93,144,192,63232=
,";
Spry.Widget.Utils.specialCharacters +=3D =
Spry.Widget.Utils.specialSafariNavKeys;

Spry.Widget.Utils.isSpecialKey =3D function (ev) {
	return Spry.Widget.Utils.specialCharacters.indexOf("," + ev.keyCode + =
",") !=3D -1;
};

Spry.Widget.Utils.getFirstChildWithNodeNameAtAnyLevel =3D function(node, =
nodeName) {
	var elements  =3D node.getElementsByTagName(nodeName);
	if (elements) {
		return elements[0];
	}
	return null;
};

Spry.Widget.Utils.getFirstParentWithNodeName =3D function(node, =
nodeName)
{
	while (node.parentNode
			&& node.parentNode.nodeName.toLowerCase() !=3D nodeName.toLowerCase()
			&& node.parentNode.nodeName !=3D 'BODY') {
		node =3D node.parentNode;
	}

	if (node.parentNode && node.parentNode.nodeName.toLowerCase() =3D=3D =
nodeName.toLowerCase()) {
		return node.parentNode;
	} else {
		return null;
	}
};

Spry.Widget.Utils.destroyWidgets =3D function (container)
{
	if (typeof container =3D=3D 'string') {
		container =3D document.getElementById(container);
	}

	var q =3D Spry.Widget.Form.onSubmitWidgetQueue;
	for (var i =3D 0; i < Spry.Widget.Form.onSubmitWidgetQueue.length; i++) =
{
		if (typeof(q[i].destroy) =3D=3D 'function' && =
Spry.Widget.Utils.contains(container, q[i].element)) {
			q[i].destroy();
			i--;
		}
	}
};

Spry.Widget.Utils.contains =3D function (who, what)
{
	if (typeof who.contains =3D=3D 'object') {
		return what && who && (who =3D=3D what || who.contains(what));
	} else {
		var el =3D what;
		while(el) {
			if (el =3D=3D who) {
				return true;
			}
			el =3D el.parentNode;
		}
		return false;
	}
};

Spry.Widget.Utils.addEventListener =3D function(element, eventType, =
handler, capture)
{
	try
	{
		if (element.addEventListener)
			element.addEventListener(eventType, handler, capture);
		else if (element.attachEvent)
			element.attachEvent("on" + eventType, handler, capture);
	}
	catch (e) {}
};

Spry.Widget.Utils.removeEventListener =3D function(element, eventType, =
handler, capture)
{
	try
	{
		if (element.removeEventListener)
			element.removeEventListener(eventType, handler, capture);
		else if (element.detachEvent)
			element.detachEvent("on" + eventType, handler, capture);
	}
	catch (e) {}
};

Spry.Widget.Utils.stopEvent =3D function(ev)
{
	try
	{
		this.stopPropagation(ev);
		this.preventDefault(ev);
	}
	catch (e) {}
};

/**
 * Stops event propagation
 * @param {Event} ev the event
 */
Spry.Widget.Utils.stopPropagation =3D function(ev)
{
	if (ev.stopPropagation)
	{
		ev.stopPropagation();
	}
	else
	{
		ev.cancelBubble =3D true;
	}
};

/**
 * Prevents the default behavior of the event
 * @param {Event} ev the event
 */
Spry.Widget.Utils.preventDefault =3D function(ev)
{
	if (ev.preventDefault)
	{
		ev.preventDefault();
	}
	else
	{
		ev.returnValue =3D false;
	}
};

------=_NextPart_000_0000_01CCD9AF.2F84AC70--

