--- loncom/homework/grades.pm	2009/12/16 16:09:24	1.585
+++ loncom/homework/grades.pm	2010/03/11 16:29:42	1.597
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.585 2009/12/16 16:09:24 bisitz Exp $
+# $Id: grades.pm,v 1.597 2010/03/11 16:29:42 wenzelju Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -160,6 +160,10 @@ sub response_type {
         return;
     }
     my $res = $navmap->getBySymb($symb);
+    unless (ref($res)) {
+        $$response_error = 1;
+        return;
+    }
     my $partlist = $res->parts();
     my %vPart = 
 	map { $_ => 1 } (&Apache::loncommon::get_env_multiple('form.vPart'));
@@ -421,7 +425,7 @@ sub cleanRecord {
 	return '<blockquote><table border="1">'.
 	    '<tr valign="top"><td>'.&mt('Answer').'</td>'.$toprow.'</tr>'.
 	    '<tr valign="top"><td>'.$grayFont.&mt('Option ID').'</span></td>'.
-	    $grayFont.$bottomrow.'</tr>'.'</table></blockquote>';
+	    $bottomrow.'</tr>'.'</table></blockquote>';
     } elsif ($response eq 'essay') {
 	if (! exists ($env{'form.'.$symb})) {
 	    my (%keyhash) = &Apache::lonnet::dump('nohist_handgrade',
@@ -483,8 +487,7 @@ sub cleanRecord {
 #-- A couple of common js functions
 sub commonJSfunctions {
     my $request = shift;
-    $request->print(<<COMMONJSFUNCTIONS);
-<script type="text/javascript" language="javascript">
+    $request->print(&Apache::lonhtmlcommon::scripttag(<<COMMONJSFUNCTIONS));
     function radioSelection(radioButton) {
 	var selection=null;
 	if (radioButton.length > 1) {
@@ -512,7 +515,6 @@ sub commonJSfunctions {
 	    return selectOne.value;
 	}
     }
-</script>
 COMMONJSFUNCTIONS
 }
 
@@ -667,13 +669,13 @@ sub student_gradeStatus {
 sub jscriptNform {
     my ($symb) = @_;
     my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status'));
-    my $jscript='<script type="text/javascript" language="javascript">'."\n".
+    my $jscript= &Apache::lonhtmlcommon::scripttag(
 	'    function viewOneStudent(user,domain) {'."\n".
 	'	document.onestudent.student.value = user;'."\n".
 	'	document.onestudent.userdom.value = domain;'."\n".
 	'	document.onestudent.submit();'."\n".
 	'    }'."\n".
-	'</script>'."\n";
+	"\n");
     $jscript.= '<form action="/adm/grades" method="post" name="onestudent">'."\n".
 	'<input type="hidden" name="symb"    value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
 	'<input type="hidden" name="saveState" value="'.$env{'form.saveState'}.'" />'."\n".
@@ -882,8 +884,7 @@ sub listStudents {
 		'multiple' => 'Please select a student or group of students before clicking on the Next button.',
 		'single'   => 'Please select the student before clicking on the Next button.',
 	     );
-    $request->print(<<LISTJAVASCRIPT);
-<script type="text/javascript" language="javascript">
+    $request->print(&Apache::lonhtmlcommon::scripttag(<<LISTJAVASCRIPT));
     function checkSelect(checkBox) {
 	var ctr=0;
 	var sense="";
@@ -912,7 +913,6 @@ sub listStudents {
 	formname.command.value = 'submission';
 	formname.submit();
     }
-</script>
 LISTJAVASCRIPT
 
     &commonJSfunctions($request);
@@ -944,10 +944,18 @@ LISTJAVASCRIPT
     my $saveStatus = $stu_status eq '' ? 'Active' : $stu_status;
     $env{'form.Status'} = $saveStatus;
     $submission_options.=
-	'<label><input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> '.&mt('last submission only').' </label>'."\n".
-	'<label><input type="radio" name="lastSub" value="last" /> '.&mt('last submission &amp; parts info').' </label>'."\n".
-	'<label><input type="radio" name="lastSub" value="datesub" /> '.&mt('by dates and submissions').' </label>'."\n".
-	'<label><input type="radio" name="lastSub" value="all" /> '.&mt('all details').'</label>';
+        '<span class="LC_nobreak">'.
+        '<label><input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> '.
+        &mt('last submission only').' </label></span>'."\n".
+        '<span class="LC_nobreak">'.
+        '<label><input type="radio" name="lastSub" value="last" /> '.
+        &mt('last submission &amp; parts info').' </label></span>'."\n".
+        '<span class="LC_nobreak">'.
+        '<label><input type="radio" name="lastSub" value="datesub" /> '.
+        &mt('by dates and submissions').'</label></span>'."\n".
+        '<span class="LC_nobreak">'.
+        '<label><input type="radio" name="lastSub" value="all" /> '.
+        &mt('all details').'</label></span>';
     $gradeTable .= &Apache::lonhtmlcommon::row_title(&mt('Submissions'))
                   .$submission_options
                   .&Apache::lonhtmlcommon::row_closure();
@@ -993,8 +1001,8 @@ LISTJAVASCRIPT
 # checkall buttons
     $gradeTable.=&check_script('gradesub', 'stuinfo');
     $gradeTable.='<input type="button" '."\n".
-	'onClick="javascript:checkSelect(this.form.stuinfo);" '."\n".
-	'value="'.&mt('Next').' &rarr;" /> <br />'."\n";
+        'onclick="javascript:checkSelect(this.form.stuinfo);" '."\n".
+        'value="'.&mt('Next').' &rarr;" /> <br />'."\n";
     $gradeTable.=&check_buttons();
     my ($classlist, undef, $fullname) = &getclasslist($getsec,'1',$getgroup);
     $gradeTable.= &Apache::loncommon::start_data_table().
@@ -1111,9 +1119,9 @@ LISTJAVASCRIPT
     }
 
     $gradeTable.=&Apache::loncommon::end_data_table()."\n".
-	'<input type="button" '.
-	'onClick="javascript:checkSelect(this.form.stuinfo);" '.
-	'value="'.&mt('Next').' &rarr;" /></form>'."\n";
+        '<input type="button" '.
+        'onclick="javascript:checkSelect(this.form.stuinfo);" '.
+        'value="'.&mt('Next').' &rarr;" /></form>'."\n";
     if ($ctr == 0) {
 	my $num_students=(scalar(keys(%$fullname)));
 	if ($num_students eq 0) {
@@ -1140,7 +1148,7 @@ LISTJAVASCRIPT
 
 sub check_script {
     my ($form, $type)=@_;
-    my $chkallscript='<script type="text/javascript">
+    my $chkallscript= &Apache::lonhtmlcommon::scripttag('
     function checkall() {
         for (i=0; i<document.forms.'.$form.'.elements.length; i++) {
             ele = document.forms.'.$form.'.elements[i];
@@ -1171,7 +1179,7 @@ sub check_script {
         }
     }
 
-</script>'."\n";
+'."\n");
     return $chkallscript;
 }
 
@@ -1210,8 +1218,7 @@ sub processGroup {
 sub sub_page_js {
     my $request = shift;
 	    my $alertmsg = &mt('A number equal or greater than 0 is expected. Entered value = ');
-    $request->print(<<SUBJAVASCRIPT);
-<script type="text/javascript" language="javascript">
+    $request->print(&Apache::lonhtmlcommon::scripttag(<<SUBJAVASCRIPT));
     function updateRadio(formname,id,weight) {
 	var gradeBox = formname["GD_BOX"+id];
 	var radioButton = formname["RADVAL"+id];
@@ -1379,7 +1386,6 @@ sub sub_page_js {
 
 	formname.submit();
     }
-</script>
 SUBJAVASCRIPT
 }
 
@@ -1389,8 +1395,7 @@ sub sub_page_kw_js {
     my $iconpath = $request->dir_config('lonIconsURL');
     &commonJSfunctions($request);
 
-    my $inner_js_msg_central=<<INNERJS;
-    <script text="text/javascript">
+    my $inner_js_msg_central= &Apache::lonhtmlcommon::scripttag(<<INNERJS);
     function checkInput() {
       opener.document.SCORE.msgsub.value = opener.checkEntities(document.msgcenter.msgsub.value);
       var nmsg   = opener.document.SCORE.savemsgN.value;
@@ -1427,11 +1432,9 @@ sub sub_page_kw_js {
       self.close()
 
     }
-    </script>
 INNERJS
 
-    my $inner_js_highlight_central=<<INNERJS;
- <script type="text/javascript">
+    my $inner_js_highlight_central= &Apache::lonhtmlcommon::scripttag(<<INNERJS);
     function updateChoice(flag) {
       opener.document.SCORE.kwclr.value = opener.radioSelection(document.hlCenter.kwdclr);
       opener.document.SCORE.kwsize.value = opener.radioSelection(document.hlCenter.kwdsize);
@@ -1442,7 +1445,6 @@ INNERJS
       }
       self.close()
     }
-</script>
 INNERJS
 
     my $start_page_msg_central = 
@@ -1466,8 +1468,7 @@ INNERJS
     my $docopen=&Apache::lonhtmlcommon::javascript_docopen();
     $docopen=~s/^document\.//;
     my $alertmsg = &mt('Please select a word or group of words from document and then click this link.');
-    $request->print(<<SUBJAVASCRIPT);
-<script type="text/javascript" language="javascript">
+    $request->print(&Apache::lonhtmlcommon::scripttag(<<SUBJAVASCRIPT));
 
 //===================== Show list of keywords ====================
   function keywords(formname) {
@@ -1617,8 +1618,8 @@ INNERJS
     pDoc = pWin.document;
     pDoc.write("<\\/table>");
     pDoc.write("<\\/td><\\/tr><\\/table>&nbsp;");
-    pDoc.write("<input type=\\"button\\" value=\\"Save\\" onClick=\\"javascript:checkInput()\\">&nbsp;&nbsp;");
-    pDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br /><br />");
+    pDoc.write("<input type=\\"button\\" value=\\"Save\\" onclick=\\"javascript:checkInput()\\">&nbsp;&nbsp;");
+    pDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onclick=\\"self.close()\\"><br /><br />");
     pDoc.write("<\\/form>");
     pDoc.write('$end_page_msg_central');
     pDoc.close();
@@ -1691,14 +1692,13 @@ INNERJS
     var hDoc = hwdWin.document;
     hDoc.write("<\\/table>");
     hDoc.write("<\\/td><\\/tr><\\/table>&nbsp;");
-    hDoc.write("<input type=\\"button\\" value=\\"Save\\" onClick=\\"javascript:updateChoice(1)\\">&nbsp;&nbsp;");
-    hDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br /><br />");
+    hDoc.write("<input type=\\"button\\" value=\\"Save\\" onclick=\\"javascript:updateChoice(1)\\">&nbsp;&nbsp;");
+    hDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onclick=\\"self.close()\\"><br /><br />");
     hDoc.write("<\\/form>");
     hDoc.write('$end_page_highlight_central');
     hDoc.close();
   }
 
-</script>
 SUBJAVASCRIPT
 }
 
@@ -1757,7 +1757,7 @@ sub gradeBox {
     my $radio.='<table border="0"><tr>'."\n";  # display radio buttons in a nice table 10 across
     while ($thisweight<=$wgt) {
 	$radio.= '<td><span class="LC_nobreak"><label><input type="radio" name="RADVAL'.$counter.'_'.$partid.'" '.
-	    'onclick="javascript:writeBox(this.form,\''.$counter.'_'.$partid.'\','.
+        'onclick="javascript:writeBox(this.form,\''.$counter.'_'.$partid.'\','.
 	    $thisweight.')" value="'.$thisweight.'" '.
 	    ($score eq $thisweight ? 'checked="checked"':'').' /> '.$thisweight."</label></span></td>\n";
 	$radio.=(($ctr+1)%10 == 0 ? '</tr><tr>' : '');
@@ -1768,13 +1768,13 @@ sub gradeBox {
 
     my $line.='<input type="text" name="GD_BOX'.$counter.'_'.$partid.'"'.
 	($score ne ''? ' value = "'.$score.'"':'').' size="4" '.
-	'onChange="javascript:updateRadio(this.form,\''.$counter.'_'.$partid.'\','.
+	'onchange="javascript:updateRadio(this.form,\''.$counter.'_'.$partid.'\','.
 	$wgt.')" /></td>'."\n";
     $line.='<td>/'.$wgt.' '.$wgtmsg.
 	($$record{'resource.'.$partid.'.solved'} eq 'correct_by_student' ? '&nbsp;'.$checkIcon : '').
 	' </td>'."\n";
     $line.='<td><select name="GD_SEL'.$counter.'_'.$partid.'" '.
-	'onChange="javascript:clearRadBox(this.form,\''.$counter.'_'.$partid.'\')" >'."\n";
+	'onchange="javascript:clearRadBox(this.form,\''.$counter.'_'.$partid.'\')" >'."\n";
     if ($$record{'resource.'.$partid.'.solved'} eq 'excused') {
 	$line.='<option></option>'.
 	    '<option value="excused" selected="selected">'.&mt('excused').'</option>';
@@ -1869,26 +1869,23 @@ sub show_problem {
 	$companswer=~s|name="submit"|name="would_have_been_submit"|g;
     }
     $rendered=
-	'<div class="LC_grade_show_problem_header">'.
-	&mt('View of the problem').
-	'</div><div class="LC_grade_show_problem_problem">'.
-	$rendered.
-	'</div>';
+        '<div class="LC_Box">'
+       .'<h3 class="LC_hcell">'.&mt('View of the problem').'</h3>'
+       .$rendered
+       .'</div>';
     $companswer=
-	'<div class="LC_grade_show_problem_header">'.
-	&mt('Correct answer').
-	'</div><div class="LC_grade_show_problem_problem">'.
-	$companswer.
-	'</div>';
+        '<div class="LC_Box">'
+       .'<h3 class="LC_hcell">'.&mt('Correct answer').'</h3>'
+       .$companswer
+       .'</div>';
     my $result;
     if ($mode eq 'both') {
-	$result=$rendered.$companswer;
+        $result=$rendered.$companswer;
     } elsif ($mode eq 'text') {
-	$result=$rendered;
+        $result=$rendered;
     } elsif ($mode eq 'answer') {
-	$result=$companswer;
+        $result=$companswer;
     }
-    $result='<div class="LC_grade_show_problem">'.$result.'</div>';
     return $result;
 }
 
@@ -2066,7 +2063,7 @@ sub submission {
 	    $request->print(<<KEYWORDS);
 &nbsp;<b>Keyword Options:</b>&nbsp;
 <a href="javascript:keywords(document.SCORE);" target="_self">List</a>&nbsp; &nbsp;
-<a href="#" onMouseDown="javascript:getSel(); return false"
+<a href="#" onmousedown="javascript:getSel(); return false"
  CLASS="page">Paste Selection to List</a>&nbsp; &nbsp;
 <a href="javascript:kwhighlight();" target="_self">Highlight Attribute</a><br /><br />
 KEYWORDS
@@ -2082,12 +2079,31 @@ KEYWORDS
     }
 
 # This is where output for one specific student would start
-    my $add_class = ($counter%2) ? 'LC_grade_show_user_odd_row' : '';
-    $request->print("\n\n".
-                    '<div class="LC_grade_show_user '.$add_class.'">'.
-		    '<div class="LC_grade_user_name">'.&nameUserString(undef,$env{'form.fullname'},$uname,$udom).'</div>'.
-		    '<div class="LC_grade_show_user_body">'."\n");
+    my $add_class = ($counter%2) ? ' LC_grade_show_user_odd_row' : '';
+    $request->print(
+        "\n\n"
+       .'<div class="LC_grade_show_user'.$add_class.'">'
+       .'<h2>'.&nameUserString(undef,$env{'form.fullname'},$uname,$udom).'</h2>'
+       ."\n"
+    );
 
+    # Show additional functions if allowed
+    if ($perm{'vgr'}) {
+        $request->print(
+            &Apache::loncommon::track_student_link(
+                &mt('View recent activity'),
+                $uname,$udom,'check')
+           .' '
+        );
+    }
+    if ($perm{'opa'}) {
+        $request->print(
+            &Apache::loncommon::pprmlink(
+                &mt('Set/Change parameters'),
+                $uname,$udom,$symb,'check'));
+    }
+
+    # Show Problem
     if ($env{'form.vProb'} eq 'all' or $env{'form.vAns'} eq 'all') {
 	my $mode;
 	if ($env{'form.vProb'} eq 'all' && $env{'form.vAns'} eq 'all') {
@@ -2111,20 +2127,17 @@ KEYWORDS
 
     # Display student info
     $request->print(($counter == 0 ? '' : '<br />'));
-    my $result='<div class="LC_grade_submissions">';
-    
-    $result.='<div class="LC_grade_submissions_header">';
-    $result.= &mt('Submissions');
+
+    my $result='<div class="LC_Box">'
+              .'<h3 class="LC_hcell">'.&mt('Submissions').'</h3>';
     $result.='<input type="hidden" name="name'.$counter.
-	'" value="'.$env{'form.fullname'}.'" />'."\n";
+             '" value="'.$env{'form.fullname'}.'" />'."\n";
     if ($env{'form.handgrade'} eq 'no') {
-	$result.='<span class="LC_grade_check_note">'.
-	    &mt('Part(s) graded correct by the computer is marked with a [_1] symbol.',$checkIcon)."</span>\n";
-
+        $result.='<p class="LC_info">'
+                .&mt('Part(s) graded correct by the computer is marked with a [_1] symbol.',$checkIcon)
+                ."</p>\n";
     }
 
-
-
     # If any part of the problem is an essay-response (handgraded), then check for collaborators
     my $fullname;
     my $col_fullnames = [];
@@ -2135,9 +2148,9 @@ KEYWORDS
 	$result.=$sub_result;
     }
     $request->print($result."\n");
-    $request->print('</div>'."\n");
+
     # print student answer/submission
-    # Options are (1) Handgaded submission only
+    # Options are (1) Handgraded submission only
     #             (2) Last submission, includes submission that is not handgraded 
     #                  (for multi-response type part)
     #             (3) Last submission plus the parts info
@@ -2147,10 +2160,12 @@ KEYWORDS
 	
 	my $lastsubonly;
 
-	if ($$timestamp eq '') {
-	    $lastsubonly.='<div class="LC_grade_submissions_body">'.$$string[0].'</div>'; 
-	} else {
-	    $lastsubonly = '<div class="LC_grade_submissions_body"> <b>Date Submitted:</b> '.$$timestamp."\n";
+        if ($$timestamp eq '') {
+            $lastsubonly.='<div class="LC_grade_submissions_body">'.$$string[0].'</div>'; 
+        } else {
+            $lastsubonly =
+                '<div class="LC_grade_submissions_body">'
+               .'<b>'.&mt('Date Submitted:').'</b> '.$$timestamp."\n";
 
 	    my %seenparts;
 	    my @part_response_id = &flatten_responseType($responseType);
@@ -2177,7 +2192,7 @@ KEYWORDS
                     $lastsubonly.="\n".'<div class="LC_grade_submission_part">'.
                         '<b>'.&mt('Part: [_1]',$display_part).'</b>'.
                         ' <span class="LC_internal_info">'.
-                        '('.&mt('Part ID: [_1]',$respid).')</b>'.
+                        '('.&mt('Part ID: [_1]',$respid).')'.
                         '</span>&nbsp; &nbsp;'.
 			'<span class="LC_warning">'.&mt('Nothing submitted - no attempts.').'</span><br /><br /></div>';
 		    next;
@@ -2185,7 +2200,7 @@ KEYWORDS
 		foreach my $submission (@$string) {
 		    my ($partid,$respid) = ($submission =~ /^resource\.([^\.]*)\.([^\.]*)\.submission/);
 		    if (join('_',@{$part}) ne ($partid.'_'.$respid)) { next; }
-		    my ($ressub,$subval) = split(/:/,$submission,2);
+		    my ($ressub,$hide,$subval) = split(/:/,$submission,3);
 		    # Similarity check
 		    my $similar='';
 		    if($env{'form.checkPlag'}){
@@ -2197,16 +2212,21 @@ KEYWORDS
 				&Apache::lonnet::coursedescription($ocrsid,
 								   {'one_time' => 1});
 
-			    $similar="<hr /><h3><span class=\"LC_warning\">".
-				&mt('Essay is [_1]% similar to an essay by [_2] in course [_3] (course id [_4]:[_5])',
-				    $osim,
-				    &Apache::loncommon::plainname($oname,$odom).' ('.$oname.':'.$odom.')',
-				    $old_course_desc{'description'},
-				    $old_course_desc{'num'},
-				    $old_course_desc{'domain'}).
-				'</span></h3><blockquote><i>'.
-				&keywords_highlight($oessay).
-				'</i></blockquote><hr />';
+                            if ($hide) {
+                                $similar='<hr /><span class="LC_warning">'.&mt("Essay was found to be similar to another essay submitted for this assignment.").'<br />'.
+                                         &mt('As the current submission is for an anonymous survey, no other details are available.').'</span><hr />';
+                            } else {
+			        $similar="<hr /><h3><span class=\"LC_warning\">".
+				    &mt('Essay is [_1]% similar to an essay by [_2] in course [_3] (course id [_4]:[_5])',
+				        $osim,
+				        &Apache::loncommon::plainname($oname,$odom).' ('.$oname.':'.$odom.')',
+				        $old_course_desc{'description'},
+				        $old_course_desc{'num'},
+				        $old_course_desc{'domain'}).
+				    '</span></h3><blockquote><i>'.
+				    &keywords_highlight($oessay).
+				    '</i></blockquote><hr />';
+                            }
 			}
 		    }
 		    my $order=&get_order($partid,$respid,$symb,$uname,$udom);
@@ -2218,27 +2238,33 @@ KEYWORDS
                             '<b>'.&mt('Part: [_1]',$display_part).'</b>'.
                             ' <span class="LC_internal_info">'.
                             '('.&mt('Part ID: [_1]',$respid).')'.
-                            '</b></span>&nbsp; &nbsp;';
+                            '</span>&nbsp; &nbsp;';
 			my $files=&get_submitted_files($udom,$uname,$partid,$respid,\%record);
 			if (@$files) {
-			    $lastsubonly.='<br /><span class="LC_warning">'.&mt('Like all files provided by users, this file may contain viruses').'</span><br />';
-			    my $file_counter = 0;
-			    foreach my $file (@$files) {
-			        $file_counter++;
-				&Apache::lonnet::allowuploaded('/adm/grades',$file);
-				$lastsubonly.='<br /><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'.&Apache::loncommon::icon($file).'" border="0" /> '.$file.'</a>';
-			    }
+                            if ($hide) {
+                                $lastsubonly.='<br />'.&mt('[quant,_1,file] uploaded to this anonymous survey',scalar(@{$files}));
+                            } else {
+                                $lastsubonly.='<br /><span class="LC_warning">'.&mt('Like all files provided by users, this file may contain viruses').'</span><br />';
+                                foreach my $file (@$files) {
+                                    &Apache::lonnet::allowuploaded('/adm/grades',$file);
+                                    $lastsubonly.='<br /><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'.&Apache::loncommon::icon($file).'" border="0" /> '.$file.'</a>';
+                                }
+                            }
 			    $lastsubonly.='<br />';
 			}
-			$lastsubonly.='<b>'.&mt('Submitted Answer:').' </b>'.
-			    &cleanRecord($subval,$responsetype,$symb,$partid,
-					 $respid,\%record,$order,undef,$uname,$udom);
+                        if ($hide) {
+                            $lastsubonly.='<b>'.&mt('Anonymous Survey').'</b>'; 
+                        } else {
+			    $lastsubonly.='<b>'.&mt('Submitted Answer:').' </b>'.
+			        &cleanRecord($subval,$responsetype,$symb,$partid,
+					     $respid,\%record,$order,undef,$uname,$udom);
+                        }
 			if ($similar) {$lastsubonly.="<br /><br />$similar\n";}
 			$lastsubonly.='</div>';
 		    }
 		}
 	    }
-	    $lastsubonly.='</div>'."\n";
+	    $lastsubonly.='</div>'."\n"; # End: LC_grade_submissions_body
 	}
 	$request->print($lastsubonly);
    } elsif ($env{'form.lastSub'} eq 'datesub') {
@@ -2256,7 +2282,7 @@ KEYWORDS
     # return if view submission with no grading option
     if ($env{'form.showgrading'} eq '' || (!&canmodify($usec))) {
 	my $toGrade.='<input type="button" value="Grade Student" '.
-	    'onClick="javascript:checksubmit(this.form,\'Grade Student\',\''
+	    'onclick="javascript:checksubmit(this.form,\'Grade Student\',\''
 	    .$counter.'\');" target="_self" /> &nbsp;'."\n" if (&canmodify($usec));
 	$toGrade.='</div>'."\n";
 	if (($env{'form.command'} eq 'submission') || 
@@ -2301,11 +2327,10 @@ KEYWORDS
     my @gradePartRespid;
     my @part_response_id = &flatten_responseType($responseType);
     $request->print(
-        '<div class="LC_grade_assign">'
-       .'<div class="LC_grade_assign_header">'
-       .&mt('Assign Grades').'</div>'
+        '<div class="LC_Box">'
+       .'<h3 class="LC_hcell">'.&mt('Assign Grades').'</h3>'
     );
-    $request->print(&gradeBox_start()); # <div class="LC_grade_assign_body">
+    $request->print(&gradeBox_start());
     foreach my $part_response_id (@part_response_id) {
     	my ($partid,$respid) = @{ $part_response_id };
 	my $part_resp = join('_',@{ $part_response_id });
@@ -2321,16 +2346,6 @@ KEYWORDS
     $request->print('</div>');
 
     $request->print('<div class="LC_grade_info_links">');
-    if ($perm{'vgr'}) {
-	$request->print(
-	    &Apache::loncommon::track_student_link(&mt('View recent activity'),
-						   $uname,$udom,'check'));
-    }
-    if ($perm{'opa'}) {
-	$request->print(
-	    &Apache::loncommon::pprmlink(&mt('Set/Change parameters'),
-					 $uname,$udom,$symb,'check'));
-    }
     $request->print('</div>');
 
     $result='<input type="hidden" name="partlist'.$counter.
@@ -2347,15 +2362,14 @@ KEYWORDS
 
 # Done with printing info for one student
 
-    $request->print('</div>');#LC_grade_show_user_body
     $request->print('</div>');#LC_grade_show_user
 
 
     # print end of form
     if ($counter == $total) {
-	my $endform='<table border="0"><tr><td>'."\n";
+        my $endform='<br /><hr /><table border="0"><tr><td>'."\n";
 	$endform.='<input type="button" value="'.&mt('Save &amp; Next').'" '.
-	    'onClick="javascript:checksubmit(this.form,\'Save & Next\','.
+	    'onclick="javascript:checksubmit(this.form,\'Save & Next\','.
 	    $total.','.scalar(@partlist).');" target="_self" /> &nbsp;'."\n";
 	my $ntstu ='<select name="NTSTU">'.
 	    '<option>1</option><option>2</option>'.
@@ -2365,10 +2379,12 @@ KEYWORDS
 	$ntstu =~ s/<option>$nsel</<option selected="selected">$nsel</;
         $endform.=&mt('[_1]student(s)',$ntstu);
 	$endform.='&nbsp;&nbsp;<input type="button" value="'.&mt('Previous').'" '.
-	    'onClick="javascript:checksubmit(this.form,\'Previous\');" target="_self" /> &nbsp;'."\n".
+	    'onclick="javascript:checksubmit(this.form,\'Previous\');" target="_self" /> &nbsp;'."\n".
 	    '<input type="button" value="'.&mt('Next').'" '.
-	    'onClick="javascript:checksubmit(this.form,\'Next\');" target="_self" /> &nbsp;';
-	$endform.=&mt('(Next and Previous (student) do not save the scores.)')."\n" ;
+	    'onclick="javascript:checksubmit(this.form,\'Next\');" target="_self" /> &nbsp;';
+        $endform.='<span class="LC_warning">'.
+                  &mt('(Next and Previous (student) do not save the scores.)').
+                  '</span>'."\n" ;
         $endform.="<input type='hidden' value='".&get_increment().
             "' name='increment' />";
 	$endform.='</td></tr></table></form>';
@@ -2437,7 +2453,7 @@ sub check_collaborators {
 #--- Retrieve the last submission for all the parts
 sub get_last_submission {
     my ($returnhash)=@_;
-    my (@string,$timestamp);
+    my (@string,$timestamp,%lasthidden);
     if ($$returnhash{'version'}) {
 	my %lasthash=();
 	my ($version);
@@ -2449,13 +2465,39 @@ sub get_last_submission {
 		    &Apache::lonlocal::locallocaltime($$returnhash{$version.':timestamp'});
 	    }
 	}
+        my %typeparts;
+        my $showsurv = 
+            &Apache::lonnet::allowed('vas',$env{'request.course.id'});
+        foreach my $key (sort(keys(%lasthash))) {
+            if ($key =~ /\.type$/) {
+                if (($lasthash{$key} eq 'anonsurvey') || 
+                    ($lasthash{$key} eq 'anonsurveycred')) {
+                    my ($ign,@parts) = split(/\./,$key);
+                    pop(@parts);
+                    unless ($showsurv) {
+                        my $id = join(',',@parts);
+                        $typeparts{$ign.'.'.$id} = $lasthash{$key};
+                    }
+                    delete($lasthash{$key});
+                }
+            }
+        }
+        my @hidden = keys(%typeparts);
 	foreach my $key (keys(%lasthash)) {
 	    next if ($key !~ /\.submission$/);
-
+            my $hide;
+            if (@hidden) {
+                foreach my $id (@hidden) {
+                    if ($key =~ /^\Q$id\E/) {
+                        $hide = 1;
+                        last;
+                    }
+                }
+            }
 	    my ($partid,$foo) = split(/submission$/,$key);
 	    my $draft  = $lasthash{$partid.'awarddetail'} eq 'DRAFT' ?
 		'<span class="LC_warning">Draft Copy</span> ' : '';
-	    push(@string, join(':', $key, $draft.$lasthash{$key}));
+	    push(@string, join(':', $key, $hide, $draft.$lasthash{$key}));
 	}
     }
     if (!@string) {
@@ -3116,8 +3158,7 @@ sub viewgrades_js {
     my ($request) = shift;
 
     my $alertmsg = &mt('A number equal or greater than 0 is expected. Entered value = ');
-    $request->print(<<VIEWJAVASCRIPT);
-<script type="text/javascript" language="javascript">
+    $request->print(&Apache::lonhtmlcommon::scripttag(<<VIEWJAVASCRIPT));
    function writePoint(partid,weight,point) {
 	var radioButton = document.classgrade["RADVAL_"+partid];
 	var textbox = document.classgrade["TEXTVAL_"+partid];
@@ -3278,7 +3319,6 @@ sub viewgrades_js {
 	}
     }
 
-</script>
 VIEWJAVASCRIPT
 }
 
@@ -3356,11 +3396,11 @@ sub viewgrades {
 	}
 	$radio.='</tr></table>';
 	my $line = '<input type="text" name="TEXTVAL_'.
-	    $partid.'" size="4" '.'onChange="javascript:writePoint(\''.
+	    $partid.'" size="4" '.'onchange="javascript:writePoint(\''.
 		$partid.'\','.$weight{$partid}.',\'textval\')" /> /'.
 	    $weight{$partid}.' '.&mt('(problem weight)').'</td>'."\n";
 	$line.= '<td><b>'.&mt('Grade Status').':</b><select name="SELVAL_'.$partid.'"'.
-	    'onChange="javascript:writeRadText(\''.$partid.'\','.
+	    'onchange="javascript:writeRadText(\''.$partid.'\','.
 		$weight{$partid}.')"> '.
 	    '<option selected="selected"> </option>'.
 	    '<option value="excused">'.&mt('excused').'</option>'.
@@ -3381,7 +3421,7 @@ sub viewgrades {
     $result.=&Apache::loncommon::end_data_table()."\n".
 	'<input type="hidden" name="totalparts" value="'.$ctsparts.'" />';
     $result.='<input type="button" value="'.&mt('Revert to Default').'" '.
-	'onClick="javascript:resetEntry('.$ctsparts.');" />';
+	'onclick="javascript:resetEntry('.$ctsparts.');" />';
 
     #table listing all the students in a section/class
     #header of table
@@ -3445,7 +3485,7 @@ sub viewgrades {
     $result.=&Apache::loncommon::end_data_table();
     $result.='<input type="hidden" name="total" value="'.$ctr.'" />'."\n";
     $result.='<input type="button" value="'.&mt('Save').'" '.
-	'onClick="javascript:submit();" target="_self" /></form>'."\n";
+	'onclick="javascript:submit();" target="_self" /></form>'."\n";
     if (scalar(%$fullname) eq 0) {
 	my $colspan=3+scalar(@parts);
 	my $section_display = join (", ",&Apache::loncommon::get_env_multiple('form.section'));
@@ -3497,7 +3537,7 @@ sub viewstudentgrade {
 		'GD_'.$student.'_'.$part.'_awarded_s" value="'.$pts.'" />'."\n";
 	    $result.='<input type="text" name="'.
 		'GD_'.$student.'_'.$part.'_awarded" '.
-		'onChange="javascript:changeSelect(\''.$part.'\',\''.$student.
+                'onchange="javascript:changeSelect(\''.$part.'\',\''.$student.
 		'\')" value="'.$pts.'" size="4" /></td>'."\n";
 	} elsif ($type eq 'solved') {
 	    my ($status,$foo)=split(/_/,$score,2);
@@ -3506,7 +3546,7 @@ sub viewstudentgrade {
 		$part.'_solved_s" value="'.$status.'" />'."\n";
 	    $result.='&nbsp;<select name="'.
 		'GD_'.$student.'_'.$part.'_solved" '.
-		'onChange="javascript:changeOneScore(\''.$part.'\',\''.$student.'\')" >'."\n";
+                'onchange="javascript:changeOneScore(\''.$part.'\',\''.$student.'\')" >'."\n";
 	    $result.= (($status eq 'excused') ? '<option> </option><option selected="selected" value="excused">'.&mt('excused').'</option>' 
 		: '<option selected="selected"> </option><option value="excused">'.&mt('excused').'</option>')."\n";
 	    $result.='<option value="reset status">'.&mt('reset status').'</option>';
@@ -3544,6 +3584,7 @@ sub editgrades {
 		    'incorrect'=>'incorrect_by_override',
 		    'excused'  =>'excused',
 		    'ungraded' =>'ungraded_attempted',
+                    'credited' =>'credit_attempted',
 		    'nothing'  => '',
 		    );
     my ($classlist,undef,$fullname) = &getclasslist($env{'form.section'},'0');
@@ -3866,7 +3907,7 @@ $result
 Total number of records found in file: $distotal <hr />
 Enter as many fields as you can. The system will inform you and bring you back
 to this page if the data selected is insufficient to run your class.<hr />
-<input type="button" value="Reverse Association" onClick="javascript:this.form.associate.value='Reverse Association';submit(this.form);" />
+<input type="button" value="Reverse Association" onclick="javascript:this.form.associate.value='Reverse Association';submit(this.form);" />
 <label><input type="checkbox" name="noFirstLine" $checked />$ignore</label>
 <input type="hidden" name="associate"  value="" />
 <input type="hidden" name="phase"      value="three" />
@@ -3880,10 +3921,8 @@ to this page if the data selected is ins
 <input type="hidden" name="probTitle"  value="$env{'form.probTitle'}" />
 <input type="hidden" name="command"    value="csvuploadoptions" />
 <hr />
-<script type="text/javascript" language="Javascript">
-$javascript
-</script>
 ENDPICK
+    $request->print(&Apache::lonhtmlcommon::scripttag($javascript));
     return '';
 
 }
@@ -3921,15 +3960,14 @@ sub csvuploadmap_footer {
 </table>
 <input type="hidden" name="nfields" value="$i" />
 <input type="hidden" name="keyfields" value="$keyfields" />
-<input type="button" onClick="javascript:verify(this.form)" value="Assign Grades" /><br />
+<input type="button" onclick="javascript:verify(this.form)" value="Assign Grades" /><br />
 </form>
 ENDPICK
 }
 
 sub checkforfile_js {
     my $alertmsg = &mt('Please use the browse button to select a file from your local directory.');
-    my $result =<<CSVFORMJS;
-<script type="text/javascript" language="javascript">
+    my $result = &Apache::lonhtmlcommon::scripttag(<<CSVFORMJS);
     function checkUpload(formname) {
 	if (formname.upfile.value == "") {
 	    alert("$alertmsg");
@@ -3937,7 +3975,6 @@ sub checkforfile_js {
 	}
 	formname.submit();
     }
-    </script>
 CSVFORMJS
     return $result;
 }
@@ -3966,7 +4003,7 @@ sub upcsvScores_form {
 <input type="hidden" name="probTitle" value="$env{'form.probTitle'}" />
 <input type="hidden" name="saveState"  value="$env{'form.saveState'}" />
 $upfile_select
-<br /><input type="button" onClick="javascript:checkUpload(this.form);" value="$upload" />
+<br /><input type="button" onclick="javascript:checkUpload(this.form);" value="$upload" />
 <label><input type="checkbox" name="noFirstLine" />$ignore</label>
 </form>
 ENDUPFORM
@@ -4211,8 +4248,7 @@ sub pickStudentPage {
     my ($request) = shift;
 
     my $alertmsg = &mt('Please select the student you wish to grade.');
-    $request->print(<<LISTJAVASCRIPT);
-<script type="text/javascript" language="javascript">
+    $request->print(&Apache::lonhtmlcommon::scripttag(<<LISTJAVASCRIPT));
 
 function checkPickOne(formname) {
     if (radioSelection(formname.student) == null) {
@@ -4225,7 +4261,6 @@ function checkPickOne(formname) {
     formname.submit();
 }
 
-</script>
 LISTJAVASCRIPT
     &commonJSfunctions($request);
     my ($symb) = &get_symb($request);
@@ -4289,7 +4324,7 @@ LISTJAVASCRIPT
     $result.='&nbsp;<b>'.&mt('Use CODE').': </b> <input type="text" name="CODE" value="" /> <br />'."\n";
 
     $result.='&nbsp;<input type="button" '.
-	'onClick="javascript:checkPickOne(this.form);" value="'.&mt('Next').' &rarr;" /><br />'."\n";
+             'onclick="javascript:checkPickOne(this.form);" value="'.&mt('Next').' &rarr;" /><br />'."\n";
 
     $request->print($result);
 
@@ -4328,7 +4363,7 @@ LISTJAVASCRIPT
     }
     $studentTable.=&Apache::loncommon::end_data_table()."\n";
     $studentTable.='<input type="button" '.
-	'onClick="javascript:checkPickOne(this.form);" value="'.&mt('Next').' &rarr;" /></form>'."\n";
+                   'onclick="javascript:checkPickOne(this.form);" value="'.&mt('Next').' &rarr;" /></form>'."\n";
 
     $studentTable.=&show_grading_menu_form($symb);
     $request->print($studentTable);
@@ -4435,7 +4470,9 @@ sub displayPage {
     my $checkIcon = '<img alt="'.&mt('Check Mark').
 	'" src="'.&Apache::loncommon::lonhttpdurl($request->dir_config('lonIconsURL').'/check.gif').'" height="16" border="0" />';
 
-    $studentTable.='&nbsp;'.&mt('<b>Note:</b> Problems graded correct by the computer are marked with a [_1] symbol.',$checkIcon)."\n".
+    $studentTable.='&nbsp;<span class="LC_info">'.
+        &mt('Problems graded correct by the computer are marked with a [_1] symbol.',$checkIcon).
+        '</span>'."\n".
 	&Apache::loncommon::start_data_table().
 	&Apache::loncommon::start_data_table_header_row().
 	'<th align="center">&nbsp;Prob.&nbsp;</th>'.
@@ -4521,10 +4558,11 @@ sub displayPage {
         $curRes = $iterator->next();
     }
 
-    $studentTable.='</table>'."\n".
-	'<input type="button" value="'.&mt('Save').'" '.
-	'onClick="javascript:checkSubmitPage(this.form,'.$question.');" />'.
-	'</form>'."\n";
+    $studentTable.=
+        '</table>'."\n".
+        '<input type="button" value="'.&mt('Save').'" '.
+        'onclick="javascript:checkSubmitPage(this.form,'.$question.');" />'.
+        '</form>'."\n";
     $studentTable.=&show_grading_menu_form($symb);
     $request->print($studentTable);
 
@@ -4570,16 +4608,20 @@ sub displaySubByDates {
 	my @versionKeys = split(/\:/,$$record{$version.':keys'});
 	my @displaySub = ();
 	foreach my $partid (@{$parts}) {
+            my $hidden;
+            if (($$record{$version.':resource.'.$partid.'.type'} eq 'anonsurvey') ||
+                ($$record{$version.':resource.'.$partid.'.type'} eq 'anonsurveycred')) {
+                $hidden = 1;
+            }
 	    my @matchKey = ($isTask ? sort(grep /^resource\.\d+\.\Q$partid\E\.award$/,@versionKeys)
 			            : sort(grep /^resource\.\Q$partid\E\..*?\.submission$/,@versionKeys));
 	    
-
 #	    next if ($$record{"$version:resource.$partid.solved"} eq '');
 	    my $display_part=&get_display_part($partid,$symb);
 	    foreach my $matchKey (@matchKey) {
 		if (exists($$record{$version.':'.$matchKey}) &&
 		    $$record{$version.':'.$matchKey} ne '') {
-
+                    
 		    my ($responseId)= ($isTask ? ($matchKey=~ /^resource\.(.*?)\.\Q$partid\E\.award$/)
 				               : ($matchKey=~ /^resource\.\Q$partid\E\.(.*?)\.submission$/));
                     $displaySub[0].='<span class="LC_nobreak"';
@@ -4588,23 +4630,27 @@ sub displaySubByDates {
                                    .'('.&mt('Part ID: [_1]',$responseId).')'
                                    .'</span>'
                                    .' <b>';
-		    if ($$record{"$where.$partid.tries"} eq '') {
-			$displaySub[0].=&mt('Trial not counted');
-		    } else {
-			$displaySub[0].=&mt('Trial: [_1]',
+                    if ($hidden) {
+                        $displaySub[0].= &mt('Anonymous Survey').'</b>';
+                    } else {
+		        if ($$record{"$where.$partid.tries"} eq '') {
+			    $displaySub[0].=&mt('Trial not counted');
+		        } else {
+			    $displaySub[0].=&mt('Trial: [_1]',
 					    $$record{"$where.$partid.tries"});
-		    }
-		    my $responseType=($isTask ? 'Task'
+		        }
+		        my $responseType=($isTask ? 'Task'
                                               : $responseType->{$partid}->{$responseId});
-		    if (!exists($orders{$partid})) { $orders{$partid}={}; }
-		    if (!exists($orders{$partid}->{$responseId})) {
-			$orders{$partid}->{$responseId}=
-			    &get_order($partid,$responseId,$symb,$uname,$udom,
-                                       $no_increment);
-		    }
-		    $displaySub[0].='</b></span>'; # /nobreak
-		    $displaySub[0].='&nbsp; '.
-			&cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:",$uname,$udom).'<br />';
+		        if (!exists($orders{$partid})) { $orders{$partid}={}; }
+		        if (!exists($orders{$partid}->{$responseId})) {
+			    $orders{$partid}->{$responseId}=
+			        &get_order($partid,$responseId,$symb,$uname,$udom,
+                                           $no_increment);
+		        }
+		        $displaySub[0].='</b></span>'; # /nobreak
+		        $displaySub[0].='&nbsp; '.
+			    &cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:",$uname,$udom).'<br />';
+                    }
 		}
 	    }
 	    if (exists($$record{"$where.$partid.checkedin"})) {
@@ -5252,17 +5298,15 @@ sub scantron_selectphase {
     my $default_form_data=&defaultFormData(&get_symb($r,1));
     my $cdom= $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $cnum= $env{'course.'.$env{'request.course.id'}.'.num'};
-    $r->print('
-              <script type="text/javascript" language="javascript">
+    $r->print(&Apache::lonhtmlcommon::scripttag('
     function checkUpload(formname) {
 	if (formname.upfile.value == "") {
 	    alert("'.&mt('Please use the browse button to select a file from your local directory.').'");
 	    return false;
 	}
 	formname.submit();
-    }
-              </script>
-
+    }'));
+    $r->print('
               <form enctype="multipart/form-data" action="/adm/grades" name="rules" method="post">
                 '.$default_form_data.'
                 <input name="courseid" type="hidden" value="'.$cnum.'" />
@@ -5270,7 +5314,7 @@ sub scantron_selectphase {
                 <input name="command" value="scantronupload_save" type="hidden" />
                 '.&mt('File to upload: [_1]','<input type="file" name="upfile" size="50" />').'
                 <br />
-                <input type="button" onClick="javascript:checkUpload(this.form);" value="'.&mt('Upload Bubblesheet Data').'" />
+                <input type="button" onclick="javascript:checkUpload(this.form);" value="'.&mt('Upload Bubblesheet Data').'" />
               </form>
 ');
 
@@ -6949,8 +6993,7 @@ sub scantron_get_correction {
 	    $r->print("\n<br />");
 	}
 
-	$r->print(<<ENDSCRIPT);
-<script type="text/javascript">
+	$r->print(&Apache::lonhtmlcommon::scripttag(<<ENDSCRIPT));
 function change_radio(field) {
     var slct=document.scantronupload.scantron_CODE_resolution;
     var i;
@@ -6958,7 +7001,6 @@ function change_radio(field) {
         if (slct[i].value==field) { slct[i].checked=true; }
     }
 }
-</script>
 ENDSCRIPT
 	my $href="/adm/pickcode?".
 	   "form=".&escape("scantronupload").
@@ -7030,8 +7072,7 @@ sub verify_bubbles_checked {
     my (@ansnums) = @_;
     my $ansnumstr = join('","',@ansnums);
     my $warning = &mt("A bubble or 'No bubble' selection has not been made for one or more lines.");
-    my $output = (<<ENDSCRIPT);
-<script type="text/javascript">
+    my $output = &Apache::lonhtmlcommon::scripttag((<<ENDSCRIPT));
 function verify_bubble_radio(form) {
     var ansnumArray = new Array ("$ansnumstr");
     var need_bubble_count = 0;
@@ -7054,7 +7095,6 @@ function verify_bubble_radio(form) {
     }
     form.submit(); 
 }
-</script>
 ENDSCRIPT
     return $output;
 }
@@ -7457,6 +7497,7 @@ sub scantron_get_maxbubble {
         if (ref($nav_error)) {
             $$nav_error = 1;
         }
+        return;
     }
     my $map=$navmap->getResourceByUrl($sequence);
     my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0);
@@ -7620,8 +7661,15 @@ sub scantron_process_students {
     my (%grader_partids_by_symb,%grader_randomlists_by_symb);
     &graders_resources_pass(\@resources,\%grader_partids_by_symb,
                             \%grader_randomlists_by_symb);
+    my $resource_error;
     foreach my $resource (@resources) {
-        my $ressymb = $resource->symb();
+        my $ressymb;
+        if (ref($resource)) {
+            $ressymb = $resource->symb();
+        } else {
+            $resource_error = 1;
+            last;
+        }
         my ($analysis,$parts) =
             &scantron_partids_tograde($resource,$env{'request.course.id'},
                                       $env{'user.name'},$env{'user.domain'},1);
@@ -7633,6 +7681,10 @@ sub scantron_process_students {
             }
         }
     }
+    if ($resource_error) {
+        $r->print(&navmap_errormsg());
+        return '';
+    }
 
     my ($uname,$udom);
     my $result= <<SCANTRONFORM;
@@ -7703,9 +7755,15 @@ SCANTRONFORM
  	}
   	($uname,$udom)=split(/:/,$uname);
 
-        my %partids_by_symb;
+        my (%partids_by_symb,$res_error);
         foreach my $resource (@resources) {
-            my $ressymb = $resource->symb();
+            my $ressymb;
+            if (ref($resource)) {
+                $ressymb = $resource->symb();
+            } else {
+                $res_error = 1;
+                last;
+            }
             if ((exists($grader_randomlists_by_symb{$ressymb})) ||
                 (ref($grader_partids_by_symb{$ressymb}) ne 'ARRAY')) {
                 my ($analysis,$parts) =
@@ -7716,6 +7774,12 @@ SCANTRONFORM
             }
         }
 
+        if ($res_error) {
+            &scantron_add_delay(\@delayqueue,$line,
+                                'An error occurred while grading student '.$uname,2);
+            next;
+        }
+
 	&Apache::lonxml::clear_problem_counter();
   	&Apache::lonnet::appenv($scan_record);
 
@@ -7889,8 +7953,7 @@ sub scantron_upload_scantron_data {
     my $default_form_data=&defaultFormData(&get_symb($r,1));
     my $nofile_alert = &mt('Please use the browse button to select a file from your local directory.');
     my $nocourseid_alert = &mt("Please use the 'Select Course' link to open a separate window where you can search for a course to which a file can be uploaded.");
-    $r->print('
-<script type="text/javascript" language="javascript">
+    $r->print(&Apache::lonhtmlcommon::scripttag('
     function checkUpload(formname) {
 	if (formname.upfile.value == "") {
 	    alert("'.$nofile_alert.'");
@@ -7917,8 +7980,8 @@ sub scantron_upload_scantron_data {
         return;
     }
 
-</script>
-
+'));
+    $r->print('
 <h3>'.&mt('Send scanned bubblesheet data to a course').'</h3>
 
 <form enctype="multipart/form-data" action="/adm/grades" name="rules" method="post">
@@ -7939,7 +8002,7 @@ sub scantron_upload_scantron_data {
   &Apache::lonhtmlcommon::end_pick_box().'<br />
 
 <input name="command" value="scantronupload_save" type="hidden" />
-<input type="button" onClick="javascript:checkUpload(this.form);" value="'.&mt('Upload Bubblesheet Data').'" />
+<input type="button" onclick="javascript:checkUpload(this.form);" value="'.&mt('Upload Bubblesheet Data').'" />
 </form>
 ');
     return '';
@@ -8498,7 +8561,7 @@ sub grading_menu {
                     		icon => 'addClickerInfoFile.png',
                     		linktitle => 'Specify a file containing the clicker information for this resource.'
                 	    },
-                	    {	linktext => 'Grade/Manage/Review Bubblesheet Forms',
+                	    {	linktext => 'Grade/Manage/Review Bubblesheets',
                     		url => $url4,
                     		permission => 'F',
                     		icon => 'stat.png',
@@ -8525,15 +8588,14 @@ sub grading_menu {
     $Str .= Apache::lonhtmlcommon::generate_menu(@menu);
     #$menudata->{'jscript'}
     $Str .='<hr /><input type="button" value="'.&mt('Verify Receipt No.').'" '.
-        ' onClick="javascript:checkChoice(document.forms.gradingMenu,\'5\',\'verify\')" '.
+        ' onclick="javascript:checkChoice(document.forms.gradingMenu,\'5\',\'verify\')" '.
         ' /> '.
         &Apache::lonnet::recprefix($env{'request.course.id'}).
-        '-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')" />';
+        '-<input type="text" name="receipt" size="4" onchange="javascript:checkReceiptNo(this.form,\'OK\')" />';
 
     $Str .="</form>\n";
     my $receiptalert = &mt("Please enter a receipt number given by a student in the receipt box.");
-    $request->print(<<GRADINGMENUJS);
-<script type="text/javascript" language="javascript">
+    $request->print(&Apache::lonhtmlcommon::scripttag(<<GRADINGMENUJS));
     function checkChoice(formname,val,cmdx) {
 	if (val <= 2) {
 	    var cmd = radioSelection(formname.radioChoice);
@@ -8566,7 +8628,6 @@ sub grading_menu {
 	}
 	return true;
     }
-</script>
 GRADINGMENUJS
     &commonJSfunctions($request);
     return $Str;    
@@ -8581,8 +8642,7 @@ sub submit_options {
     my $probTitle = &Apache::lonnet::gettitle($symb);
 
     my $receiptalert = &mt("Please enter a receipt number given by a student in the receipt box."); 
-    $request->print(<<GRADINGMENUJS);
-<script type="text/javascript" language="javascript">
+    $request->print(&Apache::lonhtmlcommon::scripttag(<<GRADINGMENUJS));
     function checkChoice(formname,val,cmdx) {
 	if (val <= 2) {
 	    var cmd = radioSelection(formname.radioChoice);
@@ -8615,7 +8675,6 @@ sub submit_options {
 	}
 	return true;
     }
-</script>
 GRADINGMENUJS
     &commonJSfunctions($request);
     my ($table,undef,$hdgrade) = &showResourceInfo($symb,$probTitle);
@@ -8711,7 +8770,7 @@ GRADINGMENUJS
               </label>
             </div>
             <div>
-	      <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next').' &rarr;" />
+	      <input type="button" onclick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next').' &rarr;" />
             </div>
           </div>
 
@@ -8728,7 +8787,7 @@ GRADINGMENUJS
               </label>
             </div>
             <div>
-	      <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next').' &rarr;" />
+	      <input type="button" onclick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next').' &rarr;" />
             </div>
         </div>
   </form>';
@@ -8861,8 +8920,7 @@ sub process_clicker {
 						   ('iclicker' => 'i>clicker',
                                                     'interwrite' => 'interwrite PRS'));
     $symb = &Apache::lonenc::check_encrypt($symb);
-    $result.=<<ENDUPFORM;
-<script type="text/javascript">
+    $result.= &Apache::lonhtmlcommon::scripttag(<<ENDUPFORM);
 function sanitycheck() {
 // Accept only integer percentages
    document.forms.gradesupload.pcorrect.value=Math.round(document.forms.gradesupload.pcorrect.value);
@@ -8900,7 +8958,8 @@ function sanitycheck() {
 // Remember the old state
    document.forms.gradesupload.waschecked.value=newgradingchoice;
 }
-</script>
+ENDUPFORM
+    $result.= <<ENDUPFORM;
 <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload">
 <input type="hidden" name="symb" value="$symb" />
 <input type="hidden" name="command" value="processclickerfile" />
@@ -8908,18 +8967,18 @@ function sanitycheck() {
 <input type="hidden" name="saveState"  value="$env{'form.saveState'}" />
 <input type="file" name="upfile" size="50" />
 <br /><label>$type: $selectform</label>
-<br /><label><input type="radio" name="gradingmechanism" value="attendance"$checked{'attendance'} onClick="sanitycheck()" />$attendance </label>
-<br /><label><input type="radio" name="gradingmechanism" value="personnel"$checked{'personnel'} onClick="sanitycheck()" />$personnel</label>
-<br /><label><input type="radio" name="gradingmechanism" value="specific"$checked{'specific'} onClick="sanitycheck()" />$specific </label>
+<br /><label><input type="radio" name="gradingmechanism" value="attendance"$checked{'attendance'} onclick="sanitycheck()" />$attendance </label>
+<br /><label><input type="radio" name="gradingmechanism" value="personnel"$checked{'personnel'} onclick="sanitycheck()" />$personnel</label>
+<br /><label><input type="radio" name="gradingmechanism" value="specific"$checked{'specific'} onclick="sanitycheck()" />$specific </label>
 <input type="text" name="specificid" value="$env{'form.specificid'}" size="20" />
-<br /><label><input type="radio" name="gradingmechanism" value="given"$checked{'given'} onClick="sanitycheck()" />$given </label>
+<br /><label><input type="radio" name="gradingmechanism" value="given"$checked{'given'} onclick="sanitycheck()" />$given </label>
 <br />&nbsp;&nbsp;&nbsp;
 <input type="text" name="givenanswer" size="50" />
 <input type="hidden" name="waschecked" value="$env{'form.gradingmechanism'}" />
-<br /><label>$pcorrect: <input type="text" name="pcorrect" size="4" value="$env{'form.pcorrect'}" onChange="sanitycheck()" /></label>
-<br /><label>$pincorrect: <input type="text" name="pincorrect" size="4" value="$env{'form.pincorrect'}" onChange="sanitycheck()" /></label>
-<br /><input type="button" onClick="javascript:checkUpload(this.form);" value="$upload" />
-</form>
+<br /><label>$pcorrect: <input type="text" name="pcorrect" size="4" value="$env{'form.pcorrect'}" onchange="sanitycheck()" /></label>
+<br /><label>$pincorrect: <input type="text" name="pincorrect" size="4" value="$env{'form.pincorrect'}" onchange="sanitycheck()" /></label>
+<br /><input type="button" onclick="javascript:checkUpload(this.form);" value="$upload" />
+</form>'
 ENDUPFORM
     $result.='</td></tr></table>'."\n".
              '</td></tr></table><br /><br />'."\n";
@@ -9278,7 +9337,7 @@ ENDHEADER
 sub navmap_errormsg {
     return '<div class="LC_error">'.
            &mt('An error occurred retrieving information about resources in the course.').'<br />'.
-           &mt('It is recommended that you [_1]re-initialize the course[_2] and then return to this grading page..','<a href="/adm/roles?selectrole=1&newrole='.$env{'request.role'}.'">','</a>').
+           &mt('It is recommended that you [_1]re-initialize the course[_2] and then return to this grading page.','<a href="/adm/roles?selectrole=1&newrole='.$env{'request.role'}.'">','</a>').
            '</div>';
 }