Your IP : 216.73.216.170


Current Path : /home/bitrix/ext_www/vebeng.yacl.site/js/
Upload File :
Current File : /home/bitrix/ext_www/vebeng.yacl.site/js/bim_calc.js

$(function () {

	function futureValue(rate, nper, pmt, pv, type) {
		if (!pv) 
			pv = 0;
		if (!type) 
			type = 0;
	    var pow = Math.pow(1 + rate, nper), fv;
	    if (rate) {
	        fv = (pmt * (1 + rate * type) * (1 - pow) / rate) - pv * pow;
	    } else {
	        fv = -1 * (pv + pmt * nper);
	    }
	    return fv.toFixed(2);
	}

	var inputData = {
		'capital_year': '12',
		'duration_month': '36',
		'duration_year': '3',
		'budget': '2000',
		'PIR_percentage': '10',
		'SMR_percentage': '60',
	};

	var getRealData = function(inputData) {
		var result = inputData;
		for (var code in inputData) {
			var realData = $('.calc_' + code).val();
			if (!!realData)
				result[code] = parseInt(realData);
		}
		// result.duration_month = parseInt($('.calc_duration_year').val()) * 12;

		return result;
	}

	var setCalculatedValues = function(calculatedData) {
		calculatedData.capital_month = calculatedData.capital_month.toFixed(2);
		calculatedData.payment_monthly = calculatedData.payment_monthly.toFixed(2);
		calculatedData.SMR_new_percent = calculatedData.SMR_new_percent.toFixed(1);
		calculatedData.SMR_new_value = calculatedData.SMR_new_value.toFixed(1);
		calculatedData.PIR_new_percent = calculatedData.PIR_new_percent.toFixed(1);
		calculatedData.PIR_new_value = calculatedData.PIR_new_value.toFixed(1);
		calculatedData.budget_effect_percent = calculatedData.budget_effect_percent.toFixed(1);
		calculatedData.budget_effect_value = calculatedData.budget_effect_value.toFixed(1);
		calculatedData.budget_new = calculatedData.budget_new.toFixed(1);
		for (var code in calculatedData) {
			if (calculatedData[code] == 'Infinity' || calculatedData[code] == 'NaN') {
				calculatedData[code] = 'невозможно определить';
			}
			$('.calc_result_' + code).html(calculatedData[code]);
		}
	}

	var calculateBim = function(inputData) {
   	    inputData = getRealData(inputData);

		var calculatedData = inputData;
		calculatedData.capital_month = (Math.pow((100 + parseInt(inputData.capital_year))/100, 1/12) - 1) * 100;
		calculatedData.payment_monthly = inputData.budget / inputData.duration_month;
		calculatedData.equipment_percentage = 100 - (parseInt(inputData.PIR_percentage) + parseInt(inputData.SMR_percentage));

		calculatedData.PIR_new_percent = 25;
		calculatedData.PIR_new_value = inputData.PIR_percentage / 100 * inputData.budget * calculatedData.PIR_new_percent / 100;
		calculatedData.SMR_new_percent = -23;
		calculatedData.SMR_new_value = inputData.SMR_percentage / 100 * inputData.budget * calculatedData.SMR_new_percent / 100;

		calculatedData.budget_effect_value = calculatedData.SMR_new_value + calculatedData.PIR_new_value;
		calculatedData.budget_effect_percent = calculatedData.budget_effect_value / inputData.budget * 100;
		calculatedData.budget_new = calculatedData.budget_effect_value + parseInt(inputData.budget);

		calculatedData.duration_effect_percent = -19;
		calculatedData.duration_effect_value = inputData.duration_month * calculatedData.duration_effect_percent / 100 ;

		calculatedData.future_investment_without_bim = - futureValue(calculatedData.capital_month / 100, inputData.duration_month, calculatedData.payment_monthly);
		calculatedData.future_investment_bim = - futureValue(calculatedData.capital_month / 100, 
														   parseFloat(inputData.duration_month) + parseFloat(calculatedData.duration_effect_value), 
														   calculatedData.budget_new / (parseFloat(inputData.duration_month) + parseFloat(calculatedData.duration_effect_value)));
		calculatedData.final_effect = (calculatedData.future_investment_without_bim - calculatedData.future_investment_bim).toFixed(1);
		calculatedData.duration_effect_budget = (parseFloat(calculatedData.final_effect) + parseFloat(calculatedData.SMR_new_value)).toFixed(1);

		setCalculatedValues(calculatedData);
		return calculatedData;
	}

	if ($('.calculator-slider-item').length) {
		$('.slider').each(function() {
			var input = $(this).closest('.slider-holder').next('.form-field').find('input');
			var data = $(this).data();
			var justInput = $(this).closest('form').find('.just_input');

			var slider = $(this).slider({
				min: data.min,
				max: data.max,
				range: false,
				value: data.value,
				step: data.step,
				slide: function( event, ui ) {
				  input.val(ui.value);
				  calculateBim(inputData);
				}
			});

			input.on('keyup', function() {
				var value = $(this).val();

				if (value > data.max) {
				  value = data.max;
				}

				if (value < data.min) {
				  value = data.min;
				}

				$(this).val(value);  		
				calculateBim(inputData);

				slider.slider('value', value);
			});

			justInput.on('keyup', function() {
				calculateBim(inputData);
			});
		});
	}	

	calculateBim(inputData);
});