Subversion Repositories DevTools

Rev

Rev 1284 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 *    DROPDOWN MENU
 */

var ie4=document.all&&navigator.userAgent.indexOf("Opera")==-1
var ns6=(document.getElementById&&!document.all)||navigator.userAgent.indexOf("Opera")==0
var ns4=document.layers

function showmenu(e,which){

if (!document.all&&!document.getElementById&&!document.layers)
return

clearhidemenu()

menuobj=ie4? document.all.popmenu : ns6? document.getElementById("popmenu") : ns4? document.popmenu : ""
menuobj.thestyle=(ie4||ns6)? menuobj.style : menuobj

if (ie4||ns6)
menuobj.innerHTML=which
else{
menuobj.document.write('<layer name=gui bgColor=#E6E6E6 width=165 onmouseover="clearhidemenu()" onmouseout="hidemenu()">'+which+'</layer>')
menuobj.document.close()
}

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

// Dont use event location as it wobbles around
// Use location of parent element
var targ;
if (e.target) targ = e.target;
else if (e.srcElement) targ = e.srcElement;
if (targ.nodeType == 3) // defeat Safari bug
targ = targ.parentNode;
var rect = targ.getBoundingClientRect();
eventX = rect.left;
eventY = rect.bottom;

//Find out how close the mouse is to the corner of the window
var rightedge=(document.body.clientWidth||window.innerWidth)-eventX;
var bottomedge=(document.body.clientHeight||window.innerHeight)-eventY;

//position the horizontal position of the menu where the mouse was clicked
var left=ie4? document.body.scrollLeft+eventX : ns6? window.pageXOffset+eventX : eventX

//if the horizontal distance isn't enough to accomodate the width of the context menu
var delta = rightedge - menuobj.contentwidth;
if ( delta < 0 ) left+=delta;

//same concept with the vertical position
var top = menuobj.thestyle.top=ie4? document.body.scrollTop+eventY : ns6? window.pageYOffset+eventY : eventY

// Don't adjust top. Assume menus are at the top. All adjusting will do is push the top off the screen
//delta = bottomedge-menuobj.contentheight;
//if (delta < 0) top += delta;

menuobj.thestyle.left=left;
menuobj.thestyle.top=top;
menuobj.thestyle.visibility="visible"
return false
}

function contains_ns6(a, b) {
//Determines if 1 element in contained in another- by Brainjar.com
while (b && b.parentNode)
if ((b = b.parentNode) == a)
return true;
return false;
}

function hidemenu(){
if (window.menuobj)
menuobj.thestyle.visibility=(ie4||ns6)? "hidden" : "hide"
}

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){
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!="popmenu"){
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