--- loncom/interface/lonpreferences.pm	2008/01/20 22:38:06	1.112
+++ loncom/interface/lonpreferences.pm	2009/04/04 21:47:41	1.149
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Preferences
 #
-# $Id: lonpreferences.pm,v 1.112 2008/01/20 22:38:06 raeburn Exp $
+# $Id: lonpreferences.pm,v 1.149 2009/04/04 21:47:41 bisitz Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -98,6 +98,12 @@ sub des_decrypt {
 
 sub wysiwygchanger {
     my $r = shift;
+    Apache::lonhtmlcommon::add_breadcrumb(
+	    {	href => '/adm/preferences?action=changewysiwyg',
+                text => 'Change WYSIWYG Preferences'});
+    $r->print(Apache::loncommon::start_page('Content Display Settings'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change WYSIWYG Preferences'));
+
     my %userenv = &Apache::lonnet::get
         ('environment',['wysiwygeditor']);
     my $onselect='checked="checked"';
@@ -108,14 +114,19 @@ sub wysiwygchanger {
     }
     my $switchoff=&mt('Disable WYSIWYG editor');
     my $switchon=&mt('Enable WYSIWYG editor');
+    my $warning='';
+    if ($env{'user.adv'}) {
+       $warning.="<p>".&mt("The WYSIWYG editor only supports simple HTML and is in many cases unsuited for advanced authoring. In a number of cases, it may destroy advanced authoring involving LaTeX and script function calls.")."</p>";
+    }
     $r->print(<<ENDLSCREEN);
 <form name="prefs" action="/adm/preferences" method="post">
 <input type="hidden" name="action" value="set_wysiwyg" />
+$warning
 <br />
 <label><input type="radio" name="wysiwyg" value="off" $onselect /> $switchoff</label><br />
 <label><input type="radio" name="wysiwyg" value="on" $offselect /> $switchon</label>
 ENDLSCREEN
-    $r->print('<br /><input type="submit" value="'.&mt('Change').'" />');
+    $r->print('<br /><input type="submit" value="'.&mt('Save').'" />');
 }
 
 
@@ -123,8 +134,10 @@ sub verify_and_change_wysiwyg {
     my $r = shift;
     my $newsetting=$env{'form.wysiwyg'};
     &Apache::lonnet::put('environment',{'wysiwygeditor' => $newsetting});
-    &Apache::lonnet::appenv('environment.wysiwygeditor' => $newsetting);
-    $r->print('<p>'.&mt('Setting WYSIWYG editor to:').' '.&mt($newsetting).'</p>');
+    &Apache::lonnet::appenv({'environment.wysiwygeditor' => $newsetting});
+#   $r->print('<p>'.&mt('Setting WYSIWYG editor to:').' '.&mt($newsetting).'</p>');
+    print_main_menu($r,'<p>'.&mt('Setting WYSIWYG editor to:').' '
+			.&mt($newsetting).'</p>');
 }
 
 ################################################################
@@ -132,6 +145,12 @@ sub verify_and_change_wysiwyg {
 ################################################################
 sub languagechanger {
     my $r = shift;
+    
+    Apache::lonhtmlcommon::add_breadcrumb(
+	    {	href => '/adm/preferences?action=changelanguages',
+                text => 'Change Language'});
+    $r->print(Apache::loncommon::start_page('Content Display Settings'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Language')); 
     my $user       = $env{'user.name'};
     my $domain     = $env{'user.domain'};
     my %userenv = &Apache::lonnet::get
@@ -153,7 +172,7 @@ sub languagechanger {
 <input type="hidden" name="action" value="verify_and_change_languages" />
 <br />$pref: $selectionbox
 ENDLSCREEN
-    $r->print('<br /><input type="submit" value="'.&mt('Change').'" />');
+    $r->print('<br /><input type="submit" value="'.&mt('Save').'" />');
 }
 
 
@@ -167,16 +186,18 @@ sub verify_and_change_languages {
     my $message='';
     if ($newlanguage) {
         &Apache::lonnet::put('environment',{'languages' => $newlanguage});
-        &Apache::lonnet::appenv('environment.languages' => $newlanguage);
+        &Apache::lonnet::appenv({'environment.languages' => $newlanguage});
         $message=&mt('Set new preferred languages to ').'<tt>"'.$newlanguage.'"</tt>.';
     } else {
         &Apache::lonnet::del('environment',['languages']);
-        &Apache::lonnet::delenv('environment\.languages');
+        &Apache::lonnet::delenv('environment.languages');
         $message=&mt('Reset preferred language.');
     }
-    $r->print(<<ENDVCSCREEN);
-$message
-ENDVCSCREEN
+    &Apache::loncommon::flush_langs_cache($user,$domain);
+    print_main_menu($r, $message);
+#    $r->print(<<ENDVCSCREEN);
+#$message
+#ENDVCSCREEN
 }
 
 ################################################################
@@ -184,40 +205,56 @@ ENDVCSCREEN
 ################################################################
 sub texenginechanger {
     my $r = shift;
+    Apache::lonhtmlcommon::add_breadcrumb(
+	    {	href => '/adm/preferences?action=changetexenginepref',
+                text => 'Change How Math Equations Are Displayed'});
+    $r->print(Apache::loncommon::start_page('Content Display Settings'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change How Math Equations Are Displayed'));
     my $user       = $env{'user.name'};
     my $domain     = $env{'user.domain'};
     my %userenv = &Apache::lonnet::get('environment',['texengine']);
     my $texengine=$userenv{'texengine'};
 
-    my $pref=&mt('Preferred method to display Math');
     my %mathchoices=('' => 'Default',
-		     'tth' => 'TeX to HTML',
+		     'tth' => 'tth (TeX to HTML)',
 		     #'ttm' => 'TeX to MathML',
 		     'jsMath' => 'jsMath',
-		     'mimetex' => 'Convert to Images'
+		     'mimetex' => 'mimetex (Convert to Images)'
                      );
     my $selectionbox=&Apache::loncommon::select_form($texengine,'texengine',
 						     %mathchoices);
     my $jsMath_start=&Apache::lontexconvert::jsMath_header();
-    my $change=&mt('Change');
-    $r->print(<<ENDLSCREEN);
-<br />
+    my %lt=&Apache::lonlocal::texthash(
+      'headline' => 'Change Math Preferences',
+      'preftxt'  => 'Preferred method to display Math',
+      'change'   => 'Save',
+      'exmpl'    => 'Examples',
+      'jsmath'   => 'jsMath:',
+      'tth'      => 'tth (TeX to HTML):',
+      'mimetex'  => 'mimetex (Convert to Images):',
+    );
 
+    $r->print(<<ENDLSCREEN);
+<h2>$lt{'headline'}</h2>
 <form name="prefs" action="/adm/preferences" method="post">
 <input type="hidden" name="action" value="verify_and_change_texengine" />
-<p>$pref: $selectionbox</p>
-<p><input type="submit" value="$change" /></p>
-</form>
-Examples:
-<p> TeX to HTML <br /> 
-<iframe src="/res/adm/pages/math_example.tex?inhibitmenu=yes&texengine=tth" width="400" hieght="200"></iframe>
+<p>
+$lt{'preftxt'}: $selectionbox 
+<br />
+<input type="submit" value="$lt{'change'}" />
 </p>
-<p>jsMath <br /> 
+</form>
+<br />
+<hr />
+$lt{'exmpl'}
+
+<h3>$lt{'jsmath'}</h3> 
+<p>
 $jsMath_start
-<script type="text/javascript">
+<script type="text/javascript" language="JavaScript">
 if (jsMath.nofonts == 1) {
     document.writeln
-        ('<center><div style="padding: 10; border-style: solid; border-width:3;'
+        ('<div style="padding: 10; border-style: solid; border-width:3;'
 	 +' border-color: #DD0000; background-color: #FFF8F8; width: 75%; text-align: left">'
 	 +'<small><font color="#AA0000"><b>Warning:</b> '
 	 +'It looks like you don\\\'t have the TeX math fonts installed. '
@@ -227,19 +264,24 @@ if (jsMath.nofonts == 1) {
 	 +'needed fonts.  In the meantime, jsMath will do the best it can '
 	 +'with the fonts you have, but it may not be pretty and some equations '
 	 +'may not be rendered correctly. '
-	 +'</font></small></div></center>');
+	 +'</font></small></div>');
 }
 </script>
-<iframe src="/res/adm/pages/math_example.tex?inhibitmenu=yes&texengine=jsMath" width="400" hieght="200"></iframe>
+<iframe src="/res/adm/pages/math_example.tex?inhibitmenu=yes&texengine=jsMath" width="400" height="120"></iframe>
+</p>
 
+<h3>$lt{'mimetex'}</h3>
+<p>
+<iframe src="/res/adm/pages/math_example.tex?inhibitmenu=yes&texengine=mimetex" width="400" height="100"></iframe>
 </p>
-<p> Convert to Images <br />
-<br />
-<iframe src="/res/adm/pages/math_example.tex?inhibitmenu=yes&texengine=mimetex" width="400" hieght="200"></iframe>
+
+<h3>$lt{'tth'}</h3>
+<p>
+<iframe src="/res/adm/pages/math_example.tex?inhibitmenu=yes&texengine=tth" width="400" height="200"></iframe>
 </p>
 ENDLSCREEN
     if ($env{'environment.texengine'} ne 'jsMath') {
-	$r->print('<script type="text/javascript">jsMath.Process()</script>');
+	$r->print('<script type="text/javascript" language="JavaScript">jsMath.Process()</script>');
     }
 }
 
@@ -252,27 +294,28 @@ sub verify_and_change_texengine {
     my $newtexengine  = $env{'form.texengine'};
     $newtexengine=~s/[^\-\w]//g;
     if ($newtexengine eq 'ttm') {
-	&Apache::lonnet::appenv('browser.mathml' => 1);
+	&Apache::lonnet::appenv({'browser.mathml' => 1});
     } else {
 	if ($env{'environment.texengine'} eq 'ttm') {
-	    &Apache::lonnet::appenv('browser.mathml' => 0);
+	    &Apache::lonnet::appenv({'browser.mathml' => 0});
 	}
     }
     my $message='';
     if ($newtexengine) {
         &Apache::lonnet::put('environment',{'texengine' => $newtexengine});
-        &Apache::lonnet::appenv('environment.texengine' => $newtexengine);
+        &Apache::lonnet::appenv({'environment.texengine' => $newtexengine});
         $message=&mt('Set new preferred math display to ').'<tt>"'.$newtexengine.'"</tt>.';
     } else {
         &Apache::lonnet::del('environment',['texengine']);
-        &Apache::lonnet::delenv('environment\.texengine');
+        &Apache::lonnet::delenv('environment.texengine');
         $message=&mt('Reset preferred math display.');
     }
 
 
-    $r->print(<<ENDVCSCREEN);
-$message
-ENDVCSCREEN
+#    $r->print(<<ENDVCSCREEN);
+#$message
+#ENDVCSCREEN
+    print_main_menu($r, $message);
 }
 
 ################################################################
@@ -286,6 +329,11 @@ sub rolesprefchanger {
     my $domain     = $env{'user.domain'};
     my %userenv = &Apache::lonnet::get
         ('environment',['recentroles','recentrolesn']);
+    Apache::lonhtmlcommon::add_breadcrumb(
+	    {	href => '/adm/preferences?action=changerolespref',
+                text => 'Change '.$role.' Page Pref'});
+    $r->print(Apache::loncommon::start_page('Content Display Settings'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change '.$role.' Page Pref'));
     my $hotlist_flag=$userenv{'recentroles'};
     my $hotlist_n=$userenv{'recentrolesn'};
     my $checked;
@@ -355,7 +403,7 @@ sub rolesprefchanger {
 </p>
 '.$roles_check_list.'
 <br />
-<input type="submit" value="'.&mt('Change').'" />
+<input type="submit" value="'.&mt('Save').'" />
 </form>');
 }
 
@@ -400,16 +448,16 @@ sub verify_and_change_rolespref {
     my $message='<hr />';
     if ($hotlist_flag) {
         &Apache::lonnet::put('environment',{'recentroles' => $hotlist_flag});
-        &Apache::lonnet::appenv('environment.recentroles' => $hotlist_flag);
+        &Apache::lonnet::appenv({'environment.recentroles' => $hotlist_flag});
         $message=&mt('Recent '.$role.'s Hotlist is Enabled');
     } else {
         &Apache::lonnet::del('environment',['recentroles']);
-        &Apache::lonnet::delenv('environment\.recentroles');
+        &Apache::lonnet::delenv('environment.recentroles');
         $message=&mt('Recent '.$role.'s Hotlist is Disabled');
     }
     if ($hotlist_n) {
         &Apache::lonnet::put('environment',{'recentrolesn' => $hotlist_n});
-        &Apache::lonnet::appenv('environment.recentrolesn' => $hotlist_n);
+        &Apache::lonnet::appenv({'environment.recentrolesn' => $hotlist_n});
         if ($hotlist_flag) {
             $message.="<br />".
 		&mt('Display [_1] Most Recent '.$role.'s',$hotlist_n)."\n";
@@ -449,9 +497,10 @@ sub verify_and_change_rolespref {
     }
     $message .= "<hr /><br />\n";
 
-    $r->print(<<ENDRPSCREEN);
-$message
-ENDRPSCREEN
+#    $r->print(<<ENDRPSCREEN);
+#$message
+#ENDRPSCREEN
+    print_main_menu($r, $message);
 }
 
 
@@ -467,22 +516,30 @@ sub screennamechanger {
         ('environment',['screenname','nickname']);
     my $screenname=$userenv{'screenname'};
     my $nickname=$userenv{'nickname'};
-    my %lt = &Apache::lonlocal::texthash(
-                                          text_screenname  => 'New screenname (shown if you post anonymously):',
-                                          text_nickname  => 'New nickname (shown if you post non-anonymously):',
-                                          text_submit => 'Change',
-                                        );
-    $r->print(<<ENDSCREEN);
-<form name="prefs" action="/adm/preferences" method="post">
-<input type="hidden" name="action" value="verify_and_change_screenname" />
-<br />$lt{'text_screenname'}
-<input type="text" size="20" value="$screenname" name="screenname" />
-<br />$lt{'text_nickname'}
-<input type="text" size="20" value="$nickname" name="nickname" />
-<br />
-<input type="submit" value="$lt{'text_submit'}" />
-</form>
-ENDSCREEN
+    Apache::lonhtmlcommon::add_breadcrumb(
+		{ href => '/adm/preferences?action=changescreenname',
+                  text => 'Change Screen Name'});
+    $r->print(Apache::loncommon::start_page('Personal Data'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Screen Name'));
+    $r->print('<p>'
+             .&mt('Change the name that is displayed in your posts.')
+             .'</p>'
+    );
+    $r->print('<form name="prefs" action="/adm/preferences" method="post">'
+             .'<input type="hidden" name="action" value="verify_and_change_screenname" />'
+             .&Apache::lonhtmlcommon::start_pick_box()
+             .&Apache::lonhtmlcommon::row_title(&mt('New screenname (shown if you post anonymously)'))
+             .'<input type="text" size="20" value="'.$screenname.'" name="screenname" />'
+             .&Apache::lonhtmlcommon::row_closure()
+             .&Apache::lonhtmlcommon::row_title(&mt('New nickname (shown if you post non-anonymously)'))
+             .'<input type="text" size="20" value="'.$nickname.'" name="nickname" />'
+             .&Apache::lonhtmlcommon::row_closure()
+             .&Apache::lonhtmlcommon::row_title()
+             .'<input type="submit" value="'.&mt('Save').'" />'
+             .&Apache::lonhtmlcommon::row_closure(1)
+             .&Apache::lonhtmlcommon::end_pick_box()
+             .'</form>'
+    );
 }
 
 sub verify_and_change_screenname {
@@ -495,11 +552,11 @@ sub verify_and_change_screenname {
     my $message='';
     if ($newscreen) {
         &Apache::lonnet::put('environment',{'screenname' => $newscreen});
-        &Apache::lonnet::appenv('environment.screenname' => $newscreen);
+        &Apache::lonnet::appenv({'environment.screenname' => $newscreen});
         $message=&mt('Set new screenname to ').'<tt>"'.$newscreen.'."</tt>.';
     } else {
         &Apache::lonnet::del('environment',['screenname']);
-        &Apache::lonnet::delenv('environment\.screenname');
+        &Apache::lonnet::delenv('environment.screenname');
         $message=&mt('Reset screenname.');
     }
 # Nickname
@@ -508,17 +565,18 @@ sub verify_and_change_screenname {
     $newscreen=~s/[^ \w]//g;
     if ($newscreen) {
         &Apache::lonnet::put('environment',{'nickname' => $newscreen});
-        &Apache::lonnet::appenv('environment.nickname' => $newscreen);
+        &Apache::lonnet::appenv({'environment.nickname' => $newscreen});
         $message.=&mt('Set new nickname to ').'<tt>"'.$newscreen.'"</tt>.';
     } else {
         &Apache::lonnet::del('environment',['nickname']);
-        &Apache::lonnet::delenv('environment\.nickname');
+        &Apache::lonnet::delenv('environment.nickname');
         $message.=&mt('Reset nickname.');
     }
     &Apache::lonnet::devalidate_cache_new('namescache',$user.':'.$domain);
-    $r->print(<<ENDVCSCREEN);
-$message
-ENDVCSCREEN
+#    $r->print(<<ENDVCSCREEN);
+#$message
+#ENDVCSCREEN
+    print_main_menu($r, $message);
 }
 
 ################################################################
@@ -526,6 +584,12 @@ ENDVCSCREEN
 ################################################################
 sub iconchanger {
     my $r = shift;
+    Apache::lonhtmlcommon::add_breadcrumb(
+	    {	href => '/adm/preferences?action=changeicons',
+                text => 'Change Main Menu'});
+    $r->print(Apache::loncommon::start_page('Page Display Settings'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Main Menu'));
+
     my $user       = $env{'user.name'};
     my $domain     = $env{'user.domain'};
     my %userenv = &Apache::lonnet::get
@@ -544,7 +608,7 @@ sub iconchanger {
     my $useicons=&mt('Use icons and text');
     my $usebuttons=&mt('Use buttons and text');
     my $useicononly=&mt('Use icons only');
-    my $change=&mt('Change');
+    my $change=&mt('Save');
     $r->print(<<ENDSCREEN);
 <form name="prefs" action="/adm/preferences" method="post">
 <input type="hidden" name="action" value="verify_and_change_icons" />
@@ -563,8 +627,9 @@ sub verify_and_change_icons {
     my $newicons  = $env{'form.menumode'};
 
     &Apache::lonnet::put('environment',{'icons' => $newicons});
-    &Apache::lonnet::appenv('environment.icons' => $newicons);
-    $r->print(&mt('Set menu mode to [_1].',$newicons));
+    &Apache::lonnet::appenv({'environment.icons' => $newicons});
+#    $r->print(&mt('Set menu mode to [_1].',$newicons));
+    print_main_menu($r, &mt('Set menu mode to [_1].',$newicons));
 }
 
 ################################################################
@@ -573,6 +638,11 @@ sub verify_and_change_icons {
 
 sub clickerchanger {
     my $r = shift;
+    Apache::lonhtmlcommon::add_breadcrumb(
+	    {	href => '/adm/preferences?action=changeclicker',
+                text => 'Register Clicker'});
+    $r->print(Apache::loncommon::start_page('Other'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Register Clicker'));
     my $user       = $env{'user.name'};
     my $domain     = $env{'user.domain'};
     my %userenv = &Apache::lonnet::get
@@ -581,7 +651,7 @@ sub clickerchanger {
     $clickers=~s/\,/\n/gs;
     my $text=&mt('Enter response device ("clicker") numbers');
     my $change=&mt('Register');
-    my $helplink=&Apache::loncommon::help_open_topic('Clicker_Registration', 'Locating your clicker ID');
+    my $helplink=&Apache::loncommon::help_open_topic('Clicker_Registration',&mt('Locating your clicker ID'));
     $r->print(<<ENDSCREEN);
 <form name="prefs" action="/adm/preferences" method="post">
 <input type="hidden" name="action" value="verify_and_change_clicker" />
@@ -605,11 +675,92 @@ sub verify_and_change_clicker {
     $newclickers=~s/^\,//;
     $newclickers=~s/\,$//;
     &Apache::lonnet::put('environment',{'clickers' => $newclickers});
-    &Apache::lonnet::appenv('environment.clickers' => $newclickers);
-    $r->print(&mt('Registering clickers: [_1]',$newclickers));
+    &Apache::lonnet::appenv({'environment.clickers' => $newclickers});
+#    $r->print(&mt('Registering clickers: [_1]',$newclickers));
+    print_main_menu($r, &mt('Registering clickers: [_1]',$newclickers));
 }
 
 ################################################################
+#               Domcoord Access Subroutines                    #
+################################################################
+
+sub domcoordchanger {
+    my $r = shift;
+    Apache::lonhtmlcommon::add_breadcrumb(
+	    {	href => '/adm/preferences?action=changedomcoord',
+                text => 'Restrict Domain Coordinator Access'});
+    $r->print(Apache::loncommon::start_page('Restrict Domain Coordinator Access'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Restrict Domain Coordinator Access'));
+    my $user       = $env{'user.name'};
+    my $domain     = $env{'user.domain'};
+    my %userenv = &Apache::lonnet::get
+        ('environment',['domcoord.author']);
+    my $constchecked='';
+    if ($userenv{'domcoord.author'} eq 'blocked') {
+       $constchecked='checked="checked"';
+    }
+    my $text=&mt('By default, the Domain Coordinator can enter your construction space.');
+    my $construction=&mt('Block access to construction space');
+    my $change=&mt('Save');
+    $r->print(<<ENDSCREEN);
+<form name="prefs" action="/adm/preferences" method="post">
+<input type="hidden" name="action" value="verify_and_change_domcoord" />
+$text<br />
+<label><input type="checkbox" name="construction" $constchecked />$construction</label><br />
+<input type="submit" value="$change" />
+</form>
+ENDSCREEN
+}
+
+sub verify_and_change_domcoord {
+    my $r = shift;
+    my $user       = $env{'user.name'};
+    my $domain     = $env{'user.domain'};
+    my %domcoord=('domcoord.author' => '');
+    if ($env{'form.construction'}) { $domcoord{'domcoord.author'}='blocked'; }
+    &Apache::lonnet::put('environment',\%domcoord);
+    &Apache::lonnet::appenv({'environment.domcoord.author' => $domcoord{'domcoord.author'}});
+#    $r->print(&mt('Registering Domain Coordinator access restrictions.'));
+    print_main_menu($r, &mt('Registering Domain Coordinator access restrictions.'));
+}
+
+#################################################################
+##                      Lock Subroutines                        #
+#################################################################
+
+sub lockwarning {
+    my $r = shift;
+    my $title=&mt('Action locked');
+    my $texttop=&mt('LON-CAPA is currently performing the following actions:');
+    my $textbottom=&mt('Changing roles or logging out may result in data corruption.');
+    my ($num,%which)=&Apache::lonnet::get_locks();
+    my $which='';
+    foreach my $id (keys %which) {
+       $which.='<li>'.$which{$id}.'</li>';
+    }
+    my $change=&mt('Override');
+    $r->print(<<ENDSCREEN);
+<form name="prefs" action="/adm/preferences" method="post">
+<input type="hidden" name="action" value="verify_and_change_locks" />
+<h1>$title</h1>
+$texttop
+<ul>
+$which
+</ul>
+$textbottom
+<input type="submit" value="$change" />
+</form>
+ENDSCREEN
+}
+
+sub verify_and_change_lockwarning {
+    my $r = shift;
+    &Apache::lonnet::remove_all_locks();
+    $r->print(&mt('Cleared locks.'));
+}
+
+
+################################################################
 #         Message Forward                                      #
 ################################################################
 
@@ -624,24 +775,30 @@ sub msgforwardchanger {
                                           crit  => 'Critical only',
                                           reg   => 'Non-critical only',
                                           foad  => 'Forwarding Address(es)',
+                                          noti  => 'Notification E-mail Address(es)', 
                                           foad_exmpl => 'e.g. <tt>userA:domain1,userB:domain2,...</tt>',
-                                          mnot  => 'Email Address(es) which should be notified about new LON-CAPA messages', # old: 'Message Notification Email Address(es)',
+                                          mnot  => 'E-mail Address(es) which should be notified about new LON-CAPA messages',
+ # old: 'Message Notification Email Address(es)',
                                           mnot_exmpl => 'e.g. <tt>joe@doe.com</tt>',
-                                          chg   => 'Change',
+                                          chg   => 'Save',
                                           email => 'The e-mail address entered in row ',
                                           notv => 'is not a valid e-mail address',
                                           toen => "To enter multiple addresses, enter one address at a time, click 'Change' and then add the next one", 
-                                          prme => 'Back to preferences menu',
+                                          prme => 'Back',
                                         );
-    my $forwardingHelp = Apache::loncommon::help_open_topic("Prefs_Forwarding",
-							    &mt("What are forwarding and notification addresses?"));
-    my $criticalMessageHelp = Apache::loncommon::help_open_topic("Course_Critical_Message",
-								 &mt("What are critical messages?"));
+    Apache::lonhtmlcommon::add_breadcrumb(
+	    {	href => '/adm/preferences?action=changemsgforward',
+		text => 'Change Message Forwarding/Notification'});
+    $r->print(Apache::loncommon::start_page('Message Management'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Message Forwarding/Notification'));
+    my $forwardingHelp = &Apache::loncommon::help_open_topic("Prefs_Forwarding");
+    my $notificationHelp = &Apache::loncommon::help_open_topic("Prefs_Notification");
+    my $criticalMessageHelp = &Apache::loncommon::help_open_topic("Course_Critical_Message");
     my @allow_html = split(/,/,$userenv{'notifywithhtml'});
     my %allnot = &get_notifications(\%userenv);
     my $validatescript = &Apache::lonhtmlcommon::javascript_valid_email();
     my $jscript = qq|
-<script type="text/javascript">
+<script type="text/javascript" language="JavaScript">
 function validate() {
     for (var i=0; i<document.prefs.numnotify.value; i++) {
         var checkaddress = 0;
@@ -699,12 +856,12 @@ $validatescript
     $r->print(<<ENDMSG);
 $jscript
 $message
-$forwardingHelp
+<h3>$lt{'foad'} $forwardingHelp</h3>
 <form name="prefs" action="/adm/preferences" method="post">
 <input type="hidden" name="action" value="verify_and_change_msgforward" />
 $lt{'foad'} ($lt{'foad_exmpl'}):
-<input type="text" size="40" value="$msgforward" name="msgforward" /><hr />
-$criticalMessageHelp
+<input type="text" size="40" value="$msgforward" name="msgforward" /><br />
+<h3>$lt{'noti'} $notificationHelp</h3>
 $lt{'mnot'} ($lt{'mnot_exmpl'}):<br />
 ENDMSG
     my @sortforwards = sort (keys(%allnot));
@@ -713,7 +870,8 @@ ENDMSG
                  '<th>&nbsp;</th>'.
                  '<th>'.&mt('Action').'</th>'.
                  '<th>'.&mt('Notification address').'</th><th>'.
-                 &mt('Types of message for which notification is sent').'</th><th>'.
+                 &mt('Types of message for which notification is sent').
+                 $criticalMessageHelp.'</th><th>'.
                  &mt('Excerpt retains HTML tags in message').'</th>'.
                  &Apache::loncommon::end_data_table_header_row();
     my $num = 0;
@@ -796,10 +954,10 @@ ENDMSG
     $num ++;
     $r->print($output);
     $r->print(qq|
-<hr />
+<br /><hr />
 <input type="hidden" name="numnotify" value="$num" />
-<input type="button" value="$lt{'chg'}" onclick="javascript:validate()" />
 <input type="button" value="$lt{'prme'}" onclick="location.href='/adm/preferences'" />
+<input type="button" value="$lt{'chg'}" onclick="javascript:validate()" />
 </form>
 |);
 
@@ -840,12 +998,12 @@ sub verify_and_change_msgforward {
     $newscreen=~s/\,$//;
     if ($newscreen) {
         &Apache::lonnet::put('environment',{'msgforward' => $newscreen});
-        &Apache::lonnet::appenv('environment.msgforward' => $newscreen);
+        &Apache::lonnet::appenv({'environment.msgforward' => $newscreen});
         $message .= &mt('Set message forwarding to ').'<tt>"'.$newscreen.'"</tt>.'
                     .'<br />';
     } else {
         &Apache::lonnet::del('environment',['msgforward']);
-        &Apache::lonnet::delenv('environment\.msgforward');
+        &Apache::lonnet::delenv('environment.msgforward');
         $message.= &mt("Set message forwarding to 'off'.").'<br />';
     }
     my $critnotification;
@@ -881,30 +1039,30 @@ sub verify_and_change_msgforward {
     $notify_with_html =~ s/\s//gs;
     if ($notification) {
         &Apache::lonnet::put('environment',{'notification' => $notification});
-        &Apache::lonnet::appenv('environment.notification' => $notification);
+        &Apache::lonnet::appenv({'environment.notification' => $notification});
         $message.=&mt('Set non-critical message notification address(es) to ').'<tt>"'.$notification.'"</tt>.<br />';
     } else {
         &Apache::lonnet::del('environment',['notification']);
-        &Apache::lonnet::delenv('environment\.notification');
+        &Apache::lonnet::delenv('environment.notification');
         $message.=&mt("Set non-critical message notification to 'off'.").'<br />';
     }
     if ($critnotification) {
         &Apache::lonnet::put('environment',{'critnotification' => $critnotification});
-        &Apache::lonnet::appenv('environment.critnotification' => $critnotification);
+        &Apache::lonnet::appenv({'environment.critnotification' => $critnotification});
         $message.=&mt('Set critical message notification address(es) to ').'<tt>"'.$critnotification.'"</tt>.<br />';
     } else {
         &Apache::lonnet::del('environment',['critnotification']);
-        &Apache::lonnet::delenv('environment\.critnotification');
+        &Apache::lonnet::delenv('environment.critnotification');
         $message.=&mt("Set critical message notification to 'off'.").'<br />';
     }
     if ($critnotification || $notification) {
         if ($notify_with_html) {
             &Apache::lonnet::put('environment',{'notifywithhtml' => $notify_with_html});
-            &Apache::lonnet::appenv('environment.notifywithhtml' => $notify_with_html);
+            &Apache::lonnet::appenv({'environment.notifywithhtml' => $notify_with_html});
             $message.=&mt('Set address(es) to receive excerpts with html retained ').'<tt>"'.$notify_with_html.'"</tt>.';
         } else {
             &Apache::lonnet::del('environment',['notifywithhtml']);
-            &Apache::lonnet::delenv('environment\.notifywithhtml');
+            &Apache::lonnet::delenv('environment.notifywithhtml');
             if ($totaladdresses == 1) {
                 $message.=&mt("Set notification address to receive excerpts with html stripped.");
             } else {
@@ -913,7 +1071,7 @@ sub verify_and_change_msgforward {
         }
     } else {
         &Apache::lonnet::del('environment',['notifywithhtml']);
-        &Apache::lonnet::delenv('environment\.notifywithhtml');
+        &Apache::lonnet::delenv('environment.notifywithhtml');
     }
     if ($message) {
         $message .= '<br /><hr />';
@@ -928,6 +1086,11 @@ sub verify_and_change_msgforward {
 
 sub colorschanger {
     my $r = shift;
+    Apache::lonhtmlcommon::add_breadcrumb(
+	    {	href => '/adm/preferences?action=changecolors',
+                text => 'Change Colors'});
+    $r->print(Apache::loncommon::start_page('Page Display Settings'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Colors'));
 # figure out colors
     my $function=&Apache::loncommon::get_users_function();
     my $domain=&Apache::loncommon::determinedomain();
@@ -953,8 +1116,11 @@ sub colorschanger {
     }
     my $end_data_table = &Apache::loncommon::end_data_table();
     my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
+    my $save = &mt('Save');
+    my $rstall = &mt('Reset All');
+    my $resetdefault = &mt('Reset All Colors to Default');
     $r->print(<<ENDCOL);
-<script type="text/javascript">
+<script type="text/javascript" language="JavaScript">
 
     function pclose() {
         parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",
@@ -991,8 +1157,8 @@ $start_data_table
 $chtable
 $end_data_table
 </table>
-<input type="submit" value="Change Custom Colors" />
-<input type="submit" name="resetall" value="Reset All Colors to Default" />
+<input type="submit" value="$save" />
+<input type="submit" name="resetall" value="$rstall" title="$resetdefault" />
 </form>
 ENDCOL
 }
@@ -1016,24 +1182,25 @@ sub verify_and_change_colors {
         my $entry='color.'.$function.'.'.$item;
 	if (($color=~/^\#[0-9A-Fa-f]{6}$/) && (!$env{'form.resetall'})) {
 	    &Apache::lonnet::put('environment',{$entry => $color});
-	    &Apache::lonnet::appenv('environment.'.$entry => $color);
+	    &Apache::lonnet::appenv({'environment.'.$entry => $color});
 	    $message.=&mt('Set '.$colortypes{$item}.' to ').'<tt>"'.$color.'"</tt>.<br />';
 	} else {
 	    &Apache::lonnet::del('environment',[$entry]);
-	    &Apache::lonnet::delenv('environment\.'.$entry);
+	    &Apache::lonnet::delenv('environment.'.$entry);
 	    $message.=&mt('Reset '.$colortypes{$item}.'.').'<br />';
 	}
     }
     my $now = time;
     &Apache::lonnet::put('environment',{'color.timestamp' => $now});
-    &Apache::lonnet::appenv('environment.color.timestamp' => $now);
+    &Apache::lonnet::appenv({'environment.color.timestamp' => $now});
 
-    $r->print(<<ENDVCCOL);
-$message
-<form name="client" action="/adm/preferences" method="post">
-<input type="hidden" name="action" value="changecolors" />
-</form>
-ENDVCCOL
+    print_main_menu($r, $message);
+#    $r->print(<<ENDVCCOL);
+#$message
+#<form name="client" action="/adm/preferences" method="post">
+#<input type="hidden" name="action" value="changecolors" />
+#</form>
+#ENDVCCOL
 }
 
 ######################################################
@@ -1045,6 +1212,13 @@ sub passwordchanger {
     # Passwords are encrypted using londes.js (DES encryption)
     $errormessage = ($errormessage || '');
     my ($user,$domain,$currentpass,$defdom);
+    Apache::lonhtmlcommon::add_breadcrumb(
+		{ href => '/adm/preferences?action=changepass',
+                  text => 'Change Password'});
+    unless ($caller eq 'reset_by_email') {
+        $r->print(Apache::loncommon::start_page('Personal Data'));
+        $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Password'));
+    }
     if ((!defined($caller)) || ($caller eq 'preferences')) {
         $user = $env{'user.name'};
         $domain = $env{'user.domain'};
@@ -1124,7 +1298,7 @@ ENDFORM
 sub jscript_send {
     my ($caller) = @_;
     my $output = qq|
-<script language="JavaScript">
+<script type="text/javascript" language="JavaScript">
 
     function send() {
         uextkey=this.document.client.elements.ukey_cpass.value;
@@ -1164,13 +1338,13 @@ sub jscript_send {
 sub client_form {
     my ($caller,$hexkey,$currentpass,$defdom) = @_;
     my %lt=&Apache::lonlocal::texthash(
-                'email' => 'EMail Address',
+                'email' => 'E-mail Address',
                 'username' => 'Username',
                 'domain' => 'Domain',
                 'currentpass' => 'Current Password',
                 'newpass' => 'New Password',
                 'confirmpass' => 'Confirm Password',
-                'changepass' => 'Change Password');
+                'changepass' => 'Save');
 
     my $output = qq|
 <form name="client" >
@@ -1185,7 +1359,7 @@ sub client_form {
      <input type="text" name="uname" size="15" />
      <input type="hidden" name="currentpass" value="$currentpass" />
     </td></tr>
-<tr><td class="LC_preferences_labeltext"><label for="udom">$lt{'udom'}</label>:</td>
+<tr><td class="LC_preferences_labeltext"><label for="udom">$lt{'domain'}</label>:</td>
     <td>
 |;
         $output .= &Apache::loncommon::select_dom_form($defdom,'udom').'
@@ -1204,7 +1378,7 @@ sub client_form {
 <tr><td class="LC_preferences_labeltext"><label for="newpass_2">$lt{'confirmpass'}</label></td>
     <td><input type="password" name="newpass_2" size="10"  /> </td></tr>
 <tr><td colspan="2" align="center">
-    <input type="button" value="$lt{'changepass'}" onClick="send();">
+    <input type="button" value="$lt{'changepass'}" onClick="send();" />
 </table>
 <input type="hidden" name="ukey_cpass"  value="$hexkey->{'ukey_cpass'}" />
 <input type="hidden" name="lkey_cpass"  value="$hexkey->{'lkey_cpass'}" />
@@ -1324,6 +1498,13 @@ ENDERROR
     #
     if ($caller eq 'reset_by_email') {
         my %data = &Apache::lonnet::tmpget($mailtoken);
+        if (keys(%data) == 0) {
+            &passwordchanger($r,
+                         '<span class="LC_error">'.
+                         &mt('Could not verify current authentication.').'  '.
+                         &mt('Please try again.').'</span>',$caller,$mailtoken);
+            return 1;
+        }
         if ($currentpass ne $data{'temppasswd'}) {
             &passwordchanger($r,
                          '<span class="LC_error">'.
@@ -1371,12 +1552,23 @@ ENDERROR
     my $result = &Apache::lonnet::changepass
 	($user,$domain,$currentpass,$newpass1,$homeserver,$caller);
     # Inform the user the password has (not?) been changed
+    my $message;
     if ($result =~ /^ok$/) {
-	$r->print("<h3>".&mt('The password for [_1] was successfully changed',$user)."</h3>");
+        $message = &mt('The password for [_1] was successfully changed.',$user);
+        if ($caller eq 'reset_by_email') {
+            $r->print($message.'<br />');
+        } else {
+            &print_main_menu($r, $message);
+        }
+#	$r->print("<h3>".&mt('The password for [_1] was successfully changed',$user)."</h3>");
     } else {
 	# error error: run in circles, scream and shout
-        $r->print("<h3><span class='LC_error'>".&mt("The password for [_1] was not changed",$user)."</span></h3>".
-                  &mt('Please make sure your old password was entered correctly.'));
+        $message = &mt("The password for [_1] was not changed.",$user).' '.&mt('Please make sure your old password was entered correctly.');
+        unless ($caller eq 'reset_by_email') {
+            &print_main_menu($r, $message);
+        }
+#        $r->print("<h3><span class='LC_error'>".&mt("The password for [_1] was not changed",$user)."</span></h3>".
+#                  &mt('Please make sure your old password was entered correctly.'));
         return 1;
     }
     return;
@@ -1387,6 +1579,11 @@ ENDERROR
 ################################################################
 sub discussionchanger {
     my $r = shift;
+    Apache::lonhtmlcommon::add_breadcrumb(
+	    {	href => '/adm/preferences?action=changediscussions',
+                text => 'Change Discussion Preferences'});
+    $r->print(Apache::loncommon::start_page('Message Management'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Discussion Preferences'));
     my $user       = $env{'user.name'};
     my $domain     = $env{'user.domain'};
     my %userenv = &Apache::lonnet::get
@@ -1415,9 +1612,9 @@ sub discussionchanger {
         'pref' => 'Display Preference',
         'curr' => 'Current setting ',
         'actn' => 'Action',
-        'sdpf' => 'Set display preferences for discussion posts for both bulletin boards and individual resources in all your courses.',
+        'sdpf' => 'Set display preferences for discussion posts for both discussion boards and individual resources in all your courses.',
         'prca' => 'Preferences can be set that determine',
-        'whpo' => 'Which posts are displayed when you display a bulletin board or resource, and',
+        'whpo' => 'Which posts are displayed when you display a discussion board or resource, and',
         'unwh' => 'Under what circumstances posts are identfied as "New"',
         'allposts' => 'All posts',
         'unread' => 'New posts only',
@@ -1477,15 +1674,8 @@ END
 END
     $r->print(&Apache::loncommon::end_data_table_row().
 	      &Apache::loncommon::end_data_table());
-    $r->print(<<"END");
-<br />
-<br />
-<input type="submit" name="sub" value="Save Changes" />
-<br />
-<br />
-Note: $lt{'thde'}
-</form>
-END
+
+    $r->print('<br /><br /><input type="submit" name="sub" value="'.&mt('Save').'" /><br /><br />'.&mt('Note').': '.$lt{'thde'}.'</form>');
 }
                                                                                                                 
 sub verify_and_change_discussion {
@@ -1498,11 +1688,11 @@ sub verify_and_change_discussion {
         if ($newdisp eq 'unread') {
             $message .=&mt('In discussions: only new posts will be displayed.').'<br />';
             &Apache::lonnet::put('environment',{'discdisplay' => $newdisp});
-            &Apache::lonnet::appenv('environment.discdisplay' => $newdisp);
+            &Apache::lonnet::appenv({'environment.discdisplay' => $newdisp});
         } else {
             $message .= &mt('In discussions: all posts will be displayed.').'<br />';
             &Apache::lonnet::del('environment',['discdisplay']);
-            &Apache::lonnet::delenv('environment\.discdisplay');
+            &Apache::lonnet::delenv('environment.discdisplay');
         }
     }
     if (defined($env{'form.discmark'}) ) {
@@ -1510,16 +1700,17 @@ sub verify_and_change_discussion {
         if ($newmark eq 'ondisp') {
            $message.=&mt('In discussions: new posts will be cease to be identified as "NEW" after display.').'<br />';
             &Apache::lonnet::put('environment',{'discmarkread' => $newmark});
-            &Apache::lonnet::appenv('environment.discmarkread' => $newmark);
+            &Apache::lonnet::appenv({'environment.discmarkread' => $newmark});
         } else {
             $message.=&mt('In discussions: posts will be identified as "NEW" until marked as read by the reader.').'<br />';
             &Apache::lonnet::del('environment',['discmarkread']);
-            &Apache::lonnet::delenv('environment\.discmarkread');
+            &Apache::lonnet::delenv('environment.discmarkread');
         }
     }
-    $r->print(<<ENDVCSCREEN);
-$message
-ENDVCSCREEN
+#    $r->print(<<ENDVCSCREEN);
+#$message
+#ENDVCSCREEN
+    print_main_menu($r, $message);
 }
 
 ################################################################
@@ -1527,6 +1718,11 @@ ENDVCSCREEN
 ################################################################
 sub coursedisplaychanger {
     my $r = shift;
+    Apache::lonhtmlcommon::add_breadcrumb(
+	    {	href => '/adm/preferences?action=changecourseinit',
+                text => 'Change Course Init. Pref.'});
+    $r->print(Apache::loncommon::start_page('Change Course Initialization Preference'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Course Init. Pref.'));
     my $user       = $env{'user.name'};
     my $domain     = $env{'user.domain'};
     my %userenv = &Apache::lonnet::get('environment',['course_init_display']);
@@ -1540,14 +1736,21 @@ sub coursedisplaychanger {
 	    $whatsnewselect = '';
         }
     }
-    my %pagenames = (
+    my %pagenames = &Apache::lonlocal::texthash(
                        firstres => 'First resource',
-                       whatsnew => "What's new page",
+                       whatsnew => "What's New Page",
                     );
-    my $whatsnew_off=&mt('Display the [_1] in the course.','<b>first resource</b>');
-    my $whatsnew_on=&mt('Display the "[_1]" page - a summary of items in the course which require attention.',"<b>What's New</b>");
+    my $whatsnew_off=&mt('Display the [_1]first resource[_2] in the course.','<b>','</b>');
+    my $whatsnew_on=&mt("Display the [_1]What's New Page[_2] - a summary of items in the course which require attention.",'<b>','</b>');
 
-    $r->print('<br /><b>'.&mt('Set the default page to be displayed when you select a course role').'</b>&nbsp;'.&mt('(Currently: [_1])',$pagenames{$currvalue}).'<br />'.&mt('The global user preference you set for your courses can be overridden in an individual course by setting a course specific setting via the "[_1]" page in the course',"<i>What's New</i>").'<br /><br />');
+    $r->print('<br /><b>'
+             .&mt('Set the default page to be displayed when you select a course role')
+             .'</b>&nbsp;'
+             .&mt('(Currently: [_1])',$pagenames{$currvalue})
+             .'<br />'
+             .&mt("The global user preference you set for your courses can be overridden in an individual course by setting a course specific setting via the [_1]What's New Page[_2] in the course.",'<i>','</i>')
+             .'<br /><br />'
+    );
     $r->print(<<ENDLSCREEN);
 <form name="prefs" action="/adm/preferences" method="post">
 <input type="hidden" name="action" value="verify_and_change_coursepage" />
@@ -1555,7 +1758,7 @@ sub coursedisplaychanger {
 <label><input type="radio" name="newdisp" value="firstres" $firstselect /> $whatsnew_off</label><br />
 <label><input type="radio" name="newdisp" value="whatsnew" $whatsnewselect /> $whatsnew_on</label><input type="hidden" name="refpage" value="$env{'form.refpage'}" />
 ENDLSCREEN
-    $r->print('<br /><br /><input type="submit" value="'.&mt('Change').'" />
+    $r->print('<br /><br /><input type="submit" value="'.&mt('Save').'" />
 </form>');
 }
 
@@ -1568,18 +1771,18 @@ sub verify_and_change_coursepage {
         'ywbt' => 'you will be taken to the start of the course.',
         'apwb' => 'a page will be displayed that lists items in the course that may require action from you.',
         'gtts' => 'Go to the start of the course',
-        'dasp' => "Display the What's New page listing course action items", 
+        'dasp' => "Display the What's New Page", 
     );
     my $newdisp  = $env{'form.newdisp'};
     $message = '<b>'.$lt{'defs'}.'</b>: '.$lt{'when'}.', ';
     if ($newdisp eq 'firstres') {
         $message .= $lt{'ywbt'}.'<br />';
         &Apache::lonnet::put('environment',{'course_init_display' => $newdisp});
-        &Apache::lonnet::appenv('environment.course_init_display' => $newdisp);
+        &Apache::lonnet::appenv({'environment.course_init_display' => $newdisp});
     } else {
         $message .= $lt{'apwb'}.'<br />';
         &Apache::lonnet::del('environment',['course_init_display']);
-        &Apache::lonnet::delenv('environment\.course_init_display');
+        &Apache::lonnet::delenv('environment.course_init_display');
     }
     my $refpage = $env{'form.refpage'};
     if (($env{'request.course.fn'}) && ($env{'request.course.id'})) {
@@ -1594,12 +1797,199 @@ sub verify_and_change_coursepage {
                         $refpage.'">'.$lt{'dasp'}.'</a></font>';
         }
     }
-    $r->print(<<ENDVCSCREEN);
-$message
-<br /><br />
-ENDVCSCREEN
+#    $r->print(<<ENDVCSCREEN);
+#$message
+#<br /><br />
+#ENDVCSCREEN
+    print_main_menu($r, $message);
 }
 
+sub print_main_menu {
+    my ($r, $message) = @_;
+    # Determine current authentication method
+    my $user = $env{'user.name'};
+    my $domain = $env{'user.domain'};
+    my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain);
+
+    # build the data structure for menu generation
+my $aboutmeurl='/adm/'.$env{'user.domain'}.'/'.$env{'user.name'}.'/aboutme';
+my $role = ($env{'user.adv'} ? 'Roles' : 'Course');
+my %permissions;
+if (&Apache::lonnet::usertools_access($user,$domain,'aboutme')) {
+    $permissions{'aboutme'} = 'F';
+}
+my @menu=
+    ({	categorytitle=>'Personal Data',
+	items =>[
+	    {	linktext => 'Personal Information Page',
+		url => $aboutmeurl,
+		permission => $permissions{'aboutme'},
+		#help => 'Prefs_About_Me',
+		icon => 'system-users.png',
+		linktitle => 'Edit information about yourself that should be displayed on your public profile.'
+	    },
+	    {	linktext => 'Screen Name',
+		url => '/adm/preferences?action=changescreenname',
+		permission => 'F',
+		#help => 'Prefs_Screen_Name_Nickname',
+		icon => 'preferences-desktop-font.png',
+		linktitle => 'Change the name that is displayed in your posts.'
+	    },
+		]
+    },
+    {	categorytitle=>'Page Display Settings',
+	items =>[
+	    {	linktext => 'Color Scheme',
+		url => '/adm/preferences?action=changecolors',
+		permission => 'F',
+		#help => 'Change_Colors',
+		icon => 'preferences-desktop-theme.png',
+		linktitle => 'Change LON-CAPA default colors.'
+	    },
+	    {	linktext => 'Menu Display',
+		url => '/adm/preferences?action=changeicons',
+		permission => 'F',
+		#help => '',
+		icon => 'preferences-system-windows.png',
+		linktitle => 'Change whether the menus are displayed with buttons, icons or icons and text.'
+	    }
+
+		]
+    },
+    {	categorytitle=>'Content Display Settings',
+	items =>[
+	    {	linktext => 'Language',
+		url => '/adm/preferences?action=changelanguages',
+		permission => 'F',
+		#help => 'Prefs_Language',
+		icon => 'preferences-desktop-locale.png',
+		linktitle => 'Choose the default language for this user.'
+	    },
+	    {	linktext => 'WYSIWYG Editor',
+		url => '/adm/preferences?action=changewysiwyg',
+		permission => 'F',
+		#help => '',
+		icon => 'edit-select-all.png',
+		linktitle => 'Enable or disable the WYSIWYG-Editor.'
+	    },
+	    {	linktext => $role.' Page',
+		url => '/adm/preferences?action=changerolespref',
+		permission => 'F',
+		#help => '',
+		icon => 'sctr.png',
+		linktitle => 'Configure the roles hotlist.'
+	    },
+	    {	linktext => 'Display of Scientific Equations',
+		url => '/adm/preferences?action=changetexenginepref',
+		permission => 'F',
+		#help => '',
+		icon => 'stat.png',
+		linktitle => 'Change how Scientific Equations are displayed.'
+	    },
+		]
+    },
+    {	categorytitle=>'Message Management',
+	items =>[
+	    {	linktext => 'Messages & Notifications',
+		url => '/adm/preferences?action=changemsgforward',
+		permission => 'F',
+		#help => 'Prefs_Messages',
+		icon => 'mail-reply-all.png',
+		linktitle => 'Change messageforwarding or notifications settings.'
+	    },
+	    {	linktext => 'Discussion Display',
+		url => '/adm/preferences?action=changediscussions',
+		permission => 'F',
+		#help => 'Change_Discussion_Display',
+		icon => 'mail-message-new.png',
+		linktitle => 'Set display preferences for discussion posts for both discussion boards and individual resources in all your courses.'
+	    },
+		]
+    },
+    {	categorytitle=>'Other',
+	items =>[
+	    {	linktext => 'Register Response Devices ("Clickers")',
+		url => '/adm/preferences?action=changeclicker',
+		permission => 'F',
+		#help => '',
+		icon => 'network-workgroup.png',
+		linktitle => 'Register your clicker.'
+	    },
+		]
+    },
+    );
+
+    if ($currentauth =~ /^(unix|internal):/) {
+push(@{ $menu[0]->{items} }, {
+	linktext => 'Password',
+	url => '/adm/preferences?action=changepass',
+	permission => 'F',
+	#help => 'Change_Password',
+	icon => 'emblem-readonly.png',
+	linktitle => 'Change your password.',
+	});
+    }
+    if ($env{'environment.remote'} eq 'off') {
+push(@{ $menu[1]->{items} }, {
+	linktext => 'Launch Remote Control',
+	url => '/adm/remote?url=/adm/preferences?action=launch',
+	permission => 'F',
+	#help => '',
+	icon => 'network-wireless.png',
+	linktitle => 'Launch the remote control for LON-CAPA.',
+	});
+    }else{
+push(@{ $menu[1]->{items} }, {
+	linktext => 'Collapse Remote Control',
+	url => '/adm/remote?url=/adm/preferences?action=collapse',
+	permission => 'F',
+	#help => '',
+	icon => 'network-wireless.png',
+	linktitle => 'Collapse the remote control for LON-CAPA.',
+	});
+    }
+    my %author_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au']);
+    if (keys(%author_roles) > 0) {
+push(@{ $menu[4]->{items} }, {
+	linktext => 'Restrict Domain Coordinator Access',
+	url => '/adm/preferences?action=changedomcoord',
+	permission => 'F',
+	#help => '',
+	icon => 'system-lock-screen.png',
+	linktitle => 'Restrict domain coordinator access.',
+	});
+    }
+
+    if (&Apache::lonnet::allowed('whn',$env{'request.course.id'})
+	|| &Apache::lonnet::allowed('whn',$env{'request.course.id'}.'/'
+				    .$env{'request.course.sec'})) {
+push(@{ $menu[4]->{items} }, {
+	linktext => 'Course Initialization',
+	url => '/adm/preferences?action=changecourseinit',
+	permission => 'F',
+	#help => '',
+	icon => 'edit-copy.png',
+	linktitle => 'Set the default page to be displayed when you select a course role.',
+	});
+
+    }
+    if ($env{'user.name'} =~ /^(albertel|fox|foxr|kortemey|korte|raeburn)$/) {
+push(@{ $menu[4]->{items} }, {
+	linktext => 'Toggle Debug Messages (Current:'.$env{'user.debug'}.')',
+	url => '/adm/preferences?action=debugtoggle',
+	permission => 'F',
+	#help => '',
+	icon => 'blog.png',
+	linktitle => 'Toggle Debug Messages.',
+	});
+    }   
+
+    $r->print(&Apache::loncommon::start_page('My Space'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Preferences'));
+    $r->print($message);
+    $r->print(Apache::lonhtmlcommon::generate_menu(@menu));
+    $r->print(Apache::loncommon::end_page());
+}
 
 ######################################################
 #            other handler subroutines               #
@@ -1608,7 +1998,91 @@ ENDVCSCREEN
 ################################################################
 #                          Main handler                        #
 ################################################################
-sub handler {
+sub handler {    
+    my $r = shift;
+    Apache::loncommon::content_type($r,'text/html');
+    # Some pages contain DES keys and should not be cached.
+    Apache::loncommon::no_cache($r);
+    $r->send_http_header;
+    return OK if $r->header_only;
+    #
+    Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+                                   ['action','wysiwyg','returnurl','refpage']);
+    #
+    Apache::lonhtmlcommon::clear_breadcrumbs();
+    Apache::lonhtmlcommon::add_breadcrumb
+        ({href => '/adm/preferences',
+          text => 'Set User Preferences'});
+    if(!exists $env{'form.action'}) {
+	&print_main_menu($r);
+    }elsif($env{'form.action'} eq 'changepass'){
+        &passwordchanger($r);
+    }elsif($env{'form.action'} eq 'verify_and_change_pass'){
+        &verify_and_change_password($r);
+    }elsif($env{'form.action'} eq 'changescreenname'){
+        &screennamechanger($r);
+    }elsif($env{'form.action'} eq 'verify_and_change_screenname'){
+        &verify_and_change_screenname($r);
+    }elsif($env{'form.action'} eq 'changemsgforward'){
+        &msgforwardchanger($r);
+    }elsif($env{'form.action'} eq 'verify_and_change_msgforward'){
+        &verify_and_change_msgforward($r);
+    }elsif($env{'form.action'} eq 'changecolors'){
+        &colorschanger($r);
+    }elsif($env{'form.action'} eq 'verify_and_change_colors'){
+        &verify_and_change_colors($r);
+    }elsif($env{'form.action'} eq 'changelanguages'){
+        &languagechanger($r);
+    }elsif($env{'form.action'} eq 'verify_and_change_languages'){
+        &verify_and_change_languages($r);
+    }elsif($env{'form.action'} eq 'changewysiwyg'){
+        &wysiwygchanger($r);
+    }elsif($env{'form.action'} eq 'set_wysiwyg'){
+        &verify_and_change_wysiwyg($r);
+    }elsif($env{'form.action'} eq 'changediscussions'){
+        &discussionchanger($r);
+    }elsif($env{'form.action'} eq 'verify_and_change_discussion'){
+        &verify_and_change_discussion($r);
+    }elsif($env{'form.action'} eq 'changerolespref'){
+        &rolesprefchanger($r);
+    }elsif($env{'form.action'} eq 'verify_and_change_rolespref'){
+        &verify_and_change_rolespref($r);
+    }elsif($env{'form.action'} eq 'changetexenginepref'){
+        &texenginechanger($r);
+    }elsif($env{'form.action'} eq 'verify_and_change_texengine'){
+        &verify_and_change_texengine($r);
+    }elsif($env{'form.action'} eq 'changeicons'){
+        &iconchanger($r);
+    }elsif($env{'form.action'} eq 'verify_and_change_icons'){
+        &verify_and_change_icons($r);
+    }elsif($env{'form.action'} eq 'changeclicker'){
+        &clickerchanger($r);
+    }elsif($env{'form.action'} eq 'verify_and_change_clicker'){
+        &verify_and_change_clicker($r);
+    }elsif($env{'form.action'} eq 'changedomcoord'){
+        &domcoordchanger($r);
+    }elsif($env{'form.action'} eq 'verify_and_change_domcoord'){
+        &verify_and_change_domcoord($r);
+    }elsif($env{'form.action'} eq 'lockwarning'){
+        &lockwarning($r);
+    }elsif($env{'form.action'} eq 'verify_and_change_locks'){
+        &verify_and_change_lockwarning($r);
+    }elsif($env{'form.action'} eq 'changecourseinit'){
+        &coursedisplaychanger($r);
+    }elsif($env{'form.action'} eq 'verify_and_change_coursepage'){
+        &verify_and_change_coursepage($r);
+    }elsif($env{'form.action'} eq 'debugtoggle'){
+        toggle_debug();
+	print_main_menu($r);
+    }
+
+    return OK;
+
+
+}
+#remove when done
+#old handler routine
+sub handler2 {
     my $r = shift;
     my $user = $env{'user.name'};
     my $domain = $env{'user.domain'};
@@ -1665,25 +2139,26 @@ sub handler {
                       }));
 
     push (@Options,({ action   => 'changemsgforward',
-                      linktext => 'Change Message Forwarding and Notification Email Addresses',
+                      linktext => 'Change Message Forwarding and Notification E-mail Addresses',
                       href     => '/adm/preferences',
-                      help     => 'Prefs_Forwarding',
+                      help     => 'Prefs_Messages',
                       breadcrumb => 
                           { href => '/adm/preferences?action=changemsgforward',
-                            text => 'Change Message Forwarding'},
+                            text => 'Change Message Forwarding/Notification'},
                       subroutine => \&msgforwardchanger,
                       },
                     { action => 'verify_and_change_msgforward',
+                      help   => 'Prefs_Messages',
                       breadcrumb => 
                           { href => '/adm/preferences?action=changemsgforward',
-                            text => 'Change Message Forwarding'},
-                      printmenu => 'no',
+                            text => 'Change Message Forwarding/Notification'},
+                      printmenu => 'yes',
                       subroutine => \&verify_and_change_msgforward }));
     my $aboutmeaction=
         '/adm/'.$env{'user.domain'}.'/'.$env{'user.name'}.'/aboutme';
     push (@Options,{ action => 'none', 
                      linktext =>
-                         q{Edit the 'About Me' Personal Information Screen},
+                         q{Edit the Personal Information Page},
 		     help => 'Prefs_About_Me',
                      href => $aboutmeaction});
     push (@Options,({ action => 'changecolors',
@@ -1816,7 +2291,7 @@ sub handler {
                       href     => '/adm/preferences',
                       subroutine => \&clickerchanger,
                       breadcrumb =>
-                          { href => '/adm/preferences?action=changeicons',
+                          { href => '/adm/preferences?action=changeclicker',
                             text => 'Register Clicker'},
                       },
                     { action   => 'verify_and_change_clicker',
@@ -1826,6 +2301,38 @@ sub handler {
                             text => 'Register Clicker'},
                       printmenu => 'yes',
                       }));
+    my %author_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au']);
+    if (keys(%author_roles) > 0) {
+      push (@Options,({ action   => 'changedomcoord',
+                        linktext => 'Restrict Domain Coordinator Access',
+                        href     => '/adm/preferences',
+                        subroutine => \&domcoordchanger,
+                        breadcrumb =>
+                            { href => '/adm/preferences?action=changedomcoord',
+                              text => 'Restrict Domain Coordinator Access'},
+                      },
+                      { action   => 'verify_and_change_domcoord',
+                        subroutine => \&verify_and_change_domcoord,
+                        breadcrumb =>
+                            { href => '/adm/preferences?action=changedomcoord',
+                              text => 'Restrict Domain Coordinator Access'},
+                        printmenu => 'yes',
+                      }));
+    }
+
+    push (@Options,({ action   => 'lockwarning',
+                      subroutine => \&lockwarning,
+                      breadcrumb =>
+                          { href => '/adm/preferences?action=lockwarning',
+                            text => 'Lock Warnings'},
+                      },
+                    { action   => 'verify_and_change_locks',
+                      subroutine => \&verify_and_change_lockwarning,
+                      breadcrumb =>
+                          { href => '/adm/preferences?action=lockwarning',
+                            text => 'Lockwarnings'},
+                      printmenu => 'yes',
+                      }));
 
 
     if (&Apache::lonnet::allowed('whn',$env{'request.course.id'})
@@ -1847,7 +2354,7 @@ sub handler {
                        }));
     }
 
-    if ($env{'user.name'} =~ /^(albertel|fox|foxr|koretemey|korte|hallmat3|turtle|raeburn)$/) {
+    if ($env{'user.name'} =~ /^(albertel|fox|foxr|kortemey|korte|raeburn)$/) {
         push (@Options,({ action => 'debugtoggle',
                           printmenu => 'yes',
                           subroutine => \&toggle_debug,
@@ -1928,9 +2435,9 @@ sub handler {
 
 sub toggle_debug {
     if ($env{'user.debug'}) {
-        &Apache::lonnet::delenv('user\.debug');
+        &Apache::lonnet::delenv('user.debug');
     } else {
-        &Apache::lonnet::appenv('user.debug' => 1);
+        &Apache::lonnet::appenv({'user.debug' => 1});
     }
 }