--- loncom/homework/response.pm	2012/10/12 12:45:46	1.231
+++ loncom/homework/response.pm	2015/02/22 01:34:48	1.240
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # various response type definitons response definition
 #
-# $Id: response.pm,v 1.231 2012/10/12 12:45:46 raeburn Exp $
+# $Id: response.pm,v 1.240 2015/02/22 01:34:48 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -56,6 +56,7 @@ use Apache::lonnet;
 use Apache::inputtags();
 use Apache::lonmaxima();
 use Apache::lonr();
+use Apache::lontexconvert();
 
 BEGIN {
     &Apache::lonxml::register('Apache::response',('responseparam','parameter','dataresponse','customresponse','mathresponse'));
@@ -180,7 +181,6 @@ sub setrandomnumber {
     } else {
 	($rndmod,$rndmod2)=&Apache::lonnet::digest("$id1,$id2");
     }
-    $Apache::lonhomework::results{'resource.'.$id1.'.rawrndseed'}=$rndseed;
     if ($rndseed =~/([,:])/) {
 	my $char=$1;
 	use integer;
@@ -197,7 +197,6 @@ sub setrandomnumber {
 	}
     }
     &Apache::lonxml::debug("randseed $rndmod $rndseed");
-    $Apache::lonhomework::results{'resource.'.$id1.'.rndseed'}=$rndseed;
     &Apache::lonnet::setup_random_from_rndseed($rndseed);
     return '';
 }
@@ -399,7 +398,7 @@ sub end_dataresponse {
 		    $Apache::lonhomework::results{"resource.$partid.$id.awarddetail"}='SUBMITTED';
 		}
 	    } else {
-		$result='Not Permitted to change values.'
+                $result=&mt('Not Permitted to change values');
 	    }
 	}
     }
@@ -469,6 +468,18 @@ sub end_customresponse {
 		$error = $award;
 		$award = 'ERROR';
 	    }
+            if (($award eq 'INCORRECT' || $award eq 'APPROX_ANS' ||
+                 $award eq 'EXACT_ANS')) {
+                if ($Apache::lonhomework::type eq 'survey') {
+                    $award='SUBMITTED';
+                } elsif ($Apache::lonhomework::type eq 'surveycred') {
+                    $award='SUBMITTED_CREDIT';
+                } elsif ($Apache::lonhomework::type eq 'anonsurvey') {
+                    $award='ANONYMOUS';
+                } elsif ($Apache::lonhomework::type eq 'anonsurveycred') {
+                    $award='ANONYMOUS_CREDIT';
+                }
+            }
 	    &Apache::response::handle_previous(\%previous,$award);
 	    $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=
 		$award;
@@ -565,20 +576,61 @@ sub start_mathresponse {
 }
 
 sub edit_mathresponse_button {
-    my ($id,$field)=@_;
-    my $button=&mt('Edit Answer');
-#    my $helplink=&Apache::loncommon::help_open_topic('Formula_Editor');
-    my $iconpath=$Apache::lonnet::perlvar{'lonIconsURL'};
-    return(<<ENDFORMULABUTTON);
+    my ($partid,$id)=@_;
+    my $field = 'HWVAL_'.$partid.'_'.$id;
+    my $btype = $env{'browser.type'};
+    my $bversion = $env{'browser.version'};
+    if (($btype eq 'explorer' && $bversion < 9) || ($btype eq 'safari' && $bversion < 3) ||
+        ($btype eq 'mozilla' && $bversion < 3)) {
+      # DragMath applet
+      my $button=&mt('Edit Answer');
+#     my $helplink=&Apache::loncommon::help_open_topic('Formula_Editor');
+      my $iconpath=$Apache::lonnet::perlvar{'lonIconsURL'};
+      return(<<ENDFORMULABUTTON);
 <script type="text/javascript" language="JavaScript">
-function edit_${id}_${field} (textarea) {
-    thenumber = textarea;
-    thedata = document.forms['lonhomework'].elements[textarea].value;
-    newwin = window.open("/adm/dragmath/applet/MaximaPopup.html","","width=565,height=400,resizable");
+function LC_mathedit_${field} (LCtextline) {
+    thenumber = LCtextline;
+    var thedata = '';
+    if (document.getElementById(LCtextline)) {
+        thedata = document.getElementById(LCtextline).value;
+    }
+    newwin = window.open("/adm/dragmath/MaximaPopup.html","","width=565,height=400,resizable");
 }
 </script>
-<a href="javascript:edit_${id}_${field}('${field}');void(0);"><img class="stift" src="$iconpath/stift.gif" alt="$button" title="$button" /></a>
+<a href="javascript:LC_mathedit_${field}('${field}');void(0);"><img class="stift" src="$iconpath/stift.gif" alt="$button" title="$button" /></a>
 ENDFORMULABUTTON
+      
+    } else {
+        # LON-CAPA math equation editor
+        my $mathjaxjs;
+        unless (lc(&Apache::lontexconvert::tex_engine()) eq 'mathjax') {
+            $mathjaxjs = <<"MATHJAX_SCRIPT";
+var mathjaxscript = document.createElement("script");
+    mathjaxscript.type = "text/javascript";
+    mathjaxscript.src = "/adm/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
+    document.body.appendChild(mathjaxscript);
+MATHJAX_SCRIPT
+        }
+        return(<<EQ_EDITOR_SCRIPT);
+<script type="text/javascript">
+  var LCmathField = document.getElementById('${field}');
+  LCmathField.className += ' math'; // note the space
+  LCmathField.setAttribute('data-implicit_operators', 'true');
+  var LCMATH_started;
+  if (typeof LCMATH_started === 'undefined') {
+    $mathjaxjs
+    LCMATH_started = true;
+    var script = document.createElement("script");
+    script.type = "text/javascript";
+    script.src = "/adm/LC_math_editor/LC_math_editor.min.js";
+    document.body.appendChild(script);
+    window.addEventListener('load', function(e) {
+        LCMATH.initEditors();
+    }, false);
+  }
+</script>
+EQ_EDITOR_SCRIPT
+    }
 }
 
 sub end_mathresponse {
@@ -614,6 +666,18 @@ sub end_mathresponse {
 		$error = $award;
 		$award = 'ERROR';
 	    }
+            if (($award eq 'INCORRECT' || $award eq 'APPROX_ANS' ||
+                 $award eq 'EXACT_ANS')) {
+                if ($Apache::lonhomework::type eq 'survey') {
+                    $award='SUBMITTED';
+                } elsif ($Apache::lonhomework::type eq 'surveycred') {
+                    $award='SUBMITTED_CREDIT';
+                } elsif ($Apache::lonhomework::type eq 'anonsurvey') {
+                    $award='ANONYMOUS';
+                } elsif ($Apache::lonhomework::type eq 'anonsurveycred') {
+                    $award='ANONYMOUS_CREDIT';
+                }
+            }
 	    &Apache::response::handle_previous(\%previous,$award);
 	    $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=
 		$award;
@@ -629,7 +693,7 @@ sub end_mathresponse {
         my $id = $Apache::inputtags::response[-1];
         if (($Apache::inputtags::status['-1'] eq 'CAN_ANSWER')
            && (&Apache::lonnet::EXT('resource.'.$partid.'_'.$id.'.turnoffeditor') ne 'yes')) {
-            $result.=&edit_mathresponse_button($id,"HWVAL_$id");
+            $result.=&edit_mathresponse_button($partid,$id);
         }
     }
 
@@ -839,8 +903,8 @@ sub answer_header {
 	if ($Apache::lonhomework::type eq 'exam') {
 	    $bit = ($Apache::lonxml::counter+$increment).') ';
 	} else {
-	    $bit .= ' Answer for Part: \verb|'.
-		$Apache::inputtags::part.'| ';
+            $bit .= ' '.&mt('Answer for Part: [_1]',
+                                '\verb|'.$Apache::inputtags::part.'|').' ';
 	}
 	push(@answer_bits,$bit);
     } else {
@@ -1135,7 +1199,6 @@ sub scored_response {
 sub whichorder {
     my ($max,$randomize,$showall,$hash,$rndseed)=@_;
     #&Apache::lonxml::debug("man $max randomize $randomize");
-    if (!defined(@{ $$hash{'names'} })) { return; }
     my @names;
     if (ref($hash->{'names'}) eq 'ARRAY') {
         @names = @{$hash->{'names'}};
@@ -1356,7 +1419,7 @@ sub check_status {
     if (!defined($id)) { $id=$Apache::inputtags::part; }
     my $curtime=&Apache::lonnet::EXT('system.time');
     my $opendate=&Apache::lonnet::EXT("resource.$id.opendate");
-    my $duedate=&Apache::lonnet::EXT("resource.$id.duedate");
+    my $duedate=&Apache::lonhomework::due_date($id);
     my $answerdate=&Apache::lonnet::EXT("resource.$id.answerdate");
     if ( $opendate && $curtime > $opendate &&
          $duedate && $curtime > $duedate &&