﻿// Forint es inflacios kalkulator
// www.penziranytu.hu
// az inflacios kalkulator utolso ket sora (kommentezett) jQuery DOM ready-re indul!


//******************
// forint kalkulator
//******************

var valid = '0123456789.'; // define valid characters
var oldvalue = "";

function snmod(di, bas) {
    return Number(Math.round(di - (Math.floor(di / bas) * bas)));
}


function isValid(string, allowed) {
    for (var i = 0; i < string.length; i++) {
        if (allowed.indexOf(string.charAt(i)) == -1) {
            return false;
        }
    }
    return true;
}



function calForint(val) {

    if (isValid(val, valid)) {

        oldvalue = val;

        if (Number(val)) {
            document.getElementById("calto").style.color = "";
        } else {
            document.getElementById("calto").style.color = "#f00";
            document.getElementById("calto").value = "####";
        }

        val = Math.round(Number(val));

        if (Number(val) > 0) {
            if (snmod(val, 5) < 3) {
                document.getElementById("calto").value = val - snmod(val, 5);
            } else {
                document.getElementById("calto").value = val + 5 - snmod(val, 5);
            }

        }

    } else {
        document.getElementById("calfrom").value = oldvalue;
    }
}


//*********************
// inflacios kalkulator
//*********************

var infcalcStartYear = 1950;
var infcalcEndYear = 2010;
var infcalcIndex = [1.000, 1.208, 1.694, 1.687, 1.605, 1.591, 1.575, 1.613, 1.618, 1.597, 1.608, 1.622, 1.631, 1.621, 1.627, 1.639, 1.658, 1.664, 1.659, 1.682, 1.704, 1.738, 1.788, 1.848, 1.881, 1.952, 2.050, 2.131, 2.229, 2.426, 2.647, 2.769, 2.960, 3.176, 3.440, 3.681, 3.877, 4.211, 4.864, 5.691, 7.334, 9.902, 12.177, 14.917, 17.723, 22.713, 28.074, 33.215, 37.967, 41.766, 45.859, 50.076, 52.731, 55.187, 58.942, 61.040, 63.481, 68.560, 72.742, 75.797, 79.511];
var infcalcDefBackground = 'white';
var infcalcChangedBackground = 'yellow';
var infcalcChangedTime = 1000;
var infcalcDecimals = 1000; // ahany 0, max. annyi tizedes :) 

function infcalcAddYears(id, start, end, year) {
    var sel = document.getElementById(id);
    for (var i = sel.length - 1; i >= 0; i--) sel.remove(i);
    for (var i = start; i < end + 1; i++) {
        var opt = document.createElement('option');
        opt.text = i;
        opt.value = i;
        if (i == year) opt.selected = true;
        try {
            sel.add(opt, null);
        } catch (ex) {
            sel.add(opt);
        }
    }
}

function infcalcCalculate() {
    var money = document.getElementById('infcalc_money').value;
    if (!isInteger(money) || money <= 0) {
        infcalcError('Nullánál nagyobb egész számot adjon meg összegnek!');
        return false;
    }
    var start = document.getElementById('infcalc_start').value;
    var end = document.getElementById('infcalc_end').value;
    var res = money * (infcalcIndex[end - infcalcStartYear] / infcalcIndex[start - infcalcStartYear]);
    res = Math.round(res * infcalcDecimals) / infcalcDecimals;
    res += '';
    if (res.indexOf('e') > 0) {
        infcalcError('Túl nagy számot adott meg!');
        return false;
    }
    var box = document.getElementById('infcalc_result');
    box.className = 'infcalc_result';
    box.innerHTML = 'Eredmény: ' + add1000Separators(res, ',', '.') + ' Ft';
    return false;
}

function infcalcError(msg) {
    var box = document.getElementById('infcalc_result');
    box.className = 'infcalc_error';
    box.innerHTML = msg;
    document.getElementById('infcalc_money').focus();
}

function isInteger(v) {
    if (v == null || !v.length) return false;
    for (var i = 0; i < v.length; i++) {
        var c = v.charAt(i);
        if (c < '0' || c > '9') return false;
    }
    return true;
}

function add1000Separators(v, decSep, thoSep) {
    if (v == null || v < 1) return v;
    v += ''; // convert to string
    var vInt = '';
    var vDec = '';
    if (decSep && thoSep) { // it isn't integer
        v = v.replace('.', decSep);
        dsp = v.indexOf(decSep);
        if (dsp == -1) vInt = v;
        else {
            vInt = v.substr(0, dsp);
            vDec = v.substr(dsp + 1);
        }
    } else vInt = v;
    var reg = new RegExp('(-?[0-9]+)([0-9]{3})');
    while (reg.test(vInt)) vInt = vInt.replace(reg, '$1' + thoSep + '$2');
    if (decSep && thoSep && vDec) return vInt + decSep + vDec;
    else return vInt;
}

//infcalcAddYears('infcalc_start',infcalcStartYear,infcalcEndYear,infcalcStartYear);
//infcalcAddYears('infcalc_end',infcalcStartYear,infcalcEndYear,infcalcEndYear);
