// OSB Navigation : 12-Feb-2001

function navigation()
{
    var nextImg = '<img src="../Library/right_up.gif" alt="Next" border="0">';
    var prevImg  = '<img src="../Library/left_up.gif" alt="Previous" border="0">';
    var tocImg  = '<img src="../Library/up_up.gif" alt="Contents" border="0">';

    // previous document
    document.write('    <td align="left">');
    if ( "NULL" == prevDoc )
        document.write( "`prevDoc' not defined in header" );
    else if ( "" != prevDoc )
        document.write( '<a href="' + prevDoc + '">' + prevImg + '</a>' );
    document.writeln('</td>');

    // upper document
    document.write('    <td align="center">');
    if ( "NULL" == tocDoc )
        document.writeln( "`tocDoc' not defined in header" );
    else if ( "" != tocDoc )
        document.writeln( '<a href="' + tocDoc + '">' + tocImg + '</a>' );
    document.writeln('</td>');

    // next document
    document.write('    <td align="right">');
    if ( "NULL" == nextDoc )
        document.write( "`nextDoc' not defined in header" );
    else if ( "" != nextDoc )
        document.write( '<a href="' + nextDoc + '">' + nextImg + '</a>' );
    document.writeln('</td>');

    document.writeln('  </tr>\n' +  '</table>');
}

function mkActiveImg(baseDir, baseName, hasTarget, alt)
{
    var ret = "";
    // default an alternative text
    if (alt == null) {
        alt = baseName;
        // target is not defined or empty: set alternative text to N/A
        if (hasTarget == null || hasTarget == false) {
            alt = "N/A";
        }
    }

    // provide image and attributes
    ret = '<img src="' + baseDir + baseName + '.png" border="0" alt="' + alt + '"';
    // target is defined and not empty: handle some mouse events
    if (hasTarget != null && hasTarget != '') {
        ret +=
            '     onMouseOver="javascript:this.src=\'' + baseDir + baseName + 'Over.png\'"' +
            '     onMouseDown="javascript:this.src=\'' + baseDir + baseName + 'Down.png\'"' +
            '     onMouseOut="javascript:this.src=\''  + baseDir + baseName + '.png\'"'      +
            '     onMouseUp="javascript:this.src=\''   + baseDir + baseName + '.png\'">';
    }
    return ret;
}

function mkNavImg(baseDir, baseName, target, alt)
{
    var ret = "";

    // target is defined and not empty: provide anchor
    if (target != null && target != "") {
        ret = mkActiveImg(baseDir, baseName, true, alt);
        ret = '<a href="' + target + '">' + ret + '</a>';
    }
    else {
        ret = mkActiveImg(baseDir, baseName, false, alt);
    }
    return ret;
}

function nav(baseDir)
{
    /* variables that must be provided by the caller */
    /*
       var upDoc  = "";
       var nextDoc = "./osb_a001_c03.html";
       var prevDoc = "";
       var downDoc = "";
    */

    // default base directory
    if (baseDir == null) baseDir = '../Library/';

    var imgHome = '<a href="../osbsystems.html">' +
                  '<img alt="home" src="' + baseDir + '/osb15bw.png" border="0" width="110" height="81">' +
                  '</a>';
    var imgLeft = mkNavImg(baseDir, 'left', prevDoc, 'previous');
    var imgRight = mkNavImg(baseDir, 'right', nextDoc, 'next');
    var imgUp = mkNavImg(baseDir, 'up', upDoc, 'parent');
    var imgDown = mkNavImg(baseDir, 'down', downDoc, 'detail');
    var navtable =
        '<table border="0" cellspacing="0" cellpadding="0" align="left">'  +
        '  <tr><td align="left" colspan="2">' + imgHome + '</td></tr>'     +
        '  <tr><td align="center">' + imgLeft  + '</td>'                   +
        '      <td align="center">' + imgRight + '</td></tr>'              +
        '  <tr><td align="center">' + imgUp    + '</td>'                   +
        '      <td align="center">' + imgDown  + '</td></tr>'              +
        '</table>';
    document.writeln(navtable);
}

function romanNumber(value)
{
    var romanNumbers = new Array("0", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X");
    rc = value;
    if (value < 39) {
        rc = '';
        while (value >= 10) {
            rc = rc + romanNumbers[10];
            value -= 10;
        }
        if (value > 0 || '' == rc) rc = rc + romanNumbers[value];
    }
    return rc;
}

var lastDiagram = 0;
var diagramMap = new Array;
function diagramNumber(diagramRef, postText)
{
    found = false;
    var undefined;
    if (undefined == postText) postText = "";
    i = 1;
    while (i <= lastDiagram && !found) {
        if (diagramMap[i] == diagramRef) found = true;
        else i++;
    }
    if (!found) {
        lastDiagram++;
        i = lastDiagram;
        diagramMap[i] = diagramRef;
    }
    document.write(romanNumber(i) + postText);
}

var lastTable = 0;
var tableMap = new Array;
function tableNumber(tableRef, postText)
{
    found = false;
    var undefined;
    if (undefined == postText) postText = "";
    i = 1;
    while (i <= lastTable && !found) {
        if (tableMap[i] == tableRef) found = true;
        else i++;
    }
    if (!found) {
        lastTable++;
        i = lastTable;
        tableMap[i] = tableRef;
    }
    document.write(romanNumber(i) + postText);
}

var lastRef = 0;
var refMap = new Array;
function refNumber(refRef, postText)
{
    found = false;
    var undefined;
    if (undefined == postText) postText = "";
    i = 1;
    while (i <= lastRef && !found) {
        if (refMap[i] == refRef) found = true;
        else i++;
    }
    if (!found) {
        lastRef++;
        i = lastRef;
        refMap[i] = refRef;
    }
    document.write("[" + i + "]" + postText);
}

function keyValue(ks) // ks for keyString
{
    var p = ks.indexOf("$");
    // no $ found: value-only keyword
    if (-1 == p) return ks;

    p = ks.indexOf(":");
    // no : found: keyword only
    if (-1 == p) return "";

    p += 1;
    while (" " == ks.charAt(p)) p += 1;
    ks = ks.substr(p);
    p = ks.lastIndexOf("$");
    while (" " == ks.charAt(p-1)) p -= 1;
    return ks.substr(0, p);
}

function docVsInfo(name, rev, date)
{
    document.write('<table style="position: relative; top: 1cm;');
    document.write(' border-top-width: 1px; border-top-style: solid; border-color: rgb(64, 64, 64);');
    document.write(' font-size: x-small;"');
    document.write(' border="0" cellpadding="0" cellspacing="0">');
    document.write('<tr><th style="text-align: left;">');
    document.write('Document information');
    document.write('</th></tr>');

    document.write('<tr><td>');

    name = keyValue(name);
    if ('' != name) document.write('Version name: ' + name + ', ');

    rev = keyValue(rev);
    if ('' == rev) rev = 'n/a';
    document.write('Revision: ' + rev + ', ');

    date = keyValue(date);
    if ('' == date) date = 'n/a';
    document.write('Last modified: ' + date);

    document.write('</tr></td>');
    document.write('</table>');
}
