
// overly simplistic test for IE
isIE = (document.all ? true : false);
// both IE5 and NS6 are DOM-compliant (well, sort of...)
isDOM = (document.getElementById ? true : false);

// get the true offset of anything on NS4, IE4/5 & NS6, even if it's in a table!
function getAbsX(elt) {
    return (elt.x)
        ? elt.x
        : getAbsPos(elt,"Left");
}

function getAbsY(elt) {
    return (elt.y)
        ? elt.y
        : getAbsPos(elt,"Top");
}

function getAbsPos(elt,which) {
    iPos = 0;
    while (elt != null) {
        iPos += elt["offset" + which];
        elt = elt.offsetParent;
    }
    return iPos;
}

function getDivStyle(divname) {
    var style;
    if (isDOM) {
    	if (document.getElementById(divname))
             style = document.getElementById(divname).style;
         else
             alert('Element not found: ' + divname);
    } else {
        style = isIE
            ? document.all[divname].style // IE
            : document.layers[divname];   // NS4
    }
    return style;
}

function hideElement(divname) {
    getDivStyle(divname).visibility = 'hidden';
}

// annoying detail: IE and NS6 store elt.top and elt.left as strings.
function moveBy(elt,deltaX,deltaY) {
    elt.left = parseInt(elt.left) + deltaX;
    elt.top = parseInt(elt.top) + deltaY;
}

function toggleVisible(divname) {
    divstyle = getDivStyle(divname);
    if (divstyle.visibility == 'visible' || divstyle.visibility == 'show') {
        divstyle.visibility = 'hidden';
    } else {
        fixPosition(divname);
        divstyle.visibility = 'visible';
    }
}


/*
var panes = new Array('layer01', 'layer02', 'layer03', 'layer04', 'layer05', 'layer06', 'layer07', 'layer08');

function showElement(divname) {
    for (pane in panes) {
        divstyle = getDivStyle(panes[pane]);
        if (panes[pane] == divname) {
            if (divstyle.visibility != 'visible'
                && divstyle.visibility != 'show')
            {
                fixPosition(divname);
                divstyle.visibility = 'visible';
            }
        } else {
            if (divstyle.visibility == 'visible'
                || divstyle.visibility == 'show')
            {
                divstyle.visibility = 'hidden';
            }
        }
    }
}
*/


function setPosition(elt, positionername, isPlacedUnder) {
    var positioner;
    if (isIE) {
        positioner = document.all[positionername];
        elt.left = getAbsX(positioner);
        elt.top = getAbsY(positioner)
            + (isPlacedUnder ? positioner.height : 0);
    } else {
        if (isDOM) {
            positioner = document.getElementById(positionername);
        } else {
            // not IE, not DOM (probably NS4)
            // if the positioner is inside a netscape4 layer this will *not* find it.
            positioner = document.images[positionername];
        }
        elt.setProperty('left', getAbsX(positioner) + 'px', '');
        elt.setProperty('top', (getAbsY(positioner)
                                + (isPlacedUnder ? positioner.height : 0)) + 'px', '');
    }
}


// fixPosition() attaches the element named eltname
// to an image named eltname+'Pos'
//
function fixPosition(divname) {
    divstyle = getDivStyle(divname);
    positionerImgName = divname + 'Pos';
    // isPlacedUnder false 
    // in order to place the layer directly on top of the object to which it is relative
    isPlacedUnder = true;
    setPosition(divstyle,positionerImgName,isPlacedUnder);
}


// fixPositions() puts everything back in the right place after a resize.
function fixPositions()
{
    // add a fixPosition call here for every element
    // you think might get stranded in a resize/reflow.
    fixPosition('topnav');
//    for (pane in panes) {
//        fixPosition(panes[pane]);
//    }
}
