// PODATKI POMEMBNI ZA OBRACUN PLAC
// ---------------------------------

// Pripone stevil v okencih in na izpisu
var netoMessage = "Pri preračunu NETO v BRUTO zaenkrat ni mogoče upoštevati dodatne olajšave za najnižje plače.";

var numAddonEUR = " EUR";
var numAddonSIT = " SIT";
var percAddon = " %";

var eurTecaj = 239.640;
/*
// zneski davcne olajsave za vzdrzevane otroke
var doOtr = new Array();

doOtr[0] = 0.0;
doOtr[1] = 40406.80;
doOtr[2] = 84326.08;
doOtr[3] = 142888.92;
doOtr[4] = 216094.67;
doOtr[5] = 303943.25;
*/

var osnOlajsavaNaOtroka = 181.98;
var osnOlajsavaNaOtrokaP = 659.392;
// za stOtrok > 5
var plusNaDodOtr = 132.125;
var plusNaOtr = new Array();

// pribitki k osnovni Olajsavi na otroka za 1., 2., 3., ... otroka
// vrednosti za vec kot 5 otrok se preracunajo dinamicno iz zg. podatkov
plusNaOtr[0] = 0.0;
plusNaOtr[1] = 15.855;
plusNaOtr[2] = 147.980;
plusNaOtr[3] = 280.105;
plusNaOtr[4] = 412.230;
//pri vsakem naslednjem otroku se olajsava poveca za 1500 EUR glede na prejsnjo


// vrednost splosne davcne oloajsave
var spOlajsavaZnesek = new Array();
var spOlajsavaMejaDo = new Array();
var spOlajsavaMejaNad = new Array();
spOlajsavaZnesek[0] = 413.3; spOlajsavaMejaNad[0] = 0.0; spOlajsavaMejaDo[0] = 566.67;
spOlajsavaZnesek[1] = 329.97; spOlajsavaMejaNad[1] = 566.67; spOlajsavaMejaDo[1] = 750.00;
spOlajsavaZnesek[2] = 246.63; spOlajsavaMejaNad[2] = 750.00; spOlajsavaMejaDo[2] = '...';

// koeficienti prispevkov delojemalca
var koefPDJ = 0.221;
var koefPDJZpiz = 0.155;
var koefPDJZavarovanje = 0.0636;
var koefPDJZaposlovanje = 0.0014;
var koefPDJVarstvo = 0.001;

// koeficienti prispevkov delodajalca
var koefPDD = 0.161;
var koefPDDZpiz = 0.0885;
var koefPDDZavarovanje = 0.0656;
var koefPDDZaposlovanje = 0.0006;
var koefPDDPpd = 0.0053;
var koefPDDVarstvo = 0.001;
	
// podatki za obracun dohodnine (mejne vrednosti osnove/procenti/fiksni zneski)
var dohMejaNad = new Array();
var dohMejaDo = new Array();
var dohProc = new Array();
var dohPlus = new Array();
// razred za ak. doh. 1
dohMejaNad[0] = 0.0; dohMejaDo[0] = 598.967; dohProc[0] = 16.0 ; dohPlus[0] = 0.0;
// razred za ak. doh. 2
dohMejaNad[1] = 598.967; dohMejaDo[1] = 1197.933; dohProc[1] = 27.0; dohPlus[1] = 95.835;
// razred za ak. doh. 3 ...
dohMejaNad[2] = 1197.933; dohMejaDo[2] = '...'; dohProc[2] = 41.0; dohPlus[2] = 257.556;

// podatki za obracun davka na place (delodajalec)
var dpMejaNad = new Array();
var dpMejaDo = new Array();
var dpProc = new Array();

dpMejaNad[0] = 0; dpMejaDo[0] = 688.530; dpProc[0] = 0.0;
dpMejaNad[1] = 688.540; dpMejaDo[1] = 1669.170; dpProc[1] = 1.1;
dpMejaNad[2] = 1669.180; dpMejaDo[2] = 3129.690; dpProc[2] = 2.3;
dpMejaNad[3] = 3129.700; dpMejaDo[3] = '...'; dpProc[3] = 4.4;





// CHREVA 
// -------


function OPA_Clear()
{
	document.getElementById("mVrstaZneska").value = 'bruto';
	document.getElementById("mZnesek").value = "0.00"+numAddonEUR;
	document.getElementById("mDodatekNaDD").value = "0.00"+percAddon;
	document.getElementById("mBonitete").value = "0.00"+numAddonEUR;
	document.getElementById("mStOtrok").value = "0";
	document.getElementById("mStOtrokP").value = "0";
	document.getElementById("mDavcneOlajsave").value = "0.00"+numAddonEUR;
	document.getElementById("mMaterialniStroski").value = "0.00"+numAddonEUR;

	document.getElementById("mDodatnaDavcnaOlajsava").style.display = 'block';	
	document.getElementById("mDDONetoChosen").style.display = 'none';
	document.getElementById("mDDONetoChosen").innerHTML = netoMessage + " (" + spOlajsavaZnesek[spOlajsavaZnesek.length - 1] + " " + numAddonEUR + ").";
	
	document.getElementById("mSplosnaDavcnaOlajsava").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mSpOlajsavaOsnova").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mSpOlajsavaDodatek").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mSpOlajsavaMejaNAD").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mSpOlajsavaMejaDO").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDOlajsaveOstalo").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDBrutoOsnova").value = mfMask(0.0, numAddonEUR);

	document.getElementById("mDPrispevkiZpiz").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDPrispevkiZavarovanje").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDPrispevkiZaposlovanje").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDPrispevkiVarstvo").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDPrispevki").value = mfMask(0.0, numAddonEUR);

	document.getElementById("mDDohodninaOsnova").value = mfMask(0.0, numAddonEUR);

	document.getElementById("mDDohodninaRazred").value = '/';
	document.getElementById("mDDohodninaProcent").value = mfMask(0.0, percAddon);
	document.getElementById("mDDohodninaZnesek").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDDohodninaOsnovaNAD").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDDohodninaOsnovaDO").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDDohodnina").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDNeto").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDNetoSIT").value = mfMask(0.0, numAddonSIT);		
	document.getElementById("mDMaterialniStroski").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDIzplacilo").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDBrutoPlaca").value = mfMask(0.0, numAddonEUR);

	document.getElementById("mDDPrispevkiZpiz").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDDPrispevkiZavarovanje").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDDPrispevkiZaposlovanje").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDDPrispevkiPpd").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDDPrispevkiVarstvo").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDDPrispevki").value = mfMask(0.0, numAddonEUR);

	document.getElementById("mDDDavekRazred").value = '/';
	document.getElementById("mDDDavekProcent").value = mfMask(0.0, percAddon);
	document.getElementById("mDDDavekOsnovaNAD").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDDDavekOsnovaDO").value = mfMask(0.0, numAddonEUR);

	document.getElementById("mDDIzplacilo").value = mfMask(0.0, numAddonEUR);
	document.getElementById("mDDDavek").value = mfMask(0.0, numAddonEUR);
}

function OPA_Izracun()
{
	var znesek = new Number(mfUnMask(document.getElementById("mZnesek").value, numAddonEUR));
	var ddd = new Number(mfUnMask(document.getElementById("mDodatekNaDD").value, percAddon));
	var bonitete = new Number(mfUnMask(document.getElementById("mBonitete").value, numAddonEUR));
	var stOtrok = new Number(document.getElementById("mStOtrok").value);
	var stOtrokP = new Number(document.getElementById("mStOtrokP").value);
	var materialni_stroski = new Number(mfUnMask(document.getElementById("mMaterialniStroski").value, numAddonEUR));
	var olajsave = new Number(mfUnMask(document.getElementById("mDavcneOlajsave").value, numAddonEUR));
	
	var minBruto = 0.0;
	var minNeto = 0.0;

	var maxOtrok = 0;
	if ( stOtrokP >= stOtrok )
		maxOtrok = stOtrokP;
	else
		maxOtrok = stOtrok;

	if (maxOtrok > plusNaOtr.length)
	{
		var i = 0;
		for (i = plusNaOtr.length; i <= maxOtrok; i++)
		{
			plusNaOtr[i] = plusNaOtr[i-1] + plusNaDodOtr;
		}
	}
	
	if ( document.getElementById("mDodatnaDavcnaOlajsava").value == 'ddoNe')
	{
		document.getElementById("mDodatnaOlajsavaLabel").innerHTML = "( DAVČNI ZAVEZANEC NE ŽELI DODATNE DAVČNE OLAJŠAVE )";
	}
	else
	{
		document.getElementById("mDodatnaOlajsavaLabel").innerHTML = "";
	}
		
	if ( document.getElementById("mVrstaZneska").value == 'bruto' )
	{
		OPA_Brutalize(znesek, ddd, bonitete, stOtrok, stOtrokP, materialni_stroski, olajsave);
	}
	else if ( document.getElementById("mVrstaZneska").value == 'neto' )
	{
		document.getElementById("mDodatnaDavcnaOlajsava").visibility = 0;
		
	// za splosno olajsavo pri izracunu minimalne neto place je uporabljena najmanjsa mozna splosna olajsava  spOlajsavaZnesek[spOlajsavaZnesek.length - 1] - mo vidl ka bo
		minNeto = (dohMejaNad[0] + spOlajsavaZnesek[spOlajsavaZnesek.length - 1] + OPA_IzracunajOlajsavoNaStOtrok(stOtrok) + olajsave - bonitete - ((( dohMejaNad[0] - dohMejaNad[0] ) * dohProc[0] ) + dohPlus[0] ));
		minNeto = Math.floor(minNeto * 100) / 100;
		if (znesek >= minNeto)
		{
			OPA_NetoVBruto(znesek, ddd, bonitete, stOtrok, stOtrokP, materialni_stroski, olajsave);
		}
		else
		{
			OPA_NetoVBrutoVO(znesek, ddd, bonitete, stOtrok, stOtrokP, materialni_stroski, olajsave);
		}
	}
}

function OPA_NetoVBruto(znesek, ddd, bonitete, stOtrok, stOtrokP, materialni_stroski, olajsave)
{
	var brutoZnesek = 0.0;
	var dohRazred = 0;
	for(dohRazred = dohMejaNad.length; dohRazred > 0; dohRazred--)
	{
	// za splosno olajsavo pri izracunu spodaj je uporabljena najmanjsa mozna splosna olajsava  spOlajsavaZnesek[spOlajsavaZnesek.length - 1] - mo vidl ka bo	
		if(znesek >= Math.floor((dohMejaNad[dohRazred-1] + spOlajsavaZnesek[spOlajsavaZnesek.length - 1] + OPA_IzracunajOlajsavoNaStOtrok(stOtrok) + olajsave - bonitete - dohPlus[dohRazred-1] ) * 100 ) / 100 )
		{
			break;
		}
	}
	
// za splosno olajsavo pri izracunu spodaj je uporabljena najmanjsa mozna splosna olajsava  spOlajsavaZnesek[spOlajsavaZnesek.length - 1] - mo vidl ka bo		
	brutoZnesek = ( znesek - (( dohProc[dohRazred-1] / 100 ) * ( spOlajsavaZnesek[spOlajsavaZnesek.length - 1]  + OPA_IzracunajOlajsavoNaStOtrok(stOtrok) + olajsave + dohMejaNad[dohRazred-1] )) + dohPlus[dohRazred-1] + ( bonitete * ( 1 - (( 1 - koefPDJ ) * ( 1 - (dohProc[dohRazred-1] / 100) ))))) / (( 1 - koefPDJ ) * ( 1 - ( dohProc[dohRazred-1] / 100 )) * ( 1 + ( ddd / 100 )));
	brutoZnesek = OPA_Round(brutoZnesek);
	
	OPA_Brutalize(brutoZnesek, ddd, bonitete, stOtrok, stOtrokP, materialni_stroski, olajsave);
	
}

// Neto v Bruto - pri visokih olajsavah ( osnova za akontacijo > 0 )
// olajsave > ( bruto osnova - prisp. delojemalca )
function OPA_NetoVBrutoVO(znesek, ddd, bonitete, stOtrok, stOtrokP, materialni_stroski, olajsave)
{
	var brutoZnesek = 0.0;
	brutoZnesek = (znesek + dohPlus[0] + bonitete * (1 - ( 1 - koefPDJ ))) / ((1 - koefPDJ) * (1 + (ddd / 100)));
	OPA_Brutalize(brutoZnesek, ddd, bonitete, stOtrok, stOtrokP, materialni_stroski, olajsave);
}

function OPA_Brutalize(bruto, ddd, bonitete, stOtrok, stOtrokP, materialni_stroski, olajsave)
{
	var brutoOsnova = 0.0;
	var dodatekNaDD = 0.0;
	
	var prispevkiDJ = 0.0;
	var prispevkiDD = 0.0;

	var dohodOsnova = 0.0;

	var dohodnina = 0.0;

	var davekNaPlace = 0.0;
	var stroskiDD = 0.0;
	var neto = 0.0;
	
	var splosnaDavcnaOlajsava;
	var olajsaveOstalo = 0.0;

	olajsaveOstalo = OPA_IzracunajOlajsavoNaStOtrok(stOtrok) + OPA_IzracunajOlajsavoNaStOtrokP(stOtrokP) + olajsave;

	dodatekNaDD = OPA_IzracunajDodatekNaDD(bruto, ddd);
	dodatekNaDD = OPA_Round(dodatekNaDD);

	brutoOsnova = (bruto + dodatekNaDD + bonitete);
	
	splosnaDavcnaOlajsava = OPA_IzracunajSplosnoOlajsavo(brutoOsnova);

	prispevkiDJ = OPA_Round(brutoOsnova * koefPDJ);
	prispevkiDD = OPA_Round(brutoOsnova * koefPDD);

	if (( brutoOsnova - prispevkiDJ ) > ( OPA_IzracunajOlajsavoNaStOtrok(stOtrok) + OPA_IzracunajOlajsavoNaStOtrokP(stOtrokP) + olajsave + splosnaDavcnaOlajsava))
	{
		dohodOsnova = ( brutoOsnova - prispevkiDJ - splosnaDavcnaOlajsava - OPA_IzracunajOlajsavoNaStOtrok(stOtrok) - OPA_IzracunajOlajsavoNaStOtrokP(stOtrokP) - olajsave );		
	}
	else
	{
		dohodOsnova = 0.0;
	}
	
	dohodnina = OPA_IzracunajAkontacijoDohodnine(dohodOsnova);
	dohodnina = OPA_Round(dohodnina);

	davekNaPlace = OPA_Round(OPA_DobiDavekNaPlace(brutoOsnova - bonitete));

	stroskiDD = brutoOsnova - bonitete + prispevkiDD + davekNaPlace + materialni_stroski;
	neto = (brutoOsnova - bonitete - prispevkiDJ - dohodnina);
	
	document.getElementById("mSplosnaDavcnaOlajsava").value = mfMask(splosnaDavcnaOlajsava, numAddonEUR);
	
	document.getElementById("mDOlajsaveOstalo").value = mfMask(olajsaveOstalo, numAddonEUR);
	document.getElementById("mDBrutoOsnova").value = mfMask(brutoOsnova, numAddonEUR);
	
	document.getElementById("mDPrispevki").value = mfMask(prispevkiDJ, numAddonEUR);
	document.getElementById("mDPrispevkiZpiz").value = mfMask(brutoOsnova * koefPDJZpiz, numAddonEUR);
	document.getElementById("mDPrispevkiZavarovanje").value = mfMask(brutoOsnova * koefPDJZavarovanje, numAddonEUR);
	document.getElementById("mDPrispevkiZaposlovanje").value = mfMask(brutoOsnova * koefPDJZaposlovanje, numAddonEUR);
	document.getElementById("mDPrispevkiVarstvo").value = mfMask(brutoOsnova * koefPDJVarstvo, numAddonEUR);

	document.getElementById("mDDohodninaOsnova").value = mfMask(dohodOsnova, numAddonEUR);
	document.getElementById("mDDohodnina").value = mfMask(dohodnina, numAddonEUR);

	document.getElementById("mDNeto").value = mfMask(neto, numAddonEUR);
	document.getElementById("mDNetoSIT").value = mfMask(neto * eurTecaj, numAddonSIT);	
	document.getElementById("mDMaterialniStroski").value = mfMask(materialni_stroski, numAddonEUR);
	document.getElementById("mDIzplacilo").value = mfMask(neto + materialni_stroski, numAddonEUR);
	document.getElementById("mDBrutoPlaca").value = mfMask(bruto, numAddonEUR);

	document.getElementById("mDDPrispevki").value = mfMask(prispevkiDD, numAddonEUR);
	document.getElementById("mDDPrispevkiZpiz").value = mfMask(brutoOsnova * koefPDDZpiz, numAddonEUR);
	document.getElementById("mDDPrispevkiZavarovanje").value = mfMask(brutoOsnova * koefPDDZavarovanje, numAddonEUR);
	document.getElementById("mDDPrispevkiZaposlovanje").value = mfMask(brutoOsnova * koefPDDZaposlovanje, numAddonEUR);
	document.getElementById("mDDPrispevkiPpd").value = mfMask(brutoOsnova * koefPDDPpd, numAddonEUR);
	document.getElementById("mDDPrispevkiVarstvo").value = mfMask(brutoOsnova * koefPDDVarstvo, numAddonEUR);

	document.getElementById("mDDDavek").value = mfMask(davekNaPlace, numAddonEUR);

	document.getElementById("mDDIzplacilo").value = mfMask(stroskiDD, numAddonEUR);
}

function OPA_ToggleNeto()
{
	if (document.getElementById("mVrstaZneska").value == 'neto')
	{
		document.getElementById("mDodatnaDavcnaOlajsava").value = "ddoNe";
		document.getElementById("mDodatnaDavcnaOlajsava").style.display = 'none';
		document.getElementById("mDDONetoChosen").style.display = 'block';
	}
	else
	{
		document.getElementById("mDodatnaDavcnaOlajsava").value = "ddoNe";
		document.getElementById("mDodatnaDavcnaOlajsava").style.display = 'block';
		document.getElementById("mDDONetoChosen").style.display = 'none';
	}
}

function OPA_Round(number)
{
	return Math.round(number * 100) / 100;
}

function OPA_EURtoSIT(eurVal)
{
	siti = Math.floor((eurVal * eurTecaj) * 100) / 100;
	return siti;
}

function OPA_IzracunajDodatekNaDD(bruto, ddd)
{
	if (ddd >> 0)
	{
		return (bruto * (ddd / 100));
	}
	else { return 0; }
}

function OPA_IzracunajOlajsavoNaStOtrok(stOtrok)
{
	var otrOlajsava = new Number(0.0);
	if (stOtrok > 0)
	{
		var i = 0;
		for (i = 0; i < stOtrok; i++ )
		{
			otrOlajsava = otrOlajsava + osnOlajsavaNaOtroka + plusNaOtr[i];
		}
	}
	return otrOlajsava;
}

function OPA_IzracunajOlajsavoNaStOtrokP(stOtrokP)
{
	var otrOlajsavaP = new Number(0.0);
	if (stOtrokP > 0)
	{
		var i = 0;
		for (i = 0; i < stOtrokP; i++ )
		{
			otrOlajsavaP = otrOlajsavaP + osnOlajsavaNaOtrokaP + plusNaOtr[i];
		}
	}
	return otrOlajsavaP;
}

// naredi na novo z loopom
function OPA_IzracunajAkontacijoDohodnine(dOsnova)
{
	var i = 0;
	for(i = dohMejaNad.length - 1; i >= 0; i--)
	{
		if (dOsnova > dohMejaNad[i])
		{
			document.getElementById("mDDohodninaRazred").value = i + 1;
			document.getElementById("mDDohodninaProcent").value = mfMask(dohProc[i], percAddon);
			document.getElementById("mDDohodninaZnesek").value = mfMask(dohPlus[i], numAddonEUR);
			document.getElementById("mDDohodninaOsnovaNAD").value = mfMask(dohMejaNad[i], numAddonEUR);
			if (i == dohMejaNad.length - 1)
			{
				document.getElementById("mDDohodninaOsnovaDO").value = dohMejaDo[i];
			}
			else
			{
				document.getElementById("mDDohodninaOsnovaDO").value = mfMask(dohMejaDo[i], numAddonEUR);
			}
			return ((dOsnova - dohMejaNad[i]) * (dohProc[i] / 100)) + dohPlus[i];
		}		
	}
	return ((dOsnova - dohMejaNad[0]) * (dohProc[0] / 100)) + dohPlus[0];
}


function OPA_DobiDavekNaPlace(osnovaDP)
{	
	var i = 0;
	for (i = dpMejaNad.length - 1; i >= 0; i--)
	{
		if (osnovaDP >= dpMejaNad[i])
		{
			document.getElementById("mDDDavekRazred").value = i + 1;
			document.getElementById("mDDDavekProcent").value = mfMask(dpProc[i], percAddon);
			document.getElementById("mDDDavekOsnovaNAD").value = mfMask(dpMejaNad[i], numAddonEUR);
			if( i == dpMejaNad.length - 1)
			{
				document.getElementById("mDDDavekOsnovaDO").value = dpMejaDo[i];
			}
			else
			{
				document.getElementById("mDDDavekOsnovaDO").value = mfMask(dpMejaDo[i], numAddonEUR);
			}
			return ( osnovaDP * (dpProc[i] / 100));
		}
	}
}


function OPA_IzracunajSplosnoOlajsavo(brutoOsnova)
{
	var i = 0;
	for (i = spOlajsavaMejaNad.length - 1; i >= 0; i--)
	{
		if( brutoOsnova >= spOlajsavaMejaNad[i] )
		{
			document.getElementById("mSpOlajsavaOsnova").value =  mfMask(spOlajsavaZnesek[spOlajsavaMejaNad.length - 1], numAddonEUR);
			document.getElementById("mSpOlajsavaDodatek").value =  mfMask(spOlajsavaZnesek[i] - spOlajsavaZnesek[spOlajsavaMejaNad.length - 1], numAddonEUR);
			document.getElementById("mSpOlajsavaMejaNAD").value = mfMask(spOlajsavaMejaNad[i], numAddonEUR);
			if ( i == spOlajsavaMejaNad.length - 1 )
			{
				document.getElementById("mSpOlajsavaMejaDO").value = spOlajsavaMejaDo[i];
			}
			else
			{
				document.getElementById("mSpOlajsavaMejaDO").value = mfMask(spOlajsavaMejaDo[i], numAddonEUR);
			}
			
			if ( document.getElementById("mDodatnaDavcnaOlajsava").value == 'ddoNe' )
			{
				document.getElementById("mSplosnaDavcnaOlajsava").value = mfMask(spOlajsavaZnesek[spOlajsavaMejaNad.length - 1], numAddonEUR);
				return spOlajsavaZnesek[spOlajsavaMejaNad.length - 1];
			}
			else
			{
				document.getElementById("mSplosnaDavcnaOlajsava").value = mfMask(spOlajsavaZnesek[i], numAddonEUR);
				return spOlajsavaZnesek[i];
			}
		}
	
	}

}
