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,700 @@
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 27, 2009 at 9:10 p.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
+ <!-- MODIFIED FOR TEST -->
113
+ <FORM METHOD="post" ACTION="register.asp" id='regform' name='notregform'>
114
+ <INPUT TYPE=HIDDEN NAME=INPUTFORM VALUE="UPDATE">
115
+ <INPUT TYPE=HIDDEN NAME=YR VALUE=2009>
116
+ <INPUT TYPE=HIDDEN NAME=QTR VALUE=4>
117
+ <p><b>Your current schedule:</b><br>
118
+ <TABLE BORDER='1' CELLPADDING='3'>
119
+ <TR BGCOLOR="#d0d0d0">
120
+ <TH ROWSPAN='2'>Drop<BR>from<BR>schedule</TH>
121
+ <TH ROWSPAN='2'>SLN</TH>
122
+ <TH ROWSPAN='2'>Course</TH>
123
+ <TH ROWSPAN='2'>Type</TH>
124
+ <TH ROWSPAN='2'>Credits</TH>
125
+ <TH ROWSPAN='2'><A HREF="http://www.washington.edu/students/gencat/front/Grading_Sys.html", TARGET="_GS">Grading<BR>Option</A></TH>
126
+ <TH ROWSPAN='2'>Title</TH>
127
+ <TH COLSPAN='4'>Meetings</TH>
128
+ </TR>
129
+ <TR BGCOLOR="#d0d0d0">
130
+ <TH>Days</TH>
131
+ <TH>Time</TH>
132
+ <TH>Location</TH>
133
+ <TH>Instructor</TH>
134
+ </TR>
135
+ <TR>
136
+ <TD NOWRAP ALIGN=CENTER><INPUT TYPE=CHECKBOX NAME=action1 VALUE='D'></TD>
137
+ <INPUT TYPE=HIDDEN NAME=entcode1 VALUE="">
138
+ <INPUT TYPE=HIDDEN NAME=sln1 VALUE=14368>
139
+ <INPUT TYPE=HIDDEN NAME=dup1 VALUE= >
140
+ <INPUT TYPE=HIDDEN NAME=credits1>
141
+ <TD ALIGN='center'><TT>14368 </TD>
142
+ <TD NOWRAP><TT>HIST 111 A </TD>
143
+ <TD ALIGN='center'><TT>LC </TD>
144
+ <TD ALIGN='center'><TT>5.0 </TD>
145
+ <TD ALIGN=left><TT><INPUT TYPE=RADIO NAME=gr_sys1 ID=gr_sys_dec1 VALUE="decnochange" CHECKED>standard<BR>
146
+ <INPUT TYPE=RADIO NAME=gr_sys1 ID=gr_sys_sns1 VALUE='snschange' onClick=snsWarning(1,2)>S/NS
147
+ </TD>
148
+ <TD><TT><A HREF="http://www.washington.edu/students/crscat/hist.html#hist111" TARGET="_HIST111">THE ANCIENT WORLD</A></TD>
149
+ <TD NOWRAP><TT>MTWTh</TD>
150
+ <TD NOWRAP><TT>&nbsp;130-&nbsp;220</TD>
151
+ <TD NOWRAP><TT><A HREF="http://www.washington.edu/students/maps/map.cgi?SMI" TARGET="_SMI">SMI</A> 120</TD>
152
+ <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>
153
+ </TR>
154
+ <TR>
155
+ <TD NOWRAP ALIGN=CENTER><INPUT TYPE=CHECKBOX NAME=action2 VALUE='D'></TD>
156
+ <INPUT TYPE=HIDDEN NAME=entcode2 VALUE="">
157
+ <INPUT TYPE=HIDDEN NAME=sln2 VALUE=14372>
158
+ <INPUT TYPE=HIDDEN NAME=dup2 VALUE= >
159
+ <INPUT TYPE=HIDDEN NAME=credits2>
160
+ <TD ALIGN='center'><TT>14372 </TD>
161
+ <TD NOWRAP><TT>HIST 111 AD </TD>
162
+ <TD ALIGN='center'><TT>QZ </TD>
163
+ <TD ALIGN='center'><TT>&nbsp;</TD>
164
+ <TD ALIGN=left><TT>&nbsp;</TD>
165
+ <TD><TT><A HREF="http://www.washington.edu/students/crscat/hist.html#hist111" TARGET="_HIST111">THE ANCIENT WORLD</A></TD>
166
+ <TD NOWRAP><TT>F</TD>
167
+ <TD NOWRAP><TT>1130-1220</TD>
168
+ <TD NOWRAP><TT><A HREF="http://www.washington.edu/students/maps/map.cgi?CDH" TARGET="_CDH">CDH</A> 223B</TD>
169
+ <TD NOWRAP><TT>&nbsp;&nbsp;</TD>
170
+ </TR>
171
+ <TR>
172
+ <TD NOWRAP ALIGN=CENTER><INPUT TYPE=CHECKBOX NAME=action3 VALUE='D'></TD>
173
+ <INPUT TYPE=HIDDEN NAME=entcode3 VALUE="">
174
+ <INPUT TYPE=HIDDEN NAME=sln3 VALUE=12271>
175
+ <INPUT TYPE=HIDDEN NAME=dup3 VALUE= >
176
+ <INPUT TYPE=HIDDEN NAME=credits3>
177
+ <TD ALIGN='center'><TT>12271 </TD>
178
+ <TD NOWRAP><TT>CSE 322 A </TD>
179
+ <TD ALIGN='center'><TT>LC </TD>
180
+ <TD ALIGN='center'><TT>3.0 </TD>
181
+ <TD ALIGN=left><TT><INPUT TYPE=RADIO NAME=gr_sys3 ID=gr_sys_dec3 VALUE="decnochange" CHECKED>standard<BR>
182
+ <INPUT TYPE=RADIO NAME=gr_sys3 ID=gr_sys_sns3 VALUE='snschange' onClick=snsWarning(3,2)>S/NS
183
+ </TD>
184
+ <TD><TT><A HREF="http://www.washington.edu/students/crscat/cse.html#cse322" TARGET="_CSE322">INTRO FORMAL MODELS</A></TD>
185
+ <TD NOWRAP><TT>MWF</TD>
186
+ <TD NOWRAP><TT>&nbsp;930-1020</TD>
187
+ <TD NOWRAP><TT><A HREF="http://www.washington.edu/students/maps/map.cgi?EEB" TARGET="_EEB">EEB</A> 037</TD>
188
+ <TD NOWRAP><TT>BEAME,PAUL W.&nbsp;</TD>
189
+ </TR>
190
+ <TR></TR>
191
+ <TR>
192
+ <TD ALIGN='right' COLSPAN='5'><TT>Total credits: 8.0&nbsp;</TD>
193
+ <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>
194
+ &nbsp; &nbsp; &nbsp;<A HREF="https://sdb.admin.washington.edu/textbooks/query.asp?qtr=Autumn&sln1=14368&sln2=14372&sln3=12271" TARGET="_tb">Display Textbooks</A></TD></TR>
195
+ </TABLE></p>
196
+ <P><B>Add the following sections:</B><BR>
197
+ <TABLE BORDER=1 CELLPADDING=3>
198
+ <TR BGCOLOR="#d0d0d0">
199
+ <TH>SLN</TH>
200
+ <TH><A HREF="http://www.washington.edu/students/reg/regopt.html#Q1", TARGET="_REGOPT">Add Code or<BR>Faculty Number</A></TH>
201
+ <TH>Credits<BR>(for variable-credit courses)</TH>
202
+ <TH>Check to select<BR><A HREF="http://www.washington.edu/students/gencat/front/Grading_Sys.html", TARGET="_GS">S/NS grading</A></TH>
203
+ <TH>Status</TH>
204
+ <TR>
205
+ <INPUT TYPE=HIDDEN NAME=action4 VALUE="A">
206
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln4 VALUE="" ></TD>
207
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode4 VALUE="" ></TD>
208
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits4 VALUE="" ></TD>
209
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys4 onClick=snsWarning(4,1) ></TD>
210
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup4 VALUE=" ">
211
+ <TD> &nbsp; <BR></TD>
212
+ </TR>
213
+ <TR>
214
+ <INPUT TYPE=HIDDEN NAME=action5 VALUE="A">
215
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln5 VALUE="" ></TD>
216
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode5 VALUE="" ></TD>
217
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits5 VALUE="" ></TD>
218
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys5 onClick=snsWarning(5,1) ></TD>
219
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup5 VALUE=" ">
220
+ <TD> &nbsp; <BR></TD>
221
+ </TR>
222
+ <TR>
223
+ <INPUT TYPE=HIDDEN NAME=action6 VALUE="A">
224
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln6 VALUE="" ></TD>
225
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode6 VALUE="" ></TD>
226
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits6 VALUE="" ></TD>
227
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys6 onClick=snsWarning(6,1) ></TD>
228
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup6 VALUE=" ">
229
+ <TD> &nbsp; <BR></TD>
230
+ </TR>
231
+ <TR>
232
+ <INPUT TYPE=HIDDEN NAME=action7 VALUE="A">
233
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln7 VALUE="" ></TD>
234
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode7 VALUE="" ></TD>
235
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits7 VALUE="" ></TD>
236
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys7 onClick=snsWarning(7,1) ></TD>
237
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup7 VALUE=" ">
238
+ <TD> &nbsp; <BR></TD>
239
+ </TR>
240
+ <TR>
241
+ <INPUT TYPE=HIDDEN NAME=action8 VALUE="A">
242
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln8 VALUE="" ></TD>
243
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode8 VALUE="" ></TD>
244
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits8 VALUE="" ></TD>
245
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys8 onClick=snsWarning(8,1) ></TD>
246
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup8 VALUE=" ">
247
+ <TD> &nbsp; <BR></TD>
248
+ </TR>
249
+ <TR>
250
+ <INPUT TYPE=HIDDEN NAME=action9 VALUE="A">
251
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln9 VALUE="" ></TD>
252
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode9 VALUE="" ></TD>
253
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits9 VALUE="" ></TD>
254
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys9 onClick=snsWarning(9,1) ></TD>
255
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup9 VALUE=" ">
256
+ <TD> &nbsp; <BR></TD>
257
+ </TR>
258
+ <TR>
259
+ <INPUT TYPE=HIDDEN NAME=action10 VALUE="A">
260
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln10 VALUE="" ></TD>
261
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode10 VALUE="" ></TD>
262
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits10 VALUE="" ></TD>
263
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys10 onClick=snsWarning(10,1) ></TD>
264
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup10 VALUE=" ">
265
+ <TD> &nbsp; <BR></TD>
266
+ </TR>
267
+ <TR>
268
+ <INPUT TYPE=HIDDEN NAME=action11 VALUE="A">
269
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=sln11 VALUE="" ></TD>
270
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=5 MAXLENGTH=5 NAME=entcode11 VALUE="" ></TD>
271
+ <TD ALIGN=CENTER><INPUT TYPE=TEXT SIZE=4 MAXLENGTH=2 NAME=credits11 VALUE="" ></TD>
272
+ <TD ALIGN=CENTER><INPUT TYPE=CHECKBOX VALUE="sns" NAME=gr_sys11 onClick=snsWarning(11,1) ></TD>
273
+ <INPUT TYPE=HIDDEN SIZE=1 NAME=dup11 VALUE=" ">
274
+ <TD> &nbsp; <BR></TD>
275
+ </TR>
276
+ </TABLE></p><BR><INPUT TYPE=HIDDEN NAME=maxdrops VALUE=3>
277
+ <INPUT TYPE=HIDDEN NAME=maxadds VALUE=8>
278
+ <INPUT TYPE="submit" VALUE=' Update Schedule 'onClick="return editFormInput()">
279
+ </FORM>
280
+ <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>
281
+ <table border='0' cellpadding='4' bgcolor='yellow' width='80%'><tr><td>
282
+
283
+ <table border='0' cellpadding='5' cellspacing='0' bgcolor='white' width='100%'><tr>
284
+ <td><img src='/sdb_library/images/caution.gif' width='30' height='30' hspace='10'></td>
285
+ <td>
286
+ To protect your privacy and prevent unauthorized use,
287
+ &nbsp;<a href='http://www.washington.edu/computing/weblogin/logout.html' target='_logout'>close
288
+ <b>ALL</b> of your web browser windows</a>
289
+ and web-enabled applications when you finish.
290
+ </td>
291
+ </tr></table>
292
+
293
+ </td></tr></table>
294
+ </center></p></span>
295
+ <P></P>
296
+ <table border='0' cellpadding='0' cellspacing='0' align='center' width='100%'>
297
+ <tr>
298
+ <td rowspan='2'>
299
+ <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>
300
+ </td>
301
+ <td rowspan='3' bgcolor='#666666' width='5'><img src='/sdb_library/images/1px_transparent.gif' width='7' height='1'></td>
302
+ <td colspan='2' bgcolor='#666666' height='1'><img src='/sdb_library/images/1px_transparent.gif' width='1' height='1'></td>
303
+ </tr><tr>
304
+ <td width='100%'>
305
+ <table border='0' width='100%'>
306
+ <tr>
307
+ <td valign='top'><address>
308
+ Office of the Registrar<br>
309
+ regoff@u.washington.edu<br>
310
+ June 27, 2009
311
+ </address>
312
+ </td>
313
+ </tr>
314
+ </table>
315
+ </td>
316
+ </tr><tr height='1'>
317
+ <td bgcolor='#666666'><img src='/sdb_library/images/1px_transparent.gif' width='1' height='1'></td>
318
+ </tr>
319
+ </table>
320
+ </div>
321
+
322
+ </body>
323
+ </html>
324
+
325
+ <script LANGUAGE="JavaScript">
326
+ <!--
327
+ window.name = "Registration";
328
+ /*************************** CLIENT-SIDE SCRIPTS ******************************/
329
+ /******************************************************************************/
330
+ var timer;
331
+ /******************************************************************************
332
+ * displayTimeRemain
333
+ * This function is initiated with a setInterval in the initPage function.
334
+ * It updates the remaining time displayed on the page in the timeRemain form
335
+ * field.
336
+ ******************************************************************************/
337
+ function displayTimeRemain(iMSecsEnd)
338
+ {
339
+ var elem, iDisplaySecs,iMin, iSec, sMin, sSec, oNoTime, oRemain;
340
+
341
+ var oDate = new Date();
342
+ var iMSecsNow = oDate.getTime();
343
+
344
+ if (document.getElementById){
345
+ if (document.getElementById('txtTimeRemain')){
346
+ elem = document.getElementById('txtTimeRemain');
347
+ }
348
+ }else if (document.all){
349
+ if (document.all['txtTimeRemain']){
350
+ elem = document.all['txtTimeRemain'];
351
+ }
352
+ }else if (document.layers){
353
+ if (document.layers['txtTimeRemain']){
354
+ elem = document.layers['txtTimeRemain'];
355
+ }
356
+ }
357
+
358
+ if (elem){
359
+ iDisplaySecs = Number(iMSecsEnd) - iMSecsNow;
360
+ if (iDisplaySecs > 1000){
361
+ oNoTime = new Date(oDate.setHours(00,00,00));
362
+ oRemain = new Date(oNoTime.setTime(oNoTime.getTime() + iDisplaySecs));
363
+ sMin = " " + String(oRemain.getMinutes());
364
+ iSec = oRemain.getSeconds();
365
+ sSec = String(iSec);
366
+ iSec = oRemain.getSeconds();
367
+ if (iSec < 10){
368
+ sSec = "0" + String(iSec);
369
+ }
370
+ elem.value = sMin + ":" + sSec;
371
+ }else{
372
+ elem.value = "It's time!";
373
+ clearInterval(timer);
374
+ return(false);
375
+ }
376
+ }
377
+ return (true);
378
+ }
379
+
380
+ /******************************************************************************
381
+ * initPage
382
+ * This function handles flipping the divs when 'processing please wait'
383
+ * is displayed and also handles starting the timer when the reject feature is
384
+ * employed. This function is triggered by the onload event of the body of the
385
+ * response.
386
+ ******************************************************************************/
387
+ function initPage()
388
+ {
389
+ var oWait, oDone, elem, timer, sMin, iMin, sSec, iSec, oDate, oNoTime, oRemain;
390
+ if (document.getElementById){
391
+ if (document.getElementById('waitDiv')){
392
+ oWait = document.getElementById('waitDiv').style;
393
+ oDone = document.getElementById('doneDiv').style;
394
+ }
395
+ }else if (document.all){
396
+ if (document.all['waitDiv']){
397
+ oWait = document.all['waitDiv'].style;
398
+ oDone = document.all['doneDiv'].style;
399
+ }
400
+ }else if (document.layers){
401
+ if (document.layers['waitDiv']){
402
+ oWait = document.layers['waitDiv'];
403
+ odone = document.layers['doneDiv'];
404
+ }
405
+ }
406
+
407
+ if (oWait && oDone){
408
+ oWait.visibility = 'hidden';
409
+ oDone.visibility = 'visible';
410
+ }
411
+
412
+ if (document.getElementById){
413
+ if (document.getElementById('txtTimeRemain')){
414
+ elem = document.getElementById('txtTimeRemain');
415
+ }
416
+ }else if (document.all){
417
+ if (document.all['txtTimeRemain']){
418
+ elem = document.all['txtTimeRemain'];
419
+ }
420
+ }else if (document.layers){
421
+ if (document.layers['txtTimeRemain']){
422
+ elem = document.layers['txtTimeRemain'];
423
+ }
424
+ }
425
+ if (elem){
426
+ iMSecsDelay = Number(elem.value) * 60 * 1000;
427
+ oDate = new Date();
428
+ oEndTime = new Date(oDate.setTime(oDate.getTime() + iMSecsDelay));
429
+ iMSecsEnd = oEndTime.getTime();
430
+ oNoTime = new Date(oDate.setHours(00,00,00));
431
+ oRemain = new Date(oNoTime.setTime(oNoTime.getTime() + iMSecsDelay));
432
+ sMin = " " + String(oRemain.getMinutes());
433
+ iSec = oRemain.getSeconds();
434
+ sSec = String(iSec);
435
+ iSec = oRemain.getSeconds();
436
+ if (iSec < 10){
437
+ sSec = "0" + String(iSec);
438
+ }
439
+ elem.value = sMin + ":" + sSec;
440
+
441
+ if (iMSecsEnd > 1000){
442
+ timer = setInterval("displayTimeRemain(iMSecsEnd)",1000);
443
+ }else{
444
+ elem.value = "It's time!";
445
+ }
446
+ }
447
+ return;
448
+ }
449
+ /******************************************************************************
450
+ * checkDelayFormInput
451
+ * This function is triggered by the onClick event of the Submit button.
452
+ ******************************************************************************/
453
+ function checkDelayFormInput()
454
+ {
455
+ var oDate,iTimeNow;
456
+
457
+ if (document.getElementById){
458
+ if (document.getElementById('txtTimeRemain')){
459
+ elem = document.getElementById('txtTimeRemain');
460
+ }
461
+ }else if (document.all){
462
+ if (document.all['txtTimeRemain']){
463
+ elem = document.all['txtTimeRemain'];
464
+ }
465
+ }else if (document.layers){
466
+ if (document.layers['txtTimeRemain']){
467
+ elem = document.layers['txtTimeRemain'];
468
+ }
469
+ }
470
+ if (elem){
471
+ if (isNaN(elem.value.substring(0,1))){
472
+ return(true);
473
+ }
474
+ }
475
+ return (false);
476
+ }
477
+
478
+ /******************************************************************************
479
+ * editFormInput
480
+ * This function is triggered by the onClick event of the Submit button.
481
+ * It will edit the form input for basic valid values and display a
482
+ * warning if the student is attempting to drop all of their classes.
483
+ ******************************************************************************/
484
+ function editFormInput()
485
+ {
486
+ var i, sMsg, sInput;
487
+ var f = document.regform;
488
+ var iMaxDrops = parseInt(f.maxdrops.value);
489
+ var iMaxAdds = parseInt(f.maxadds.value);
490
+ var sDropAll = "Y";
491
+ var sDropAny = "N";
492
+
493
+ sMsg = "";
494
+
495
+ for (i=1; i<=iMaxDrops + iMaxAdds; i++) {
496
+ if ( f["action"+i].value == "D" ) {
497
+ // if checked, dropping something
498
+ if (f["action"+i].checked) {
499
+ sDropAny = "Y";
500
+ }
501
+ // if not checked, not dropping all
502
+ else {
503
+ sDropAll = "N";
504
+ }
505
+ // drop edits: entry code
506
+ sInput = f["entcode"+i].value;
507
+ if ( sInput!="" && (isNaN(sInput) || (!isNaN(sInput) && parseInt(sInput)<10000) ) ) {
508
+ sMsg += "\"" + sInput + "\"" + " is not a valid drop code. "
509
+ + "Please enter the correct 5-digit code.";
510
+ alert(sMsg);
511
+ f["entcode"+i].focus();
512
+ return (false);
513
+ }
514
+ // drop edits: checkbox
515
+ if ( sInput!="" && !f["action"+i].checked ) {
516
+ sMsg += "Please check the drop box if you wish to drop SLN "
517
+ + f["sln"+i].value + ".";
518
+ f["action"+i].focus();
519
+ alert(sMsg);
520
+ return (false);
521
+ }
522
+ }
523
+ else {
524
+ // if an sln is being added or changed, not dropping all
525
+ if (!isNaN(parseInt(f["sln"+i].value))) {
526
+ sDropAll = "N";
527
+ }
528
+ sInput = f["sln"+i].value;
529
+ if ( sInput!="" && (isNaN(sInput) || (!isNaN(sInput) && parseInt(sInput)<1000) ) ) {
530
+ sMsg += "\"" + sInput + "\"" + " is not a valid SLN. "
531
+ + "Please enter the correct Schedule Line Number.";
532
+ f["sln"+i].focus();
533
+ alert(sMsg);
534
+ return (false);
535
+ }
536
+ sInput = f["entcode"+i].value;
537
+ if ( sInput!="" && (isNaN(sInput) || (!isNaN(sInput) && parseInt(sInput)<10000) ) ) {
538
+ sMsg += "\"" + sInput + "\"" + " is not a valid add code or faculty number. "
539
+ + "Please enter the correct 5-digit code.";
540
+ f["entcode"+i].focus();
541
+ alert(sMsg);
542
+ return (false);
543
+ }
544
+ }
545
+ }
546
+
547
+ if ( sDropAll == "Y" && sDropAny == "Y" ) {
548
+ if (iMaxAdds > 0) {
549
+ sMsg = "WARNING: You have requested to drop all of your courses. You will "
550
+ + "be considered withdrawn for the quarter unless you subsequently add "
551
+ + "courses.\n\n"
552
+ + "If this is your intention, click \"OK\". Otherwise click \"Cancel\".";
553
+ }
554
+ else {
555
+ sMsg = "WARNING: You have requested to drop all of your courses and withdraw "
556
+ + "for the quarter. It is past the deadline to add courses.\n\nIf you are "
557
+ + "withdrawing, click \"OK\". Otherwise click \"Cancel\".";
558
+ }
559
+ return (confirm(sMsg));
560
+ }
561
+
562
+ return (true);
563
+ }
564
+
565
+ /******************************************************************************
566
+ * editMMNotice
567
+ * This function is triggered by the onClick event of the MMNotice submit button.
568
+ ******************************************************************************/
569
+ function editMMForm() {
570
+
571
+ var f = document.mmform;
572
+ var sMsg = "You must check the box to acknowledge you have\n"
573
+ + "read the meningococcal meningitis notice before\n"
574
+ + "you may continue with registration. ";
575
+ if (!f["chkMMNotice"].checked){
576
+ alert(sMsg);
577
+ return (false);
578
+ }
579
+
580
+ return (true);
581
+ }
582
+ /******************************************************************************
583
+ * editRIAANotice
584
+ * This function is triggered by the onClick event of the RIAANotice submit button.
585
+ ******************************************************************************/
586
+ function editRIAAForm() {
587
+
588
+ var f = document.riaaform;
589
+ var sMsg = "You must check the box to acknowledge you have read\n"
590
+ + "the File-Sharing and Copyright Infringement Notice\n"
591
+ + " before you may continue with registration. ";
592
+ if (!f["chkRIAANotice"].checked){
593
+ alert(sMsg);
594
+ return (false);
595
+ }
596
+
597
+ return (true);
598
+ }
599
+ /******************************************************************************
600
+ * editCleryNotice
601
+ * This function is triggered by the onClick event of the Clery Notice submit button.
602
+ ******************************************************************************/
603
+ function editCleryForm() {
604
+
605
+ var oElem;
606
+ var sMsg = "You must check the box to acknowledge you have\n"
607
+ + " viewed the Your Safety Your Health notice before\n"
608
+ + " you may continue with registration. ";
609
+
610
+ oElem = document.getElementById('chkCleryNotice');
611
+ if (oElem){
612
+ if (!oElem.checked){
613
+ alert(sMsg);
614
+ return (false);
615
+ }
616
+ }
617
+
618
+ return (true);
619
+ }
620
+
621
+ /******************************************************************************
622
+ * snsWarning
623
+ ******************************************************************************/
624
+ function snsWarning(iSub,iType) {
625
+ var f = document.regform;
626
+ var sMsg = "REMINDER: Undergraduates may only use courses graded with the \n"
627
+ + "S/NS (Satisfactory/Not-Satisfactory) option to meet General Electives.\n"
628
+ + "Graduate students should see their adviser before selecting "
629
+ + "S/NS grading. \n\n"
630
+ + "S/NS is not the same as CREDIT/NO CREDIT. Click on the grading option\n"
631
+ + "link for an explanation of the grade system.\n\n"
632
+ + "One $20 change fee is assessed for any number of change transactions made\n"
633
+ + "during a given day including changes to or from S/NS grading option.\n\n"
634
+ + "Are you sure you want to take this course with the S/NS grading option?\n\n"
635
+ + "NOTE: Your request to change to S/NS grading will not be processed until\n"
636
+ + "you click the \"Update Schedule\" button at the bottom of the page and\n"
637
+ + "you receive the \"Schedule updated\" confirmation message.";
638
+
639
+ if (iType == 1) {
640
+ if ( f["gr_sys"+iSub].checked ) {
641
+ if ( !confirm(sMsg) ){
642
+ f["gr_sys"+iSub].checked = false;
643
+ }
644
+ }
645
+ }
646
+
647
+ if (iType == 2) {
648
+ if ( f["gr_sys_sns"+iSub].checked ) {
649
+ if ( !confirm(sMsg) ){
650
+ f["gr_sys_sns"+iSub].checked = false;
651
+ f["gr_sys_dec"+iSub].checked = true;
652
+ }
653
+ }
654
+ }
655
+ }
656
+ function openWin(sWindowURL,sWindowName,iWidth,iHeight)
657
+ {
658
+ if (iWidth > screen.width) {
659
+ iWidth = screen.width * .99;
660
+ }
661
+ if (iHeight > screen.height) {
662
+ iHeight = screen.height * .99;
663
+ }
664
+
665
+ popupWindow = open
666
+ ( sWindowURL,
667
+ sWindowName,
668
+ "resizable=no"
669
+ + ",scrollbars=yes"
670
+ + ",toolbar=no"
671
+ + ",location=no"
672
+ + ",directories=no"
673
+ + ",status=no"
674
+ + ",menubar=no"
675
+ + ",width=" + iWidth
676
+ + ",height=" + iHeight
677
+ //+ ",top="+((screen.height-screen.height))
678
+ //+ ",left="+((screen.width-screen.width))
679
+ );
680
+ }
681
+
682
+
683
+ //-->
684
+ </script>
685
+ <noscript>
686
+ <div id="__Div" class="waitClass">
687
+ <p><br>&nbsp;<br>
688
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
689
+ <tr><td align="center" valign="middle">
690
+ <table width="100%" border="3" bordercolor="#e90000" cellpadding="20">
691
+ <tr>
692
+ <td align="center" bgcolor="#ffffff">
693
+ <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>
694
+ </h3>
695
+ </td>
696
+ </tr>
697
+ </table>
698
+ </td></tr></table></p>
699
+ </div>
700
+ </noscript>