﻿function getElement(s_id) 
{
	return document.all ? document.all[s_id] : document.getElementById(s_id);
}

function acceptOnlyNumbers(field, evt) 
{
	var charCode = (evt.which) ? evt.which : evt.keyCode
	var keychar = String.fromCharCode(charCode);

	if (charCode > 31 && (charCode < 48 || charCode > 57)) return false;
	
	return true;
}

function getUnformatedValue(field) 
{
	return field.value.replace(/ /gi,"");
}

function formatNumber(s) 
{
	var x = s.length;
	var ss = '';
	while (x > 3) 
	{
		ss = ' ' + s.substring(x-3,x) + ss;
		x -= 3;
	}
	return s.substring(0,x) + ss;
}

function validateYear(field,errorField)
{
	var err = getElement(errorField);
	err.innerHTML = "";
	var s = getUnformatedValue(field);
	field.value = s;
	
	if (s.length == 0) return true;
	if (s.length > 4) { err.innerHTML = "<br/>Helytelenül megadott évszám"; return false;}
	
	if (/^\d+$/.test(s)) return true;
	err.innerHTML = "<br/>Helytelenül megadott évszám";
	return false;
}

function validateAtruhazas(field)
{
	//log("validate_atruhazas called");
	if (validateYear(field,"err_atruhazas_eve")) 
	{
		var ae = parseInt(field.value);
		if (ae < 2008)  
		{
			getElement("err_atruhazas_eve").innerHTML = "<br/>A kalkuláció csak abban az esetben végezhető el, ha az értékesítés 2007. év után történt.";
			return false;
		} else 
		{	
			showOrHideLK();
			return true;
		}
	}
	return false;
}

function showOrHideLK() 
{
	var ae = getInt("atruhazas_eve");
	if (getElement("lk_row") != null) {
		if (ae - getInt("szerzes_eve") > 4) 
		{
			getElement("lakasszerzesi_kedvezmeny").value = "";
			getElement("lk_row").style.display = "none";
		} else 
		{
			getElement("lk_row").style.display = trName;
		}
	} else {
		if (getElement("tr_hide_0_5") == null) return;
		var n = getInt("n");
		for(var i=0;i<n;i++)
		{
			if (ae - getInt("szerzes_eve_"+i) > 4)
			{
				getElement("lakasszerzesi_kedvezmeny_"+i).value = "";
				getElement("tr_hide_"+i+"_5").style.display = "none";
			} else 
			{
				getElement("tr_hide_"+i+"_5").style.display = trName;
			}
		}
	}
	
}

function validateSzerzesEve(field)
{
	if (validateYear(field,"err_szerzes_eve")) 
	{
		var sze = parseInt(field.value);
		var ae = getInt("atruhazas_eve");
		
		if (sze > ae) 
		{
			getElement("err_szerzes_eve").innerHTML = "A szerzés éve nem lehet nagyobb mint az átruházás éve.";
			return false;
		} else 
		{
			showOrHideLK();
			return true;
		}
	}
	return false;
}

function validateXSzerzesEve(i)
{
	var field = getElement("szerzes_eve_"+i);
	var errorField = "err_szerzes_eve_"+i;
	if (validateYear(field,errorField)) 
	{
		var sze = parseInt(field.value);
		var ae = getInt("atruhazas_eve");
		
		if (sze > ae) 
		{
			getElement(errorField).innerHTML = "<br/>A szerzés éve nem lehet nagyobb mint az átruházás éve.";
			return false;
		} 
		if (i > 0) 
		{
			var sze_prev = getInt("szerzes_eve_"+(i-1));
			if (sze_prev > sze) 
			{
				getElement(errorField).innerHTML = "<br/>Helytelen a szerzési évek sorrendje.";
				return false;
			}
		}
		showOrHideLK();
		return true;
	}
	return false;
}

function validateYSzerzesEve(i)
{
	if (validateXSzerzesEve(i))
	{
		if (i > 0 && getInt("szerzes_eve_"+i) < 2008) 
		{
			getElement("err_szerzes_eve_"+i).innerHTML = "<br/>Csak 2008. január 1-je utáni építkezések adatai adhatók meg.";
			return false;
		}
		return true;
	}
	return false;
}

function validateHanyad(i)
{
	var szaml = getInt("th_szamlalo_"+i);
	var nevez = getInt("th_nevezo_"+i);
	
	getElement("err_hanyad_"+i).innerHTML = "";
	//if (nevez == 0) return true;
	if (szaml >= nevez) 
	{	
		getElement("err_hanyad_"+i).innerHTML = "<br/>A tulajdoni hányad megadása csak tört formában lehetséges.<br/>A számláló és a nevező értéke csak pozitív egész szám lehet.<br/>A tört értéke csak 1-nél kisebb lehet";
		return false;
	}
	
	return true;
}

function validateEBA(field,i) 
{
	var ebName = "ertknov_beruhazas";
	var ebaName = "ertknov_beruhazas_allag";
	var errName = "err_"+ebaName;
	if (i != null) {
		ebName += "_"+i;
		ebaName += "_"+i;
		errName += "_"+i;
	}
	
	if (!validateMoney(field,errName)) return false;
	
	var eb = getInt(ebName);
	var eba = getInt(ebaName);
	
	if (eb < eba) {
		getElement("err_"+ebaName).innerHTML = "<br/>Az értéknövelő beruházásokból az állagmegóvás költsége nem lehet nagyobb, mint az értéknövelő beruházások költségei";
		return false;
	}
	return true;
}

function addSzerzes() 
{
	var n = getElement("n");
	if (n.value == 10) return;
	for(var i=0;i<6;i++)
	{
		var x = getElement("tr_hide_"+n.value+"_"+i);
		if (x!=null) x.style.display = trName;
	}
	n.value++;
}

function delSzerzes() 
{
	var n = getElement("n");
	if (n.value == 1) return;
	n.value--;
	for(var i=0;i<6;i++) 
	{
		var x = getElement("tr_hide_"+n.value+"_"+i);
		if (x != null) x.style.display = "none";
	}
}

function log(msg) {
	getElement("calc_debug").innerHTML += msg+"<br/>";
}

function validateMoney(field,errorField)
{
	var err = getElement(errorField);
	err.innerHTML = "";
	var s = getUnformatedValue(field);
	field.value = formatNumber(s);
	
	var isMoney = /^\d+$/.test(s);
	if (!isMoney && s.length>0) 
	{
		err.innerHTML = "<br/>Helytelenül megadott összeg";
		return false;
	}
	return true;
}

function getInt(identifier) 
{
	var s = getUnformatedValue(getElement(identifier));
	if (s.length == 0) return 0;
	return parseInt(s);
}

function requiredField(identifier) 
{
	var e = getElement(identifier);
	if (e == null) return 1;
	if (getUnformatedValue(e).length == 0) return addError(identifier,"A mező kitöltése kötelező");
	return 0;
}

function somethingMissing(fieldNames,errorNames) 
{
	if (errorNames == null) errorNames = getErrorFields(fieldNames);
	var foundError = false;
	for(var i=0;i<fieldNames.length;i++)
	{
		var item = getElement(fieldNames[i]);
		var err = getElement(errorNames[i]);
		if (item == null || err == null) foundError = true;
		else if (getUnformatedValue(item).length == 0) 
		{			
			err.innerHTML = "<br/>A mező kitöltése kötelező";
			foundError = true;
		} 
		else err.innerHTML = "";
	}
	return foundError;
}

function getErrorFields(fieldNames)
{
	var errorNames = new Array();
	for(var i=0;i<fieldNames.length;i++)
		errorNames.push("err_"+fieldNames[i]);
	return errorNames;
}

function findValidationError(fieldNames,errorNames) 
{
	if (errorNames == null) errorNames = getErrorFields(fieldNames);
	var foundError = false;
	for(var i=0;i<fieldNames.length;i++)
	{
		var item = getElement(fieldNames[i]);
		var err = getElement(errorNames[i]);
		
		err.innerHTML = "";
		item.focus();
		item.blur();
		if (err.innerHTML.length > 0) foundError = true;
	}
	return foundError;
}

function showResult(bevetel,K,J)
{
	var A = Math.round(J * 0.25);
	bevetel = Math.round(bevetel);
	K = Math.round(K);
	J = Math.round(J);
	result = "<br\><span class=\"result_head\">A kalkuláció eredménye:</span><br/><br/>";
	result += "<table><tr><td><table width=200>"
	result += "<tr class=show_result><td>Bevétel:</td><td align=right>"+formatNumber(bevetel.toString())+" Ft</td></tr>";
	result += "<tr class=show_result><td>Költség:</td><td align=right>"+formatNumber(K.toString())+" Ft</td></tr>";
	result += "<tr class=show_result><td>Jövedelem:</td><td align=right>"+formatNumber(J.toString())+" Ft</td></tr>";
	result += "<tr class=show_result><td>Adó:</td><td align=right>"+formatNumber(A.toString())+" Ft</td></tr>";
	result += "</table></td><td valign=bottom align=right width=420px>"
	result += "<a class=calc_print onclick=\"nyomtatas()\">Nyomtatás</a></td></tr></table><br\>";
	getElement("calc_result").innerHTML = result;
}

function runCalculatorMode1() 
{
	// check for required fields
	var reqFields = new Array("atruhazas_eve","bevetel","szerzes_eve","szerzes_ktg");
	var optFields = new Array("ertknov_beruhazas_allag");
	if (somethingMissing(reqFields)) return;
	if (findValidationError(reqFields)) return;
	if (findValidationError(optFields)) return;
	
	// calculus
	var te = getInt("atruhazas_eve") - getInt("szerzes_eve");
	var lk = getInt("lakasszerzesi_kedvezmeny");
	
	if (te > 4) lk = 0;
	
	var bevetel = getInt("bevetel");
	var beruhazas_teljes = getInt("ertknov_beruhazas");
	var beruhazas_allag = getInt("ertknov_beruhazas_allag");
	var elszamolhato_beruhazas = beruhazas_teljes;
	if (beruhazas_allag <= bevetel * 0.05) elszamolhato_beruhazas -= beruhazas_allag;
	
	var sz = lk;
	var K = getInt("szerzes_ktg") + elszamolhato_beruhazas + getInt("ertekesites_ktg");
	if (bevetel > K) sz += bevetel - K;
	
	var J = getJovedelemIngatlan(sz,te);
	
	// show result
	showResult(bevetel,K,J);
}

function runCalculatorMode2() 
{	
	// check for required fields
	var reqFields = new Array("atruhazas_eve","bevetel","szerzes_eve","szerzes_ktg");
	var optFields = new Array("ertknov_beruhazas_allag");
	if (somethingMissing(reqFields)) return;
	if (findValidationError(reqFields)) return;
	if (findValidationError(optFields)) return;
	
	// calculus
	var te = getInt("atruhazas_eve") - getInt("szerzes_eve");
	
	var bevetel = getInt("bevetel");
	var beruhazas_teljes = getInt("ertknov_beruhazas");
	var beruhazas_allag = getInt("ertknov_beruhazas_allag");
	var elszamolhato_beruhazas = beruhazas_teljes;
	if (beruhazas_allag <= bevetel * 0.05) elszamolhato_beruhazas -= beruhazas_allag;
	
	var sz = 0;
	var K = getInt("szerzes_ktg") + elszamolhato_beruhazas + getInt("ertekesites_ktg");
	if (bevetel > K) sz = bevetel - K;
	
	var J = getJovedelemMas(sz,te);
	
	// show result
	showResult(bevetel,K,J);
}

function lnko(a,b) 
{
	var r = a % b;
	while(r>0) 
	{
		a = b;
		b = r;
		r = a % b;
	}
	return b;
}

function getJovedelemIngatlan(sz,te) 
{
	if (te < 2) return sz;
	if (te == 2) return sz * 0.9;
	if (te == 3) return sz * 0.6;
	if (te == 4) return sz * 0.3;
	return 0;
}

function getJovedelemMas(sz,te) 
{
	if (te < 6) return sz;
	if (te == 6) return sz * 0.9;
	if (te == 7) return sz * 0.8;
	if (te == 8) return sz * 0.7;
	if (te == 9) return sz * 0.6;
	if (te == 10) return sz * 0.5;
	if (te == 11) return sz * 0.4;
	if (te == 12) return sz * 0.3;
	if (te == 13) return sz * 0.2;
	if (te == 14) return sz * 0.1;
	return 0;
}

function validateForMode3_4() 
{
	// check for required fields
	var reqFields = new Array("atruhazas_eve","bevetel");
	var errFields = new Array("err_atruhazas_eve","err_bevetel");
	var n = getInt("n");
	for(var i=0;i<n;i++)
	{
		reqFields.push("szerzes_eve_"+i);
		errFields.push("err_szerzes_eve_"+i);
		reqFields.push("th_szamlalo_"+i);
		errFields.push("err_hanyad_"+i);
		reqFields.push("th_nevezo_"+i);
		errFields.push("err_hanyad_"+i);
		reqFields.push("szerzes_ktg_"+i);
		errFields.push("err_szerzes_ktg_"+i);
	}
	if (somethingMissing(reqFields,errFields)) return false;
	if (findValidationError(reqFields,errFields)) return false;
	
	var szaml = getInt("th_szamlalo_0");
	var nevez = getInt("th_nevezo_0");
	
	for(var i=1;i<n;i++) 
	{
		var szX = getInt("th_szamlalo_"+i);
		var neX = getInt("th_nevezo_"+i);
		var lkkt = nevez * neX / lnko(nevez,neX);
		szaml = szaml * lkkt / nevez + szX * lkkt / neX;
		nevez = lkkt;
	}
	if (szaml > nevez) 
	{
		for(var i=0;i<n;i++)
			getElement("err_hanyad_"+i).innerHTML = "<br/>A tulajdoni hányadok összege nem lehet nagyobb egynél";
		return false;
	}
	return true;
}

function calculusMode3_4(mode) 
{
// calculus
	var ae = getInt("atruhazas_eve");
	var bevetel = getInt("bevetel");
	var ertekesites_ktg = getInt("ertekesites_ktg");
	var Mb = bevetel - ertekesites_ktg;
	
	var Eb = new Array();
	var ths = new Array();
	var thn = new Array();
	var K = ertekesites_ktg;
	var n = getInt("n");
	for(var i=0;i<n;i++)
	{
		Eb.push(getInt("ertknov_beruhazas_"+i));
		ths.push(getInt("th_szamlalo_"+i));
		thn.push(getInt("th_nevezo_"+i));
		var szerzes_ktgi = getInt("szerzes_ktg_"+i);
		K += szerzes_ktgi + Eb[i];
	}
	
	var Tsz = Math.max(bevetel - K, 0);
	
	var JX = 0;	
	var JY = 0;	
	K = ertekesites_ktg;
	for(var i=0;i<n;i++)
	{
		var Tei = (ae - getInt("szerzes_eve_"+i));
		var LKi= getInt("lakasszerzesi_kedvezmeny_"+i);
		var Szi= LKi;
		var szerzes_ktgi = getInt("szerzes_ktg_"+i);
		if (Tei > 4) Szi = 0;
		
		var Bi = Mb *  ths[i] / thn[i];
		var Ki = szerzes_ktgi;
		//for(var j=i;j<n;j++)
		//	Ki += Eb[j] * ths[i] / thn[i];
		Ki += Eb[i];
		K += Ki;
		
		if (Bi > Ki) Szi += Bi - Ki;
		if (mode == 3) 
			JX += getJovedelemIngatlan(Szi,Tei);
		else 
			JX += getJovedelemMas(Szi,Tei);
		
		Szi = Tsz * ths[i] / thn[i] + LKi;
		
		if (mode == 3)
			JY += getJovedelemIngatlan(Szi,Tei);
		else
			JY += getJovedelemMas(Szi,Tei);
	}
	
	var J = Math.min(JX,JY);
	
	showResult(bevetel,K,J);
}

function validateForMode5_6() 
{
	// check for required fields
	var reqFields = new Array("atruhazas_eve","bevetel");
	var n = getInt("n");
	for(var i=0;i<n;i++)
	{
		reqFields.push("szerzes_eve_"+i);
		reqFields.push("szerzes_ktg_"+i);
	}
	if (somethingMissing(reqFields)) return false;
	if (findValidationError(reqFields)) return false;
	
	return true;
}

function calculusMode5_6(mode) 
{
	// calculus
	var n = getInt("n");
	var ae = getInt("atruhazas_eve");
	var bevetel = getInt("bevetel");
	var ertekesites_ktg = getInt("ertekesites_ktg");
	
	var erteknov_beruhazas = getInt("ertknov_beruhazas");
	var ertknov_beruhazas_allag = getInt("ertknov_beruhazas_allag");
	if (ertknov_beruhazas_allag <= bevetel * 0.05) erteknov_beruhazas -= ertknov_beruhazas_allag;
		
	var Mb = bevetel - erteknov_beruhazas - ertekesites_ktg;
	
	var ktg = new Array();
	var lki = new Array();
	var ossz = 0;
	var LK = 0;
	for(var i=0;i<n;i++)
	{
		ktg[i] = getInt("szerzes_ktg_"+i);
		lki[i] = getInt("lakasszerzesi_kedvezmeny_"+i);
		ossz += ktg[i];
		LK += lki[i];
	}
	
	var K = ossz + erteknov_beruhazas + ertekesites_ktg;
	
	var JX =0 ;
	for(var i=0;i<n;i++)
	{
		var Tei = ae - getInt("szerzes_eve_"+i);
		var bi = Mb * ktg[i] / ossz;
		var Szi = lki[i];
		if (bi > ktg[i]) Szi += bi - ktg[i];
		if (mode == 5)
			JX += getJovedelemIngatlan(Szi,Tei);
		else 
			JX += getJovedelemMas(Szi,Tei);
	}
	
	var JY = JX;
	var sze = getInt("szerzes_eve_0");
	
	var asz = LK + Math.max(bevetel - K, 0);
	JY = getJovedelemMas(asz, ae - sze);
	
	var J = JX;
	if (sze < 2008 && ae < 2011) 
	{
		if (mode == 5 && JY < JX) J = JY;
		if (mode == 6) J = JY;
	}
	
	showResult(bevetel,K,J);
}

function runCalculatorMode3() 
{	
	if (!validateForMode3_4()) return;
	
	calculusMode3_4(3);
}

function runCalculatorMode4() 
{	
	if (!validateForMode3_4()) return;
	
	calculusMode3_4(4);
}

function runCalculatorMode5() 
{	
	if (!validateForMode5_6()) return;
	
	calculusMode5_6(5);
}

function runCalculatorMode6() 
{	
	if (!validateForMode5_6()) return;
	
	calculusMode5_6(6);
}

function nyomtatas()
{
	var f = document.getElementsByTagName("input");
	var sx = getElement("tartalom").innerHTML.replace(/nyomtatas\(\)/,'window.print\(\)');
	sx = sx.replace(/<input /g,'<input readonly="readonly" ');
	sx = sx.replace(/Nyomtatás/,'<img class="print" src="img/printer.png"/>');
	var s = "";
	for (var i=0; i<f.length; i++){
		s+="document.getElementById(\""+f[i].name+"\").value = \""+f[i].value+"\";";
	}
	var w1 = window.open("","nyomtatas","width=700,height=750");
	//log(s);
	w1.document.write("<html><head><link href=\"apeh_calc_print.css\" type=\"text/css\" rel=\"stylesheet\"/></head><body>");
	w1.document.write("<div>"+sx+"</div>");
	w1.document.write("<script type=\"text/javascript\">");
	w1.document.write("function kitolt() {");
	w1.document.write(s);
	w1.document.write("}");
	w1.document.write("window.onload = kitolt();");
	w1.document.write("</script>");
	w1.document.write("</body></html>");
	w1.document.close();
	return false;
}

var trName = (navigator.appName == 'Microsoft Internet Explorer') ? 'block' : 'table-row';

function flip(fieldName) 
{
	var field = getElement(fieldName);
	field.style.display = (field.style.display == trName)  ? 'none' : trName;
}

function getTip(mode,label) 
{
	if (mode == 3) 
	{	
		if (label == 'Lakás vagy lakóházként') 
			return 'Ezt a számítási módszert akkor válassza, ha olyan ingatlant értékesít(ett), amely az ingatlanügyi hatóság nyilvántartásában  lakás vagy lakóház megnevezéssel nyilvántartott, vagy ilyenként feltüntetésre váró építmény a hozzá tartozó földrészlettel és az ingatlan egyes hányadait eltérő években szerezte meg.';
		else
			return 'Ezt a számítási módszert akkor válassza, ha olyan ingatlant értékesít(ett), amely az ingatlanügyi hatóság nyilvántartásában nem lakás vagy lakóház megnevezéssel nyilvántartott, vagy ilyenként feltüntetésre váró építmény a hozzá tartozó földrészlettel és az ingatlan egyes hányadait eltérő években szerezte meg.';
	} else
		{if (label == 'Lakás vagy lakóházként') 
			return 'Ezt a számítási módszert akkor válassza, ha olyan ingatlant értékesít(ett), amely az ingatlanügyi hatóság nyilvántartásában lakás vagy lakóház megnevezéssel nyilvántartott, vagy ilyenként feltüntetésre váró építmény a hozzá tartozó földrészlettel és, ha az ingatlanon 2007. december 31-ét követően épített használatbavételi engedélyhez kötött épületet, épületrészt, építményt, építményrészt vagy a hasznos alapterületet 6 m2-t meghaladóan bővítette.';
		else
			return 'Ezt a számítási módszert akkor válassza, ha olyan ingatlant értékesít(ett), amely az ingatlanügyi hatóság nyilvántartásában nem lakás vagy lakóház megnevezéssel nyilvántartott, vagy ilyenként feltüntetésre váró építmény a hozzá tartozó földrészlettel és, ha az ingatlanon 2007. december 31-ét követően épített használatbavételi engedélyhez kötött épületet, épületrészt, építményt, építményrészt vagy a hasznos alapterületet 6 m2-t meghaladóan bővítette.';
	}
}