var active = '';

function getEl( id )
{
	var el;
	el = document.getElementById(id);
	if(!el) return 0;

	return el;
}

function focus(id)
{
	var el = getEl(id);
	if( !el ) return;
	el.focus();
}

function activate(id)
{
	var el = getEl(id);
	if( !el ) return;
	el.className = 'active';
//	el.onfocus = function() { this.blur(); } ;
//	el.disabled = true;
}

function deactivate(id)
{
	var el = getEl(id);
	if( !el ) return;
	el.className = 'inactive';
//	el.onfocus = function() { };
//	el.disabled = false;
}

function change2(id) 
{
	var el = getEl('sel_type_' + id);
	if( !el ) return;
	el.checked = true;
	
}

function change(id) 
{
	if( active == 'period' ) {
//		deactivate('period_y');
		deactivate('period_m');
	} else {
		deactivate(active);
	}

	if( id == 'period' ) {
//		activate('period_y');
		activate('period_m');
		focus('period_m');		
	} else {
		activate(id);
		focus(id);
	}

	var radio = getEl('sel_' + id);
	if(radio) radio.checked = true;

	active = id;
}

function getVal(id)
{
	var el = getEl(id);
	if( !el ) return 0;
	return el.value;
}

function setVal(id, val)
{
	var el = getEl(id);
	if( !el ) return 0;
	el.value = val;
	return 1;
}

function t_rate(period, payment, sum, rate) 
{
	if ( rate != 0 ) return sum * rate / 1200 / ( 1 - Math.pow( 1 + rate / 1200, period * -1 ) ) - payment;
	else return sum / period - payment;
}


function calc_rate(period, payment, sum) 
{
	var step = 5;
	var currRate = 0;
	var lastRate = 0;
	var lastDiff = null;
	for ( var i = 0; i < 1000; i++ ) {
		var currDiff = t_rate(period, payment, sum, currRate);

		if ( lastDiff && Math.abs(currDiff) > Math.abs(lastDiff) ) {
			currRate = lastRate;
			step = step / 2;
		}

		if ( ( currDiff > 0 && step > 0 ) || ( currDiff < 0 && step < 0 ) ) step = step * -1;
		
		lastRate = currRate;
		lastDiff = currDiff;
		currRate += step;
	}

	return currRate;
}


function round(value) 
{
	value = Math.round( value * 100 ) / 100;
	var input = String(value);
	if (!input.length || input == 'NaN') input = '0';

	if (input.indexOf(".") == 0) input = '0' + input;
	if (input.indexOf(".") == -1) input += '.00';
		else input += '00';
	var pattern = /\d*.\d\d/;
	var result = String(pattern.exec(input));
	if (result != '') {
		return result;
	} else return '0.00'
}

function re_calc()
{
//	var z = getEl('zzz');
//	if(!z) return;
//	z.innerHTML = Math.random();

//	return true;

	var sum = parseFloat( getVal('sum') ) || 0;
	var rate = parseFloat( getVal('rate') ) || 0;
	var payment = parseFloat( getVal('paym') ) || 0;
	var period_years = 0; //parseInt( getVal('period_y') ) || 0;
	var period_months = parseInt( getVal('period_m') ) || 0;
	var period = period_years * 12 + period_months;

	var el = getEl('sel_type_r');
	if( !el ) return;

	if ( el.checked ) {
		if( active == 'sum' ) {
			var result = ( rate != 0 )? payment / ( (rate / 1200) / ( 1 - Math.pow( 1 + rate / 1200, period * -1 ) ) ) : payment * period;
			setVal('sum', round( result )); 
		} else if( active == 'paym' ) {
			var result = ( rate != 0 )? sum * rate / 1200 / ( 1 - Math.pow( 1 + rate / 1200, period * -1 ) ) : sum / period;
			setVal('paym', round( result )); 
		} else if( active == 'period' ) {
			var months = Math.round( Math.log( payment / ( payment - sum * rate / 1200 ) ) / Math.log( 1 + rate / 1200 ) );
			var years = Math.floor( months / 12 );
//			setVal( 'period_y', isNaN(years)? 1 : years);
//			setVal( 'period_m', isNaN(years)? 0 : months - years * 12);
			setVal( 'period_m', months);
		} else {
			setVal( 'rate', round( calcRate(period, payment, sum), true ) );
		}
	} else {
		if( active == 'sum' ) {
			setVal('sum', round( payment * period / ( 1 + rate * period / 1200 ) ) ); 
		} else if( active == 'paym' ) {
			setVal('paym', round( sum / period + sum * rate / 1200 )); 
		} else if( active == 'period' ) {
			var months = Math.round( sum / ( payment - sum * rate / 1200 ) );
			var years = Math.floor( months / 12 );
//			setVal('period_y', isNaN(years)? 0 : years);
//			setVal('period_m', isNaN(years)? 0 : months - years * 12);
			setVal('period_m', months);
		} else {
			setVal('rate', round( 1200 * ( payment / sum - 1 / period ), true )); 
		}
	}
//	errorCheck( tForm );
}

function get_plan()
{
	var sum = parseFloat( getVal('sum') ) || 0;
	var rate = parseFloat( getVal('rate') ) || 0;
	var payment = parseFloat( getVal('paym') ) || 0;
	var period_years = 0; //parseInt( getVal('period_y') ) || 0;
	var period_months = parseInt( getVal('period_m') ) || 0;
	var period = period_years * 12 + period_months;


	var html = '';
	html = '<table cellpadding="3" cellspacing="0" border="0" class="calc">';
	html += '<tr class="header"><td>Месяц</td><td>Сумма</td><td>% всего</td><td>Сумма + %</td><td>Остаток</td></tr>';

	var el = getEl('sel_type_r');
	if( !el ) return;

	if ( el.checked ) {
		var proc, s, s1 = 0, s2 = 0, s3 = 0;

		for( m = 1; m < period; m++ ) {
			proc = round( sum * rate / 1200 );
			s = round( payment - proc );
			s1 += parseFloat( s );
			s2 += parseFloat(proc);
			s3 += parseFloat(payment);
			sum -= s;
			sum = round( sum );

			html += '<tr class="' + (m%2?'odd':'even') + '"><td class="month">' + m + '</td>';
			html += '<td>' + s + '</td>';
			html += '<td>' + proc + '</td>';
			html += '<td>' + payment + '</td>';
			html += '<td>' + sum + '</td>';
			html += '</tr>\n';
		}
		sum = getVal('sum') - s1;
		proc = round( sum * rate / 1200 );
		s = round( sum );
		s1 = getVal('sum');
		s2 += parseFloat(proc);
		p = round( parseFloat(s) + parseFloat(proc) );
		s3 += parseFloat( p );
		sum -= s;
		sum = round( sum );

		html += '<tr class="' + (m%2?'odd':'even') + '"><td class="month">' + m + '</td>';
		html += '<td>' + s + '</td>';
		html += '<td>' + proc + '</td>';
		html += '<td>' + p + '</td>';
		html += '<td>' + sum + '</td>';
		html += '</tr>';
	} else {
		var proc, s, s1 = 0, s2 = 0, s3 = 0;
		s = round( sum / period );
		var fullsum = getVal('sum');

		for( m = 1; m < period; m++ ) {
			proc = round( sum * rate / 1200 );
			s1 += parseFloat( s );
			s2 += parseFloat(proc);
			p = round(parseFloat( s ) + parseFloat( proc ));
			s3 += parseFloat(p);
			sum = fullsum - s1;
			sum = round( sum );

			html += '<tr class="' + (m%2?'odd':'even') + '"><td class="month">' + m + '</td>';
			html += '<td>' + s + '</td>';
			html += '<td>' + proc + '</td>';
			html += '<td>' + p + '</td>';
			html += '<td>' + sum + '</td>';
			html += '</tr>';
		}
		s = round( Math.round((fullsum - parseFloat( s1 ))*100)/100 );
		proc = round( parseFloat(s) * rate / 1200 );
		s1 += parseFloat( s );
		s2 += parseFloat(proc);
		p = round( parseFloat(s) + parseFloat( proc ));
		s3 += parseFloat(p);
		sum -= sum;
		sum = round( sum );

		html += '<tr class="' + (m%2?'odd':'even') + '"><td class="month">' + m + '</td>';
		html += '<td>' + s + '</td>';
		html += '<td>' + proc + '</td>';
		html += '<td>' + p + '</td>';
		html += '<td>' + sum + '</td>';
		html += '</tr>';
	}
	html += '</table>';

//	var z = getEl('table');
//	if(!z) return;
//	z.innerHTML = html;


	var out = '<html><head><link rel="stylesheet" href="/styles/cc.css" type="text/css" media="screen"><link rel="stylesheet" href="/styles/cc_print.css" type="text/css" media="print"></head><body>';
//	out += 'Ежемесячные платежи за кредит суммой <b>' + getVal('sum') + '</b> сроком <b>' + getVal('period_y') + 'г. ' + getVal('period_m') + ' м.</b> при годовой ставке <b>'+ getVal('rate') + '%</b>';
	out += 'Ежемесячные платежи за кредит суммой <b>' + getVal('sum') + '</b> сроком <b>' + getVal('period_m') + ' м.</b> при годовой ставке <b>'+ getVal('rate') + '%</b>';
	out += '<br>';
	out += 'Удорожание - <b>' + round(s2) + '</b>, общая сумма - <b>' + round(s3) + '</b>';
	out += '<br><br>';
	out += '<button onclick="window.print();">печать</button>';
	out += '<button onclick="window.close();">закрыть</button>';
	out += '<br><br>';
	out += '<center>' + html + '</center>';
	out += '</body></html>';
	win = OpenWindow('', 800, 650);
	win.document.open();
	win.document.write(out);
	win.document.close();
}

function init_calc() 
{
	change('paym');
	re_calc();
}
