var isNav4, isNav6, isIE4;

// ------------------------------------------------------------------------------------------
// Determine browser version as one of Navigator 4, Navigator 6, or Internet Explorer 4/5/6
// ------------------------------------------------------------------------------------------

function setBrowser()
{

    if (navigator.appVersion.charAt(0) == "4")
    {
        if (navigator.appName.indexOf("Explorer") >= 0)
        {
            isIE4 = true;
        }
        else
        {
            isNav4 = true;
        }
    }
    else if (navigator.appVersion.charAt(0) > "4")
    {
        isNav6 = true;
    }
        
}

// ------------------------------------------------------------------------------------------
// Given a selector string, return a style object by searching through stylesheets. 
// Return null if nothing is found
// ------------------------------------------------------------------------------------------

function getStyleBySelector( selector )
{
    
    if (!isNav6)
    {
        return null;
    }
    
    var sheetList = document.styleSheets;
    var ruleList;
    var i, j;

    // look through stylesheets in reverse order in which they appear in the document
    
    for (i=sheetList.length-1; i >= 0; i--)
    {
        ruleList = sheetList[i].cssRules;
        for (j=0; j<ruleList.length; j++)
        {
            if (ruleList[j].type == CSSRule.STYLE_RULE &&
                ruleList[j].selectorText == selector)
            {
                return ruleList[j].style;
            }   
        }
    }

    
    return null;
}

// ------------------------------------------------------------------------------------------
// Given an id and a property (as strings), return the given property of that id.  
// NS will first look for the property in a tag; if not found, it will look through the .CSS
//
// NB: do not precede the id with a # -- it will be appended when searching the stylesheets
// ------------------------------------------------------------------------------------------

function getIdProperty( id, property )
{
    
    if (isNav6)
    {
        var styleObject = document.getElementById( id );
        if (styleObject != null)
        {
            styleObject = styleObject.style;
            if (styleObject[property])
            {
                return styleObject[ property ];
            }
        }
        styleObject = getStyleBySelector( "#" + id );
        return (styleObject != null) ?
            styleObject[property] :
            null;
    }
    else if (isNav4)
    {
        return document.layers["main"].document[id][property];
    }
    else if (isIE4)
    {
        return document.all[id].style[property];
    }
}

// ------------------------------------------------------------------------------------------ 
// Given an id and a property (as strings), set the given property of that id to the value
// returned.
//
// NB: The property is set directly on the tag, not in the stylesheet.
// ------------------------------------------------------------------------------------------

function setIdProperty( id, property, value )
{
    if (isNav6)
    {
        var styleObject = document.getElementById( id );
        if (styleObject != null)
        {
            styleObject = styleObject.style;
            styleObject[ property ] = value;
        }
    }
    else if (isNav4)
    {
        // document.layers[tab].visibility = 'hidden';
        // document.layers[id].property = value;
        
        if (property == "visibility")
          document.layers["main"].document.layers[id].visibility = value;
    }
    else if (isIE4)
    {
         document.all[id].style[property] = value;
    }
}

// ------------------------------------------------------------------------------------------
// Move a given id to position (xValue, yValue)
// ------------------------------------------------------------------------------------------

function moveTo( id, x, y )
{
    generic_move( id, x, y, false );
}

// ------------------------------------------------------------------------------------------
// Move a given id to (currentX + xValue, currentY + yValue)
// ------------------------------------------------------------------------------------------

function moveBy( id, x, y)
{
    generic_move( id, x, y, true );
}

// ------------------------------------------------------------------------------------------
// Function used when converting rgb format colors
// from Navigator 6 to a hex format
// ------------------------------------------------------------------------------------------

function hex( n )
{
    var hexdigits = "0123456789abcdef";
    return ( hexdigits.charAt(n >> 4) + hexdigits.charAt(n & 0x0f) );
}

// ------------------------------------------------------------------------------------------
// Return a division's document
// 
// ------------------------------------------------------------------------------------------

function getDocument( divName )
{
    var doc;

    if (isNav4)
    {
        doc = window.document[divName].document;
    }
    else if (isNav6)
    {
        doc = document;
    }
    else if (isIE4)
    {
        doc = document;
    }
    return doc;
}
