function select_istochnik()
{
  if (document.getElementById('istok_info').value=='9')
  {
    document.getElementById('dop_info_istok').style.display='inline';
  }
  else
  {
    document.getElementById('dop_info_istok').style.display='none';
  }
}
function isJuridical(owner) {return owner == 2;}
function isRussiaReg(registered) {return registered == 1;}
function isNeedReg(registered) {return registered == 2;}
function isBelarusReg(registered) {return registered == 3;}
function isForeignReg(registered) {return registered == 3 || registered == 4;}
function isForeignNotBelarusReg(registered) {return registered == 4;}

function isAClass(type) {return type == 1;}
function isBClass(type) {return type == 2 || type == 3;}
function isCClass(type) {return type == 4 || type == 5;}
function isDClass(type) {return type == 6 || type == 7 || type == 8;}
function isTransport(type) {return type == 9 || type == 10;}
function isTraktor(type) {return type == 11;}
function isTraktorTrailer(type) {return type == 14;}
function isTrailer(type) {return type == 12 || type == 13 || type == 14;}

function calcTB(type, owner)
{
    switch(type * 1)
    {
        case 1: return 1215; // Мотоциклы и мотороллеры
        default:
        case 2: // Легковые автомобили
            if(isJuridical(owner)) return 2375; // Легковые автомобили (юридических лиц)
            else return 1980; // Легковые автомобили (физических лиц, предпринимателей без образования юридического лица)
        case 3: return 2965; // Легковые автомобили используемые в качестве такси
        case 4: return 2025; // Грузовые автомобили с разрешенной максимальной массой 16 тонн и менее
        case 5: return 3240; // Грузовые автомобили с разрешенной максимальной массой более 16 тонн
        case 6: return 1620; // Автобусы с числом пассажирских мест до 20 включительно
        case 7: return 2025; // Автобусы с числом пассажирских мест более 20
        case 8: return 2965; // Автобусы, используемые в качестве такси
        case 9: return 1620; // Троллейбусы
        case 10: return 1010; // Трамваи
        case 11: return 1215; // Тракторы, самоходные дорожно-строительные и иные машины
        case 12: return 395; // Прицепы к легковым автомобилям, мотоциклам, мотороллерам
        case 13: return 810; // Прицепы к грузовым автомобилям, полуприцепы, прицепы-роспуски
        case 14: return 305; // Прицепы к тракторам, самоходным дорожно-строительным и иным машинам
    }
}

function calcKT(lived, type)
{
    if(isTraktor(type) || isTraktorTrailer(type))
    {
        switch(lived * 1)
        {
            default:
            case 1: return 1.2; // г. Москва
            case 2: return 1; // г. Санкт-Петербург
            case 3: return 1; // Города и населенные пункты Московской области
            case 4: return 1; // Города и населенные пункты Ленинградской области
            case 5: return 0.8;
            case 6: return 0.8;
            case 7: return 0.5;
            case 8: return 0.5;
            case 9: return 0.5;
            case 10: return 0.5;
            case 11: return 0.5;
            case 12: return 0.5;
            case 13: return 0.5;
        }
    }
    else
    {
        switch(lived * 1)
        {
            default:
            case 1: return 2; // г. Москва
            case 2: return 1.8; // г. Санкт-Петербург
            case 3: return 1.7; // Города и населенные пункты Московской области
            case 4: return 1.6; // Города и населенные пункты Ленинградской области
            case 5: return 1.3;
            case 6: return 1;
            case 7: return 0.85;
            case 8: return 0.8;
            case 9: return 0.75;
            case 10: return 0.7;
            case 11: return 0.65;
            case 12: return 0.6;
            case 13: return 0.55;
        }
    }
}

function calcKBM(classbm)
{
    switch(classbm * 1)
    {
        case -1: return 2.45;
        case 0: return 2.3;
        case 1: return 1.55;
        case 2: return 1.4;
        default:
        case 3: return 1;
        case 4: return 0.95;
        case 5: return 0.9;
        case 6: return 0.85;
        case 7: return 0.8;
        case 8: return 0.75;
        case 9: return 0.7;
        case 10: return 0.65;
        case 11: return 0.6;
        case 12: return 0.55;
        case 13: return 0.5;
    }
}

function calcKO(limit)
{
    if(limit == 1) return 1;
    else return 1.7;
}

function calcKVS(age)
{
    switch(age * 1)
    {
        case 1: return 1.7; // Возраст до 22 лет включительно, стаж до 3 лет включительно
        case 2: return 1.3; // Возраст до 22 лет включительно, стаж свыше 3 лет
        case 3: return 1.5; // Возраст старше 22 лет, стаж до 3 лет включительно
        default:
        case 4: return 1; // Возраст старше 22 лет, стаж свыше 3 лет
    }
}

function calcKM(power)
{
    switch(power * 1)
    {
        case 1: return 0.6; // до 50 включительно
        case 2: return 0.9; // свыше 50 до 70 включительно
        default:
        case 3: return 1; // свыше 70 до 100 включительно
        case 4: return 1.2; // свыше 100 до 120 включительно
        case 5: return 1.4; // свыше 120 до 150 включительно
        case 6: return 1.6; // свыше 150
    }
}

function calcKS(useperiod)
{
    switch(useperiod * 1)
    {
        case 1: return 0.4; // 3 месяца
        case 2: return 0.5; // 4 месяца
        case 3: return 0.6; // 5 месяцев
        case 4: return 0.7; // 6 месяцев
        case 5: return 0.8; // 7 месяцев
        case 6: return 0.9; // 8 месяцев
        case 7: return 0.95; // 9 месяцев
        default:
        case 8: return 1; // 10 месяцев и более
    }
}

function calcKP(period)
{
    switch(period * 1)
    {
        case 1: return 0.2; // до 15 дней
        case 2: return 0.3; // от 16 дней до 1 месяца
        case 3: return 0.4; // 2 месяца
        case 4: return 0.5; // 3 месяца
        case 5: return 0.6; // 4 месяца
        case 6: return 0.65; // 5 месяцев
        case 7: return 0.7; // 6 месяцев
        case 8: return 0.8; // 7 месяцев
        case 9: return 0.9; // 8 месяцев
        case 10: return 0.95; // 9 месяцев
        default:
        case 11: return 1; // 10 месяцев и более
    }
}

function calcKN(foul)
{
    switch(foul * 1)
    {
        default:
        case 1: return 1; // Грубых нарушений небыло
        case 2: return 1.5; // Грубые нарушения были
    }
}

function getLived()
{
    h = document.getElementById('i_lived_city');
    if(h && h.checked)
    {
        if(h = document.getElementById('i_lived_select'))
            return h.value;
    }
    
    for(var i = 1; i <= 7; i++)
    {
        if(h = document.getElementById('i_lived_' + i))
        {
            if(h.checked) return i;
        }
    }
    
    return 1;
}

function getLimit()
{
    for(var i = 1; i <= 2; i++)
    {
        if(h = document.getElementById('i_limit_' + i))
        {
            if(h.checked) return i;
        }
    }
    
    return 1;
}

function showResult(total, tb, kt, kbm, ko, kvs, km, ks, kp, kn)
{
    document.getElementById('o_total').innerHTML = total;
    document.getElementById('o_tb').innerHTML = tb;
    document.getElementById('o_kt').innerHTML = kt;
    document.getElementById('o_kbm').innerHTML = kbm;
    document.getElementById('o_ko').innerHTML = ko;
    document.getElementById('o_kvs').innerHTML = kvs;
    document.getElementById('o_km').innerHTML = km;
    document.getElementById('o_ks').innerHTML = ks;
    document.getElementById('o_kp').innerHTML = kp;
    document.getElementById('o_kn').innerHTML = kn;

    document.getElementById('hid_total').value = total;
    document.getElementById('hid_tb').value = tb;
    document.getElementById('hid_kt').value = kt;
    document.getElementById('hid_kbm').value = kbm;
    document.getElementById('hid_ko').value = ko;
    document.getElementById('hid_kvs').value = kvs;
    document.getElementById('hid_km').value = km;
    document.getElementById('hid_ks').value = ks;
    document.getElementById('hid_kp').value = kp;
    document.getElementById('hid_kn').value = kn;

    document.getElementById('o2_tb').innerHTML = tb;
    document.getElementById('o2_kt').innerHTML = kt;
    document.getElementById('o2_kbm').innerHTML = kbm;
    document.getElementById('o2_ko').innerHTML = ko;
    document.getElementById('o2_kvs').innerHTML = kvs;
    document.getElementById('o2_km').innerHTML = km;
    document.getElementById('o2_ks').innerHTML = ks;
    document.getElementById('o2_kp').innerHTML = kp;
    document.getElementById('o2_kn').innerHTML = kn;
}

function show(id)
{
    h = document.getElementById(id + '_hide');
    if(h) h.outerHTML = '';
    document.getElementById(id).style.display = '';
}

function hide(id, text)
{
    h = document.getElementById(id + '_hide');
    if(h) h.outerHTML = '';
    document.getElementById(id).outerHTML += '<span id="' + id + '_hide">' + text + '</span>';
    document.getElementById(id).style.display = 'none';
}

function onInput()
{
    owner = document.getElementById('i_owner').value;
    registered = document.getElementById('i_registered').value; //1 - Russia, 2 - need registered, 3 - Belarus etc, 4 - Foreign
    type = document.getElementById('i_type').value;
    lived = getLived();
    classbm = document.getElementById('i_classbm').value;
    limit = getLimit();
    age = document.getElementById('i_age').value;
    power = document.getElementById('i_power').value;
    useperiod = document.getElementById('i_useperiod').value;
    period = document.getElementById('i_period').value;
    foul = document.getElementById('i_foul').value;
    foul = document.getElementById('i_foul').value;
    
    
    total = 0;
    tb = calcTB(type, owner);
    
    if(isForeignReg(registered))
    {
        if(isForeignNotBelarusReg(registered))
        {
            kt = 2;
            hide('b_type', 'КТ = 1.6');   // иностранные государства
            document.getElementById('kt_block').style.display='none';
        }
        else //Belarus
        {
            hide('b_type', 'КТ = 1');
            kt = 1;
            document.getElementById('kt_block').style.display='inline';
        }
    }
    else if(isNeedReg(registered))
    {
        hide('b_type', 'НЕ ИСПОЛЬЗУЕТСЯ');
        document.getElementById('kt_block').style.display='none';
        kt = 1;
    }
    else
    {
        document.getElementById('kt_block').style.display='inline';
        show('b_type');
        kt = calcKT(lived, type);
    }
    
    if(isTrailer(type) || isForeignReg(registered) || isNeedReg(registered))
    {
        hide('i_classbm', 'НЕ ИСПОЛЬЗУЕТСЯ');
        kbm = 1;
        document.getElementById('kbm_block').style.display='none';
    }
    else
    {
        document.getElementById('kbm_block').style.display='inline';
        show('i_classbm');
        kbm = calcKBM(classbm);
    }
    
    if(isForeignReg(registered))
    {
        if(isForeignNotBelarusReg(registered))
        {
            ko = isJuridical(owner) ? 1.7 : 1;
            hide('i_limit', 'КО = ' + ko);
            document.getElementById('ko_block').style.display='none';
            
            
            
        }
        else //Belarus
        {
            hide('i_limit', 'КО = 1');
            document.getElementById('ko_block').style.display='none';
            ko = 1.7;
        }
    }
    else
    {
        if(isJuridical(owner) || isTrailer(type))
        {
            hide('i_limit', 'KO = 1.7');
            document.getElementById('ko_block').style.display='none';
            if(isJuridical(owner)) ko = 1.7;
            else ko = 1;
        }
        else
        {
            show('i_limit');
            document.getElementById('ko_block').style.display='inline';
            ko = calcKO(limit);
        }
    }
    
    if(isForeignReg(registered))
    {
        if(isForeignNotBelarusReg(registered))
        {
            kvs = isJuridical(owner) ? 1 : 1.5;
            hide('i_age', 'КВС = ' + kvs);
            document.getElementById('kvs_block').style.display='none';
        }
        else //Belarus
        {
            hide('i_age', 'КВС = 1');
            document.getElementById('kvs_block').style.display='none';
            kvs = 1;
        }
    }
    else
    {
        if(limit == 2 || isJuridical(owner) || isTrailer(type))
        {
            hide('i_age', 'НЕ ИСПОЛЬЗУЕТСЯ');
            document.getElementById('kvs_block').style.display='none';
            kvs = 1;
        }
        else
        {
            show('i_age');
            document.getElementById('kvs_block').style.display='inline';
            kvs = calcKVS(age);
        }
    }
    
    if(isBClass(type))
    {
        show('i_power');
        document.getElementById('km_block').style.display='inline';
        km = calcKM(power);
    }
    else
    {
        hide('i_power', 'НЕ ИСПОЛЬЗУЕТСЯ');
        document.getElementById('km_block').style.display='none';
        km = 1;
    }
    
    if(isNeedReg(registered) || isForeignReg(registered))
    {
        hide('i_useperiod', 'НЕ ИСПОЛЬЗУЕТСЯ');
        document.getElementById('ks_block').style.display='none';
        ks = 1;
    }
    else
    {
        show('i_useperiod');
        document.getElementById('ks_block').style.display='inline';
        ks = calcKS(useperiod);
    }
    
    if(isForeignReg(registered))
    {
        show('i_period');
        document.getElementById('kp_block').style.display='inline';
        kp = calcKP(period);
    }
    else if(isNeedReg(registered))
    {
        hide('i_period', 'НЕ ИСПОЛЬЗУЕТСЯ');
        document.getElementById('kp_block').style.display='none';
        kp = 0.2;
    }
    else
    {
        hide('i_period', 'НЕ ИСПОЛЬЗУЕТСЯ');
        document.getElementById('kp_block').style.display='none';
        kp = 1;
    }
    
    if(isTrailer(type) || isNeedReg(registered))
    {
        hide('i_foul', 'НЕ ИСПОЛЬЗУЕТСЯ');
        document.getElementById('kn_block').style.display='none';
        kn = 1;
    }
    else
    {
        show('i_foul');
        document.getElementById('kn_block').style.display='inline';
        kn = calcKN(foul);
    }

    if(isJuridical(owner) && (ks == 0.6 || ks == 0.5 || ks == 0.4))
  	{
  		show("tc_risk_block");
  	}
  	else
  	{
  		hide('tc_risk_block', '');
  	}

    if(owner == 1 && tb == 395)
  	{
  		show("tc_risk_block2");
  	}
  	else
  	{
  		hide('tc_risk_block2', '');
  	}

    if(isRussiaReg(registered))
    {
        if(isJuridical(owner))
        {
            document.getElementById('urik').style.display='inline';
            document.getElementById('fizik').style.display='none';
            if(isBClass(type))
            {
                ko = 1.7;
                total = tb * kt * kbm * ko * ks * km * kn; //Т = ТБ x КТ x КБМ x КО х КС x КМ x КН, где КО = 1,5
            }
            else if(isAClass(type) || isCClass(type) || isDClass(type) || isTransport(type) || isTraktor(type))
            {
                ko = 1.7;
                total = tb * kt * kbm * ko * ks * kn; //Т = ТБ x КТ x КБМ х КС x КО x КН, где КО = 1,5
            }
            else total = tb * kt * ks ; //Т = ТБ x КТ х КС
        }
        else
        {
            document.getElementById('urik').style.display='none';
            document.getElementById('fizik').style.display='inline';
            if(isBClass(type)) total = tb * kt * kbm * kvs * ko * km * ks * kn; //Т = ТБ x КТ x КБМ x КВС x КО x КМ x КС x КН
            else if(isAClass(type) || isCClass(type) || isDClass(type) || isTransport(type) || isTraktor(type)) total = tb * kt * kbm * kvs * ko * ks * kn; //Т = ТБ x КТ x КБМ x КВС x КО x КС x КН
            else total = tb * kt * ks; //Т = ТБ x КТ x КС
        }
        
        if((total > 3 * tb * kt) && (kn == 1))
            total = 3 * tb * kt; //П=3хТБхКТ
        else if((total > 5 * tb * kt) && (kn == 1.5))
            total = 5 * tb * kt; //П=5хТБхКТ
    }
    else if(isNeedReg(registered))
    {
        kp = 0.2;
        if(isJuridical(owner))
        {
            document.getElementById('urik').style.display='inline';
            document.getElementById('fizik').style.display='none';

            if(isBClass(type))
            {
                ko = 1.7;
                total = tb * ko * km * kp; //Т = ТБ x КО x КМ x КП, где КО = 1,5
            }
            else if(isAClass(type) || isCClass(type) || isDClass(type) || isTransport(type) || isTraktor(type))
            {
                ko = 1.7;
                total = tb * ko * kp; //Т = ТБ x КО x КП, где КО = 1,5
            }
            else total = tb * kp; //Т = ТБ x КП
        }
        else
        {
            document.getElementById('urik').style.display='none';
            document.getElementById('fizik').style.display='inline';
            if(isBClass(type)) total = tb * kvs * ko * km * kp; //Т = ТБ x КВС x КО x КМ x КП
            else if(isAClass(type) || isCClass(type) || isDClass(type) || isTransport(type) || isTraktor(type)) total = tb * kvs * ko * kp; //Т = ТБ x КВС x КО x КП
            else total = tb * kp; //Т = ТБ x КП
        }
    }
    else if(isForeignReg(registered))
    {
        kt = 1.6;
        kbm = 1;
        kvs = isJuridical(owner) ? 1 : 1.5;
        ko = isJuridical(owner) ? 1.7 : 1;

        if(isJuridical(owner))
        {
            document.getElementById('urik').style.display='inline';
            document.getElementById('fizik').style.display='none';
            if(isBClass(type)) total = tb * kt * kbm * ko * km * kp * kn; //Т = ТБ x КТ x КБМ x КО x КМ x КП x КН
            else if(isAClass(type) || isCClass(type) || isDClass(type) || isTransport(type) || isTraktor(type)) total = tb * kt * kbm * ko * kp * kn; //Т = ТБ x КТ x КБМ x КО x КП x КН
            else total = tb * kt * kp; //Т = ТБ x КТ x КП
        }
        else
        {
            document.getElementById('urik').style.display='none';
            document.getElementById('fizik').style.display='inline';
            if(isBClass(type)) total = tb * kt * kbm * kvs * ko * km * kp * kn; //Т = ТБ x КТ x КБМ x КВС x КО x КМ x КП x КН
            else if(isAClass(type) || isCClass(type) || isDClass(type) || isTransport(type) || isTraktor(type)) total = tb * kt * kbm * kvs * ko * kp * kn; //Т = ТБ x КТ x КБМ x КВС x КО x КП x КН
            else total = tb * kt * kp; //Т = ТБ x КТ x КП
        }
    }
            
    total = Math.round(total * 100) / 100;
    showResult(total, tb, kt, kbm, ko, kvs, km, ks, kp, kn);
}
