--- loncom/interface/lonhtmlcommon.pm	2009/08/13 16:12:51	1.182.4.5
+++ loncom/interface/lonhtmlcommon.pm	2008/12/17 12:59:49	1.196
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common html routines
 #
-# $Id: lonhtmlcommon.pm,v 1.182.4.5 2009/08/13 16:12:51 raeburn Exp $
+# $Id: lonhtmlcommon.pm,v 1.196 2008/12/17 12:59:49 harmsja Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -62,31 +62,6 @@ use Apache::lonlocal;
 use Apache::lonnet;
 use LONCAPA;
 
-##############################################
-##############################################
-
-=pod
-
-=item confirm_success
-
-Successful completion of an operation message
-
-=cut
-
-sub confirm_success {
-   my ($message,$failure)=@_;
-   if ($failure) {
-      return '<span class="LC_error">'."\n"
-            .'<img src="/adm/lonIcons/navmap.wrong.gif" alt="'.&mt('Error').'" /> '."\n"
-            .$message."\n"
-            .'</span>'."\n";
-   } else {
-      return '<span class="LC_success">'."\n"
-            .'<img src="/adm/lonIcons/navmap.correct.gif" alt="'.&mt('OK').'" /> '."\n"
-            .$message."\n"
-            .'</span>'."\n";
-   }
-}
 
 ##############################################
 ##############################################
@@ -130,13 +105,11 @@ sub dragmath_js {
     my ($popup) = @_;
     return <<ENDDRAGMATHJS;
                 <script type="text/javascript">
-                // <![CDATA[
                   function mathedit(textarea, doc) {
                      targetEntry = textarea;
                      targetDoc   = doc;
                      newwin  = window.open("/adm/dragmath/applet/$popup.html","","width=565,height=500,resizable");
                   }
-                // ]]>
                 </script>
 
 ENDDRAGMATHJS
@@ -312,7 +285,7 @@ sub checkbox {
         $Str .= 'value="'.$value.'"';
     } 
     if ($checked) {
-        $Str .= ' checked="checked"';
+        $Str .= ' checked="1"';
     }
     $Str .= ' />';
     return $Str;
@@ -334,7 +307,7 @@ sub radio {
         $Str .= 'value="'.$value.'"';
     } 
     if ($checked eq $value) {
-        $Str .= ' checked="checked"';
+        $Str .= ' checked="1"';
     }
     $Str .= ' />';
     return $Str;
@@ -432,7 +405,6 @@ sub date_setter {
     my $result = "\n<!-- $dname date setting form -->\n";
     $result .= <<ENDJS;
 <script type="text/javascript">
-// <![CDATA[
     function $dname\_checkday() {
         var day   = document.$formname.$dname\_day.value;
         var month = document.$formname.$dname\_month.value;
@@ -493,10 +465,9 @@ document.$formname.$dname\_year.value,
         }
 
     }
-// ]]>
 </script>
 ENDJS
-    $result .= '  <span style="white-space: nowrap;">';
+    $result .= '  <span class="LC_nobreak">';
     my $monthselector = qq{<select name="$dname\_month" $special $state onchange="javascript:$dname\_checkday()" >};
     # Month
     my @Months = qw/January February  March     April   May      June 
@@ -505,23 +476,23 @@ ENDJS
     unshift(@Months,'If you can read this an error occurred');
     if ($includeempty) { $monthselector.="<option value=''></option>"; }
     for(my $m = 1;$m <=$#Months;$m++) {
-        $monthselector .= qq{      <option value="$m"};
-        $monthselector .= ' selected="selected"' if ($m-1 eq $month);
-        $monthselector .= '> '.&mt($Months[$m]).' </option>'."\n";
+        $monthselector .= qq{      <option value="$m" };
+        $monthselector .= "selected " if ($m-1 eq $month);
+        $monthselector .= '> '.&mt($Months[$m]).' </option>';
     }
     $monthselector.= '  </select>';
     # Day
     my $dayselector = qq{<input type="text" name="$dname\_day" $state value="$mday" size="3" $special onchange="javascript:$dname\_checkday()" />};
     # Year
-    my $yearselector = qq{<input type="text" name="$dname\_year" $state value="$year" size="5" $special onchange="javascript:$dname\_checkday()" />};
+    my $yearselector = qq{<input type="year" name="$dname\_year" $state value="$year" size="5" $special onchange="javascript:$dname\_checkday()" />};
     #
     my $hourselector = qq{<select name="$dname\_hour" $special $state >};
     if ($includeempty) { 
         $hourselector.=qq{<option value=''></option>};
     }
     for (my $h = 0;$h<24;$h++) {
-        $hourselector .= qq{<option value="$h"};
-        $hourselector .= ' selected="selected"' if (defined($hour) && $hour == $h);
+        $hourselector .= qq{<option value="$h" };
+        $hourselector .= "selected " if (defined($hour) && $hour == $h);
         $hourselector .= ">";
         my $timest='';
         if ($h == 0) {
@@ -609,7 +580,7 @@ Inputs:
 
 =item $dname
 
-The name passed to &date_setter, which prefixes the form elements.
+The name passed to &datesetter, which prefixes the form elements.
 
 =item $defaulttime
 
@@ -979,7 +950,6 @@ sub Create_PrgWin {
 	#the whole function called through timeout is due to issues
 	#in mozilla Read BUG #2665 if you want to know the whole story
 	&r_print($r,'<script type="text/javascript">'.
-        '// <![CDATA['.
         "var popwin;
          function openpopwin () {
          popwin=open(\'\',\'popwin\',\'width=400,height=100\');".
@@ -990,9 +960,7 @@ sub Create_PrgWin {
 	      &mt('Starting').'" /><\\/form>'.$end_page.
               "\');".
         "popwin.document.close();}".
-        "\nwindow.setTimeout(openpopwin,0).
-        '// ]]>'.
-        '</script>");
+        "\nwindow.setTimeout(openpopwin,0)</script>");
 	$prog_state{'formname'}='popremain';
 	$prog_state{'inputname'}="remaining";
     } elsif ($type eq 'inline') {
@@ -1025,14 +993,10 @@ sub Create_PrgWin {
 # update progress
 sub Update_PrgWin {
     my ($r,$prog_state,$displayString)=@_;
-    &r_print($r,'<script type="text/javascript">'.
-             '// <![CDATA['.
-             $$prog_state{'window'}.'.document.'.
+    &r_print($r,'<script type="text/javascript">'.$$prog_state{'window'}.'.document.'.
 	     $$prog_state{'formname'}.'.'.
 	     $$prog_state{'inputname'}.'.value="'.
-	     $displayString.'";'.
-             '// ]]>'.
-             '</script>');
+	     $displayString.'";</script>');
     $$prog_state{'laststart'}=&Time::HiRes::time();
 }
 
@@ -1085,15 +1049,11 @@ sub Increment_PrgWin {
     if ($user_browser eq 'explorer' && $user_os =~ 'mac') {
         $lasttime = '';
     }
-    &r_print($r,'<script>'.
-             '// <![CDATA['.
-             $$prog_state{'window'}.'.document.'.
+    &r_print($r,'<script>'.$$prog_state{'window'}.'.document.'.
 	     $$prog_state{'formname'}.'.'.
 	     $$prog_state{'inputname'}.'.value="'.
 	     $$prog_state{'done'}.'/'.$$prog_state{'max'}.
-	     ': '.$time_est.' '.&mt('remaining').' '.$lasttime.'";'.
-             '// ]]>'.
-             '</script>');
+	     ': '.$time_est.' '.&mt('remaining').' '.$lasttime.'";'.'</script>');
     $$prog_state{'laststart'}=&Time::HiRes::time();
 }
 
@@ -1101,11 +1061,7 @@ sub Increment_PrgWin {
 sub Close_PrgWin {
     my ($r,$prog_state)=@_;
     if ($$prog_state{'type'} eq 'popup') {
-	&r_print($r,'<script>'.
-                 '// <![CDATA['.
-                 'popwin.close()'.
-                 '// ]]>'.
-                 '</script>'."\n");
+	&r_print($r,'<script>popwin.close()</script>'."\n");
     } elsif ($$prog_state{'type'} eq 'inline') {
 	&Update_PrgWin($r,$prog_state,&mt('Done'));
     }
@@ -1186,8 +1142,7 @@ sub spellheader {
 
     my $nothing=&javascript_nothing();
     return (<<ENDCHECK);
-<script type="text/javascript">
-// <![CDATA[
+<script type="text/javascript"> 
 //<!-- BEGIN LON-CAPA Internal
 var checkwin;
 
@@ -1198,7 +1153,6 @@ function spellcheckerwindow(string) {
     checkwin.document.close();
 }
 // END LON-CAPA Internal -->
-// ]]>
 </script>
 ENDCHECK
 }
@@ -1272,8 +1226,7 @@ sub htmlareaselectactive {
     my @fields=@_;
     unless (&htmlareabrowser()) { return ''; }
     if (&htmlareablocked()) { return '<br />'.&enablelink(@fields); }
-    my $output='<script type="text/javascript" defer="1">'.
-               '// <![CDATA[';
+    my $output='<script type="text/javascript" defer="1">';
     my $lang = &htmlarea_lang();
     foreach my $field (@fields) {
 	$output.="
@@ -1286,9 +1239,7 @@ sub htmlareaselectactive {
     oFCKeditor.Config['DefaultLanguage'] = '$lang';
 }";
     }
-    $output.="\nwindow.status='Activated Editfields';\n".
-             '// ]]>'.
-             '</script><br />'.
+    $output.="\nwindow.status='Activated Editfields';\n</script><br />".
 	&disablelink(@fields);
     return $output;
 }
@@ -1352,17 +1303,17 @@ returns: nothing
     my @Crumbs;
     
     sub breadcrumbs {
-        my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt) = @_;
+        my ($component,$component_help,$menulink,$helplink,$css_class) = @_;
         #
 	$css_class ||= 'LC_breadcrumbs';
-        my $Str = "\n".'<table class="'.$css_class.'"><tr><td>';
+        my $Str = "\n".'<table class="'.$css_class.'"><tr><td><ol id="LC_MenuBreadcrumbs">';
         #
         # Make the faq and bug data cascade
         my $faq = '';
         my $bug = '';
 	my $help='';
 	# Crumb Symbol
-	my $crumbsymbol = '&raquo;&nbsp;';
+	my $crumbsymbol = ' &#x25b6; ';
         # The last breadcrumb does not have a link, so handle it separately.
         my $last = pop(@Crumbs);
         #
@@ -1391,25 +1342,25 @@ returns: nothing
                      $faq = $_->{'faq'} if (exists($_->{'faq'}));
                      $bug = $_->{'bug'} if (exists($_->{'bug'}));
                      $help = $_->{'help'} if (exists($_->{'help'}));
-                     my $result = '<a href="'.$_->{'href'}.'" ';
+                     my $result = '<li><a href="'.$_->{'href'}.'" ';
                      if (defined($_->{'target'}) && $_->{'target'} ne '') {
                          $result .= 'target="'.$_->{'target'}.'" ';
                      }
 		     if ($_->{'no_mt'}) {
 			 $result .='title="'.$_->{'title'}.'">'.
-			     $_->{'text'}.'</a>';
+			     $_->{'text'}.'</a></li>';
 		     } else {
 			 $result .='title="'.&mt($_->{'title'}).'">'.
-			     &mt($_->{'text'}).'</a>';
+			     &mt($_->{'text'}).'</a></li>';
 		     }
                      $result;
                      } @Crumbs
                  );
         $links .= $crumbsymbol if ($links ne '');
 	if ($last->{'no_mt'}) {
-	    $links .= '<b>'.$last->{'text'}.'</b>';
+	    $links .= '<li><b>'.$last->{'text'}.'</b></li>';
 	} else {
-	    $links .= '<b>'.&mt($last->{'text'}).'</b>';
+	    $links .= '<li><b>'.&mt($last->{'text'}).'</b></li>';
 	}
         #
         my $icons = '';
@@ -1429,15 +1380,11 @@ returns: nothing
 							 $faq,$bug);
 	}
         #
-        $Str .= $links.'</td>';
+        $Str .= $links.'</ol></td>';
         #
         if (defined($component)) {
-            $Str .= '<td class="'.$css_class.'_component">';
-            if ($no_mt) {
-                $Str .= $component;
-            } else {
-                $Str .= &mt($component);
-            }
+            $Str .= '<td class="'.$css_class.'_component">'.
+                &mt($component);
 	    if ($icons ne '') {
 		$Str .= '&nbsp;'.$icons;
 	    }
@@ -1551,9 +1498,9 @@ END
 }
 
 sub row_title {
-    my ($title,$css_title_class,$css_value_class) = @_;
     $row_count[0]++;
     my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row';
+    my ($title,$css_title_class,$css_value_class) = @_;
     $css_title_class ||= 'LC_pick_box_title';
     $css_title_class = 'class="'.$css_title_class.'"';
 
@@ -1599,7 +1546,7 @@ sub role_select_row {
         $output = &row_title($title,$css_class);
     }
     $output .= qq|
-                                  <select name="roles" multiple="multiple" >\n|;
+                                  <select name="roles" multiple >\n|;
     foreach my $role (@$roles) {
         my $plrole;
         if ($role eq 'ow') {
@@ -1644,7 +1591,6 @@ sub course_selection {
     my ($formname,$totcodes,$codetitles,$idlist,$idlist_titles) = @_;
     my $output = qq|
 <script type="text/javascript">
-// <![CDATA[
     function coursePick (formname) {
         for  (var i=0; i<formname.coursepick.length; i++) {
             if (formname.coursepick[i].value == 'category') {
@@ -1667,7 +1613,6 @@ sub course_selection {
             formname.courselist = '';
         }
     }
-// ]]>
 </script>
     |;
     my $courseform='<b>'.&Apache::loncommon::selectcourse_link
@@ -1728,7 +1673,7 @@ sub status_select_row {
         $output = &row_title($title,$css_class,'LC_pick_box_select');
     }
     $output .= qq|
-                                    <select name="types" multiple="multiple">\n|;
+                                    <select name="types" multiple>\n|;
     foreach my $status_type (sort(keys(%{$types}))) {
         $output .= '  <option value="'.$status_type.'">'.$$types{$status_type}.'</option>';
     }
@@ -1772,6 +1717,7 @@ sub email_default_row {
 
 sub submit_row {
     my ($title,$cmd,$submit_text,$css_class) = @_;
+    $submit_text = &mt($submit_text);
     my $output = &row_title($title,$css_class,'LC_pick_box_submit');
     $output .= qq|
              <br />
@@ -1813,7 +1759,8 @@ sub topic_bar {
     return '
 <div class="LC_topic_bar">
     <img alt="'.&mt('Step [_1]',$imgnum).
-              '" src="/res/adm/pages/bl_step'.$imgnum.'.gif" />&nbsp;'.$title
+              '"src="/res/adm/pages/bl_step'.$imgnum.'.gif" />&nbsp;
+    <span>'.$title.'</span>
 </div>
 ';
 }
@@ -2067,6 +2014,74 @@ END
     return $scripttag;
 }
 
+##############################################
+##############################################
+
+# generate_menu
+#
+# Generates html markup for a menu. 
+#
+# Inputs:
+# An array of following structure:
+#   ({	categorytitle => 'Categorytitle',
+#	items => [
+#		    {	linktext    =>	'Text to be displayed',
+#			url	    =>	'URL the link is pointing to, i.e. /adm/site?action=dosomething',
+#			permission  =>	'Contains permissions as returned from lonnet::allowed(),
+#					 must evaluate to true in order to activate the link',
+#			icon        =>  'icon filename',
+#			alttext	    =>	'alt text for the icon',
+#			help	    =>	'Name of the corresponding helpfile',
+#			linktitle   =>	'Description of the link (used for title tag)'
+#		    },
+#		    ...
+#		]
+#   }, 
+#   ...
+#   )
+#
+# Outputs: A scalar containing the html markup for the menu.
+
+# ---- Remove when done ----
+# This routine is part of the redesign of LON-CAPA and it's 
+# subject to change during this project.
+# Don't rely on its current functionality as it might be 
+# changed or removed.
+# TODO:
+# check for empty values
+# --------------------------
+
+sub generate_menu {
+    my @menu = @_;
+    my $menu_html = qq|<div class="LC_columnSection">|;
+
+    foreach my $category (@menu) { #FIXME: insert appropriate classnames for styles when they're finished.
+	$menu_html .='<div class="LC_ContentBoxSpecial">
+			<h3 class="LC_hcell">'.mt($category->{'categorytitle'}).'</h3>
+			<ul class="LC_ListStyleNormal">';
+	foreach my $item ( @{ $category->{items} } ) {
+	    next unless $item->{'permission'};
+	    $menu_html .= qq|<li class="LC_menubuttons_inline_text"><a href="$item->{'url'}" title="|.mt($item->{'linktitle'}).'">';
+            if($item->{'icon'}){
+                $menu_html .= qq|<img class ="LC_noBorder LC_middle" src="/res/adm/pages/$item->{'icon'}" alt="|;
+		if($item->{'alttext'}){
+		    $menu_html .= $item->{'alttext'}.'"/></a>';
+		} else { #use linktext as alt text for the icon
+		    $menu_html .= qq|$item->{'linktext'}"/></a>|;
+                } 
+            }
+	    $menu_html .= qq|<a href="$item->{'url'}" title="|.mt($item->{'linktitle'}).'">';
+            $menu_html .= mt($item->{'linktext'}).'</a>';
+	    if (exists($item->{'help'})) {
+		$menu_html .= Apache::loncommon::help_open_topic($item->{'help'});
+	    }
+	    $menu_html .= '</li>';
+	}
+	$menu_html .= '</ul></div>';
+    }
+    $menu_html .= qq|</div>|;
+    return $menu_html;
+}
 
 
 1;