]> git.openstreetmap.org Git - rails.git/blobdiff - public/javascripts/menu.js
Replace MySpace with AOL in the OpenID login buttons
[rails.git] / public / javascripts / menu.js
index 7a0cbf4198042fcb658e53e499147f222444a189..5b4c3050eb439fc1e66a0798cc85dc14a604baa7 100644 (file)
@@ -10,16 +10,26 @@ function openMenu(anchor, menu) {
   });
 }
 
+/*
+ * Close a menu.
+ */
+function closeMenu(menu) {
+  clearTimeout(menu.timer);
+  menu.style.display = "none";
+}
+
 /*
  * Callback called when the mouse enters a menu anchor.
  */
 function enterMenuAnchor(event, anchor, menu, delay) {
-  clearTimeout(menu.timer);
+  if (!anchor.hasClassName("disabled")) {
+    clearTimeout(menu.timer);
 
-  if (delay > 0) {
-    menu.timer = setTimeout(function () { openMenu(anchor, menu) }, delay);
-  } else {
-    openMenu(event, menu);
+    if (delay > 0) {
+      menu.timer = setTimeout(function () { openMenu(anchor, menu) }, delay);
+    } else {
+      openMenu(event, menu);
+    }
   }
 }
 
@@ -27,7 +37,7 @@ function enterMenuAnchor(event, anchor, menu, delay) {
  * Callback called when the mouse leaves a menu anchor.
  */
 function leaveMenuAnchor(event, anchor, menu) {
-  var to = event.relatedTarget || event.toElement;
+  var to = event.relatedTarget;
 
   if (to != menu && !to.descendantOf(menu)) {
     menu.style.display = "none";
@@ -40,7 +50,7 @@ function leaveMenuAnchor(event, anchor, menu) {
  * Callback called when the mouse leaves a menu.
  */
 function leaveMenu(event, anchor, menu) {
-  var to = event.relatedTarget || event.toElement;
+  var to = event.relatedTarget;
 
   if (to != anchor && !to.descendantOf(menu)) {
     menu.style.display = "none";
@@ -56,7 +66,9 @@ function createMenu(anchorid, menuid, delay) {
   var anchor = $(anchorid);
   var menu = $(menuid);
 
-  anchor.onmouseover = function (event) { enterMenuAnchor(anchor, anchor, menu, delay) };
-  anchor.onmouseout = function (event) { leaveMenuAnchor(event, anchor, menu) };
-  menu.onmouseout = function (event) { leaveMenu(event, anchor, menu) };
+  anchor.observe("mouseup", function (event) { closeMenu(menu) });
+  anchor.observe("mouseover", function (event) { enterMenuAnchor(anchor, anchor, menu, delay) });
+  anchor.observe("mouseout", function (event) { leaveMenuAnchor(event, anchor, menu) });
+  menu.observe("mouseup", function (event) { closeMenu(menu) });
+  menu.observe("mouseout", function (event) { leaveMenu(event, anchor, menu) });
 }