--- loncom/interface/lonpreferences.pm	2008/12/12 19:57:58	1.125.2.1
+++ loncom/interface/lonpreferences.pm	2009/02/18 19:34:08	1.140
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Preferences
 #
-# $Id: lonpreferences.pm,v 1.125.2.1 2008/12/12 19:57:58 raeburn Exp $
+# $Id: lonpreferences.pm,v 1.140 2009/02/18 19:34:08 schafran 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('Change WYSIWYG Preferences'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change WYSIWYG Preferences'));
+
     my %userenv = &Apache::lonnet::get
         ('environment',['wysiwygeditor']);
     my $onselect='checked="checked"';
@@ -120,7 +126,7 @@ $warning
 <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').'" />');
 }
 
 
@@ -129,7 +135,9 @@ sub verify_and_change_wysiwyg {
     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>');
+#   $r->print('<p>'.&mt('Setting WYSIWYG editor to:').' '.&mt($newsetting).'</p>');
+    print_main_menu($r,'<p>'.&mt('Setting WYSIWYG editor to:').' '
+			.&mt($newsetting).'</p>');
 }
 
 ################################################################
@@ -137,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('Change Language'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Language')); 
     my $user       = $env{'user.name'};
     my $domain     = $env{'user.domain'};
     my %userenv = &Apache::lonnet::get
@@ -158,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').'" />');
 }
 
 
@@ -176,12 +190,14 @@ sub verify_and_change_languages {
         $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
 }
 
 ################################################################
@@ -189,6 +205,11 @@ 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('Change How Math Equations Are Displayed'));
+    $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']);
@@ -206,7 +227,7 @@ sub texenginechanger {
     my %lt=&Apache::lonlocal::texthash(
       'headline' => 'Change Math Preferences',
       'preftxt'  => 'Preferred method to display Math',
-      'change'   => 'Change',
+      'change'   => 'Save',
       'exmpl'    => 'Examples',
       'jsmath'   => 'jsMath:',
       'tth'      => 'tth (TeX to HTML):',
@@ -218,8 +239,9 @@ sub texenginechanger {
 <form name="prefs" action="/adm/preferences" method="post">
 <input type="hidden" name="action" value="verify_and_change_texengine" />
 <p>
-$lt{'preftxt'}:<br />
-$selectionbox <input type="submit" value="$lt{'change'}" />
+$lt{'preftxt'}: $selectionbox 
+<br />
+<input type="submit" value="$lt{'change'}" />
 </p>
 </form>
 <br />
@@ -285,14 +307,15 @@ sub verify_and_change_texengine {
         $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);
 }
 
 ################################################################
@@ -306,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('Change '.$role.' Page Pref'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change '.$role.' Page Pref'));
     my $hotlist_flag=$userenv{'recentroles'};
     my $hotlist_n=$userenv{'recentrolesn'};
     my $checked;
@@ -375,7 +403,7 @@ sub rolesprefchanger {
 </p>
 '.$roles_check_list.'
 <br />
-<input type="submit" value="'.&mt('Change').'" />
+<input type="submit" value="'.&mt('Save').'" />
 </form>');
 }
 
@@ -424,7 +452,7 @@ sub verify_and_change_rolespref {
         $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) {
@@ -469,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);
 }
 
 
@@ -487,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('Change Screen Name'));
+    $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 {
@@ -519,7 +556,7 @@ sub verify_and_change_screenname {
         $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
@@ -532,13 +569,14 @@ sub verify_and_change_screenname {
         $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);
 }
 
 ################################################################
@@ -546,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('Change Main Menu'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Main Menu'));
+
     my $user       = $env{'user.name'};
     my $domain     = $env{'user.domain'};
     my %userenv = &Apache::lonnet::get
@@ -564,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" />
@@ -584,7 +628,8 @@ sub verify_and_change_icons {
 
     &Apache::lonnet::put('environment',{'icons' => $newicons});
     &Apache::lonnet::appenv({'environment.icons' => $newicons});
-    $r->print(&mt('Set menu mode to [_1].',$newicons));
+#    $r->print(&mt('Set menu mode to [_1].',$newicons));
+    print_main_menu($r, &mt('Set menu mode to [_1].',$newicons));
 }
 
 ################################################################
@@ -593,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('Register Clicker'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Register Clicker'));
     my $user       = $env{'user.name'};
     my $domain     = $env{'user.domain'};
     my %userenv = &Apache::lonnet::get
@@ -626,7 +676,8 @@ sub verify_and_change_clicker {
     $newclickers=~s/\,$//;
     &Apache::lonnet::put('environment',{'clickers' => $newclickers});
     &Apache::lonnet::appenv({'environment.clickers' => $newclickers});
-    $r->print(&mt('Registering clickers: [_1]',$newclickers));
+#    $r->print(&mt('Registering clickers: [_1]',$newclickers));
+    print_main_menu($r, &mt('Registering clickers: [_1]',$newclickers));
 }
 
 ################################################################
@@ -635,6 +686,11 @@ sub verify_and_change_clicker {
 
 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
@@ -645,7 +701,7 @@ sub domcoordchanger {
     }
     my $text=&mt('By default, the Domain Coordinator can enter your construction space.');
     my $construction=&mt('Block access to construction space');
-    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_domcoord" />
@@ -664,7 +720,8 @@ sub verify_and_change_domcoord {
     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.'));
+#    $r->print(&mt('Registering Domain Coordinator access restrictions.'));
+    print_main_menu($r, &mt('Registering Domain Coordinator access restrictions.'));
 }
 
 #################################################################
@@ -720,14 +777,20 @@ sub msgforwardchanger {
                                           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',
                                         );
+    Apache::lonhtmlcommon::add_breadcrumb(
+	    {	href => '/adm/preferences?action=changemsgforward',
+		text => 'Change Message Forwarding/Notification'});
+    $r->print(Apache::loncommon::start_page('Change Message Forwarding/Notification'));
+    $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");
@@ -893,8 +956,8 @@ ENDMSG
     $r->print(qq|
 <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>
 |);
 
@@ -940,7 +1003,7 @@ sub verify_and_change_msgforward {
                     .'<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;
@@ -980,7 +1043,7 @@ sub verify_and_change_msgforward {
         $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) {
@@ -989,7 +1052,7 @@ sub verify_and_change_msgforward {
         $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) {
@@ -999,7 +1062,7 @@ sub verify_and_change_msgforward {
             $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 {
@@ -1008,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 />';
@@ -1023,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('Change Colors'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Colors'));
 # figure out colors
     my $function=&Apache::loncommon::get_users_function();
     my $domain=&Apache::loncommon::determinedomain();
@@ -1048,6 +1116,9 @@ 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">
 
@@ -1086,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
 }
@@ -1115,7 +1186,7 @@ sub verify_and_change_colors {
 	    $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 />';
 	}
     }
@@ -1123,12 +1194,13 @@ sub verify_and_change_colors {
     &Apache::lonnet::put('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
 }
 
 ######################################################
@@ -1140,6 +1212,11 @@ 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'});
+    $r->print(Apache::loncommon::start_page('Change Password'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Password'));
     if ((!defined($caller)) || ($caller eq 'preferences')) {
         $user = $env{'user.name'};
         $domain = $env{'user.domain'};
@@ -1265,7 +1342,7 @@ sub client_form {
                 'currentpass' => 'Current Password',
                 'newpass' => 'New Password',
                 'confirmpass' => 'Confirm Password',
-                'changepass' => 'Change Password');
+                'changepass' => 'Save');
 
     my $output = qq|
 <form name="client" >
@@ -1473,12 +1550,18 @@ 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);
+        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.');
+        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;
@@ -1489,6 +1572,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('Change Discussion Preferences'));
+    $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Discussion Preferences'));
     my $user       = $env{'user.name'};
     my $domain     = $env{'user.domain'};
     my %userenv = &Apache::lonnet::get
@@ -1517,9 +1605,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',
@@ -1582,7 +1670,7 @@ END
     $r->print(<<"END");
 <br />
 <br />
-<input type="submit" name="sub" value="Save Changes" />
+<input type="submit" name="sub" value="Save" />
 <br />
 <br />
 Note: $lt{'thde'}
@@ -1604,7 +1692,7 @@ sub verify_and_change_discussion {
         } 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'}) ) {
@@ -1616,12 +1704,13 @@ sub verify_and_change_discussion {
         } 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);
 }
 
 ################################################################
@@ -1629,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']);
@@ -1642,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" />
@@ -1657,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>');
 }
 
@@ -1681,7 +1782,7 @@ sub verify_and_change_coursepage {
     } 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'})) {
@@ -1696,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 Homepage',
+		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('Change Preferences'));
+    $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               #
@@ -1710,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'};
@@ -1767,7 +2139,7 @@ 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_Messages',
                       breadcrumb => 
@@ -1780,16 +2152,15 @@ sub handler {
                       breadcrumb => 
                           { href => '/adm/preferences?action=changemsgforward',
                             text => 'Change Message Forwarding/Notification'},
-                      printmenu => 'no',
+                      printmenu => 'yes',
                       subroutine => \&verify_and_change_msgforward }));
-    if (&Apache::lonnet::usertools_access($user,$domain,'aboutme')) {
-        my $aboutmeaction = '/adm/'.$domain.'/'.$user.'/aboutme';
-        push (@Options,{ action => 'none', 
-                         linktext =>
-                             q{Edit the 'About Me' Personal Information Screen},
-	   	         help => 'Prefs_About_Me',
-                         href => $aboutmeaction});
-    }
+    my $aboutmeaction=
+        '/adm/'.$env{'user.domain'}.'/'.$env{'user.name'}.'/aboutme';
+    push (@Options,{ action => 'none', 
+                     linktext =>
+                         q{Edit the Personal Homepage},
+		     help => 'Prefs_About_Me',
+                     href => $aboutmeaction});
     push (@Options,({ action => 'changecolors',
                       linktext => 'Change Color Scheme',
                       href => '/adm/preferences',
@@ -2064,7 +2435,7 @@ 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});
     }