--- loncom/xml/lonxml.pm	2004/10/12 22:25:40	1.343
+++ loncom/xml/lonxml.pm	2004/12/09 23:45:59	1.350
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.343 2004/10/12 22:25:40 albertel Exp $
+# $Id: lonxml.pm,v 1.350 2004/12/09 23:45:59 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -159,7 +159,8 @@ sub xmlbegin {
             .'<html xmlns:math="http://www.w3.org/1998/Math/MathML" ' 
 		.'xmlns="http://www.w3.org/TR/REC-html40">';
   } else {
-      $output='<html>';
+      $output='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>';
   }
   return $output;
 }
@@ -1029,6 +1030,7 @@ sub parstring {
       my $val=$token->[2]->{$_};
       $val =~ s/([\%\@\\\"\'])/\\$1/g;
       $val =~ s/(\$[^{a-zA-Z_])/\\$1/g;
+      $val =~ s/(\$)$/\\$1/;
       #if ($val =~ m/^[\%\@]/) { $val="\\".$val; }
       $temp .= "my \$$_=\"$val\";";
     }
@@ -1155,7 +1157,10 @@ sub inserteditinfo {
       if ($filetype eq 'html') {
 	  my $addbuttons=&Apache::lonhtmlcommon::htmlareaaddbuttons();
 	  $initialize=&Apache::lonhtmlcommon::htmlareaheaders().
-	      &Apache::lonhtmlcommon::spellheader().(<<FULLPAGE);
+	      &Apache::lonhtmlcommon::spellheader();
+	  if (!&Apache::lonhtmlcommon::htmlareablocked() &&
+	      &Apache::lonhtmlcommon::htmlareabrowser()) {
+	      $initialize.=(<<FULLPAGE);
 <script type="text/javascript">
 $addbuttons
 
@@ -1168,6 +1173,15 @@ $addbuttons
     }
 </script>
 FULLPAGE
+          } else {
+	      $initialize.=(<<FULLPAGE);
+<script type="text/javascript">
+$addbuttons
+    function initDocument() {
+    }
+</script>
+FULLPAGE
+	  }
           $result=~s/\<body([^\>]*)\>/\<body onload="initDocument()" $1\>/i;
 	  $xml_help=&Apache::loncommon::helpLatexCheatsheet();
       }
@@ -1324,7 +1338,11 @@ ENDNOTFOUND
 	if ($ENV{'form.editmode'} && (!($ENV{'form.viewmode'}))) {
 	    my $displayfile=$request->uri;
 	    $displayfile=~s/^\/[^\/]*//;
-	    $result='<html><body bgcolor="#FFFFFF">'.
+	    my $bodytag='<body bgcolor="#FFFFFF">';
+	    if ($ENV{'environment.remote'} eq 'off') {
+		$bodytag=&Apache::loncommon::bodytag();
+	    }
+	    $result='<html>'.$bodytag.
 		&Apache::lonxml::message_location().'<h3>'.
 		$displayfile.
 		'</h3></body></html>';
@@ -1359,13 +1377,21 @@ sub debug {
 	my $request=$Apache::lonxml::request;
 	if (!$request) { $request=Apache->request; }
 	$request->print('<font size="-2"><pre>DEBUG:'.&HTML::Entities::encode($_[0],'<>&"')."</pre></font>\n");
-#	&Apache::lonnet::logthis($_[0]);
+	#&Apache::lonnet::logthis($_[0]);
     }
 }
 
+sub show_error_warn_msg {
+    return (($Apache::lonxml::debug eq 1) ||
+	    ($ENV{'request.state'} eq 'construct') ||
+	    ($Apache::lonhomework::browse eq 'F'
+	     &&
+	     $ENV{'form.show_errors'} eq 'on'));
+}
+
 sub error {
     $errorcount++;
-    if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) {
+    if ( &show_error_warn_msg() ) {
 	# If printing in construction space, put the error inside <pre></pre>
 	push(@Apache::lonxml::error_messages,
 	     $Apache::lonxml::warnings_error_header.
@@ -1405,7 +1431,7 @@ sub warning {
     $warningcount++;
   
     if ($ENV{'form.grade_target'} ne 'tex') {
-	if ($ENV{'request.state'} eq 'construct' || $Apache::lonxml::debug) {
+	if ( &show_error_warn_msg() ) {
 	    my $request=$Apache::lonxml::request;
 	    if (!$request) { $request=Apache->request; }
 	    push(@Apache::lonxml::warning_messages,
@@ -1570,29 +1596,36 @@ sub whichuser {
   my ($passedsymb)=@_;
   my ($symb,$courseid,$domain,$name,$publicuser);
   if (defined($ENV{'form.grade_symb'})) {
-    my $tmp_courseid=$ENV{'form.grade_courseid'};
-    my $allowed=&Apache::lonnet::allowed('vgr',$tmp_courseid);
-    if ($allowed) {
-      $symb=$ENV{'form.grade_symb'};
-      $courseid=$ENV{'form.grade_courseid'};
-      $domain=$ENV{'form.grade_domain'};
-      $name=$ENV{'form.grade_username'};
-    }
-  } else {
-      if (!$passedsymb) {
-          $symb=&Apache::lonnet::symbread();
-      } else {
-          $symb=$passedsymb;
+      my ($tmp_courseid)=
+	  &Apache::loncommon::get_env_multiple('form.grade_courseid');
+      my $allowed=&Apache::lonnet::allowed('vgr',$tmp_courseid);
+      if (!$allowed && 
+	  exists($ENV{'request.course.sec'}) && 
+	  $ENV{'request.course.sec'} !~ /^\s*$/) {
+	  $allowed=&Apache::lonnet::allowed('vgr',$tmp_courseid.
+					    '/'.$ENV{'request.course.sec'});
       }
-      $courseid=$ENV{'request.course.id'};
-      $domain=$ENV{'user.domain'};
-      $name=$ENV{'user.name'};
-      if ($name eq 'public' && $domain eq 'public') {
-	  if (!defined($ENV{'form.username'})) {
-	      $ENV{'form.username'}.=time.rand(10000000);
-	  }
-	  $name.=$ENV{'form.username'};
+      if ($allowed) {
+	  ($symb)=&Apache::loncommon::get_env_multiple('form.grade_symb');
+	  $courseid=$tmp_courseid;
+	  ($domain)=&Apache::loncommon::get_env_multiple('form.grade_domain');
+	  ($name)=&Apache::loncommon::get_env_multiple('form.grade_username');
+	  return ($symb,$courseid,$domain,$name,$publicuser);
+      }
+  }
+  if (!$passedsymb) {
+      $symb=&Apache::lonnet::symbread();
+  } else {
+      $symb=$passedsymb;
+  }
+  $courseid=$ENV{'request.course.id'};
+  $domain=$ENV{'user.domain'};
+  $name=$ENV{'user.name'};
+  if ($name eq 'public' && $domain eq 'public') {
+      if (!defined($ENV{'form.username'})) {
+	  $ENV{'form.username'}.=time.rand(10000000);
       }
+      $name.=$ENV{'form.username'};
   }
   return ($symb,$courseid,$domain,$name,$publicuser);
 }