--- loncom/interface/loncommon.pm	2009/05/19 22:52:10	1.822
+++ loncom/interface/loncommon.pm	2009/06/09 18:42:42	1.841
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.822 2009/05/19 22:52:10 bisitz Exp $
+# $Id: loncommon.pm,v 1.841 2009/06/09 18:42:42 tempelho Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -407,6 +407,7 @@ sub studentbrowser_javascript {
           ) { return ''; }  
    return (<<'ENDSTDBRW');
 <script type="text/javascript" language="Javascript">
+// <![CDATA[
     var stdeditbrowser;
     function openstdbrowser(formname,uname,udom,roleflag,ignorefilter,courseadvonly) {
         var url = '/adm/pickstudent?';
@@ -429,6 +430,7 @@ sub studentbrowser_javascript {
         stdeditbrowser = open(url,title,options,'1');
         stdeditbrowser.focus();
     }
+// ]]>
 </script>
 ENDSTDBRW
 }
@@ -461,6 +463,7 @@ sub selectstudent_link {
 sub authorbrowser_javascript {
     return <<"ENDAUTHORBRW";
 <script type="text/javascript" language="JavaScript">
+// <![CDATA[
 var stdeditbrowser;
 
 function openauthorbrowser(formname,udom) {
@@ -473,6 +476,7 @@ function openauthorbrowser(formname,udom
     stdeditbrowser.focus();
 }
 
+// ]]>
 </script>
 ENDAUTHORBRW
 }
@@ -482,6 +486,7 @@ sub coursebrowser_javascript {
     my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Group - for which you wish to add/modify a user role');
    my $output = '
 <script type="text/javascript" language="JavaScript">
+// <![CDATA[
     var stdeditbrowser;'."\n";
    $output .= <<"ENDSTDBRW";
     function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag,crstype) {
@@ -568,6 +573,7 @@ ENDSTDBRW
         $output .= &setsec_javascript($sec_element,$formname);
     }
     $output .= '
+// ]]>
 </script>';
     return $output;
 }
@@ -829,6 +835,7 @@ sub linked_select_forms {
     # output the javascript to do the changing
     my $result = '';
     $result.='<script type="text/javascript" language="JavaScript">'."\n";
+    $result.="// <![CDATA[\n";
     $result.="var select2data = new Object();\n";
     $" = '","';
     my $debug = '';
@@ -874,6 +881,7 @@ function select1_changed() {
         }
     }
 }
+// ]]>
 </script>
 END
     # output the initial values for the selection lists
@@ -1027,7 +1035,9 @@ sub update_help_link {
     my $banner_link = "/adm/helpmenu?page=banner&amp;topic=$topic&amp;component_help=$component_help&amp;faq=$faq&amp;bug=$bug&amp;origurl=$origurl&amp;stamp=$timestamp&amp;stayonpage=$stayOnPage";
     my $output .= <<"ENDOUTPUT";
 <script type="text/javascript">
+// <![CDATA[
 banner_link = '$banner_link';
+// ]]>
 </script>
 ENDOUTPUT
     return $output;
@@ -1394,6 +1404,7 @@ sub resize_textarea_js {
     my $geometry = &viewport_geometry_js();
     return <<"RESIZE";
     <script type="text/javascript">
+// <![CDATA[
 $geometry
 
 function getX(element) {
@@ -1432,6 +1443,7 @@ function resize_textarea(textarea_id,bot
     }
     textarea.style.height=new_height+'px';
 }
+// ]]>
 </script>
 RESIZE
 
@@ -2299,7 +2311,7 @@ sub authform_internal{
     $result = &mt
         ('[_1] Internally authenticated (with initial password [_2])',
          '<label>'.$authtype,'</label>'.$autharg);
-    $result.="<label><input type=\"checkbox\" name=\"visible\" onClick='if (this.checked) { this.form.intarg.type=\"text\" } else { this.form.intarg.type=\"password\" }' />".&mt('Visible input').'</label>';
+    $result.="<label><input type=\"checkbox\" name=\"visible\" onclick='if (this.checked) { this.form.intarg.type=\"text\" } else { this.form.intarg.type=\"password\" }' />".&mt('Visible input').'</label>';
     return $result;
 }
 
@@ -4171,6 +4183,34 @@ sub designparm {
 ##############################################
 =pod
 
+=item * &authorspace()
+
+Inputs: ./.
+
+Returns: Path to the Construction Space of the current user's
+         accessed author space
+         The author space will be that of the current user
+         when accessing the own author space
+         and that of the co-author/assistent co-author
+         when accessing the co-author's/assistent co-author's
+         space
+
+=cut
+
+sub authorspace {
+    my $caname = '';
+    if ($env{'request.role'} =~ /^ca|^aa/) {
+        (undef,$caname) =
+            ($env{'request.role'}=~/($match_domain)\/($match_username)$/);
+    } else {
+        $caname = $env{'user.name'};
+    }
+    return '/priv/'.$caname.'/';
+}
+
+##############################################
+=pod
+
 =item * &head_subbox()
 
 Inputs: $content (contains HTML code with page functions, etc.)
@@ -4262,10 +4302,6 @@ Inputs:
 =item * $forcereg, if page should register as content page (relevant for 
             text interface only)
 
-=item * $customtitle, alternate text to use instead of $title
-                      in the title box that appears, this text
-                      is not auto translated like the $title is
-
 =item * $no_nav_bar, if true, keep the 'what is this' info but remove the
                      navigational links
 
@@ -4290,7 +4326,7 @@ other decorations will be returned.
 =cut
 
 sub bodytag {
-    my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle,
+    my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,
         $no_nav_bar,$bgcolor,$no_inline_link,$args)=@_;
 
     if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); }
@@ -4345,25 +4381,7 @@ sub bodytag {
 	$name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'});
     }
     
-    my $roleinfo=(<<ENDROLE);
-<td class="LC_title_bar_who">
-<div class="LC_title_bar_name">
-    $name
-    &nbsp;
-</div>
-<div class="LC_title_bar_role">
-$role&nbsp;
-</div>
-<div class="LC_title_bar_realm">
-$realm&nbsp;
-</div>
-</td>
-ENDROLE
-
     my $titleinfo = '<h1>'.$title.'</h1>';
-    if ($customtitle) {
-        $titleinfo = $customtitle;
-    }
     #
     # Extra info if you are the DC
     my $dc_info = '';
@@ -4376,18 +4394,18 @@ ENDROLE
         $dc_info = '('.$dc_info.')';
     }
 
-    if (($env{'environment.remote'} eq 'off') || ($args->{'suppress_header_logos'})) {
+    if ($env{'environment.remote'} eq 'off') {
         # No Remote
 	if ($env{'request.state'} eq 'construct') {
 	    $forcereg=1;
 	}
 
-    if (!$customtitle && $env{'request.state'} eq 'construct') {
-        $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls
-    }
+#    if ($env{'request.state'} eq 'construct') {
+#        $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls
+#    }
 
         my $titletable = '<table id="LC_title_bar">'
-                        ."<tr><td> $titleinfo $dc_info</td>".$roleinfo
+                        ."<tr><td> $titleinfo $dc_info</td>"
                         .'</tr></table>';
 
 	if ($no_nav_bar) {
@@ -4427,7 +4445,6 @@ $bodytag
     <td>$messages&nbsp;</td>
 </tr>
 <tr><td>$titleinfo $dc_info $menu</td>
-$roleinfo
 </tr>
 </table>
 ENDBODY
@@ -4668,7 +4685,6 @@ div.LC_confirm_box .LC_success img {
 
 .LC_disc_action_links_bar {
    background: $tabbg;
-   font-family: $sans;
    border: none;
    margin: 4px;
 }
@@ -4711,10 +4727,10 @@ table#LC_nav_location {
 table#LC_title_bar a {
   color: $fontmenu;
 }
-    
+
 table#LC_title_bar {
   clear: both;
-  /*display: none;*/
+  display: none;
 }
 
 table#LC_title_bar,
@@ -4726,7 +4742,6 @@ table#LC_title_bar.LC_with_remote {
   border-width: $border;
   background: $pgbg;
   color: $fontmenu;
-  font-family: $sans;
   border-collapse: collapse;
   padding: 0;
   margin: 0;
@@ -4736,7 +4751,6 @@ table.LC_docs_path {
   width: 100%;
   border: 0;
   background: $pgbg;
-  font-family: $sans;
   border-collapse: collapse;
   padding: 0;
 }
@@ -4745,30 +4759,6 @@ table#LC_title_bar td {
   background: $tabbg;
 }
 
-table#LC_title_bar .LC_title_bar_who {
-  background: $tabbg;
-  color: $fontmenu;
-  font: small $sans;
-  text-align: right;
-  margin: 0;
-}
-
-table#LC_title_bar div.LC_title_bar_name {
-  margin: 0;
-}
-
-table#LC_title_bar div.LC_title_bar_role {
-  margin: 0;
-}
-
-table#LC_title_bar div.LC_title_bar_realm {
-  margin: 0;
-}
-
-span.LC_metadata {
-  font-family: $sans;
-}
-
 table#LC_menubuttons img{
   border: none;
 }
@@ -4784,7 +4774,6 @@ table#LC_top_nav td {
 table#LC_top_nav td a,
 div#LC_top_nav a {
   color: $font;
-  font-family: $sans;
 }
 
 table#LC_top_nav td.LC_top_nav_logo {
@@ -4813,7 +4802,6 @@ table.LC_breadcrumbs td,
 table.LC_docs_path td  {
   background: $tabbg;
   color: $fontmenu;
-  font-family: $sans;
   font-size: smaller;
 }
 
@@ -4821,7 +4809,6 @@ table.LC_breadcrumbs td.LC_breadcrumbs_c
 table.LC_docs_path td.LC_docs_path_component {
   background: $tabbg;
   color: $fontmenu;
-  font-family: $sans;
   font-size: larger;
   text-align: right;
 }
@@ -4847,6 +4834,10 @@ table#LC_mainmenu td.LC_mainmenu_column
  margin: 0;
  padding: 0;
 }
+/* Preliminary fix to hide breadcrumbs inside remote control window */
+#LC_remote #LC_head_subbox {
+    display:none;
+}
 
 #LC_head_subbox2 { /* FIXME: replace by LC_head_subbox once lonhtmlcommon::breadcrumbs has been fixed */
  clear:both;
@@ -4866,7 +4857,6 @@ table#LC_mainmenu td.LC_mainmenu_column
 
 .LC_menubuttons_inline_text {
   color: $font;
-  font-family: $sans;
   font-size: 90%;
   padding-left:3px;
 }
@@ -4878,7 +4868,6 @@ table#LC_mainmenu td.LC_mainmenu_column
 .LC_menubuttons_category {
   color: $font;
   background: $pgbg;
-  font-family: $sans;
   font-size: larger;
   font-weight: bold;
 }
@@ -4888,21 +4877,14 @@ td.LC_menubuttons_text {
 }
 
 .LC_current_location {
-  font-family: $sans;
   background: $tabbg;
 }
 
 .LC_new_mail {
-  font-family: $sans;
   background: $tabbg;
   font-weight: bold;
 }
 
-.LC_preferences_labeltext {
-  font-family: $sans;
-  text-align: right;
-}
-
 .LC_roleslog_note {
   font-size: small;
 }
@@ -5158,7 +5140,6 @@ span.LC_current_location {
 
 span.LC_parm_menu_item {
   font-size: larger;
-  font-family: $sans;
 }
 
 span.LC_parm_scope_all {
@@ -5213,7 +5194,6 @@ table#LC_helpmenu {
 
 table#LC_helpmenu fieldset legend {
   font-size: larger;
-  font-weight: bold;
 }
 
 table#LC_helpmenu_links {
@@ -5401,7 +5381,6 @@ table.LC_notify_front_page td {
 }
 
 .LC_topic_bar {
-  font-family: $sans;
   font-weight: bold;
   width: 100%;
   background: $tabbg;
@@ -5430,17 +5409,30 @@ table.LC_status_selector td {
 
 div.LC_feedback_link {
   clear: both;
-  background: white;
+  background: $sidebg;
   width: 100%;
+  padding-bottom: 10px;
+  border: 1px $tabbg solid;
+  height: 22px;
+  line-height: 22px;
+  padding-top: 5px;
+}
+
+div.LC_feedback_link img {
+  height: 22px;
+}
+
+div.LC_feedback_link a{
+  text-decoration: none;
 }
 
 span.LC_feedback_link {
-  background: $feedback_link_bg;
+  //background: $feedback_link_bg;
   font-size: larger;
 }
 
 span.LC_message_link {
-  background: $feedback_link_bg;
+  //background: $feedback_link_bg;
   font-size: larger;
   position: absolute;
   right: 1em;
@@ -5458,14 +5450,12 @@ table.LC_prior_tries td {
 
 .LC_answer_correct {
   background: lightgreen;
-  font-family: $sans;
   color: darkgreen;
   padding: 6px;
 }
 
 .LC_answer_charged_try {
   background: #FFAAAA;
-  font-family: $sans;
   color: darkred;
   padding: 6px;
 }
@@ -5474,28 +5464,24 @@ table.LC_prior_tries td {
 .LC_answer_no_grade,
 .LC_answer_late {
   background: lightyellow;
-  font-family: $sans;
   color: black;
   padding: 6px;
 }
 
 .LC_answer_previous {
   background: lightblue;
-  font-family: $sans;
   color: darkblue;
   padding: 6px;
 }
 
 .LC_answer_no_message {
   background: #FFFFFF;
-  font-family: $sans;
   color: black;
   padding: 6px;
 }
 
 .LC_answer_unknown {
   background: orange;
-  font-family: $sans;
   color: black;
   padding: 6px;
 }
@@ -5733,12 +5719,6 @@ div.LC_edit_problem_editxml_header div {
   margin-top: 5px;
 }
 
-div.LC_edit_problem_header_edit_row {
-  background: $tabbg;
-  padding: 3px;
-  margin-bottom: 5px;
-}
-
 div.LC_edit_problem_header_title {
   font-weight: bold;
   font-size: larger;
@@ -5794,7 +5774,6 @@ table#LC_mainmenu td.LC_mainmenu_col_fie
 .LC_mainmenu_fieldset_category {
   color: $font;
   background: $pgbg;
-  font-family: $sans;
   font-size: small;
   font-weight: bold;
 }
@@ -5840,6 +5819,10 @@ h2,h3,h4,h5,h6 {
 	border-bottom:solid 1px $lg_border_color;
 }
 
+.LC_Box > .LC_hcell {
+    margin: 0 -10px;
+}
+
 .LC_noBorder {
         border: 0;
 }
@@ -5875,6 +5858,11 @@ dl,ul,div,fieldset {
 /*	overflow: hidden; */
 }
 
+fieldset > legend {
+    font-weight: bold;
+    padding: 0 5px 0 5px;
+}
+
 #LC_nav_bar {
     float: left;
     margin: 0;
@@ -5973,7 +5961,7 @@ ul.LC_TabContent li a, ul.LC_TabContent
 
 ul.LC_TabContent li:hover, ul.LC_TabContent li.active {
         background:#FFFFFF url(/adm/lonIcons/open.gif) no-repeat scroll right center;
-	border-bottom:solid 1px #FFFFFF;
+	border-bottom:solid 2px #FFFFFF;
 	padding-right: 16px;
 }
 
@@ -5983,7 +5971,11 @@ ul.LC_TabContentBigger li {
 	border-left:solid 1px $lg_border_color;
 	padding:5px 10px 5px 10px;
 	margin-left:2px;
-	background:url(/adm/lonIcons/lightGreyBG.png) repeat-x left top;
+	background: #d9d9d9;
+}
+
+#maincoursedoc {
+	clear:both;
 }
 
 ul.LC_TabContentBigger li:hover, 
@@ -5999,7 +5991,7 @@ ul.LC_TabContentBigger li a {
 
 ol#LC_MenuBreadcrumbs, 
 ol#LC_PathBreadcrumbs, 
-ul.LC_CourseBreadcrumbs {
+ul#LC_CourseBreadcrumbs {
 	padding-left: 10px;
 	margin: 0;
 	list-style-position: inside;
@@ -6007,13 +5999,14 @@ ul.LC_CourseBreadcrumbs {
 
 ol#LC_MenuBreadcrumbs li, 
 ol#LC_PathBreadcrumbs li, 
-ul.LC_CourseBreadcrumbs li {
+ul#LC_CourseBreadcrumbs li {
 	display: inline;
 	padding: 0 0 0 10px;
 	overflow:hidden;
 }
 
-ol#LC_MenuBreadcrumbs li a, ul.LC_CourseBreadcrumbs li a {
+ol#LC_MenuBreadcrumbs li a,
+ul#LC_CourseBreadcrumbs li a {
 	text-decoration: none;
 	font-size:90%;
 }
@@ -6024,18 +6017,9 @@ ol#LC_PathBreadcrumbs li a {
 	font-weight:bold;
 }
 
-.LC_BoxPadding {
-	padding: 10px;
-}
-
-.LC_ContentBoxSpecial {
-	border: solid 1px $lg_border_color;
-}
-
-.LC_ContentBoxSpecialContactInfo {
-	border: solid 1px $lg_border_color;
-	max-width:25%;
-	min-width:25%;
+.LC_Box {
+    border: solid 1px $lg_border_color;
+    padding: 0 10px 10px 10px;
 }
 
 .LC_AboutMe_Image {
@@ -6124,19 +6108,6 @@ div.LC_columnSection>* {
 	overflow:hidden;
 }
 
-.ContentBoxSpecialTemplate {
-        border: solid 1px $lg_border_color;
-}
-
-.ContentBoxTemplate {
-        padding:10px;
-}
-
-div.LC_columnSection > .ContentBoxTemplate,
-div.LC_columnSection > .ContentBoxSpecialTemplate {
-        width: 600px;
-}
-
 .clear {
 	clear: both;
 	line-height: 0;
@@ -6503,9 +6474,6 @@ $args - additional optional args support
                                     a html attribute
              force_register -> if is true will turn on the &bodytag()
                                     $forcereg arg
-             body_title     -> alternate text to use instead of $title
-                                    in the title box that appears, this text
-                                    is not auto translated like the $title is
              frameset       -> if true will start with a <frameset>
                                     rather than <body>
              skip_phases    -> hash ref of 
@@ -6549,16 +6517,15 @@ sub start_page {
 	    my $attr_string = &make_attr_string($args->{'force_register'},
 						$args->{'add_entries'});
 	    $result .= "\n<frameset $attr_string>\n";
-	} else {
-	    $result .=
-		&bodytag($title, 
-			 $args->{'function'},       $args->{'add_entries'},
-			 $args->{'only_body'},      $args->{'domain'},
-			 $args->{'force_register'}, $args->{'body_title'},
-			 $args->{'no_nav_bar'},     $args->{'bgcolor'},
-			 $args->{'no_inline_link'},
-			 $args);
-	}
+        } else {
+            $result .=
+                &bodytag($title, 
+                         $args->{'function'},       $args->{'add_entries'},
+                         $args->{'only_body'},      $args->{'domain'},
+                         $args->{'force_register'}, $args->{'no_nav_bar'},
+                         $args->{'bgcolor'},        $args->{'no_inline_link'},
+                         $args);
+        }
     }
 
     if ($args->{'js_ready'}) {
@@ -6830,7 +6797,7 @@ sub get_users_function {
     if ($env{'request.role'}=~/^(su|dc|ad|li)/) {
         $function='admin';
     }
-    if (($env{'request.role'}=~/^(au|ca)/) ||
+    if (($env{'request.role'}=~/^(au|ca|aa)/) ||
         ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) {
         $function='author';
     }
@@ -7616,6 +7583,7 @@ ENDSCRIPT
 
     my $output = <<"END_BLOCK";
 <script type="text/javascript">
+// <![CDATA[
 function validateEntry(callingForm) {
 
     var checkok = 1;
@@ -7684,6 +7652,7 @@ function validateEntry(callingForm) {
 
 $newuserscript
 
+// ]]>
 </script>
 
 $new_user_create