function _id(n){
	return document.getElementById(n);
}
function parseFields(teloKr_str,proc_str,srok_str){
	var		teloKr=parseInt(teloKr_str,10),
			proc=parseFloat(proc_str.replace(",","."),10),
			srok=parseInt(srok_str,10);
	if( srok>0 && teloKr>0 && proc>0 && proc<100){
		return {
			srok:srok,
			teloKr:teloKr,
			proc:proc
		};
	}else{
		return undefined;
	}
}
/*
@srok int - кол-во месяцев/платежей 
*/
function diffPlat(teloKr, proc, srok){
	var 	osnDolg = (teloKr/srok).toFixed(4),
			ostDolg = teloKr,
			rez=[],// Остаток основного долга
			step;
    for(var i=0;i<srok;i++){
		step={
			osnDolg:new Number(osnDolg),
			nachProc:new Number(ostDolg*proc/(12*100))
		};
		step.sumPlat=new Number(step.osnDolg+step.nachProc);
		ostDolg=step.ostDolg= new Number(ostDolg-osnDolg);
		rez.push(step);
		step=null;
	}
    return rez;
}
function anyitentPlat(teloKr, proc, srok){
	var 	sumPlat = (teloKr*proc/(12*100*(1-Math.pow((1+proc/1200),-Math.round(srok))))).toFixed(2),
			ostDolg = teloKr,// Остаток основного долга
			rez=[],
			step;
	 for(var i=0;i<srok;i++){
		step={
			sumPlat:new Number(sumPlat)
		};
		step.nachProc = new Number(ostDolg*proc/(12*100));
		step.osnDolg = new Number(sumPlat-step.nachProc);
		ostDolg=step.ostDolg=new Number(ostDolg-step.osnDolg);
		rez.push(step);
		step=null;
	}
    return rez;		
}
function create_TD_P(val,_class){
	var 	td=document.createElement('td'),
			p=document.createElement('p');
			if(_class)
				p.className=_class;
	p.innerHTML=val;
	td.appendChild(p);
	return td;
}
function undefined2string(val,insert){
	return val?val:insert?""+insert:"";
}
function intFormat(str){ // Format string 12000 -> 12 000
	var 	str_array=[],
			length=str.length;
	for(var i=length-1; i>=0;i-=3){
		str_array.unshift(
			undefined2string(str[i-2])+undefined2string(str[i-1])+undefined2string(str[i])
		);
	}
	var resStr=str_array.join(" ");
	return resStr;
}
function doubleFormat(str){
	var parts_array=str.split(/\.|\,/);
	return intFormat(parts_array[0])+"."+undefined2string(parts_array[1]);
}
function insertDataInTable(table, array){
	var 	array_len = array.length,
			$table = $(table),
			dolgSum = 0,
			procSum = 0,
			platSum =0;
	$table.empty();		
	for(var i=0;i<array_len; i++){
		var tr=document.createElement('tr');
		tr.appendChild(create_TD_P(""+(i+1),"first"));
		tr.appendChild(create_TD_P(doubleFormat(array[i].osnDolg.toFixed(2))));
		dolgSum+=array[i].osnDolg;
		tr.appendChild(create_TD_P(doubleFormat(array[i].nachProc.toFixed(2))));
		procSum+=array[i].nachProc;
		tr.appendChild(create_TD_P(doubleFormat(array[i].sumPlat.toFixed(2)),"select"));
			platSum+=array[i].sumPlat;
		tr.appendChild(create_TD_P(doubleFormat(array[i].ostDolg.toFixed(2))));
		table.appendChild(tr);
	}
	var 	dolgSumElem=_id("dolgSum"),
			procSumElem=_id("procSum"),
			platSumElem=_id("platSum"),
			ostSumElem=_id("ostSum"),
			$chartHolder=$("#chart-holder");
	dolgSumElem.innerHTML=doubleFormat((new Number(dolgSum)).toFixed(2));
	procSumElem.innerHTML=doubleFormat((new Number(procSum)).toFixed(2));
	platSumElem.innerHTML=doubleFormat((new Number(platSum)).toFixed(2));
	ostSumElem.innerHTML=Math.round(array[array_len-1].ostDolg);
	$chartHolder.show();

}
$(document).ready(function(){
	var 	form=_id("cred-calc"),
			teloKr_text=_id("telo_kr"),
			proc_text=_id("proc"),
			srok_text=_id("srok"),
			diffPlat_radio=_id("diff-plat"),
			tableContent_tbody=_id("table-content");
	$(form).submit(function(e){
		e.preventDefault();
		var inputData=parseFields(teloKr_text.value, proc_text.value, srok_text.value );
		if(inputData && inputData.teloKr && inputData.proc && inputData.srok ){
			data_array = diffPlat_radio.checked ? diffPlat(inputData.teloKr, inputData.proc, inputData.srok) : anyitentPlat(inputData.teloKr, inputData.proc, inputData.srok);
			insertDataInTable(tableContent_tbody,data_array);
		}else{
			alert("Все поля должны быть заполнены числовыми значениями");
			teloKr_text.focus();
		}
		return false;
	});
});