var calc = {
	fast_more: function() {
		this.ui();
        
		$('.calc_but_g').click(function(){
            if ($(this).hasClass("calc_but") || !calc.validate())
                return false;
            
            calc.makeCalc.Fast_More();
            calc.showResults($(this));
            return false;
        });
	},
    auto: function() {
		this.ui(true);
        
		$('.calc_but_g').click(function(){
            if ($(this).hasClass("calc_but") || !calc.validate())
                return false;
            
            calc.makeCalc.Auto();
            calc.showResults($(this));
            return false;
        });
	},
    validate: function() {
        var form = $('#calculator');
        var haveError = false;
        
        form.find('.error-empty-field').removeClass('error-empty-field');
        form.find('input.required').each(function(){
            if ($.trim($(this).val()) == '') {
                $(this).addClass('error-empty-field');
                haveError = true;
            }
        });
        form.find('ul.required').each(function(){
            if (!$(this).find('input:checked').length) {
                $(this).find('input').addClass('error-empty-field');
                haveError = true;
            }
        });
        if (!haveError) 
            return true;
        
        alert('Вы не заполнили форму');
        
        return false;
    },
    showResults: function(button, hideResult)
    {
        if (!hideResult && button.hasClass("calc_but"))
            return;
        
        if (hideResult && !button.hasClass("calc_but"))
            return;
        
        if (!button.hasClass("calc_but"))
            $('#calculator').ajaxSubmit({url:'/udata/data/send_mail/'});
        
        button.toggleClass("calc_but");
        button.next().toggle();
        $('.online').toggle();
        $("#grafik").toggle();
	},
	ui: function(is_auto) {
        var calcBtn = $('.calc_but_g');
        var calcSK = function()
        {
            $('#sk-calc').text(parseInt($("#get_sk").val()) - parseInt($("#get_pv").val()) + ($('#strahovka').is(':checked') ?  parseInt($("#get_ss").val()) : 0))
        }
        
        var calcSK2 = function()
        {
            var sk = parseInt($("#get_sk").val());
            var pvS = $("#set_pv");
            var pvG = $("#get_pv");
            pvS.slider("option", 'min', sk*0.1);
            pvS.slider("option", 'max', sk*0.9);
            pvS.slider('value', sk*0.1);
            
            $('#get_pv_min').text(sk*0.1);
            $('#get_pv_max').text(sk*0.9);
            pvG.val(pvS.slider('value'));
            
            $('#sk-calc').text(parseInt(sk) - parseInt(pvG.val()) + ($('#strahovka').is(':checked') ?  parseInt($("#get_ss").val()) : 0))
        }
        
        
        $('#calculator').submit(function(){
            calc.showResults(calcBtn);
            return false;
        });
        
        enableSlider($("#set_pv"),   $("#get_pv"),   calcBtn, 700000, 6300000, 1000, 700000, calcSK);
        enableSlider($("#set_ed"),   $("#get_ed"),   calcBtn, 10000, 600000, 100);
        enableSlider($("#set_ss"),   $("#get_ss"),   calcBtn, 100, 600000, 100, 100, calcSK);
        
        if (is_auto){
            enableSlider($("#set_sk"),   $("#get_sk"),   calcBtn, 60000, 7000000, 1000, 3000000, calcSK2);
            enableSlider($("#set_srok"), $("#get_srok"), calcBtn, 12, 36, 12);
        }
        else{
            if ($("#get_sk").hasClass('is_more'))
                enableSlider($("#set_sk"),   $("#get_sk"),   calcBtn, 30000, 300000, 100, 150000);
            else
                enableSlider($("#set_sk"),   $("#get_sk"),   calcBtn, 30000, 150000, 100, 80000);
            enableSlider($("#set_srok"), $("#get_srok"), calcBtn, 3, 36, 3);
        }
        
        $('#strahovka').change(function(){
            if ($(this).is(':checked')) {
                $("#get_ss").removeAttr('disabled');
                $("#set_ss").slider('enable');
            } else {
                $("#get_ss").attr('disabled', 'disabled');
                $("#set_ss").slider('disable');
            }
            calcSK();
        }).change();
        
        $('form input:radio').change(function(){ calc.showResults(calcBtn, true); });
	},
    makeCalc: {
        Fast_More: function() {
            var self = this;
            var KARTA = $('#karta_yes:checked').length;
            var SK = $('#get_sk').val();
            var SROK = $('#get_srok').val();
            
            // Рассчитываемые параметры
            var PS = (KARTA) ? 17 : ( SROK <= 6) ? 24 : 25 ;
            
            if (!$('#karta_yes').length)
                PS = 19;
            
            var EP = self.calcEP(SK, SROK, PS);
            $('#calc_ep').text(EP);
            $('#calc_sk').text(SK);
            $('#calc_ps').text(PS);
            $('#calc_dnk').text(calc.getDate());
            
            $('#form_ep').val(EP);
            $('#form_ps').val(PS);
            $('#form_dnk').val(calc.getDate());
            
            self.setGP(0, SK, SROK, EP, PS, SK);
            
            //$('#form_gp').val($('#calc_gp').html());
        },
        calcEP: function(SK, SROK, PS) {
            return ((SK * PS / 1200) / (1 - ( 1 / Math.pow((1 + (PS / 1200)), SROK) ) )).toFixed(2);
        },
        setGP: function(currMounth, SK, SROK, EP, PS, OST_Z, RES)
        {
            RES = RES || {DP: 0, POG_P: 0, POG_OD: 0};
            
            if (currMounth > SROK)
                return;
            
            var today = new Date();
            today.setFullYear(
                (today.getFullYear() + Math.floor((today.getMonth() + currMounth) / 12)),
                ((today.getMonth() + currMounth) % 12)
            );
            
            var POG_P   = 0;
            var POG_OD  = 0;
            var DP      = (SK*-1);
            
            if (currMounth > 0) {
                DP      = EP;
                POG_P   = (OST_Z * PS / 100 * today.getDaysInPrevMonth() / today.getDaysInYear()).toFixed(2);
                POG_OD  = (DP - POG_P).toFixed(2);
                OST_Z   = (OST_Z - POG_OD).toFixed(2);
                
                RES.DP      += parseFloat(DP);
                RES.POG_P   += parseFloat(POG_P);
                RES.POG_OD  += parseFloat(POG_OD);
            } else
                $('#calc_gp').empty();
            
            calc.setGPRow(calc.getDate(today), DP, POG_P, POG_OD, 0.00, ( currMounth == SROK ? 0 : OST_Z));
            
            this.setGP(currMounth+1, SK, SROK, EP, PS, OST_Z, RES);
            
            if (currMounth == SROK)
                calc.setGPRow("Итого:", RES.DP.toFixed(2), RES.POG_P.toFixed(2), RES.POG_OD.toFixed(2), 0.00, '');
        },
        Auto: function()
        {
            var self = this;
            var tmpVA = $('#vid_avtokreditovaniya input');
            var SK = parseInt($('#get_sk').val());
            var SKSource = parseInt($('#get_sk').val());
            var SROK = $('#get_srok').val();
            var VA = tmpVA.filter(':checked').val();
            var PV = parseInt($('#get_pv').val());
            var ED = $('#get_ed').val();
            var VS = $('#strahovka:checked').length;
            var SS = (VS && $('#get_ss').val()) || 0;
            var PS = 0.00;
            
            // Рассчитываемые параметры
            SK = SK - PV + ((VS) ? parseInt(SS) : 0);
            var PV_P = PV * 100 / SKSource;
            
            if (tmpVA.filter(':eq(0):checked').length)
                PS = (PV_P < 30) ? 15.00 : 14.50 ;
            else if (tmpVA.filter(':eq(1):checked').length)
                PS = (PV_P < 30) ? 14.00 : ((PV_P < 50) ? 13.50 : 13.10 );
            else if (tmpVA.filter(':eq(2):checked').length)
                PS = (PV_P < 30) ? 15.50 : 15.00 ;
            
            var EP = self.calcEP(SK, SROK, PS);
            
            $('#calc_ep').text(EP);
            $('#calc_sa').text(SKSource);
            $('#calc_sk').text(SK);
            $('#calc_ps').text(PS);
            $('#calc_dnk').text(calc.getDate());
            
            $('#calc_va').text(VA);
            $('#calc_pv').text(PV);
            $('#calc_ed').text(ED);
            $('#calc_ss').text(SS);
            
            $('#form_ep').val(EP);
            $('#form_ps').val(PS);
            $('#form_dnk').val(calc.getDate());
            
            self.setGP(0, SK, SROK, EP, PS, SK);
            
            //$('#form_gp').val($('#calc_gp').html());
        }
    },
    setGPRow: function(date, DP, POG_P, POG_OD, KOM, OST_Z)
    {
        var ret = "<tr>";
            ret += "<td>" + date + "</td>";
            ret += "<td>" + DP + "</td>";
            ret += "<td>" + POG_P + "</td>";
            ret += "<td>" + POG_OD + "</td>";
            ret += "<td>" + KOM + "</td>";
            ret += "<td>" + OST_Z + "</td>";
        ret += "</tr>";
        
        $('#calc_gp').append(ret);
    },
    getDate: function(date) {
        date = date || new Date();
        return date.getDate() + "." + (date.getMonth() > 8 ? (date.getMonth() + 1) : ('0' + (date.getMonth() + 1))) + "." + date.getFullYear();
    },
    DaysInPrevMonth: [31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30]
}

function enableSlider(source, dest, button, min, max, step, value, callback)
{
    if (!(source.length && dest.length))
        return;
    
    source.slider({
        range: "min",
        min: min,
        max: max,
        step: step || 1,
        value: value || min,
        slide: function( event, ui ) {
            dest.val( ui.value );
            calc.showResults(button, true);
            if (typeof callback == 'function') callback();
        }
    });
    dest.change(function(){
        var min = parseInt(source.slider("option", 'min'));
        var max = parseInt(source.slider("option", 'max'));
        
        var val = parseInt($(this).val()) || 0;
        if (val < min && $(this).val(min))
            val = min;
        
        if (val > max && $(this).val(max))
            val = max;
        
        source.slider("value", val);
        calc.showResults(button, true);
        
        if (typeof callback == 'function') callback();
    });
    dest.val(source.slider("value"));
    if (typeof callback == 'function') callback();
}

function CalcFastMore() {
    $(document).ready(function() { calc.fast_more(); });
}
function CalcAuto() {
    $(document).ready(function() { calc.auto(); });
}
function log(data)
{
    console.log(data);
}

Date.prototype.isLeapYear = function() {
    var y = this.getFullYear();
    return y % 4 == 0 && y % 100 != 0 || y % 400 == 0;
};
Date.prototype.getDaysInYear = function() {
    return this.isLeapYear() ? 366 : 365;
};
Date.prototype.getDaysInPrevMonth = function() {
    return arguments.callee[this.isLeapYear() ? 'L' : 'R'][(this.getMonth() == 0 ? 11 : this.getMonth()-1 )];
};

Date.prototype.getDaysInPrevMonth.R = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
Date.prototype.getDaysInPrevMonth.L = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

/*
var calc = {
	fast_more: function() {
		this.ui();
        
		$('.calc_but_g').click(function(){
            if ($(this).hasClass("calc_but") || !calc.validate())
                return false;
            
            calc.makeCalc.Fast_More();
            calc.showResults($(this));
            return false;
        });
	},
    auto: function() {
		this.ui(true);
        
		$('.calc_but_g').click(function(){
            if ($(this).hasClass("calc_but") || !calc.validate())
                return false;
            
            calc.makeCalc.Auto();
            calc.showResults($(this));
            return false;
        });
	},
    validate: function() {
        var form = $('#calculator');
        var haveError = false;
        
        form.find('.error-empty-field').removeClass('error-empty-field');
        form.find('input.required').each(function(){
            if ($.trim($(this).val()) == '') {
                $(this).addClass('error-empty-field');
                haveError = true;
            }
        });
        form.find('ul.required').each(function(){
            if (!$(this).find('input:checked').length) {
                $(this).find('input').addClass('error-empty-field');
                haveError = true;
            }
        });
        if (!haveError) 
            return true;
        
        alert('Вы не заполнили форму');
        
        return false;
    },
    showResults: function(button, hideResult)
    {
        if (!hideResult && button.hasClass("calc_but"))
            return;
        
        if (hideResult && !button.hasClass("calc_but"))
            return;
        
        if (!button.hasClass("calc_but"))
            $('#calculator').ajaxSubmit({url:'/udata/data/send_mail/'});
        
        button.toggleClass("calc_but");
        button.next().toggle();
        $('.online').toggle();
        $("#grafik").toggle();
	},
	ui: function(is_auto) {
        var calcBtn = $('.calc_but_g');
        
        $('#calculator').submit(function(){
            calc.showResults(calcBtn);
            return false;
        });
        
        if (is_auto){
            enableSlider($("#set_sk"),   $("#get_sk"),   calcBtn, 60000, 150000, 100, 80000);
            enableSlider($("#set_srok"), $("#get_srok"), calcBtn, 6, 36, 6);
        }
        else{
            enableSlider($("#set_sk"),   $("#get_sk"),   calcBtn, 30000, 150000, 100, 80000);
            enableSlider($("#set_srok"), $("#get_srok"), calcBtn, 3, 36, 3);
        }
        
        enableSlider($("#set_pv"),   $("#get_pv"),   calcBtn, 10, 99);
        enableSlider($("#set_ed"),   $("#get_ed"),   calcBtn, 10000, 600000, 100);
        enableSlider($("#set_ss"),   $("#get_ss"),   calcBtn, 100, 600000, 100);
        
        $('#strahovka').change(function(){
            if ($(this).is(':checked')) {
                $("#get_ss").removeAttr('disabled');
                $("#set_ss").slider('enable');
            } else {
                $("#get_ss").attr('disabled', 'disabled');
                $("#set_ss").slider('disable');
            }
        }).change();
        
        $('form input:radio').change(function(){ calc.showResults(calcBtn, true); });
	},
    makeCalc: {
        Fast_More: function() {
            var self = this;
            var KARTA = $('#karta_yes:checked').length;
            var SK = $('#get_sk').val();
            var SROK = $('#get_srok').val();
            
            // Рассчитываемые параметры
            var PS = (KARTA) ? 17 : ( SROK <= 6) ? 24 : 25 ;
            
            if (!$('#karta_yes').length)
                PS = 19;
            
            var EP = self.calcEP(SK, SROK, PS);
            $('#calc_ep').text(EP);
            $('#calc_sk').text(SK);
            $('#calc_ps').text(PS);
            $('#calc_dnk').text(calc.getDate());
            
            $('#form_ep').val(EP);
            $('#form_ps').val(PS);
            $('#form_dnk').val(calc.getDate());
            
            self.setGP(0, SK, SROK, EP, PS, SK);
            
            //$('#form_gp').val($('#calc_gp').html());
        },
        calcEP: function(SK, SROK, PS) {
            return ((SK * PS / 1200) / (1 - ( 1 / Math.pow((1 + (PS / 1200)), SROK) ) )).toFixed(2);
        },
        setGP: function(currMounth, SK, SROK, EP, PS, OST_Z, RES)
        {
            RES = RES || {DP: 0, POG_P: 0, POG_OD: 0};
            
            if (currMounth > SROK)
                return;
            
            var today = new Date();
            today.setFullYear(
                (today.getFullYear() + Math.floor((today.getMonth() + currMounth) / 12)),
                ((today.getMonth() + currMounth) % 12)
            );
            
            var POG_P   = 0;
            var POG_OD  = 0;
            var DP      = (SK*-1);
            
            if (currMounth > 0) {
                DP      = EP;
                POG_P   = (OST_Z * PS / 100 * (calc.DaysInPrevMonth[today.getMonth()]) / 365).toFixed(2);
                POG_OD  = (DP - POG_P).toFixed(2);
                OST_Z   = (OST_Z - POG_OD).toFixed(2);
                
                RES.DP      += parseFloat(DP);
                RES.POG_P   += parseFloat(POG_P);
                RES.POG_OD  += parseFloat(POG_OD);
            } else
                $('#calc_gp').empty();
            
            calc.setGPRow(calc.getDate(today), DP, POG_P, POG_OD, 0.00, OST_Z);
            
            this.setGP(currMounth+1, SK, SROK, EP, PS, OST_Z, RES);
            
            if (currMounth == SROK)
                calc.setGPRow("Итого:", RES.DP.toFixed(2), RES.POG_P.toFixed(2), RES.POG_OD.toFixed(2), 0.00, 0.00);
        },
        Auto: function()
        {
            var self = this;
            var tmpVA = $('#vid_avtokreditovaniya input');
            var SK = $('#get_sk').val();
            var SROK = $('#get_srok').val();
            var VA = tmpVA.filter(':checked').val();
            var PV = $('#get_pv').val();
            var ED = $('#get_ed').val();
            var VS = $('#strahovka:checked').length;
            var SS = (VS && $('#get_ss').val()) || 0;
            var PS = 0.00;
            
            // Рассчитываемые параметры
            SK = (VS) ? parseInt(SK) + parseInt(SS) : SK;
            var PV_P = PV / (SK + PV) * 100;
            
            if (tmpVA.filter(':eq(0):checked').length)
                PS = (PV < 30) ? 15.00 : 14.50 ;
            else if (tmpVA.filter(':eq(1):checked').length)
                PS = (PV < 30) ? 14.00 : ((PV < 50) ? 13.50 : 13.10 );
            else if (tmpVA.filter(':eq(2):checked').length)
                PS = (PV < 30) ? 15.50 : 15.00 ;
            
            var EP = self.calcEP(SK, SROK, PS);
            
            $('#calc_ep').text(EP);
            $('#calc_sk').text(SK);
            $('#calc_ps').text(PS);
            $('#calc_dnk').text(calc.getDate());
            
            $('#calc_va').text(VA);
            $('#calc_pv').text(PV);
            $('#calc_ed').text(ED);
            $('#calc_ss').text(SS);
            
            $('#form_ep').val(EP);
            $('#form_ps').val(PS);
            $('#form_dnk').val(calc.getDate());
            
            self.setGP(0, SK, SROK, EP, PS, SK);
            
            //$('#form_gp').val($('#calc_gp').html());
        }
    },
    setGPRow: function(date, DP, POG_P, POG_OD, KOM, OST_Z)
    {
        var ret = "<tr>";
            ret += "<td>" + date + "</td>";
            ret += "<td>" + DP + "</td>";
            ret += "<td>" + POG_P + "</td>";
            ret += "<td>" + POG_OD + "</td>";
            ret += "<td>" + KOM + "</td>";
            ret += "<td>" + OST_Z + "</td>";
        ret += "</tr>";
        
        $('#calc_gp').append(ret);
    },
    getDate: function(date) {
        date = date || new Date();
        return date.getDate() + "." + (date.getMonth() > 8 ? (date.getMonth() + 1) : ('0' + (date.getMonth() + 1))) + "." + date.getFullYear();
    },
    DaysInPrevMonth: [31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30]
}

function enableSlider(source, dest, button, min, max, step, value)
{
    if (!(source.length && dest.length))
        return;
    
    source.slider({
        range: "min",
        min: min,
        max: max,
        step: step || 1,
        value: value || min,
        slide: function( event, ui ) {
            dest.val( ui.value );
            calc.showResults(button, true);
        }
    });
    dest.change(function(){
        var val = parseInt($(this).val()) || 0;
        if (val < min && $(this).val(min))
            val = min;
        
        if (val > max && $(this).val(max))
            val = max;
        
        source.slider("value", val);
        calc.showResults(button, true);
    });
    dest.val(source.slider("value"));
}

function CalcFastMore() {
    $(document).ready(function() { calc.fast_more(); });
}
function CalcAuto() {
    $(document).ready(function() { calc.auto(); });
}
function log(data)
{
    console.log(data);
}
*/
