/* links to use these menu functions should read: LINK_TEXT */ var ie4 = document.all; var ns6 = document.getElementById && !document.all; var ns4 = document.layers; var imTemp = ''; var dmIgnoreShineThrough = false; // var DM = document.getElementById('debugMsgASDF') //________________________________________________________________________________ function showmenu(e, which, sourceObj, elementID, targetMenuObj, arbitraryTop, arbitraryLeft){ /* e = event which = selectedMenu code. If this is an object, pass in sourceObj.innerHTML sourceObj = the object the menu will be positioned relative to elementID = an extra bit that changes the top of the menu */ if(!targetMenuObj) targetMenuObj = 'popmenu' if (!document.all && !document.getElementById && !document.layers){ // if the browser doesn't support ANY of this, // just exit without doing anything return; } if(!which) { // if the selected menu doesn't exist... return; } // reset the timer object that hides the menu clearhidemenu() // this, just to get around a bug in MSIE 6 and earlier that allows // dropdowns to "shine through" toggleSelectsUnderMenus('off') // setup some defaults var wmLeft = 0 var wmTop = 0 var lastTop = -1 var lastLeft = 0 // figure relative position of the source object var sourceParent = sourceObj.parentNode while (sourceParent){ if(sourceParent.offsetLeft){ // 9/20/07 In firefox, offsetLefts just pile up and the menu goes in too far // I'm fighting that by checking for a new offsetLeft value, and not adding // unless I get one. wmLeft += lastLeft != sourceParent.offsetLeft ? sourceParent.offsetLeft : 0 lastLeft = sourceParent.offsetLeft } if(sourceParent.offsetTop){ if(sourceParent.offsetTop != lastTop) { lastTop = sourceParent.offsetTop wmTop += sourceParent.offsetTop } } sourceParent = sourceParent.parentNode } // make some arbitrary changes for the menu bars if(elementID == 4 || elementID == 5){ // left menu bars arbitrarily set the left property wmLeft += sourceObj.parentNode.offsetWidth; } else { // top menu bars arbitrarily set the top property wmTop += sourceObj.parentNode.offsetHeight } // menuObj = ie4? document.all.popmenu : ns6? document.getElementById("popmenu") : ns4? document.popmenu : "" menuObj = ie4? eval('document.all.' + targetMenuObj) : ns6? eval('document.getElementById("' + targetMenuObj + '")') : ns4? eval('document.' + targetMenuObj) : "" menuObj.theStyle = (ie4||ns6)? menuObj.style : menuObj if (ie4 || ns6) { menuObj.innerHTML = which } else { imTemp = '' menuObj.document.write(imTemp) menuObj.document.close() } if(ie4){ var tbr1 = document.getElementById('mainToolbar') // wmTop = tbr1.offsetTop + tbr1.offsetHeight + tbr1.parentNode.offsetTop } menuObj.contentwidth = (ie4||ns6)? menuObj.offsetWidth : menuObj.document.gui.document.width menuObj.contentheight = (ie4||ns6)? menuObj.offsetHeight : menuObj.document.gui.document.height eventX = ie4? event.clientX : ns6? e.clientX : e.x eventY = ie4? event.clientY : ns6? e.clientY : e.y // eventY = tbr1.offsetHeight + tbr1.offsetTop //ie4? event.clientY : ns6? e.clientY : e.y //Find out how close the mouse is to the corner of the window var rightedge = ie4? document.body.clientWidth-eventX : window.innerWidth-eventX var bottomedge = ie4? document.body.clientHeight-eventY : window.innerHeight-eventY //if the horizontal distance isn't enough to accomodate the width of the context menu if (rightedge < menuObj.contentwidth){ //move the horizontal position of the menu to the left by it's width menuObj.theStyle.left = ie4? document.body.scrollLeft+eventX-menuObj.contentwidth : ns6? window.pageXOffset+eventX-menuObj.contentwidth : eventX-menuObj.contentwidth } else { //position the horizontal position of the menu where the mouse was clicked // menuObj.theStyle.left = ie4? document.body.scrollLeft+eventX : ns6? window.pageXOffset + eventX : eventX // menuObj.theStyle.left = ie4? wmLeft : ns6? eventX : sourceObj.parentNode.offsetLeft menuObj.theStyle.left = ie4 || ns6 ? wmLeft : sourceObj.parentNode.offsetLeft } //same concept with the vertical position if (bottomedge < menuObj.contentheight){ // menuObj.theStyle.top = ie4? document.body.scrollTop+eventY-menuObj.contentheight // : ns6? window.pageYOffset+eventY-menuObj.contentheight : eventY-menuObj.contentheight if (ie4) { menuObj.theStyle.top = document.body.scrollTop + tbr1.offsetHeight + menuObj.contentheight } else if (ns6) { menuObj.theStyle.top = window.pageYOffset+eventY-menuObj.contentheight } else { menuObj.theStyle.top = eventY - menuObj.contentheight } // menuObj.theStyle.top = ie4? document.body.scrollTop + tbr1.offsetHeight + menuObj.contentheight // : ns6? window.pageYOffset+eventY-menuObj.contentheight : eventY-menuObj.contentheight } else { menuObj.theStyle.top = (ie4) ? document.body.scrollTop + event.clientY : ns6? window.pageYOffset+eventY : eventY // menuObj.theStyle.top = ie4? tbr1.offsetHeight + tbr1.parentNode.offsetTop : ns6? window.pageYOffset+eventY : eventY // menuObj.theStyle.top = wmTop //ie4? wmTop : ns6? tbr1.offsetHeight + tbr1.parentNode.offsetTop : eventY menuObj.theStyle.visibility = "visible" // return false } // for the top menu bar, override the script and put the menu // at the bottom edge of the element // where the event happened. if(arbitraryTop) wmTop = arbitraryTop; if(arbitraryLeft) menuObj.theStyle.left = arbitraryLeft; if(menuObj.offsetWidth < 32) menuObj.style.width = 200; if(elementID == 2 || elementID == 0) menuObj.theStyle.top = wmTop if(document.getElementById('menuTest')) document.getElementById('menuTest').innerHTML = 'left: ' + menuObj.offsetLeft; } // ______________________________________________________________________________ function contains_ns6(a, b) { //Determines if 1 element in contained in another- by Brainjar.com while (b.parentNode) if ((b = b.parentNode) == a) return true; return false; } //________________________________________________________________________________ function hidemenu(){ if (window.menuObj){ menuObj.theStyle.visibility = (ie4||ns6)? "hidden" : "hide" toggleSelectsUnderMenus('on') } } //________________________________________________________________________________ function dynamichide(e){ if (ie4&&!menuObj.contains(e.toElement)) hidemenu() else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget)) hidemenu() } //________________________________________________________________________________ function delayhidemenu(){ if (ie4||ns6||ns4) { delayhide = setTimeout("hidemenu()",500) } } //________________________________________________________________________________ function clearhidemenu(){ if (window.delayhide) clearTimeout(delayhide) } //________________________________________________________________________________ function highlightmenu(e, state, targetMenuObj){ if(!targetMenuObj) targetMenuObj = 'popmenu' if (document.all) source_el = event.srcElement else if (document.getElementById) source_el = e.target if (source_el.className == "menuitems"){ source_el.id = (state == "on")? "mouseoverstyle" : "" } else{ while(source_el.id!= targetMenuObj){ source_el = document.getElementById? source_el.parentNode : source_el.parentElement if (source_el.className == "menuitems"){ source_el.id = (state == "on")? "mouseoverstyle" : "" } } } } if (ie4||ns6){ document.onclick = hidemenu } //------------------------------------------------------------ function toggleSelectsUnderMenus(st){ if(dmIgnoreShineThrough) return; var ctl = document.getElementsByTagName('SELECT') for(var i = 0; i < ctl.length; i++){ if(ctl[i].getAttribute('hideOnMenu') == '1'){ if(st == 'on' || st == 'show') { ctl[i].style.visibility = 'visible'; } else { ctl[i].style.visibility = 'hidden'; } } } } //------------------------------------------------------------ var dropmenus = function(){ return { item_onClick: function(S, A, B) { try { window.event.cancelBubble = true; } catch(err){ return } clearhidemenu(); hidemenu(); switch(A){ case 'popup-sm': window.open(S, '', 'width=360,height=240,resizeable=1'); break; case 'popup-med': window.open(S, '', 'width=480,height=360,resizeable=1'); break; case 'popup-lg': window.open(S, '', 'width=640,height=480,resizeable=1'); break; case 'none': document.location = S; break; default: window.open(S); break; } } } }();