--- loncom/homework/grades.pm	2009/05/04 22:41:37	1.567
+++ loncom/homework/grades.pm	2009/06/06 19:36:37	1.574.2.2
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.567 2009/05/04 22:41:37 raeburn Exp $
+# $Id: grades.pm,v 1.574.2.2 2009/06/06 19:36:37 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2135,10 +2135,9 @@ KEYWORDS
 								   {'one_time' => 1});
 
 			    $similar="<hr /><h3><span class=\"LC_warning\">".
-				&mt('Essay is [_1]% similar to an essay by [_2] ([_3]:[_4]) in course [_5] (course id [_6]:[_7])',
+				&mt('Essay is [_1]% similar to an essay by [_2] in course [_3] (course id [_4]:[_5])',
 				    $osim,
-				    &Apache::loncommon::plainname($oname,$odom),
-				    $oname,$odom,
+				    &Apache::loncommon::plainname($oname,$odom).' ('.$oname.':'.$odom.')',
 				    $old_course_desc{'description'},
 				    $old_course_desc{'num'},
 				    $old_course_desc{'domain'}).
@@ -2297,7 +2296,7 @@ KEYWORDS
 	    '<option>7</option><option>10</option></select>'."\n";
 	my $nsel = ($env{'form.NTSTU'} ne '' ? $env{'form.NTSTU'} : '1');
 	$ntstu =~ s/<option>$nsel</<option selected="selected">$nsel</;
-	$endform.=&mt('[quant,_1,student]',$ntstu);
+        $endform.=&mt('[_1]student(s)',$ntstu);
 	$endform.='&nbsp;&nbsp;<input type="button" value="'.&mt('Previous').'" '.
 	    'onClick="javascript:checksubmit(this.form,\'Previous\');" target="_self" /> &nbsp;'."\n".
 	    '<input type="button" value="'.&mt('Next').'" '.
@@ -2463,7 +2462,7 @@ sub processHandGrade {
                                                      undef,$feedurl,undef,
                                                      undef,undef,$showsymb,
                                                      $restitle);
-		$request->print('<br />'.&mt('Sending message to [_1]:[_2]',$uname,$udom).': '.
+		$request->print('<br />'.&mt('Sending message to [_1]',$uname.':'.$udom).': '.
 				$msgstatus);
 	    }
 	    if ($env{'form.collaborator'.$ctr}) {
@@ -3681,7 +3680,7 @@ sub split_part_type {
 #
 #--- Javascript to handle csv upload
 sub csvupload_javascript_reverse_associate {
-    my $error1=&mt('You need to specify the username or ID');
+    my $error1=&mt('You need to specify the username or the student/employee ID');
     my $error2=&mt('You need to specify at least one grading field');
   return(<<ENDPICK);
   function verify(vf) {
@@ -3721,7 +3720,7 @@ ENDPICK
 }
 
 sub csvupload_javascript_forward_associate {
-    my $error1=&mt('You need to specify the username or ID');
+    my $error1=&mt('You need to specify the username or the student/employee ID');
     my $error2=&mt('You need to specify at least one grading field');
   return(<<ENDPICK);
   function verify(vf) {
@@ -4090,14 +4089,14 @@ sub csvuploadassign {
 	   $countdone++;
         }
     }
-    $request->print('<br /><span class="LC_info">'.&mt("Saved [_1] students",$countdone)."</span>\n");
+    $request->print('<br />'.&Apache::lonhtmlcommon::confirm_success(&mt("Saved scores for [quant,_1,student]",$countdone),$countdone==0));
     if (@skipped) {
-	$request->print('<p><span class="LC_warning">'.&mt('Skipped Students').'</span></p>');
-	foreach my $student (@skipped) { $request->print("$student<br />\n"); }
+	$request->print('<br />'.&Apache::lonhtmlcommon::confirm_success(&mt('No scores stored for the following username(s):'),1).'<br />');
+        $request->print(join(', ',@skipped));
     }
     if (@notallowed) {
-	$request->print('<p><span class="LC_error">'.&mt('Students Not Allowed to Modify').'</span></p>');
-	foreach my $student (@notallowed) { $request->print("$student<br />\n"); }
+	$request->print('<br />'.&Apache::lonhtmlcommon::confirm_success(&mt('Modification of scores not allowed for the following username(s):'),1).'<br />');
+	$request->print(join(', ',@notallowed));
     }
     $request->print("<br />\n");
     $request->print(&show_grading_menu_form($symb));
@@ -5069,10 +5068,10 @@ sub scantron_selectphase {
             <td> '.&mt('Sequence to grade:').' </td><td> '.$sequence_selector.' </td>
        '.&Apache::loncommon::end_data_table_row().'
        '.&Apache::loncommon::start_data_table_row().'
-            <td> '.&mt('Filename of scoring office file:').' </td><td> '.$file_selector.' </td>
+            <td> '.&mt('Filename of bubblesheet data file:').' </td><td> '.$file_selector.' </td>
        '.&Apache::loncommon::end_data_table_row().'
        '.&Apache::loncommon::start_data_table_row().'
-            <td> '.&mt('Format of data file:').' </td><td> '.$format_selector.' </td>
+            <td> '.&mt('Format of bubblesheet data file:').' </td><td> '.$format_selector.' </td>
        '.&Apache::loncommon::end_data_table_row().'
        '.&Apache::loncommon::start_data_table_row().'
             <td> '.&mt('Saved CODEs to validate against:').' </td><td> '.$CODE_selector.' </td>
@@ -5090,7 +5089,7 @@ sub scantron_selectphase {
        '.&Apache::loncommon::end_data_table_row().'
        '.&Apache::loncommon::start_data_table_row().'
             <td colspan="2">
-              <input type="submit" value="'.&mt('Grading: Validate Scantron Records').'" />
+              <input type="submit" value="'.&mt('Grading: Validate Bubblesheet Records').'" />
             </td>
        '.&Apache::loncommon::end_data_table_row().'
     '.&Apache::loncommon::end_data_table().'
@@ -5109,7 +5108,7 @@ sub scantron_selectphase {
     '.&Apache::loncommon::start_data_table('LC_scantron_action').'
        '.&Apache::loncommon::start_data_table_header_row().'
             <th>
-              &nbsp;'.&mt('Specify a Scantron data file to upload.').'
+              &nbsp;'.&mt('Specify a bubblesheet data file to upload.').'
             </th>
        '.&Apache::loncommon::end_data_table_header_row().'
        '.&Apache::loncommon::start_data_table_row().'
@@ -5136,7 +5135,7 @@ sub scantron_selectphase {
                 <input name="command" value="scantronupload_save" type="hidden" />
                 '.&mt('File to upload: [_1]','<input type="file" name="upfile" size="50" />').'
                 <br />
-                <input type="button" onClick="javascript:checkUpload(this.form);" value="'.&mt('Upload Scantron Data').'" />
+                <input type="button" onClick="javascript:checkUpload(this.form);" value="'.&mt('Upload Bubblesheet Data').'" />
               </form>
 ');
 
@@ -5178,7 +5177,7 @@ sub scantron_selectphase {
              &Apache::loncommon::start_data_table('LC_scantron_action')."\n".
              &Apache::loncommon::start_data_table_header_row()."\n".
              '<th colspan="2">
-              &nbsp;'.&mt('Review scantron data and submissions for a previously graded folder/sequence')."\n".
+              &nbsp;'.&mt('Review bubblesheet data and submissions for a previously graded folder/sequence')."\n".
              '</th>'."\n".
               &Apache::loncommon::end_data_table_header_row()."\n".
               &Apache::loncommon::start_data_table_row()."\n".
@@ -5241,7 +5240,7 @@ sub scantron_selectphase {
       CODEstart   - (only matter if a CODE exists) column in the line where
                      the CODE starts
       CODElength  - length of the CODE
-      IDstart     - column where the student/employee ID number starts
+      IDstart     - column where the student/employee ID starts
       IDlength    - length of the student/employee ID info
       Qstart      - column where the information from the bubbled
                     'questions' start
@@ -5341,7 +5340,7 @@ sub username_to_idmap {
     $whichline         - line number of the passed in scanline
     $field             - type of change to process 
                          (either 
-                          'ID'     -> correct the student/employee ID number
+                          'ID'     -> correct the student/employee ID
                           'CODE'   -> correct the CODE
                           'answer' -> fixup the submitted answers)
     
@@ -6251,7 +6250,7 @@ sub scantron_validate_file {
                   '<input type="radio" name="verifyrecord" value="0" checked="checked" />'.&mt('No').
                   '</label></span><br />'.
                   &mt('Grading will take longer if you use verification.').'<br />'.
-                  &mt("Alternatively, the 'Review scantron data' utility (see grading menu) can be used for all students after grading is complete.").'<br /><br />'.
+                  &mt("Alternatively, the 'Review bubblesheet data' utility (see grading menu) can be used for all students after grading is complete.").'<br /><br />'.
                   '<input type="submit" name="submit" value="'.&mt('Start Grading').'" />'.
                   '<input type="hidden" name="command" value="scantron_process" />'."\n");
     } else {
@@ -6777,10 +6776,10 @@ sub scantron_get_correction {
 	    if ($closest > 0) {
 		foreach my $testcode (@{$closest}) {
 		    my $checked='';
-		    if (!$i) { $checked=' checked="checked" '; }
+		    if (!$i) { $checked=' checked="checked"'; }
 		    $r->print("
    <label>
-       <input type='radio' name='scantron_CODE_resolution' value='use_closest_$i' $checked />
+       <input type='radio' name='scantron_CODE_resolution' value='use_closest_$i'$checked />
        ".&mt("Use the similar CODE [_1] instead.",
 	    "<b><tt>".$testcode."</tt></b>")."
     </label>
@@ -6791,10 +6790,10 @@ sub scantron_get_correction {
 	    }
 	}
 	if ($$scan_record{'scantron.CODE'}=~/\S/ ) {
-	    my $checked; if (!$i) { $checked=' checked="checked" '; }
+	    my $checked; if (!$i) { $checked=' checked="checked"'; }
 	    $r->print("
     <label>
-        <input type='radio' name='scantron_CODE_resolution' value='use_unfound' $checked />
+        <input type='radio' name='scantron_CODE_resolution' value='use_unfound'$checked />
        ".&mt("Use the CODE [_1] that is was on the paper, ignoring the error.",
 	     "<b><tt>".$$scan_record{'scantron.CODE'}."</tt></b>")."
     </label>");
@@ -7018,7 +7017,7 @@ sub prompt_for_corrections {
             ($responsetype_per_response{$question-1} eq 'imageresponse') ||
             ($responsetype_per_response{$question-1} eq 'reactionresponse') ||
             ($responsetype_per_response{$question-1} eq 'organicresponse')) {
-            $r->print(&mt("Although this particular question type requires handgrading, the instructions for this question in the exam directed students to leave [quant,_1,line] blank on their scantron sheets.",$lines).'<br /><br />'.&mt('A non-zero score can be assigned to the student during scantron grading by selecting a bubble in at least one line.').'<br />'.&mt('The score for this question will be a sum of the numeric values for the selected bubbles from each line, where A=1 point, B=2 points etc.').'<br />'.&mt("To assign a score of zero for this question, mark all lines as 'No bubble'.").'<br /><br />');
+            $r->print(&mt("Although this particular question type requires handgrading, the instructions for this question in the exam directed students to leave [quant,_1,line] blank on their bubblesheets.",$lines).'<br /><br />'.&mt('A non-zero score can be assigned to the student during bubblesheet grading by selecting a bubble in at least one line.').'<br />'.&mt('The score for this question will be a sum of the numeric values for the selected bubbles from each line, where A=1 point, B=2 points etc.').'<br />'.&mt("To assign a score of zero for this question, mark all lines as 'No bubble'.").'<br /><br />');
         } else {
             $r->print(&mt("Select at most one bubble in a single line and select 'No Bubble' in all the other lines. ")."<br />");
         }
@@ -7787,37 +7786,25 @@ sub scantron_upload_scantron_data_save {
 	return '';
     }
     my %coursedata=&Apache::lonnet::coursedescription($env{'form.domainid'}.'_'.$env{'form.courseid'});
+    my $uploadedfile;
     $r->print('<h3>'.&mt("Uploading file to [_1]",$coursedata{'description'}).'</h3>');
-    my $fname=$env{'form.upfile.filename'};
-    #FIXME
-    #copied from lonnet::userfileupload()
-    #make that function able to target a specified course
-    # Replace Windows backslashes by forward slashes
-    $fname=~s/\\/\//g;
-    # Get rid of everything but the actual filename
-    $fname=~s/^.*\/([^\/]+)$/$1/;
-    # Replace spaces by underscores
-    $fname=~s/\s+/\_/g;
-    # Replace all other weird characters by nothing
-    $fname=~s/[^\w\.\-]//g;
-    # See if there is anything left
-    unless ($fname) { return 'error: no uploaded file'; }
-    my $uploadedfile=$fname;
-    $fname='scantron_orig_'.$fname;
     if (length($env{'form.upfile'}) < 2) {
-	$r->print(&mt("<span class=\"LC_error\">Error:</span> The file you attempted to upload, [_1]  contained no information. Please check that you entered the correct filename.",'<span class="LC_filename">'.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"')."</span>"));
+        $r->print(&mt('[_1]Error:[_2] The file you attempted to upload, [_3] contained no information. Please check that you entered the correct filename.','<span class="LC_error">','</span>','<span class="LC_filename">'.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').'</span>'));
     } else {
-	my $result=&Apache::lonnet::finishuserfileupload($env{'form.courseid'},$env{'form.domainid'},'upfile',$fname);
-	if ($result =~ m|^/uploaded/|) {
+        my $result = 
+            &Apache::lonnet::userfileupload('upfile','','scantron','','','',
+                                            $env{'form.courseid'},$env{'form.domainid'});
+	if ($result =~ m{^/uploaded/}) {
 	    $r->print(&mt('[_1]Success:[_2] Successfully uploaded [_3] bytes of data into location: [_4]',
                           '<span class="LC_success">','</span>',(length($env{'form.upfile'})-1),
 			  '<span class="LC_filename">'.$result.'</span>'));
+            ($uploadedfile) = ($result =~ m{/([^/]+)$});
             $r->print(&validate_uploaded_scantron_file($env{'form.domainid'},
-                                                       $env{'form.courseid'},$fname));
+                                                       $env{'form.courseid'},$uploadedfile));
 	} else {
 	    $r->print(&mt('[_1]Error:[_2] An error ([_3]) occurred when attempting to upload the file, [_4]',
                           '<span class="LC_error">','</span>',$result,
-			  '<span class="LC_filename">'.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"')."</span>"));
+			  '<span class="LC_filename">'.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').'</span>'));
 	}
     }
     if ($symb) {
@@ -8089,10 +8076,10 @@ sub checkscantron_results {
             }
         }
     }
-    $r->print('<p>'.&mt('Comparison of scantron 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('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 scantron data and submissions are as follows:').'<br /><br />');
+        $r->print(&mt('Students with exact correspondence between bubblesheet data and submissions are as follows:').'<br /><br />');
         $r->print(&Apache::loncommon::start_data_table()."\n".
                  &Apache::loncommon::start_data_table_header_row()."\n".
                  '<th>'.&mt('Source').'</th><th>'.&mt('Bubble records').'</th><th>'.&mt('Name').'</th><th>'.&mt('ID').'</th>'.
@@ -8101,14 +8088,14 @@ sub checkscantron_results {
                  &Apache::loncommon::end_data_table().'<br />');
     }
     if ($failed) {
-        $r->print(&mt('Students with differences between scantron data and submissions are as follows:').'<br /><br />');
+        $r->print(&mt('Students with differences between bubblesheet data and submissions are as follows:').'<br /><br />');
         $r->print(&Apache::loncommon::start_data_table()."\n".
                  &Apache::loncommon::start_data_table_header_row()."\n".
                  '<th>'.&mt('Source').'</th><th>'.&mt('Bubble records').'</th><th>'.&mt('Name').'</th><th>'.&mt('ID').'</th>'.
                  &Apache::loncommon::end_data_table_header_row()."\n".
                  $badstudents."\n".
                  &Apache::loncommon::end_data_table()).'<br />'.
-                 &mt('Differences can occur if submissions were modified using manual grading after a scantron grading pass.').'<br />'.&mt('If unexpected discrepancies were detected, it is recommended that you inspect the original scantron sheets.');  
+                 &mt('Differences can occur if submissions were modified using manual grading after a bubblesheet grading pass.').'<br />'.&mt('If unexpected discrepancies were detected, it is recommended that you inspect the original bubblesheets.');  
     }
     $r->print('</form><br />'.$grading_menu_button);
     return;
@@ -8291,50 +8278,36 @@ sub grading_menu {
                   'saveState'=>"",
                   'gradingMenu'=>1,
                   'showgrading'=>"yes");
-    
-    my $url1 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    
+    my $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
+    my @menu = ({ url => $url,
+                     name => &mt('Manual Grading/View Submissions'),
+                     short_description =>
+    &mt('Start the process of hand grading submissions.'),
+                 });
     $fields{'command'} = 'csvform';
-    my $url2 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    
+    $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
+    push(@menu, { url => $url,
+                   name => &mt('Upload Scores'),
+                   short_description =>
+            &mt('Specify a file containing the class scores for current resource.')});
     $fields{'command'} = 'processclicker';
-    my $url3 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    
+    $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
+    push(@menu, { url => $url,
+                   name => &mt('Process Clicker'),
+                   short_description =>
+            &mt('Specify a file containing the clicker information for this resource.')});
     $fields{'command'} = 'scantron_selectphase';
-    my $url4 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    
-    my @menu = ({	categorytitle=>'Course Grading',
-            items =>[
-                        {	linktext => 'Manual Grading/View Submissions',
-                    		url => $url1,
-                    		permission => 'F',
-                    		icon => 'edit-find-replace.png',
-                    		linktitle => 'Start the process of hand grading submissions.'
-                        },
-                	    {	linktext => 'Upload Scores',
-                    		url => $url2,
-                    		permission => 'F',
-                    		icon => 'uploadscores.png',
-                    		linktitle => 'Specify a file containing the class scores for current resource.'
-                	    },
-                	    {	linktext => 'Process Clicker',
-                    		url => $url3,
-                    		permission => 'F',
-                    		icon => 'addClickerInfoFile.png',
-                    		linktitle => 'Specify a file containing the clicker information for this resource.'
-                	    },
-                	    {	linktext => 'Grade/Manage/Review Scantron Forms',
-                    		url => $url4,
-                    		permission => 'F',
-                    		icon => 'stat.png',
-                    		linktitle => 'Grade scantron exams, upload/download scantron data files, and review previously graded scantron exams.'
-                	    }
-                    ]
-            });
-
-    #$fields{'command'} = 'verify';
-    #$url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    #
+    $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
+    push(@menu, { url => $url,
+                   name => &mt('Grade/Manage/Review Scantron Forms'),
+                   short_description =>
+            &mt('Grade scantron exams, upload/download scantron data files, and review previously graded scantron exams.')});
+    $fields{'command'} = 'verify';
+    $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
+    push(@menu, { url => "",
+                   name => &mt('Verify Receipt'),
+                   short_description =>
+            &mt('')});
     # Create the menu
     my $Str;
     # $Str .= '<h2>'.&mt('Please select a grading task').'</h2>';
@@ -8346,15 +8319,24 @@ sub grading_menu {
 	'<input type="hidden" name="saveState"   value="" />'."\n".
 	'<input type="hidden" name="gradingMenu" value="1" />'."\n".
 	'<input type="hidden" name="showgrading" value="yes" />'."\n";
-
-    $Str .= Apache::lonhtmlcommon::generate_menu(@menu);
-    #$menudata->{'jscript'}
-    $Str .='<hr /><input type="button" value="'.&mt('Verify Receipt').'" '.
-        ' onClick="javascript:checkChoice(document.forms.gradingMenu,\'5\',\'verify\')" '.
-        ' /> '.
-        &Apache::lonnet::recprefix($env{'request.course.id'}).
-        '-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')" />';
-
+    foreach my $menudata (@menu) {
+        if ($menudata->{'name'} ne &mt('Verify Receipt')) {
+            $Str .='    <h3><a '.
+                $menudata->{'jscript'}.
+                ' href="'.
+                $menudata->{'url'}.'" >'.
+                $menudata->{'name'}."</a></h3>\n";
+        } else {
+            $Str .='<hr /><input type="button" value="'.&mt('Verify Receipt').'" '.
+                $menudata->{'jscript'}.
+                ' onClick="javascript:checkChoice(document.forms.gradingMenu,\'5\',\'verify\')" '.
+                ' /> '.
+                &Apache::lonnet::recprefix($env{'request.course.id'}).
+                    '-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')" />';
+        }
+        $Str .= '    '.('&nbsp;'x8).$menudata->{'short_description'}.
+            "\n";
+    }
     $Str .="</form>\n";
     my $receiptalert = &mt("Please enter a receipt number given by a student in the receipt box.");
     $request->print(<<GRADINGMENUJS);
@@ -8471,91 +8453,102 @@ GRADINGMENUJS
 	'<input type="hidden" name="showgrading" value="yes" />'."\n";
 
     $result.='
-<h2>
-  '.&mt('Grade Current Resource').'
-</h2>
-<div>
-  '.$table.'
-</div>
-
-<div class="LC_columnSection">
-  
-    <fieldset>
-      <legend>
-       '.&mt('Sections').'
-      </legend>
-      <select name="section" multiple="multiple" size="5">'."\n";
-    $result.= $selsec;
+    <div class="LC_grade_select_mode">
+      <div class="LC_grade_select_mode_current">
+        <h2>
+          '.&mt('Grade Current Resource').'
+        </h2>
+        <div class="LC_grade_select_mode_body">
+          <div class="LC_grades_resource_info">
+           '.$table.'
+          </div>
+          <div class="LC_grade_select_mode_selector">
+             <div class="LC_grade_select_mode_selector_header">
+                '.&mt('Sections').'
+             </div>
+             <div class="LC_grade_select_mode_selector_body">
+               <select name="section" multiple="multiple" size="5">'."\n";
+    if (ref($sections)) {
+        foreach my $section (sort(@$sections)) {
+            $result.='<option value="'.$section.'" '.
+                ($saveSec eq $section ? 'selected="selected"':'').'>'.$section.'</option>'."\n";
+        }
+    }
     $result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="selected"' : ''). '>all</option></select> &nbsp; ';
     $result.='
-    </fieldset>
-  
-    <fieldset>
-      <legend>
-        '.&mt('Groups').'
-      </legend>
-      '.&Apache::lonstatistics::GroupSelect('group','multiple',5).'
-    </fieldset>
-  
-    <fieldset>
-      <legend>
-        '.&mt('Access Status').'
-      </legend>
-      '.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,5,undef,'mult').'
-    </fieldset>
-  
-    <fieldset>
-      <legend>
-        '.&mt('Submission Status').'
-      </legend>
-      <select name="submitonly" size="5">
-	         <option value="yes" '.      ($saveSub eq 'yes'       ? 'selected="selected"' : '').'>'.&mt('with submissions').'</option>
-	         <option value="queued" '.   ($saveSub eq 'queued'    ? 'selected="selected"' : '').'>'.&mt('in grading queue').'</option>
-	         <option value="graded" '.   ($saveSub eq 'graded'    ? 'selected="selected"' : '').'>'.&mt('with ungraded submissions').'</option>
-	         <option value="incorrect" '.($saveSub eq 'incorrect' ? 'selected="selected"' : '').'>'.&mt('with incorrect submissions').'</option>
+             </div>
+          </div>
+          <div class="LC_grade_select_mode_selector">
+             <div class="LC_grade_select_mode_selector_header">
+                '.&mt('Groups').'
+             </div>
+             <div class="LC_grade_select_mode_selector_body">
+                '.&Apache::lonstatistics::GroupSelect('group','multiple',5).'
+             </div>
+          </div>
+          <div class="LC_grade_select_mode_selector">
+             <div class="LC_grade_select_mode_selector_header">
+                '.&mt('Access Status').'
+             </div>
+             <div class="LC_grade_select_mode_selector_body">
+                '.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,5,undef,'mult').'
+             </div>
+          </div>
+          <div class="LC_grade_select_mode_selector">
+             <div class="LC_grade_select_mode_selector_header">
+                '.&mt('Submission Status').'
+             </div>
+             <div class="LC_grade_select_mode_selector_body">
+               <select name="submitonly" size="5">
+                 <option value="yes" '.      ($saveSub eq 'yes'       ? 'selected="selected"' : '').'>'.&mt('with submissions').'</option>
+                 <option value="queued" '.   ($saveSub eq 'queued'    ? 'selected="selected"' : '').'>'.&mt('in grading queue').'</option>
+                 <option value="graded" '.   ($saveSub eq 'graded'    ? 'selected="selected"' : '').'>'.&mt('with ungraded submissions').'</option>
+                 <option value="incorrect" '.($saveSub eq 'incorrect' ? 'selected="selected"' : '').'>'.&mt('with incorrect submissions').'</option>
                  <option value="all" '.      ($saveSub eq 'all'       ? 'selected="selected"' : '').'>'.&mt('with any status').'</option>
-      </select>
-    </fieldset>
-  
-</div>
-
-<br />
-          <div>
-            <div>
+               </select>
+             </div>
+          </div>
+          <div class="LC_grade_select_mode_type_body">
+            <div class="LC_grade_select_mode_type">
               <label>
                 <input type="radio" name="radioChoice" value="submission" '.
                   ($saveCmd eq 'submission' ? 'checked="checked"' : '').' /> '.
              &mt('Select individual students to grade and view submissions.').'
-	      </label> 
+              </label>
             </div>
-            <div>
-	      <label>
+            <div class="LC_grade_select_mode_type">
+              <label>
                 <input type="radio" name="radioChoice" value="viewgrades" '.
                   ($saveCmd eq 'viewgrades' ? 'checked="checked"' : '').' /> '.
                     &mt('Grade all selected students in a grading table.').'
               </label>
             </div>
-            <div>
-	      <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next').' &rarr;" />
+            <div class="LC_grade_select_mode_type">
+              <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next-&gt;').'" />
             </div>
           </div>
-
-
+        </div>
+      </div>
+      <div class="LC_grade_select_mode_page">
         <h2>
          '.&mt('Grade Complete Folder for One Student').'
         </h2>
-        <div>
-            <div>
+        <div class="LC_grades_select_mode_body">
+          <div class="LC_grade_select_mode_type_body">
+            <div class="LC_grade_select_mode_type">
               <label>
                 <input type="radio" name="radioChoice" value="pickStudentPage" '.
-	  ($saveCmd eq 'pickStudentPage' ? 'checked="checked"' : '').' /> '.
+          ($saveCmd eq 'pickStudentPage' ? 'checked="checked"' : '').' /> '.
   &mt('The <b>complete</b> page/sequence/folder: For one student').'
               </label>
             </div>
-            <div>
-	      <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next').' &rarr;" />
+            <div class="LC_grade_select_mode_type">
+              <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next-&gt;').'" />
             </div>
+          </div>
         </div>
+      </div>
+    </div>
   </form>';
     $result .= &show_grading_menu_form($symb);
     return $result;
@@ -8669,7 +8662,7 @@ sub process_clicker {
     my %checked;
     foreach my $gradingmechanism ('attendance','personnel','specific','given') {
        if ($env{'form.gradingmechanism'} eq $gradingmechanism) {
-          $checked{$gradingmechanism}="checked='checked'";
+          $checked{$gradingmechanism}=' checked="checked"';
        }
     }
 
@@ -8733,11 +8726,11 @@ function sanitycheck() {
 <input type="hidden" name="saveState"  value="$env{'form.saveState'}" />
 <input type="file" name="upfile" size="50" />
 <br /><label>$type: $selectform</label>
-<br /><label><input type="radio" name="gradingmechanism" value="attendance" $checked{'attendance'} onClick="sanitycheck()" />$attendance </label>
-<br /><label><input type="radio" name="gradingmechanism" value="personnel" $checked{'personnel'} onClick="sanitycheck()" />$personnel</label>
-<br /><label><input type="radio" name="gradingmechanism" value="specific" $checked{'specific'} onClick="sanitycheck()" />$specific </label>
+<br /><label><input type="radio" name="gradingmechanism" value="attendance"$checked{'attendance'} onClick="sanitycheck()" />$attendance </label>
+<br /><label><input type="radio" name="gradingmechanism" value="personnel"$checked{'personnel'} onClick="sanitycheck()" />$personnel</label>
+<br /><label><input type="radio" name="gradingmechanism" value="specific"$checked{'specific'} onClick="sanitycheck()" />$specific </label>
 <input type="text" name="specificid" value="$env{'form.specificid'}" size="20" />
-<br /><label><input type="radio" name="gradingmechanism" value="given" $checked{'given'} onClick="sanitycheck()" />$given </label>
+<br /><label><input type="radio" name="gradingmechanism" value="given"$checked{'given'} onClick="sanitycheck()" />$given </label>
 <br />&nbsp;&nbsp;&nbsp;
 <input type="text" name="givenanswer" size="50" />
 <input type="hidden" name="waschecked" value="$env{'form.gradingmechanism'}" />