--- loncom/homework/grades.pm	2009/12/27 01:49:32	1.587
+++ loncom/homework/grades.pm	2010/04/01 00:58:43	1.604
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.587 2009/12/27 01:49:32 raeburn Exp $
+# $Id: grades.pm,v 1.604 2010/04/01 00:58:43 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -96,6 +96,9 @@ sub ssi_print_error {
 
 #
 # --- Retrieve the parts from the metadata file.---
+# Returns an array of everything that the resources stores away
+#
+
 sub getpartlist {
     my ($symb,$errorref) = @_;
 
@@ -121,13 +124,17 @@ sub getpartlist {
 }
 
 # --- Get the symbolic name of a problem and the url
+# Generate an error message if symb could not be found unless silent flag is set
+# Takes $env{'form.symb'} by default; if not present, takes $env{'form.url'} and tries to get symb from that
+#
+ 
 sub get_symb {
     my ($request,$silent) = @_;
     (my $url=$env{'form.url'}) =~ s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;
     my $symb=($env{'form.symb'} ne '' ? $env{'form.symb'} : (&Apache::lonnet::symbread($url)));
     if ($symb eq '') { 
 	if (!$silent) {
-	    $request->print("Unable to handle ambiguous references:$url:.");
+	    $request->print(&mt("Unable to handle ambiguous references: [_1].",$url));
 	    return ();
 	}
     }
@@ -160,6 +167,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'));
@@ -203,55 +214,6 @@ sub get_display_part {
     return $display;
 }
 
-#--- Show resource title
-#--- and parts and response type
-sub showResourceInfo {
-    my ($symb,$probTitle,$checkboxes,$res_error) = @_;
-    my $result = '<h3>'.&mt('Current Resource').': '.$probTitle.'</h3>'."\n";
-    my ($partlist,$handgrade,$responseType) = &response_type($symb,$res_error);
-    if (ref($res_error)) {
-        if ($$res_error) {
-            return;
-        }
-    }
-    $result.=&Apache::loncommon::start_data_table()
-            .&Apache::loncommon::start_data_table_header_row();
-    if ($checkboxes) {
-        $result.='<th>&nbsp;</th>';
-    }
-    $result.='<th>'.&mt('Problem Part').'</th>'
-            .'<th>'.&mt('Res. ID').'</th>'
-            .'<th>'.&mt('Type').'</th>'
-            .&Apache::loncommon::end_data_table_header_row();
-    my %resptype = ();
-    my $hdgrade='no';
-    my %partsseen;
-    foreach my $partID (sort(keys(%$responseType))) {
-        foreach my $resID (sort(keys(%{ $responseType->{$partID} }))) {
-            my $handgrade=$$handgrade{$partID.'_'.$resID};
-            my $responsetype = $responseType->{$partID}->{$resID};
-            $hdgrade = $handgrade if ($handgrade eq 'yes');
-            $result.=&Apache::loncommon::start_data_table_row();
-            if ($checkboxes) {
-                if (exists($partsseen{$partID})) {
-                    $result.="<td>&nbsp;</td>";
-                } else {
-                    $result.="<td><input type='checkbox' name='vPart' value='$partID' checked='checked' /></td>";
-                }
-                $partsseen{$partID}=1;
-            }
-            my $display_part=&get_display_part($partID,$symb);
-            $result.='<td>'.$display_part.'</td>'
-                    .'<td>'.'<span class="LC_internal_info">'.$resID.'</span></td>'
-                    .'<td>'.&mt($responsetype).'</td>'
-#                   .'<td>'.&mt('<b>Handgrade: </b>[_1]',$handgrade).'</td>'
-                    .&Apache::loncommon::end_data_table_row();
-        }
-    }
-    $result.=&Apache::loncommon::end_data_table();
-    return $result,$responseType,$hdgrade,$partlist,$handgrade;
-}
-
 sub reset_caches {
     &reset_analyze_cache();
     &reset_perm();
@@ -421,7 +383,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 +445,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 +473,6 @@ sub commonJSfunctions {
 	    return selectOne.value;
 	}
     }
-</script>
 COMMONJSFUNCTIONS
 }
 
@@ -667,13 +627,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".
@@ -730,7 +690,7 @@ sub most_similar {
 
 # ignore empty submissions (occuring when only files are sent)
 
-    unless ($uessay=~/\w+/) { return ''; }
+    unless ($uessay=~/\w+/s) { return ''; }
 
 # these will be returned. Do not care if not at least 50 percent similar
     my $limit=0.6;
@@ -767,6 +727,19 @@ sub most_similar {
 
 #------------------------------------ Receipt Verification Routines
 #
+
+sub initialverifyreceipt {
+   my $request = shift;
+   &commonJSfunctions($request);
+   my ($symb)   = &get_symb($request);
+   return '<form name="gradingMenu"><input type="submit" value="'.&mt('Verify Receipt No.').'" />'.
+        &Apache::lonnet::recprefix($env{'request.course.id'}).
+        '-<input type="text" name="receipt" size="4" />'.
+        '<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
+        '<input type="hidden" name="command" value="verify" />'.
+        "</form>\n";
+}
+
 #--- Check whether a receipt number is valid.---
 sub verifyreceipt {
     my $request  = shift;
@@ -876,14 +849,15 @@ sub listStudents {
 	.&mt("$viewgrade Submissions for a Student or a Group of Students")
 	.'</span></h3>';
 
-    my ($table,undef,$hdgrade,$partlist,$handgrade) = &showResourceInfo($symb,$env{'form.probTitle'},($env{'form.showgrading'} eq 'yes'));
+    my ($partlist,$handgrade,$responseType) = &response_type($symb
+#,$res_error
+    );
 
     my %lt = &Apache::lonlocal::texthash (
 		'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 +886,6 @@ sub listStudents {
 	formname.command.value = 'submission';
 	formname.submit();
     }
-</script>
 LISTJAVASCRIPT
 
     &commonJSfunctions($request);
@@ -921,7 +894,7 @@ LISTJAVASCRIPT
     my $checkhdgrade = ($env{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1 ) ? 'checked="checked"' : '';
     my $checklastsub = $checkhdgrade eq '' ? 'checked="checked"' : '';
     my $gradeTable='<form action="/adm/grades" method="post" name="gradesub">'.
-	"\n".$table;
+	"\n";
 	
     $gradeTable .= &Apache::lonhtmlcommon::start_pick_box();
     $gradeTable .= &Apache::lonhtmlcommon::row_title(&mt('View Problem Text'))
@@ -944,10 +917,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 +974,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 +1092,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 +1121,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 +1152,7 @@ sub check_script {
         }
     }
 
-</script>'."\n";
+'."\n");
     return $chkallscript;
 }
 
@@ -1210,8 +1191,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 +1359,6 @@ sub sub_page_js {
 
 	formname.submit();
     }
-</script>
 SUBJAVASCRIPT
 }
 
@@ -1389,8 +1368,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 +1405,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 +1418,6 @@ INNERJS
       }
       self.close()
     }
-</script>
 INNERJS
 
     my $start_page_msg_central = 
@@ -1466,8 +1441,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 +1591,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 +1665,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 +1730,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 +1741,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>';
@@ -1785,7 +1758,6 @@ sub gradeBox {
     $line.='<option value="reset status">'.&mt('reset status').'</option></select>'."\n";
 
 
-	#&mt('<td><b>Part:</b></td><td>[_1]</td><td><b>Points:</b></td><td>[_2]</td><td>or</td><td>[_3]</td>',$display_part,$radio,$line);
     $result .= 
 	    '<td>'.$display_part.'</td><td>'.$radio.'</td><td>'.&mt('or').'</td><td>'.$line.'</td>';
     $result.=&Apache::loncommon::end_data_table_row();
@@ -1869,26 +1841,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 +2035,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 +2051,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 +2099,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 +2120,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 +2132,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 +2164,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 +2172,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 +2184,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,31 +2210,39 @@ 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') {
-	my (undef,$responseType,undef,$parts) = &showResourceInfo($symb);
+#	my (undef,$responseType,undef,$parts) = &showResourceInfo($symb);
+    my ($parts,$handgrade,$responseType) = &response_type($symb);
+
 	$request->print(&displaySubByDates($symb,\%record,$parts,$responseType,$checkIcon,$uname,$udom));
     } elsif ($env{'form.lastSub'} =~ /^(last|all)$/) {
 	$request->print(&Apache::loncommon::get_previous_attempt($symb,$uname,$udom,
@@ -2256,7 +2256,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 +2301,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 +2320,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 +2336,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 +2353,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 +2427,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 +2439,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) {
@@ -2622,7 +2638,7 @@ sub processHandGrade {
 
 # Go directly to grade student - from submission or link from chart page
     if ($button eq 'Grade Student') {
-	(undef,undef,$env{'form.handgrade'},undef,undef) = &showResourceInfo($symb);
+#	(undef,undef,$env{'form.handgrade'},undef,undef) = &showResourceInfo($symb);
 	my $processUser = $env{'form.unamedom'.$env{'form.studentNo'}};
 	($env{'form.student'},$env{'form.userdom'}) = split(/:/,$processUser);
 	$env{'form.fullname'} = $$fullname{$processUser};
@@ -3116,8 +3132,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 +3293,6 @@ sub viewgrades_js {
 	}
     }
 
-</script>
 VIEWJAVASCRIPT
 }
 
@@ -3356,11 +3370,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 +3395,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 +3459,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 +3511,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 +3520,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 +3558,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');
@@ -3853,7 +3868,8 @@ sub csvuploadmap_header {
 	$javascript=&csvupload_javascript_forward_associate();
     }
 
-    my ($result) = &showResourceInfo($symb,$env{'form.probTitle'});
+#    my ($result) = &showResourceInfo($symb,$env{'form.probTitle'});
+    my $result='';
     my $checked=(($env{'form.noFirstLine'})?' checked="checked"':'');
     my $ignore=&mt('Ignore First Line');
     $symb = &Apache::lonenc::check_encrypt($symb);
@@ -3866,7 +3882,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 +3896,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 +3935,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 +3950,6 @@ sub checkforfile_js {
 	}
 	formname.submit();
     }
-    </script>
 CSVFORMJS
     return $result;
 }
@@ -3948,8 +3960,8 @@ sub upcsvScores_form {
     if (!$symb) {return '';}
     my $result=&checkforfile_js();
     $env{'form.probTitle'} = &Apache::lonnet::gettitle($symb);
-    my ($table) = &showResourceInfo($symb,$env{'form.probTitle'});
-    $result.=$table;
+#    my ($table) = &showResourceInfo($symb,$env{'form.probTitle'});
+#    $result.=$table;
     $result.='<br /><table width="100%" border="0"><tr><td bgcolor="#777777">'."\n";
     $result.='<table width="100%" border="0"><tr bgcolor="#e6ffff"><td>'."\n";
     $result.='&nbsp;<b>'.&mt('Specify a file containing the class scores for current resource.').
@@ -3966,7 +3978,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 +4223,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 +4236,6 @@ function checkPickOne(formname) {
     formname.submit();
 }
 
-</script>
 LISTJAVASCRIPT
     &commonJSfunctions($request);
     my ($symb) = &get_symb($request);
@@ -4289,7 +4299,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 +4338,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 +4445,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 +4533,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 +4583,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 +4605,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 +5273,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 +5289,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 +6968,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 +6976,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 +7047,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 +7070,6 @@ function verify_bubble_radio(form) {
     }
     form.submit(); 
 }
-</script>
 ENDSCRIPT
     return $output;
 }
@@ -7457,6 +7472,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);
@@ -7912,8 +7928,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.'");
@@ -7940,8 +7955,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">
@@ -7962,7 +7977,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 '';
@@ -8462,36 +8477,29 @@ sub show_grading_menu_form {
     return $result;
 }
 
-# -- Retrieve choices for grading form
-sub savedState {
-    my %savedState = ();
-    if ($env{'form.saveState'}) {
-	foreach (split(/:/,$env{'form.saveState'})) {
-	    my ($key,$value) = split(/=/,$_,2);
-	    $savedState{$key} = $value;
-	}
-    }
-    return \%savedState;
-}
-
 sub grading_menu {
     my ($request) = @_;
     my ($symb)=&get_symb($request);
     if (!$symb) {return '';}
     my $probTitle = &Apache::lonnet::gettitle($symb);
-    my ($table,undef,$hdgrade) = &showResourceInfo($symb,$probTitle);
 
-    $request->print($table);
     my %fields = ('symb'=>&Apache::lonenc::check_encrypt($symb),
-                  'handgrade'=>$hdgrade,
                   'probTitle'=>$probTitle,
-                  'command'=>'submit_options',
-                  'saveState'=>"",
+                  'command'=>'individual',
                   'gradingMenu'=>1,
                   'showgrading'=>"yes");
     
-    my $url1 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    
+    my $url1a = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
+
+    $fields{'command'}='ungraded';
+    my $url1b=&Apache::lonhtmlcommon::build_url('grades/',\%fields);
+
+    $fields{'command'}='table';
+    my $url1c=&Apache::lonhtmlcommon::build_url('grades/',\%fields);
+
+    $fields{'command'}='all_for_one';
+    my $url1d=&Apache::lonhtmlcommon::build_url('grades/',\%fields);
+
     $fields{'command'} = 'csvform';
     my $url2 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
     
@@ -8500,15 +8508,40 @@ sub grading_menu {
     
     $fields{'command'} = 'scantron_selectphase';
     my $url4 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
+
+    $fields{'command'} = 'initialverifyreceipt';
+    my $url5 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
     
-    my @menu = ({	categorytitle=>'Course Grading',
+    my @menu = ({	categorytitle=>'Hand Grading',
             items =>[
-                        {	linktext => 'Manual Grading/View Submissions',
-                    		url => $url1,
+                        {	linktext => 'Select individual students to grade',
+                    		url => $url1a,
                     		permission => 'F',
                     		icon => 'edit-find-replace.png',
-                    		linktitle => 'Start the process of hand grading submissions.'
+                    		linktitle => 'Grade current resource for a selection of students.'
+                        }, 
+                        {       linktext => 'Grade ungraded submissions.',
+                                url => $url1b,
+                                permission => 'F',
+                                icon => 'edit-find-replace.png',
+                                linktitle => 'Grade all submissions that have not been graded yet.'
+                        },
+
+                        {       linktext => 'Grading table',
+                                url => $url1c,
+                                permission => 'F',
+                                icon => 'edit-find-replace.png',
+                                linktitle => 'Grade current resource for all students.'
                         },
+                        {       linktext => 'Grade complete page/sequence/folder for one student',
+                                url => $url1d,
+                                permission => 'F',
+                                icon => 'edit-find-replace.png',
+                                linktitle => 'Grade all resources in current page/sequence/folder for one student.'
+                        }]},
+                         { categorytitle=>'Automated Grading',
+               items =>[
+
                 	    {	linktext => 'Upload Scores',
                     		url => $url2,
                     		permission => 'F',
@@ -8526,75 +8559,91 @@ sub grading_menu {
                     		permission => 'F',
                     		icon => 'stat.png',
                     		linktitle => 'Grade scantron exams, upload/download scantron data files, and review previously graded scantron exams.'
-                	    }
+                	    },
+                            {   linktext => 'Verify Receipt No.',
+                                url => $url5,
+                                permission => 'F',
+                                icon => 'edit-find-replace.png',
+                                linktitle => 'Verify a system-generated receipt number for correct problem solution.'
+                            }
+
                     ]
             });
 
-    #$fields{'command'} = 'verify';
-    #$url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    #
     # Create the menu
     my $Str;
-    # $Str .= '<h2>'.&mt('Please select a grading task').'</h2>';
     $Str .= '<form method="post" action="" name="gradingMenu">';
     $Str .= '<input type="hidden" name="command" value="" />'.
     	'<input type="hidden" name="symb"        value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
-	'<input type="hidden" name="handgrade"   value="'.$hdgrade.'" />'."\n".
 	'<input type="hidden" name="probTitle"   value="'.$probTitle.'" />'."\n".
-	'<input type="hidden" name="saveState"   value="" />'."\n".
 	'<input type="hidden" name="gradingMenu" value="1" />'."\n".
 	'<input type="hidden" name="showgrading" value="yes" />'."\n";
 
-    $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\')" '.
-        ' /> '.
-        &Apache::lonnet::recprefix($env{'request.course.id'}).
-        '-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')" />';
+    $Str .= &Apache::lonhtmlcommon::generate_menu(@menu);
+    return $Str;    
+}
 
-    $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">
-    function checkChoice(formname,val,cmdx) {
-	if (val <= 2) {
-	    var cmd = radioSelection(formname.radioChoice);
-	    var cmdsave = cmd;
-	} else {
-	    cmd = cmdx;
-	    cmdsave = 'submission';
-	}
-	formname.command.value = cmd;
-	if (val < 5) formname.submit();
-	if (val == 5) {
-	    if (!checkReceiptNo(formname,'notOK')) { 
-	        return false;
-	    } else {
-	        formname.submit();
-	    }
-	}
-    }
 
-    function checkReceiptNo(formname,nospace) {
-	var receiptNo = formname.receipt.value;
-	var checkOpt = false;
-	if (nospace == "OK" && isNaN(receiptNo)) {checkOpt = true;}
-	if (nospace == "notOK" && (isNaN(receiptNo) || receiptNo == "")) {checkOpt = true;}
-	if (checkOpt) {
-	    alert("$receiptalert");
-	    formname.receipt.value = "";
-	    formname.receipt.focus();
-	    return false;
-	}
-	return true;
-    }
-</script>
-GRADINGMENUJS
+sub ungraded {
+    my ($request)=@_;
+    &submit_options($request);
+}
+
+sub submit_options_sequence {
+    my ($request) = @_;
+    my ($symb)=&get_symb($request);
+    if (!$symb) {return '';}
     &commonJSfunctions($request);
-    return $Str;    
+    my $result;
+
+    $result.='<form action="/adm/grades" method="post" name="gradingMenu">'."\n".
+        '<input type="hidden" name="symb"        value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
+        '<input type="hidden" name="gradingMenu" value="1" />'."\n".
+        '<input type="hidden" name="showgrading" value="yes" />'."\n";
+
+    $result.='
+<h2>
+  '.&mt('Grade complete page/sequence/folder for one student').'
+</h2>'.
+            &selectfield(0).
+            '<input type="hidden" name="command" value="pickStudentPage" />
+            <div>
+              <input type="submit" value="'.&mt('Next').' &rarr;" />
+            </div>
+        </div>
+  </form>';
+    $result .= &show_grading_menu_form($symb);
+    return $result;
 }
 
+sub submit_options_table {
+    my ($request) = @_;
+    my ($symb)=&get_symb($request);
+    if (!$symb) {return '';}
+    &commonJSfunctions($request);
+    my $result;
+
+    $result.='<form action="/adm/grades" method="post" name="gradingMenu">'."\n".
+        '<input type="hidden" name="symb"        value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
+        '<input type="hidden" name="gradingMenu" value="1" />'."\n".
+        '<input type="hidden" name="showgrading" value="yes" />'."\n";
+
+    $result.='
+<h2>
+  '.&mt('Grading table').'
+</h2>'.
+            &selectfield(0).
+            '<input type="hidden" name="command" value="viewgrades" />
+            <div>
+              <input type="submit" value="'.&mt('Next').' &rarr;" />
+            </div>
+        </div>
+  </form>';
+    $result .= &show_grading_menu_form($symb);
+    return $result;
+}
+
+
 
 #--- Displays the submissions first page -------
 sub submit_options {
@@ -8603,89 +8652,39 @@ sub submit_options {
     if (!$symb) {return '';}
     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">
-    function checkChoice(formname,val,cmdx) {
-	if (val <= 2) {
-	    var cmd = radioSelection(formname.radioChoice);
-	    var cmdsave = cmd;
-	} else {
-	    cmd = cmdx;
-	    cmdsave = 'submission';
-	}
-	formname.command.value = cmd;
-	formname.saveState.value = "saveCmd="+cmdsave+":saveSec="+pullDownSelection(formname.section)+
-	    ":saveSub="+pullDownSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.Status);
-	if (val < 5) formname.submit();
-	if (val == 5) {
-	    if (!checkReceiptNo(formname,'notOK')) { return false;}
-	    formname.submit();
-	}
-	if (val < 7) formname.submit();
-    }
-
-    function checkReceiptNo(formname,nospace) {
-	var receiptNo = formname.receipt.value;
-	var checkOpt = false;
-	if (nospace == "OK" && isNaN(receiptNo)) {checkOpt = true;}
-	if (nospace == "notOK" && (isNaN(receiptNo) || receiptNo == "")) {checkOpt = true;}
-	if (checkOpt) {
-	    alert("$receiptalert");
-	    formname.receipt.value = "";
-	    formname.receipt.focus();
-	    return false;
-	}
-	return true;
-    }
-</script>
-GRADINGMENUJS
     &commonJSfunctions($request);
-    my ($table,undef,$hdgrade) = &showResourceInfo($symb,$probTitle);
     my $result;
-    my (undef,$sections) = &getclasslist('all','0');
-    my $savedState = &savedState();
-    my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'submission' : $$savedState{'saveCmd'});
-    my $saveSec = ($$savedState{'saveSec'} eq '' ? 'all' : $$savedState{'saveSec'});
-    my $saveSub = ($$savedState{'saveSub'} eq '' ? 'all' : $$savedState{'saveSub'});
-    my $saveStatus = ($$savedState{'saveStatus'} eq '' ? 'Active' : $$savedState{'saveStatus'});
-
-    # Preselect sections
-    my $selsec="";
-    if (ref($sections)) {
-        foreach my $section (sort(@$sections)) {
-            $selsec.='<option value="'.$section.'" '.
-                ($saveSec eq $section ? 'selected="selected"':'').'>'.$section.'</option>'."\n";
-        }
-    }
 
     $result.='<form action="/adm/grades" method="post" name="gradingMenu">'."\n".
 	'<input type="hidden" name="symb"        value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
-	'<input type="hidden" name="handgrade"   value="'.$hdgrade.'" />'."\n".
 	'<input type="hidden" name="probTitle"   value="'.$probTitle.'" />'."\n".
-	'<input type="hidden" name="command"     value="" />'."\n".
-	'<input type="hidden" name="saveState"   value="" />'."\n".
 	'<input type="hidden" name="gradingMenu" value="1" />'."\n".
 	'<input type="hidden" name="showgrading" value="yes" />'."\n";
 
     $result.='
 <h2>
-  '.&mt('Grade Current Resource').'
-</h2>
-<div>
-  '.$table.'
-</div>
+  '.&mt('Select individual students to grade').'
+</h2>'.&selectfield(1).'
+                <input type="hidden" name="command" value="submission" /> 
+	      <input type="submit" value="'.&mt('Next').' &rarr;" />
+            </div>
+          </div>
 
-<div class="LC_columnSection">
+
+  </form>';
+    $result .= &show_grading_menu_form($symb);
+    return $result;
+}
+
+sub selectfield {
+   my ($full)=@_;
+   my $result='<div class="LC_columnSection">
   
     <fieldset>
       <legend>
        '.&mt('Sections').'
       </legend>
-      <select name="section" multiple="multiple" size="5">'."\n";
-    $result.= $selsec;
-    $result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="selected"' : ''). '>all</option></select> &nbsp; ';
-    $result.='
+      '.&Apache::lonstatistics::SectionSelect('section','multiple',5).'
     </fieldset>
   
     <fieldset>
@@ -8699,63 +8698,25 @@ GRADINGMENUJS
       <legend>
         '.&mt('Access Status').'
       </legend>
-      '.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,5,undef,'mult').'
-    </fieldset>
-  
+      '.&Apache::lonhtmlcommon::StatusOptions(undef,undef,5,undef,'mult').'
+    </fieldset>';
+    if ($full) {
+       $result.='
     <fieldset>
       <legend>
         '.&mt('Submission Status').'
-      </legend>
-      <select name="submitonly" size="5">
-	         <option value="yes" '.      ($saveSub eq 'yes'       ? 'selected="selected"' : '').'>'.&mt('with submissions').'</option>
-	         <option value="queued" '.   ($saveSub eq 'queued'    ? 'selected="selected"' : '').'>'.&mt('in grading queue').'</option>
-	         <option value="graded" '.   ($saveSub eq 'graded'    ? 'selected="selected"' : '').'>'.&mt('with ungraded submissions').'</option>
-	         <option value="incorrect" '.($saveSub eq 'incorrect' ? 'selected="selected"' : '').'>'.&mt('with incorrect submissions').'</option>
-                 <option value="all" '.      ($saveSub eq 'all'       ? 'selected="selected"' : '').'>'.&mt('with any status').'</option>
-      </select>
-    </fieldset>
-  
-</div>
-
-<br />
-          <div>
-            <div>
-              <label>
-                <input type="radio" name="radioChoice" value="submission" '.
-                  ($saveCmd eq 'submission' ? 'checked="checked"' : '').' /> '.
-             &mt('Select individual students to grade and view submissions.').'
-	      </label> 
-            </div>
-            <div>
-	      <label>
-                <input type="radio" name="radioChoice" value="viewgrades" '.
-                  ($saveCmd eq 'viewgrades' ? 'checked="checked"' : '').' /> '.
-                    &mt('Grade all selected students in a grading table.').'
-              </label>
-            </div>
-            <div>
-	      <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next').' &rarr;" />
-            </div>
-          </div>
-
-
-        <h2>
-         '.&mt('Grade Complete Folder for One Student').'
-        </h2>
-        <div>
-            <div>
-              <label>
-                <input type="radio" name="radioChoice" value="pickStudentPage" '.
-	  ($saveCmd eq 'pickStudentPage' ? 'checked="checked"' : '').' /> '.
-  &mt('The <b>complete</b> page/sequence/folder: For one student').'
-              </label>
-            </div>
-            <div>
-	      <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next').' &rarr;" />
-            </div>
-        </div>
-  </form>';
-    $result .= &show_grading_menu_form($symb);
+      </legend>'.
+       &Apache::loncommon::select_form('all','submitonly',
+          (&Apache::lonlocal::texthash(
+             'yes'       => 'with submissions',
+             'queued'    => 'in grading queue',
+             'graded'    => 'with ungraded submissions',
+             'incorrect' => 'with incorrect submissions',
+             'all'       => 'with any status'),
+             'select_form_order' => ['yes','queued','graded','incorrect','all'])).
+   '</fieldset>';
+    }
+    $result.='</div><br />';
     return $result;
 }
 
@@ -8848,13 +8809,11 @@ sub process_clicker {
     if (!$symb) {return '';}
     my $result=&checkforfile_js();
     $env{'form.probTitle'} = &Apache::lonnet::gettitle($symb);
-    my ($table) = &showResourceInfo($symb,$env{'form.probTitle'});
-    $result.=$table;
     $result.='<br /><table width="100%" border="0"><tr><td bgcolor="#777777">'."\n";
     $result.='<table width="100%" border="0"><tr bgcolor="#e6ffff"><td>'."\n";
     $result.='&nbsp;<b>'.&mt('Specify a file containing the clicker information for this resource.').
         '</b></td></tr>'."\n";
-    $result.='<tr bgcolor=#ffffe6><td>'."\n";
+    $result.='<tr bgcolor="#ffffe6"><td>'."\n";
 # Attempt to restore parameters from last session, set defaults if not present
     my %Saveable_Parameters=&clicker_grading_parameters();
     &Apache::loncommon::restore_course_settings('grades_clicker',
@@ -8884,8 +8843,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);
@@ -8923,7 +8881,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" />
@@ -8931,18 +8890,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";
@@ -8958,8 +8917,8 @@ sub process_clicker_file {
     my %Saveable_Parameters=&clicker_grading_parameters();
     &Apache::loncommon::store_course_settings('grades_clicker',
                                               \%Saveable_Parameters);
-
-    my ($result) = &showResourceInfo($symb,$env{'form.probTitle'});
+    my $result='';
+#    my ($result) = &showResourceInfo($symb,$env{'form.probTitle'});
     if (($env{'form.gradingmechanism'} eq 'specific') && ($env{'form.specificid'}!~/\w/)) {
 	$result.='<span class="LC_error">'.&mt('You need to specify a clicker ID for the correct answer').'</span>';
 	return $result.&show_grading_menu_form($symb);
@@ -9198,7 +9157,8 @@ sub assign_clicker_grades {
 # FIXME: This should probably look for the first handgradeable part
     my $part=$$partlist[0];
 # Start screen output
-    my ($result) = &showResourceInfo($symb,$env{'form.probTitle'});
+    my $result='';
+#    my ($result) = &showResourceInfo($symb,$env{'form.probTitle'});
 
     my $heading=&mt('Assigning grades based on clicker file');
     $result.=(<<ENDHEADER);
@@ -9301,7 +9261,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>';
 }
 
@@ -9329,31 +9289,10 @@ sub handler {
     $request->print(&Apache::loncommon::start_page('Grading',undef,
                                           {'bread_crumbs' => $brcrum}));
     if ($symb eq '' && $command eq '') {
-	if ($env{'user.adv'}) {
-	    if (($env{'form.codeone'}) && ($env{'form.codetwo'}) &&
-		($env{'form.codethree'})) {
-		my $token=$env{'form.codeone'}.'*'.$env{'form.codetwo'}.'*'.
-		    $env{'form.codethree'};
-		my ($tsymb,$tuname,$tudom,$tcrsid)=
-		    &Apache::lonnet::checkin($token);
-		if ($tsymb) {
-		    my ($map,$id,$url)=&Apache::lonnet::decode_symb($tsymb);
-		    if (&Apache::lonnet::allowed('mgr',$tcrsid)) {
-			$request->print(&ssi_with_retries('/res/'.$url, $ssi_retries,
-					  ('grade_username' => $tuname,
-					   'grade_domain' => $tudom,
-					   'grade_courseid' => $tcrsid,
-					   'grade_symb' => $tsymb)));
-		    } else {
-			$request->print('<h3>Not authorized: '.$token.'</h3>');
-		    }
-		} else {
-		    $request->print('<h3>Not a valid DocID: '.$token.'</h3>');
-		}
-	    } else {
-		$request->print(&Apache::lonxml::tokeninputfield());
-	    }
-	}
+#
+# Not called from a resource
+#    
+
     } else {
 	&init_perm();
 	if ($command eq 'submission' && $perm{'vgr'}) {
@@ -9368,14 +9307,22 @@ sub handler {
 	    &processGroup($request);
 	} elsif ($command eq 'gradingmenu' && $perm{'vgr'}) {
 	    $request->print(&grading_menu($request));
-	} elsif ($command eq 'submit_options' && $perm{'vgr'}) {
+	} elsif ($command eq 'individual' && $perm{'vgr'}) {
 	    $request->print(&submit_options($request));
+        } elsif ($command eq 'ungraded' && $perm{'vgr'}) {
+            $request->print(&submit_options($request));
+        } elsif ($command eq 'table' && $perm{'vgr'}) {
+            $request->print(&submit_options_table($request));
+        } elsif ($command eq 'all_for_one' && $perm{'vgr'}) {
+            $request->print(&submit_options_sequence($request));
 	} elsif ($command eq 'viewgrades' && $perm{'vgr'}) {
 	    $request->print(&viewgrades($request));
 	} elsif ($command eq 'handgrade' && $perm{'mgr'}) {
 	    $request->print(&processHandGrade($request));
 	} elsif ($command eq 'editgrades' && $perm{'mgr'}) {
 	    $request->print(&editgrades($request));
+        } elsif ($command eq 'initialverifyreceipt' && $perm{'vgr'}) {
+            $request->print(&initialverifyreceipt($request));
 	} elsif ($command eq 'verify' && $perm{'vgr'}) {
 	    $request->print(&verifyreceipt($request));
         } elsif ($command eq 'processclicker' && $perm{'mgr'}) {