Index: openacs-4/packages/contacts/lib/contacts-master.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/lib/contacts-master.adp,v
diff -u -r1.4 -r1.5
--- openacs-4/packages/contacts/lib/contacts-master.adp	10 Dec 2005 11:21:22 -0000	1.4
+++ openacs-4/packages/contacts/lib/contacts-master.adp	14 Jan 2007 15:52:56 -0000	1.5
@@ -12,7 +12,7 @@
   <div id="section">
     <ul>
     <multiple name="links">
-      <li><a href="@links.url@" title="Go to @links.label@"><if @links.selected_p@><strong></if>@links.label@<if @links.selected_p@></strong></if></a><if @links:rowcount@ eq @links.rownum@><em>&nbsp;</em></if> </li>
+      <li><a href="@links.url@" title="Go to @links.label@" id="@links.id@" onmouseover="@links.mouseover;noquote@"><if @links.selected_p@><strong></if>@links.label@<if @links.selected_p@></strong></if></a><if @links:rowcount@ eq @links.rownum@><em>&nbsp;</em></if> </li>
     </multiple>
     </ul>
   </div>
@@ -25,6 +25,8 @@
     <link href="/resources/contacts/contacts.css" rel="stylesheet" type="text/css">
   </property>
 </else>
+
+@js_script;noquote@
 <slave>
 
 
Index: openacs-4/packages/contacts/lib/contacts-master.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/lib/contacts-master.tcl,v
diff -u -r1.14 -r1.15
--- openacs-4/packages/contacts/lib/contacts-master.tcl	16 Dec 2006 11:27:19 -0000	1.14
+++ openacs-4/packages/contacts/lib/contacts-master.tcl	14 Jan 2007 15:52:56 -0000	1.15
@@ -14,41 +14,78 @@
 set link_list [list]
 lappend link_list "${package_url}"
 lappend link_list "[_ contacts.Contacts]"
+lappend link_list "contacts"
+lappend link_list ""
 
 if { ![parameter::get -boolean -parameter "ForceSearchBeforeAdd" -default "0"] } {
-    lappend link_list "${package_url}add/employee"
-    lappend link_list "[_ contacts.Add_Employee]"
+    set addlist [list [list [list "text" "[_ contacts.Add_Employee]"] [list "url" "${package_url}add/employee"] ] \
+		     [list [list "text" "[_ contacts.Add_Person]"] [list "url" "${package_url}add/person"] ] \
+		     [list [list "text" "[_ contacts.Add_Organization]"] [list "url" "${package_url}add/organization"] ] \
+		     ]
+    
+    ah::yui::menu_from_list -varname "oMenu1" \
+	-id "basicmenu1" \
+	-menulist $addlist \
+	-arrayname "yuimenu1" \
+	-options "context:new Array(\"menu1\",\"tl\",\"bl\")" \
+	-css "/resources/contacts/yuimenu/menu.css"
 
-    lappend link_list "${package_url}add/person"
-    lappend link_list "[_ contacts.Add_Person]"
+        
+    set action_script1 $yuimenu1(show)
 
-    lappend link_list "${package_url}add/organization"
-    lappend link_list "[_ contacts.Add_Organization]"
+    lappend link_list "javascript:void(0)" ; # HREF
+    lappend link_list "[_ contacts.Add]" ; # Title
+    lappend link_list "menu1" ; # ID
+    lappend link_list "$action_script1" ; # Mouseover
 }
 
-lappend link_list "${package_url}search"
-lappend link_list "[_ contacts.Advanced_Search]"
+set addlist [list [list [list "text" "[_ contacts.Advanced_Search]"] [list "url" "${package_url}search"] ] \
+		 [list [list "text" "[_ contacts.Saved_Searches]"] [list "url" "${package_url}searches"] ] \
+		]
 
-lappend link_list "${package_url}searches"
-lappend link_list "[_ contacts.Saved_Searches]"
+ah::yui::menu_from_list -varname "oMenu2" \
+    -id "basicmenu2" \
+    -menulist $addlist \
+    -arrayname "yuimenu2" \
+    -options "context:new Array(\"menu2\",\"tl\",\"bl\")" \
+    -css "/resources/contacts/yuimenu/menu.css"
 
+set action_script1 $yuimenu2(show)
+
+lappend link_list "javascript:void(0)" ; # HREF
+lappend link_list "[_ contacts.Search]" ; # Title
+lappend link_list "menu2" ; # ID
+lappend link_list "$action_script1" ; # Mouseover
+
+
 # this should be taken care of by a callback...
 if { [apm_package_enabled_p tasks] } {
     lappend link_list "${package_url}tasks"
     lappend link_list "[_ tasks.Tasks]"
+    lappend link_list "tasks"
+    lappend link_list ""
+    
     lappend link_list "${package_url}processes"
     lappend link_list "[_ tasks.Processes]"
+    lappend link_list "processes"
+    lappend link_list ""
 }
 
 lappend link_list "${package_url}messages"
 lappend link_list "[_ contacts.Messages]"
+lappend link_list "messages"
+lappend link_list ""
 
 lappend link_list "${package_url}settings"
 lappend link_list "[_ contacts.Settings]"
+lappend link_list "settings"
+lappend link_list ""
 
 if { [permission::permission_p -object_id [ad_conn package_id] -privilege "admin"] } {
     lappend link_list "${package_url}admin/"
     lappend link_list "[_ contacts.Admin]"
+    lappend link_list "admin"
+    lappend link_list ""
 }
 
 
@@ -57,10 +94,10 @@
 set page_query [ad_conn query]
 
 # Convert the list to a multirow and add the selected_p attribute
-multirow create links label url selected_p
+multirow create links label url id mouseover selected_p
 
 set navbar {}
-foreach {url label} $link_list {
+foreach {url label id mouseover} $link_list {
     set selected_p 0
 
     if {[string equal $page_url $url]} {
@@ -72,7 +109,7 @@
 	}
     }
     lappend navbar [list [subst $url] $label]
-    multirow append links $label [subst $url] $selected_p
+    multirow append links $label [subst $url] $id $mouseover $selected_p
 }
 
 if { [parameter::get -boolean -parameter "ForceSearchBeforeAdd" -default "0"] } {
@@ -89,4 +126,11 @@
 } else {
     set context [list $title]
 }
+
+
+# Finalize the Javascript menus
+set js_script $yuimenu1(render)
+append js_script $yuimenu2(render)
+set js_script [ah::enclose_in_script -script ${js_script} ]
+
 ad_return_template
Index: openacs-4/packages/contacts/www/resources/contacts.css
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/www/resources/contacts.css,v
diff -u -r1.14 -r1.15
--- openacs-4/packages/contacts/www/resources/contacts.css	2 Jun 2006 09:18:31 -0000	1.14
+++ openacs-4/packages/contacts/www/resources/contacts.css	14 Jan 2007 15:52:56 -0000	1.15
@@ -215,7 +215,6 @@
   border-left: 1px solid #333;
   margin: 0px 0px 10px 0px;
   padding: 0px;
-  text-transform: lowercase;
   background: #CCC;
 }
 
Index: openacs-4/packages/contacts/www/resources/yuimenu/menu.css
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/www/resources/yuimenu/menu.css,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/contacts/www/resources/yuimenu/menu.css	14 Jan 2007 15:52:56 -0000	1.1
@@ -0,0 +1,297 @@
+/*
+Copyright (c) 2006, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.txt
+Version: 0.12.1
+*/
+
+
+
+/* Menu styles */
+
+div.yuimenu {
+
+    background-color:#ccc;
+    border:solid 1px #c4c4be;
+    padding:1px;
+    
+}
+
+/* Submenus are positioned absolute and hidden by default */
+
+div.yuimenu div.yuimenu,
+div.yuimenubar div.yuimenu {
+
+    position:absolute;
+    visibility:hidden;
+
+}
+
+/* MenuBar Styles */
+
+div.yuimenubar {
+
+    background-color:#f6f7ee;
+    
+}
+
+/*
+    Applying a width triggers "haslayout" in IE so that the module's
+    body clears its floated elements
+*/
+div.yuimenubar div.bd {
+
+    width:100%;
+
+}
+
+/*
+    Clear the module body for other browsers
+*/
+div.yuimenubar div.bd:after {
+
+    content:'.';
+    display:block;
+    clear:both;
+    visibility:hidden;
+    height:0;
+
+}
+
+
+/* Matches the group title (H6) inside a Menu or MenuBar instance */
+
+div.yuimenu h6,
+div.yuimenubar h6 { 
+
+    font-size:100%;
+    font-weight:normal;    
+    margin:0;
+    border:solid 1px #c4c4be;
+    color:#b9b9b9;    
+
+}
+
+div.yuimenubar h6 {
+
+    float:left;
+    display:inline; /* Prevent margin doubling in IE */
+    padding:4px 12px;
+    border-width:0 1px 0 0;
+    
+}
+
+div.yuimenu h6 {
+
+    float:none;
+    display:block;
+    border-width:1px 0 0 0;
+    padding:5px 10px 0 10px;
+
+}
+
+
+/* Matches the UL inside a Menu or MenuBar instance */
+
+div.yuimenubar ul {
+
+    list-style-type:none;
+    margin:0;
+    padding:0;
+
+}
+
+div.yuimenu ul {
+
+    list-style-type:none;
+    border:solid 1px #c4c4be;
+    border-width:1px 0 0 0;
+    margin:0;
+    padding:10px 0;
+
+}
+
+
+div.yuimenu ul.first-of-type, 
+div.yuimenu ul.hastitle,
+div.yuimenu h6.first-of-type {
+
+    border-width:0;
+
+}
+
+
+/* MenuItem and MenuBarItem styles */
+
+div.yuimenu li,
+div.yuimenubar li {
+
+    font-size:85%;
+    cursor:pointer;
+    cursor:hand;
+    white-space:nowrap;
+    text-align:left;
+
+}
+
+div.yuimenu li.yuimenuitem {
+
+    padding:2px 24px;
+    
+}
+
+div.yuimenu li li,
+div.yuimenubar li li {
+
+    font-size:100%;
+
+}
+
+
+/* Matches the help text for a menu item */
+
+div.yuimenu li em {
+
+    font-style:normal;
+    margin:0 0 0 40px;
+
+}
+
+div.yuimenu li a em {
+
+    margin:0;
+
+}
+
+div.yuimenu li a,
+div.yuimenubar li a {
+    
+    /*
+        "zoom:1" triggers "haslayout" in IE to ensure that the mouseover and 
+        mouseout events bubble to the parent LI in IE.
+    */
+    zoom:1;
+    color:#000;
+    text-decoration:none;
+    
+}
+
+div.yuimenu li.hassubmenu,
+div.yuimenu li.hashelptext {
+
+    text-align:right;
+
+}
+
+div.yuimenu li.hassubmenu a.hassubmenu,
+div.yuimenu li.hashelptext a.hashelptext {
+
+    float:left;
+    display:inline; /* Prevent margin doubling in IE */
+    text-align:left;
+
+}
+
+
+/* Matches focused and selected menu items */
+
+div.yuimenu li.selected,
+div.yuimenubar li.selected {
+
+    background-color:#8c8ad0;
+
+}
+
+div.yuimenu li.selected a.selected,
+div.yuimenubar li.selected a.selected {
+
+    text-decoration:underline;
+
+}
+
+div.yuimenu li.selected a.selected,
+div.yuimenu li.selected em.selected, 
+div.yuimenubar li.selected a.selected {
+
+    color:#fff;
+
+}
+
+
+/* Matches disabled menu items */
+
+div.yuimenu li.disabled, 
+div.yuimenubar li.disabled {
+
+    cursor:default;
+
+}
+
+div.yuimenu li.disabled a.disabled,
+div.yuimenu li.disabled em.disabled,
+div.yuimenubar li.disabled a.disabled {
+
+    color:#b9b9b9;
+    cursor:default;
+    
+}
+
+div.yuimenubar li.yuimenubaritem {
+
+    float:left;
+    display:inline; /* Prevent margin doubling in IE */
+    border-width:0 0 0 1px;
+    border-style:solid;
+    border-color:#c4c4be;
+    padding:4px 24px;
+    margin:0;
+
+}
+
+div.yuimenubar li.yuimenubaritem.first-of-type {
+
+    border-width:0;
+
+}
+
+
+/* Matches the submenu indicator for menu items */
+
+div.yuimenubar li.yuimenubaritem img {
+
+    height:8px;
+    width:8px;
+    margin:0 0 0 10px;
+    vertical-align:middle;
+
+}
+
+div.yuimenu li.yuimenuitem img {
+
+    height:8px;
+    width:8px;
+    margin:0 -16px 0 0;
+    padding-left:10px;
+    border:0;
+
+}
+
+div.yuimenu li.checked {
+
+    position:relative;
+
+}
+
+div.yuimenu li.checked img.checked {
+
+    height:8px;
+    width:8px;
+    margin:0;
+    padding:0;
+    border:0;
+    position:absolute;
+    left:6px;
+    _left:-16px; /* Underscore hack b/c this is for IE 6 only */
+    top:.5em;
+    
+}
\ No newline at end of file