function api_hideSelectBoxes(e){
    if (!(e = $(e)))
        return '';
    var elem = $(e);
    var offset = elem.offset();

    hideSelectBoxes(parseInt(elem.css('left')),parseInt(elem.css('top')), elem.width(), elem.height());
}

function api_showSelectBoxes(e){
    if (!(e = $(e)))
        return '';
    var elem = $(e);
    var offset = elem.offset()

    showSelectBoxes(parseInt(elem.css('left')),parseInt(elem.css('top')), elem.width(), elem.height());
}

function hideSelectBoxes(x,y,w,h,container_id) {
    if (!document.all) {
        return;
    }
    if (!container_id) {
        container_id = null;
    }
    var container = retrieveSelectBoxesContainer(container_id);
    var sel = container.getElementsByTagName("select");

    for (var i=0; i<sel.length; ++i) {
        var selx = getx(sel[i]);
        var sely = gety(sel[i]);
        var selw = sel[i].offsetWidth;
        var selh = sel[i].offsetHeight;
        if (selx+selw>x && selx<x+w && sely+selh>y && sely<y+h && isElemVisible(sel[i])) {
            if (sel[i].style.visibility != "hidden") 
            {
                sel[i].wasHiddenByGMAStyle = sel[i].style.visibility;
                sel[i].style.visibility = "hidden";
                sel[i].wasHiddenByGMA = true;
            }
        }
    }
}

function showSelectBoxes(container_id) {
    if (!document.all) {
        return;
    }
    if (!container_id) {
        container_id = null;
    }
    var container = retrieveSelectBoxesContainer(container_id);
    var sel = container.getElementsByTagName("select");
    for (var i=0; i<sel.length; ++i) {
        if (sel[i].wasHiddenByGMA) 
        {
            sel[i].style.visibility = sel[i].wasHiddenByGMAStyle;
            sel[i].wasHiddenByGMA = false;
        }
    }
}

function retrieveSelectBoxesContainer(container_id) {
    var container = null;
    if (container_id === null || 
        container_id === undefined || 
        (container = document.getElementById(container_id)) === null) 
    {
        return document;
    } else {
        return container;
    }
}

// returns the absolute coordinate of element in the window
function getx(elem) {
    var x = 0;
    for (var p=elem; p.offsetParent; p=p.offsetParent) {
        x += p.offsetLeft - (document.all?p.scrollLeft:0); 
    }
    return x;
}
function gety(elem) {
    var y = 0;
    for (var p=elem; p.offsetParent; p=p.offsetParent) {
        y += p.offsetTop - (document.all?p.scrollTop:0);
    }
    return y;
}

function isElemVisible(elem) {
    for (var p=elem; p; p=p.offsetParent) {
        if (p.style.visibility == 'hidden' || p.style.display == 'none') {
            return false;
        }
    }

    return true;
}