| Server IP : 195.130.67.5 / Your IP : 216.73.217.154 Web Server : Microsoft-IIS/10.0 System : Windows NT WEBSERVER1 10.0 build 17763 (Windows Server 2016) i586 User : IUSR ( 0) PHP Version : 7.4.19 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /Old Sites/Engineering/V2/modules/mod_exmenu-j15/surckerfish_menu/js/ |
Upload File : |
// based on http://www.alistapart.com/articles/dropdowns and http://www.htmldog.com/articles/suckerfish/dropdowns/
if ((document.all) && (document.getElementById)) {
function MenuListElementHoverFix() {
var _this = this;
if (typeof(Array.prototype.push) == 'undefined') {
// IE < 5.5 does not support push/pop
function push() {
var j = this.length;
for (var i = 0; i < push.arguments.length; ++i) {
this[j] = push.arguments[i];
j++;
}
}
function pop() {
var i = this[this.length - 1];
this.length--;
return i;
}
Array.prototype.push = push;
Array.prototype.pop = pop;
}
this.className = 'hover'; // change the class name to use here if you are not happy with it
this.classNameSuffix = ' ' + this.className;
this.removeClassNameRegExp = new RegExp("\\b ?" + this.className + "\\b");
this.hoverElementStack = new Array();
this.onmouseover = function() {
if (!_this.isHover(this)) {
if (this.getAttribute('is_hover_class_removing') != 'true') {
this.className += _this.classNameSuffix;
}
this.setAttribute('is_hover', 'true');
}
}
this.isHover = function(element) {
return (element.getAttribute('is_hover') == 'true');
}
this.checkNonHoverState = function(element) {
if (!_this.isHover(element)) {
element.className = element.className.replace(_this.removeClassNameRegExp, '');
}
element.removeAttribute('is_hover_class_removing');
}
this.checkLastNonHoverState = function() {
var hoverElement = null;
if (_this.hoverElementStack.length > 0) {
hoverElement = _this.hoverElementStack.pop();
}
for (var i = _this.hoverElementStack.length - 1; i >= 0; i--) {
// we need to apply the "non-hover" class to the children first - else the result is mixed in the IE
var o = _this.hoverElementStack[i];
while (o != null) {
o = o.offsetParent;
if (o == hoverElement) {
_this.checkNonHoverState(_this.hoverElementStack[i]);
break;
}
}
}
if (hoverElement != null) {
_this.checkNonHoverState(hoverElement);
}
}
this.onmouseout = function() {
// all this mess to not change the class immediately (which would cause flickering in the IE)
this.setAttribute('is_hover', 'false');
if (this.getAttribute('is_hover_class_removing') != 'true') {
this.setAttribute('is_hover_class_removing', 'true');
_this.hoverElementStack.push(this);
window.setTimeout(_this.checkLastNonHoverState, 100);
}
}
this.fixElement = function(elementRoot) {
for (var i=0; i < elementRoot.childNodes.length; i++) {
var node = elementRoot.childNodes[i];
if (node.nodeName == "LI") {
node.onmouseover = this.onmouseover;
node.onmouseout = this.onmouseout;
}
this.fixElement(node);
}
};
this.findElement = function(elementRoot) {
for (var i=0; i< elementRoot.childNodes.length; i++) {
var node = elementRoot.childNodes[i];
if (node.nodeName == "UL") {
if ((node.id != '') && ((node.id.indexOf("menu") >= 0) || (node.id.indexOf("nav") >= 0))) {
this.fixElement(node);
continue; // do not iterate through children of already fixed element
}
}
this.findElement(node);
}
};
this.fix = function() {
var node = document.body;
if (node) {
_this.findElement(node);
}
}
this.addOnLoad = function() {
if (window.attachEvent) {
window.attachEvent("onload", this.fix);
} else {
window.onload = this.fix;
}
}
}
(new MenuListElementHoverFix()).addOnLoad();
}