
with( AXANZ ){

AXANZ.insuranceRequiredCalculator = function(){

    var moneyFields = [ 
        "expFuneral", "expMortgage", "expHP", "expCards", "expOther", "dedCash", "incAnnual", "incOther" 
        ];

    for( f in moneyFields ){
        setFieldToCalculate( document.getElementById( moneyFields[ f ] ), "0.00");
    }
    
    document.getElementById( "expFuneral" ).value = "3800.00";
    
    setFieldToCalculate( document.getElementById( "incYears" ), "0" );
    setFieldToCalculate( document.getElementById( "incInterest" ), "4" );
    calculate();

    function setFieldToCalculate( field, val )
    {
        if( field.addEventListener ){
            field.addEventListener( "keypress", enterNumbers, false );
            field.addEventListener( "change", calculate, false );
            field.addEventListener( "focus", selectTarget, false );
        }
        else if( field.attachEvent ){
            field.attachEvent( "onkeypress", enterNumbers );
            field.attachEvent( "onchange", calculate );
            field.attachEvent( "onfocus", selectTarget );
        }
        field.value = val;
    } 

    function calculate (){
        var curNetDebt = getMoney( "expFuneral" ).plus( getMoney( "expMortgage" )).plus( getMoney( "expHP" )) 
                        .plus( getMoney( "expCards" )).plus( getMoney( "expOther" ));

        curNetDebt.writeDollarsTo("netDebt");
        
        var valAnnualRequired = getMoney( "incAnnual" ).minus( getMoney( "incOther" ));
        var valYears = getNumber( "incYears" );
        var valInterest = getNumber( "incInterest" ) / 100;

        var curNetIncomeReq = valAnnualRequired.lessThanEqual( decimal( 0 )) ? decimal( 0 ) : 
                              ( valAnnualRequired.times( 
                                  valInterest == 0  ? valYears : 
                                 ( 1 - Math.pow(  1 + valInterest, - valYears )) * ( 1 + valInterest ) / valInterest ));
                               
                              
                               
        curNetIncomeReq.writeDollarsTo( "incRequired" );
        
        var curTotalRequired = curNetDebt.plus( curNetIncomeReq ).minus( getMoney( "dedCash" ));
        
        ( curTotalRequired.lessThanEqual( decimal( 0 )) ? decimal( 0 ) : curTotalRequired ).writeDollarsTo( "totRequired" );
        
        document.getElementById( "warnZero" ).style.display = ( valInterest == 0 ) ? "" : "none" ; 
        document.getElementById( "warnHigh" ).style.display = ( valInterest > 0.1 ) ? "" : "none" ; 
        document.getElementById( "warnInterest" ).innerHTML = getNumber( "incInterest" );
    }        
    
    
    function enterNumbers( e ){
        k = cancelNonNumeric( e );
        if( k == 13 ){
            cancelEvent( e );
            calculate();
        }
    }


}();

}

