// browser capabilities
isLayers = (document.layers) ? 1 : 0;
isDOM    = (document.getElementById) ? 1 : 0;
isAll    = (document.all && !isDOM) ? 1 : 0;
isOpera  = navigator.userAgent.toLowerCase().indexOf('opera') != -1;

function getElement(id,f) { //gets reference to HTML element with id specificed - use this before using below functions
    if(isLayers) {
        f=(f) ? f : self;
        if(f.document.layers[id]) {
            return f.document.layers[id];
        }
        for(var W = 0; W < f.document.layers.length;) { t = getElement(id,f.document.layers[W++]); }
        return t;
    }
    if(isDOM) { return document.getElementById(id); }
    if(isAll) { return document.all[id]; }
}
function showElement(e) { //sets visibility of element e
    if (isLayers) { e.visibility = 'show'; }
    else          { e.style.visibility = 'visible'; }
}

function hideElement(e) { //sets visibility of element e
    if (isLayers) { e.visibility = 'hide'; }
    else          { e.style.visibility = 'hidden'; }
}
function setX(e,x) { //sets X position of element e
    if(isLayers)     { e.left = x; }
    else if(isOpera) { e.style.pixelLeft = x; }
    else             { e.style.left = x + 'px'; }
}

function setY(e,y) { //sets Y position of element e
    if(isLayers)     { e.top = y; }
    else if(isOpera) { e.style.pixelTop = y; }
    else             { e.style.top = y + 'px'; }
}

function getW(e) { //gets width of element e
    if(isLayers)     { return e.width; }
    else if(isOpera) { return e.pixelWidth; }
    else if(isAll)   { return e.offsetWidth; }
    else {
        if (e.style.width) { return parseInt(e.style.width); }
        return e.width;
    }
}

function getH(e) { //gets height of element e
    if(isLayers)     { return e.height; }
    else if(isOpera) { return e.pixelHeight; }
    else if(isAll)   { return e.offsetHeight; }
    else {
        if (e.style.height) { return parseInt(e.style.height); }
        return e.height;
    }
}
// get the true offset of anything on NS4, IE4/5 & NS6
function getAbsX(e) { return (e.x) ? e.x : getAbsPos(e,"Left"); }
function getAbsY(e) { return (e.y) ? e.y : getAbsPos(e,"Top"); }
function getAbsPos(e, which) {
    iPos = 0;
    while (e != null) {
        iPos += e["offset" + which];
        e = e.offsetParent;
    }
    return iPos;
}

function writeHTML(e, str) { //writes new content to element e, erasing old content; buggy in IE4.x Mac, not supported in Opera
    if(isLayers) {
        e.document.write(str); e.document.close();
    }
    if(e.innerHTML) { e.innerHTML = str; }
}

function addOnload(fn) { //appends javascript code contained in string fn to the onload handler of the body tag
    if (window.onload) {
        var oldOnload = window.onload;
        window.onload = function() { oldOnload(); eval(fn); }
    }
    else {
        window.onload = function() { eval(fn); }
    }
}