
// текущая введённая сумма
var current_sum = -1;




// массив месяц->самая_выгодня_конечная_сумма
var deposit_arr = new Array;
for(var i=0; i<=36; i++){
	deposit_arr[i]=-1;
}


// пересчёт массива месяц-сумма для текущей суммы
function recount_deposit_arr(sum){
	var i = 0; //месяц
	var sum_max = -1; // максимальная сумма
	var sum_temp = -1; // временная переменная
	var sum_cur = -1; // сумма для данного депозита
	var month_proc = 0; // процент в месяц (не размер процента, а сумма бонуса по нему)
	var dd = 0;
	var month = 0;
	for(i=1; i<=36; i++){
		sum_max = -1;
		for(var key in deposit_data){
			dd = deposit_data [key];
			if(i>=dd['month_from'] && i<=dd['month_to']){
				sum_temp = -1;
				sum_cur = sum;
				sum_temp = sum;
				month = i;
				while(month>0){
					month_proc = ((sum_cur / 100) * dd['procent']) / 12;
					for(var j = 1; (j<=month && j<=12); j++){
						sum_temp += month_proc;
					}
					if(dd['kapital']==1){
						sum_cur = sum_temp;
					}
					month -= 12;
				}
				if(sum_temp>sum_max){
					sum_max = sum_temp;
				}
			}
		}
		//deposit_arr[i] = sum_max.toFixed(2);
		deposit_arr[i] = sum_max.toFixed(0);
	}
}

// возвращает конечную сумму
function deposit_final_sum(sum, month){
	sum = parseInt(sum);
	month = parseInt(month);

	if(month==0)
		return sum;
	if(month<0 || month>36)
		return -1;

	if (current_sum != sum) {
		current_sum = sum;
		recount_deposit_arr(sum)
	}

	return deposit_arr[month];
}

function deposit_final_sum_once(sum, month){
	var i = month; //месяц
	var sum_max = -1; // максимальная сумма
	var sum_temp = -1; // временная переменная
	var sum_cur = -1; // сумма для данного депозита
	var month_proc = 0; // процент в месяц (не размер процента, а сумма бонуса по нему)
	var dd = 0;
	var month = 0;

	sum_max = -1;
	for(var key in deposit_data){
		dd = deposit_data [key];
		if(i>=dd['month_from'] && i<=dd['month_to']){
			sum_temp = -1;
			sum_cur = sum;
			sum_temp = sum;
			month = i;
			while(month>0){
				month_proc = ((sum_cur / 100) * dd['procent']) / 12;
				for(var j = 1; (j<=month && j<=12); j++){
					sum_temp += month_proc;
				}
				if(dd['kapital']==1){
					sum_cur = sum_temp;
				}
				month -= 12;
			}
			if(sum_temp>sum_max){
				sum_max = sum_temp;
			}
		}
	}
		
	return sum_max.toFixed(2);
}

function deposit_start_sum(sum, month){
	//приближенное вычисление стартовой суммы
	sum_1 = 10;
	sum_2 = 2000000;

	pogr = sum_2;	

	while(Math.abs(pogr)>100){
		st_1 = deposit_final_sum_once(sum_1, month);
		st_2 = deposit_final_sum_once(sum_2, month);
		if(st_1==-1 || st_2==-1){
			return -1;
		}
		pogr = st_1 - st_2;
		
		sum_3 = (sum_1 + sum_2)/2;

		if(deposit_final_sum_once(sum_3, month)>sum){
			sum_2 = sum_3;
		} else {
			sum_1 = sum_3;
		}
	}

	return Math.round(sum_3);
}


