//toolbox
function getVal(str) {
	return parseFloat(str.replace(",", "."));
}
function isIn(val, beg, end ) {
	return !(val<beg||val>end);
}
function round(val, rnd, fill) {
	return parseFloat(parseFloat(val.toFixed(rnd)).toFixed(fill));
}
function roundStr(val, rnd, fill) {
	return parseFloat(val.toFixed(rnd)).toFixed(fill).replace(".", ",");
}

//logic
function countJU(_inppr, _manpr, _wanju) {	// liczenie "Liczba J.U."
	if(_wanju=='') {_wanju=1;}
	return ((_inppr-(_inppr*(_manpr/100)))/_wanju);
}

function realJU(_inppr, _jucnt) {	// liczenie "Rzeczywista cena nabycia J.U."
	return (_inppr / _jucnt);
}

function gainJU(_redempr, _realju) {	// liczenie "Zysk na J.U."
	return (_redempr - _realju);
}

function gainAllJU(_gainJU, _cntJU) {	// liczenie "Zysk na rejestrze przed opodatkowaniem"
	return (_gainJU * _cntJU);
}

function cntRegJU(inppr,manpr,wanjuzropr){
	return (inppr-(inppr*manpr))/wanjuzropr;
}

function realWANJUIn(inppr,cntJU) {
	return (inppr/cntJU);
}

function gainWANJUIn(kwanjukonpr,realWANJUIn) {
	return(kwanjukonpr-realWANJUIn);
}

function gainAllJUKonw(gainWANJUIn,cntRegJU) {
	return (gainWANJUIn*cntRegJU);
}

// konwersja
function transToTarget(cntRegJU,kwanjukonpr,gainAllTAX) {
	if(gainAllTAX>0) {
		return (((round(cntRegJU,3,3))*kwanjukonpr)-gainAllTAX);
	} else {
		return (((round(cntRegJU,3,3))*kwanjukonpr));
	}
}

function cntJUKonw(transToTarget,konwmanpr,wanjuprdoc) {
	return ((transToTarget-(transToTarget*konwmanpr))/wanjuprdoc);
}


//validation
function countRedemption(form) {
	var ERR = false;

	//parsowanie
	var inppr = getVal(form.oinppr.value);
	var manpr = getVal(form.omanpr.value);
	var wanjupr = getVal(form.owanjupr.value);
	var redempr = getVal(form.oredempr.value);

	//validacja
	if (isNaN(inppr) || inppr < 50) {
		$('#oinppr-err').text('Musisz podać kwotę wpłaty większą od 50').fadeIn();
		ERR = true;
	} else {
		$('#oinppr-err').text('').fadeOut();
	}
	if (isNaN(manpr) || !isIn(manpr,0,10)) {
		$('#omanpr-err').text('Musisz podać wysokość opłaty manipulacyjnej (0% - 10%)').fadeIn();
		ERR = true;
	} else {
		$('#omanpr-err').text('').fadeOut();
	}
	if (isNaN(wanjupr) || wanjupr<=0) {
		$('#owanjupr-err').text('Musisz podać cenę WANJU większą od zera').fadeIn();
		ERR = true;
	} else {
		$('#owanjupr-err').text('').fadeOut();
	}
	if (isNaN(redempr) || redempr<=0) {
		$('#oredempr-err').text('Musisz podać cenę odkupienia J.U. większą od zera').fadeIn();
		ERR = true;
	} else {
		$('#oredempr-err').text('').fadeOut();
	}
	if (ERR) return false;

	//logika
	countJUv = countJU(inppr, round(manpr,2,2) , wanjupr);
	if (manpr == 0) {
		realJUv = wanjupr;
	} else {
		realJUv = realJU(inppr, round(countJUv,3,3) );
	}
	gainJUv = gainJU(redempr, round(realJUv,2,2) );
	gainAllJUv = gainAllJU(round(gainJUv,2,2), round(countJUv,3,3) );
	gainAllJUTAXv = round(round(gainAllJUv,0,0) * 0.19);

	

	//przedstawienie wynikow
	$("#jukalk-o-results").fadeIn();
	
	wynik = roundStr(inppr,2,2) + ' zł - ( ' + roundStr(inppr,2,2) + ' zł x ' + roundStr(manpr,2,2) + '% ) ] / ' + roundStr(wanjupr,2,2) + ' zł = <span class="fgf00">' + roundStr(countJUv,3,3) + '</span>';
	$('#oliczbaju-res').html(wynik);

	wynik = roundStr(inppr,2,2) + ' zł / ' + roundStr(countJUv,3,3) + ' = <span class="fgf00">' + roundStr(realJUv,2,2) + ' zł </span>';
	$('#orcnab-res').html(wynik);

	wynik = roundStr(redempr,2,2) + ' zł - ' + roundStr(realJUv,2,2) + ' zł = <span class="fgf00">' + roundStr(gainJUv,2,2) + ' zł </span>';
	$('#ozyskju-res').html(wynik);

	wynik = roundStr(gainJUv,2,2) + ' zł x ' + roundStr(countJUv,3,3) + ' = <span class="fgf00">' + roundStr(gainAllJUv,0,2) + ' zł</span>';
	$('#ozyskbpod-res').html(wynik);

	if (round(gainAllJUTAXv,2,2)>0) {
		wynik = roundStr(gainAllJUv,0,2) + 'zł x 0.19 = <span class="fgf00">' + roundStr(gainAllJUTAXv,1,2) + ' zł</span>';
	} else {
		wynik = '<span class="fgf00">brak podatku</span>';
	}
	$('#opod-res').html(wynik);

	return false;
}

function countConversion(form) {
	var ERR = false;

	//parsowanie
	var inppr = getVal(form.kinppr.value);
	var manpr = getVal(form.kmanpr.value);
	var wanjupr = getVal(form.kwanjupr.value);
	var redempr = getVal(form.kredempr.value);
	var konwmanpr = getVal(form.kkonwmanpr.value);
	var wanjuprdoc = getVal(form.kwanjuprdoc.value);

	//validacja
	if (isNaN(inppr) || inppr < 50) {
		$('#kinppr-err').text('Musisz podać kwotę wpłaty większą od 50').fadeIn();
		ERR = true;
	} else {
		$('#kinppr-err').text('').fadeOut();
	}
	if (isNaN(manpr)) {
		$('#kmanpr-err').text('Musisz podać wysokość opłaty manipulacyjnej (w %)').fadeIn();
		ERR = true;
	} else {
		$('#kmanpr-err').text('').fadeOut();
	}
	if (isNaN(wanjupr) || wanjupr<=0) {
		$('#kwanjupr-err').text('Musisz podać cenę WANJU większą od zera').fadeIn();
		ERR = true;
	} else {
		$('#kwanjupr-err').text('').fadeOut();
	}
	if (isNaN(konwmanpr) || !isIn(konwmanpr,0,10)) {
		$('#kkonwmanpr-err').text('Musisz podac prawidłową wartość opłaty za konwersję (0% - 10%)').fadeIn();
		ERR = true;
	} else {
		$('#kkonwmanpr-err').text('').fadeOut();
	}
	if (isNaN(wanjuprdoc) || wanjuprdoc<=0) {
		$('#kwanjuprdoc-err').text('Musisz podać cenę nabycia J.U. większą od zera').fadeIn();
		ERR = true;
	} else {
		$('#kwanjuprdoc-err').text('').fadeOut();
	}
	if (ERR) return false;


	//logika
	countJUv = countJU(inppr, round(manpr,2,2), wanjupr);
	if (manpr == 0) {
		realJUv = wanjupr;
	} else {
		realJUv = realJU(inppr, round(countJUv,3,3) );
	}
	gainJUv = gainJU(redempr, round(realJUv,2,2) );
	gainAllJUv = gainAllJU(round(gainJUv,2,2), round(countJUv,3,3) );
	gainAllJUTAXv = round(round(gainAllJUv,0,0) * 0.19);
	cntRegJUv = cntRegJU(inppr, (manpr/100), wanjupr);
	realWANJUInv = realWANJUIn(inppr, round(cntRegJUv,3,3) );
	gainWANJUInv = gainWANJUIn(wanjupr, round(realWANJUInv,2,2) );
	gainAllJUKonwTAXv = gainAllJUKonw(gainWANJUInv, cntRegJUv);
	transToTargetv = transToTarget(round(cntRegJUv,3,3), redempr, round(gainAllJUTAXv,1,2) );
	cntJUKonwv = cntJUKonw(transToTargetv, (konwmanpr/100), wanjuprdoc);

	//przedstawienie wynikow
	$("#jukalk-k-results").fadeIn();

	wynik = roundStr(inppr,2,2) + ' zł - ( ' + roundStr(inppr,2,2) + ' zł x ' + roundStr(manpr,2,2) + '% ) ] / ' + roundStr(wanjupr,2,2) + ' zł = <span class="fgf00">' + roundStr(countJUv,3,3) + '</span>';
	$('#kliczbajurz-res').html(wynik);

	wynik = roundStr(inppr,2,2) + ' zł / ' + roundStr(countJUv,3,3) + ' = <span class="fgf00">' + roundStr(realJUv,2,2) + ' zł </span>';
	$('#krcnab-res').html(wynik);

	wynik = roundStr(redempr,2,2) + ' zł - ' + roundStr(realJUv,2,2) + ' zł = <span class="fgf00">' + roundStr(gainJUv,2,2) + ' zł </span>';
	$('#kzyskjurz-res').html(wynik);

	wynik = roundStr(gainJUv,2,2) + ' zł x ' + roundStr(countJUv,3,3) + ' = <span class="fgf00"> ' + roundStr(gainAllJUv,0,2) + ' zł</span>';
	$('#kzyskrbbpod-res').html(wynik);

	if(round(gainAllJUTAXv,2,2) > 0) {
		wynik = roundStr(gainAllJUv,0,2) + 'zł x 0.19 = <span class="fgf00">' + roundStr(gainAllJUTAXv,1,2) + ' zł</span>';
	} else {
		wynik = '<span class="fgf00">brak podatku</span>';
	}
	$('#kpodpkonw-res').html(wynik);

	if(round(gainAllJUTAXv,1,2) > 0) {
		val = roundStr(gainAllJUTAXv,1,2);
	} else {
		val="0,00";
	}

	wynik = roundStr(cntRegJUv,3,3) + ' x ' + roundStr(redempr,3,3) + ' - ' + val + ' = <span class="fgf00">' + roundStr(transToTargetv,2,2) + ' zł</span>';
	$('#kkwprznarejdoc-res').html(wynik);

	wynik = roundStr(transToTargetv,2,2) + ' - ( ' + roundStr(transToTargetv,2,2) + ' x ' + roundStr(konwmanpr,3,3) + '% ) ] / ' + roundStr(wanjuprdoc,3,3) + ' = <span class="fgf00">' + roundStr(cntJUKonwv,3,3) + '</span>';
	$('#klijunarejdoc-res').html(wynik);

	return false;
}
