--- loncom/homework/bridgetask.pm	2006/11/14 23:04:56	1.207
+++ loncom/homework/bridgetask.pm	2006/11/27 23:33:01	1.210
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA 
 # definition of tags that give a structure to a document
 #
-# $Id: bridgetask.pm,v 1.207 2006/11/14 23:04:56 albertel Exp $
+# $Id: bridgetask.pm,v 1.210 2006/11/27 23:33:01 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -380,6 +380,13 @@ sub nest {
     }
 }
 
+sub start_delay {
+    push(@delay,1);
+}
+sub end_delay {
+    pop(@delay);
+}
+
 sub nested_parse {
     my ($str,$env,$args) = @_;
     my @old_env = @Apache::scripttag::parser_env;
@@ -791,6 +798,9 @@ sub start_Task {
 	if ($target eq 'webgrade') {
 	    $result.="\n".'<div id="LC_GRADING_criterialist">';
 	    &Apache::lonxml::startredirection();
+	    &start_delay();
+	    $dimension{$top}{'result'}=$result;
+	    undef($result);
 	}
     } elsif ($target eq 'edit') {
 	$result.=$form_tag_start.
@@ -1257,7 +1267,13 @@ DONEBUTTON
 	    &Apache::structuretags::finalize_storage();
 	}
     } elsif ($target eq 'webgrade') {
-	$result.=&Apache::lonxml::endredirection();
+	if (&nest()) {
+	    &Apache::lonxml::endredirection();
+	    &end_delay();
+	    $result.=$dimension{$top}{'result'};
+	} else {
+	    $result.=&Apache::lonxml::endredirection();
+	}
 	my $dim = $top;
 	foreach my $id (@{$dimension{$dim}{'criterias'}} ) {
 	    my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
@@ -1269,7 +1285,12 @@ DONEBUTTON
 					     [@_]);
 		$criteria = &layout_webgrade_Criteria($dim,$id,$criteria);
 		my $internal_location=&internal_location($id);
-		$result=~s/\Q$internal_location\E/$criteria/;
+		if ($result =~ m/\Q$internal_location\E/) {
+		    $result=~s/\Q$internal_location\E/$criteria/;
+		} else {
+		    $result.=$criteria;
+		}
+
 	    }
 	}
         $result.="</div>";
@@ -2049,7 +2070,7 @@ sub start_Setup {
     my $dim = &get_id($parstack,$safeeval);
     push(@Apache::bridgetask::dimension,$dim);
     &Apache::lonxml::startredirection();
-    return &internal_location($dim);
+    return;# &internal_location($dim);
 }
 
 {
@@ -2101,6 +2122,7 @@ sub start_Dimension {
 	$dimension{$top}{'criteria.'.$dim.'.mandatory'}=
 	    &Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
 	push(@{$dimension{$top}{'criterias'}},$dim);
+	$dimension{$dim}{'nested'}=$top;
     }
     push(@Apache::bridgetask::dimension,$dim);
     &Apache::lonxml::startredirection();
@@ -2272,8 +2294,20 @@ sub end_Dimension {
 	    }
 	}
 	if ($result !~ /^\s*$/s) {
-	    $result = "\n".'<div class="LC_question">'.
-		"\n".$result."\n</div>\n";
+	    # FIXME? this maybe unneccssary in the future, (CSE101 BT
+	    # from Fall 2006 geenrate a div that attempts to hide some
+	    # of the output in an odd way, this is a workaround so
+	    # those old ones will continue to work.  # It puts the
+	    # LC_question div to come after any starting closie div
+	    # that the dimension produces
+	    if ($result =~ m{\s*</div>}) {
+		$result =~ s{(\s*</div>)}
+		            {$1\n<div id="$dim" class="LC_question">};
+	    } else {
+		$result = "\n".'<div id="'.$dim.'" class="LC_question">'.
+		    "\n".$result;
+	    }
+	    $result .= "\n</div>\n";
 	}
     } elsif ($target eq 'webgrade') {
 	# in case of any side effects that we need
@@ -2297,7 +2331,11 @@ sub end_Dimension {
 					     [@_]);
 		$criteria = &layout_webgrade_Criteria($dim,$id,$criteria);
 		my $internal_location=&internal_location($id);
-		$result=~s/\Q$internal_location\E/$criteria/;
+		if ($result =~ m/\Q$internal_location\E/) {
+		    $result =~ s/\Q$internal_location\E/$criteria/;
+		} else {
+		    $result.=$criteria ;
+		}
 	    }
 	}
 	if (&nest()) {
@@ -2606,7 +2644,7 @@ sub start_Criteria {
 	my $dim = &get_dim_id();
 	my $id=&get_id($parstack,$safeeval);
 	if ($target eq 'web' || $target eq 'webgrade') {
-	    if ($target eq 'webgrade' && $dim ne 'top') {
+	    if ($target eq 'webgrade') {
 		&Apache::lonxml::debug(" for $dim $id stashing results into $dim ");
 		$dimension{$dim}{'result'} .= &internal_location($id);
 	    } else {