// window.attachEvent("onload", mladdevents); /* Change for cross-browsing start by - jessica */ if (window.addEventListener) { window.addEventListener("onload", mladdevents); } else if (window.attachEvent) { window.attachEvent("onload", mladdevents); } /* Change for cross-browsing end by - jessica */ var mouseUsed = false; var escPressed = false; function mladdevents() { var Iframe; if (window.mlrunShim == true) { Iframe = document.createElement("iframe"); Iframe.setAttribute("src", "about:blank"); Iframe.setAttribute("scrolling", "no"); Iframe.setAttribute("frameBorder", "0"); Iframe.style.zIndex = "2"; Iframe.style.filter = 'alpha(opacity=0)'; Iframe.setAttribute("style", "position:absolute;"); } var effects_a = new Array(); var divs = document.getElementsByTagName('div'); for ( var j = 0; j < divs.length; j++) { if (divs[j].className.indexOf('mlmenu') != -1) { var lis = divs[j].getElementsByTagName('li'); for ( var i = 0; i < lis.length; i++) { lis[i].onmouseover = mlover1; lis[i].onkeydown = mlover2; // changed by varalika lis[i].onmouseout = mloutSetTimeout; // lis[i].onkeypress = mloutSetTimeout; lis[i].ondblclick = mlout; lis[i].onhelp = mloutEsc; if (window.mlrunShim == true) { lis[i].appendChild(Iframe.cloneNode(false)); } if (lis[i].getElementsByTagName('ul').length > 0) { lis[i].className += ' haschild'; lis[i].style.zIndex = '10000'; if (divs[j].className.indexOf('arrow') != -1) { if (divs[j].className.indexOf('vertical') != -1 || lis[i].parentNode.parentNode.nodeName != 'DIV') { lis[i].getElementsByTagName('a')[0].innerHTML += ' '; lis[i].getElementsByTagName('a')[0].className += ' vert vertNext'; } else { lis[i].getElementsByTagName('a')[0].innerHTML += ' '; lis[i].getElementsByTagName('a')[0].className += ' horz'; } } else if (divs[j].className.indexOf('plus') != -1) { lis[i].getElementsByTagName('a')[0].innerHTML += '+'; } } else { if (divs[j].className.indexOf('arrow') != -1) { // This accounts for a wierd IE-specific bug in // horizontal menus. CSS will set visibility: hidden;. // This keeps the menu level(in IE) lis[i].getElementsByTagName('a')[0].innerHTML += ''; } } var uls = lis[i].getElementsByTagName('ul'); for ( var k = 0; k < uls.length; k++) { var found = 'no'; for ( var z = 0; z < effects_a.length; z++) { if (effects_a[z] == uls[k]) { found = 'yes'; } } if (found == 'no') { effects_a[effects_a.length] = uls[k]; uls[k].style.zIndex = '100'; mlEffectLoad(uls[k]); } } } } } } function mloutEsc(e) { // alert('in mloutEsc') if (!e) { var the_e = window.event; } else { var the_e = e; } // alert('if else workde') // var reltg = (the_e.relatedTarget) ? the_e.relatedTarget : // the_e.toElement; var reltg = true; // alert('got the reltg'+reltg); if (reltg) { var under = ancestor(reltg, this); // alert('fetched the ancestor') if (under === false && reltg != this) { window.mlLast = this; var parent = this.parentNode; while (parent.parentNode && parent.className.indexOf('mlmenu') == -1) { parent = parent.parentNode; } if (parent.className.indexOf('delay') != -1) { window.mlTimeout = setTimeout(function() { mlout() }, 500); } else { escPressed = true; mlout(); } } } } function mloutSetTimeout(e) { // alert('in mloutSetTimeout') if (mouseUsed == true) { resetLastSelectedLI(); } if (!e) { var the_e = window.event; } else { var the_e = e; } // alert('if else workde') var reltg = (the_e.relatedTarget) ? the_e.relatedTarget : the_e.toElement; // var reltg = true; // alert('got the reltg'+reltg); if (reltg) { var under = ancestor(reltg, this); // alert('fetched the ancestor') if (under === false && reltg != this) { window.mlLast = this; var parent = this.parentNode; while (parent.parentNode && parent.className.indexOf('mlmenu') == -1) { parent = parent.parentNode; } if (parent.className.indexOf('delay') != -1) { window.mlTimeout = setTimeout(function() { mlout() }, 500); } else { mlout(); } } } } function mlout(e) { // alert('in mlout :: ' + window.mlLast.innerHTML) if (window.mlLast == null) return false; if (!e) { var the_e = window.event; } else { var the_e = e; } var lastSelectedLI = null; lastSelectedLI = getLastSelectedLI(); if (mouseUsed == false && this.innerHTML == undefined && escPressed == false) { return false; } if (lastSelectedLI != null) { if (lastSelectedLI.parentNode.parentNode.id != 'mlmenu') { if (isSelectedLI(lastSelectedLI.parentNode.parentNode) == true) { // alert ('going to reste'); resetLastSelectedLI(); // lastSelectedLI.parentNode.parentNode.parentNode.parentNode.fireEvent("onkeydown"); the_e.cancelBubble = true; // alert ('cancel'); window.mlLast = lastSelectedLI.parentNode.parentNode; lastSelectedLI.fireEvent("ondblclick"); return false; } } } var uls = window.mlLast.getElementsByTagName('ul'); var aNode = window.mlLast.childNodes[0]; var id = aNode.id; // var textNode = aNode.childNodes[0]; // var textValue = textNode.nodeValue; var sib; for ( var i = 0; i < uls.length; i++) { mlEffectOut(uls[i]); if (window.mlrunShim == true) { sib = uls[i]; while (sib.nextSibling && sib.nodeName != 'IFRAME') { sib = sib.nextSibling } sib.style.display = 'none'; } } if (id == 'toolsId') { // document.getElementById("hdrMenuDiv").style.visibility = 'hidden'; var rootObject = document.getElementById("hdrMenuDiv"); mlEffectOut(rootObject); } window.lastover = null; } function closeMenuOnMouse() { // alert('came here'); // alert('remove') resetLastSelectedLI(); if (getLastSelectedLI() != null && mouseUsed == false) { var lastSelectedLi = getLastSelectedLI(); if (lastSelectedLi.parentNode.parentNode.id == 'mlmenu') { lastSelectedLi.getElementsByTagName('a')[0].className = 'parentMenu horz'; } else { lastSelectedLi.getElementsByTagName('a')[0].className = 'vert'; } // alert('CALLED ondblclick') lastSelectedLi.fireEvent("onhelp"); menuHotKeyPress = false; } } function closeMenuOnF8() { if (getLastSelectedLI() != null) { var lastSelectedLi = getLastSelectedLI(); if (lastSelectedLi.parentNode.parentNode.id == 'mlmenu') { lastSelectedLi.getElementsByTagName('a')[0].className = 'parentMenu horz'; } else { lastSelectedLi.getElementsByTagName('a')[0].className = 'vert'; } // alert('CALLED ondblclick') lastSelectedLi.fireEvent("onhelp"); menuHotKeyPress = false; } } function mlover1(e) { var lastSelectedLi = getLastSelectedLI(); if (lastSelectedLi != null && lastSelectedLi.parentNode.parentNode.id != 'mlmenu') { // alert ('copmign'); var found = false; if (lastSelectedLi == this) { found = true; } if (found == false) { var curObj = lastSelectedLi.nextSibling; while (true) { if (curObj != null) { if (curObj == this) { // alert ('found in next'); found = true; break; } } else { break; } curObj = curObj.nextSibling; } } if (found == false) { var curObj = lastSelectedLi.previousSibling; while (true) { if (curObj != null) { // if(this.getElementsByTagName('a')[0].className.indexOf('vertHover') // != -1) if (curObj == this) { // alert ('found in pre'); found = true; break; } } else { break; } curObj = curObj.previousSibling; } } if (found == true) { // alert ("relset last selected LI"); resetLastSelectedLI(); lastSelectedLi = null; } } if (mouseUsed == false && lastSelectedLi != null) { // alert ("comign to resaet for keyboerad opend menu"); // var lastSelectedLi = getLastSelectedLI(); if (lastSelectedLi.parentNode.parentNode.id == 'mlmenu') { lastSelectedLi.getElementsByTagName('a')[0].className = 'parentMenu horz'; } else { lastSelectedLi.getElementsByTagName('a')[0].className = 'vert'; } // alert('CALLED ondblclick') lastSelectedLi.fireEvent("onhelp"); } // menuHotKeyPress = false; mouseUsed = true; if (!e) { var the_e = window.event; } else { var the_e = e; } // alert ('F8 in mlOver'); the_e.cancelBubble = true; if (the_e.stopPropagation) { the_e.stopPropagation(); } clearTimeout(window.mlTimeout); if (window.mlLast && window.mlLast != this && ancestor(this, window.mlLast) == false) { mlout(); } else { window.mlLast = null; } var reltg = (the_e.relatedTarget) ? the_e.relatedTarget : the_e.fromElement; var ob = this.getElementsByTagName('ul'); var under = ancestor(reltg, this); // alert ('Tag Name' + this.innerHTML); // noshow alert(this.getElementsByTagName('span')[0].className) if (this.getElementsByTagName('span')[0].className.indexOf('noshow') != -1) { this.getElementsByTagName('a')[0].className = 'vertHover'; } else { this.getElementsByTagName('a')[0].className = 'vertHover hoverNext'; } if (ob[0] && under == false) { if (window.lastover != ob[0]) { if (window.mlrunShim == true) { var sib = ob[0]; while (sib.nextSibling && sib.nodeName != 'IFRAME') { sib = sib.nextSibling } ob[0].style.display = 'block'; // var lastSelectedLI = getLastSelectedLI(); // alert ('Tag Name' + this.innerHTML); // this.getElementsByTagName('a')[0].className = 'vertHover'; // ob[0].getElementsByTagName('a')[0].className = 'vertHover'; sib.style.top = ob[0].offsetTop + 'px'; sib.style.left = ob[0].offsetLeft - 2 + 'px'; sib.style.width = ob[0].offsetWidth + 'px'; if (ob[0].offsetHeight >= 2) { sib.style.height = ob[0].offsetHeight - 2 + 'px'; } sib.style.border = '1px solid red'; sib.style.display = 'block'; // alert ('hello'); } mlEffectOver(ob[0], this); window.lastover = ob[0]; } } // alert('in mlover1'); } function mlover2(e) { if (mouseUsed == true) { // resetLastSelectedLI(); mouseUsed = false; } if (!e) { var the_e = window.event; } else { var the_e = e; } // alert ('F8 in mlOver'); the_e.cancelBubble = true; if (the_e.stopPropagation) { the_e.stopPropagation(); } clearTimeout(window.mlTimeout); if (window.mlLast && window.mlLast != this && ancestor(this, window.mlLast) == false) { mlout(); } else { window.mlLast = null; } var reltg = (the_e.relatedTarget) ? the_e.relatedTarget : the_e.fromElement; var ob = this.getElementsByTagName('ul'); var under = ancestor(reltg, this); if (ob[0] && under == false) { if (window.lastover != ob[0]) { if (window.mlrunShim == true) { var sib = ob[0]; while (sib.nextSibling && sib.nodeName != 'IFRAME') { sib = sib.nextSibling } ob[0].style.display = 'block'; if (ob[0].getElementsByTagName('span')[0].className .indexOf('noshow') != -1) { ob[0].getElementsByTagName('a')[0].className = 'vertHover'; } else { ob[0].getElementsByTagName('a')[0].className = 'vertHover hoverNext'; } sib.style.top = ob[0].offsetTop + 'px'; sib.style.left = ob[0].offsetLeft - 2 + 'px'; sib.style.width = ob[0].offsetWidth + 'px'; if (ob[0].offsetHeight >= 2) { sib.style.height = ob[0].offsetHeight - 2 + 'px'; } sib.style.border = '1px solid red'; sib.style.display = 'block'; // alert ('hello'); } mlEffectOver(ob[0], this); window.lastover = ob[0]; } } } function mlSetOpacity(ob, level) { if (ob) { // level is between 0 and 10 // need to convert to decimal for standard var standard = level / 10; // need to convert to 0-100 scale for IE filter var ie = level * 10; ob.style.opacity = standard; ob.style.filter = "alpha(opacity=" + ie + ")" } } function mlIncreaseOpacity(ob) { var current = ob.style.opacity; if (lastob == ob && lastop == current) { // mlout has not interfered current = current * 10; var upone = current + 1; mlSetOpacity(ob, upone); lastob = ob; lastop = upone / 10; } } function mlIncreaseHeight(ob) { var current = parseInt(ob.style.height); var newh = current + 1; ob.style.height = newh + 'px'; } function mlIncreaseWidth(ob) { var current = parseInt(ob.style.width); var newh = current + 1; ob.style.width = newh + 'px'; } function mlBlink(ob) { var newb = '1px solid red'; var old = ''; if (ob.style.border == old) { ob.style.border = newb; } else { ob.style.border = old; ob.style.borderTop = '1px solid'; } } function mlShake(ob) { var newp = '5px'; var old = ''; if (ob.style.paddingLeft == old) { ob.style.paddingLeft = newp; } else { ob.style.paddingLeft = old; } } function mlEffectOver(ob, parent) { switch (ob.className) { case 'fade': ob.style.display = 'block'; if (ob.style.opacity == 0) { lastob = ob lastop = 0; for ( var i = 1; i <= 10; i++) { setTimeout(function() { mlIncreaseOpacity(ob) }, i * 50); } setTimeout(function() { ob.style.filter = '' }, 500); } break; case 'blink': ob.style.display = 'block'; for ( var i = 0; i < 10; i++) { setTimeout(function() { mlBlink(ob) }, i * 50); } break; case 'shake': ob.style.display = 'block'; for ( var i = 0; i < 10; i++) { setTimeout(function() { mlShake(ob) }, i * 50); } break; case 'blindv': ob.style.display = 'block'; if (ob.offsetHeight) { var height = ob.offsetHeight ob.style.height = '0px'; ob.style.overflow = 'hidden'; for ( var i = 0; i < height; i++) { setTimeout(function() { mlIncreaseHeight(ob) }, i * 3); } setTimeout(function() { ob.style.overflow = 'visible'; }, height * 3) } break; case 'blindh': ob.style.display = 'block'; if (ob.offsetWidth) { var width = ob.offsetWidth; ob.style.width = '0px'; ob.style.overflow = 'hidden'; for ( var i = 0; i < width; i++) { setTimeout(function() { mlIncreaseWidth(ob) }, i * 3); } setTimeout(function() { ob.style.overflow = 'visible'; }, width * 3) } break; default: ob.style.display = 'block'; break; } } function mlEffectOut(ob) { switch (ob.className) { case 'fade': mlSetOpacity(ob, 0); ob.style.display = 'none'; break; case 'blink': ob.style.border = ''; ob.style.display = 'none'; break; case 'shake': ob.style.paddingLeft = ''; ob.style.display = 'none'; break; default: ob.style.display = 'none'; break; } } function mlEffectLoad(ob) { var parent = ob.parentNode; while (parent.parentNode && parent.className.indexOf('mlmenu') == -1) { parent = parent.parentNode; } if (parent.className.indexOf('fade') != -1) { ob.style.display = 'none'; ob.className = 'fade'; mlSetOpacity(ob, 0); } else if (parent.className.indexOf('blink') != -1) { ob.className = 'blink'; ob.style.display = 'none'; } else if (parent.className.indexOf('shake') != -1) { ob.className = 'shake'; ob.style.display = 'none'; } else if (parent.className.indexOf('blindv') != -1) { ob.className = 'blindv'; ob.style.display = 'none'; } else if (parent.className.indexOf('blindh') != -1) { ob.className = 'blindh'; ob.style.display = 'none'; } else { ob.className = 'none'; ob.style.display = 'none'; } } function ancestor(child, parent) { // alert('in ancestor') if (child == null) return false;// Saves checking elsewhere // This is a fix for a Firefox bug *gasp* // Aparantly causes a bug in Opera! // I see no choice but a browser detect. *sigh* I didn't want to have to do // this. if (navigator.userAgent.indexOf('Gecko') != -1 && navigator.userAgent.indexOf('Opera') == -1) { // This should only be run by Gecko based browsers. this code should be // fine in everything but Opera so forge away browsers. var allc = parent.getElementsByTagName('*'); for ( var i = 0; i < allc.length; i++) { if (allc[i] == child) { return true; } } } else { // http://www.dynamicdrive.com/forums/showthread.php?t=12341 Thanks // Twey! for (; child.parentNode; child = child.parentNode) { if (child.parentNode === parent) return true; } } return false; }