/***** 
   Тип транспортного засобу (К1) 
*****/
var k1_array = new Array();
k1_array[1] = new Array('1', '0.71', '0.94', '1.39', '1.41', '0.27', '3.04', '3.58', '1.68', '1.86', '0.57', '0.27', '0.54');
k1_array[2] = new Array('1', '1.41', '1.41', '1.41', '1.41', '0.27', '3.58', '3.58', '1.86', '1.86', '0.57', '0.54', '0.54');
k1_array[3] = new Array('1', '0.71', '0.94', '1.39', '1.41', '0.27', '3.04', '3.58', '1.68', '1.86', '0.57', '0.27', '0.54');


/*****
  Територія використання ТЗ (К2) 
*****/
var k2_array = new Array();
k2_array[1] = new Array('1', '1.5', '1.2', '1', '0.8', '0.5');
k2_array[2] = new Array('1', '1.5', '1.5', '1.5', '1.5', '1.5');
k2_array[3] = new Array('1', '1.5', '1.2', '1', '0.8', '0.5');


/*****
  Сфера використання (К3)
*****/
var k3_array = new Array();
k3_array[1] = new Array('1', '1', '1.1');
k3_array[2] = new Array('1', '1.1', '1.1');
k3_array[3] = new Array('1', '1', '1.1');


/*****
  Водійський стаж (К4)											
*****/
var k4_array = new Array();
k4_array[1] = new Array('1', '1.2', '1.2', '1.2', '1.2');
k4_array[2] = new Array('1', '1.2', '1', '1', '0.9');
k4_array[3] = new Array('1', '1.2', '1', '1', '0.9');


/*****
  Кількість зазначених у договорі осіб (К5)
  Діє тільки для III типу договору 
*****/
var k5_array = new Array();
k5_array[1] = 1;
k5_array[2] = 1;
k5_array[3] = 1.2;


/*****
  Спроби шахрайства (К6)
*****/
var k6_array = new Array();
k6_array[1] = new Array('1', '2');
k6_array[2] = new Array('1', '2');
k6_array[3] = new Array('1', '2');


/*****
  Коефіцієнт короткостроковості (К7)
*****/
var k7_array = new Array();
k7_array[1] = 0.2; // 1 місяць
k7_array[2] = 0.3;
k7_array[3] = 0.4;
k7_array[4] = 0.5;
k7_array[5] = 0.6;
k7_array[6] = 0.7;
k7_array[7] = 0.75;
k7_array[8] = 0.8;
k7_array[9] = 0.85;
k7_array[10] = 0.9;
k7_array[11] = 0.95; // 11 місяців
k7_array[12] = 1; // 1 рік
k7_array[13] = 0.15; // 15 днів


var k7_values = new Array();
k7_values[1] = 'легковий автомобіль до 1600 куб. см.';
k7_values[2] = 'легковий автомобіль 1600 куб. см. включно - 2000 куб. см.';
k7_values[3] = 'легковий автомобіль 2000 куб. см. включно - 3000 куб. см.';
k7_values[4] = 'легковий автомобіль 3000 куб. см. включно - і більше';
k7_values[5] = 'причеп до легкового автомобіля';
k7_values[6] = 'автобус з кількістю місць до 20 осіб';
k7_values[7] = 'автобус з кількістю місць більше 20 осіб';
k7_values[8] = 'вантажний автомобіль з вантажопідйомністю до 2 тон';
k7_values[9] = 'вантажний автомобіль з вантажопідйомністю більше 2 тон';
k7_values[10] = 'причеп до вантажного автомобіля';
k7_values[11] = 'мотоцикл / моторолер до 300 куб. см.';
k7_values[12] = 'мотоцикл / моторолер 300 куб. см. включно - і більше';


var contractType, vehicleType, territory, ownerType, experience, drivers, fraud, period, foreign, pensioner;
var k1 = k2 = k3 = k4 = k5 = k6 = k7 = 1;
var F, F1, BM, MAX, MIN;
var type_2_desc = '';

var bazis = 291.49;

// бонус-малус пока что не юзается
BM = 1;

function setContractType()
{
    if (ownerType == 2 || foreign == 1) {
        document.getElementById('contract_type2').disabled = true;
		if (foreign == 1){
        document.getElementById('contract_type3').disabled = true;

        if (contractType == 2 || contractType == 3) {
            document.getElementById('contract_type1').checked = true;
        }
    }}
    else {
        document.getElementById('contract_type2').disabled = false;
        document.getElementById('contract_type3').disabled = false;
    }

    contractType = getRadioValue(document.calc.contract_type);

/*
    // если договор 2 типа, то не можут быть иностранцем
    if (contractType == 2) {
        document.getElementById('foreign').checked = false;
        document.getElementById('foreign').disabled = true;
    }
*/
 
    if (ownerType == 1 && contractType == 3 && !foreign) {
        document.getElementById('pensioner').disabled = false;
    }
    else {
        document.getElementById('pensioner').checked = false;
        document.getElementById('pensioner').disabled = true;
    }
}

function setVehicleType()
{
    vehicleType = document.getElementById('vehicle_type').value;
/*
    if (ownerType == 1 && vehicleType == 1 && contractType == 3) {
        document.getElementById('pensioner').disabled = false;
    }
    else {
        document.getElementById('pensioner').checked = false;
        document.getElementById('pensioner').disabled = true;
    }
*/
}

function setTerritory()
{
    territory = document.getElementById('territory').value;
}

function setOwnerType()
{
    ownerType = getRadioValue(document.calc.owner_type);

    if (ownerType == 1 && contractType == 3 && !foreign) {
        document.getElementById('pensioner').disabled = false;
    }
    else {
        document.getElementById('pensioner').checked = false;
        document.getElementById('pensioner').disabled = true;
    }
}

function setExperience()
{
    experience = document.getElementById('experience').value;
}

function setNumDrivers()
{
    if (foreign) {
        if (contractType == 1) {
            document.getElementById('drivers').options[0].selected = true;
        }
        else if (contractType == 3) {
            document.getElementById('drivers').options[2].selected = true;
        }

        document.getElementById('drivers').disabled = true;
    }
    else if (pensioner) {
        document.getElementById('drivers').options[0].selected = true;
        document.getElementById('drivers').disabled = true;
    }
    else {
        if (contractType == 3) {
            document.getElementById('drivers').disabled = false;
            drivers = document.getElementById('drivers').value;
        }
        else {
            document.getElementById('drivers').options[0].selected = true;
            document.getElementById('drivers').disabled = true;
            drivers = document.getElementById('drivers').value;
        }
    }

    drivers = document.getElementById('drivers').value;
}

function setFraud()
{
    if (foreign) {
        if (document.getElementById('fraud').checked) {
            fraud = document.getElementById('fraud').checked = false;
        }

        fraud = document.getElementById('fraud').disabled = true;
        fraud = 0;
    }
    else {
        fraud = document.getElementById('fraud').disabled = false;

        if (document.getElementById('fraud').checked) {
            fraud = document.getElementById('fraud').value;
        }
        else {
            fraud = 0;
       }
    }
}

function setPeriod()
{
    period = document.getElementById('period').value;
}

function setForeign()
{
    if (document.getElementById('foreign').checked) {
        foreign = document.getElementById('foreign').value;

        document.getElementById('territory').options[2].selected = true;
        document.getElementById('territory').disabled = true;

        document.getElementById('pensioner').checked = false;
        document.getElementById('pensioner').disabled = true;
    }
    else {
        foreign = 0;

        document.getElementById('territory').disabled = false;
        document.getElementById('drivers').disabled = false;

        document.getElementById('pensioner').disabled = false;
    }
}

function setPensioner()
{
    if (document.getElementById('pensioner').checked) {
        pensioner = document.getElementById('pensioner').value;

        document.getElementById('contract_type3').checked = true;
        document.getElementById('contract_type1').disabled = true;
        document.getElementById('contract_type2').disabled = true;

        document.getElementById('owner_type1').checked = true;
        document.getElementById('owner_type2').disabled = true;

        document.getElementById('foreign').checked = false;
        document.getElementById('foreign').disabled = true;

        var len = document.getElementById('vehicle_type').length-1;

        for (var i=len; i>=0 ; i--) {
            document.getElementById('vehicle_type').options[i] = null;
        }

        document.getElementById('vehicle_type').options[0]  = new Option('легковий автомобіль до 1600 куб. см.', 1, false, false);
        document.getElementById('vehicle_type').options[1]  = new Option('причеп до легкового автомобіля', 5, false, false);
        document.getElementById('vehicle_type').options[2]  = new Option('мотоцикл / моторолер до 300 куб. см.', 11, false, false);
        document.getElementById('vehicle_type').options[3]  = new Option('мотоцикл / моторолер 300 куб. см. включно - і більше', 12, false, false);
    }
    else {
        pensioner = 0;

        document.getElementById('contract_type1').disabled = false;
        document.getElementById('contract_type2').disabled = false;
        document.getElementById('owner_type2').disabled = false;
        document.getElementById('foreign').disabled = false;

        var len = document.getElementById('vehicle_type').length-1;

        for (var i=len; i>=0 ; i--) {
            document.getElementById('vehicle_type').options[i] = null;
        }

        for (i=1; i<=k7_values.length; i++) {
            document.getElementById('vehicle_type').options[i-1]  = new Option(k7_values[i], i, false, false);
        }
    }
}

function changeParam(param)
{
    switch (param) {
        case 'contract_type':
            setContractType();

            // зависимости
            setVehicleType();
            setTerritory();
            setOwnerType();
            setExperience();
            setNumDrivers();
            break;
        case 'vehicle_type': 
            // k1
            setVehicleType();
            break;
        case 'territory': 
            // k2
            setTerritory();
            break;
        case 'owner_type':
            // k3
            setOwnerType();

            // зависимости
            setContractType();
            break;
        case 'experience': 
            // k4
            setExperience();
            break;
        case 'drivers': 
            // k5
            setNumDrivers();
            break;
        case 'fraud': 
            // k6
            setFraud();
            break;
        case 'period': 
            // k7
            setPeriod();
            break;
        case 'foreign': 
            setForeign();

            // зависимости
            setContractType();
            setTerritory();
            setNumDrivers();
            setFraud();
            break;
        case 'pensioner': 
            setPensioner();

            setNumDrivers();
            break;
    }

    setKoefficients();
    calc();
    changeDivs();
}

function setKoefficients()
{
    k1 = k1_array[contractType][vehicleType];
    k2 = k2_array[contractType][territory];

    if (foreign == 1 && ownerType == 2) {
        k3 = 1.2;
    }
    else {
        k3 = k3_array[contractType][ownerType];
    }

    k4 = k4_array[contractType][experience];
    k5 = k5_array[drivers];
    k6 = k6_array[contractType][fraud];
    k7 = k7_array[period];
}

function changeDivs()
{
    div_k1.innerHTML = k1;
    div_k2.innerHTML = k2;
    div_k3.innerHTML = k3;
    div_k4.innerHTML = k4;
    div_k5.innerHTML = k5;
    div_k6.innerHTML = k6;
    div_k7.innerHTML = k7;
    div_price.innerHTML = F;

    if (contractType == 2) {
        switch (vehicleType) {
            case '1':
            case '2':
            case '3':
            case '4':
                type_2_desc = '<b>Застрахованим вважається Страхувальник, який експлуатує наступні ТЗ:</b><br /><b>А</b>-мотоцикли та моторолери, <b>В</b>-легковий автомобіль, <b>Е</b>-причіп до вантажного автомобіля, <b>F</b>-причіп до легкового автомобіля.<br />&nbsp;';
                break;

            case '5':
                type_2_desc = '<b>Застрахованим вважається Страхувальник, який експлуатує наступні ТЗ:</b><br /><b>F</b>-причіп до легкового автомобіля.<br /><br />&nbsp;';
                break;

            case '6':
            case '7':
                type_2_desc = '<b>Застрахованим вважається Страхувальник, який експлуатує наступні ТЗ:</b><br /><b>А</b>-мотоцикли та моторолери, <b>В</b>-легковий автомобіль, <b>С</b>-вантажні автомобілі, <b>D</b>-автобусами, <b>Е</b>-причіп до вантажного автомобіля, <b>F</b>-причіп до легкового автомобіля.';
                break;

            case '8':
            case '9':
                type_2_desc = '<b>Застрахованим вважається Страхувальник, який експлуатує наступні ТЗ:</b><br /><b>А</b>-мотоцикли та моторолери, <b>В</b>-легковий автомобіль, <b>С</b>-вантажні автомобілі, <b>Е</b>-причіп до вантажного автомобіля, <b>F</b>-причіп до легкового автомобіля.<br />&nbsp;';
                break;

            case '10':
                type_2_desc = '<b>Застрахованим вважається Страхувальник, який експлуатує наступні ТЗ:</b><br /><b>А</b>-мотоцикли та моторолери, <b>Е</b>-причіп до вантажного автомобіля, <b>F</b>-причіп до легкового автомобіля.<br />&nbsp;';
                break;

            case '11':
            case '12':
                type_2_desc = '<b>Застрахованим вважається Страхувальник, який експлуатує наступні ТЗ:</b><br /><b>А</b>-мотоцикли та моторолери, <b>F</b>-причіп до легкового автомобіля.<br />&nbsp;';
                break;

            default:
                type_2_desc = '';
        }
        
    }
    else {
        type_2_desc= '';
    }

    div_desc.innerHTML = type_2_desc;
}

function calc()
{
    //F = bazis * (k1 * k2 * k3 * k4 * k5 * k6 * k7) * BM;
    //F = numberFormt(F);

    F1 = bazis  * k1 * k2 * k3 * k4;
    F1 = Math.round(F1 * 100) / 100;

    MIN = bazis * k1 * 0.5;
    MIN = Math.round(MIN * 100) / 100;

    MAX = bazis * k1 * 3;
    MAX = Math.round(MAX * 100) / 100;

    while (F1 < MIN) {
        // про просьбам трудящихся...
        if (contractType == 3 && ownerType == 2 && territory == 5 && experience == 4) {
            k4 = 0.91;
        }
        else {
            k4 = 1;
        }

        F1 = bazis * k1 * k2 * k3 * k4;
        F1 = Math.round(F1 * 100) / 100;
    }

    F = bazis * (k1 * k2 * k3 * k4 * k5 * k6 * k7) * BM;

    if (document.getElementById('pensioner').checked) {
        F = F / 2;
		if (F<=103.48&& document.getElementById('vehicle_type').value!=5)	{
		F=103.48;
		}
    }

    F = numberFormt(F);

/*
IF (F1 <= MAX ) THEN { F = BASE * (K1*K2*K3*K4*K5*K6*K7)*BM;}
                ELSE { K2 ???????? ???, ??? ???????????? ?????}
*/

    //alert("F1 = "+F1+"\nMIN = "+MIN+"\nMAX = "+MAX);
}

function init()
{
    setContractType();
    setVehicleType();
    setTerritory();
    setOwnerType();
    setExperience();
    setNumDrivers();
    setFraud();
    setPeriod();

    setKoefficients();
    calc();
    changeDivs();
}




// служебная функция - определяет значение выбранного элемента radio
function getRadioValue(radioObject)
{
    var value = false;
 
    for (i=0; i<radioObject.length; i++) {
        if (radioObject[i].checked) {
            value = radioObject[i].value;
            break;
        }
    }

    return value;
}


function numberFormt(amount)
{
    var numStr = round(amount) + '';

    numStr = (numStr.charAt(0) == '.' ? '0' + numStr : numStr);

    if (numStr.charAt(numStr.length - 3) == '.') {
        return numStr;
    }
    else if (numStr.charAt(numStr.length - 2) == '.') {
        return numStr + '0';
    }
    else {
        return numStr + '.00';
    }
}


function round(number, decPlace)
{
    decPlace = (!decPlace ? 2 : decPlace);

    return Math.round(number * Math.pow(10, decPlace)) / Math.pow(10, decPlace);
}

init();

