function nanotime() {
    var d = new Date();

    return d.getTime();
}

function fill(num, length) {
    var s = '';
    for (var x = 1; x <= length; x++) {
        var mod = num % 10;
        s = String(mod) + s;
        num -= mod;
        num /= 10;
    }
    return s;
}
function filter(s) {
    s = String(s);
    var ss = '';
    for (var x = 1; x <= s.length; x++) {
        switch (s.charAt(x-1)) {
            case '0' :
            case '1' :
            case '2' :
            case '3' :
            case '4' :
            case '5' :
            case '6' :
            case '7' :
            case '8' :
            case '9' :
            ss += s.charAt(x-1);
        }
    }
    return Number(ss);
}

function formatNumber(num) {
    if (Number(num) == 0) {
        return "0";
    }
    var s = '';
    while (num > 0) {
        var mod = num % 1000;
        num -= mod;
        num /= 1000;
        
        if (num > 0) {
            s = '.' + fill(mod, 3) + s;
        } else {
            s = String(mod) + s;
        }
    }
    return s;
}    

var astCalc = Class.create({
    initialize: function() {
        this.currency = null;
        this.local = null;
        this.world = null;
        this.salary = null;
        this.hours = null;
        this.email = null;
        this.proc = null;
        this.saved = null;
        this.k = null;
    },
    
    setCurrency: function(data) {
        this.currency = data;
        
        $$('.cur').each(function (s) {
            s.update(data);
        });
        
        this.process();
    },
    
    setLocal: function(data) {
        if (!$F('e-world') || this.world == this.local) {
            $('e-world').value = formatNumber(data);
            this.world = data;
        }
        this.local = data;
        this.process();
    },
    
    setWorld: function (data) {
        this.world = (Number(data) != 0)? data : 692;
        this.process();
    }, 
    
    setSalary: function (data) {
        this.salary = data;
        this.process();
    },
    
    setHours: function (data) {
        this.hours = data;
        this.process();
    },
    
    setEmail: function (data) {
        this.email = data;
        this.process();
    },
    
    process: function () {
        if (this.hours && this.email && this.local && this.world && this.salary && this.hours && this.email) {
            var managedEmail = (this.email * 5 / this.hours);
            var m100  = Math.round(managedEmail * 100);
            bar1.move(Math.round(m100), 0.5);
            $('A31').update(Math.round(m100) + '%');
            $('Aclock').style.backgroundImage = 'url(http://chart.apis.google.com/chart?cht=p&chd=t:'+m100+','+(100 - m100)+'&chs=86x86&chp=4.7&chco=FF9900,FFFFFF)';
            
            var AvSalary = managedEmail * this.salary;
            var A12 = AvSalary * this.local;
            var A13 = AvSalary * this.world;
            
            $('A11').update(formatNumber(Math.round(AvSalary)));    
            $('A12').update(formatNumber(Math.round(A12)));    
            $('A13').update(formatNumber(Math.round(A13)));
            
            $('A21').update(formatNumber(Math.round(0.38 * AvSalary)));    
            $('A22').update(formatNumber(Math.round(0.38 * A12)));    
            $('A23').update(formatNumber(Math.round(0.38 * A13)));
            
            var proc = (this.email * 5 * 0.38) / this.hours;
            var h = this.hours * proc;
            
            $('A41').update(Math.round(proc * 100));
            $('A42').update(Math.round(h));
            $('A43').update(formatNumber(Math.round(proc * this.local * this.salary)));    
            $('A44').update(formatNumber(Math.round(proc * this.world * this.salary)));
            
            $('A51').update(formatNumber(Math.round(    (this.salary / 52) * this.world * managedEmail * 0.38   )));
            
            bar2.move(38, 0.5);
            $('A32').update('38%');
        }
    }
});
       
var calc;
var bar1;
var bar2;
Event.observe(window, 'load', function() {
    calc = new astCalc(); 
    calc.setCurrency('USD');
    calc.setSalary(0);
    calc.setHours(40);
    calc.setEmail(2.5);
    calc.setWorld(0);
    
    $('e-local').value = '';
    $('e-world').value = '';
    
    $('currency').observe('change', function() {
        calc.setCurrency($F('currency'));
    });
    
    $('e-local').observe('keyup', function() {
        var num = filter($F('e-local'));
        calc.setLocal(num);
        $('e-local').value = formatNumber(num);
    });
    $('e-world').observe('keyup', function() {
        var num = filter($F('e-world'));
        calc.setWorld(num);
        $('e-world').value = formatNumber(num);
    });
    $('salary').observe('keyup', function() {
        var num = filter($F('salary'));
        calc.setSalary(num);
        $('salary').value = formatNumber(num);
    });
    $('hours').observe('change', function() {
        calc.setHours($F('hours'));
    });
    $('email').observe('change', function() {
        calc.setEmail($F('email'));
    });
    
    bar1 = new nwBar($('Abar1'), 0, 100, {
        height: 9,
        width: 237,
        bg: '/images/Abg1.png',
        barImg: '/images/Ared.png',
        onTick: function(value) {
            $('Anum1').update(Math.round(value) + '%');
        }
    });
    
    bar2 = new nwBar($('Abar2'), 0, 100, {
        height: 9,
        width: 237,
        bg: '/images/Abg2.png',
        barImg: '/images/Agreen.png',
        onTick: function(value) {
            $('Anum2').update(Math.round(value) + '%');
        }
    });
});
