rubyuw 0.99.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/.gitignore +4 -0
  2. data/README.md +81 -0
  3. data/Rakefile +45 -0
  4. data/VERSION +1 -0
  5. data/lib/rubyuw.rb +9 -0
  6. data/lib/rubyuw/base.rb +122 -0
  7. data/lib/rubyuw/connection.rb +145 -0
  8. data/lib/rubyuw/curriculum_enrollment.rb +75 -0
  9. data/lib/rubyuw/errors.rb +16 -0
  10. data/lib/rubyuw/schedule.rb +52 -0
  11. data/lib/rubyuw/sln.rb +108 -0
  12. data/rubyuw.gemspec +97 -0
  13. data/test/live/curriculum_enrollment_test.rb +47 -0
  14. data/test/live/sln_test.rb +54 -0
  15. data/test/live/test_helper.rb +24 -0
  16. data/test/mocked/base_test.rb +171 -0
  17. data/test/mocked/connection_test.rb +178 -0
  18. data/test/mocked/curriculum_enrollment_test.rb +158 -0
  19. data/test/mocked/fixture_pages/bad_request.html +80 -0
  20. data/test/mocked/fixture_pages/curric_courses.html +2659 -0
  21. data/test/mocked/fixture_pages/curric_no_courses.html +88 -0
  22. data/test/mocked/fixture_pages/curric_no_curric_found.html +86 -0
  23. data/test/mocked/fixture_pages/logged_in_relay.html +660 -0
  24. data/test/mocked/fixture_pages/login.html +121 -0
  25. data/test/mocked/fixture_pages/no_form_login.html +122 -0
  26. data/test/mocked/fixture_pages/no_login_button.html +100 -0
  27. data/test/mocked/fixture_pages/not_logged_in_relay.html +15 -0
  28. data/test/mocked/fixture_pages/registration.html +699 -0
  29. data/test/mocked/fixture_pages/registration_error.html +699 -0
  30. data/test/mocked/fixture_pages/registration_error_no_rows.html +627 -0
  31. data/test/mocked/fixture_pages/registration_no_form.html +700 -0
  32. data/test/mocked/fixture_pages/registration_success.html +718 -0
  33. data/test/mocked/fixture_pages/registration_unknown.html +721 -0
  34. data/test/mocked/fixture_pages/schedule.html +166 -0
  35. data/test/mocked/fixture_pages/schedule_diff_credit_row.html +167 -0
  36. data/test/mocked/fixture_pages/schedule_empty.html +130 -0
  37. data/test/mocked/fixture_pages/schedule_no_credit_row.html +169 -0
  38. data/test/mocked/fixture_pages/sln_does_not_exist.html +85 -0
  39. data/test/mocked/fixture_pages/sln_no_course_info.html +94 -0
  40. data/test/mocked/fixture_pages/sln_no_course_notes.html +94 -0
  41. data/test/mocked/fixture_pages/sln_no_enrollment_info.html +94 -0
  42. data/test/mocked/fixture_pages/sln_status.html +92 -0
  43. data/test/mocked/fixture_pages/welcome.html +93 -0
  44. data/test/mocked/schedule_test.rb +89 -0
  45. data/test/mocked/sln_test.rb +146 -0
  46. data/test/mocked/test_helper.rb +67 -0
  47. data/test/password.rb.sample +8 -0
  48. metadata +118 -0
@@ -0,0 +1,721 @@
1
+
2
+ <html>
3
+ <head>
4
+ <meta NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
5
+ <style type="text/css">
6
+ div.waitClass { position:absolute; font-size:large; text-align: center;}
7
+ div.readyClass { position:absolute; visibility:hidden;}
8
+ </style>
9
+ <title>Registration</title>
10
+ <link REL="stylesheet" TYPE="text/css" HREF="https://www.washington.edu/home/home.css">
11
+
12
+ </head>
13
+ <body onload="self.focus(); initPage(); return true;">
14
+
15
+ <div id='waitDiv' class='waitClass'>
16
+ <p><br>&nbsp;<br>
17
+ <table border='0' cellpadding='0' cellspacing='0' width='100%'>
18
+ <tr><td align='center' valign='middle'>
19
+ <table width='60%' border='3' bordercolor='#e90000' cellpadding='20'><tr><td align='center'><h3><i>Please wait while your request is being processed . . . .</i></h3></td></tr>
20
+ </table>
21
+ </td></tr></table></p>
22
+ </div>
23
+ <div id='doneDiv' class='readyClass'>
24
+ <table border='0' cellpadding='0' cellspacing='0' width='100%' align='center'>
25
+ <tr>
26
+ <td width='100%' class='rpad'>
27
+ <a href='http://www.washington.edu/' target='_top'><img src='/sdb_library/images/uwlogo150p.gif' border='0' width='150' height='28' alt='University of Washington'></a>
28
+ </td>
29
+ <td rowspan='2' valign='bottom'>
30
+
31
+ <table border='0' cellpadding='0' cellspacing='0'>
32
+ <tr><td colspan='2' bgcolor='#666666'><img src='/sdb_library/images/1px_transparent.gif' height='1'></td></tr>
33
+ <tr>
34
+ <td bgcolor='#666666'><img src='/sdb_library/images/1px_transparent.gif' width='7' height='1'></td>
35
+ <td nowrap><span class='l1text'>
36
+ &nbsp;<font color='#9999cc' face='tahoma,sans-serif,arial,helvetica' style='font-size:110%'><b>Student Personal Services</b></font>&nbsp;<span class='noprint'> | <a href='/students/logout.asp'>Logout</a>&nbsp;</span> </span></td>
37
+ </tr>
38
+ </table>
39
+
40
+ </td>
41
+ </tr>
42
+ <tr>
43
+ <td bgcolor='#666666'><img src='/sdb_library/images/1px_transparent.gif' height='1'></td>
44
+ </tr>
45
+ </table>
46
+ <table border='0' cellpadding='0' cellspacing='0' width='100%'>
47
+ <tr>
48
+ <td bgcolor='#e6e6e6'><img src='/sdb_library/images/1px_transparent.gif' width='1' height='5'></TD>
49
+ </tr>
50
+ </table>
51
+ <span class='noprint'>
52
+ <table border='0' cellpadding='0' cellspacing='0'>
53
+ <tr>
54
+ <td nowrap>&#183; <a href='https://sdb.admin.washington.edu/students/uwnetid/register.asp' CLASS='barnav'><font color='#333399'><b>Registration</b></font></a></td>
55
+ <td nowrap> &nbsp; &#183; <a href='https://sdb.admin.washington.edu/students/uwnetid/grades.asp' CLASS='barnav'><font color='#333399'>Grade Inquiry</font></a></td>
56
+ <td nowrap> &nbsp; &#183; <a href='https://sdb.admin.washington.edu/students/uwnetid/dars.asp' CLASS='barnav'><font color='#333399'>DARS - Degree Audit</font></a></td>
57
+ <td nowrap> &nbsp; &#183; <a href='https://sdb.admin.washington.edu/students/uwnetid/finaidstatus.asp' CLASS='barnav'><font color='#333399'>Financial Aid Status</font></a></td>
58
+ <td nowrap> &nbsp; &#183; <a href='https://sdb.admin.washington.edu/sisStudents/uwnetid/tuition.aspx' CLASS='barnav'><font color='#333399'>Tuition Statement</font></a></td>
59
+ </tr>
60
+ <tr>
61
+ <td nowrap>&#183; <a href='https://sdb.admin.washington.edu/students/uwnetid/schedule.asp' CLASS='barnav'><font color='#333399'>Class Schedule</font></a></td>
62
+ <td nowrap> &nbsp; &#183; <a href='https://sdb.admin.washington.edu/students/uwnetid/unofficial.asp' CLASS='barnav'><font color='#333399'>Unofficial Transcript</font></a></td>
63
+ <td nowrap> &nbsp; &#183; <a href='https://sdb.admin.washington.edu/students/uwnetid/address.asp' CLASS='barnav'><font color='#333399'>Change of Address</font></a></td>
64
+ <td nowrap> &nbsp; &#183; <a href='https://sdb.admin.washington.edu/students/uwnetid/emt.asp' CLASS='barnav'><font color='#333399'>Direct Deposit Transfer</font></a></td>
65
+ <td nowrap> &nbsp; &#183; <a href='https://sdb.admin.washington.edu/students/uwnetid/ccpay.asp' CLASS='barnav'><font color='#333399'>Credit Card Payment</font></a></td>
66
+ </tr>
67
+ <tr>
68
+ <td nowrap>&#183; <a href='https://sdb.admin.washington.edu/students/uwnetid/vschedule.asp' CLASS='barnav'><font color='#333399'>Visual Schedule</font></a></td>
69
+ <td nowrap> &nbsp; &#183; <a href='https://sdb.admin.washington.edu/students/uwnetid/official.asp' CLASS='barnav'><font color='#333399'>Official Transcript</font></a></td>
70
+ <td nowrap> &nbsp; &#183; <a href='https://sdb.admin.washington.edu/students/uwnetid/op_charges.asp' CLASS='barnav'><font color='#333399'>Insurance/Optional Charges</font></a></td>
71
+ <td nowrap> &nbsp; &#183; <a href='https://sdb.admin.washington.edu/students/uwnetid/shorttermloan.asp' CLASS='barnav'><font color='#333399'>Short-Term Loan</font></a></td>
72
+ </table>
73
+ </span>
74
+ <TABLE WIDTH="90%" BORDER=0 CELLPADDING=3>
75
+ <TR>
76
+ <TD WIDTH="70%" VALIGN=TOP><BR><H1>Registration - Autumn 2009</H1>
77
+ <FORM METHOD="post" ACTION="register.asp" id=qtrform name=qtrform>
78
+ <SELECT NAME="QYYYY" >
79
+ <OPTION VALUE="00000">&nbsp;Select a different quarter&nbsp;</OPTION>
80
+ <OPTION VALUE="32009">&nbsp;Summer</OPTION>
81
+ </SELECT>
82
+ <INPUT TYPE=HIDDEN NAME=INPUTFORM VALUE="QTRCHG">
83
+ <INPUT TYPE="submit" VALUE="Change Quarter">
84
+ </FORM>
85
+ <p>
86
+ <TABLE BORDER=0 CELLPADDING=2>
87
+ <TR><TH ALIGN=left>Prepared for:</TH><TD>Somebody </TD></TR>
88
+ <TR><TH ALIGN=left>Prepared on:</TH><TD>June 28, 2009 at 1:03 a.m.</TD></TR>
89
+ <tr><th align='left'>Major:</th><td>Underwater Basketweaving</td>
90
+ </tr>
91
+ </TABLE></p>
92
+ </TD>
93
+ <TD WIDTH="20%">
94
+ <TABLE BORDER=0 CELLPADDING=3 CELLSPACING=0>
95
+ <TR BGCOLOR="#DDDDFF"><TD NOWRAP ALIGN=CENTER><FONT CLASS="navlinkbig">&nbsp;Registration&nbsp;Resources&nbsp;</FONT><BR>
96
+ <FONT CLASS="navlink">(will open in new window)</FONT></TD></TR>
97
+ <TR BGCOLOR="#FOFOFO"><TD NOWRAP> <A HREF="http://www.washington.edu/students/timeschd/AUT2009/" TARGET="_TS"> <FONT CLASS="navlink">Time Schedule</A></FONT><BR>
98
+ <A HREF="https://sdb.admin.washington.edu/TimeSchd/UWNetID/findschd.asp?QTRYR=42009" TARGET="FindSchd"> <FONT CLASS="navlink">Schedule Finder</A></FONT><BR>
99
+ <A HREF="http://www.washington.edu/students/crscat/" TARGET="_CRSCAT"> <FONT CLASS="navlink">Course Catalog</A></FONT><BR>
100
+ <A HREF="http://depts.washington.edu/figs/registration" TARGET="_FIG"> <FONT CLASS="navlink">Freshman Interest Groups</A></FONT><BR>
101
+ <A HREF="http://www.washington.edu/students/reg/calendar.html" TARGET="_REGCAL"> <FONT CLASS="navlink">Academic Calendar</A></FONT><BR>
102
+ <A HREF="http://www.washington.edu/students/reg/A2009exam.html" TARGET="_EXAM"> <FONT CLASS="navlink">Final Exam Schedule</A></FONT><BR>
103
+ <A HREF="http://www.washington.edu/students/timeschd/genedinq.html" TARGET="_GENED"> <FONT CLASS="navlink">General Education Search</A></FONT><BR>
104
+ <A HREF="http://www.washington.edu/students/ugrad/advising/secrets.html" TARGET="_TIPS"> <FONT CLASS="navlink">Tips for Closed Classes</A></FONT><BR>
105
+ <A HREF="http://www.washington.edu/admin/pb/home/opb-tuition.htm" TARGET="_TUIT"> <FONT CLASS="navlink">Tuition Rates</A></FONT><BR>
106
+ <A HREF="http://www.washington.edu/students/" TARGET="_SGR"> <FONT CLASS="navlink">Student Guide</A></FONT><BR>
107
+ </TD></TR>
108
+ </TABLE>
109
+ </TD></TR>
110
+ </TABLE>
111
+
112
+ <!--
113
+ COMMENTED OUT FOR TEST
114
+ <BR><B><IMG BORDER=0 ALIGN=MIDDLE HSPACE=5 SRC="/sdb_library/images/success.gif" ALT="OK">...</B>
115
+ --><BR><BR><B></B>NOTE: Your Registration Confirmation with ID validation sticker and <A HREF="http://www.washington.edu/upass/", TARGET="_UPASS">U-PASS validation sticker</A> will be mailed to <A HREF="https://sdb.admin.washington.edu/students/UWNetID/address.asp">your permanent address</A>. <B></B><BR><FORM METHOD="post" ACTION="register.asp" id='regform' name='regform'>
116
+ <INPUT TYPE=HIDDEN NAME=INPUTFORM VALUE="UPDATE">
117
+ <INPUT TYPE=HIDDEN NAME=YR VALUE=2009>
118
+ <INPUT TYPE=HIDDEN NAME=QTR VALUE=4>
119
+ <p><b>Your current schedule:</b><br>
120
+ <TABLE BORDER='1' CELLPADDING='3'>
121
+ <TR BGCOLOR="#d0d0d0">
122
+ <TH ROWSPAN='2'>Drop<BR>from<BR>schedule</TH>
123
+ <TH ROWSPAN='2'>SLN</TH>
124
+ <TH ROWSPAN='2'>Course</TH>
125
+ <TH ROWSPAN='2'>Type</TH>
126
+ <TH ROWSPAN='2'>Credits</TH>
127
+ <TH ROWSPAN='2'><A HREF="http://www.washington.edu/students/gencat/front/Grading_Sys.html", TARGET="_GS">Grading<BR>Option</A></TH>
128
+ <TH ROWSPAN='2'>Title</TH>
129
+ <TH COLSPAN='4'>Meetings</TH>
130
+ </TR>
131
+ <TR BGCOLOR="#d0d0d0">
132
+ <TH>Days</TH>
133
+ <TH>Time</TH>
134
+ <TH>Location</TH>
135
+ <TH>Instructor</TH>
136
+ </TR>
137
+ <TR>
138
+ <TD NOWRAP ALIGN=CENTER><INPUT TYPE=CHECKBOX NAME=action1 VALUE='D'></TD>
139
+ <INPUT TYPE=HIDDEN NAME=entcode1 VALUE="">
140
+ <INPUT TYPE=HIDDEN NAME=sln1 VALUE=14368>
141
+ <INPUT TYPE=HIDDEN NAME=dup1 VALUE= >
142
+ <INPUT TYPE=HIDDEN NAME=credits1>
143
+ <TD ALIGN='center'><TT>14368 </TD>
144
+ <TD NOWRAP><TT>HIST 111 A </TD>
145
+ <TD ALIGN='center'><TT>LC </TD>
146
+ <TD ALIGN='center'><TT>5.0 </TD>
147
+ <TD ALIGN=left><TT><INPUT TYPE=RADIO NAME=gr_sys1 ID=gr_sys_dec1 VALUE="decnochange" CHECKED>standard<BR>
148
+ <INPUT TYPE=RADIO NAME=gr_sys1 ID=gr_sys_sns1 VALUE='snschange' onClick=snsWarning(1,2)>S/NS
149
+ </TD>
150
+ <TD><TT><A HREF="http://www.washington.edu/students/crscat/hist.html#hist111" TARGET="_HIST111">THE ANCIENT WORLD</A></TD>
151
+ <TD NOWRAP><TT>MTWTh</TD>
152
+ <TD NOWRAP><TT>&nbsp;130-&nbsp;220</TD>
153
+ <TD NOWRAP><TT><A HREF="http://www.washington.edu/students/maps/map.cgi?SMI" TARGET="_SMI">SMI</A> 120</TD>
154
+ <TD NOWRAP><TT><A HREF="http://www.washington.edu/students/icd/S/hist/111jwalker.html" TARGET="_WALKER,JOEL T">WALKER,JOEL T</A>&nbsp;</TD>
155
+ </TR>
156
+ <TR>
157
+ <TD NOWRAP ALIGN=CENTER><INPUT TYPE=CHECKBOX NAME=action2 VALUE='D'></TD>
158
+ <INPUT TYPE=HIDDEN NAME=entcode2 VALUE="">
159
+ <INPUT TYPE=HIDDEN NAME=sln2 VALUE=14372>
160
+ <INPUT TYPE=HIDDEN NAME=dup2 VALUE= >
161
+ <INPUT TYPE=HIDDEN NAME=credits2>
162
+ <TD ALIGN='center'><TT>14372 </TD>
163
+ <TD NOWRAP><TT>HIST 111 AD </TD>
164
+ <TD ALIGN='center'><TT>QZ </TD>
165
+ <TD ALIGN='center'><TT>&nbsp;</TD>
166
+ <TD ALIGN=left><TT>&nbsp;</TD>
167
+ <TD><TT><A HREF="http://www.washington.edu/students/crscat/hist.html#hist111" TARGET="_HIST111">THE ANCIENT WORLD</A></TD>
168
+ <TD NOWRAP><TT>F</TD>
169
+ <TD NOWRAP><TT>1130-1220</TD>
170
+ <TD NOWRAP><TT><A HREF="http://www.washington.edu/students/maps/map.cgi?CDH" TARGET="_CDH">CDH</A> 223B</TD>
171
+ <TD NOWRAP><TT>&nbsp;&nbsp;</TD>
172
+ </TR>
173
+ <TR>
174
+ <TD NOWRAP ALIGN=CENTER><INPUT TYPE=CHECKBOX NAME=action3 VALUE='D'></TD>
175
+ <INPUT TYPE=HIDDEN NAME=entcode3 VALUE="">
176
+ <INPUT TYPE=HIDDEN NAME=sln3 VALUE=17697>
177
+ <INPUT TYPE=HIDDEN NAME=dup3 VALUE= >
178
+ <INPUT TYPE=HIDDEN NAME=credits3>
179
+ <TD ALIGN='center'><TT>17697 </TD>
180
+ <TD NOWRAP><TT>PSYCH 101 A </TD>
181
+ <TD ALIGN='center'><TT>LC </TD>
182
+ <TD ALIGN='center'><TT>5.0 </TD>
183
+ <TD ALIGN=left><TT><INPUT TYPE=RADIO NAME=gr_sys3 ID=gr_sys_dec3 VALUE="decnochange" CHECKED>standard<BR>
184
+ <INPUT TYPE=RADIO NAME=gr_sys3 ID=gr_sys_sns3 VALUE='snschange' onClick=snsWarning(3,2)>S/NS
185
+ </TD>
186
+ <TD><TT><A HREF="http://www.washington.edu/students/crscat/psych.html#psych101" TARGET="_PSYCH101">INTRO TO PSYCH</A></TD>
187
+ <TD NOWRAP><TT>MTWThF</TD>
188
+ <TD NOWRAP><TT>1030-1120</TD>
189
+ <TD NOWRAP><TT><A HREF="http://www.washington.edu/students/maps/map.cgi?KNE" TARGET="_KNE">KNE</A> 120</TD>
190
+ <TD NOWRAP><TT>PASSER,MICHAEL W&nbsp;</TD>
191
+ </TR>
192
+ <TR>
193
+ <TD NOWRAP ALIGN=CENTER><INPUT TYPE=CHECKBOX NAME=action4 VALUE='D'></TD>
194
+ <INPUT TYPE=HIDDEN NAME=entcode4 VALUE="">
195
+ <INPUT TYPE=HIDDEN NAME=sln4 VALUE=12271>
196
+ <INPUT TYPE=HIDDEN NAME=dup4 VALUE= >
197
+ <INPUT TYPE=HIDDEN NAME=credits4>
198
+ <TD ALIGN='center'><TT>12271 </TD>
199
+ <TD NOWRAP><TT>CSE 322 A </TD>
200
+ <TD ALIGN='center'><TT>LC </TD>
201
+ <TD ALIGN='center'><TT>3.0 </TD>
202
+ <TD ALIGN=left><TT><INPUT TYPE=RADIO NAME=gr_sys4 ID=gr_sys_dec4 VALUE="decnochange" CHECKED>standard<BR>
203
+ <INPUT TYPE=RADIO NAME=gr_sys4 ID=gr_sys_sns4 VALUE='snschange' onClick=snsWarning(4,2)>S/NS
204
+ </TD>
205
+ <TD><TT><A HREF="http://www.washington.edu/students/crscat/cse.html#cse322" TARGET="_CSE322">INTRO FORMAL MODELS</A></TD>
206
+ <TD NOWRAP><TT>MWF</TD>
207
+ <TD NOWRAP><TT>&nbsp;930-1020</TD>
208
+ <TD NOWRAP><TT><A HREF="http://www.washington.edu/students/maps/map.cgi?EEB" TARGET="_EEB">EEB</A> 037</TD>
209
+ <TD NOWRAP><TT>BEAME,PAUL W.&nbsp;</TD>
210
+ </TR>
211
+ <TR></TR>
212
+ <TR>
213
+ <TD ALIGN='right' COLSPAN='5'><TT>Total credits: 13.0&nbsp;</TD>
214
+ <TD ALIGN=right COLSPAN=6> <A HREF="https://sdb.admin.washington.edu/students/UWNetID/vschedule.asp?Q=4" TARGET="_V_SCHED">Display Visual Schedule</A>
215
+ &nbsp; &nbsp; &nbsp;<A HREF="https://sdb.admin.washington.edu/textbooks/query.asp?qtr=Autumn&sln1=14368&sln2=14372&sln3=17697&sln4=12271" TARGET="_tb">Display Textbooks</A></TD></TR>
216
+ </TABLE></p>
217
+ <P><B>Add the following sections:</B><BR>
218
+ <TABLE BORDER=1 CELLPADDING=3>
219
+ <TR BGCOLOR="#d0d0d0">
220
+ <TH>SLN</TH>
221
+ <TH><A HREF="http://www.washington.edu/students/reg/regopt.html#Q1", TARGET="_REGOPT">Add Code or<BR>Faculty Number</A></TH>
222
+ <TH>Credits<BR>(for variable-credit courses)</TH>
223
+ <TH>Check to select<BR><A HREF="http://www.washington.edu/students/gencat/front/Grading_Sys.html", TARGET="_GS">S/NS grading</A></TH>
224
+ <TH>Status</TH>
225
+ <TR>
226
+ <INPUT TYPE=HIDDEN NAME=action5 VALUE="A">
227
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln5 VALUE="" ></TD>
228
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode5 VALUE="" ></TD>
229
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits5 VALUE="" ></TD>
230
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys5 onClick=snsWarning(5,1) ></TD>
231
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup5 VALUE=" ">
232
+ <TD> &nbsp; <BR></TD>
233
+ </TR>
234
+ <TR>
235
+ <INPUT TYPE=HIDDEN NAME=action6 VALUE="A">
236
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln6 VALUE="" ></TD>
237
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode6 VALUE="" ></TD>
238
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits6 VALUE="" ></TD>
239
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys6 onClick=snsWarning(6,1) ></TD>
240
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup6 VALUE=" ">
241
+ <TD> &nbsp; <BR></TD>
242
+ </TR>
243
+ <TR>
244
+ <INPUT TYPE=HIDDEN NAME=action7 VALUE="A">
245
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln7 VALUE="" ></TD>
246
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode7 VALUE="" ></TD>
247
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits7 VALUE="" ></TD>
248
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys7 onClick=snsWarning(7,1) ></TD>
249
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup7 VALUE=" ">
250
+ <TD> &nbsp; <BR></TD>
251
+ </TR>
252
+ <TR>
253
+ <INPUT TYPE=HIDDEN NAME=action8 VALUE="A">
254
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln8 VALUE="" ></TD>
255
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode8 VALUE="" ></TD>
256
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits8 VALUE="" ></TD>
257
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys8 onClick=snsWarning(8,1) ></TD>
258
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup8 VALUE=" ">
259
+ <TD> &nbsp; <BR></TD>
260
+ </TR>
261
+ <TR>
262
+ <INPUT TYPE=HIDDEN NAME=action9 VALUE="A">
263
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln9 VALUE="" ></TD>
264
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode9 VALUE="" ></TD>
265
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits9 VALUE="" ></TD>
266
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys9 onClick=snsWarning(9,1) ></TD>
267
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup9 VALUE=" ">
268
+ <TD> &nbsp; <BR></TD>
269
+ </TR>
270
+ <TR>
271
+ <INPUT TYPE=HIDDEN NAME=action10 VALUE="A">
272
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln10 VALUE="" ></TD>
273
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode10 VALUE="" ></TD>
274
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits10 VALUE="" ></TD>
275
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys10 onClick=snsWarning(10,1) ></TD>
276
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup10 VALUE=" ">
277
+ <TD> &nbsp; <BR></TD>
278
+ </TR>
279
+ <TR>
280
+ <INPUT TYPE=HIDDEN NAME=action11 VALUE="A">
281
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln11 VALUE="" ></TD>
282
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode11 VALUE="" ></TD>
283
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits11 VALUE="" ></TD>
284
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys11 onClick=snsWarning(11,1) ></TD>
285
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup11 VALUE=" ">
286
+ <TD> &nbsp; <BR></TD>
287
+ </TR>
288
+ <TR>
289
+ <INPUT TYPE=HIDDEN NAME=action12 VALUE="A">
290
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln12 VALUE="" ></TD>
291
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode12 VALUE="" ></TD>
292
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits12 VALUE="" ></TD>
293
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys12 onClick=snsWarning(12,1) ></TD>
294
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup12 VALUE=" ">
295
+ <TD> &nbsp; <BR></TD>
296
+ </TR>
297
+ </TABLE></p><BR><INPUT TYPE=HIDDEN NAME=maxdrops VALUE=4>
298
+ <INPUT TYPE=HIDDEN NAME=maxadds VALUE=8>
299
+ <INPUT TYPE="submit" VALUE=' Update Schedule 'onClick="return editFormInput()">
300
+ </FORM>
301
+ <br><p>Please <A HREF='http://www.washington.edu/students/ps/feedback.html', TARGET='_FEEDBACK'>let us know</A> if you encounter a problem with this service, or have a suggestion for how it might be improved.</p><span class='noprint'><p><center>
302
+ <table border='0' cellpadding='4' bgcolor='yellow' width='80%'><tr><td>
303
+
304
+ <table border='0' cellpadding='5' cellspacing='0' bgcolor='white' width='100%'><tr>
305
+ <td><img src='/sdb_library/images/caution.gif' width='30' height='30' hspace='10'></td>
306
+ <td>
307
+ To protect your privacy and prevent unauthorized use,
308
+ &nbsp;<a href='http://www.washington.edu/computing/weblogin/logout.html' target='_logout'>close
309
+ <b>ALL</b> of your web browser windows</a>
310
+ and web-enabled applications when you finish.
311
+ </td>
312
+ </tr></table>
313
+
314
+ </td></tr></table>
315
+ </center></p></span>
316
+ <P></P>
317
+ <table border='0' cellpadding='0' cellspacing='0' align='center' width='100%'>
318
+ <tr>
319
+ <td rowspan='2'>
320
+ <a href='http://www.washington.edu/'><img src='/sdb_library/images/footersealW.gif' border='0' height='48' width='48' hspace='5' vspace='7' alt='UW Seal'></a>
321
+ </td>
322
+ <td rowspan='3' bgcolor='#666666' width='5'><img src='/sdb_library/images/1px_transparent.gif' width='7' height='1'></td>
323
+ <td colspan='2' bgcolor='#666666' height='1'><img src='/sdb_library/images/1px_transparent.gif' width='1' height='1'></td>
324
+ </tr><tr>
325
+ <td width='100%'>
326
+ <table border='0' width='100%'>
327
+ <tr>
328
+ <td valign='top'><address>
329
+ Office of the Registrar<br>
330
+ regoff@u.washington.edu<br>
331
+ June 28, 2009
332
+ </address>
333
+ </td>
334
+ </tr>
335
+ </table>
336
+ </td>
337
+ </tr><tr height='1'>
338
+ <td bgcolor='#666666'><img src='/sdb_library/images/1px_transparent.gif' width='1' height='1'></td>
339
+ </tr>
340
+ </table>
341
+ </div>
342
+
343
+ </body>
344
+ </html>
345
+
346
+ <script LANGUAGE="JavaScript">
347
+ <!--
348
+ window.name = "Registration";
349
+ /*************************** CLIENT-SIDE SCRIPTS ******************************/
350
+ /******************************************************************************/
351
+ var timer;
352
+ /******************************************************************************
353
+ * displayTimeRemain
354
+ * This function is initiated with a setInterval in the initPage function.
355
+ * It updates the remaining time displayed on the page in the timeRemain form
356
+ * field.
357
+ ******************************************************************************/
358
+ function displayTimeRemain(iMSecsEnd)
359
+ {
360
+ var elem, iDisplaySecs,iMin, iSec, sMin, sSec, oNoTime, oRemain;
361
+
362
+ var oDate = new Date();
363
+ var iMSecsNow = oDate.getTime();
364
+
365
+ if (document.getElementById){
366
+ if (document.getElementById('txtTimeRemain')){
367
+ elem = document.getElementById('txtTimeRemain');
368
+ }
369
+ }else if (document.all){
370
+ if (document.all['txtTimeRemain']){
371
+ elem = document.all['txtTimeRemain'];
372
+ }
373
+ }else if (document.layers){
374
+ if (document.layers['txtTimeRemain']){
375
+ elem = document.layers['txtTimeRemain'];
376
+ }
377
+ }
378
+
379
+ if (elem){
380
+ iDisplaySecs = Number(iMSecsEnd) - iMSecsNow;
381
+ if (iDisplaySecs > 1000){
382
+ oNoTime = new Date(oDate.setHours(00,00,00));
383
+ oRemain = new Date(oNoTime.setTime(oNoTime.getTime() + iDisplaySecs));
384
+ sMin = " " + String(oRemain.getMinutes());
385
+ iSec = oRemain.getSeconds();
386
+ sSec = String(iSec);
387
+ iSec = oRemain.getSeconds();
388
+ if (iSec < 10){
389
+ sSec = "0" + String(iSec);
390
+ }
391
+ elem.value = sMin + ":" + sSec;
392
+ }else{
393
+ elem.value = "It's time!";
394
+ clearInterval(timer);
395
+ return(false);
396
+ }
397
+ }
398
+ return (true);
399
+ }
400
+
401
+ /******************************************************************************
402
+ * initPage
403
+ * This function handles flipping the divs when 'processing please wait'
404
+ * is displayed and also handles starting the timer when the reject feature is
405
+ * employed. This function is triggered by the onload event of the body of the
406
+ * response.
407
+ ******************************************************************************/
408
+ function initPage()
409
+ {
410
+ var oWait, oDone, elem, timer, sMin, iMin, sSec, iSec, oDate, oNoTime, oRemain;
411
+ if (document.getElementById){
412
+ if (document.getElementById('waitDiv')){
413
+ oWait = document.getElementById('waitDiv').style;
414
+ oDone = document.getElementById('doneDiv').style;
415
+ }
416
+ }else if (document.all){
417
+ if (document.all['waitDiv']){
418
+ oWait = document.all['waitDiv'].style;
419
+ oDone = document.all['doneDiv'].style;
420
+ }
421
+ }else if (document.layers){
422
+ if (document.layers['waitDiv']){
423
+ oWait = document.layers['waitDiv'];
424
+ odone = document.layers['doneDiv'];
425
+ }
426
+ }
427
+
428
+ if (oWait && oDone){
429
+ oWait.visibility = 'hidden';
430
+ oDone.visibility = 'visible';
431
+ }
432
+
433
+ if (document.getElementById){
434
+ if (document.getElementById('txtTimeRemain')){
435
+ elem = document.getElementById('txtTimeRemain');
436
+ }
437
+ }else if (document.all){
438
+ if (document.all['txtTimeRemain']){
439
+ elem = document.all['txtTimeRemain'];
440
+ }
441
+ }else if (document.layers){
442
+ if (document.layers['txtTimeRemain']){
443
+ elem = document.layers['txtTimeRemain'];
444
+ }
445
+ }
446
+ if (elem){
447
+ iMSecsDelay = Number(elem.value) * 60 * 1000;
448
+ oDate = new Date();
449
+ oEndTime = new Date(oDate.setTime(oDate.getTime() + iMSecsDelay));
450
+ iMSecsEnd = oEndTime.getTime();
451
+ oNoTime = new Date(oDate.setHours(00,00,00));
452
+ oRemain = new Date(oNoTime.setTime(oNoTime.getTime() + iMSecsDelay));
453
+ sMin = " " + String(oRemain.getMinutes());
454
+ iSec = oRemain.getSeconds();
455
+ sSec = String(iSec);
456
+ iSec = oRemain.getSeconds();
457
+ if (iSec < 10){
458
+ sSec = "0" + String(iSec);
459
+ }
460
+ elem.value = sMin + ":" + sSec;
461
+
462
+ if (iMSecsEnd > 1000){
463
+ timer = setInterval("displayTimeRemain(iMSecsEnd)",1000);
464
+ }else{
465
+ elem.value = "It's time!";
466
+ }
467
+ }
468
+ return;
469
+ }
470
+ /******************************************************************************
471
+ * checkDelayFormInput
472
+ * This function is triggered by the onClick event of the Submit button.
473
+ ******************************************************************************/
474
+ function checkDelayFormInput()
475
+ {
476
+ var oDate,iTimeNow;
477
+
478
+ if (document.getElementById){
479
+ if (document.getElementById('txtTimeRemain')){
480
+ elem = document.getElementById('txtTimeRemain');
481
+ }
482
+ }else if (document.all){
483
+ if (document.all['txtTimeRemain']){
484
+ elem = document.all['txtTimeRemain'];
485
+ }
486
+ }else if (document.layers){
487
+ if (document.layers['txtTimeRemain']){
488
+ elem = document.layers['txtTimeRemain'];
489
+ }
490
+ }
491
+ if (elem){
492
+ if (isNaN(elem.value.substring(0,1))){
493
+ return(true);
494
+ }
495
+ }
496
+ return (false);
497
+ }
498
+
499
+ /******************************************************************************
500
+ * editFormInput
501
+ * This function is triggered by the onClick event of the Submit button.
502
+ * It will edit the form input for basic valid values and display a
503
+ * warning if the student is attempting to drop all of their classes.
504
+ ******************************************************************************/
505
+ function editFormInput()
506
+ {
507
+ var i, sMsg, sInput;
508
+ var f = document.regform;
509
+ var iMaxDrops = parseInt(f.maxdrops.value);
510
+ var iMaxAdds = parseInt(f.maxadds.value);
511
+ var sDropAll = "Y";
512
+ var sDropAny = "N";
513
+
514
+ sMsg = "";
515
+
516
+ for (i=1; i<=iMaxDrops + iMaxAdds; i++) {
517
+ if ( f["action"+i].value == "D" ) {
518
+ // if checked, dropping something
519
+ if (f["action"+i].checked) {
520
+ sDropAny = "Y";
521
+ }
522
+ // if not checked, not dropping all
523
+ else {
524
+ sDropAll = "N";
525
+ }
526
+ // drop edits: entry code
527
+ sInput = f["entcode"+i].value;
528
+ if ( sInput!="" && (isNaN(sInput) || (!isNaN(sInput) && parseInt(sInput)<10000) ) ) {
529
+ sMsg += "\"" + sInput + "\"" + " is not a valid drop code. "
530
+ + "Please enter the correct 5-digit code.";
531
+ alert(sMsg);
532
+ f["entcode"+i].focus();
533
+ return (false);
534
+ }
535
+ // drop edits: checkbox
536
+ if ( sInput!="" && !f["action"+i].checked ) {
537
+ sMsg += "Please check the drop box if you wish to drop SLN "
538
+ + f["sln"+i].value + ".";
539
+ f["action"+i].focus();
540
+ alert(sMsg);
541
+ return (false);
542
+ }
543
+ }
544
+ else {
545
+ // if an sln is being added or changed, not dropping all
546
+ if (!isNaN(parseInt(f["sln"+i].value))) {
547
+ sDropAll = "N";
548
+ }
549
+ sInput = f["sln"+i].value;
550
+ if ( sInput!="" && (isNaN(sInput) || (!isNaN(sInput) && parseInt(sInput)<1000) ) ) {
551
+ sMsg += "\"" + sInput + "\"" + " is not a valid SLN. "
552
+ + "Please enter the correct Schedule Line Number.";
553
+ f["sln"+i].focus();
554
+ alert(sMsg);
555
+ return (false);
556
+ }
557
+ sInput = f["entcode"+i].value;
558
+ if ( sInput!="" && (isNaN(sInput) || (!isNaN(sInput) && parseInt(sInput)<10000) ) ) {
559
+ sMsg += "\"" + sInput + "\"" + " is not a valid add code or faculty number. "
560
+ + "Please enter the correct 5-digit code.";
561
+ f["entcode"+i].focus();
562
+ alert(sMsg);
563
+ return (false);
564
+ }
565
+ }
566
+ }
567
+
568
+ if ( sDropAll == "Y" && sDropAny == "Y" ) {
569
+ if (iMaxAdds > 0) {
570
+ sMsg = "WARNING: You have requested to drop all of your courses. You will "
571
+ + "be considered withdrawn for the quarter unless you subsequently add "
572
+ + "courses.\n\n"
573
+ + "If this is your intention, click \"OK\". Otherwise click \"Cancel\".";
574
+ }
575
+ else {
576
+ sMsg = "WARNING: You have requested to drop all of your courses and withdraw "
577
+ + "for the quarter. It is past the deadline to add courses.\n\nIf you are "
578
+ + "withdrawing, click \"OK\". Otherwise click \"Cancel\".";
579
+ }
580
+ return (confirm(sMsg));
581
+ }
582
+
583
+ return (true);
584
+ }
585
+
586
+ /******************************************************************************
587
+ * editMMNotice
588
+ * This function is triggered by the onClick event of the MMNotice submit button.
589
+ ******************************************************************************/
590
+ function editMMForm() {
591
+
592
+ var f = document.mmform;
593
+ var sMsg = "You must check the box to acknowledge you have\n"
594
+ + "read the meningococcal meningitis notice before\n"
595
+ + "you may continue with registration. ";
596
+ if (!f["chkMMNotice"].checked){
597
+ alert(sMsg);
598
+ return (false);
599
+ }
600
+
601
+ return (true);
602
+ }
603
+ /******************************************************************************
604
+ * editRIAANotice
605
+ * This function is triggered by the onClick event of the RIAANotice submit button.
606
+ ******************************************************************************/
607
+ function editRIAAForm() {
608
+
609
+ var f = document.riaaform;
610
+ var sMsg = "You must check the box to acknowledge you have read\n"
611
+ + "the File-Sharing and Copyright Infringement Notice\n"
612
+ + " before you may continue with registration. ";
613
+ if (!f["chkRIAANotice"].checked){
614
+ alert(sMsg);
615
+ return (false);
616
+ }
617
+
618
+ return (true);
619
+ }
620
+ /******************************************************************************
621
+ * editCleryNotice
622
+ * This function is triggered by the onClick event of the Clery Notice submit button.
623
+ ******************************************************************************/
624
+ function editCleryForm() {
625
+
626
+ var oElem;
627
+ var sMsg = "You must check the box to acknowledge you have\n"
628
+ + " viewed the Your Safety Your Health notice before\n"
629
+ + " you may continue with registration. ";
630
+
631
+ oElem = document.getElementById('chkCleryNotice');
632
+ if (oElem){
633
+ if (!oElem.checked){
634
+ alert(sMsg);
635
+ return (false);
636
+ }
637
+ }
638
+
639
+ return (true);
640
+ }
641
+
642
+ /******************************************************************************
643
+ * snsWarning
644
+ ******************************************************************************/
645
+ function snsWarning(iSub,iType) {
646
+ var f = document.regform;
647
+ var sMsg = "REMINDER: Undergraduates may only use courses graded with the \n"
648
+ + "S/NS (Satisfactory/Not-Satisfactory) option to meet General Electives.\n"
649
+ + "Graduate students should see their adviser before selecting "
650
+ + "S/NS grading. \n\n"
651
+ + "S/NS is not the same as CREDIT/NO CREDIT. Click on the grading option\n"
652
+ + "link for an explanation of the grade system.\n\n"
653
+ + "One $20 change fee is assessed for any number of change transactions made\n"
654
+ + "during a given day including changes to or from S/NS grading option.\n\n"
655
+ + "Are you sure you want to take this course with the S/NS grading option?\n\n"
656
+ + "NOTE: Your request to change to S/NS grading will not be processed until\n"
657
+ + "you click the \"Update Schedule\" button at the bottom of the page and\n"
658
+ + "you receive the \"Schedule updated\" confirmation message.";
659
+
660
+ if (iType == 1) {
661
+ if ( f["gr_sys"+iSub].checked ) {
662
+ if ( !confirm(sMsg) ){
663
+ f["gr_sys"+iSub].checked = false;
664
+ }
665
+ }
666
+ }
667
+
668
+ if (iType == 2) {
669
+ if ( f["gr_sys_sns"+iSub].checked ) {
670
+ if ( !confirm(sMsg) ){
671
+ f["gr_sys_sns"+iSub].checked = false;
672
+ f["gr_sys_dec"+iSub].checked = true;
673
+ }
674
+ }
675
+ }
676
+ }
677
+ function openWin(sWindowURL,sWindowName,iWidth,iHeight)
678
+ {
679
+ if (iWidth > screen.width) {
680
+ iWidth = screen.width * .99;
681
+ }
682
+ if (iHeight > screen.height) {
683
+ iHeight = screen.height * .99;
684
+ }
685
+
686
+ popupWindow = open
687
+ ( sWindowURL,
688
+ sWindowName,
689
+ "resizable=no"
690
+ + ",scrollbars=yes"
691
+ + ",toolbar=no"
692
+ + ",location=no"
693
+ + ",directories=no"
694
+ + ",status=no"
695
+ + ",menubar=no"
696
+ + ",width=" + iWidth
697
+ + ",height=" + iHeight
698
+ //+ ",top="+((screen.height-screen.height))
699
+ //+ ",left="+((screen.width-screen.width))
700
+ );
701
+ }
702
+
703
+
704
+ //-->
705
+ </script>
706
+ <noscript>
707
+ <div id="__Div" class="waitClass">
708
+ <p><br>&nbsp;<br>
709
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
710
+ <tr><td align="center" valign="middle">
711
+ <table width="100%" border="3" bordercolor="#e90000" cellpadding="20">
712
+ <tr>
713
+ <td align="center" bgcolor="#ffffff">
714
+ <h3><br><i>The Registration service requires that you enable JavaScript in your web browser. Please enable JavaScript and try again. For information on how to enable Javascript, see <a href=http://www.washington.edu/computing/web/cookiesjavascript.html>Accepting Cookies and Enabling Javascript.</a></i>
715
+ </h3>
716
+ </td>
717
+ </tr>
718
+ </table>
719
+ </td></tr></table></p>
720
+ </div>
721
+ </noscript>