var ds = {
    usr:{ nbr:0, label: 'Number of JD Edwards users' },
    wage:{ cost:0, precalc:51, label:'Average annual IT worker wage' },
    itd:{ nbr:0, cost:0, precalc:0, label:'Information thefts and disclosures' },
    dos:{ nbr:0, cost:0, precalc:0, label:'Incidents that caused denial of IT service' },
    spv:{ nbr:0, cost:0, precalc:0, label:'Security policy violations' },
    ddd:{ nbr:0, cost:0, precalc:0, label:'Incidents of data destruction and or damage' },
    uda:{ nbr:0, cost:0, precalc:0, label:'Incidents of unauthorized data access' }
};

var result = 0

var subs = {
    wage:function(){
        //=IF(B2="",100000/(12*22*7.5),(B2*2)/(12*22*7.5))
        var dividend = ( ds.wage.cost == 0 ) ? 100000 : ( ds.wage.cost * 2 )
        ds.wage.precalc = dividend/( 12 * 22 * 7.5 )
        return -1
    },
    itd:function(){
        if( ds.itd.cost != 0 ){ return ds.itd.cost }
        if( ds.itd.nbr != 0 ){ ds.itd.precalc = ds.itd.nbr }
        // =ROUND( (IF(B4="",(($F$1/1000) +0.4 ),B4)),0)
        else{ ds.itd.precalc = Math.round( ( ds.usr.nbr/1000 ) + 0.4 ) }
        // (F4*(180)*$F$2)+(F4*250000)
        return( ds.itd.precalc * 180 * ds.wage.precalc ) + ( ds.itd.precalc * 250000 )
    },
    dos:function(){
        if( ds.dos.cost != 0 ){ return ds.dos.cost }
        //IF(B6="",  ((($F$1/1000)*2) +0.4 ),B6
        if( ds.dos.nbr != 0 ){ ds.dos.precalc = ds.dos.nbr }
        else{ ds.dos.precalc = Math.round( ( ( ds.usr.nbr/1000 ) * 2 ) + .4 ) }
        // (F6*32*$F$2)+(F6*122000)
        return( ds.dos.precalc * 32 * ds.wage.precalc ) + ( ds.dos.precalc * 122000 )
    },
    spv:function(){
        if( ds.spv.cost != 0 ){ return ds.spv.cost }
        // IF(B8="",  ((($F$1/1000)*30) +0.4 ),B8))
        if( ds.spv.nbr != 0 ){ ds.spv.precalc = ds.spv.nbr }
        else{ ds.spv.precalc = Math.round( ( ( ds.usr.nbr/1000 ) * 30 ) + 0.4 ) }
        // (F8*(2)*$F$2)+(F8*20000)
        return( ds.spv.precalc * 2 * ds.wage.precalc ) + ( ds.spv.precalc * 20000 )
    },
    ddd:function(){
        if( ds.ddd.cost != 0 ){ return ds.ddd.cost }
        if( ds.ddd.nbr != 0 ){ ds.ddd.precalc = ds.ddd.nbr }
        // IF(B10="",(($F$1/1000) +0.4 )
        else{ ds.ddd.precalc = Math.round( ( ds.usr.nbr/1000 ) + 0.4 ) }
        // (F10*120*$F$2)+(F10*350000)
        return( ds.ddd.precalc * 120 * ds.wage.precalc ) + ( ds.ddd.precalc * 350000 )
    },
    uda:function(){
        if( ds.uda.cost != 0 ){ return ds.uda.cost }
        return ds.uda.nbr * 85621
    }
};

function alter( node, factor, value ){
    value = clean_value(value)
    ds[node][factor] = value
    document.localform[node + '_' + factor].value = ( value == 0 ) ? null : format_value(value,factor)
}

function calc(){
    MM_validateForm('Name','','R','email','','RisEmail','Company','','R');
    if( !document.MM_returnValue ){ return }

    result = 0
    for( var node in subs ){
        var node_result = Math.round( subs[node]() )
        if( node_result != -1 )
        {
            ds[node].result = node_result
            document.getElementById( node +  '_result' ).innerHTML = format_value(node_result)
            result += node_result
        }
    }
    document.getElementById('result').innerHTML = format_value(result)
    var rfactor = ''
    if( result != 0 ){
        rfactor = ( result > 10000 ) ?
            "Please <a href='mailto:sales@qsoftware.com'>contact</a> Q Software immediately to see how we can reduce your risk." :
            "Wow, you seem to be much better than everyone else at risk management. Please <a href='mailto:sales@qsoftware.com'>contact us</a> to tell us how you do it."
    }
    document.getElementById('rfactor').innerHTML = rfactor

    var usr = ''
    var ar = ['Name', 'email', 'Company']
    for( i=0; i<ar.length; i++ ){
        usr += ar[i] + '=' + document.localform[ ar[i] ].value + '&'
    }
    var qs = 'qs=';
    var keys = { nbr:1, cost:1, result:1 };
    for( prop in ds ){
        qs += ds[prop].label + '='
        for( key in keys ){
            if( ds[prop][key] ){
                qs += key + '*' + ds[prop][key] + '!'
            }
        }
        qs += '||'
    }
    qs += "financial risk=" + result
    new Ajax.Request( 'http://www.qsoftware.com/cgi-bin/ajax.pl?' + usr + qs, { method:'get' } );
}

// obsolete
function mail_calc(){
    var keys = { nbr:1, cost:1, result:1 };
    var mailto_str = "mailto:sales@qsoftware.com" +
    "?subject=The Numbers Game" +
    "&body="
    for( prop in ds ){
        mailto_str += ds[prop].label + ': '
        for( key in keys ){
            if( ds[prop][key] ){
                mailto_str += key + '=' + ds[prop][key] + '; '
            }
        }
        mailto_str += escape("\n")
    }
    mailto_str += "financial risk: " + result + escape("\n\n")
    document.location.href = mailto_str
}

function clean_value(value){
    value = value.replace( /[^0-9.]/g, '' )
    return value || 0
}

function format_value( value, factor ){
    value = Math.round(value)
    value = value.toString()
    if( value > 999 ){
        var ar = value.split('')
        var i = ( ar.length % 3 ) || 3
        while( i < ar.length ){
            ar[i] = ',' + ar[i]
            i += 3
        }
        value = ar.join('')
    }
    if( factor == 'nbr' ){ return value }
    return '$ ' + value
}

