function getCompatibleElement(element_id)
{
    var element;
    
    if (document.getElementById)
    {
        // Standards Compliant code fork...
        element = document.getElementById(element_id);
    }
    else if (document.all)
    {
        // IE 4/5 code fork...
        element = document.all.element_id;
    }
    else if (document.layers)
    {
        // Nav 4.x code fork...
        element = document.layers[element_id];
    }
    else
    {
        // other browsers
        element = document.element_id;
    }
    
    return element;
}

function selectOptionWithValue( select_element_id, option_value )
{
    var selector = getCompatibleElement(select_element_id);
    
    if ( ! selector )
        return;
    
    for ( var i = 0; i < selector.options.length; ++i )
    {
        if ( selector.options[i].value === option_value )
        {
            selector.options[i].selected = true;
            return;
        }
    }
}

function toggleDisabled(element_id)
{
    var element = getCompatibleElement(element_id);
    
    var current_state = element.disabled;
    
    if ( current_state == true)
        element.disabled = false;
    else
        element.disabled = true;
}

function toggleReadonly(element_id)
{
    var element = getCompatibleElement(element_id);
    
    var current_state = element.readOnly;
    
    if ( current_state == true)
        element.readOnly = false;
    else
        element.readOnly = true;
}

function toggleDisplay(element_id)
{
    var element       = getCompatibleElement(element_id);
    var current_state = getDisplayState(element_id);
    
    if ( current_state == 'none')
        element.style.display = '';
    else
        element.style.display = 'none';
}

function setDisplay( element_id, display )
{
    var element = getCompatibleElement(element_id);
    var value = display ? '' : 'none';
    
    element.style.display = value;
}

function toggleVisibility(element_id)
{
    var element       = getCompatibleElement(element_id);
    var current_state = getVisibility(element_id);
    
    if ( element.currentStyle )
    {
        if ( current_state == 'hidden' )
            element.style.visibility = "visible";
        else
            element.style.visibility = "hidden";
    }
    else if ( window.getComputedStyle )
    {
        if ( current_state == 'hidden' )
            element.style.setProperty("visibility", "visible", "");
        else
            element.style.setProperty("visibility", "hidden", "");
    }
    else
    {
        if ( current_state == 'hidden' )
            element.style.visibility = "visible";
        else
            element.style.visibility = "hidden";
    }
}

function setVisibility( element_id, visible )
{
    var element = getCompatibleElement(element_id);
    var value = visible ? 'visible' : 'hidden';
    
    if ( element.currentStyle )
    {
        element.style.visibility = value;
    }
    else if ( window.getComputedStyle )
    {
        element.style.setProperty("visibility", value, "");
    }
    else
    {
        element.style.visibility = value;
    }
}

function getVisibility(element_id)
{
    var element = getCompatibleElement(element_id);
    var current_state;
    
    if ( element.currentStyle )
    {
        current_state = element.currentStyle['visibility'];
    }
    else if ( window.getComputedStyle )
    {
        var element_style = window.getComputedStyle(element, null);
        current_state = element_style.getPropertyValue('visibility');
    }
    else
    {
        current_state = element.style.visibility;
    }
    
    return current_state;
}

function isVisible(element_id)
{
    return ( getVisibility(element_id) != 'hidden' );
}

function getDisplayState(element_id)
{
    var element = getCompatibleElement(element_id);
    var current_state;
    
    if ( element.currentStyle )
    {
        current_state = element.currentStyle['display'];
    }
    else if ( window.getComputedStyle )
    {
        var element_style = window.getComputedStyle(element, null);
        current_state = element_style.getPropertyValue('display');
    }
    else
    {
        current_state = element.style.display;
    }
    
    return current_state;
}

function macClient()
{
    if ( navigator.userAgent.indexOf('Macintosh') != -1 )
        return true;
    else
        return false;
}

function isChecked(checkbox)
{
    if ( macClient() )
    {
        var current_state;
        
        if ( checkbox.checked )
            current_state = true;
        else
            current_state = false;
        
        if ( DEBUG )
            alert('is_checked - ' + checkbox.name + ' is ' + current_state);
        
        return current_state;
    }
    else
    {
        return checkbox.checked;
    }
}

function selectAllOptions( select_id )
{
    var select = getCompatibleElement(select_id);
    for ( var i = 0; i < select.options.length; i++ )
        select.options[i].selected = true;
}

function clearValue( element_id )
{
    getCompatibleElement(element_id).value = "";
}
