//////////////////////////////////////// Functions

function trim(str)
{
  var re1 = /^\s*/;
  var re2 = /\s*$/;
return str.replace(re1, "").replace(re2, "");
}

function roundNumber(number,x) {
x = x * 10;
return (x ? ((Math.round(number * x))/x) : Math.round(number));
} 

function print(str)
{
str = str + '';
var i;
var nStr = '';
var k = 0;

for (i=str.length-1; i>=0; i--)
{
	nStr =  str.charAt(i) + nStr;
	k++;
	if (str.charAt(i)=='.') k=0;
	if (k==3)
	{
		nStr = ' ' + nStr;
		k = 0;
	}
}
return nStr;
}

function Obj(obj)
{ 
	return document.getElementById(obj); 
}

//////////////////////////////////////// 




function CLASS_CALC()
{
	this.parametr = new Array();
	this.price = Obj('price').value;
	this.period = Obj('period').value;
	this.predoplata = Obj('pred').value;
	this.valuta = Obj('money').value;
	if (Obj('annuitet').checked)
		this.annuitet = 1;
	else this.annuitet = 0; 


	this.add_parametr = function(a)
	{
		this.parametr.push(a); 
	};
    
    this.valid = function() 
    { 
		 var errFlag = new Array();
		 var _qfGroups = {};
		 _qfMsg = '';

		 var value = document.getElementById('price').value;

		if (trim(value) == '' && !errFlag['price']) {
			errFlag['price'] = true;
		_qfMsg = _qfMsg + '\n- Не введена Стоимость объекта лизинга';
		}   
  
		var regex = /^[0-9]+$/;

		if ((value != '' && !regex.test(value) || (value==0)) && !errFlag['price']) {
			errFlag['price'] = true;
		_qfMsg = _qfMsg + '\n- Стоимость объекта лизинга введена неверно';
		}

		if (_qfMsg != '') {
		_qfMsg = 'Ошибка! Проверьте введенную информацию' + _qfMsg;
		_qfMsg = _qfMsg + '\nПожалуйста, исправьте неверные данные';
		alert(_qfMsg);  
		return false;
		}
		
		return true;
    };

	this.annuit = function()
	{
		var summaNds = this.price * this.parametr[0] / 1.2;
		var summaBezNds = this.price - summaNds;
		var avans = this.price * this.predoplata / 100;
		var avans_bez_nds = summaBezNds * this.predoplata / 100;

		//var proc_stavka = 14.4;

		switch(this.period)
		{
			case "13": proc_stavka = 44.40; break;
			case "18": proc_stavka = 31.20; break;
			case "24": proc_stavka = 28.80; break;
			case "30": proc_stavka = 27.10; break;
			case "36": proc_stavka = 25.20; break;
		};

		var Tlizing_stavka = 0;
		var Tlizing_plateg = 0; 
		var Tnds_lizing_st = 0; 
		var Tnds_lizing_pl = 0; 
		var Titogo_pl = 0;

		var valuta = "BYR"; 
		var okr = 0; 
		var txt = " руб. ";

		switch(this.valuta)
		{
			case "1": valuta = "BYR"; okr = 0; txt = " руб. "; break;
			case "2": valuta = "USD"; okr = 2; txt = " USD "; this.parametr[2] = 19; this.parametr[1] = 0; break;
			//case "3": valuta = "EUR"; okr = 3; txt = " EUR "; break;
		};

	    var ostatok = this.price - avans;
		var platej = ostatok * proc_stavka / 12 / 100 / (1 - Math.pow((1 + proc_stavka / 12 / 100), - this.period));
		
		var ostatok_bez_nds = summaBezNds - avans_bez_nds; 
		

		Obj('summaBezNds').innerHTML = print(roundNumber(summaBezNds,okr)) + txt;
		Obj('summaNds').innerHTML = print(roundNumber(summaNds,okr)) + txt;
		Obj('summaSNds').innerHTML = print(this.price) + txt;
		Obj('avans').innerHTML = print(avans) + txt;
		Obj('valuta').innerHTML = valuta;

		if(ostatok)
			{
				table= '<p><b>График платежей и ежемесячная выплата</b></p><br/><table id="Result" border="0"  width="98%" cellpaddin="4"><tr align="center"><td rowspan="2" width="50" style="Text-align:center"><b>Месяц</b></td><td rowspan="2" align="center" style="Text-align:center"><b>Непогашенная стоимость на нач.периода (основной долг)</b></td><td colspan="2" style="Text-align:center"><b>Лизинговые платежи без НДС, в том числе</b></td><td width="" colspan="2" align="center" style="Text-align:center"><b>НДС, в том числе</b></td><td width="" rowspan="2" align="center" style="Text-align:center"><b>Лизинговые платежи с НДС (гр.3+гр.4+гр.5+гр.6)</b></td></tr>';
				table+= '<tr align="center" style="Text-align:center"><td style="Text-align:center"><b>Лизинговая ставка</b></td><td width="" style="Text-align:center"><b>Стоимость без НДС</b></td> <td width="" style="Text-align:center"><b>НДС на лизинговую ставку (гр.3*20%)</b></td><td width="" style="Text-align:center"><b>НДС на стоимость (гр.4*20%)</b></td></tr>';
				tmpcolor = '#78a2cc';
				table+= '<tr bgcolor="#ebeef7" align="center"><td width="" align="center" style="Text-align:center"><b>1</b></td><td align="center" style="Text-align:center" width="120"><b>2</b></td><td align="center" style="Text-align:center" width="90"><b>3</b></td><td width="90" align="center" style="Text-align:center"><b>4</b></td><td align="center" style="Text-align:center" width="90"><b>5</b></td><td align="center" style="Text-align:center" width="90"><b>6</b></td><td align="center" style="Text-align:center"><b>7</b></td> </tr>';
				table+= '<tr align="center"><td width="" align="center">&nbsp;</td><td align="center" style="Text-align:right">'+print(roundNumber(this.price))+'</td><td align="right" style="Text-align:right">-</td><td align="right" style="Text-align:right">'+print(roundNumber(avans_bez_nds))+'</td><td align="right" style="Text-align:right">-</td><td align="right" style="Text-align:right">'+print(roundNumber((summaBezNds*this.predoplata/100)*this.parametr[0]))+'</td><td align="right" style="Text-align:right">'+print(avans)+'</td> </tr>';

				for(i=1; i<=this.period; i++)
					{
						if(ostatok<0) break;
						//if (i==1)
						//	lizing_stavka = (ostatok * this.parametr[2] / 360 * 30 / 100) * this.parametr[4] + (ostatok * this.parametr[3] / 100) + (i<=12 ? this.parametr[1]: 0 );
					//else 
							lizing_stavka = (ostatok * proc_stavka / 100 / 12 * 100 / 120);
		
						

						nds_lizing_st = lizing_stavka * this.parametr[0];
						
						lizing_plateg = (platej - lizing_stavka - nds_lizing_st) * 100 / 120; 
						nds_lizing_pl = lizing_plateg * this.parametr[0];
						itogo_pl = lizing_stavka+lizing_plateg+nds_lizing_st+nds_lizing_pl;

						Tlizing_stavka+=lizing_stavka;
						Tlizing_plateg+=lizing_plateg;
						Tnds_lizing_st+=nds_lizing_st;
						Tnds_lizing_pl+=nds_lizing_pl;
						Titogo_pl+=itogo_pl;

						if (tmpcolor=='#f9fafd')
							tmpcolor='#ffffff';
						else
							tmpcolor='#f9fafd';
						
						table=table+'<tr bgcolor="'+tmpcolor+'" align="right" style="Text-align:right"><td style="Text-align:right">'+i+'</td><td style="Text-align:right">'+print(roundNumber(ostatok,okr))+'</td><td style="Text-align:right">'+print(roundNumber(lizing_stavka,okr))+'</td><td style="Text-align:right">'+print(roundNumber(lizing_plateg,okr))+'</td><td style="Text-align:right">'+print(roundNumber(nds_lizing_st,okr))+'</td><td style="Text-align:right">'+print(roundNumber(nds_lizing_pl,okr))+'</td><td style="Text-align:right">'+print(roundNumber(itogo_pl,okr))+'</td></tr>';
						ostatok-= lizing_plateg + lizing_plateg * this.parametr[0];
					}
				table+= '<tr bgcolor="#ebeef7" align="left"><td colspan="2"><b>ВСЕГО</b></td><td align="right" style="Text-align:right">'+print(roundNumber(Tlizing_stavka,okr))+'</td><td align="right" style="Text-align:right">'+print(roundNumber(Tlizing_plateg + avans_bez_nds,okr))+'</td><td align="right" style="Text-align:right">'+print(roundNumber(Tnds_lizing_st,okr))+'</td><td align="right" style="Text-align:right">'+print(roundNumber(Tnds_lizing_pl + (summaBezNds*this.predoplata/100) * this.parametr[0],okr))+'</td><td align="right" style="Text-align:right">'+print(roundNumber(Titogo_pl + avans,okr))+'</td></tr>';
				Obj('tablep').innerHTML = table+'</table>';
			}

	};

	this.calc = function()
	{ 
		
		var valid = this.valid();
		if (!valid) return false;
		if (this.annuitet)
		{
			this.annuit();
			return false;
		};

		var summaNds = this.price * this.parametr[0] / 1.2;
		var summaBezNds = this.price - summaNds;
		var avans = this.price * this.predoplata / 100;
		var avans_bez_nds = summaBezNds * this.predoplata / 100;

		var Tlizing_stavka = 0;
		var Tlizing_plateg = 0; 
		var Tnds_lizing_st = 0; 
		var Tnds_lizing_pl = 0; 
		var Titogo_pl = 0;

		var valuta = "BYR"; 
		var okr = 0; 
		var txt = " руб. ";

		switch(this.valuta)
		{
			case "1": valuta = "BYR"; okr = 0; txt = " руб. "; break;
			case "2": valuta = "USD"; okr = 2; txt = " USD "; this.parametr[2] = 19; this.parametr[1] = 0; break;
			//case "3": valuta = "EUR"; okr = 3; txt = " EUR "; break;
		};

	    var ostatok = this.price - avans;
		var ostatok_bez_nds = summaBezNds - avans_bez_nds; 
		var lizing_plateg = (summaBezNds - avans_bez_nds) / this.period;

		Obj('summaBezNds').innerHTML = print(roundNumber(summaBezNds,okr)) + txt;
		Obj('summaNds').innerHTML = print(roundNumber(summaNds,okr)) + txt;
		Obj('summaSNds').innerHTML = print(this.price) + txt;
		Obj('avans').innerHTML = print(avans) + txt;
		Obj('valuta').innerHTML = valuta;

		if(ostatok)
			{
				table= '<p><b>График платежей и ежемесячная выплата</b></p><br/><table id="Result" border="0"  width="98%" cellpaddin="4"><tr align="center"><td rowspan="2" width="50" style="Text-align:center"><b>Месяц</b></td><td rowspan="2" align="center" style="Text-align:center"><b>Непогашенная стоимость на нач.периода (основной долг)</b></td><td colspan="2" style="Text-align:center"><b>Лизинговые платежи без НДС, в том числе</b></td><td width="" colspan="2" align="center" style="Text-align:center"><b>НДС, в том числе</b></td><td width="" rowspan="2" align="center" style="Text-align:center"><b>Лизинговые платежи с НДС (гр.3+гр.4+гр.5+гр.6)</b></td></tr>';
				table+= '<tr align="center" style="Text-align:center"><td style="Text-align:center"><b>Лизинговая ставка</b></td><td width="" style="Text-align:center"><b>Стоимость без НДС</b></td> <td width="" style="Text-align:center"><b>НДС на лизинговую ставку (гр.3*20%)</b></td><td width="" style="Text-align:center"><b>НДС на стоимость (гр.4*20%)</b></td></tr>';
				tmpcolor = '#78a2cc';
				table+= '<tr bgcolor="#ebeef7" align="center"><td width="" align="center" style="Text-align:center"><b>1</b></td><td align="center" style="Text-align:center" width="120"><b>2</b></td><td align="center" style="Text-align:center" width="90"><b>3</b></td><td width="90" align="center" style="Text-align:center"><b>4</b></td><td align="center" style="Text-align:center" width="90"><b>5</b></td><td align="center" style="Text-align:center" width="90"><b>6</b></td><td align="center" style="Text-align:center"><b>7</b></td> </tr>';
				table+= '<tr align="center"><td width="" align="center">&nbsp;</td><td align="center" style="Text-align:right">'+print(roundNumber(this.price))+'</td><td align="right" style="Text-align:right">-</td><td align="right" style="Text-align:right">'+print(roundNumber(avans_bez_nds))+'</td><td align="right" style="Text-align:right">-</td><td align="right" style="Text-align:right">'+print(roundNumber((summaBezNds*this.predoplata/100)*this.parametr[0]))+'</td><td align="right" style="Text-align:right">'+print(avans)+'</td> </tr>';

				for(i=1; i<=this.period; i++)
					{
						if(ostatok<0) break;
						if (i==1)
							lizing_stavka = (ostatok * this.parametr[2] / 360 * 30 / 100) * this.parametr[4] + (ostatok * this.parametr[3] / 100) + (i<=12 ? this.parametr[1]: 0 );
						else lizing_stavka = (ostatok * this.parametr[2] / 360 * 30 / 100) + (ostatok * this.parametr[3] / 100) + (i<=12 ? this.parametr[1]: 0 );
		
						nds_lizing_st = lizing_stavka * this.parametr[0];
						nds_lizing_pl = lizing_plateg * this.parametr[0];
						itogo_pl = lizing_stavka+lizing_plateg+nds_lizing_st+nds_lizing_pl;

						Tlizing_stavka+=lizing_stavka;
						Tlizing_plateg+=lizing_plateg;
						Tnds_lizing_st+=nds_lizing_st;
						Tnds_lizing_pl+=nds_lizing_pl;
						Titogo_pl+=itogo_pl;

						if (tmpcolor=='#f9fafd')
							tmpcolor='#ffffff';
						else
							tmpcolor='#f9fafd';
						
						table=table+'<tr bgcolor="'+tmpcolor+'" align="right" style="Text-align:right"><td style="Text-align:right">'+i+'</td><td style="Text-align:right">'+print(roundNumber(ostatok,okr))+'</td><td style="Text-align:right">'+print(roundNumber(lizing_stavka,okr))+'</td><td style="Text-align:right">'+print(roundNumber(lizing_plateg,okr))+'</td><td style="Text-align:right">'+print(roundNumber(nds_lizing_st,okr))+'</td><td style="Text-align:right">'+print(roundNumber(nds_lizing_pl,okr))+'</td><td style="Text-align:right">'+print(roundNumber(itogo_pl,okr))+'</td></tr>';
						ostatok-= lizing_plateg + lizing_plateg * this.parametr[0];
					}
				table+= '<tr bgcolor="#ebeef7" align="left"><td colspan="2"><b>ВСЕГО</b></td><td align="right" style="Text-align:right">'+print(roundNumber(Tlizing_stavka,okr))+'</td><td align="right" style="Text-align:right">'+print(roundNumber(Tlizing_plateg + avans_bez_nds,okr))+'</td><td align="right" style="Text-align:right">'+print(roundNumber(Tnds_lizing_st,okr))+'</td><td align="right" style="Text-align:right">'+print(roundNumber(Tnds_lizing_pl + (summaBezNds*this.predoplata/100) * this.parametr[0],okr))+'</td><td align="right" style="Text-align:right">'+print(roundNumber(Titogo_pl + avans,okr))+'</td></tr>';
				Obj('tablep').innerHTML = table+'</table><br/><img src="/bitrix/templates/main/images/printer.gif" border="0"> <a href="">Распечатать</a>';
			}
	};   
} 

function calc()
{
	var MyShit = new CLASS_CALC();
		MyShit.add_parametr(0.2); // Ставка НДС
		MyShit.add_parametr(125000); // Тариф первых 12 месяцев
		MyShit.add_parametr(21);
		MyShit.add_parametr(0.7); 
		MyShit.add_parametr(1.3);
		MyShit.calc();
};
