//  JavaScript Document


$(document).ready(function(){
	
});


function number_format(number, decimals, dec_point, thousands_sep) {
    number = (number+'').replace(',', '').replace(' ', '');
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);
            return '' + Math.round(n * k) / k;
        };
    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
	s = s.join(dec);
	if (s.indexOf(dec_point) != -1) {
		s = rtrim(s,"0");
		s = rtrim(s,dec_point);
	}
    return s;
}

function rtrim ( str, charlist ) {
    charlist = !charlist ? ' \\s\u00A0' : (charlist+'').replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\\$1');
    var re = new RegExp('[' + charlist + ']+$', 'g');
    return (str+'').replace(re, '');
}

var choose_credit = {
    objSum: null,               // поле Суммы
//    objPay: null,               // поле ЗП
    objSubmit: null,            // submit
    hasErrors: false,
    
    sum: 0,                     // сумма
    pay: 0,                     // ЗП
    
    init: function() {

        if ($('#flCenterC').length > 0) {
            this.objSum = $('#calc_sum');
//            this.objPay = $('#calc_pay');
            this.objSubmit = $('#calc_credit_submit');
        } else {
            this.objSum = $('#calc_sum_left');
//            this.objPay = $('#calc_pay_left');
            this.objSubmit = $('#startChooseCredits');
        }
               
        this.read();
        
       $(this.objSum).bind('keyup change', function(){
           choose_credit.read();
       });
//       $(this.objPay).bind('keyup change', function(){
//           choose_credit.read();
//       });
        
    },
    read: function() {
        this.sum = parseInt(this.objSum.val().toString().split(' ').join(''));
//		this.pay = parseInt(this.objPay.val().toString().split(' ').join(''));
		
		this.checkErrors();
        
    },
    checkErrors: function() {
		this.hasErrors = true;
		if (!this.objSum.parent().hasClass('error') &&
//			!this.objPay.parent().hasClass('error') &&
			!isNaN(this.sum) && 
//			!isNaN(this.pay) &&
			this.sum > 0 /*&& 
			this.pay > 0*/) this.hasErrors = false;
        
        if (this.hasErrors) {
            this.objSubmit.attr('disabled', 'disabled');
        } else {
            this.objSubmit.removeAttr('disabled');
        }
        
		return this.hasErrors;
	}
};

var choose_deposit = {
    objSum: null,               // поле Суммы
    objCurrency: null,               // поле ЗП
    objSubmit: null,            // submit
    hasErrors: false,
    
    sum: 0,                     // сумма
    currency: 0,                // валюта
    
    init: function() {
        
        this.objSum = $('#calc_depos_sum_left');
        this.objCurrency = $('#sel3');
        this.objSubmit = $('#startChooseDeposit');
        
        this.read();
        $(this.objSum).keyup(function(){
            choose_deposit.read();
		});

        
    },
    read: function() {
        this.sum = parseInt(this.objSum.val().toString().split(' ').join(''));
		this.currency = parseInt(this.objCurrency.val());
		this.checkErrors();        
    },
    checkErrors: function() {
		this.hasErrors = true;
		if (!this.objSum.parent().hasClass('error') &&
			!isNaN(this.sum) && 
			this.sum > 0) this.hasErrors = false;

        if (this.hasErrors) {
            this.objSubmit.attr('disabled', 'disabled').addClass('disabled');
        } else {
            this.objSubmit.removeAttr('disabled').removeClass('disabled');
        }
		return this.hasErrors;
	}
};

var choose_deposit_center = {
    objSum: null,               // поле Суммы
    objCurrency: null,               // поле ЗП
    objSubmit: null,            // submit
    hasErrors: false,
    
    sum: 0,                     // сумма
    currency: 0,                // валюта
    
    init: function() {

        this.objSum = $('#calc_sum');
        this.objCurrency = $('#sel6');
        this.objSubmit = $('#calc_deposit_submit');
        
        this.read();
        $(this.objSum).keyup(function(){
            choose_deposit_center.read();
		});
    },
    read: function() {
        this.sum = parseInt(this.objSum.val().toString().split(' ').join(''));
		this.currency = parseInt(this.objCurrency.val());
		this.checkErrors();        
    },
    checkErrors: function() {
		this.hasErrors = true;
		if (!this.objSum.parent().hasClass('error') &&
			!isNaN(this.sum) && 
			this.sum > 0) this.hasErrors = false;

        if (this.hasErrors) {
            this.objSubmit.attr('disabled', 'disabled').addClass('disabled');
        } else {
            this.objSubmit.removeAttr('disabled').removeClass('disabled');
        }
		return this.hasErrors;
	}
};


var calc_type_1 = {
    objSum: null,               // поле Суммы
    objDuration: null,          // поле количество месяцев
    objCalculateBlock: null,    // блок с результатами расчетов
    objCash: null,              // таблица с % обналичивания
    objSubmit: null,              // submit
    hasErrors: false,
	
    percent: 0,                 // процент
    duration: 0,                // количество месяцев
    sum: 0,                     // сумма
    commission: 0,              // стоимость сопровождения
    
    commissionDefault: 0,       // стоимость сопровождения по умолчанию
    percentDefault: 0,          // процент по умолчанию
    
    sumMin: 0,                  // min сумма кредита
    sumMax: 0,                  // max сумма кредита
    percentCash: 0,             // процент при обналичивании
    monthSum: 0,                // бюджет прожиточного минимума
    
    kdn: 0,                     // КДН
    month_sum_k1: 0,            // коэф поправки БПМ заявителя
    month_sum_k2: 0,            // коэф поправки БПМ поручителя
    
    creditsCommission: new Array(), // коммисия в зав от суммы
    creditsMonth: new Array(),      // количество месяцев в зав от суммы
    creditsPercent: new Array(),    // процент в зав от суммы
    
    addCommission: function(obj) {
		var def = {
			sum: 0,
			sumCommission: 0
		};
		def = $.extend(def, obj);
		this.creditsCommission[this.creditsCommission.length] = def;
        
	},
    addMaxMonth: function(obj) {
		var def = {
			sum: 0,
			maxMonth: 0
		};
		def = $.extend(def, obj);
		this.creditsMonth[this.creditsMonth.length] = def;
	},
    addPercent: function(obj) {
		var def = {
			sum: 0,
			percent: 0
		};
		def = $.extend(def, obj);
		this.creditsPercent[this.creditsPercent.length] = def;
	},
    init: function(obj) {
        var def = {
			percentDefault: 0,
			sumMin: 0,
			sumMax: 0,
			percentCash: 0,
			commissionDefault: 0,
			monthSum: 0,
			kdn: 0,
			month_sum_k1: 0,
			month_sum_k2: 0
		};
		def = $.extend(this, obj);
        
        this.objSum = $('#calc_sum');
        this.objDuration = $('#calc_duration');
        this.objCalculateBlock = $('#calculate_block');
        this.objCash = $('#commission_table');
        this.objSubmit = $('#startCalc');
        
        this.objCalculateBlock.hide();
        
        this.read();
        $('#calc_duration, #calc_sum').keyup(function(){
            calc_type_1.read();
		});
        
    },
    read: function() {
        this.sum = parseInt(this.objSum.val().toString().split(' ').join(''));
		this.duration = parseInt(this.objDuration.val());
		
		this.percent = this.percentDefault;
		for (var i = 0; i<this.creditsPercent.length; i++)
			if (this.sum <= this.creditsPercent[i].sum) this.percent = this.creditsPercent[i].percent;
        
		this.commission = this.commissionDefault;
		for (var i = 0; i<this.creditsCommission.length; i++) {
			if (this.sum <= this.creditsCommission[i].sum) this.commission = this.creditsCommission[i].sumCommission;
        }
		this.checkErrors();
        
    },
    checkErrors: function() {
		this.hasErrors = true;
		if (!this.objSum.parent().hasClass('error') &&
			!this.objDuration.parent().hasClass('error') &&
			!isNaN(this.sum) && 
			!isNaN(this.duration) &&
			this.sum > 0 && 
			this.duration > 0) this.hasErrors = false;
        
        if (this.hasErrors) {
            this.objSubmit.attr('disabled', 'disabled');
        } else {
            this.objSubmit.removeAttr('disabled');
        }
        
		return this.hasErrors;
	},
    calculate: function() {
        this.read();
		
		if (!this.hasErrors) {
            this.objCalculateBlock.show();
            
            var month = 0;
            
            $('#rasch-vuplat .all').hide();
            
            var calculation = new Array();

            var sum = parseInt(this.sum);
            var duration = parseInt(this.duration);
            var percent = parseInt(this.percent) / 100;
            var monthSum = parseInt(this.monthSum);
            var commission = parseInt(this.commission);

			// долг на начало выплат
			var balance = sum;

			// всего выплачено
			var pay_all = 0;

			// всего выплачено по ОД
			var pay_all_od = 0;

			// всего выплачено по комиссии
			var payment_all_ext = 0;

			// всего выплачено по процентам
			var payment_all_percent = 0;

			// платеж по ОД
			var payment = null;

			// платеж по %
			var payment_percent = null;

			// платеж по комиссиям
			var payment_ext = null;

			// ежемесячный платеж
			var payment_monthly = null;

			while (month < duration) {
				// следующий период
				month++;

				// остаток долга на начало периода
				balance = sum - pay_all_od;

				// платеж по ОД
				payment = 0;
				if (month <= duration) payment = (sum / duration);

				// платеж по %
				payment_percent = (balance * percent / 12);

				// платеж по комиссиям
				payment_ext = commission;

				// ежемесячный платеж
				payment_monthly = (payment + payment_percent + payment_ext);

				// всего выплачено
				pay_all = (pay_all + payment_monthly);

                // всего выплачено по комиссии
				payment_all_ext = (payment_all_ext + payment_ext);
                
                // всего выплачено по процентам
				payment_all_percent = (payment_all_percent + payment_percent);
                
				// всего выплачено по ОД
				pay_all_od = (pay_all_od + payment);
                

				// запоминаем строку периода
				calculation[month] = {
					'payment' : payment,
					'payment_percent' : payment_percent,
					'payment_ext' : payment_ext,
					'payment_monthly' : payment_monthly,
					'balance' : balance
				};
			}
            
// Основной долг: 	10 000 000 бел. руб.
            str = number_format(sum, 0, ',', ' ');
			$('#sum_main').text(str);
// проценты + сопровождение
            var sumPercentExt = payment_all_percent + payment_all_ext;
            str = number_format(sumPercentExt, 0, ',', ' ');
			$('#sum_percent').text(str);
// Выплата процентов: 	150 000 бел. руб.
//			str = number_format(payment_all_percent, 0, ',', ' ');
//			$('#sum_percent').text(str);
// Сопровождение кредита: 	200 000 бел. руб.
//            str = number_format(payment_all_ext, 0, ',', ' ');
//			$('#sum_ext').text(str);
// Общая сумма выплат: 	18 500 000 бел. руб.
            str = number_format(pay_all, 0, ',', ' ');
			$('#sum_all').text(str);
            
            if (this.percentCash > 0) {
                var percentCash = parseInt(this.percentCash) / 100;
                var sum_percentCash = percentCash * sum + pay_all;
                var str = number_format(sum_percentCash, 0, ',', ' ');
                $('#sum_ext_nal').text(str);
                $('#percent_cash').text(this.percentCash);
                this.objCash.show();
            }

            var tbody1 = this.objCalculateBlock.find('table#rasch-vuplat tbody.vis').empty();
            var tbody = this.objCalculateBlock.find('table#rasch-vuplat tbody.all').empty();

            var percentExt = 0;
			for (i = 1; i <= this.duration; i++) {
                str = '';
                percentExt = calculation[i].payment_percent + calculation[i].payment_ext;
				str += '<tr>';
                str += '<th>' + i + '</th>';
                str += '<td>' + number_format(calculation[i].payment, 0, ',', ' ') + '</td>'; // основной долг
                str += '<td>' + number_format(percentExt, 0, ',', ' ') + '</td>'; // проценты
//                str += '<td>' + number_format(calculation[i].payment_ext, 0, ',', ' ') + '</td>'; // сопровождение
                str += '<td class="last">' + number_format(calculation[i].payment_monthly, 0, ',', ' ') + '</td>'; // к выплате
                str += '</tr>';

                if (i == 1) tbody1.append(str);
                else tbody.append(str);
			}
            
            $('#rasch-vuplat .all').show();
            
            visHeightTableRV = $('#table-rasch-vuplat table thead').height()
                + $('#table-rasch-vuplat table tbody.vis').height();
            var h = $('#table-rasch-vuplat table').height();
            flagTableRV = generalShowBlock('table-rasch-vuplat', h, visHeightTableRV, 700, !flagTableRV);

        }
    }
    
};

// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------


var calc_type_2 = {
    objSum: null,               // поле Суммы
    objDuration: null,          // поле количество месяцев
    objCalculateBlock: null,    // блок с результатами расчетов
    objCash: null,              // таблица с % обналичивания
    objSubmit: null,              // submit
    hasErrors: false,
	
    percent: 0,                 // процент
    percent_cut: 0,             // процент от снятия
    duration: 0,                // количество месяцев
    sum: 0,                     // сумма
    commission: 0,              // стоимость сопровождения
    
    commissionDefault: 0,       // стоимость сопровождения по умолчанию
    percentDefault: 0,          // процент по умолчанию
    percentCutDefault: 0,       // процент от снятия по умолчанию
    
    sumMin: 0,                  // min сумма кредита
    sumMax: 0,                  // max сумма кредита
    percentCash: 0,             // процент при обналичивании
    monthSum: 0,                // бюджет прожиточного минимума
    
    kdn: 0,                     // КДН
    month_sum_k1: 0,            // коэф поправки БПМ заявителя
    month_sum_k2: 0,            // коэф поправки БПМ поручителя
    
    period_1: 24,                // кол месяцев расчета по 1му типу
    
    creditsCommission: new Array(), // коммисия в зав от суммы
    creditsMonth: new Array(),      // количество месяцев в зав от суммы
    creditsPercent: new Array(),    // процент в зав от суммы
    creditsPercentCut: new Array(),    // процент в зав от суммы
    
    addCommission: function(obj) {
		var def = {
			sum: 0,
			sumCommission: 0
		};
		def = $.extend(def, obj);
		this.creditsCommission[this.creditsCommission.length] = def;
        
	},
    addMaxMonth: function(obj) {
		var def = {
			sum: 0,
			maxMonth: 0
		};
		def = $.extend(def, obj);
		this.creditsMonth[this.creditsMonth.length] = def;
	},
    addPercent: function(obj) {
		var def = {
			sum: 0,
			percent: 0
		};
		def = $.extend(def, obj);
		this.creditsPercent[this.creditsPercent.length] = def;
	},
    addPercentCut: function(obj) {
		var def = {
			sum: 0,
			percent_cut: 0
		};
		def = $.extend(def, obj);
		this.creditsPercentCut[this.creditsPercentCut.length] = def;
	},
    init: function(obj) {
        var def = {
			percentDefault: 0,
			percentCutDefault: 0,
			sumMin: 0,
			sumMax: 0,
			percentCash: 0,
			commissionDefault: 0,
			monthSum: 0,
			kdn: 0,
			month_sum_k1: 0,
			month_sum_k2: 0
		};
		def = $.extend(this, obj);
        
        this.objSum = $('#calc_sum');
        this.objDuration = $('#calc_duration');
        this.objCalculateBlock = $('#calculate_block');
        this.objCash = $('#commission_table');
        this.objSubmit = $('#startCalc');
        
        this.objCalculateBlock.hide();
        
        this.read();
        $('#calc_duration, #calc_sum').keyup(function(){
            calc_type_2.read();
		});
        
    },
    read: function() {
        this.sum = parseInt(this.objSum.val().toString().split(' ').join(''));
		this.duration = parseInt(this.objDuration.val());
		
		this.percent = this.percentDefault;
		for (var i = 0; i<this.creditsPercent.length; i++)
			if (this.sum <= this.creditsPercent[i].sum) this.percent = this.creditsPercent[i].percent;
        
        this.percent_cut = this.percentCutDefault;
		for (var i = 0; i<this.creditsPercentCut.length; i++)
			if (this.sum <= this.creditsPercentCut[i].sum) this.percent_cut = this.creditsPercentCut[i].percent_cut;
        
		this.commission = this.commissionDefault;
		for (var i = 0; i<this.creditsCommission.length; i++) {
			if (this.sum <= this.creditsCommission[i].sum) this.commission = this.creditsCommission[i].sumCommission;
        }
		this.checkErrors();
        
    },
    checkErrors: function() {
		this.hasErrors = true;
		if (!this.objSum.parent().hasClass('error') &&
			!this.objDuration.parent().hasClass('error') &&
			!isNaN(this.sum) && 
			!isNaN(this.duration) &&
			this.sum > 0 && 
			this.duration > 0) this.hasErrors = false;
        
        if (this.hasErrors) {
            this.objSubmit.attr('disabled', 'disabled');
        } else {
            this.objSubmit.removeAttr('disabled');
        }
        
		return this.hasErrors;
	},
    calculate: function() {
        this.read();
		
		if (!this.hasErrors) {
            this.objCalculateBlock.show();
            
            var month = 0;
            
            $('#rasch-vuplat .all').hide();
            
            var calculation1 = new Array();
            var calculation2 = new Array();

            var sum = parseInt(this.sum);
            var duration = parseInt(this.duration);
            var percent = parseInt(this.percent) / 100;
            var percent_cut = parseInt(this.percent_cut) / 100;
            var monthSum = parseInt(this.monthSum);
            var commission = parseInt(this.commission);

			// долг на начало выплат
			var balance = sum;

			// всего выплачено
			var pay_all = 0;
            
            // всего по % от снятия
			var pay_all_percent_cut = 0;

			// всего выплачено по комиссии
			var payment_all_ext = 0;

			// всего выплачено по процентам
			var payment_all_percent = 0;

			// платеж по % от снятия
			var payment = null;

			// платеж по %
			var payment_percent = null;

			// платеж по комиссиям
			var payment_ext = null;

			// ежемесячный платеж
			var payment_monthly = null;

            // расчет на 1-ый период (1 тип)
            var duration1 = parseInt(this.period_1);
            
// 1-ый период
            duration = duration1;
			while (month < duration) {
				// следующий период
				month++;
                
				// остаток долга на начало периода
				balance = sum - pay_all_percent_cut;
                
                // процент от снятия
                payment = balance * percent_cut;
                
                // платеж по %
				payment_percent = (balance * percent / 12);
                
                // платеж по комиссиям
				payment_ext = commission;
                
                // ежемесячный платеж
				payment_monthly = (payment + payment_percent + payment_ext);

				// всего выплачено
				pay_all = (pay_all + payment_monthly);

                // всего выплачено по комиссии
				payment_all_ext = (payment_all_ext + payment_ext);
                
                // всего выплачено по процентам
				payment_all_percent = (payment_all_percent + payment_percent);
                
				// всего выплачено по ОД
				pay_all_percent_cut = (pay_all_percent_cut + payment);
                
				// запоминаем строку периода
				calculation1[month] = {
					'payment' : payment,
					'payment_percent' : payment_percent,
					'payment_ext' : payment_ext,
					'payment_monthly' : payment_monthly,
					'balance' : balance
				};
			}
            
// Погашено:
            var pay_all_percent_cut_period1 = pay_all_percent_cut;
// Осталось
            var balance_period1 = sum - pay_all_percent_cut;
// Итого
            var pay_all_period1 = pay_all;
            
// 2-ой период
            duration = this.duration;
            pay_all_percent_cut = 0;
            
			while (month < duration) {
				// следующий период
				month++;
                
				// остаток долга на начало периода
				balance = balance_period1 - pay_all_percent_cut;
                
                // процент от снятия
                payment = balance_period1 / ( this.duration - duration1);
                
                // платеж по %
				payment_percent = (balance * percent / 12);
                
                // платеж по комиссиям
				payment_ext = commission;
                
                // ежемесячный платеж
				payment_monthly = (payment + payment_percent + payment_ext);

				// всего выплачено
				pay_all = (pay_all + payment_monthly);

                // всего выплачено по комиссии
				payment_all_ext = (payment_all_ext + payment_ext);
                
                // всего выплачено по процентам
				payment_all_percent = (payment_all_percent + payment_percent);
                
				// всего выплачено по ОД
				pay_all_percent_cut = (pay_all_percent_cut + payment);
                
				// запоминаем строку периода
				calculation2[month] = {
					'payment' : payment,
					'payment_percent' : payment_percent,
					'payment_ext' : payment_ext,
					'payment_monthly' : payment_monthly,
					'balance' : balance
				};
			}
                      
// Основной долг: 	10 000 000 бел. руб.
            str = number_format(sum, 0, ',', ' ');
			$('#sum_main').text(str);
// Выплата процентов: 	150 000 бел. руб.
			str = number_format(payment_all_percent, 0, ',', ' ');
			$('#sum_percent').text(str);
// Сопровождение кредита: 	200 000 бел. руб.
            str = number_format(payment_all_ext, 0, ',', ' ');
			$('#sum_ext').text(str);
// Общая сумма выплат: 	18 500 000 бел. руб.
            str = number_format(pay_all, 0, ',', ' ');
			$('#sum_all').text(str);
            
            if (this.percentCash > 0) {
                var percentCash = parseInt(this.percentCash) / 100;
                var sum_percentCash = percentCash * sum + pay_all;
                var str = number_format(sum_percentCash, 0, ',', ' ');
                $('#sum_ext_nal').text(str);
                $('#percent_cash').text(this.percentCash);
                this.objCash.show();
            }

            var tbody1 = this.objCalculateBlock.find('table#rasch-vuplat tbody.vis').empty();
            var tbody = this.objCalculateBlock.find('table#rasch-vuplat tbody.all').empty();

			for (i = 1; i <= duration1; i++) {
                str = '';
                
				str += '<tr>';
                str += '<th>' + i + '</th>';
                str += '<td>' + number_format(calculation1[i].payment, 0, ',', ' ') + '</td>'; // процент от снятия
                str += '<td>' + number_format(calculation1[i].payment_ext, 0, ',', ' ') + '</td>'; // сопровождение
                str += '<td>' + number_format(calculation1[i].balance, 0, ',', ' ') + '</td>'; // остаток задолженности
                str += '<td>' + number_format(calculation1[i].payment_percent, 0, ',', ' ') + '</td>'; // проценты
                str += '<td class="last">' + number_format(calculation1[i].payment_monthly, 0, ',', ' ') + '</td>'; // к выплате
                str += '</tr>';

                if (i == 1) tbody1.append(str);
                else tbody.append(str);
			}
            
            var table_result = this.objCalculateBlock.find('table.result_table');            
// Погашено:
            str = number_format(pay_all_percent_cut_period1, 0, ',', ' ');
			table_result.find('.sum_main_period').text(str);
// Осталось
            str = number_format(balance_period1, 0, ',', ' ');
			$('.sum_rest_period').text(str);
// Итого
            str = number_format(pay_all_period1, 0, ',', ' ');
			$('.sum_all_period').text(str);
            
            var table_result_html = table_result.parent().html();            
            
            str = '';
            str += '<tr class="result">';
            str += '<td colspan="6">'+table_result_html+'</td>'; 
            str += '</tr>';
            tbody.append(str);
            
            
            for (i; i <= this.duration; i++) {
                str = '';
                
				str += '<tr>';
                str += '<th>' + i + '</th>';
                str += '<td>' + number_format(calculation2[i].payment, 0, ',', ' ') + '</td>'; // процент от снятия
                str += '<td>' + number_format(calculation2[i].payment_ext, 0, ',', ' ') + '</td>'; // сопровождение
                str += '<td>' + number_format(calculation2[i].balance, 0, ',', ' ') + '</td>'; // остаток задолженности
                str += '<td>' + number_format(calculation2[i].payment_percent, 0, ',', ' ') + '</td>'; // проценты
                str += '<td class="last">' + number_format(calculation2[i].payment_monthly, 0, ',', ' ') + '</td>'; // к выплате
                str += '</tr>';

                if (i == 1) tbody1.append(str);
                else tbody.append(str);
			}
            
            $('#rasch-vuplat .all').show();
            
            visHeightTableRV = $('#table-rasch-vuplat table thead').height()
                + $('#table-rasch-vuplat table tbody.vis').height();
            var h = $('#table-rasch-vuplat table').height();
            flagTableRV = generalShowBlock('table-rasch-vuplat', h, visHeightTableRV, 700, !flagTableRV);

        }
    }
    
};

// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------


var calc_type_6 = {
    objSum: null,               // поле Суммы
    objDuration: null,          // поле количество месяцев
    objCalculateBlock: null,    // блок с результатами расчетов
    objCash: null,              // таблица с % обналичивания
    objSubmit: null,              // submit
    hasErrors: false,
	
    percent: 0,                 // процент
    percent_cut: 0,             // процент от снятия
    duration: 0,                // количество месяцев
    sum: 0,                     // сумма
    commission: 0,              // стоимость сопровождения
    
    commissionDefault: 0,       // стоимость сопровождения по умолчанию
    percentDefault: 0,          // процент по умолчанию
    percentCutDefault: 0,       // процент от снятия по умолчанию
    
    sumMin: 0,                  // min сумма кредита
    sumMax: 0,                  // max сумма кредита
    percentCash: 0,             // процент при обналичивании
    monthSum: 0,                // бюджет прожиточного минимума
    
    kdn: 0,                     // КДН
    month_sum_k1: 0,            // коэф поправки БПМ заявителя
    month_sum_k2: 0,            // коэф поправки БПМ поручителя
    
    period_1: 12,                // кол месяцев расчета по 1му типу
    
    creditsCommission: new Array(), // коммисия в зав от суммы
    creditsMonth: new Array(),      // количество месяцев в зав от суммы
    creditsPercent: new Array(),    // процент в зав от суммы
    creditsPercentCut: new Array(),    // процент в зав от суммы
    
    addCommission: function(obj) {
		var def = {
			sum: 0,
			sumCommission: 0
		};
		def = $.extend(def, obj);
		this.creditsCommission[this.creditsCommission.length] = def;
        
	},
    addPercent: function(obj) {
		var def = {
			sum: 0,
			percent: 0
		};
		def = $.extend(def, obj);
		this.creditsPercent[this.creditsPercent.length] = def;
	},
    init: function(obj) {
        var def = {
			percentDefault: 0,
			percentCutDefault: 0,
			sumMin: 0,
			sumMax: 0,
			percentCash: 0,
			commissionDefault: 0,
			monthSum: 0,
			kdn: 0,
			month_sum_k1: 0,
			month_sum_k2: 0
		};
		def = $.extend(this, obj);
        
        this.objSum = $('#calc_sum');
        this.objDuration = $('#calc_duration');
        this.objCalculateBlock = $('#calculate_block');
        this.objCash = $('#commission_table');
        this.objSubmit = $('#startCalc');
        
        this.objCalculateBlock.hide();
        
        this.read();
        $('#calc_duration, #calc_sum').keyup(function(){
            calc_type_6.read();
		});
        
    },
    read: function() {
        this.sum = parseInt(this.objSum.val().toString().split(' ').join(''));
		this.duration = parseInt(this.objDuration.val());
		
		this.percent = this.percentDefault;
		for (var i = 0; i<this.creditsPercent.length; i++)
			if (this.sum <= this.creditsPercent[i].sum) this.percent = this.creditsPercent[i].percent;
        
        this.percent_cut = this.percentCutDefault;
		for (var i = 0; i<this.creditsPercentCut.length; i++)
			if (this.sum <= this.creditsPercentCut[i].sum) this.percent_cut = this.creditsPercentCut[i].percent_cut;
        
		this.commission = this.commissionDefault;
		for (var i = 0; i<this.creditsCommission.length; i++) {
			if (this.sum <= this.creditsCommission[i].sum) this.commission = this.creditsCommission[i].sumCommission;
        }
		this.checkErrors();
        
    },
    checkErrors: function() {
		this.hasErrors = true;
		if (!this.objSum.parent().hasClass('error') &&
			!this.objDuration.parent().hasClass('error') &&
			!isNaN(this.sum) && 
			!isNaN(this.duration) &&
			this.sum > 0 && 
			this.duration > 0) this.hasErrors = false;
        
        if (this.hasErrors) {
            this.objSubmit.attr('disabled', 'disabled');
        } else {
            this.objSubmit.removeAttr('disabled');
        }
        
		return this.hasErrors;
	},
    calculate: function() {
        this.read();
		
		if (!this.hasErrors) {
            this.objCalculateBlock.show();
            
            var month = 0;
            
            $('#rasch-vuplat .all').hide();
            
            var calculation1 = new Array();
            var calculation2 = new Array();

            var sum = parseInt(this.sum);
            var duration = parseInt(this.duration);
            var percent = parseInt(this.percent) / 100;
            var percent_cut = parseInt(this.percent_cut) / 100;
            var monthSum = parseInt(this.monthSum);
            var commission = parseFloat(this.commission);

			// долг на начало выплат
			var balance = sum;
            
            //плата по основному долгу
            var pay_balance = 0;

			// всего выплачено
			var pay_all = 0;
            
            // всего по % от снятия
			var pay_all_percent_cut = 0;

			// всего выплачено по комиссии
			var payment_all_ext = 0;

			// всего выплачено по процентам
			var payment_all_percent = 0;

			// платеж по % от снятия
			var payment = null;

			// платеж по %
			var payment_percent = null;

			// платеж по комиссиям
			var payment_ext = null;

			// ежемесячный платеж
			var payment_monthly = null;

            // расчет на 1-ый период (1 тип)
            var duration1 = parseInt(this.period_1);
            if (this.duration < this.period_1) duration1 = this.duration;
            
// 1-ый период
            duration = duration1;
            
            // платеж по комиссиям
            payment_ext = commission /100 *  sum;
                
			while (month < duration) {
				// следующий период
				month++;
                
                // Плата по осносновному долгу
                pay_balance = 0;
                
                //задолженность
                balance = sum - pay_balance;
                //alert(month + ' == ' + duration + ' && ' + this.duration + ' <  ' +this.period_1);
                if (month == duration && this.duration <= this.period_1) payment = balance;
                                
                // платеж по %
				payment_percent = (balance * percent / 12);
                
                // ежемесячный платеж
				payment_monthly = (payment + payment_percent + payment_ext);

				// всего выплачено
				pay_all = (pay_all + payment_monthly);

                // всего выплачено по комиссии
				payment_all_ext = (payment_all_ext + payment_ext);
                
                // всего выплачено по процентам
				payment_all_percent = (payment_all_percent + payment_percent);
                
				// всего выплачено по ОД
				pay_all_percent_cut = (pay_all_percent_cut + payment);
                
				// запоминаем строку периода
				calculation1[month] = {
					'payment' : payment,
					'payment_percent' : payment_percent,
					'payment_ext' : payment_ext,
					'payment_monthly' : payment_monthly,
					'balance' : balance
				};
			}
            
// Погашено:
            var pay_all_percent_cut_period1 = pay_all_percent_cut;
// Осталось
            var balance_period1 = sum - pay_all_percent_cut;
// Итого
            var pay_all_period1 = pay_all;
            
// 2-ой период
            duration = this.duration;
            pay_all_percent_cut = 0;
            
            // платеж по комиссиям
            payment_ext = commission /100 *  sum;
            
			while (month < duration) {
				// следующий период
				month++;
                
				// остаток долга на начало периода
				balance = balance_period1 - pay_all_percent_cut;
                
                // процент от снятия
                payment = balance_period1 / (this.duration - duration1);  //( this.duration - duration1);
                if (month == duration) payment = balance;
                
                // платеж по %
				payment_percent = (balance * percent / 12);
                
                // ежемесячный платеж
				payment_monthly = (payment + payment_percent + payment_ext);

				// всего выплачено
				pay_all = (pay_all + payment_monthly);

                // всего выплачено по комиссии
				payment_all_ext = (payment_all_ext + payment_ext);
                
                // всего выплачено по процентам
				payment_all_percent = (payment_all_percent + payment_percent);
                
				// всего выплачено по ОД
				pay_all_percent_cut = (pay_all_percent_cut + payment);
                
                //alert('payment:' + payment + ', payment_percent: ' +  payment_percent + ', payment_ext: ' +  payment_ext + ', payment_monthly: ' +  payment_monthly + ', balance: ' +  balance);
                
				// запоминаем строку периода
				calculation2[month] = {
					'payment' : payment,
					'payment_percent' : payment_percent,
					'payment_ext' : payment_ext,
					'payment_monthly' : payment_monthly,
					'balance' : balance
				};
			}
                      
// Основной долг: 	10 000 000 бел. руб.
            str = number_format(sum, 0, ',', ' ');
			$('#sum_main').text(str);
// проценты + сопровождение
            var sumPercentExt = payment_all_percent + payment_all_ext;
            str = number_format(sumPercentExt, 0, ',', ' ');
			$('#sum_percent').text(str);
            
//// Выплата процентов: 	150 000 бел. руб.
//			str = number_format(payment_all_percent, 0, ',', ' ');
//			$('#sum_percent').text(str);
//// Сопровождение кредита: 	200 000 бел. руб.
//            str = number_format(payment_all_ext, 0, ',', ' ');
//			$('#sum_ext').text(str);
// Общая сумма выплат: 	18 500 000 бел. руб.
            str = number_format(pay_all, 0, ',', ' ');
			$('#sum_all').text(str);
            
            if (this.percentCash > 0) {
                var percentCash = parseInt(this.percentCash) / 100;
                var sum_percentCash = percentCash * sum + pay_all;
                var str = number_format(sum_percentCash, 0, ',', ' ');
                $('#sum_ext_nal').text(str);
                $('#percent_cash').text(this.percentCash);
                this.objCash.show();
            }

            var tbody1 = this.objCalculateBlock.find('table#rasch-vuplat tbody.vis').empty();
            var tbody = this.objCalculateBlock.find('table#rasch-vuplat tbody.all').empty();

			for (i = 1; i <= duration1; i++) {
                str = '';
                
                percentExt = calculation1[i].payment_percent + calculation1[i].payment_ext;
                
				str += '<tr>';
                str += '<th>' + i + '</th>';
                str += '<td>' + number_format(calculation1[i].payment, 0, ',', ' ') + '</td>'; // процент от снятия
//                str += '<td>' + number_format(calculation1[i].payment_ext, 0, ',', ' ') + '</td>'; // сопровождение
                str += '<td>' + number_format(calculation1[i].balance, 0, ',', ' ') + '</td>'; // остаток задолженности
//                str += '<td>' + number_format(calculation1[i].payment_percent, 0, ',', ' ') + '</td>'; // проценты
                str += '<td>' + number_format(percentExt, 0, ',', ' ') + '</td>'; // проценты
                str += '<td class="last">' + number_format(calculation1[i].payment_monthly, 0, ',', ' ') + '</td>'; // к выплате
                str += '</tr>';

                if (i == 1) tbody1.append(str);
                else tbody.append(str);
			}
            
            var table_result = this.objCalculateBlock.find('table.result_table');            
// Погашено:
            str = number_format(pay_all_percent_cut_period1, 0, ',', ' ');
			table_result.find('.sum_main_period').text(str);
// Осталось
            str = number_format(balance_period1, 0, ',', ' ');
			$('.sum_rest_period').text(str);
// Итого
            str = number_format(pay_all_period1, 0, ',', ' ');
			$('.sum_all_period').text(str);
            
//            var table_result_html = table_result.parent().html();            
//            
            str = '';
//            str += '<tr class="result">';
//            str += '<td colspan="6">'+table_result_html+'</td>'; 
//            str += '</tr>';
            tbody.append(str);
            
            
            for (i; i <= this.duration; i++) {
                str = '';
                
                percentExt = calculation2[i].payment_percent + calculation2[i].payment_ext;
                
				str += '<tr>';
                str += '<th>' + i + '</th>';
                str += '<td>' + number_format(calculation2[i].payment, 0, ',', ' ') + '</td>'; // процент от снятия
//                str += '<td>' + number_format(calculation2[i].payment_ext, 0, ',', ' ') + '</td>'; // сопровождение
                str += '<td>' + number_format(calculation2[i].balance, 0, ',', ' ') + '</td>'; // остаток задолженности
//                str += '<td>' + number_format(calculation2[i].payment_percent, 0, ',', ' ') + '</td>'; // проценты
                str += '<td>' + number_format(percentExt, 0, ',', ' ') + '</td>'; // проценты
                str += '<td class="last">' + number_format(calculation2[i].payment_monthly, 0, ',', ' ') + '</td>'; // к выплате
                str += '</tr>';

                if (i == 1) tbody1.append(str);
                else tbody.append(str);
			}
            
            $('#rasch-vuplat .all').show();
            
            visHeightTableRV = $('#table-rasch-vuplat table thead').height()
                + $('#table-rasch-vuplat table tbody.vis').height();
            var h = $('#table-rasch-vuplat table').height();
            flagTableRV = generalShowBlock('table-rasch-vuplat', h, visHeightTableRV, 700, !flagTableRV);

            $('.under-tableRV').hide();
        }
    }
    
};

// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------

var calc_type_3 = {
    objSum: null,               // поле Суммы
    objDuration: null,          // поле количество месяцев
    objCalculateBlock: null,    // блок с результатами расчетов
    objCurrency: null,          // валюта
    objSubmit: null,              // submit
    hasErrors: false,
	
    duration: 0,                // количество месяцев
    sum: 0,                     // сумма
    currenty: 0,                // валюта
    
    percentDefault: 0,          // процент по умолчанию    
    percentType: 0,             // 1 - с капитализацией; 0 - без капитализации
    
    acc: 0,                     // точность для данной валюты
    currencyId: 0,                // текущая валюта ID
    currency: '',                // текущая валюта
    currenties: new Array(),    // настройки для определенного массива
    depositsPercent: new Array(),    // процент в зав от количества месяцев
    currtype: new Array('BYR', 'RUR', 'USD', 'EUR'),    // 
    currAcc: new Array(0, 1, 2, 2),    // 
        
    
    addCurrency: function(obj) {
		var def = {
			id: 0,
			percentDefault: 0,
			sumMin: 0,
			month_min: 0,
			depositsPercent: new Array()
		};
        obj.percentDefault = obj.percentDefault / 100;
        def = $.extend(def, obj);
		this.currenties[def.id] = def;
        this.currenties[def.id].depositsPercent = new Array();
	},
    addPercent: function(obj) {
		var def = {
			id: 0,
			month: 0,
			percent: 0
		};
        obj.percent = obj.percent / 100;
		def = $.extend(def, obj);
		this.currenties[def.id].depositsPercent[this.currenties[def.id].depositsPercent.length] = def;
	},
    init: function(obj) {
//        var def = {
//			percentDefault: 0,
//			sumMin: 0
//		};
//		def = $.extend(this, obj);
        
        this.objSum = $('#calc_sum');
        this.objDuration = $('#calc_duration');
        this.objProcentType = $("input[name='percent_type']:checked");        
        this.objCalculateBlock = $('#calculate_block');
        this.objSubmit = $('#startCalc');
        this.objCurrency = $('#sel6');
        
//        this.percentDefault = parseInt(this.percentDefault) / 100;
        
        this.currencyId = this.objCurrency.parent().find('option:selected').val();
        this.currency = this.currencyId; 

        this.objCalculateBlock.hide();
        
        this.read();
        $('#calc_duration, #calc_sum').keyup(function(){
            calc_type_3.read();
		});
    },
    read: function() {
        this.objProcentType = $("input[name='percent_type']:checked"); 
        
        this.sum = parseInt(this.objSum.val().toString().split(' ').join(''));
		this.duration = parseInt(this.objDuration.val());
		this.percentType = parseInt(this.objProcentType.val());
        
        this.objCurrency = $('#sel6');
        this.currencyId = this.objCurrency.val();        
        this.currency = this.currtype[this.currencyId - 1];
        this.acc = this.currAcc[this.currencyId - 1];
               
		this.checkErrors();        
    },
    checkErrors: function() {
		this.hasErrors = true;
		if (!this.objSum.parent().hasClass('error') &&
			!this.objDuration.parent().hasClass('error') &&
			!isNaN(this.sum) && 
			!isNaN(this.duration) &&
			this.sum > 0 && 
			this.duration > 0) this.hasErrors = false;
        
        if (this.hasErrors) {
            this.objSubmit.attr('disabled', 'disabled');
        } else {
            this.objSubmit.removeAttr('disabled');
        }
        
		return this.hasErrors;
	},
    getPercent: function(sum) {
		var percent;
        this.percentDefault = this.currenties[this.currencyId].percentDefault;
		percent = this.percentDefault;

		for (var i = 0; i<this.currenties[this.currencyId].depositsPercent.length; i++) {
            
			if (sum <= this.currenties[this.currencyId].depositsPercent[i].month) 
                percent = this.currenties[this.currencyId].depositsPercent[i].percent;
        }
		return percent;
	},

    calculate: function() {        
        this.read();
		if (!this.hasErrors) {
            this.objCalculateBlock.show();
            
            var month = 0;
            
            $('#rasch-vuplat .all').hide();
            
            var calculation = new Array();
            var sum = parseInt(this.sum);           // первоначальная сумма вклада
            var duration = parseInt(this.duration); // количество месяцев вклада
            
            var sum_end = this.sum;                 // конечная сумма вклада
            var period_end = 0;                     // сумма вклада на конец периода
            var percent = 0;                        // процентная ставка для текущего месяца
            var sum_percent = 0;                    // сумма по процентам для текущего месяца
            var sum_all_percent = 0;                // выплаты по процентам
            var checkSumEnd = 0;                    // сумма депозита с капитализацией на конец периода
            
//            duration = 3;
            for (var i = 1; i <= duration; i++) {
                // процентная ставка для текущего месяца
				percent = this.getPercent(i);

                // сумма по процентам для текущего месяца
                sum_percent = 0;
                // с капитализацией
                if (this.percentType == 1) {
//                    sum_percent = sum_end * Math.pow((1 + percent/12), i) - sum_end;
////                    sum_percent = this.sum * Math.pow((1 + percent/12), i) - this.sum;
//                    period_end = sum + sum_percent;
//                    sum_all_percent = sum_percent;
                    sum_percent = sum_end * percent/12 //sum_end * Math.pow((1 + percent/12), i) - sum_end;
                    period_end = sum_end + sum_percent;
                    sum_all_percent = sum_all_percent + sum_percent;
                } 
                // без капитализации
                else {
//                    sum_percent = sum_end * percent/12;
//                    period_end = sum_end + sum_percent;
//                    sum_all_percent = sum_all_percent + sum_percent;
                    sum_percent = sum * percent/12;
                    period_end = sum_end + sum_percent;
                    sum_all_percent = sum_all_percent + sum_percent;
                }
                
                // запоминаем строку периода
				calculation[i] = {
					'sum' : sum_end,
					'period_end' : period_end,
					'percent' : percent,
					'sum_percent' : sum_percent,
					'percent' : percent
				};                
                sum_end = period_end;
            }
            
// Сумма вклада: 	10 000 000 бел. руб.
            var str = number_format(sum, 0, ',', ' ');
			$('#sum_main').text(str);
// Сумма выплаченных процентов: 	150 000 бел. руб.
            sum_all_percent = sum_end - sum;

			str = number_format(sum_all_percent, this.acc, ',', ' ');
			$('#sum_percent').text(str);
// Общая сумма выплат: 	18 500 000 бел. руб.
            str = number_format(sum_end, this.acc, ',', ' ');
			$('#sum_all').text(str);
            
            $('.defcurr').text(this.currency);
            
            var tbody1 = this.objCalculateBlock.find('table#rasch-vuplat tbody.vis').empty();
            var tbody = this.objCalculateBlock.find('table#rasch-vuplat tbody.all').empty();

			for (i = 1; i <= duration; i++) {
                str = '';
                
				str += '<tr>';
                str += '<th>' + i + '</th>';
                str += '<td>' + number_format(calculation[i].sum, 0, ',', ' ') + '</td>'; // основной долг
                str += '<td>' + number_format(calculation[i].percent * 100, 2, ',', ' ') + '</td>'; // основной долг
                str += '<td>' + number_format(calculation[i].sum_percent, this.acc, ',', ' ') + '</td>'; // основной долг
                str += '<td class="last">' + number_format(calculation[i].period_end, 0, ',', ' ') + '</td>'; // к выплате
                str += '</tr>';

                if (i == 1) tbody1.append(str);
                else tbody.append(str);
			}
            
            $('#rasch-vuplat .all').show();
            
            visHeightTableRV = $('#table-rasch-vuplat table thead').height()
                + $('#table-rasch-vuplat table tbody.vis').height();
            var h = $('#table-rasch-vuplat table').height();
            flagTableRV = generalShowBlock('table-rasch-vuplat', h, visHeightTableRV, 700, !flagTableRV);

        }
    }
    
};


// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------

var calc_type_7 = {
    objSum: null,               // поле Суммы
    objDuration: null,          // поле количество месяцев
    objCalculateBlock: null,    // блок с результатами расчетов
    objCash: null,              // таблица с % обналичивания
    objSubmit: null,              // submit
    hasErrors: false,
	
    percent: 0,                 // процент
    duration: 0,                // количество месяцев
    sum: 0,                     // сумма
    commission: 0,              // стоимость сопровождения
    
    commissionDefault: 0,       // стоимость сопровождения по умолчанию
    percentDefault: 0,          // процент по умолчанию
    
    monthMin: 0,                // min срок кредита
    monthMax: 0,                // max срок кредита
    sumMin: 0,                  // min сумма кредита
    sumMax: 0,                  // max сумма кредита
    percentCash: 0,             // процент при обналичивании
    monthSum: 0,                // бюджет прожиточного минимума
    
    kdn: 0,                     // КДН
    month_sum_k1: 0,            // коэф поправки БПМ заявителя
    month_sum_k2: 0,            // коэф поправки БПМ поручителя
    
    creditsCommission: new Array(), // коммисия в зав от суммы
    creditsMonth: new Array(),      // количество месяцев в зав от суммы
    creditsPercent: new Array(),    // процент в зав от суммы
    
    addCommission: function(obj) {
		var def = {
			sum: 0,
			sumCommission: 0
		};
		def = $.extend(def, obj);
		this.creditsCommission[this.creditsCommission.length] = def;
        
	},
    addMaxMonth: function(obj) {
		var def = {
			sum: 0,
			maxMonth: 0
		};
		def = $.extend(def, obj);
		this.creditsMonth[this.creditsMonth.length] = def;
	},
    addPercent: function(obj) {
		var def = {
			sum: 0,
			percent: 0
		};
		def = $.extend(def, obj);
		this.creditsPercent[this.creditsPercent.length] = def;
	},
    init: function(obj) {
        var def = {
			percentDefault: 0,
			sumMin: 0,
			sumMax: 0,
			percentCash: 0,
			commissionDefault: 0,
			monthSum: 0,
			kdn: 0,
			month_sum_k1: 0,
			month_sum_k2: 0
		};
		def = $.extend(this, obj);
        
        this.objSum = $('#calc_sum');
        this.objDuration = $('#calc_duration');
        this.objCalculateBlock = $('#calculate_block');
        this.objCash = $('#commission_table');
        this.objSubmit = $('#startCalc');
        
        this.objCalculateBlock.hide();
        
        this.objSum.bind('keyup', function(){
			calc_type_7.read();

			opt = calc_type_7.objDuration.data('options');
			opt.max = calc_type_7.monthMax;
			calc_type_7.objDuration.data('options', opt).keyup();

		});
        
        this.read();
	
	this.objSum.keyup();
	opt = this.objDuration.data('options');
	opt.max = this.monthMax;
	this.objDuration.data('options', opt).keyup();

	this.objSum.keyup();
        $('#calc_duration, #calc_sum').keyup(function(){
            calc_type_7.read();
	});
        
    },
    read: function() {
        this.sum = parseInt(this.objSum.val().toString().split(' ').join(''));
		this.duration = parseInt(this.objDuration.val());
		
//        var str = '';
		this.monthMax = 0;
		for (var i = 0; i<this.creditsMonth.length; i++) {
//            str += (this.sum + ' <= ' + this.creditsMonth[i].sum + ' = ' + this.creditsMonth[i].maxMonth +  ';\n ');
			if (this.sum <= this.creditsMonth[i].sum) this.monthMax = this.creditsMonth[i].maxMonth;
        }
        if (this.monthMax == 0) this.monthMax = this.duration;
//        alert(str);
//        alert(this.monthMax);
		this.percent = this.percentDefault;
		for (var i = 0; i<this.creditsPercent.length; i++)
			if (this.sum <= this.creditsPercent[i].sum) this.percent = this.creditsPercent[i].percent;
        
		this.commission = this.commissionDefault;
		for (var i = 0; i<this.creditsCommission.length; i++) {
			if (this.sum <= this.creditsCommission[i].sum) this.commission = this.creditsCommission[i].sumCommission;
        }
		this.checkErrors();
        
    },
    checkErrors: function() {
		this.hasErrors = true;
		if (!this.objSum.parent().hasClass('error') &&
			!this.objDuration.parent().hasClass('error') &&
			!isNaN(this.sum) && 
			!isNaN(this.duration) &&
			this.sum > 0 && 
			this.duration > 0) this.hasErrors = false;
        
        if (this.hasErrors) {
            this.objSubmit.attr('disabled', 'disabled');
        } else {
            this.objSubmit.removeAttr('disabled');
        }
        
		return this.hasErrors;
	},
    calculate: function() {
        this.read();
		
		if (!this.hasErrors) {
            this.objCalculateBlock.show();
            
            var month = 0;
            
            $('#rasch-vuplat .all').hide();
            
            var calculation = new Array();

            var sum = parseInt(this.sum);
            var duration = parseInt(this.duration);
            var percent = parseInt(this.percent) / 100;
            var monthSum = parseInt(this.monthSum);
            var commission = parseFloat(this.commission) / 100;

			// долг на начало выплат
			var balance = sum;

			// всего выплачено
			var pay_all = 0;

			// всего выплачено по ОД
			var pay_all_od = 0;

			// всего выплачено по комиссии
			var payment_all_ext = 0;

			// всего выплачено по процентам
			var payment_all_percent = 0;

			// платеж по ОД
			var payment = null;

			// платеж по %
			var payment_percent = null;

			// платеж по комиссиям
			var payment_ext = null;

			// ежемесячный платеж
			var payment_monthly = null;

			while (month < duration) {
				// следующий период
				month++;

				// остаток долга на начало периода
				balance = sum - pay_all_od;

				// платеж по ОД
				payment = 0;
				if (month <= duration) payment = (sum / duration);

				// платеж по %
				payment_percent = (balance * percent / 12);

				// платеж по комиссиям
				payment_ext = commission * sum;

				// ежемесячный платеж
				payment_monthly = (payment + payment_percent + payment_ext);

				// всего выплачено
				pay_all = (pay_all + payment_monthly);

                // всего выплачено по комиссии
				payment_all_ext = (payment_all_ext + payment_ext);
                
                // всего выплачено по процентам
				payment_all_percent = (payment_all_percent + payment_percent);
                
				// всего выплачено по ОД
				pay_all_od = (pay_all_od + payment);
                

				// запоминаем строку периода
				calculation[month] = {
					'payment' : payment,
					'payment_percent' : payment_percent,
					'payment_ext' : payment_ext,
					'payment_monthly' : payment_monthly,
					'balance' : balance
				};
			}
            
// Основной долг: 	10 000 000 бел. руб.
            str = number_format(sum, 0, ',', ' ');
			$('#sum_main').text(str);
// проценты + сопровождение
            var sumPercentExt = payment_all_percent + payment_all_ext;
            str = number_format(sumPercentExt, 0, ',', ' ');
			$('#sum_percent').text(str);
// Выплата процентов: 	150 000 бел. руб.
//			str = number_format(payment_all_percent, 0, ',', ' ');
//			$('#sum_percent').text(str);
// Сопровождение кредита: 	200 000 бел. руб.
//            str = number_format(payment_all_ext, 0, ',', ' ');
//			$('#sum_ext').text(str);
// Общая сумма выплат: 	18 500 000 бел. руб.
            str = number_format(pay_all, 0, ',', ' ');
			$('#sum_all').text(str);
            
            if (this.percentCash > 0) {
                var percentCash = parseInt(this.percentCash) / 100;
                var sum_percentCash = percentCash * sum + pay_all;
                var str = number_format(sum_percentCash, 0, ',', ' ');
                $('#sum_ext_nal').text(str);
                $('#percent_cash').text(this.percentCash);
                this.objCash.show();
            }

            var tbody1 = this.objCalculateBlock.find('table#rasch-vuplat tbody.vis').empty();
            var tbody = this.objCalculateBlock.find('table#rasch-vuplat tbody.all').empty();

            var percentExt = 0;
			for (i = 1; i <= this.duration; i++) {
                str = '';
                percentExt = calculation[i].payment_percent + calculation[i].payment_ext;
				str += '<tr>';
                str += '<th>' + i + '</th>';
                str += '<td>' + number_format(calculation[i].payment, 0, ',', ' ') + '</td>'; // основной долг
                str += '<td>' + number_format(percentExt, 0, ',', ' ') + '</td>'; // проценты
//                str += '<td>' + number_format(calculation[i].payment_ext, 0, ',', ' ') + '</td>'; // сопровождение
                str += '<td class="last">' + number_format(calculation[i].payment_monthly, 0, ',', ' ') + '</td>'; // к выплате
                str += '</tr>';

                if (i == 1) tbody1.append(str);
                else tbody.append(str);
			}
            
            $('#rasch-vuplat .all').show();
            
            visHeightTableRV = $('#table-rasch-vuplat table thead').height()
                + $('#table-rasch-vuplat table tbody.vis').height();
            var h = $('#table-rasch-vuplat table').height();
            flagTableRV = generalShowBlock('table-rasch-vuplat', h, visHeightTableRV, 700, !flagTableRV);

        }
    }
    
};

// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------

var calc_type_4 = {
    objSum: null,               // поле Суммы
    objDuration: null,          // поле количество месяцев
    objCalculateBlock: null,    // блок с результатами расчетов
    objCurrency: null,          // валюта
    objSubmit: null,              // submit
    hasErrors: false,
	
    duration: 0,                // количество месяцев
    sum: 0,                     // сумма
    currenty: 0,                // валюта
    
    percentDefault: 0,          // процент по умолчанию    
    percentType: 0,             // 1 - с капитализацией; 0 - без капитализации
    
    currencyId: 0,                // текущая валюта ID
    currency: '',                // текущая валюта
    currenties: new Array(),    // настройки для определенного массива
    depositsPercent: new Array(),    // процент в зав от количества месяцев
    currtype: new Array('BYR', 'RUR', 'USD', 'EUR'),    // 
    currAcc: new Array(0, 1, 2, 2),    // 
        
    
    addCurrency: function(obj) {
		var def = {
			id: 0,
			percentDefault: 0,
			sumMin: 0,
			month_min: 0,
			depositsPercent: new Array()
		};
        obj.percentDefault = obj.percentDefault / 100;
        def = $.extend(def, obj);
		this.currenties[def.id] = def;
        this.currenties[def.id].depositsPercent = new Array();
	},
    addPercent: function(obj) {
		var def = {
			id: 0,
			summa: 0,
			percent: 0
		};
        obj.percent = obj.percent / 100;
		def = $.extend(def, obj);
		this.currenties[def.id].depositsPercent[this.currenties[def.id].depositsPercent.length] = def;
	},
    init: function(obj) {
//        var def = {
//			percentDefault: 0,
//			sumMin: 0
//		};
//		def = $.extend(this, obj);
        
        this.objSum = $('#calc_sum');
        this.objDuration = $('#calc_duration');
        this.objProcentType = $("input[name='percent_type']:checked");        
        this.objCalculateBlock = $('#calculate_block');
        this.objSubmit = $('#startCalc');
        this.objCurrency = $('#sel6');
        
//        this.percentDefault = parseInt(this.percentDefault) / 100;
        
        this.currencyId = this.objCurrency.parent().find('option:selected').val();
        this.currency = this.currencyId; 

        this.objCalculateBlock.hide();
        
        this.read();
        $('#calc_duration, #calc_sum').keyup(function(){
            calc_type_4.read();
		});
    },
    read: function() {
        this.objProcentType = $("input[name='percent_type']:checked"); 
        
        this.sum = parseInt(this.objSum.val().toString().split(' ').join(''));
		this.duration = parseInt(this.objDuration.val());
		this.percentType = parseInt(this.objProcentType.val());
        
        this.objCurrency = $('#sel6');
        this.currencyId = this.objCurrency.val();        
        this.currency = this.currtype[this.currencyId - 1];
        this.acc = this.currAcc[this.currencyId - 1];
        
		this.checkErrors();        
    },
    checkErrors: function() {
		this.hasErrors = true;
		if (!this.objSum.parent().hasClass('error') &&
			!this.objDuration.parent().hasClass('error') &&
			!isNaN(this.sum) && 
			!isNaN(this.duration) &&
			this.sum > 0 && 
			this.duration > 0) this.hasErrors = false;
        
        if (this.hasErrors) {
            this.objSubmit.attr('disabled', 'disabled');
        } else {
            this.objSubmit.removeAttr('disabled');
        }
        
		return this.hasErrors;
	},
    getPercent: function(sum) {
		var percent;
        this.percentDefault = this.currenties[this.currencyId].percentDefault;
		percent = this.percentDefault;

		for (var i = 0; i<this.currenties[this.currencyId].depositsPercent.length; i++) {            
			if (sum <= this.currenties[this.currencyId].depositsPercent[i].summa) 
                percent = this.currenties[this.currencyId].depositsPercent[i].percent;
        }
		return percent;
	},

    calculate: function() {        
        this.read();
		if (!this.hasErrors) {
            this.objCalculateBlock.show();
            
            var month = 0;
            
            $('#rasch-vuplat .all').hide();
            
            var calculation = new Array();
            var sum = parseInt(this.sum);           // первоначальная сумма вклада
            var duration = parseInt(this.duration); // количество месяцев вклада
            
            var sum_end = this.sum;                 // конечная сумма вклада
            var period_end = 0;                     // сумма вклада на конец периода
            var percent = 0;                        // процентная ставка для текущего месяца
            var sum_percent = 0;                    // сумма по процентам для текущего месяца
            var sum_all_percent = 0;                // выплаты по процентам
            var checkSumEnd = 0;                    // сумма депозита с капитализацией на конец периода
            
//            duration = 3;
            for (var i = 1; i <= duration; i++) {
                
//                alert(sum_end + ' - ' + percent);
                // сумма по процентам для текущего месяца
                sum_percent = 0;
                if (this.percentType == 1) {
                    // процентная ставка для данной сумм
                    percent = this.getPercent(sum_end);
                    
                    sum_percent = sum_end * percent/12 //sum_end * Math.pow((1 + percent/12), i) - sum_end;
                    period_end = sum_end + sum_percent;
                    sum_all_percent = sum_all_percent + sum_percent;
                } 
                // без капитализации
                else {
                    // процентная ставка для данной сумм
                    percent = this.getPercent(sum);
                
                    sum_percent = sum * percent/12;
                    period_end = sum + sum_percent;
//                    period_end = sum_end + sum_percent;
                    sum_all_percent = sum_all_percent + sum_percent;
                    sum_end = sum;
                }
                
                // запоминаем строку периода
				calculation[i] = {
					'sum' : sum_end,
					'period_end' : period_end,
					'percent' : percent,
					'sum_percent' : sum_percent,
					'percent' : percent
				};                

                sum_end = period_end;
            }
            
// Сумма вклада: 	10 000 000 бел. руб.
            var str = number_format(sum, 0, ',', ' ');
			$('#sum_main').text(str);
// Сумма выплаченных процентов: 	150 000 бел. руб.
			str = number_format(sum_all_percent, this.acc, ',', ' ');
			$('#sum_percent').text(str);
// Общая сумма выплат: 	18 500 000 бел. руб.
            sum_end = sum + sum_all_percent;

            str = number_format(sum_end, this.acc, ',', ' ');
			$('#sum_all').text(str);
            
            $('.defcurr').text(this.currency);
            
            var tbody1 = this.objCalculateBlock.find('table#rasch-vuplat tbody.vis').empty();
            var tbody = this.objCalculateBlock.find('table#rasch-vuplat tbody.all').empty();

			for (i = 1; i <= duration; i++) {
                str = '';
                
				str += '<tr>';
                str += '<th>' + i + '</th>';
                str += '<td>' + number_format(calculation[i].sum, 0, ',', ' ') + '</td>'; // основной долг
                str += '<td>' + number_format(calculation[i].percent * 100, 2, ',', ' ') + '</td>'; // основной долг
                str += '<td>' + number_format(calculation[i].sum_percent, this.acc, ',', ' ') + '</td>'; // основной долг
                str += '<td class="last">' + number_format(calculation[i].period_end, this.acc, ',', ' ') + '</td>'; // к выплате
                str += '</tr>';

                if (i == 1) tbody1.append(str);
                else tbody.append(str);
			}
            
            $('#rasch-vuplat .all').show();
            
            visHeightTableRV = $('#table-rasch-vuplat table thead').height()
                + $('#table-rasch-vuplat table tbody.vis').height();
            var h = $('#table-rasch-vuplat table').height();
            flagTableRV = generalShowBlock('table-rasch-vuplat', h, visHeightTableRV, 700, !flagTableRV);

        }
    }
    
};




// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------

var calc_type_5 = {
    objSum: null,               // поле Суммы
    objDuration: null,          // поле количество месяцев
    objCalculateBlock: null,    // блок с результатами расчетов
    objCurrency: null,          // валюта
    objSubmit: null,              // submit
    hasErrors: false,
	
    duration: 0,                // количество месяцев
    sum: 0,                     // сумма
    currenty: 0,                // валюта
    
    percentDefault: 0,          // процент по умолчанию    
    percentType: 0,             // 1 - с капитализацией; 0 - без капитализации
    
    currencyId: 0,                // текущая валюта ID
    currency: '',                // текущая валюта
    currenties: new Array(),    // настройки для определенного массива
    depositsPercent: new Array(),    // процент в зав от количества месяцев
    currtype: new Array('BYR', 'RUR', 'USD', 'EUR'),    // 
    currAcc: new Array(0, 1, 2, 2),    // 
        
    
    addCurrency: function(obj) {
		var def = {
			id: 0,
			percentDefault: 0,
			sumMin: 0,
			month_min: 0,
			depositsPercent: new Array()
		};
        obj.percentDefault = obj.percentDefault / 100;
        def = $.extend(def, obj);
		this.currenties[def.id] = def;
        this.currenties[def.id].depositsPercent = new Array();
	},
    addPercent: function(obj) {
		var def = {
			id: 0,
			month: 0,
			percent: 0
		};
        obj.percent = obj.percent / 100;
		def = $.extend(def, obj);
		this.currenties[def.id].depositsPercent[this.currenties[def.id].depositsPercent.length] = def;
	},
    init: function(obj) {
//        var def = {
//			percentDefault: 0,
//			sumMin: 0
//		};
//		def = $.extend(this, obj);
        
        this.objSum = $('#calc_sum');
        this.objDuration = $('#calc_duration');
        this.objProcentType = $("input[name='percent_type']:checked");        
        this.objCalculateBlock = $('#calculate_block');
        this.objSubmit = $('#startCalc');
        this.objCurrency = $('#sel6');
        
//        this.percentDefault = parseInt(this.percentDefault) / 100;
        
        this.currencyId = this.objCurrency.parent().find('option:selected').val();
        this.currency = this.currencyId; 

        this.objCalculateBlock.hide();
        
        this.read();
        $('#calc_duration, #calc_sum').keyup(function(){
            calc_type_5.read();
		});
    },
    read: function() {
        this.objProcentType = $("input[name='percent_type']:checked"); 
        
        this.sum = parseInt(this.objSum.val().toString().split(' ').join(''));
		this.duration = parseInt(this.objDuration.val());
		this.percentType = parseInt(this.objProcentType.val());
        
        this.objCurrency = $('#sel6');
        this.currencyId = this.objCurrency.val();        
        this.currency = this.currtype[this.currencyId - 1];
        this.acc = this.currAcc[this.currencyId - 1];
        
		this.checkErrors();        
    },
    checkErrors: function() {
		this.hasErrors = true;
		if (!this.objSum.parent().hasClass('error') &&
			!this.objDuration.parent().hasClass('error') &&
			!isNaN(this.sum) && 
			!isNaN(this.duration) &&
			this.sum > 0 && 
			this.duration > 0) this.hasErrors = false;
        
        if (this.hasErrors) {
            this.objSubmit.attr('disabled', 'disabled');
        } else {
            this.objSubmit.removeAttr('disabled');
        }
        
		return this.hasErrors;
	},
    getPercent: function(sum) {
		var percent;
        this.percentDefault = this.currenties[this.currencyId].percentDefault;
		percent = this.percentDefault;

		for (var i = 0; i<this.currenties[this.currencyId].depositsPercent.length; i++) {
            
			if (sum <= this.currenties[this.currencyId].depositsPercent[i].month) 
                percent = this.currenties[this.currencyId].depositsPercent[i].percent;
        }
		return percent;
	},

    calculate: function() {        
        this.read();
		if (!this.hasErrors) {
            this.objCalculateBlock.show();
            
            var month = 0;
            
            $('#rasch-vuplat .all').hide();
            
            var calculation = new Array();
            var sum = parseInt(this.sum);           // первоначальная сумма вклада
            var duration = parseInt(this.duration); // количество месяцев вклада
            
            var sum_end = this.sum;                 // конечная сумма вклада
            var period_end = 0;                     // сумма вклада на конец периода
            var percent = 0;                        // процентная ставка для текущего месяца
            var sum_percent = 0;                    // сумма по процентам для текущего месяца
            var sum_all_percent = 0;                // выплаты по процентам
            var checkSumEnd = 0;                    // сумма депозита с капитализацией на конец периода
            
            // процентная ставка для ВКЛАДА
            percent = this.getPercent(duration);
//            duration = 3;
            for (var i = 1; i <= duration; i++) {
//                // процентная ставка для текущего месяца

/*                // сумма по процентам для текущего месяца
                sum_percent = 0;
                // с капитализацией
                if (this.percentType == 1) {
                    sum_percent = sum_end * Math.pow((1 + percent/12), i) - sum_end;
//                    sum_percent = this.sum * Math.pow((1 + percent/12), i) - this.sum;
                    period_end = sum + sum_percent;
                    sum_all_percent = sum_percent;
                } 
                // без капитализации
                else {
                    sum_percent = sum_end * percent/12;
                    period_end = sum_end + sum_percent;
                    sum_all_percent = sum_all_percent + sum_percent;
                }*/
                
                // сумма по процентам для текущего месяца
                sum_percent = 0;
                if (this.percentType == 1) {
                    // процентная ставка для данной сумм
                    percent = this.getPercent(sum_end);
                    
                    sum_percent = sum_end * percent/12 //sum_end * Math.pow((1 + percent/12), i) - sum_end;
                    period_end = sum_end + sum_percent;
                    sum_all_percent = sum_all_percent + sum_percent;
                } 
                // без капитализации
                else {
                    // процентная ставка для данной сумм
                    percent = this.getPercent(sum);
                
                    sum_percent = sum * percent/12;
                    period_end = sum_end + sum_percent;
//                    period_end = sum_end + sum_percent;
                    sum_all_percent = sum_all_percent + sum_percent;
                    sum_end = sum;
                }
                
                // запоминаем строку периода
				calculation[i] = {
					'sum' : sum_end,
					'period_end' : period_end,
					'percent' : percent,
					'sum_percent' : sum_percent,
					'percent' : percent
				};                
                sum_end = period_end;
            }
            
// Сумма вклада: 	10 000 000 бел. руб.
            var str = number_format(sum, 0, ',', ' ');
			$('#sum_main').text(str);
// Сумма выплаченных процентов: 	150 000 бел. руб.
			str = number_format(sum_all_percent, this.acc, ',', ' ');
			$('#sum_percent').text(str);
// Общая сумма выплат: 	18 500 000 бел. руб.
            str = number_format(sum_end, this.acc, ',', ' ');
			$('#sum_all').text(str);
            
            $('.defcurr').text(this.currency);
            
            var tbody1 = this.objCalculateBlock.find('table#rasch-vuplat tbody.vis').empty();
            var tbody = this.objCalculateBlock.find('table#rasch-vuplat tbody.all').empty();

			for (i = 1; i <= duration; i++) {
                str = '';
                
				str += '<tr>';
                str += '<th>' + i + '</th>';
                str += '<td>' + number_format(calculation[i].sum, 0, ',', ' ') + '</td>'; // основной долг
                str += '<td>' + number_format(calculation[i].percent * 100, 2, ',', ' ') + '</td>'; // основной долг
                str += '<td>' + number_format(calculation[i].sum_percent, this.acc, ',', ' ') + '</td>'; // основной долг
                str += '<td class="last">' + number_format(calculation[i].period_end, this.acc, ',', ' ') + '</td>'; // к выплате
                str += '</tr>';

                if (i == 1) tbody1.append(str);
                else tbody.append(str);
			}
            
            $('#rasch-vuplat .all').show();
            
            visHeightTableRV = $('#table-rasch-vuplat table thead').height()
                + $('#table-rasch-vuplat table tbody.vis').height();
            var h = $('#table-rasch-vuplat table').height();
            flagTableRV = generalShowBlock('table-rasch-vuplat', h, visHeightTableRV, 700, !flagTableRV);

        }
    }
    
};



jQuery.fn.checkInputNumber = function(options) {
	var options = jQuery.extend({
		min: 1,
		max: 12,
		text: '',
		comments: '',
		errors: {
			min: 'Минимальное значение - {min}',
			max: 'Максимальное значение - {max}',
			notnumber: 'Введенная строка должна быть числом',
			def: 'Ошибка ввода'
		}
	}, options);

	return this.each(function(){
		var str = '';
		if (options.text) str += '<span>'+options.text+'</span>';
		if (options.comments) str += '<p class="calcBlockParam-info">'+options.comments+'</p>';

		jQuery(this).after(str).data('options', options);

		function checkInputNumber_errorTemplate(input, template, options) {
			var str = '';
			if (template) {
				var insertTemplateBegin = '<a class="activLinkLine" href="" onclick="return false;">';
				var insertTemplateEnd = '</a>';

				var minStr = number_format(options.min, 0, ',', ' ');
				var maxStr = number_format(options.max, 0, ',', ' ');

				str = template.replace(/{min}/i, insertTemplateBegin + minStr + insertTemplateEnd);
				str = str.replace(/{max}/i, insertTemplateBegin + maxStr + insertTemplateEnd);

				if (str) {
					input.parent()
					.after('<p class="calcBlockParam-error">'+str+'</p>')
					.parent().find('.calcBlockParam-error a')
					.mousedown(function(){
						jQuery(this).parent().parent().find('input[type="text"]').val(jQuery(this).text()).keyup();return false;
					});
				}
			}
			return str;
		}

		jQuery(this).bind('keypress', {options : options}, function(event){
//			var str = String.fromCharCode(event.charCode);
			var str = String.fromCharCode(event.which);
			var r = new RegExp("^[0-9]+$");
			if (event.which == 0 || event.which == 8 || r.test(str)) return true;
				else return false;
		});

		jQuery(this).bind('keyup click', {options : options}, function(event){
			var errorType = 0;
			var value = jQuery(this).val();
			if (value) value = value.toString().split(' ').join('').replace(/[^0-9]+/gi, '');
			var r = new RegExp("^[\-]{0,1}[1-9]{0,1}[0-9]+$");

			if (value && !r.test(value)) errorType = 1;

			if (!value) value = 0;
				else jQuery(this).val(number_format(value, 0, ',', ' '));

			if (!errorType) {
				value = parseInt(value);
				if (event.data.options.min != 'none' && value < Math.floor(event.data.options.min)) errorType = 2;
				if (event.data.options.max != 'none' && value > Math.floor(event.data.options.max)) errorType = 3;
			}

			jQuery(this).parent().parent().find('.calcBlockParam-error').remove();
			if (errorType) {
				var errorTemplate = event.data.options.errors.def;

				if (errorType == 1) {
					// введенная строка не число
					if (event.data.options.errors.notnumber) errorTemplate = event.data.options.errors.notnumber;
				}
				else if (errorType == 2) {
					// введено число меньше options.min
					if (event.data.options.errors.min) errorTemplate = event.data.options.errors.min;
				}
				else if (errorType == 3) {
					// введено число больше options.max
					if (event.data.options.errors.max) errorTemplate = event.data.options.errors.max;
				}
				jQuery(this).parent().addClass('error');
				checkInputNumber_errorTemplate(jQuery(this), errorTemplate, event.data.options);
			}
			else {
				jQuery(this).parent().removeClass('error');
			}

		});
	});
};



jQuery.fn.checkCounter = function(options) {
    var options = jQuery.extend({
        min: 1,
        max: 12,
        width: '30px',
        text: '',
        comments: '',
        errors: {
            min: 'Минимальное значение - {min}',
            max: 'Максимальное значение - {max}',
            notnumber: 'Введенная строка должна быть числом',
            def: 'Ошибка ввода'
        }
    }, options);

    return this.each(function(){
        jQuery(this).data('options', options);

        var str = '<div class="forCounter"><div class="counterBox"></div>';
        if (options.text) str += '<span>'+options.text+'</span>';
        if (options.comments) str += '<p class="calcBlockParam-info">'+options.comments+'</p>';
        str += '</div>';
        jQuery(this).wrap(str).css('width', options.width);

        function checkCounter_errorTemplate(input, template, options) {
            var str = '';

            if (template) {
                var insertTemplateBegin = '<a class="activLinkLine" href="" onclick="return false;">';
                var insertTemplateEnd = '</a>';

                str = template.replace(/{min}/i, insertTemplateBegin + options.min + insertTemplateEnd);
                str = str.replace(/{max}/i, insertTemplateBegin + options.max + insertTemplateEnd);

                if (str) {
                    input.parent().parent()
                    .append('<p class="calcBlockParam-error">'+str+'</p>')
                    .find('.calcBlockParam-error a')
                    .mousedown(function(){
                        jQuery(this).parent().parent().find('input').val(jQuery(this).text()).keyup().focus();return false;
                    });
                }
            }
            return str;
        }
        
        jQuery(this).bind('keypress', {options : options}, function(event){
//			var str = String.fromCharCode(event.charCode);
			var str = String.fromCharCode(event.which);

			var r = new RegExp("^[0-9]+$");
			if (event.which == 0 || event.which == 8 || r.test(str)) return true;
				else return false;
		});

        jQuery(this).bind('keyup click', {options : options}, function(event){
            var errorType = 0;
			var value = jQuery(this).val();
			if (value) value = value.toString().split(' ').join('').replace(/[^0-9]+/gi, '');
			var r = new RegExp("^[\-]{0,1}[1-9]{0,1}[0-9]+$");

			if (value && !r.test(value)) errorType = 1;

			if (!value) value = 0;
				else jQuery(this).val(number_format(value, 0, ',', ' '));
                
            if (!errorType) {
                value = parseInt(value);
                if (event.data.options.min != 'none' && value < event.data.options.min) errorType = 2;
                if (event.data.options.max != 'none' && value > event.data.options.max) errorType = 3;
            }

            jQuery(this).parent().parent().find('.calcBlockParam-error').remove();
            if (errorType) {
                var errorTemplate = event.data.options.errors.def;
                var str;

                if (errorType == 1) {
                    // введенная строка не число
                    jQuery(this).parent().find('.counterDown, .counterUp').addClass('disableCount');
                    if (event.data.options.errors.notnumber) errorTemplate = event.data.options.errors.notnumber;
                }
                else if (errorType == 2) {
                    // введено число меньше options.min
                    jQuery(this).parent().find('.counterDown').addClass('disableCount').parent().find('.counterUp').removeClass('disableCount');
                    if (event.data.options.errors.min) errorTemplate = event.data.options.errors.min;
                }
                else if (errorType == 3) {
                    // введено число больше options.max
                    jQuery(this).parent().find('.counterUp').addClass('disableCount').parent().find('.counterDown').removeClass('disableCount');
                    if (event.data.options.errors.max) errorTemplate = event.data.options.errors.max;
                }
                jQuery(this).parent().addClass('error');
                checkCounter_errorTemplate(jQuery(this), errorTemplate, event.data.options);
            }
            else {
                jQuery(this).parent().removeClass('error');

                value = parseInt(value);
                if (value == event.data.options.min)
                    jQuery(this).parent().find('.counterDown').addClass('disableCount').parent().find('.counterUp').removeClass('disableCount');
                else if (value == event.data.options.max)
                    jQuery(this).parent().find('.counterUp').addClass('disableCount').parent().find('.counterDown').removeClass('disableCount');
                else
                    jQuery(this).parent().find('.counterUp, .counterDown').removeClass('disableCount');
            }
        }); /*.keyup()*/
    });
};



