(function ($) {
  Drupal.behaviors.potrebcalculon = function(context) {
    //$('#edit-summa').attr('disabled','disabled');
    $('.ui-slider').click(function(){
        $(this).find('.slider-left').css('width',$(this).find('.ui-slider-handle').css('left'));
    });
    $('#potreb-calculon-form label').each(function(){
        $(this).html($(this).html().replace(':',''));
    });
    var max_summa_default = parseInt($('.summa_max').html().replace(/\s/g,''));
    var summa = $('#edit-summa').val().replace(/\s/g,'');
    $('#summa_slider').slider({
        min: parseInt($('.summa_min').html().replace(/\s/g,'')),
        max: parseInt($('.summa_max').html().replace(/\s/g,'')),
        value: parseInt(summa),
        step: parseInt($('#edit-summa-step').val()),
        slide: function (event, ui) {
            $('#edit-summa').val(number_format(ui.value, {decimals: 0, thousands_sep: " "}));
            //console.log('value '+ui.value+' step'+$(this).slider('option', 'step')+' edit-summa-value'+parseInt($('#edit-summa').val()));
            calculate_budget();
            $(this).find('.slider-left').css('width',$(this).find('.ui-slider-handle').css('left'));
        },
        change: function (event, ui) {
            $(this).find('.slider-left').css('width',$(this).find('.ui-slider-handle').css('left'));
        }
    }).mousedown(function(){
        $(this).find('.slider-left').css('width',$(this).find('.ui-slider-handle').css('left'));
    });

    $('#summa_slider').append('<div class="slider-left"> </div>');
    $('#summa_slider .slider-left').css('width',$('#summa_slider .ui-slider-handle').css('left'));

    //$('#edit-srok').attr('disabled','disabled');
    $('#srok_slider').slider({
        min: parseInt($('.srok_min').html().replace(/\s/g,'')),
        max: parseInt($('.srok_max').html().replace(/\s/g,'')),
        value: parseInt($('#edit-srok').val()),
        step: parseInt($('#edit-srok-step').val()),
        slide: function (event, ui) {
            $('#edit-srok').val(ui.value);
            //console.log('value '+ui.value+' step'+$(this).slider('option', 'step')+' edit-srok-value'+parseInt($('#edit-srok').val()));
            calculate_budget();
            $(this).find('.slider-left').css('width',$(this).find('.ui-slider-handle').css('left'));
        },
        change: function (event, ui) {
            $(this).find('.slider-left').css('width',$(this).find('.ui-slider-handle').css('left'));
        }
    }).mousedown(function(){
        $(this).find('.slider-left').css('width',$(this).find('.ui-slider-handle').css('left'));
    });
    $('#srok_slider').append('<div class="slider-left"> </div>');
    $('#srok_slider .slider-left').css('width',$('#srok_slider .ui-slider-handle').css('left'));

    $('.summa_min').html(number_format($('.summa_min').html().replace(/\s/g,''), {decimals: 0, thousands_sep: " "}));
    $('.summa_max').html(number_format($('.summa_max').html().replace(/\s/g,''), {decimals: 0, thousands_sep: " "}));
    //$('.srok_min').html(number_format($('.srok_min').html().replace(/\s/g,''), {decimals: 0, thousands_sep: " "}));
    //$('.srok_max').html(number_format($('.srok_max').html().replace(/\s/g,''), {decimals: 0, thousands_sep: " "}));
    $('#edit-summa').val(number_format($('#edit-summa').val().replace(/\s/g,''), {decimals: 0, thousands_sep: " "}));
    //$('#edit-srok').val(number_format($('#edit-srok').val().replace(/\s/g,''), {decimals: 0, thousands_sep: " "}));

    $('#potreb-calculon-form .form-submit').hide();
    $('#potreb-calculon-form').submit(function(){
        return false;
    });
    calculate_budget();

    $('#edit-srok').change(function(){
        if (parseInt($('#edit-srok').val()) < parseInt($('.srok_min').html())){
            $('#edit-srok').val($('.srok_min').html());
        }
        if (parseInt($('#edit-srok').val()) > parseInt($('.srok_max').html())){
            $('#edit-srok').val($('.srok_max').html());
        }
        $('#srok_slider').slider({value:$('#edit-srok').val()});
        calculate_budget();
    });
    $('#edit-summa').change(function(){
        var summa = $('#edit-summa').val().replace(/\s/g,'');
        var summa_min = $('.summa_min').html().replace(/\s/g,'');
        var summa_max = $('.summa_max').html().replace(/\s/g,'');
        summa = parseInt(summa);
        summa_min = parseInt(summa_min);
        summa_max = parseInt(summa_max);
        if (summa < summa_min){
            $('#edit-summa').val(summa_min);
        }
        if (summa > summa_max){
            $('#edit-summa').val(summa_max);
        }
        $('#summa_slider').slider({value:$('#edit-summa').val()});
        calculate_budget();
        $('#edit-summa').val(number_format($('#edit-summa').val(), {decimals: 0, thousands_sep: " "}));
    });

    $('.form-item input').change(function(){
        calculate_budget();
    });

    function calculate_budget(){
        var summa = $('#edit-summa').val().replace(/\s/g,'');
        var summa = parseInt(summa);
        var srok = parseInt($('#edit-srok').val());
        var summa_currency = $('.summa_currency').text();
        var stavka = $('#edit-stavka').val();

        // проблема тут в том, что раньше были вопросы о гос. служащих и недвижимости, а теперь их нет.
        // Сумма меньше 150001?
        if (summa < 150001){
            // Если да, то:
            // Кредитовались ранее?
            if ($('#edit-hasoldcredit-yes').is(":checked")){
                stavka = $('#edit-lt150hascredit').val();
            } else {
                // Партнёр?
                if ($('#edit-ispartner-yes').is(":checked")){
                    stavka = $('#edit-lt150ispartner').val();
                } else {
                    stavka = $('#edit-lt150isnotpartner').val();
                }
            }
        } else {
            // Если нет:
            if ($('#edit-spravkaopodtvergdenii-no').is(":checked")){
                // без подтверждения - сумма не более 750000
                $('.summa_max').html(number_format(750000, {decimals: 0, thousands_sep: " "}));
                $('#summa_slider').slider("option", "max", 750000);
                if (summa > 750000){
                    // Рассчитываем с суммой = 750000
                    summa = 750000;
                    $('#summa_slider').slider("option", "value", 750000);
                }
                $('#summa_slider').slider("option", "value", $('#summa_slider').slider("option", "value"));

                // Гос. служащий? (нет такого вопроса)
                // да - 17.95 (нет такого вопроса)
                // нет: (нет такого вопроса, берём за эталонный ответ)
                // кредитовались ранее?
                if ($('#edit-hasoldcredit-yes').is(":checked")){
                    // да - 18.45
                    stavka = $('#edit-hasoldcredityesstavka').val(); //18.45;
                } else {
                    // нет:
                    // партнёр?
                    if ($('#edit-ispartner-yes').is(":checked")){
                        // да - 18.45
                        stavka = $('#edit-ispartnernospravkastavka').val(); //18.45;
                    } else {
                        // нет - 20.95
                        stavka = $('#edit-isnopartnernospravkastavka').val(); //20.95;
                    }
                }
            } else {
                $('.summa_max').html(number_format(max_summa_default, {decimals: 0, thousands_sep: " "}));
                $('#summa_slider').slider("option", "max", max_summa_default);
                $('#summa_slider').slider("option", "value", $('#summa_slider').slider("option", "value"));
                // Гос. служащий? (нет такого вопроса)
                // если да, то 17.95 (нет такого вопроса)
                // если нет: (нет такого вопроса, берём за эталонный ответ)
                // кредитовались ранее?
                if ($('#edit-hasoldcredit-yes').is(":checked")){
                    // если да, то 18.45
                    stavka = $('#edit-hasoldcredityesstavka').val(); //18.45;
                    //stavka = 18.45;
                } else {
                // если нет:
                    // сумма - меньше 750000?
                    if (summa > 750000){
                    // если да:
                        // партнёр?
                        if ($('#edit-ispartner-yes').is(":checked")){
                            // да - 18,45
                            stavka = $('#edit-ispartnerspravkastavka').val(); //18.45;
                        } else {
                            stavka = $('#edit-isnopartnerspravkastavka').val(); //19.45;
                            // нет - 19,45
                        }
                    } else {
                    // если нет:
                        // можете предоставить недвижимость? (нет такого вопроса)
                        // если да - 15.95 (нет такого вопроса)
                        // если нет: (нет такого вопроса, берём за эталонный ответ)
                        // партнёр?
                        if ($('#edit-ispartner-yes').is(":checked")){
                            // да - 18.45
                            stavka = $('#edit-ispartnerspravkastavka').val(); //18.45;
                        } else {
                            stavka = $('#edit-isnopartnerspravkastavka').val(); //19.45;
                            // нет - 19.45
                        }
                    }
                }
            }
        }


        var result = ussurybank_calc_loan_calculate(srok,summa,stavka,false);
        var percent_summ = (result['percent_summ']);
        var total_pay = summa + percent_summ;
        var ejemesachny = total_pay / srok; // todo

        // Годовая переплата - считается за 5 лет, вне зависимости от срока кредитования. Идиотизм.
        //var godovoy = (((total_pay - summa) / srok) * 12) / 1000;
        //var godovoy = (((total_pay - summa) * 100) / total_pay) / 5
        //var godovoy = result.stats[3];;
        // Пиздец. Очередной. Годовая переплата ставится без учёта каких-либо формул.
        if (stavka == 15.95) var godovoy = 8;
        if (stavka == 16.45) var godovoy = 8.3;
        if (stavka == 16.95) var godovoy = 8.6;
        if (stavka == 17.95) var godovoy = 9;
        if (stavka == 18.45) var godovoy = 9.4;
        if (stavka == 18.50) var godovoy = 9.4;
        if (stavka == 19.45) var godovoy = 9.9;
        if (stavka == 19.95) var godovoy = 10;
        if (stavka == 20.95) var godovoy = 10.7;
        if (stavka == 22.45) var godovoy = 11;
        if (stavka == 24.95) var godovoy = 12.7;

        $('.calculate_platej .summ').html(number_format(ejemesachny.toFixed(0), {decimals: 0, thousands_sep: " "})+' '+summa_currency);

        $('.calculate_results .summ .value').html(number_format(summa, {decimals: 0, thousands_sep: " "}));
        $('.calculate_results .stavka .value').html(stavka);
        $('.calculate_results .year_pay .value').html(godovoy.toFixed(2));
        $('.calculate_results .total_pay .value').html(number_format(total_pay.toFixed(0), {decimals: 0, thousands_sep: " "}));
        $('.calculate_platej .download a').attr('href','/calculators/download/'+srok+'/'+summa+'/'+stavka+'/false');
        return true;
    };

    /**
    * Я заебался вычищать эту функцию... Толян, ну нахер надо было писать эту хрень с учётом високосности года? (с) Beastie
    */
    function ussurybank_calc_loan_calculate(srok, summa, stavka, annuitet) {


        // Считаем суммы оплаты
        // Процент за месяц равен остатку долга, умноженному на количество дней в месяце (+ количество дней до следующего числа следующего месяца), поделённое на количество дней в году и умноженное на (процентную ставку, поделённую на 100)
        // При кредите на 10 месяцев, 100 000, при ставке 10%, формула расчёта процентов такая:
        // (остаток долга) * 32 / 365 * 0.1
        //
        // В первый месяц оплата по кредиту не ведётся. Только по процентам.
        //

        // переменные (суммы)
        var payment_summ         = 0;               // сумма платежей
        var percent_summ         = 0;               // сумма процентов
        var total_summ           = 0;               // общая сумма
        var overpayment_in_year  = 0;               // переплата за год
        var valuation_summ       = 0;               // сумма оценки залога
        var other_payments_summ  = 0;               // сумма прочих платежей
        var fisrt_payment        = 0;               // определение первого взноса
        var total_percent_payment= 0;               // Платёж по процентам

        // исходные данные
        var start_date           = new Date();              // дата выдачи кредита
        var current_date         = start_date;              // Текущая дата - дата выдачи кредита
        var stats                = new Array();             // вывод
        var result               = new Array();             // вывод
        var day                  = current_date.getDate();  // текущая дата
        result['total_payment'] = 0;

        // остаток ссудного долга
        remaining_debt = summa;

        // Средне-месячный платёж
        var middle_monthly_payment = (summa * (stavka / 100 / 12) / (1 - (1 / Math.pow((1 + (stavka / 100 / 12)), (srok - 1))))).toFixed(0);

        // цикл по месяцам
        for (var i = 1; i <= srok; i++){


            // Вычисляем платёж по процентам...
            payment_year = current_date.getYear(); // текущий год

            // Количество дней в текущем году
            current_month_year_days_count = 365;
            if (payment_year / 4 - (payment_year / 4).toFixed(0) == 0) current_month_year_days_count = 366;

            // Количество дней в следующем году
            next_month = new Date(current_date.getYear(), current_date.getMonth()+1,current_date.getDate());
            next_month_year = next_month.getYear();
            next_month_year_days_count = 365;
            if (next_month_year / 4 - (next_month_year / 4).toFixed(0) == 0) next_month_year_days_count = 366;

            // Количество дней в текущем месяце
            if (i == 1) current_month_days_count = 32 - new Date(current_date.getYear(), current_date.getMonth(), 32).getDate() - day;
            else current_month_days_count = 32 - new Date(current_date.getYear(), current_date.getMonth(), 32).getDate() - day - 1;

            // Количество дней в следующем месяце
            next_month_days_count = day + 1;

            // Считаем оплату по процентам
            percent_payment = remaining_debt * current_month_days_count / current_month_year_days_count * (stavka / 100);
            percent_payment = percent_payment + (remaining_debt * next_month_days_count / next_month_year_days_count * (stavka / 100));
            percent_payment = parseInt((percent_payment).toFixed(0));

            // Вычисляем платёж по основному долгу...
            // Если это первый месяц, то платим 0 по основному долгу
            if (i == 1){
                debt_payment = 0;
            } else {
                // Если это последний месяц, то платим остаток
                if (i == srok){
                    debt_payment = remaining_debt; // остаток
                } else {
                    // Если нет, то платим (сумму, поделённую на количество месяцев - 1, так как первый месяц не платим)
                    //debt_payment = (summa / (srok - 1)).toFixed(0);
                    // Отмена...
                    // Платим средне-месячный минус проценты.
                    debt_payment = middle_monthly_payment - percent_payment;
                }
            }


            remaining_debt = remaining_debt - debt_payment; // остаток долга
            stats[i] = new Array();
            stats[i]['current_month_days_count'] = current_month_days_count; // Количество дней в текущем месяце
            stats[i]['next_month_days_count'] = next_month_days_count; // Количество дней в следующем месяце
            stats[i]['debt_payment'] = parseInt(debt_payment); // сколько платить по кредиту
            stats[i]['percent_payment'] = percent_payment; // сколько платить по процентам
            stats[i]['next_month_remaining_debt'] = remaining_debt; // остаток долга
            stats[i]['total_payment'] = parseInt(percent_payment )+ parseInt(debt_payment); // итого за месяц
            result['total_payment'] = parseInt(result['total_payment']) + parseInt(percent_payment) + parseInt(debt_payment);
            current_date = next_month;

        }

        result['percent_summ'] = result['total_payment'] - summa;
        result['stats'] = stats;
        console.log(result);

        return result;
     }

    function number_format(_number, _cfg){
      function obj_merge(obj_first, obj_second){
        var obj_return = {};
        for (key in obj_first){
          if (typeof obj_second[key] !== 'undefined') obj_return[key] = obj_second[key];
          else obj_return[key] = obj_first[key];
          }
        return obj_return;
      }
      function thousands_sep(_num, _sep){
        if (_num.length <= 3) return _num;
        var _count = _num.length;
        var _num_parser = '';
        var _count_digits = 0;
        for (var _p = (_count - 1); _p >= 0; _p--){
          var _num_digit = _num.substr(_p, 1);
          if (_count_digits % 3 == 0 && _count_digits != 0 && !isNaN(parseFloat(_num_digit))) _num_parser = _sep + _num_parser;
          _num_parser = _num_digit + _num_parser;
          _count_digits++;
          }
        return _num_parser;
      }
      if (typeof _number !== 'number'){
        _number = parseFloat(_number);
        if (isNaN(_number)) return false;
      }
      var _cfg_default = {before: '', after: '', decimals: 2, dec_point: '.', thousands_sep: ','};
      if (_cfg && typeof _cfg === 'object'){
        _cfg = obj_merge(_cfg_default, _cfg);
      }
      else _cfg = _cfg_default;
      _number = _number.toFixed(_cfg.decimals);
      if(_number.indexOf('.') != -1){
        var _number_arr = _number.split('.');
        var _number = thousands_sep(_number_arr[0], _cfg.thousands_sep) + _cfg.dec_point + _number_arr[1];
      }
      else var _number = thousands_sep(_number, _cfg.thousands_sep);
      return _cfg.before + _number + _cfg.after;
    }

  }; // Drupal.behaviors.budgetcalculon
}) (jQuery);
