function calc(form, stm1, sv1, stm2, sv2, stm3, sv3, stm4, sv4, stm5, sv5, stm6, sv6, stm7, sv7, stm8, sv8, stm9, sv9, vtl, cow, coe, lit) {
    var t001 = vtl;                           // water rate compared to litres.
    var t002 = cow;                           // cost of the water
    var t003 = coe;                           // cost of electricity
    var t004 = lit;                           // current shower productivity rates
    var t005 = ( t003 * 1 ) + ( t002 * 1 );   // cost per water unit
    var t006 = 0;                             // tempory place holder
    var t007 = 0;                             // tempory place holder
    var t008 = 0;                             // tempory place holder
    var t009 = 0;                             // tempory place holder
    var t010 = 0;                             // tempory place holder
    // ************ Begin calculations for the line 01
    form.va1.value = eval( stm1 * t004 );                  // water per shower
    t006 = eval( stm1 * sv1 * t004 * 4.3 );         // water per month
    t006 = eval( t006 - ( t006 % 1 ) );                    // integer of water per month
    form.vc1.value = t006;                                 // water per month output
    t009 = t006;                                           // holder for the end calculation
    form.vd1.value = eval( stm1 );                         // shower time
    form.ve1.value = eval( sv1 );                          // shower frequency
    t006 = eval( sv1 * 215 * t001 );                     // SSF maximum monthly water usage
    t007 = eval( t006 - ( t006 % 1 ) );                    // above as an integer
    t006 = eval( stm1 * 5.6 * sv1 * 4.3 * t001 );          // SSF average rate
    t008 = eval( t006 - ( t006 % 1 ) );                    // above as an integer
    if ( t008 > t007 ) {                                   // correct for over shower
        t008 = t007;
        }
    form.vf1.value = t008;                                 // adjusted water usage
    t010 = t008;                                           // holder for the end calculation
    // ************ End calculations for the line 01

    // ************ Begin calculations for the line 02
    form.va2.value = eval( stm2 * t004 );
    t006 = eval( stm2 * sv2 * t004 * 4.3 );
    t006 = eval( t006 - ( t006 % 1 ) );
    form.vc2.value = t006;
    t009 = eval( ( t009 ) + ( t006 ) );
    form.vd2.value = eval( stm2 );
    form.ve2.value = eval( sv2 );
    t006 = eval( sv2 * 215 * t001 );
    t007 = eval( t006 - ( t006 % 1 ) );
    t006 = eval( stm2 * 5.6 * sv2 * 4.3 * t001 );
    t008 = eval( t006 - ( t006 % 1 ) );
    if ( t008 > t007 ) {
        t008 = t007;
        }
    form.vf2.value = t008;
    t010 = eval( ( t010 ) + ( t008 ) );
    // ************ End calculations for the line 02

    // ************ Begin calculations for the line 03
    form.va3.value = eval( stm3 * t004 );
    t006 = eval( stm3 * sv3 * t004 * 4.3 );
    t006 = eval( t006 - ( t006 % 1 ) );
    form.vc3.value = t006;
    t009 = eval( ( t009 ) + ( t006 ) );
    form.vd3.value = eval( stm3 );
    form.ve3.value = eval( sv3 );
    t006 = eval( sv3 * 215 * t001 );
    t007 = eval( t006 - ( t006 % 1 ) );
    t006 = eval( stm3 * 5.6 * sv3 * 4.3 * t001 );
    t008 = eval( t006 - ( t006 % 1 ) );
    if ( t008 > t007 ) {
        t008 = t007;
        }
    form.vf3.value = t008;
    t010 = eval( ( t010 ) + ( t008 ) );
    // ************ End calculations for the line 03

    // ************ Begin calculations for the line 04
    form.va4.value = eval( stm4 * t004 );
    t006 = eval( stm4 * sv4 * t004 * 4.3 );
    t006 = eval( t006 - ( t006 % 1 ) );
    form.vc4.value = t006;
    t009 = eval( ( t009 ) + ( t006 ) );
    form.vd4.value = eval( stm4 );
    form.ve4.value = eval( sv4 );
    t006 = eval( sv4 * 215 * t001 );
    t007 = eval( t006 - ( t006 % 1 ) );
    t006 = eval( stm4 * 5.6 * sv4 * 4.3 * t001 );
    t008 = eval( t006 - ( t006 % 1 ) );
    if ( t008 > t007 ) {
        t008 = t007;
        }
    form.vf4.value = t008;
    t010 = eval( ( t010 ) + ( t008 ) );
    // ************ End calculations for the line 04

    // ************ Begin calculations for the line 05
    form.va5.value = eval( stm5 * t004 );
    t006 = eval( stm5 * sv5 * t004 * 4.3 );
    t006 = eval( t006 - ( t006 % 1 ) );
    form.vc5.value = t006;
    t009 = eval( ( t009 ) + ( t006 ) );
    form.vd5.value = eval( stm5 );
    form.ve5.value = eval( sv5 );
    t006 = eval( sv5 * 215 * t001 );
    t007 = eval( t006 - ( t006 % 1 ) );
    t006 = eval( stm5 * 5.6 * sv5 * 4.3 * t001 );
    t008 = eval( t006 - ( t006 % 1 ) );
    if ( t008 > t007 ) {
        t008 = t007;
        }
    form.vf5.value = t008;
    t010 = eval( ( t010 ) + ( t008 ) );
    // ************ End calculations for the line 05

    // ************ Begin calculations for the line 06
    form.va6.value = eval( stm6*t004 );
    t006 = eval( stm6 * sv6 * t004 * 4.3 );
    t006 = eval( t006 - ( t006 % 1 ) );
    form.vc6.value = t006;
    t009 = eval( ( t009 ) + ( t006 ) );
    form.vd6.value = eval( stm6 );
    form.ve6.value = eval( sv6 );
    t006 = eval( sv6 * 215 * t001 );
    t007 = eval( t006 - ( t006 % 1 ) );
    t006 = eval( stm6 * 5.6 * sv6 * 4.3 * t001 );
    t008 = eval( t006 - ( t006 % 1 ) );
    if ( t008 > t007 ) {
        t008 = t007;
        }
    form.vf6.value = t008;
    t010 = eval( ( t010 ) + ( t008 ) );
    // ************ End calculations for the line 06

    // ************ Begin calculations for the line 07
    form.va7.value = eval( stm7*t004 );
    t006 = eval( stm7 * sv7 * t004 * 4.3 );
    t006 = eval( t006 - ( t006 % 1 ) );
    form.vc7.value = t006;
    t009 = eval( ( t009 ) + ( t006 ) );
    form.vd7.value = eval( stm7 );
    form.ve7.value = eval( sv7 );
    t006 = eval( sv7 * 215 * t001 );
    t007 = eval( t006 - ( t006 % 1 ) );
    t006 = eval( stm7 * 5.6 * sv7 * 4.3 * t001 );
    t008 = eval( t006 - ( t006 % 1 ) );
    if ( t008 > t007 ) {
        t008 = t007;
        }
    form.vf7.value = t008;
    t010 = eval( ( t010 ) + ( t008 ) );
    // ************ End calculations for the line 07

    // ************ Begin calculations for the line 08
    form.va8.value = eval( stm8*t004 );
    t006 = eval( stm8 * sv8 * t004 * 4.3 );
    t006 = eval( t006 - ( t006 % 1 ) );
    form.vc8.value = t006;
    t009 = eval( ( t009 ) + ( t006 ) );
    form.vd8.value = eval( stm8 );
    form.ve8.value = eval( sv8 );
    t006 = eval( sv8 * 215 * t001 );
    t007 = eval( t006 - ( t006 % 1 ) );
    t006 = eval( stm8 * 5.6 * sv8 * 4.3 * t001 );
    t008 = eval( t006 - ( t006 % 1 ) );
    if ( t008 > t007 ) {
        t008 = t007;
        }
    form.vf8.value = t008;
    t010 = eval( ( t010 ) + ( t008 ) );
    // ************ End calculations for the line 09

    // ************ Begin calculations for the line 10
    form.va9.value = eval( stm9*t004 );
    t006 = eval( stm9 * sv9 * t004 * 4.3 );
    t006 = eval( t006 - ( t006 % 1 ) );
    form.vc9.value = t006;
    t009 = eval( ( t009 ) + ( t006 ) );
    form.vd9.value = eval( stm9 );
    form.ve9.value = eval( sv9 );
    t006 = eval( sv9 * 215 * t001 );
    t007 = eval( t006 - ( t006 % 1 ) );
    t006 = eval( stm9 * 5.6 * sv9 * 4.3 * t001 );
    t008 = eval( t006 - ( t006 % 1 ) );
    if ( t008 > t007 ) {
        t008 = t007;
        }
    form.vf9.value = t008;
    t010 = eval( ( t010 ) + ( t008 ) );
    // ************ End calculations for the line 10

    // ************ Begin calculations for the totals
    form.fin01.value = t009;
    // Non SSF water volumn
    form.fin02.value = t010;
    // SSF water volumn
    t003 = eval( t009 * t005 * 100 );            // t009=total litres/t005=cost per litre
    t002 = eval( t003 - ( t003 % 1 ) );
    form.fin03.value = eval( t002 / 100 );
    // Non SSF shower costs
    t003 = eval( t010 * t005 * 100  );    // t010=total litres/t005=cost per litre/t001=litres conversion factor
    t002 = eval( t003 - ( t003 % 1 ) );
    form.fin04.value = eval( t002 / 100 );
    // SSF shower costs
    // ************ End calculations for the totals

}