function computeDosage()
{
    var unitOrdered = units[ readSelect( "unitOrdered" ) ];
    var unitPerDose = units[ readSelect( "unitPerDose" ) ];

    if( unitOrdered.dim != unitPerDose.dim )
    {
        var myVarning = document.createElement( "dl" );
        var myHeader = document.createElement( "dt" );
        myVarning.appendChild( myHeader );
        myHeader.appendChild( document.createTextNode( "Check the units of measurement:" ) );
        
        var myItem1 = document.createElement( "dd" );
        myVarning.appendChild( myItem1 );
        myItem1.appendChild( document.createTextNode( "the unit '" + unitOrdered.name + "' is a measure of " + unitOrdered.dim ) );

        var myItem2 = document.createElement( "dd" );
        myVarning.appendChild( myItem2 );
        myItem2.appendChild( document.createTextNode( "whereas the unit '" + unitPerDose.name + "' is a measure of "+ unitPerDose.dim ) );

        var myOutput = initializeContentParent();           
        myOutput.appendChild( myVarning );
    }
    else
    {
        var ordFactor = factors[ readSelect( "factorOrdered" ) ].coef;
        var doseFactor = factors[ readSelect( "factorPerDose" ) ].coef;

        var myFactor = Math.pow( 10, ordFactor - doseFactor  );

        var myForm = document.getElementById( "dosageCalculatorInput" );
        var amountPerDose = checkedNumber( myForm.amountPerDose.value ); 
        var amountOrdered = checkedNumber( myForm.amountOrdered.value ); 
        
        if( ! amountOrdered || ! amountPerDose ) return;
        
        var myDoseNumber = amountOrdered * unitOrdered[ "factor" ] * myFactor / 
            ( amountPerDose * unitPerDose[ "factor" ] );
            
        var myRoute = factors[ readSelect( "factorOrdered" ) ].coef;
        var myString = "Ordered: " 
            + amountOrdered + " " 
            + factors[ readSelect( "factorOrdered" ) ].name 
            + units[ readSelect( "unitOrdered" ) ].name + "(s). "
            + "Available dose: " 
            + amountPerDose + " " 
            + factors[ readSelect( "factorPerDose" ) ].name 
            + units[ readSelect( "unitPerDose" ) ].name + "(s). "
            + "Administer: " + myDoseNumber + " dose(s) "
            + routes[ readSelect( "drugRoute" ) ] + " "
            + times[ readSelect( "drugSchedule" ) ];
        displayMessage( myString );
    }    
}  
function checkedNumber( givenString )      
{ //&#8212;

    var myRegExp = /([0-9]+\+)|([0-9]+\-)|(\..*\.)|(\+.*\+)|(\-.*\-)|(\+.*\-)|(\-.*\+)|[^0-9\-\.\+]+/; 
    // var reg1 = /(\.\.)
    if( myRegExp.test( givenString ) )
    {
        displayMessage( "Something is wrong with the input: '" + givenString + "'  does not appear to be a number" );
        return null;
    }  
    var myResult = parseFloat( givenString );
    return myResult;
}   
function readSelect( givenName )
{
    var mySelectName = getSelectName( givenName );
    var mySelect = document.getElementById( mySelectName );
    var mySelectedValue = mySelect.options[ mySelect.selectedIndex ].value;
    return mySelectedValue;
}
function displayMessage( givenMessage )
{
    var myParent = initializeContentParent();
    var myOutput = document.createTextNode( givenMessage );
    myParent.appendChild( myOutput );
}
function initializeContentParent()
{
    var myContent = document.getElementById( "dosageCalculatorOutput" );
    removeAllChildren( myContent );
    return myContent;
}
function getSelectName( givenParentName )
{
    return givenParentName + "Select";
}
function getContentName( givenParentName )
{
    return givenParentName + "Content";
}
function makeAttrNameId( givenName )
{
    return " name='" + givenName + "' id='" + givenName + "'>";
}
function makeSelector( givenName, givenUnits, givenDefaultSelection )
{
    var myParent    = document.getElementById( givenName );

    var mySelect = document.createElement( "select" );
    mySelect.setAttribute( "class", getSelectName( givenName ) );
    mySelect.setAttribute( "id", getSelectName( givenName ) );
    myParent.appendChild( mySelect );
        
    var myContent = document.createElement( "span" );
    myContent.setAttribute( "class", getContentName( givenName ) );
    myContent.setAttribute( "id", getContentName( givenName ) );
    myParent.appendChild( myContent );

    for( i in givenUnits )
    {
        var myOption = document.createElement( "option" );
        mySelect.appendChild( myOption );
        myOption.value = i;
        myOption.appendChild( document.createTextNode( i ) );
    }
//    mySelect.size = mySelect.length;
    mySelect.selectedIndex = givenDefaultSelection;
}
function removeAllChildren( givenParent )
{
    while( givenParent.hasChildNodes() )
    {
        givenParent.removeChild( givenParent.firstChild );
    }
}
/*
function initialize_page()
{
    list_object( decodeDrugRoute );
    make_question();
}
function make_question()
{

    var myDiv = document.getElementById( "myDiv" );

    myText = give_birth( myDiv, "div" );
    myText.appendChild( document.createTextNode( "test node" ) );

    var myTable = give_birth( myDiv, "table" );

    var myOrder = give_birth( myTable, "tr" );
    var myAvailable = give_birth( myTable, "tr" );
    var myAdminister = give_birth( myTable, "tr" );

    myTable.style.border = "solid black 3px";
}


function give_birth( givenParent, givenChildName )
{
    myChild = document.createElement( givenChildName );
    givenParent.appendChild( myChild );
    return myChild;
}
*/
