--- loncom/xml/lonxml.pm	2002/01/30 16:04:04	1.151
+++ loncom/xml/lonxml.pm	2002/03/06 20:28:19	1.155
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.151 2002/01/30 16:04:04 albertel Exp $
+# $Id: lonxml.pm,v 1.155 2002/03/06 20:28:19 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -316,6 +316,8 @@ sub fontsettings() {
 
 sub registerurl {
     my $forcereg=shift;
+    my $target = shift;
+    my $result = '';
     if ($ENV{'request.publicaccess'}) {
 	return 
          '<script>function LONCAPAreg(){} function LONCAPAstale(){}</script>';
@@ -347,7 +349,7 @@ ENDGRDS
 ENDPARM
             }
 	}
-	return (<<ENDREGTHIS);
+	$result = (<<ENDREGTHIS);
      
 <script language="JavaScript">
 // BEGIN LON-CAPA Internal
@@ -399,7 +401,7 @@ ENDPARM
 ENDREGTHIS
 
     } else {
-        return (<<ENDDONOTREGTHIS);
+        $result = (<<ENDDONOTREGTHIS);
 
 <script language="JavaScript">
 // BEGIN LON-CAPA Internal
@@ -426,8 +428,30 @@ ENDREGTHIS
 // END LON-CAPA Internal
 </script>
 ENDDONOTREGTHIS
-
     }
+    if ($target eq 'edit') {
+        $result .=<<"ENDBROWSERSCRIPT";
+<script>
+    var editform;
+    function openbrowser(formname,elementname) {
+        var url = '/res/?';
+        if (editform == null) {
+            url += 'launch=1&';
+        }
+        url += 'catalogmode=interactive&';
+        url += 'mode=edit&';
+        url += 'form=' + formname + '&';
+        url += 'element=' + elementname + '';
+        var title = 'Browser';
+        var options = 'scrollbars=1,resizable=1,menubar=0';
+        options += ',width=700,height=600';
+        editform = open(url,title,options,'1');
+        editform.focus();
+    }
+</script>
+ENDBROWSERSCRIPT
+    }
+    return $result;
 }
 
 sub loadevents() {
@@ -538,7 +562,7 @@ sub inner_xmlparse {
 	    &Apache::lonxml::warning('Using tag &lt;/'.$token->[1].'&gt; as end tag to &lt;'.$$stack[-1].'&gt;');
 	    last;
 	  } else {
-	    &Apache::lonxml::warning('Found tag &lt;/'.$$stack[-1].'&gt; when looking for &lt;/'.$token->[1].'&gt; in file');
+	    &Apache::lonxml::warning('Found tag &lt;/'.$token->[1].'&gt; when looking for &lt;/'.$$stack[-1].'&gt; in file');
 	    &end_tag($stack,$parstack,$token);
 	  }
 	}
@@ -626,7 +650,7 @@ sub recurse {
 	    &Apache::lonxml::warning('Using tag &lt;/'.$tokenpat->[1].'&gt; as end tag to &lt;'.$innerstack[-1].'&gt;');
 	    last;
 	  } else {
-	    &Apache::lonxml::warning('Found tag &lt;/'.$innerstack[-1].'&gt; when looking for &lt;/'.$tokenpat->[1].'&gt; in file');
+	    &Apache::lonxml::warning('Found tag &lt;/'.$tokenpat->[1].'&gt; when looking for &lt;/'.$innerstack[-1].'&gt; in file');
 	    &end_tag(\@innerstack,\@innerparstack,$tokenpat);
 	  }
 	}
@@ -689,13 +713,13 @@ sub callsub {
     }
     if (!$deleted) {
       if ($space) {
-	#&Apache::lonxml::debug("Calling sub $sub in $space $metamode<br />\n");
+	#&Apache::lonxml::debug("Calling sub $sub in $space $metamode");
 	$sub1="$space\:\:$sub";
 	($currentstring,$nodefault) = &$sub1($target,$token,$tagstack,
 					     $parstack,$parser,$safeeval,
 					     $style);
       } else {
-	#&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode<br />\n");
+	#&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode");
 	if ($metamode <1) {
 	  if (defined($token->[4]) && ($metamode < 1)) {
 	    $currentstring = $token->[4];
@@ -978,16 +1002,8 @@ sub writeallows {
 #
 sub afterburn {
     my $result=shift;
-    foreach (split(/&/,$ENV{'QUERY_STRING'})) {
-       my ($name, $value) = split(/=/,$_);
-       $value =~ tr/+/ /;
-       $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
-       if (($name eq 'highlight')||($name eq 'anchor')||($name eq 'link')) {
-           unless ($ENV{'form.'.$name}) {
-              $ENV{'form.'.$name}=$value;
-	   }
-       }
-    }
+    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+					    ['highlight','anchor','link']);
     if ($ENV{'form.highlight'}) {
        foreach (split(/\,/,$ENV{'form.highlight'})) {
            my $anchorname=$_;
@@ -1069,10 +1085,37 @@ ENDFOOTER
       return $result;
 }
 
+sub get_target {
+  my $viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'});
+  if ( $ENV{'request.state'} eq 'published') {
+    if ( defined($ENV{'form.grade_target'})
+	 && ($viewgrades == 'F' )) {
+      return ($ENV{'form.grade_target'});
+    } elsif (defined($ENV{'form.grade_target'})) {
+      if (($ENV{'form.grade_target'} eq 'web') ||
+	  ($ENV{'form.grade_target'} eq 'tex') ) {
+	return $ENV{'form.grade_target'}
+      } else {
+	return 'web';
+      }
+    } else {
+      return 'web';
+    }
+  } elsif ($ENV{'request.state'} eq 'construct') {
+    if ( defined($ENV{'form.grade_target'})) {
+      return ($ENV{'form.grade_target'});
+    } else {
+      return 'web';
+    }
+  } else {
+    return 'web';
+  }
+}
+
 sub handler {
   my $request=shift;
 
-  my $target='web';
+  my $target=&get_target();
 
   $Apache::lonxml::debug=0;