--- loncom/homework/grades.pm	2006/04/03 20:45:38	1.347
+++ loncom/homework/grades.pm	2006/04/11 20:55:50	1.352
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.347 2006/04/03 20:45:38 banghart Exp $
+# $Id: grades.pm,v 1.352 2006/04/11 20:55:50 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -722,7 +722,14 @@ LISTJAVASCRIPT
     $gradeTable.='<label><input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> last submission only </label>'."\n".
 	'<label><input type="radio" name="lastSub" value="last" /> last submission & parts info </label>'."\n".
 	'<label><input type="radio" name="lastSub" value="datesub" /> by dates and submissions </label>'."\n".
-	'<label><input type="radio" name="lastSub" value="all" /> all details</label>'."\n".
+	'<label><input type="radio" name="lastSub" value="all" /> all details</label><br />'."\n".
+        '&nbsp;<b>Grading Increments:</b> <select name="increment">'.
+        '<option value="1">Whole Points</option>'.
+        '<option value=".5">Half Points</option>'.
+        '<option value=".25">Quarter Points</option>'.
+        '<option value=".1">Tenths of a Point</option>'.
+        '</select>'.
+
 	'<input type="hidden" name="section"     value="'.$getsec.'" />'."\n".
 	'<input type="hidden" name="submitonly"  value="'.$submitonly.'" />'."\n".
 	'<input type="hidden" name="handgrade"   value="'.$env{'form.handgrade'}.'" /><br />'."\n".
@@ -1135,6 +1142,81 @@ sub sub_page_kw_js {
     my $request = shift;
     my $iconpath = $request->dir_config('lonIconsURL');
     &commonJSfunctions($request);
+
+    my $inner_js_msg_central=<<INNERJS;
+    <script text="text/javascript">
+    function checkInput() {
+      opener.document.SCORE.msgsub.value = opener.checkEntities(document.msgcenter.msgsub.value);
+      var nmsg   = opener.document.SCORE.savemsgN.value;
+      var usrctr = document.msgcenter.usrctr.value;
+      var newval = opener.document.SCORE["newmsg"+usrctr];
+      newval.value = opener.checkEntities(document.msgcenter.newmsg.value);
+
+      var msgchk = "";
+      if (document.msgcenter.subchk.checked) {
+         msgchk = "msgsub,";
+      }
+      var includemsg = 0;
+      for (var i=1; i<=nmsg; i++) {
+          var opnmsg = opener.document.SCORE["savemsg"+i];
+          var frmmsg = document.msgcenter["msg"+i];
+          opnmsg.value = opener.checkEntities(frmmsg.value);
+          var showflg = opener.document.SCORE["shownOnce"+i];
+          showflg.value = "1";
+          var chkbox = document.msgcenter["msgn"+i];
+          if (chkbox.checked) {
+             msgchk += "savemsg"+i+",";
+             includemsg = 1;
+          }
+      }
+      if (document.msgcenter.newmsgchk.checked) {
+         msgchk += "newmsg"+usrctr;
+         includemsg = 1;
+      }
+      imgformname = opener.document.SCORE["mailicon"+usrctr];
+      imgformname.src = "$iconpath/"+((includemsg) ? "mailto.gif" : "mailbkgrd.gif");
+      var includemsg = opener.document.SCORE["includemsg"+usrctr];
+      includemsg.value = msgchk;
+
+      self.close()
+
+    }
+    </script>
+INNERJS
+
+    my $inner_js_highlight_central=<<INNERJS;
+ <script type="text/javascript">
+    function updateChoice(flag) {
+      opener.document.SCORE.kwclr.value = opener.radioSelection(document.hlCenter.kwdclr);
+      opener.document.SCORE.kwsize.value = opener.radioSelection(document.hlCenter.kwdsize);
+      opener.document.SCORE.kwstyle.value = opener.radioSelection(document.hlCenter.kwdstyle);
+      opener.document.SCORE.refresh.value = "on";
+      if (opener.document.SCORE.keywords.value!=""){
+         opener.document.SCORE.submit();
+      }
+      self.close()
+    }
+</script>
+INNERJS
+
+    my $start_page_msg_central = 
+        &Apache::loncommon::start_page('Message Central',$inner_js_msg_central,
+				       {'js_ready'  => 1,
+					'only_body' => 1,
+					'bgcolor'   =>'#FFFFFF',});
+    my $end_page_msg_central = 
+	&Apache::loncommon::end_page({'js_ready' => 1});
+
+
+    my $start_page_highlight_central = 
+        &Apache::loncommon::start_page('Highlight Central',
+				       $inner_js_highlight_central,
+				       {'js_ready'  => 1,
+					'only_body' => 1,
+					'bgcolor'   =>'#FFFFFF',});
+    my $end_page_highlight_central = 
+	&Apache::loncommon::end_page({'js_ready' => 1});
+
     my $docopen=&Apache::lonhtmlcommon::javascript_docopen();
     $docopen=~s/^document\.//;
     $request->print(<<SUBJAVASCRIPT);
@@ -1250,51 +1332,7 @@ sub sub_page_kw_js {
     pWin.focus();
     pDoc = pWin.document;
     pDoc.$docopen;
-    pDoc.write("<html><head>");
-    pDoc.write("<title>Message Central</title>");
-
-    pDoc.write("<script language=javascript>");
-    pDoc.write("function checkInput() {");
-    pDoc.write("  opener.document.SCORE.msgsub.value = opener.checkEntities(document.msgcenter.msgsub.value);");
-    pDoc.write("  var nmsg   = opener.document.SCORE.savemsgN.value;");
-    pDoc.write("  var usrctr = document.msgcenter.usrctr.value;");
-    pDoc.write("  var newval = opener.document.SCORE[\\"newmsg\\"+usrctr];");
-    pDoc.write("  newval.value = opener.checkEntities(document.msgcenter.newmsg.value);");
-
-    pDoc.write("  var msgchk = \\"\\";");
-    pDoc.write("  if (document.msgcenter.subchk.checked) {");
-    pDoc.write("     msgchk = \\"msgsub,\\";");
-    pDoc.write("  }");
-    pDoc.write("  var includemsg = 0;");
-    pDoc.write("  for (var i=1; i<=nmsg; i++) {");
-    pDoc.write("      var opnmsg = opener.document.SCORE[\\"savemsg\\"+i];");
-    pDoc.write("      var frmmsg = document.msgcenter[\\"msg\\"+i];");
-    pDoc.write("      opnmsg.value = opener.checkEntities(frmmsg.value);");
-    pDoc.write("      var showflg = opener.document.SCORE[\\"shownOnce\\"+i];");
-    pDoc.write("      showflg.value = \\"1\\";");
-    pDoc.write("      var chkbox = document.msgcenter[\\"msgn\\"+i];");
-    pDoc.write("      if (chkbox.checked) {");
-    pDoc.write("         msgchk += \\"savemsg\\"+i+\\",\\";");
-    pDoc.write("         includemsg = 1;");
-    pDoc.write("      }");
-    pDoc.write("  }");
-    pDoc.write("  if (document.msgcenter.newmsgchk.checked) {");
-    pDoc.write("     msgchk += \\"newmsg\\"+usrctr;");
-    pDoc.write("     includemsg = 1;");
-    pDoc.write("  }");
-    pDoc.write("  imgformname = opener.document.SCORE[\\"mailicon\\"+usrctr];");
-    pDoc.write("  imgformname.src = \\"$iconpath/\\"+((includemsg) ? \\"mailto.gif\\" : \\"mailbkgrd.gif\\");");
-    pDoc.write("  var includemsg = opener.document.SCORE[\\"includemsg\\"+usrctr];");
-    pDoc.write("  includemsg.value = msgchk;");
-
-    pDoc.write("  self.close()");
-
-    pDoc.write("}");
-
-    pDoc.write("<");
-    pDoc.write("/script>");
-
-    pDoc.write("</head><body bgcolor=white>");
+    pDoc.write('$start_page_msg_central');
 
     pDoc.write("<form action=\\"inactive\\" name=\\"msgcenter\\">");
     pDoc.write("<input value=\\""+usrctr+"\\" name=\\"usrctr\\" type=\\"hidden\\">");
@@ -1335,7 +1373,7 @@ sub sub_page_kw_js {
     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("</body></html>");
+    pDoc.write('$end_page_msg_central');
     pDoc.close();
 }
 
@@ -1381,26 +1419,7 @@ sub sub_page_kw_js {
     hwdWin.focus();
     var hDoc = hwdWin.document;
     hDoc.$docopen;
-    hDoc.write("<html><head>");
-    hDoc.write("<title>Highlight Central</title>");
-
-    hDoc.write("<script language=javascript>");
-    hDoc.write("function updateChoice(flag) {");
-    hDoc.write("  opener.document.SCORE.kwclr.value = opener.radioSelection(document.hlCenter.kwdclr);");
-    hDoc.write("  opener.document.SCORE.kwsize.value = opener.radioSelection(document.hlCenter.kwdsize);");
-    hDoc.write("  opener.document.SCORE.kwstyle.value = opener.radioSelection(document.hlCenter.kwdstyle);");
-    hDoc.write("  opener.document.SCORE.refresh.value = \\"on\\";");
-    hDoc.write("  if (opener.document.SCORE.keywords.value!=\\"\\"){");
-    hDoc.write("     opener.document.SCORE.submit();");
-    hDoc.write("  }");
-    hDoc.write("  self.close()");
-    hDoc.write("}");
-
-    hDoc.write("<");
-    hDoc.write("/script>");
-
-    hDoc.write("</head><body bgcolor=white>");
-
+    hDoc.write('$start_page_highlight_central');
     hDoc.write("<form action=\\"inactive\\" name=\\"hlCenter\\">");
     hDoc.write("<font color=\\"green\\" size=+1>&nbsp;Keyword Highlight Options</font><br /><br />");
 
@@ -1428,7 +1447,7 @@ sub sub_page_kw_js {
     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("</body></html>");
+    hDoc.write('$end_page_highlight_central');
     hDoc.close();
   }
 
@@ -1436,6 +1455,15 @@ sub sub_page_kw_js {
 SUBJAVASCRIPT
 }
 
+sub get_increment {
+    my $increment = $env{'form.increment'};
+    if ($increment != 1 && $increment != .5 && $increment != .25 &&
+        $increment != .1) {
+        $increment = 1;
+    }
+    return $increment;
+}
+
 #--- displays the grading box, used in essay type problem and grading by page/sequence
 sub gradeBox {
     my ($request,$symb,$uname,$udom,$counter,$partid,$record) = @_;
@@ -1458,13 +1486,16 @@ sub gradeBox {
     $result.='<table border="0"><tr><td>'.
 	'<b>Part: </b>'.$display_part.' <b>Points: </b></td><td>'."\n";
     my $ctr = 0;
+    my $thisweight = 0;
+    my $increment = &get_increment();
     $result.='<table border="0"><tr>'."\n";  # display radio buttons in a nice table 10 across
-    while ($ctr<=$wgt) {
+    while ($thisweight<=$wgt) {
 	$result.= '<td><nobr><label><input type="radio" name="RADVAL'.$counter.'_'.$partid.'" '.
 	    'onclick="javascript:writeBox(this.form,\''.$counter.'_'.$partid.'\','.
-	    $ctr.')" value="'.$ctr.'" '.
-	    ($score eq $ctr ? 'checked':'').' /> '.$ctr."</label></nobr></td>\n";
+	    $thisweight.')" value="'.$thisweight.'" '.
+	    ($score eq $thisweight ? 'checked':'').' /> '.$thisweight."</label></nobr></td>\n";
 	$result.=(($ctr+1)%10 == 0 ? '</tr><tr>' : '');
+        $thisweight += $increment;
 	$ctr++;
     }
     $result.='</tr></table>';
@@ -1934,8 +1965,8 @@ KEYWORDS
 	    '<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n";
 	$result.='&nbsp;<a href="javascript:msgCenter(document.SCORE,'.$counter.
 	    ',\''.$msgfor.'\')"; TARGET=_self>'.
-	    &mt('Compose message to student').(scalar(@col_fullnames) >= 1 ? 's' : '').'</a> ('.
-	    &mt('incl. grades').' <input type="checkbox" name="withgrades'.$counter.'" />)'.
+	    &mt('Compose message to student').(scalar(@col_fullnames) >= 1 ? 's' : '').'</a><label> ('.
+	    &mt('incl. grades').' <input type="checkbox" name="withgrades'.$counter.'" /></label>)'.
 	    '<img src="'.$request->dir_config('lonIconsURL').
 	    '/mailbkgrd.gif" width="14" height="10" name="mailicon'.$counter.'" />'."\n".
 	    '<br />&nbsp;('.
@@ -1995,6 +2026,8 @@ KEYWORDS
 	    '<input type="button" value="Next" '.
 	    'onClick="javascript:checksubmit(this.form,\'Next\');" TARGET=_self> &nbsp;';
 	$endform.='(Next and Previous (student) do not save the scores.)'."\n" ;
+        $endform.="<input type='hidden' value='".&get_increment().
+            "' name='increment' />";
 	$endform.='</td><tr></table></form>';
 	$endform.=&show_grading_menu_form($symb);
 	$request->print($endform);
@@ -4798,7 +4831,7 @@ $warning
 <input type="hidden" name="command" value="scantron_validate" />
 STUFF
     }
-    $r->print("</form><br />".&show_grading_menu_form($symb)."</body></html>");
+    $r->print("</form><br />".&show_grading_menu_form($symb));
     return '';
 }
 
@@ -4899,8 +4932,7 @@ STUFF
 	    $r->print(" this scanline saving it for later.");
 	}
     }
-    $r->print(" </form><br />".&show_grading_menu_form($symb).
-	      "</body></html>");
+    $r->print(" </form><br />".&show_grading_menu_form($symb));
     return '';
 }