--- loncom/homework/grades.pm	2012/08/09 23:25:48	1.596.2.13
+++ loncom/homework/grades.pm	2010/03/15 07:54:04	1.598
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.596.2.13 2012/08/09 23:25:48 raeburn Exp $
+# $Id: grades.pm,v 1.598 2010/03/15 07:54:04 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -40,10 +40,9 @@ use Apache::lonhomework;
 use Apache::lonpickcode;
 use Apache::loncoursedata;
 use Apache::lonmsg();
-use Apache::Constants qw(:common :http);
+use Apache::Constants qw(:common);
 use Apache::lonlocal;
 use Apache::lonenc;
-use Apache::bridgetask();
 use String::Similarity;
 use LONCAPA;
 
@@ -52,7 +51,6 @@ use POSIX qw(floor);
 
 
 my %perm=();
-my %old_essays=();
 
 #  These variables are used to recover from ssi errors
 
@@ -98,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) = @_;
 
@@ -123,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(&mt("Unable to handle ambiguous references: [_1].",$url));
+	    $request->print(&mt("Unable to handle ambiguous references: [_1].",$url));
 	    return ();
 	}
     }
@@ -211,57 +216,56 @@ sub get_display_part {
 
 #--- 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>'
+#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;
-}
+#                    .&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();
-    &reset_old_essays();
 }
 
 {
@@ -274,13 +278,8 @@ sub reset_caches {
     }
 
     sub get_analyze {
-	my ($symb,$uname,$udom,$no_increment,$add_to_hash,$type,$trial,$rndseed)=@_;
+	my ($symb,$uname,$udom,$no_increment,$add_to_hash)=@_;
 	my $key = "$symb\0$uname\0$udom";
-        if ($type eq 'randomizetry') {
-            if ($trial ne '') {
-                $key .= "\0".$trial;
-            }
-        }
 	if (exists($analyze_cache{$key})) {
             my $getupdate = 0;
             if (ref($add_to_hash) eq 'HASH') {
@@ -308,15 +307,9 @@ sub reset_caches {
                     'grade_courseid'    =>  $env{'request.course.id'},
                     'grade_username'    => $uname,
                     'grade_noincrement' => $no_increment);
-        if ($type eq 'randomizetry') {
-            $form{'grade_questiontype'} = $type;
-            if ($rndseed ne '') {
-                $form{'grade_rndseed'} = $rndseed;
-            }
-        }
         if (ref($add_to_hash)) {
             %form = (%form,%{$add_to_hash});
-        }
+        } 
 	my $subresult=&ssi_with_retries($url, $ssi_retries,%form);
 	(undef,$subresult)=split(/_HASH_REF__/,$subresult,2);
 	my %analyze=&Apache::lonnet::str2hash($subresult);
@@ -329,15 +322,15 @@ sub reset_caches {
     }
 
     sub get_order {
-	my ($partid,$respid,$symb,$uname,$udom,$no_increment,$type,$trial,$rndseed)=@_;
-	my $analyze = &get_analyze($symb,$uname,$udom,$no_increment,undef,$type,$trial,$rndseed);
+	my ($partid,$respid,$symb,$uname,$udom,$no_increment)=@_;
+	my $analyze = &get_analyze($symb,$uname,$udom,$no_increment);
 	return $analyze->{"$partid.$respid.shown"};
     }
 
     sub get_radiobutton_correct_foil {
-	my ($partid,$respid,$symb,$uname,$udom,$type,$trial,$rndseed)=@_;
-	my $analyze = &get_analyze($symb,$uname,$udom,undef,undef,$type,$trial,$rndseed);
-        my $foils = &get_order($partid,$respid,$symb,$uname,$udom,undef,$type,$trial,$rndseed);
+	my ($partid,$respid,$symb,$uname,$udom)=@_;
+	my $analyze = &get_analyze($symb,$uname,$udom);
+        my $foils = &get_order($partid,$respid,$symb,$uname,$udom);
         if (ref($foils) eq 'ARRAY') {
 	    foreach my $foil (@{$foils}) {
 	        if ($analyze->{"$partid.$respid.foil.value.$foil"} eq 'true') {
@@ -379,7 +372,7 @@ sub reset_caches {
 #        response types only.
 sub cleanRecord {
     my ($answer,$response,$symb,$partid,$respid,$record,$order,$version,
-	$uname,$udom,$type,$trial,$rndseed) = @_;
+	$uname,$udom) = @_;
     my $grayFont = '<span class="LC_internal_info">';
     if ($response =~ /^(option|rank)$/) {
 	my %answer=&Apache::lonnet::str2hash($answer);
@@ -396,7 +389,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>'.
-	    $bottomrow.'</tr></table></blockquote>';
+	    $grayFont.$bottomrow.'</tr>'.'</table></blockquote>';
     } elsif ($response eq 'match') {
 	my %answer=&Apache::lonnet::str2hash($answer);
 	my %grading=&Apache::lonnet::str2hash($record->{$version."resource.$partid.$respid.submissiongrading"});
@@ -418,12 +411,12 @@ sub cleanRecord {
 	    '<tr valign="top"><td>'.$grayFont.&mt('Item ID').'</span></td>'.
 	    $middlerow.'</tr>'.
 	    '<tr valign="top"><td>'.$grayFont.&mt('Option ID').'</span></td>'.
-	    $bottomrow.'</tr></table></blockquote>';
+	    $bottomrow.'</tr>'.'</table></blockquote>';
     } elsif ($response eq 'radiobutton') {
 	my %answer=&Apache::lonnet::str2hash($answer);
 	my ($toprow,$bottomrow);
 	my $correct = 
-	    &get_radiobutton_correct_foil($partid,$respid,$symb,$uname,$udom,$type,$trial,$rndseed);
+	    &get_radiobutton_correct_foil($partid,$respid,$symb,$uname,$udom);
 	foreach my $foil (@$order) {
 	    if (exists($answer{$foil})) {
 		if ($foil eq $correct) {
@@ -439,7 +432,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>'.
-	    $bottomrow.'</tr></table></blockquote>';
+	    $bottomrow.'</tr>'.'</table></blockquote>';
     } elsif ($response eq 'essay') {
 	if (! exists ($env{'form.'.$symb})) {
 	    my (%keyhash) = &Apache::lonnet::dump('nohist_handgrade',
@@ -501,8 +494,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) {
@@ -530,7 +522,6 @@ sub commonJSfunctions {
 	    return selectOne.value;
 	}
     }
-</script>
 COMMONJSFUNCTIONS
 }
 
@@ -685,13 +676,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".
@@ -740,11 +731,7 @@ sub compute_points {
 #
 
 sub most_similar {
-    my ($uname,$udom,$symb,$uessay)=@_;
-
-    unless ($symb) { return ''; }
-
-    unless (ref($old_essays{$symb}) eq 'HASH') { return ''; }
+    my ($uname,$udom,$uessay,$old_essays)=@_;
 
 # ignore spaces and punctuation
 
@@ -761,11 +748,11 @@ sub most_similar {
     my $scrsid='';
     my $sessay='';
 # go through all essays ...
-    foreach my $tkey (keys(%{$old_essays{$symb}})) {
+    foreach my $tkey (keys(%$old_essays)) {
 	my ($tname,$tdom,$tcrsid)=map {&unescape($_)} (split(/\./,$tkey));
 # ... except the same student
         next if (($tname eq $uname) && ($tdom eq $udom));
-	my $tessay=$old_essays{$symb}{$tkey};
+	my $tessay=$old_essays->{$tkey};
 	$tessay=~s/\W+/ /gs;
 # String similarity gives up if not even limit
 	my $tsimilar=&String::Similarity::similarity($uessay,$tessay,$limit);
@@ -775,7 +762,7 @@ sub most_similar {
 	    $sname=$tname;
 	    $sdom=$tdom;
 	    $scrsid=$tcrsid;
-	    $sessay=$old_essays{$symb}{$tkey};
+	    $sessay=$old_essays->{$tkey};
 	}
     }
     if ($limit>0.6) {
@@ -898,14 +885,16 @@ 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 ($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="";
@@ -934,7 +923,6 @@ sub listStudents {
 	formname.command.value = 'submission';
 	formname.submit();
     }
-</script>
 LISTJAVASCRIPT
 
     &commonJSfunctions($request);
@@ -943,7 +931,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'))
@@ -1170,7 +1158,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];
@@ -1201,7 +1189,7 @@ sub check_script {
         }
     }
 
-</script>'."\n";
+'."\n");
     return $chkallscript;
 }
 
@@ -1240,8 +1228,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];
@@ -1409,7 +1396,6 @@ sub sub_page_js {
 
 	formname.submit();
     }
-</script>
 SUBJAVASCRIPT
 }
 
@@ -1419,8 +1405,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;
@@ -1457,11 +1442,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);
@@ -1472,7 +1455,6 @@ INNERJS
       }
       self.close()
     }
-</script>
 INNERJS
 
     my $start_page_msg_central = 
@@ -1495,29 +1477,12 @@ INNERJS
 
     my $docopen=&Apache::lonhtmlcommon::javascript_docopen();
     $docopen=~s/^document\.//;
-    my %lt = &Apache::lonlocal::texthash(
-                keyw => 'Keywords list, separated by a space. Add/delete to list if desired.',
-                plse => 'Please select a word or group of words from document and then click this link.',
-                adds => 'Add selection to keyword list? Edit if desired.',
-                comp => 'Compose Message for: ',
-                incl => 'Include',
-                type => 'Type',
-                subj => 'Subject',
-                mesa => 'Message',
-                new  => 'New',
-                save => 'Save',
-                canc => 'Cancel',
-                kehi => 'Keyword Highlight Options',
-                txtc => 'Text Color',
-                font => 'Font Size',
-                fnst => 'Font Style',
-             );
-    $request->print(<<SUBJAVASCRIPT);
-<script type="text/javascript" language="javascript">
+    my $alertmsg = &mt('Please select a word or group of words from document and then click this link.');
+    $request->print(&Apache::lonhtmlcommon::scripttag(<<SUBJAVASCRIPT));
 
 //===================== Show list of keywords ====================
   function keywords(formname) {
-    var nret = prompt("$lt{'keyw'}",formname.keywords.value);
+    var nret = prompt("Keywords list, separated by a space. Add/delete to list if desired.",formname.keywords.value);
     if (nret==null) return;
     formname.keywords.value = nret;
 
@@ -1544,10 +1509,10 @@ INNERJS
     else return;
     var cleantxt = txt.replace(new RegExp('([\\f\\n\\r\\t\\v ])+', 'g')," ");
     if (cleantxt=="") {
-	alert("$lt{'plse'}");
+	alert("$alertmsg");
 	return;
     }
-    var nret = prompt("$lt{'adds'}",cleantxt);
+    var nret = prompt("Add selection to keyword list? Edit if desired.",cleantxt);
     if (nret==null) return;
     document.SCORE.keywords.value = document.SCORE.keywords.value+" "+nret;
     if (document.SCORE.keywords.value != "") {
@@ -1621,7 +1586,7 @@ INNERJS
     var ypos = (screen.height-height)/2-30;
     ypos = (ypos < 0) ? '0' : ypos;
 
-    pWin = window.open('', 'MessageCenter', 'resizable=yes,toolbar=no,location=no,scrollbars='+scrollbar+',screenx='+xpos+',screeny='+ypos+',width=700,height='+height);
+    pWin = window.open('', 'MessageCenter', 'resizable=yes,toolbar=no,location=no,scrollbars='+scrollbar+',screenx='+xpos+',screeny='+ypos+',width=600,height='+height);
     pWin.focus();
     pDoc = pWin.document;
     pDoc.$docopen;
@@ -1629,16 +1594,16 @@ INNERJS
 
     pDoc.write("<form action=\\"inactive\\" name=\\"msgcenter\\">");
     pDoc.write("<input value=\\""+usrctr+"\\" name=\\"usrctr\\" type=\\"hidden\\">");
-    pDoc.write("<h3><span class=\\"LC_info\\">&nbsp;$lt{'comp'}\"+fullname+\"<\\/span><\\/h3><br /><br />");
+    pDoc.write("<h3><span class=\\"LC_info\\">&nbsp;Compose Message for \"+fullname+\"<\\/span><\\/h3><br /><br />");
 
     pDoc.write('<table border="0" width="100%"><tr><td bgcolor="#777777">');
     pDoc.write('<table border="0" width="100%"><tr bgcolor="#DDFFFF">');
-    pDoc.write("<td><b>$lt{'type'}<\\/b><\\/td><td><b>$lt{'incl'}<\\/b><\\/td><td><b>$lt{'mesa'}<\\/td><\\/tr>");
+    pDoc.write("<td><b>Type<\\/b><\\/td><td><b>Include<\\/b><\\/td><td><b>Message<\\/td><\\/tr>");
 }
     function displaySubject(msg,shwsel) {
     pDoc = pWin.document;
     pDoc.write("<tr bgcolor=\\"#ffffdd\\">");
-    pDoc.write("<td>$lt{'subj'}<\\/td>");
+    pDoc.write("<td>Subject<\\/td>");
     pDoc.write("<td align=\\"center\\"><input name=\\"subchk\\" type=\\"checkbox\\"" +shwsel+"><\\/td>");
     pDoc.write("<td><input name=\\"msgsub\\" type=\\"text\\" value=\\""+msg+"\\"size=\\"60\\" maxlength=\\"80\\"><\\/td><\\/tr>");
 }
@@ -1654,7 +1619,7 @@ INNERJS
   function newMsg(newmsg,shwsel) {
     pDoc = pWin.document;
     pDoc.write("<tr bgcolor=\\"#ffffdd\\">");
-    pDoc.write("<td align=\\"center\\">$lt{'new'}<\\/td>");
+    pDoc.write("<td align=\\"center\\">New<\\/td>");
     pDoc.write("<td align=\\"center\\"><input name=\\"newmsgchk\\" type=\\"checkbox\\"" +shwsel+"><\\/td>");
     pDoc.write("<td><textarea name=\\"newmsg\\" cols=\\"60\\" rows=\\"3\\" onchange=\\"javascript:this.form.newmsgchk.checked=true\\" >"+newmsg+"<\\/textarea><\\/td><\\/tr>");
 }
@@ -1663,8 +1628,8 @@ INNERJS
     pDoc = pWin.document;
     pDoc.write("<\\/table>");
     pDoc.write("<\\/td><\\/tr><\\/table>&nbsp;");
-    pDoc.write("<input type=\\"button\\" value=\\"$lt{'save'}\\" onclick=\\"javascript:checkInput()\\">&nbsp;&nbsp;");
-    pDoc.write("<input type=\\"button\\" value=\\"$lt{'canc'}\\" 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();
@@ -1714,11 +1679,11 @@ INNERJS
     hDoc.$docopen;
     hDoc.write('$start_page_highlight_central');
     hDoc.write("<form action=\\"inactive\\" name=\\"hlCenter\\">");
-    hDoc.write("<h3><span class=\\"LC_info\\">&nbsp;$lt{'kehi'}<\\/span><\\/h3><br /><br />");
+    hDoc.write("<h3><span class=\\"LC_info\\">&nbsp;Keyword Highlight Options<\\/span><\\/h3><br /><br />");
 
     hDoc.write('<table border="0" width="100%"><tr><td bgcolor="#777777">');
     hDoc.write('<table border="0" width="100%"><tr bgcolor="#DDFFFF">');
-    hDoc.write("<td><b>$lt{'txtc'}<\\/b><\\/td><td><b>$lt{'font'}<\\/b><\\/td><td><b>$lt{'fnst'}<\\/td><\\/tr>");
+    hDoc.write("<td><b>Text Color<\\/b><\\/td><td><b>Font Size<\\/b><\\/td><td><b>Font Style<\\/td><\\/tr>");
   }
 
   function highlightbody(clrval,clrtxt,clrsel,szval,sztxt,szsel,syval,sytxt,sysel) { 
@@ -1737,14 +1702,13 @@ INNERJS
     var hDoc = hwdWin.document;
     hDoc.write("<\\/table>");
     hDoc.write("<\\/td><\\/tr><\\/table>&nbsp;");
-    hDoc.write("<input type=\\"button\\" value=\\"$lt{'save'}\\" onclick=\\"javascript:updateChoice(1)\\">&nbsp;&nbsp;");
-    hDoc.write("<input type=\\"button\\" value=\\"$lt{'canc'}\\" 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
 }
 
@@ -1855,7 +1819,7 @@ sub handback_box {
     my ($symb,$uname,$udom,$counter,$partid,$record,$res_error) = @_;
     my ($partlist,$handgrade,$responseType) = &response_type($symb,$res_error);
     my (@respids);
-    my @part_response_id = &flatten_responseType($responseType);
+     my @part_response_id = &flatten_responseType($responseType);
     foreach my $part_response_id (@part_response_id) {
     	my ($part,$resp) = @{ $part_response_id };
         if ($part eq $partid) {
@@ -1867,10 +1831,9 @@ sub handback_box {
 	my $prefix = $counter.'_'.$partid.'_'.$respid.'_';
 	my $files=&get_submitted_files($udom,$uname,$partid,$respid,$record);
 	next if (!@$files);
-	my $file_counter = 0;
+	my $file_counter = 1;
 	foreach my $file (@$files) {
 	    if ($file =~ /\/portfolio\//) {
-                $file_counter++;
     	        my ($file_path, $file_disp) = ($file =~ m|(.+/)(.+)$|);
     	        my ($name,$version,$ext) = &file_name_version_ext($file_disp);
     	        $file_disp = "$name.$ext";
@@ -1878,14 +1841,11 @@ sub handback_box {
     	        $result.=&mt('Return commented version of [_1] to student.',
     			 '<span class="LC_filename">'.$file_disp.'</span>');
     	        $result.='<input type="file"   name="'.$prefix.'returndoc'.$file_counter.'" />'."\n";
-    	        $result.='<input type="hidden" name="'.$prefix.'origdoc'.$file_counter.'" value="'.$file.'" /><br />'."\n";
+    	        $result.='<input type="hidden" name="'.$prefix.'origdoc'.$file_counter.'" value="'.$file.'" /><br />';
+    	        $result.='('.&mt('File will be uploaded when you click on Save &amp; Next below.').')<br />';
+    	        $file_counter++;
 	    }
 	}
-        if ($file_counter) {
-            $result .= '<input type="hidden" name="'.$prefix.'countreturndoc" value="'.$file_counter.'" />'."\n".
-                       '<span class="LC_info">'.
-                       '('.&mt('File(s) will be uploaded when you click on Save &amp; Next below.',$file_counter).')</span><br /><br />';
-        }
     }
     return $result;    
 }
@@ -2015,6 +1975,7 @@ sub submission {
 	'" src="'.$request->dir_config('lonIconsURL').
 	'/check.gif" height="16" border="0" />';
 
+    my %old_essays;
     # header info
     if ($counter == 0) {
 	&sub_page_js($request);
@@ -2106,22 +2067,15 @@ sub submission {
 	$request->print($prnmsg);
 
 	if ($env{'form.handgrade'} eq 'yes' && $env{'form.showgrading'} eq 'yes') {
-
-            my %lt = &Apache::lonlocal::texthash(
-                          keyw => 'Keyword Options',
-                          list => 'List',
-                          past => 'Paste Selection to List',
-                          high => 'Highlight Attribute',
-                     );
 #
 # Print out the keyword options line
 #
 	    $request->print(<<KEYWORDS);
-&nbsp;<b>$lt{'keyw'}:</b>&nbsp;
-<a href="javascript:keywords(document.SCORE);" target="_self">$lt{'list'}</a>&nbsp; &nbsp;
+&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"
- CLASS="page">$lt{'past'}</a>&nbsp; &nbsp;
-<a href="javascript:kwhighlight();" target="_self">$lt{'high'}</a><br /><br />
+ CLASS="page">Paste Selection to List</a>&nbsp; &nbsp;
+<a href="javascript:kwhighlight();" target="_self">Highlight Attribute</a><br /><br />
 KEYWORDS
 #
 # Load the other essays for similarity check
@@ -2130,7 +2084,7 @@ KEYWORDS
 	    my ($adom,$aname,$apath)=($essayurl=~/^($LONCAPA::domain_re)\/($LONCAPA::username_re)\/(.*)$/);
 	    $apath=&escape($apath);
 	    $apath=~s/\W/\_/gs;
-	    &init_old_essays($symb,$apath,$adom,$aname);
+	    %old_essays=&Apache::lonnet::dump('nohist_essay_'.$apath,$adom,$aname);
         }
     }
 
@@ -2248,7 +2202,7 @@ KEYWORDS
                     $lastsubonly.="\n".'<div class="LC_grade_submission_part">'.
                         '<b>'.&mt('Part: [_1]',$display_part).'</b>'.
                         ' <span class="LC_internal_info">'.
-                        '('.&mt('Response ID: [_1]',$respid).')'.
+                        '('.&mt('Part ID: [_1]',$respid).')'.
                         '</span>&nbsp; &nbsp;'.
 			'<span class="LC_warning">'.&mt('Nothing submitted - no attempts.').'</span><br /><br /></div>';
 		    next;
@@ -2259,22 +2213,16 @@ KEYWORDS
 		    my ($ressub,$hide,$subval) = split(/:/,$submission,3);
 		    # Similarity check
 		    my $similar='';
-                    my ($type,$trial,$rndseed);
-                    if ($hide eq 'rand') {
-                        $type = 'randomizetry';
-                        $trial = $record{"resource.$partid.tries"};
-                        $rndseed = $record{"resource.$partid.rndseed"};
-                    }
 		    if($env{'form.checkPlag'}){
 			my ($oname,$odom,$ocrsid,$oessay,$osim)=
-			    &most_similar($uname,$udom,$symb,$subval);
+			    &most_similar($uname,$udom,$subval,\%old_essays);
 			if ($osim) {
 			    $osim=int($osim*100.0);
 			    my %old_course_desc = 
 				&Apache::lonnet::coursedescription($ocrsid,
 								   {'one_time' => 1});
 
-                            if ($hide eq 'anon') {
+                            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 {
@@ -2291,8 +2239,7 @@ KEYWORDS
                             }
 			}
 		    }
-		    my $order=&get_order($partid,$respid,$symb,$uname,$udom,
-                                         undef,$type,$trial,$rndseed);
+		    my $order=&get_order($partid,$respid,$symb,$uname,$udom);
 		    if ($env{'form.lastSub'} eq 'lastonly' || 
 			($env{'form.lastSub'} eq 'hdgrade' && 
 			 $$handgrade{$$part[0].'_'.$$part[1]} eq 'yes')) {
@@ -2300,11 +2247,11 @@ KEYWORDS
                         $lastsubonly.='<div class="LC_grade_submission_part">'.
                             '<b>'.&mt('Part: [_1]',$display_part).'</b>'.
                             ' <span class="LC_internal_info">'.
-                            '('.&mt('Response ID: [_1]',$respid).')'.
+                            '('.&mt('Part ID: [_1]',$respid).')'.
                             '</span>&nbsp; &nbsp;';
 			my $files=&get_submitted_files($udom,$uname,$partid,$respid,\%record);
 			if (@$files) {
-                            if ($hide eq 'anon') {
+                            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 />';
@@ -2315,12 +2262,12 @@ KEYWORDS
                             }
 			    $lastsubonly.='<br />';
 			}
-                        if ($hide eq 'anon') {
+                        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,$type,$trial,$rndseed);
+					     $respid,\%record,$order,undef,$uname,$udom);
                         }
 			if ($similar) {$lastsubonly.="<br /><br />$similar\n";}
 			$lastsubonly.='</div>';
@@ -2331,7 +2278,9 @@ KEYWORDS
 	}
 	$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,
@@ -2470,10 +2419,10 @@ sub check_collaborators {
 	next if ($record->{'resource.'.$part.'.collaborators'} eq '');
 	my (@good_collaborators, @bad_collaborators);
 	foreach my $possible_collaborator
-	    (split(/[,;\s]+/,$record->{'resource.'.$part.'.collaborators'})) { 
+	    (split(/,?\s+/,$record->{'resource.'.$part.'.collaborators'})) { 
 	    $possible_collaborator =~ s/[\$\^\(\)]//g;
 	    next if ($possible_collaborator eq '');
-	    my ($co_name,$co_dom) = split(/:/,$possible_collaborator);
+	    my ($co_name,$co_dom) = split(/\@|:/,$possible_collaborator);
 	    $co_dom = $udom if (! defined($co_dom) || $co_dom =~ /^domain$/i);
 	    next if ($co_name eq $uname && $co_dom eq $udom);
 	    # Doing this grep allows 'fuzzy' specification
@@ -2486,13 +2435,13 @@ sub check_collaborators {
 	    }
 	}
 	if (scalar(@good_collaborators) != 0) {
-	    $result.='<br />'.&mt('Collaborators:').'<ol>';
+	    $result.='<br />'.&mt('Collaborators: ');
 	    foreach my $name (@good_collaborators) {
 		my ($lastname,$givenn) = split(/,/,$$fullname{$name});
 		push(@col_fullnames, $givenn.' '.$lastname);
-		$result.='<li>'.$fullname->{$name}.'</li>';
+		$result.=$fullname->{$name}.'&nbsp; &nbsp; &nbsp;';
 	    }
-	    $result.='</ol><br />'."\n";
+	    $result.='<br />'."\n";
 	    my ($part)=split(/\./,$part);
 	    $result.='<input type="hidden" name="collaborator'.$counter.
 		'" value="'.$part.':'.(join ':',@good_collaborators).'" />'.
@@ -2528,51 +2477,35 @@ sub get_last_submission {
 		    &Apache::lonlocal::locallocaltime($$returnhash{$version.':timestamp'});
 	    }
 	}
-        my (%typeparts,%randombytry);
+        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') ||
-                    ($lasthash{$key} eq 'randomizetry')) {
+                    ($lasthash{$key} eq 'anonsurveycred')) {
                     my ($ign,@parts) = split(/\./,$key);
                     pop(@parts);
-                    my $id = join('.',@parts);
-                    if ($lasthash{$key} eq 'randomizetry') {
-                        $randombytry{$ign.'.'.$id} = $lasthash{$key};
-                    } else {
-                        unless ($showsurv) {
-                            $typeparts{$ign.'.'.$id} = $lasthash{$key};
-                        }
+                    unless ($showsurv) {
+                        my $id = join(',',@parts);
+                        $typeparts{$ign.'.'.$id} = $lasthash{$key};
                     }
                     delete($lasthash{$key});
                 }
             }
         }
         my @hidden = keys(%typeparts);
-        my @randomize = keys(%randombytry);
 	foreach my $key (keys(%lasthash)) {
 	    next if ($key !~ /\.submission$/);
             my $hide;
             if (@hidden) {
                 foreach my $id (@hidden) {
                     if ($key =~ /^\Q$id\E/) {
-                        $hide = 'anon';
+                        $hide = 1;
                         last;
                     }
                 }
             }
-            unless ($hide) {
-                if (@randomize) {
-                    foreach my $id (@hidden) {
-                        if ($key =~ /^\Q$id\E/) {
-                            $hide = 'rand';
-                            last;
-                        }
-                    }
-                }
-            }
 	    my ($partid,$foo) = split(/submission$/,$key);
 	    my $draft  = $lasthash{$partid.'awarddetail'} eq 'DRAFT' ?
 		'<span class="LC_warning">Draft Copy</span> ' : '';
@@ -2651,7 +2584,7 @@ sub processHandGrade {
                                                      undef,undef,$showsymb,
                                                      $restitle);
 		$request->print('<br />'.&mt('Sending message to [_1]',$uname.':'.$udom).': '.
-				$msgstatus.'<br />');
+				$msgstatus);
 	    }
 	    if ($env{'form.collaborator'.$ctr}) {
 		my @collabstrs=&Apache::loncommon::get_env_multiple("form.collaborator$ctr");
@@ -2743,7 +2676,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};
@@ -2837,7 +2770,7 @@ sub processHandGrade {
     }
     if ($total < 0) {
 	my $the_end = '<h3><span class="LC_info">'.&mt('LON-CAPA User Message').'</span></h3><br />'."\n";
-	$the_end.='<p>'.&mt('[_1]Message:[_2] No more students for this section or class.','<b>','</b>').'</p>'."\n";
+	$the_end.=&mt('<b>Message: </b> No more students for this section or class.').'<br /><br />'."\n";
 	$the_end.=&mt('Click on the button below to return to the grading menu.').'<br /><br />'."\n";
 	$the_end.=&show_grading_menu_form($symb);
 	$request->print($the_end);
@@ -2990,19 +2923,18 @@ sub handback_files {
         $request->print('<br />'.&navmap_errormsg().'<br />');
         return;
     }
-    my @handedback;
-    my $file_msg;
     my @part_response_id = &flatten_responseType($responseType);
     foreach my $part_response_id (@part_response_id) {
     	my ($part_id,$resp_id) = @{ $part_response_id };
 	my $part_resp = join('_',@{ $part_response_id });
-        if (($env{'form.'.$newflg.'_'.$part_resp.'_countreturndoc'} =~ /^\d+$/) & ($new_part eq $part_id)) {
-            for (my $counter=1; $counter<=$env{'form.'.$newflg.'_'.$part_resp.'_countreturndoc'}; $counter++) {
+            if (($env{'form.'.$newflg.'_'.$part_resp.'_returndoc1'}) && ($new_part == $part_id)) {
                 # if multiple files are uploaded names will be 'returndoc2','returndoc3'
-		if ($env{'form.'.$newflg.'_'.$part_resp.'_returndoc'.$counter}) {
-                    my $fname=$env{'form.'.$newflg.'_'.$part_resp.'_returndoc'.$counter.'.filename'};
+                my $file_counter = 1;
+		my $file_msg;
+                while ($env{'form.'.$newflg.'_'.$part_resp.'_returndoc'.$file_counter}) {
+                    my $fname=$env{'form.'.$newflg.'_'.$part_resp.'_returndoc'.$file_counter.'.filename'};
                     my ($directory,$answer_file) = 
-                        ($env{'form.'.$newflg.'_'.$part_resp.'_origdoc'.$counter} =~ /^(.*?)([^\/]*)$/);
+                        ($env{'form.'.$newflg.'_'.$part_resp.'_origdoc'.$file_counter} =~ /^(.*?)([^\/]*)$/);
                     my ($answer_name,$answer_ver,$answer_ext) =
 		        &file_name_version_ext($answer_file);
 		    my ($portfolio_path) = ($directory =~ /^.+$stuname\/portfolio(.*)/);
@@ -3012,55 +2944,43 @@ sub handback_files {
                     # fix file name
                     my ($save_file_name) = (($directory.$answer_name.".$version.".$answer_ext) =~ /^.+\/${stuname}\/(.*)/);
                     my $result=&Apache::lonnet::finishuserfileupload($stuname,$domain,
-            	                                $newflg.'_'.$part_resp.'_returndoc'.$counter,
+            	                                $newflg.'_'.$part_resp.'_returndoc'.$file_counter,
             	                                $save_file_name);
                     if ($result !~ m|^/uploaded/|) {
                         $request->print('<br /><span class="LC_error">'.
                             &mt('An error occurred ([_1]) while trying to upload [_2].',
-                                $result,$newflg.'_'.$part_resp.'_returndoc'.$counter).
+                                $result,$newflg.'_'.$part_resp.'_returndoc'.$file_counter).
                                         '</span>');
                     } else {
                         # mark the file as read only
-                        push(@handedback,$save_file_name);
+                        my @files = ($save_file_name);
+                        my @what = ($symb,$env{'request.course.id'},'handback');
+                        &Apache::lonnet::mark_as_readonly($domain,$stuname,\@files,\@what);
 			if (exists($$newrecord{"resource.$new_part.$resp_id.handback"})) {
 			    $$newrecord{"resource.$new_part.$resp_id.handback"}.=',';
 			}
                         $$newrecord{"resource.$new_part.$resp_id.handback"} .= $save_file_name;
-			$file_msg.='<span class="LC_filename"><a href="/uploaded/'."$domain/$stuname/".$save_file_name.'">'.$save_file_name."</a></span> <br />";
+			$file_msg.= "\n".'<br /><span class="LC_filename"><a href="/uploaded/'."$domain/$stuname/".$save_file_name.'">'.$save_file_name."</a></span><br />";
 
                     }
-                    $request->print('<br />'.&mt('[_1] will be the uploaded file name [_2]','<span class="LC_info">'.$fname.'</span>','<span class="LC_filename">'.$env{'form.'.$newflg.'_'.$part_resp.'_origdoc'.$counter}.'</span>'));
+                    $request->print("<br />".$fname." will be the uploaded file name");
+                    $request->print(" ".$env{'form.'.$newflg.'_'.$part_resp.'_origdoc'.$file_counter});
+                    $file_counter++;
                 }
+		my $subject = "File Handed Back by Instructor ";
+		my $message = "A file has been returned that was originally submitted in reponse to: <br />";
+		$message .= "<strong>".&Apache::lonnet::gettitle($symb)."</strong><br />";
+		$message .= ' The returned file(s) are named: '. $file_msg;
+		$message .= " and can be found in your portfolio space.";
+		my ($feedurl,$showsymb) = 
+		    &get_feedurl_and_symb($symb,$domain,$stuname);
+                my $restitle = &Apache::lonnet::gettitle($symb);
+		my $msgstatus = 
+                   &Apache::lonmsg::user_normal_msg($stuname,$domain,$subject.
+			 ' (File Returned) ['.$restitle.']',$message,undef,
+                         $feedurl,undef,undef,undef,$showsymb,$restitle);
             }
         }
-    }
-    if (@handedback > 0) {
-        $request->print('<br />');
-        my @what = ($symb,$env{'request.course.id'},'handback');
-        &Apache::lonnet::mark_as_readonly($domain,$stuname,\@handedback,\@what);
-        my $user_lh = &Apache::loncommon::user_lang($stuname,$domain,$env{'request.course.id'});
-        my ($subject,$message);
-        if (scalar(@handedback) == 1) {
-            $subject = &mt_user($user_lh,'File Handed Back by Instructor');
-        } else {
-            $subject = &mt_user($user_lh,'Files Handed Back by Instructor');
-            $message = &mt_user($user_lh,'Files have been returned that were originally submitted in response to: ');
-        }
-        $message .= "<p><strong>".&Apache::lonnet::gettitle($symb)." </strong></p>";
-        $message .= &mt_user($user_lh,'The returned file(s) are named: [_1]',"<br />$file_msg <br />").
-                    &mt_user($user_lh,'The file(s) can be found in your [_1]portfolio[_2].','<a href="/adm/portfolio">','</a>');
-        my ($feedurl,$showsymb) =
-            &get_feedurl_and_symb($symb,$domain,$stuname);
-        my $restitle = &Apache::lonnet::gettitle($symb);
-        $subject .= ' '.&mt_user($user_lh,'(File Returned)').' ['.$restitle.']';
-        my $msgstatus =
-             &Apache::lonmsg::user_normal_msg($stuname,$domain,$subject,
-                 $message,undef,$feedurl,undef,undef,undef,$showsymb,
-                 $restitle);
-        if ($msgstatus) {
-            $request->print(&mt('Notification message status: [_1]','<span class="LC_info">'.$msgstatus.'</span>').'<br />');
-        }
-    }
     return;
 }
 
@@ -3250,8 +3170,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];
@@ -3412,7 +3331,6 @@ sub viewgrades_js {
 	}
     }
 
-</script>
 VIEWJAVASCRIPT
 }
 
@@ -3988,7 +3906,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);
@@ -4015,10 +3934,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 '';
 
 }
@@ -4063,8 +3980,7 @@ 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");
@@ -4072,7 +3988,6 @@ sub checkforfile_js {
 	}
 	formname.submit();
     }
-    </script>
 CSVFORMJS
     return $result;
 }
@@ -4083,13 +3998,13 @@ 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.').
 	'</b></td></tr>'."\n";
-    $result.='<tr bgcolor="#ffffe6"><td>'."\n";
+    $result.='<tr bgcolor=#ffffe6><td>'."\n";
     my $upload=&mt("Upload Scores");
     my $upfile_select=&Apache::loncommon::upfile_select_html();
     my $ignore=&mt('Ignore First Line');
@@ -4237,7 +4152,6 @@ sub csvuploadassign {
     my ($classlist) = &getclasslist('all',0);
     my @notallowed;
     my @skipped;
-    my @warnings;
     my $countdone=0;
     foreach my $grade (@gradedata) {
 	my %entries=&Apache::loncommon::record_sep($grade);
@@ -4286,9 +4200,6 @@ sub csvuploadassign {
                     my $pcr=$entries{$fields{$dest}} / $wgt;
                     my $award=($pcr == 0) ? 'incorrect_by_override'
                                           : 'correct_by_override';
-                    if ($pcr>1) {
-                        push(@warnings,&mt("[_1]: point value larger than weight","$username:$domain"));
-                    }
                     $grades{"resource.$part.awarded"}=$pcr;
                     $grades{"resource.$part.solved"}=$award;
                     $points{$part}=1;
@@ -4317,11 +4228,6 @@ sub csvuploadassign {
 					   $domain,$username);
 	   if ($result eq 'ok') {
 	      $request->print('.');
-# Remove from grading queue
-              &Apache::bridgetask::remove_from_queue('gradingqueue',$symb,
-                                             $env{'course.'.$env{'request.course.id'}.'.domain'},
-                                             $env{'course.'.$env{'request.course.id'}.'.num'},
-                                             $domain,$username);
 	   } else {
 	      $request->print("<p><span class=\"LC_error\">".
                               &mt("Failed to save data for student [_1]. Message when trying to save was: [_2]",
@@ -4332,10 +4238,6 @@ sub csvuploadassign {
         }
     }
     $request->print('<br />'.&Apache::lonhtmlcommon::confirm_success(&mt("Saved scores for [quant,_1,student]",$countdone),$countdone==0));
-    if (@warnings) {
-        $request->print('<br />'.&Apache::lonhtmlcommon::confirm_success(&mt('Warnings generated for the following saved scores:'),1).'<br />');
-        $request->print(join(', ',@warnings));
-    }
     if (@skipped) {
 	$request->print('<br />'.&Apache::lonhtmlcommon::confirm_success(&mt('No scores stored for the following username(s):'),1).'<br />');
         $request->print(join(', ',@skipped));
@@ -4359,8 +4261,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) {
@@ -4373,7 +4274,6 @@ function checkPickOne(formname) {
     formname.submit();
 }
 
-</script>
 LISTJAVASCRIPT
     &commonJSfunctions($request);
     my ($symb) = &get_symb($request);
@@ -4608,8 +4508,8 @@ sub displayPage {
 		&Apache::loncommon::start_data_table_row().
 		'<td align="center" valign="top" >'.$prob.
 		(scalar(@{$parts}) == 1 ? '' 
-		                        : '<br />('.&mt('[_1]parts)',
-							scalar(@{$parts}).'&nbsp;')
+		                        : '<br />('.&mt('[_1]&nbsp;parts)',
+							scalar(@{$parts}))
 		 ).
 		 '</td>';
 	    $studentTable.='<td valign="top">';
@@ -4704,7 +4604,6 @@ sub displaySubByDates {
 
     my $interaction;
     my $no_increment = 1;
-    my %lastrndseed;
     for ($version=1;$version<=$$record{'version'};$version++) {
 	my $timestamp = 
 	    &Apache::lonlocal::locallocaltime($$record{$version.':timestamp'});
@@ -4722,9 +4621,9 @@ sub displaySubByDates {
 	my @versionKeys = split(/\:/,$$record{$version.':keys'});
 	my @displaySub = ();
 	foreach my $partid (@{$parts}) {
-            my ($hidden,$type);
-            $type = $$record{$version.':resource.'.$partid.'.type'};
-            if (($type eq 'anonsurvey') || ($type eq 'anonsurveycred')) {
+            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)
@@ -4741,39 +4640,29 @@ sub displaySubByDates {
                     $displaySub[0].='<span class="LC_nobreak"';
                     $displaySub[0].='<b>'.&mt('Part: [_1]',$display_part).'</b>'
                                    .' <span class="LC_internal_info">'
-                                   .'('.&mt('Response ID: [_1]',$responseId).')'
+                                   .'('.&mt('Part ID: [_1]',$responseId).')'
                                    .'</span>'
                                    .' <b>';
                     if ($hidden) {
                         $displaySub[0].= &mt('Anonymous Survey').'</b>';
                     } else {
-                        my ($trial,$rndseed,$newvariation);
-                        if ($type eq 'randomizetry') {
-                            $trial = $$record{"$where.$partid.tries"};
-                            $rndseed = $$record{"$where.$partid.rndseed"};
-                        }
 		        if ($$record{"$where.$partid.tries"} eq '') {
 			    $displaySub[0].=&mt('Trial not counted');
 		        } else {
 			    $displaySub[0].=&mt('Trial: [_1]',
 					    $$record{"$where.$partid.tries"});
-                            if ($rndseed || $lastrndseed{$partid}) {
-                                if ($rndseed ne $lastrndseed{$partid}) {
-                                    $newvariation = '&nbsp;('.&mt('New variation this try').')';
-                                }
-                            }
 		        }
 		        my $responseType=($isTask ? 'Task'
                                               : $responseType->{$partid}->{$responseId});
 		        if (!exists($orders{$partid})) { $orders{$partid}={}; }
-		        if ((!exists($orders{$partid}->{$responseId})) || ($trial)) {
+		        if (!exists($orders{$partid}->{$responseId})) {
 			    $orders{$partid}->{$responseId}=
 			        &get_order($partid,$responseId,$symb,$uname,$udom,
-                                           $no_increment,$type,$trial,$rndseed);
+                                           $no_increment);
 		        }
-		        $displaySub[0].='</b>'.$newvariation.'</span>'; # /nobreak
+		        $displaySub[0].='</b></span>'; # /nobreak
 		        $displaySub[0].='&nbsp; '.
-			    &cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:",$uname,$udom,$type,$trial,$rndseed).'<br />';
+			    &cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:",$uname,$udom).'<br />';
                     }
 		}
 	    }
@@ -4875,7 +4764,7 @@ sub updateGradeByPage {
 		&Apache::loncommon::start_data_table_row().
 		'<td align="center" valign="top" >'.$prob.
 		(scalar(@{$parts}) == 1 ? '' 
-                                        : '<br />('.&mt('[quant,_1,part]',scalar(@{$parts}))
+                                        : '<br />('.&mt('[quant,_1,&nbsp;part]',scalar(@{$parts}))
 		.')').'</td>';
 	    $studentTable.='<td valign="top">&nbsp;<b>'.$title.'</b>&nbsp;</td>';
 
@@ -4998,12 +4887,12 @@ sub updateGradeByPage {
    from the file that we are parsing that represents one entire sheet
 
    'bubble line' refers to the data
-   representing the line of bubbles that are on the physical bubblesheet
+   representing the line of bubbles that are on the physical bubble sheet
 
 
-The overall process is that a scanned in bubblesheet data is uploaded
+The overall process is that a scanned in bubble sheet data is uploaded
 into a course. When a user wants to grade, they select a
-sequence/folder of resources, a file of bubblesheet info, and pick
+sequence/folder of resources, a file of bubble sheet info, and pick
 one of the predefined configurations for what each scanline looks
 like.
 
@@ -5019,14 +4908,14 @@ username:domain.
 
 During the validation phase the instructor can choose to skip scanlines. 
 
-After the validation phase, there are now 3 bubblesheet files
+After the validation phase, there are now 3 bubble sheet files
 
   scantron_original_filename (unmodified original file)
   scantron_corrected_filename (file where the corrected information has replaced the original information)
   scantron_skipped_filename (contains the exact text of scanlines that where skipped)
 
 Also there is a separate hash nohist_scantrondata that contains extra
-correction information that isn't representable in the bubblesheet
+correction information that isn't representable in the bubble sheet
 file (see &scantron_getfile() for more information)
 
 After all scanlines are either valid, marked as valid or skipped, then
@@ -5323,7 +5212,7 @@ sub scantron_CODEunique {
 
 =item scantron_selectphase
 
-  Generates the initial screen to start the bubblesheet process.
+  Generates the initial screen to start the bubble sheet process.
   Allows for - starting a grading run.
              - downloading existing scan data (original, corrected
                                                 or skipped info)
@@ -5356,54 +5245,6 @@ sub scantron_selectphase {
 
     $ssi_error = 0;
 
-    if (&Apache::lonnet::allowed('usc',$env{'request.role.domain'}) ||
-        &Apache::lonnet::allowed('usc',$env{'request.course.id'})) {
-
-        # Chunk of form to prompt for a scantron file upload.
-
-        $r->print('
-    <br />
-    '.&Apache::loncommon::start_data_table('LC_scantron_action').'
-       '.&Apache::loncommon::start_data_table_header_row().'
-            <th>
-              &nbsp;'.&mt('Specify a bubblesheet data file to upload.').'
-            </th>
-       '.&Apache::loncommon::end_data_table_header_row().'
-       '.&Apache::loncommon::start_data_table_row().'
-            <td>
-');
-    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">
-    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>
-
-              <form enctype="multipart/form-data" action="/adm/grades" name="rules" method="post">
-                '.$default_form_data.'
-                <input name="courseid" type="hidden" value="'.$cnum.'" />
-                <input name="domainid" type="hidden" value="'.$cdom.'" />
-                <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').'" />
-              </form>
-');
-
-        $r->print('
-            </td>
-       '.&Apache::loncommon::end_data_table_row().'
-       '.&Apache::loncommon::end_data_table().'
-');
-    }
-
     # Chunk of form to prompt for a file to grade and how:
 
     $result.= '
@@ -5451,6 +5292,52 @@ sub scantron_selectphase {
    
     $r->print($result);
 
+    if (&Apache::lonnet::allowed('usc',$env{'request.role.domain'}) ||
+        &Apache::lonnet::allowed('usc',$env{'request.course.id'})) {
+
+	# Chunk of form to prompt for a scantron file upload.
+
+        $r->print('
+    <br />
+    '.&Apache::loncommon::start_data_table('LC_scantron_action').'
+       '.&Apache::loncommon::start_data_table_header_row().'
+            <th>
+              &nbsp;'.&mt('Specify a bubblesheet data file to upload.').'
+            </th>
+       '.&Apache::loncommon::end_data_table_header_row().'
+       '.&Apache::loncommon::start_data_table_row().'
+            <td>
+');
+    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(&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();
+    }'));
+    $r->print('
+              <form enctype="multipart/form-data" action="/adm/grades" name="rules" method="post">
+                '.$default_form_data.'
+                <input name="courseid" type="hidden" value="'.$cnum.'" />
+                <input name="domainid" type="hidden" value="'.$cdom.'" />
+                <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').'" />
+              </form>
+');
+
+        $r->print('
+            </td>
+       '.&Apache::loncommon::end_data_table_row().'
+       '.&Apache::loncommon::end_data_table().'
+');
+    }
+
     # Chunk of the form that prompts to view a scoring office file,
     # corrected file, skipped records in a file.
 
@@ -6346,7 +6233,7 @@ sub remember_current_skipped {
 =item check_for_error
 
     Checks if there was an error when attempting to remove a specific
-    scantron_.. bubblesheet data file. Prints out an error if
+    scantron_.. bubble sheet data file. Prints out an error if
     something went wrong.
 
 =cut
@@ -6417,15 +6304,15 @@ sub scantron_do_warning {
     if ( $env{'form.selectpage'} eq '' ||
 	 $env{'form.scantron_selectfile'} eq '' ||
 	 $env{'form.scantron_format'} eq '' ) {
-	$r->print("<p>".&mt('You have forgotten to specify some information. Please go Back and try again.')."</p>");
+	$r->print("<p>".&mt('You have forgetten to specify some information. Please go Back and try again.')."</p>");
 	if ( $env{'form.selectpage'} eq '') {
 	    $r->print('<p><span class="LC_error">'.&mt('You have not selected a Sequence to grade').'</span></p>');
 	} 
 	if ( $env{'form.scantron_selectfile'} eq '') {
-	    $r->print('<p><span class="LC_error">'.&mt("You have not selected a file that contains the student's response data.").'</span></p>');
+	    $r->print('<p><span class="LC_error">'.&mt('You have not selected a file that contains the student\'s response data.').'</span></p>');
 	} 
 	if ( $env{'form.scantron_format'} eq '') {
-	    $r->print('<p><span class="LC_error">'.&mt("You have not selected the format of the student's response data.").'</span></p>');
+	    $r->print('<p><span class="LC_error">'.&mt('You have not selected a the format of the student\'s response data.').'</span></p>');
 	} 
     } else {
 	my $warning=&scantron_warning_screen('Grading: Validate Records');
@@ -6482,7 +6369,7 @@ SCANTRONFORM
 
 =item scantron_validate_file
 
-    Dispatch routine for doing validation of a bubblesheet data file.
+    Dispatch routine for doing validation of a bubble sheet data file.
 
     Also processes any necessary information resets that need to
     occur before validation begins (ignore previous corrections,
@@ -6593,7 +6480,7 @@ sub scantron_validate_file {
 
 =item scantron_remove_file
 
-   Removes the requested bubblesheet data file, makes sure that
+   Removes the requested bubble sheet data file, makes sure that
    scantron_original_<filename> is never removed
 
 
@@ -6618,7 +6505,7 @@ sub scantron_remove_file {
 
 =item scantron_remove_scan_data
 
-   Removes all scan_data correction for the requested bubblesheet
+   Removes all scan_data correction for the requested bubble sheet
    data file.  (In the case that both the are doing skipped records we need
    to remember the old skipped lines for the time being so that element
    persists for a while.)
@@ -6655,7 +6542,7 @@ sub scantron_remove_scan_data {
 
 =item scantron_getfile
 
-    Fetches the requested bubblesheet data file (all 3 versions), and
+    Fetches the requested bubble sheet data file (all 3 versions), and
     the scan_data hash
   
   Arguments:
@@ -6755,7 +6642,7 @@ sub lonnet_putfile {
 
 =item scantron_putfile
 
-    Stores the current version of the bubblesheet data files, and the
+    Stores the current version of the bubble sheet data files, and the
     scan_data hash. (Does not modify the original version only the
     corrected and skipped versions.
 
@@ -6849,7 +6736,7 @@ sub get_todo_count {
 
 =item scantron_put_line
 
-    Updates the 'corrected' or 'skipped' versions of the bubblesheet
+    Updates the 'corrected' or 'skipped' versions of the bubble sheet
     data file.
 
  Arguments:
@@ -7038,28 +6925,19 @@ sub scantron_get_correction {
 #the previous one or the current one
 
     if ( $$scan_record{'scantron.PaperID'} =~ /\S/) {
-        $r->print(
-            '<p class="LC_warning">'
-           .&mt('An error was detected ([_1]) for PaperID [_2]',
-                "<b>$error</b>",
-                '<tt>'.$$scan_record{'scantron.PaperID'}.'</tt>')
-           ."</p> \n");
+	$r->print("<p>".&mt("<b>An error was detected ($error)</b>".
+			    " for PaperID <tt>[_1]</tt>",
+			    $$scan_record{'scantron.PaperID'})."</p> \n");
     } else {
-        $r->print(
-            '<p class="LC_warning">'
-           .&mt('An error was detected ([_1]) in scanline [_2] [_3]',
-                "<b>$error</b>", $i, "<pre>$line</pre>")
-           ."</p> \n");
-    }
-    my $message =
-        '<p>'
-       .&mt('The ID on the form is [_1]',
-            "<tt>$$scan_record{'scantron.ID'}</tt>")
-       .'<br />'
-       .&mt('The name on the paper is [_1], [_2]',
-            $$scan_record{'scantron.LastName'},
-            $$scan_record{'scantron.FirstName'})
-       .'</p>';
+	$r->print("<p>".&mt("<b>An error was detected ($error)</b>".
+			    " in scanline [_1] <pre>[_2]</pre>",
+			    $i,$line)."</p> \n");
+    }
+    my $message="<p>".&mt("The ID on the form is  <tt>[_1]</tt><br />".
+			  "The name on the paper is [_2],[_3]",
+			  $$scan_record{'scantron.ID'},
+			  $$scan_record{'scantron.LastName'},
+			  $$scan_record{'scantron.FirstName'})."</p>";
 
     $r->print('<input type="hidden" name="scantron_corrections" value="'.$error.'" />'."\n");
     $r->print('<input type="hidden" name="scantron_line" value="'.$i.'" />'."\n");
@@ -7069,10 +6947,10 @@ sub scantron_get_correction {
 
     if ($error =~ /ID$/) {
 	if ($error eq 'incorrectID') {
-	    $r->print('<p class="LC_warning">'.&mt("The encoded ID is not in the classlist").
+	    $r->print("<p>".&mt("The encoded ID is not in the classlist").
 		      "</p>\n");
 	} elsif ($error eq 'duplicateID') {
-	    $r->print('<p class="LC_warning">'.&mt("The encoded ID has also been used by a previous paper [_1]",$arg)."</p>\n");
+	    $r->print("<p>".&mt("The encoded ID has also been used by a previous paper [_1]",$arg)."</p>\n");
 	}
 	$r->print($message);
 	$r->print("<p>".&mt("How should I handle this?")." <br /> \n");
@@ -7088,15 +6966,14 @@ sub scantron_get_correction {
 	$r->print('</li>');
     } elsif ($error =~ /CODE$/) {
 	if ($error eq 'incorrectCODE') {
-	    $r->print('<p class="LC_warning">'.&mt("The encoded CODE is not in the list of possible CODEs.")."</p>\n");
+	    $r->print("<p>".&mt("The encoded CODE is not in the list of possible CODEs.")."</p>\n");
 	} elsif ($error eq 'duplicateCODE') {
-	    $r->print('<p class="LC_warning">'.&mt("The encoded CODE has also been used by a previous paper [_1], and CODEs are supposed to be unique.",join(', ',@{$arg}))."</p>\n");
+	    $r->print("<p>".&mt("The encoded CODE has also been used by a previous paper [_1], and CODEs are supposed to be unique.",join(', ',@{$arg}))."</p>\n");
 	}
-        $r->print("<p>".&mt('The CODE on the form is [_1]',
-                            "<tt>'$$scan_record{'scantron.CODE'}'</tt>")
-                 ."</p>\n");
+	$r->print("<p>".&mt("The CODE on the form is  <tt>'[_1]'</tt>",
+			    $$scan_record{'scantron.CODE'})."<br />\n");
 	$r->print($message);
-	$r->print("<p>".&mt("How should I handle this?")."</p>\n");
+	$r->print("<p>".&mt("How should I handle this?")." <br /> \n");
 	$r->print("\n<br /> ");
 	my $i=0;
 	if ($error eq 'incorrectCODE' 
@@ -7123,14 +7000,13 @@ sub scantron_get_correction {
 	    $r->print("
     <label>
         <input type='radio' name='scantron_CODE_resolution' value='use_unfound'$checked />
-       ".&mt("Use the CODE [_1] that was on the paper, ignoring the error.",
+       ".&mt("Use the CODE [_1] that is was on the paper, ignoring the error.",
 	     "<b><tt>".$$scan_record{'scantron.CODE'}."</tt></b>")."
     </label>");
 	    $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;
@@ -7138,7 +7014,6 @@ function change_radio(field) {
         if (slct[i].value==field) { slct[i].checked=true; }
     }
 }
-</script>
 ENDSCRIPT
 	my $href="/adm/pickcode?".
 	   "form=".&escape("scantronupload").
@@ -7163,7 +7038,7 @@ ENDSCRIPT
 	     "</label><input type='text' size='8' name='scantron_CODE_newvalue' onfocus=\"javascript:change_radio('use_typed')\" onkeypress=\"javascript:change_radio('use_typed')\" />"));
 	$r->print("\n<br /><br />");
     } elsif ($error eq 'doublebubble') {
-	$r->print('<p class="LC_warning">'.&mt("There have been multiple bubbles scanned for some question(s)")."</p>\n");
+	$r->print("<p>".&mt("There have been multiple bubbles scanned for some question(s)")."</p>\n");
 
 	# The form field scantron_questions is acutally a list of line numbers.
 	# represented by this form so:
@@ -7181,7 +7056,7 @@ ENDSCRIPT
 	}
         $r->print(&verify_bubbles_checked(@lines_to_correct));
     } elsif ($error eq 'missingbubble') {
-	$r->print('<p class="LC_warning">'.&mt("There have been [_1]no[_2] bubbles scanned for some question(s)",'<b>','</b>')."</p>\n");
+	$r->print("<p>".&mt("There have been <b>no</b> bubbles scanned for some question(s)")."</p>\n");
 	$r->print($message);
 	$r->print("<p>".&mt("Please indicate which bubble should be used for grading.")."</p>");
 	$r->print(&mt("Some questions have no scanned bubbles.")."\n");
@@ -7210,8 +7085,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;
@@ -7234,7 +7108,6 @@ function verify_bubble_radio(form) {
     }
     form.submit(); 
 }
-</script>
 ENDSCRIPT
     return $output;
 }
@@ -7984,12 +7857,12 @@ SCANTRONFORM
                     $studentrecord .= $recording;
                 }
                 if ($studentrecord ne $studentdata) {
-                    $r->print('<p><span class="LC_warning">');
+                    $r->print('<p><span class="LC_error">');
                     if ($scancode eq '') {
-                        $r->print(&mt('Mismatch grading bubblesheet for user: [_1] with ID: [_2].',
+                        $r->print(&mt('Mismatch grading bubble sheet for user: [_1] with ID: [_2].',
                                   $uname.':'.$udom,$scan_record->{'scantron.ID'}));
                     } else {
-                        $r->print(&mt('Mismatch grading bubblesheet for user: [_1] with ID: [_2] and CODE: [_3].',
+                        $r->print(&mt('Mismatch grading bubble sheet for user: [_1] with ID: [_2] and CODE: [_3].',
                                   $uname.':'.$udom,$scan_record->{'scantron.ID'},$scancode));
                     }
                     $r->print('</span><br />'.&Apache::loncommon::start_data_table()."\n".
@@ -7997,11 +7870,11 @@ SCANTRONFORM
                               '<th>'.&mt('Source').'</th><th>'.&mt('Bubbled responses').'</th>'.
                               &Apache::loncommon::end_data_table_header_row()."\n".
                               &Apache::loncommon::start_data_table_row().
-                              '<td>'.&mt('Bubblesheet').'</td>'.
+                              '<td>'.&mt('Bubble Sheet').'</td>'.
                               '<td><span class="LC_nobreak">'.$studentdata.'</span></td>'.
                               &Apache::loncommon::end_data_table_row().
                               &Apache::loncommon::start_data_table_row().
-                              '<td>'.&mt('Stored submissions').'</td>'.
+                              '<td>Stored submissions</td>'.
                               '<td><span class="LC_nobreak">'.$studentrecord.'</span></td>'."\n".
                               &Apache::loncommon::end_data_table_row().
                               &Apache::loncommon::end_data_table().'</p>');
@@ -8093,8 +7966,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.'");
@@ -8121,9 +7993,9 @@ sub scantron_upload_scantron_data {
         return;
     }
 
-</script>
-
-<h3>'.&mt('Send bubblesheet data to a course').'</h3>
+'));
+    $r->print('
+<h3>'.&mt('Send scanned bubblesheet data to a course').'</h3>
 
 <form enctype="multipart/form-data" action="/adm/grades" name="rules" method="post">
 '.$default_form_data.
@@ -8468,14 +8340,7 @@ sub checkscantron_results {
             }
         }
     }
-    $r->print('<p>'.
-              &mt('Comparison of bubblesheet data (including corrections) with corresponding submission records (most recent submission) for [_1][quant,_2,student][_3] ([quant,_4,bubblesheet line] per student).',
-                  '<b>',
-                  $numstudents,
-                  '</b>',
-                  $env{'form.scantron_maxbubble'}).
-              '</p>'
-    );
+    $r->print('<p>'.&mt('Comparison of bubblesheet data (including corrections) with corresponding submission records (most recent submission) for <b>[quant,_1,student]</b>  ([_2] scantron lines/student).',$numstudents,$env{'form.scantron_maxbubble'}).'</p>');
     $r->print('<p>'.&mt('Exact matches for <b>[quant,_1,student]</b>.',$passed).'<br />'.&mt('Discrepancies detected for <b>[quant,_1,student]</b>.',$failed).'</p>');
     if ($passed) {
         $r->print(&mt('Students with exact correspondence between bubblesheet data and submissions are as follows:').'<br /><br />');
@@ -8667,19 +8532,26 @@ sub grading_menu {
     my ($symb)=&get_symb($request);
     if (!$symb) {return '';}
     my $probTitle = &Apache::lonnet::gettitle($symb);
-    my ($table,undef,$hdgrade) = &showResourceInfo($symb,$probTitle);
 
-    $request->print($table);
+#    $request->print($table);
     my %fields = ('symb'=>&Apache::lonenc::check_encrypt($symb),
-                  'handgrade'=>$hdgrade,
                   'probTitle'=>$probTitle,
-                  'command'=>'submit_options',
+                  'command'=>'individual',
                   'saveState'=>"",
                   '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);
     
@@ -8689,14 +8561,36 @@ sub grading_menu {
     $fields{'command'} = 'scantron_selectphase';
     my $url4 = &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',
@@ -8713,7 +8607,7 @@ sub grading_menu {
                     		url => $url4,
                     		permission => 'F',
                     		icon => 'stat.png',
-                    		linktitle => 'Grade bubblesheet exams, upload/download bubblesheet data files, and review previously graded bubblesheet exams.'
+                    		linktitle => 'Grade scantron exams, upload/download scantron data files, and review previously graded scantron exams.'
                 	    }
                     ]
             });
@@ -8727,7 +8621,7 @@ sub grading_menu {
     $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="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".
@@ -8743,8 +8637,7 @@ sub grading_menu {
 
     $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);
@@ -8777,12 +8670,31 @@ sub grading_menu {
 	}
 	return true;
     }
-</script>
 GRADINGMENUJS
     &commonJSfunctions($request);
     return $Str;    
 }
 
+sub individual {
+    my ($request)=@_;
+    &submit_options($request);
+}
+
+sub ungraded {
+    my ($request)=@_;
+    &submit_options($request);
+}
+
+sub table {
+    my ($request)=@_;
+    &submit_options($request);
+}
+
+sub all_for_one {
+    my ($request)=@_;
+    &submit_options($request);
+}
+
 
 #--- Displays the submissions first page -------
 sub submit_options {
@@ -8792,8 +8704,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);
@@ -8826,10 +8737,9 @@ sub submit_options {
 	}
 	return true;
     }
-</script>
 GRADINGMENUJS
     &commonJSfunctions($request);
-    my ($table,undef,$hdgrade) = &showResourceInfo($symb,$probTitle);
+#    my ($table,undef,$hdgrade) = &showResourceInfo($symb,$probTitle);
     my $result;
     my (undef,$sections) = &getclasslist('all','0');
     my $savedState = &savedState();
@@ -8849,7 +8759,7 @@ GRADINGMENUJS
 
     $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="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".
@@ -8860,9 +8770,6 @@ GRADINGMENUJS
 <h2>
   '.&mt('Grade Current Resource').'
 </h2>
-<div>
-  '.$table.'
-</div>
 
 <div class="LC_columnSection">
   
@@ -8969,21 +8876,6 @@ sub init_perm {
     }
 }
 
-sub init_old_essays {
-    my ($symb,$apath,$adom,$aname) = @_;
-    if ($symb ne '') {
-        my %essays = &Apache::lonnet::dump('nohist_essay_'.$apath,$adom,$aname);
-        if (keys(%essays) > 0) {
-            $old_essays{$symb} = \%essays;
-        }
-    }
-    return;
-}
-
-sub reset_old_essays {
-    undef(%old_essays);
-}
-
 sub gather_clicker_ids {
     my %clicker_ids;
 
@@ -9051,13 +8943,13 @@ 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;
+#    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',
@@ -9084,11 +8976,10 @@ sub process_clicker {
     my $pcorrect=&mt("Percentage points for correct solution");
     my $pincorrect=&mt("Percentage points for incorrect solution");
     my $selectform=&Apache::loncommon::select_form($env{'form.upfiletype'},'upfiletype',
-                                                   {'iclicker' => 'i>clicker',
-                                                    'interwrite' => 'interwrite PRS'});
+						   ('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);
@@ -9126,7 +9017,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" />
@@ -9145,7 +9037,7 @@ function sanitycheck() {
 <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>
+</form>'
 ENDUPFORM
     $result.='</td></tr></table>'."\n".
              '</td></tr></table><br /><br />'."\n";
@@ -9161,8 +9053,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);
@@ -9175,7 +9067,7 @@ sub process_clicker_file {
     if ($env{'form.gradingmechanism'} eq 'given') {
         $env{'form.givenanswer'}=~s/^\s*//gs;
         $env{'form.givenanswer'}=~s/\s*$//gs;
-        $env{'form.givenanswer'}=~s/[^a-zA-Z0-9\.\*\-\+]+/\,/g;
+        $env{'form.givenanswer'}=~s/[^a-zA-Z0-9\.\*\-]+/\,/g;
         $env{'form.givenanswer'}=uc($env{'form.givenanswer'});
         my @answers=split(/\,/,$env{'form.givenanswer'});
         $foundgiven=$#answers+1;
@@ -9235,7 +9127,7 @@ sub process_clicker_file {
     $result.=(<<ENDHEADER);
 <br /><table width="100%" border="0"><tr><td bgcolor="#777777">
 <table width="100%" border="0"><tr bgcolor="#e6ffff"><td>
-<b>$heading</b></td></tr><tr bgcolor="#ffffe6"><td>
+<b>$heading</b></td></tr><tr bgcolor=#ffffe6><td>
 <form method="post" action="/adm/grades" name="clickeranalysis">
 <input type="hidden" name="symb" value="$symb" />
 <input type="hidden" name="command" value="assignclickergrades" />
@@ -9304,7 +9196,7 @@ ENDHEADER
                    "\n".&mt("Username").": <input type='text' name='uname".$id."' />&nbsp;".
                    "\n".&mt("Domain").": ".
                    &Apache::loncommon::select_dom_form($env{'course.'.$env{'request.course.id'}.'.domain'},'udom'.$id).'&nbsp;'.
-                   &Apache::loncommon::selectstudent_link('clickeranalysis','uname'.$id,'udom'.$id,0,$id);
+                   &Apache::loncommon::selectstudent_link('clickeranalysis','uname'.$id,'udom'.$id);
           $unknown_count++;
        }
     }
@@ -9349,7 +9241,6 @@ sub iclicker_eval {
 	    $id=~s/^[\#0]+//;
 	    for (my $i=0;$i<$number;$i++) {
 		my $idx=3+$i*6;
-                $entries[$idx]=~s/[^a-zA-Z0-9\.\*\-\+]+//g;
 		push(@idresponses,$entries[$idx]);
 	    }
 	    $$responses{$id}=join(',',@idresponses);
@@ -9402,15 +9293,15 @@ 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'});
-
-    $result .= '<br />'.
-               &Apache::loncommon::start_data_table().
-               &Apache::loncommon::start_data_table_header_row().
-               '<th>'.&mt('Assigning grades based on clicker file').'</th>'.
-               &Apache::loncommon::end_data_table_header_row().
-               &Apache::loncommon::start_data_table_row().'<td>';
+    my $result='';
+#    my ($result) = &showResourceInfo($symb,$env{'form.probTitle'});
 
+    my $heading=&mt('Assigning grades based on clicker file');
+    $result.=(<<ENDHEADER);
+<br /><table width="100%" border="0"><tr><td bgcolor="#777777">
+<table width="100%" border="0"><tr bgcolor="#e6ffff"><td>
+<b>$heading</b></td></tr><tr bgcolor=#ffffe6><td>
+ENDHEADER
 # Get correct result
 # FIXME: Possibly need delimiter other than ":"
     my @correct=();
@@ -9426,26 +9317,25 @@ sub assign_clicker_grades {
                     $result.='<br /><span class="LC_warning">'.
                              &mt('More than one correct result given for question "[_1]": [_2] versus [_3].',
                                  $env{'form.question:'.$i},$correct[$i],$input[$i]).'</span>';
-                 } elsif (($input[$i]) || ($input[$i] eq '0')) {
+                 } elsif ($input[$i]) {
                     $correct[$i]=$input[$i];
                  }
              }
           }
        }
        for (my $i=0;$i<$number;$i++) {
-          if ((!$correct[$i]) && ($correct[$i] ne '0')) {
+          if (!$correct[$i]) {
              $result.='<br /><span class="LC_error">'.
                       &mt('No correct result given for question "[_1]"!',
                           $env{'form.question:'.$i}).'</span>';
           }
        }
-       $result.='<br />'.&mt("Correct answer: [_1]",join(', ',map { ((($_) || ($_ eq '0'))?$_:'-') } @correct));
+       $result.='<br />'.&mt("Correct answer: [_1]",join(', ',map { ($_?$_:'-') } @correct));
     }
 # Start grading
     my $pcorrect=$env{'form.pcorrect'};
     my $pincorrect=$env{'form.pincorrect'};
     my $storecount=0;
-    my %users=();
     foreach my $key (keys(%env)) {
        my $user='';
        if ($key=~/^form\.student\:(.*)$/) {
@@ -9459,13 +9349,7 @@ sub assign_clicker_grades {
              $user=$env{'form.multi'.$id};
           }
        }
-       if ($user) {
-          if ($users{$user}) {
-             $result.='<br /><span class="LC_warning">'.
-                      &mt("More than one entry found for <tt>[_1]</tt>!",$user).
-                      '</span><br />';
-          }
-          $users{$user}=1;
+       if ($user) { 
           my @answer=split(/\,/,$env{$key});
           my $sum=0;
           my $realnumber=$number;
@@ -9478,23 +9362,11 @@ sub assign_clicker_grades {
                 } elsif ($correct[$i] eq '*') {
                    $sum+=$pcorrect;
                 } else {
-# We actually grade if correct or not
-                   my $increment=$pincorrect;
-# Special case: numerical answer "0"
-                   if ($correct[$i] eq '0') {
-                      if ($answer[$i]=~/^[0\.]+$/) {
-                         $increment=$pcorrect;
-                      }
-# General numerical answer, both evaluate to something non-zero
-                   } elsif ((1.0*$correct[$i]!=0) && (1.0*$answer[$i]!=0)) {
-                      if (1.0*$correct[$i]==1.0*$answer[$i]) {
-                         $increment=$pcorrect;
-                      }
-# Must be just alphanumeric
-                   } elsif ($answer[$i] eq $correct[$i]) {
-                      $increment=$pcorrect;
+                   if ($answer[$i] eq $correct[$i]) {
+                      $sum+=$pcorrect;
+                   } else {
+                      $sum+=$pincorrect;
                    }
-                   $sum+=$increment;
                 }
              }
           }
@@ -9517,9 +9389,8 @@ sub assign_clicker_grades {
     }
 # We are done
     $result.='<br />'.&mt('Successfully stored grades for [quant,_1,student].',$storecount).
-             '</td>'.
-             &Apache::loncommon::end_data_table_row().
-             &Apache::loncommon::end_data_table()."<br /><br />\n";
+             '</td></tr></table>'."\n".
+             '</td></tr></table><br /><br />'."\n";
     return $result.&show_grading_menu_form($symb);
 }
 
@@ -9533,13 +9404,14 @@ sub navmap_errormsg {
 sub handler {
     my $request=$_[0];
     &reset_caches();
-    if ($request->header_only) {
-        &Apache::loncommon::content_type($request,'text/html');
-        $request->send_http_header;
-        return OK;
+    if ($env{'browser.mathml'}) {
+	&Apache::loncommon::content_type($request,'text/xml');
+    } else {
+	&Apache::loncommon::content_type($request,'text/html');
     }
+    $request->send_http_header;
+    return '' if $request->header_only;
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'});
-
     my $symb=&get_symb($request,1);
     my @commands=&Apache::loncommon::get_env_multiple('form.command');
     my $command=$commands[0];
@@ -9550,13 +9422,10 @@ sub handler {
 
     $ssi_error = 0;
     my $brcrum = [{href=>"/adm/grades",text=>"Grading"}];
-    my $start_page = &Apache::loncommon::start_page('Grading',undef,
-                                          {'bread_crumbs' => $brcrum});
+    $request->print(&Apache::loncommon::start_page('Grading',undef,
+                                          {'bread_crumbs' => $brcrum}));
     if ($symb eq '' && $command eq '') {
 	if ($env{'user.adv'}) {
-            &Apache::loncommon::content_type($request,'text/html');
-            $request->send_http_header;
-            $request->print($start_page);
 	    if (($env{'form.codeone'}) && ($env{'form.codetwo'}) &&
 		($env{'form.codethree'})) {
 		my $token=$env{'form.codeone'}.'*'.$env{'form.codetwo'}.'*'.
@@ -9580,31 +9449,9 @@ sub handler {
 	    } else {
 		$request->print(&Apache::lonxml::tokeninputfield());
 	    }
-        } elsif ($env{'request.course.id'}) {
-            &init_perm(); 
-            if (!%perm) {
-                $request->internal_redirect('/adm/quickgrades');
-            } else {
-                &Apache::loncommon::content_type($request,'text/html');
-                $request->send_http_header;
-                $request->print($start_page);
-            }
-        }
+	}
     } else {
-        &init_perm();
-        if (!$env{'request.course.id'}) {
-            unless ((&Apache::lonnet::allowed('usc',$env{'request.role.domain'})) &&
-                    ($command =~ /^scantronupload/)) {
-                # Not in a course.
-                $env{'user.error.msg'}="/adm/grades::vgr:0:0:Cannot display grades page outside course context";
-                return HTTP_NOT_ACCEPTABLE;
-            }
-        } elsif (!%perm) {
-            $request->internal_redirect('/adm/quickgrades');
-        }
-        &Apache::loncommon::content_type($request,'text/html');
-        $request->send_http_header;
-        $request->print($start_page);
+	&init_perm();
 	if ($command eq 'submission' && $perm{'vgr'}) {
 	    ($env{'form.student'} eq '' ? &listStudents($request) : &submission($request,0,0));
 	} elsif ($command eq 'pickStudentPage' && $perm{'vgr'}) {
@@ -9617,8 +9464,14 @@ sub handler {
 	    &processGroup($request);
 	} elsif ($command eq 'gradingmenu' && $perm{'vgr'}) {
 	    $request->print(&grading_menu($request));
-	} elsif ($command eq 'submit_options' && $perm{'vgr'}) {
-	    $request->print(&submit_options($request));
+	} elsif ($command eq 'individual' && $perm{'vgr'}) {
+	    $request->print(&individual($request));
+        } elsif ($command eq 'ungraded' && $perm{'vgr'}) {
+            $request->print(&submit_options($request));
+        } elsif ($command eq 'table' && $perm{'vgr'}) {
+            $request->print(&submit_options($request));
+        } elsif ($command eq 'all_for_one' && $perm{'vgr'}) {
+            $request->print(&submit_options($request));
 	} elsif ($command eq 'viewgrades' && $perm{'vgr'}) {
 	    $request->print(&viewgrades($request));
 	} elsif ($command eq 'handgrade' && $perm{'mgr'}) {
@@ -9682,7 +9535,7 @@ sub handler {
     }
     $request->print(&Apache::loncommon::end_page());
     &reset_caches();
-    return OK;
+    return '';
 }
 
 1;
@@ -9809,7 +9662,7 @@ ssi_with_retries()
 
 =item  scantron_process_students() : 
 
-   Routine that does the actual grading of the bubblesheet information.
+   Routine that does the actual grading of the bubble sheet information.
 
    The parsed scanline hash is added to %env 
 
@@ -9829,7 +9682,7 @@ ssi_with_retries()
 
 =item  scantron_upload_scantron_data() :
 
-    Creates the screen for adding a new bubblesheet data file to a course.
+    Creates the screen for adding a new bubble sheet data file to a course.
 
 =item  scantron_upload_scantron_data_save() : 
 
@@ -9843,7 +9696,7 @@ ssi_with_retries()
 =item  scantron_download_scantron_data() : 
 
    Shows a list of the three internal files (original, corrected,
-   skipped) for a specific bubblesheet data file that exists in the
+   skipped) for a specific bubble sheet data file that exists in the
    course.
 
 =item  scantron_validate_ID() :