/*
if (!document.getElementById) {
	alert("Error: this tool won't work correctly with your browser or current browser settings.");
}
*/

var small_tools_panos;
var small_tools_bgr;
var small_tools_ev;

function alusta_small_tools() {

	price_converter_layout_update();
	Arb_calc();
	odds_compiler_form_update();
	
}

function tipster_averages() {

	var formi = document.forms["tipster_averages_form"];
	var a = muunna_JS_luvuksi(formi.p1.value);
	var b = muunna_JS_luvuksi(formi.p2.value);
	var w = muunna_JS_luvuksi(formi.weight.value);
	var error = "";

	if ( isNaN(a) || a <= 0 || a >= 100 )
		error = "invalid probability";
	if ( isNaN(b) || b <= 0 || b >= 100 )
		error = "invalid probability";
	if ( isNaN(w) || w < 0 || w > 100 )
		error = "invalid weight";
	
	if ( error != "" ) {
		formi.result_1.value = error;
		return;
	}	
	
	formi.result_1.value = Round_And_Cut( (a*(100-w) + w*b)/100, 2, 0 ) + "%";
	
}

function odds_compiler_form_update() {

	var formi = document.forms["odds_compiler_form"];
	if ( document.getElementById("odds_compiler_radio_1").checked ) {
		for ( i = 1; i <= 7; i = i + 1) {
			formi.elements["p" + i + "_1"].style.backgroundColor="#EAFBFF";
			formi.elements["p" + i + "_2"].style.backgroundColor="#DEEFF2";
			formi.elements["p" + i + "_1"].readOnly = false;
			formi.elements["p" + i + "_2"].readOnly = true;
			formi.elements["p" + i + "_1"].tabIndex = "";
			formi.elements["p" + i + "_2"].tabIndex = -1;
		}
	}
	else {
		for ( i = 1; i <= 7; i = i + 1) {
			formi.elements["p" + i + "_2"].style.backgroundColor="#EAFBFF";
			formi.elements["p" + i + "_1"].style.backgroundColor="#DEEFF2";
			formi.elements["p" + i + "_2"].readOnly = false;
			formi.elements["p" + i + "_1"].readOnly = true;
			formi.elements["p" + i + "_2"].tabIndex = "";
			formi.elements["p" + i + "_1"].tabIndex = -1;
		}
	}
	odds_compiler();
	
}

function odds_compiler() { 

	var formi = document.forms["odds_compiler_form"];
	var t = "";
	var a = 0;
	var s = 0;
	var v = new Array(8);
	
	if ( document.getElementById("odds_compiler_radio_1").checked ) {
		for ( i = 1; i <= 7; i = i + 1) {
			t = formi.elements["p" + i + "_1"].value;
			if ( t != "" ) {
				a = muunna_JS_luvuksi(t);
				if ( !isNaN(a) && a > 1 ) {
					a = 1 / a;
					v[i] = a;
					s = s + a;
				}
				else {
					formi.elements["p" + i + "_2"].value = "error";
					formi.result.value = "error";
					formi.result_2.value = "error";
					return;
				}
			}
			else
				formi.elements["p" + i + "_2"].value = "";
			
		}
		if ( s > 0 ) {
			for ( i = 1; i <= 7; i = i + 1) {
				t = formi.elements["p" + i + "_1"].value;
				if ( t != "" ) {
					if ( formi.elements["odds_compiler_scale"].checked )
						formi.elements["p" + i + "_2"].value = Round_And_Cut( 100 * v[i] / s, 2, 0 );
					else
						formi.elements["p" + i + "_2"].value = Round_And_Cut( 100 * v[i], 2, 0 );
				}
			}
		}
		if ( s > 0 ) {
			if ( formi.elements["odds_compiler_scale"].checked )
				formi.result.value = Round_And_Cut( 100, 3, 0 ) + "%";
			else
				formi.result.value = Round_And_Cut( 100 * s, 3, 0 ) + "%";
			formi.result_2.value = Round_And_Cut( 100 / s, 3, 0 ) + "%";
		}
		else {
			formi.result.value = "";
			formi.result_2.value = "-";
		}
	}
	else {
		for ( i = 1; i <= 7; i = i + 1) {
			t = formi.elements["p" + i + "_2"].value;
			if ( t != "" ) {
				a = muunna_JS_luvuksi(t);
				if ( !isNaN(a) && a > 0 ) {
					s = s + a / 100;
					a = 100 / a;
					v[i] = a;
				}
				else {
					formi.elements["p" + i + "_1"].value = "error";
					formi.result.value = "error";
					formi.result_2.value = "error";
					return;
				}
			}
			else
				formi.elements["p" + i + "_1"].value = "";
			
		}
		if ( s > 0 ) {
			for ( i = 1; i <= 7; i = i + 1) {
				t = formi.elements["p" + i + "_2"].value;
				if ( t != "" ) {
					if ( formi.elements["odds_compiler_scale"].checked )
						formi.elements["p" + i + "_1"].value = Round_And_Cut( v[i] / s, 2, 0 );
					else
						formi.elements["p" + i + "_1"].value = Round_And_Cut( v[i], 2, 0 );
				}
			}
		}
		if ( s > 0 ) {
			formi.result.value = Round_And_Cut( 100 * s, 3, 0 ) + "%";
			if ( formi.elements["odds_compiler_scale"].checked )
				formi.result_2.value = Round_And_Cut( 100, 3, 0 ) + "%";
			else
				formi.result_2.value = Round_And_Cut( 100 / s, 3, 0 ) + "%";
		}
		else {
			formi.result.value = "";
			formi.result_2.value = "-";
		}
	}
		
}


function target_profits() {

	var formi = document.forms["target_profits_form"];
	var m = muunna_JS_luvuksi(formi.price.value);
	var c = muunna_JS_luvuksi(formi.com.value);
	var n = muunna_JS_luvuksi(formi.profit.value);
	var error = "";

	if ( isNaN(m) || m <= 1 )
		error = "invalid price";
	if ( isNaN(c) || c < 0 || c >= 100 )
		error = "invalid commission";
	if ( isNaN(n) || n <= 1 )
		error = "invalid target profit";
	
	if ( error != "" ) {
		formi.result.value = error;
		return;
	}	
	
	formi.result.value = Round_And_Cut( n/((m-1)*(1-c*0.01)), 2, 0 );
	
}

function calculator(s) {

	var formi = document.forms["calculator_form"];
	var f = "" + formi.formula.value;
	var error = "";
	var r = 0;
	var suuruusluokka = 0;
	var t = 0;
	var i = 0;
	
	if ( s == "l" ) {
		f = f.replace(/,/g, ".");
		try {
			r = eval(f);
		}
		catch (e) {
			formi.result.value = "invalid formula";
			return;
		}
		if ( isNaN(r) )
			formi.result.value = "invalid formula";
		else {
			suuruusluokka = Math.floor(Math.log(Math.abs(r))/Math.log(10));
			t = Math.round(r*Math.pow(10, 12))/Math.pow(10, 12);
			if ( suuruusluokka >= 12 ) {
				t = t / Math.pow(10, suuruusluokka);
				t = Round_And_Cut(t, 1, 0) + "e" + suuruusluokka;
			}
			else if ( suuruusluokka >= 0 ) {
				t = "" + Round_And_Cut( t, 12 - suuruusluokka, 0 );
				if ( t.search(/\./) > 0 ) {
					for ( i = 0; i <= 12; i = i + 1 )
						t = t.replace(/0$/, "");
				}
			}
			else {
				t = "" + Round_And_Cut( t, 12, 0 );
				if ( t.search(/\./) > 0 ) {
					for ( i = 0; i <= 12; i = i + 1 )
						t = t.replace(/0$/, "");
				}
			}
			t = "" + t;
			t = t.replace(/\.$/, "");
			formi.result.value = t;
		}
		return;
	}

	if ( s == "bs" ) {
		f = f.replace(/,/g, ".");
		if ( f.length > 0 )
			formi.formula.value = f.substring(0, f.length-1);
		return;
	}
	
	f = f + s;
	f = f.replace(/,/g, ".");
	formi.formula.value = f;

}

function single_bet_profits() {

	var formi = document.forms["single_bet_profits_form"];
	var m = muunna_JS_luvuksi(formi.price.value);
	var s = muunna_JS_luvuksi(formi.stake.value);
	var error = "";

	if ( isNaN(m) || m <= 1 )
		error = "invalid price";
	if ( isNaN(s) || s <= 0 )
		error = "invalid stake";

	if ( error != "" ) {
		formi.win.value = error;
		formi.half_win.value = error;
		formi.half_push.value = error;
		return;
	}	
	
	formi.win.value = Round_And_Cut( s*(m-1), 2, 1 );
	formi.half_win.value = Round_And_Cut( 0.5*s*(m-1), 2, 1 );
	formi.half_push.value = Round_And_Cut( -0.5*s, 2, 1 );
	
}

function cover_bets() {

	var formi = document.forms["cover_bets_form"];
	var m = muunna_JS_luvuksi(formi.price.value);
	var s = muunna_JS_luvuksi(formi.stake.value);
	var n = muunna_JS_luvuksi(formi.price_2.value);
	var c = muunna_JS_luvuksi(formi.cover.value);
	var x = 0;
	var t = 0;
	var error = "";

	if ( isNaN(m) || m <= 1 )
		error = "invalid main bet price";
	if ( isNaN(s) || s <= 0 )
		error = "invalid main bet stake";
	if ( isNaN(n) || n <= 1 )
		error = "invalid cover bet price";
	if ( isNaN(c) || c <= 0 || c > 100 )
		error = "invalid covering percentage";
	
	if ( error != "" ) {
		formi.coverer_stake.value = error;
		formi.result.value = error;
		formi.result_2.value = error;
		formi.result_3.value = error;
		return;
	}	

	x = c*0.01*s/(n-c*0.01);
	t = m*s-s-x;
	if ( t < 0 ) {
		error = "no solution available";
		formi.coverer_stake.value = error;
		formi.result.value = error;
		formi.result_2.value = error;
		formi.result_3.value = error;
		return;
	}
	
	formi.coverer_stake.value=Round_And_Cut( x, 2, 0 );
	formi.result.value=Round_And_Cut( t, 2, 1 );	
	formi.result_2.value=Round_And_Cut( -s-x+x*n, 2, 1 );	
	formi.result_3.value=Round_And_Cut( -s-x, 2, 0 );	
	
}

function am_to_dec(kerroin) {
	kerroin = parseFloat(kerroin);
	if( kerroin < 100 && kerroin > -100 )
		return "error";
	if( kerroin >= 100 )
		return Round_And_Cut( 1 + kerroin/100, 3, 0 );
	if( kerroin <= -100 )
		return Round_And_Cut( (kerroin-100)/kerroin, 3, 0 );
}

function dec_to_am(kerroin) {
	kerroin = parseFloat(kerroin);
	if( kerroin >= 2 )
		return Round_And_Cut( (kerroin-1)*100, 0, 1 );
	if( kerroin > 1 )
		return Round_And_Cut( -100/(kerroin-1), 0, 0 );
	return "error";
}

function dec_to_frac(kerroin) {
	kerroin = parseFloat(kerroin);
	if ( kerroin <= 1 )
		return "error";
	var x = kerroin - 1;
	var i = 0;
	var nimittaja = 1;
	var virhe = 0;
	var minvirhe = 10;
	if ( x < 0.005 )
		nimittaja = Math.round(1/x);
	else {
		for ( i = 1; i < 101; i = i + 1 ) {
			virhe = Math.abs(Math.round(i*x) - i*x);
			if ( virhe < minvirhe ) {
				minvirhe = virhe;
				nimittaja = i;
			}
		}
	}
	return Math.round( nimittaja * x ) + "/" + nimittaja;
}

function frac_to_dec(kerroin) {
	kerroin = "" + kerroin;
	kerroin = kerroin.replace(/,/, ".");
	kerroin = kerroin.replace(/:/, "/");
	var regex_rimpsu = /^[0-9]+\/[0-9]+$/;
	if ( !regex_rimpsu.test(kerroin) )
		return "error";
	var m = parseFloat(eval(kerroin)) + 1;
	if ( onko_lukumuodossa( m ) && m > 1 )
		return Round_And_Cut( m , 3, 0 );
	else
		return "error";
}

function price_converter() { 

	var formi = document.forms["price_converter_form"];
	var a = 0;
	var t = 0;
	var sourceformat = 1;
	
	if ( document.getElementById("price_converter_radio_2").checked )
		sourceformat = 2;
	else if ( document.getElementById("price_converter_radio_3").checked )
		sourceformat = 3;

	if ( sourceformat == 1 ) {
		a = muunna_JS_luvuksi(formi.am_price.value);
		if ( !isNaN(a) ) {
			t = am_to_dec(a);
			if ( t != "error" ) {
				formi.dec_price.value = t;
				formi.frac_price.value = dec_to_frac(t);
				return;
			}
		}
		formi.dec_price.value= "invalid american price";
		formi.frac_price.value= "invalid american price";
		return;
	}
	
	if ( sourceformat == 2 ) {
		a = muunna_JS_luvuksi(formi.dec_price.value);
		if ( !isNaN(a) ) {
			t = dec_to_am(a);
			if ( t != "error" ) {
				formi.am_price.value = t;
				formi.frac_price.value = dec_to_frac(a);
				return;
			}
		}
		formi.am_price.value= "invalid decimal price";
		formi.frac_price.value= "invalid decimal price";
		return;
	}

	if ( sourceformat == 3 ) {
		a = formi.frac_price.value;
		t = frac_to_dec(a);
		if ( t != "error" ) {
			formi.am_price.value = dec_to_am(t);
			formi.dec_price.value = t;
			return;
		}
		formi.am_price.value= "invalid fractional price";
		formi.dec_price.value= "invalid fractional price";
		return;
	}
	
}

function price_converter_layout_update() {

	var sourceformat = 1;
	if ( document.getElementById("price_converter_radio_2").checked )
		sourceformat = 2;
	else if ( document.getElementById("price_converter_radio_3").checked )
		sourceformat = 3;

	var formi = document.forms["price_converter_form"];
	formi.elements["am_price"].style.backgroundColor="#DEEFF2";
	formi.elements["dec_price"].style.backgroundColor="#DEEFF2";
	formi.elements["frac_price"].style.backgroundColor="#DEEFF2";
	if ( sourceformat == 1)
		formi.elements["am_price"].style.backgroundColor="#EAFBFF";
	else if ( sourceformat == 2)
		formi.elements["dec_price"].style.backgroundColor="#EAFBFF";
	else
		formi.elements["frac_price"].style.backgroundColor="#EAFBFF";

}

function lay_calculator() { 

	var formi = document.forms["lay_calculator_form"];

	var k = muunna_JS_luvuksi(formi.price.value);
	var r = muunna_JS_luvuksi(formi.risk.value);

	var error = "";

	if ( isNaN(k) || k <= 1 )
		error = "invalid price";

	if ( isNaN(r) || r <= 0 )
		error = "invalid risk";

	if ( error != "" ) {
		formi.stake.value = error;
		return;
	}

	formi.stake.value = Round_And_Cut( r/(k-1), 2, 0 );
	
}

function commission_adder() { 

	var formi = document.forms["commission_adder_form"];

	var a = muunna_JS_luvuksi(formi.net_price.value);
	var c = muunna_JS_luvuksi(formi.commission.value);

	var error = "";

	if ( isNaN(a) || a <= 1 )
		error = "invalid price";

	if ( isNaN(c) || c <= 0  || c >= 100 )
		error = "invalid commission";

	if ( error != "" ) {
		formi.price.value = error;
		return;
	}

	formi.price.value = Round_And_Cut( (a-1)/(1-0.01*c)+1, 5, 0 );
	
}

function commission_eliminator() { 

	var formi = document.forms["commission_eliminator_form"];

	var a = muunna_JS_luvuksi(formi.price.value);
	var c = muunna_JS_luvuksi(formi.commission.value);

	var error = "";

	if ( isNaN(a) || a <= 1 )
		error = "invalid price";

	if ( isNaN(c) || c <= 0  || c >= 100 )
		error = "invalid commission";

	if ( error != "" ) {
		formi.net_price.value = error;
		return;
	}

	formi.net_price.value = Round_And_Cut( (a-1)*(1-0.01*c)+1, 5, 0 );
	
}

function price_inverser() { 

	var formi = document.forms["price_inverser_form"];

	var a = muunna_JS_luvuksi(formi.price_inverser_kerroin.value);

	var error = "";

	if ( isNaN(a) || a <= 1 )
		error = "invalid price";

	if ( error != "" ) {
		formi.price_inverser_inversed.value = error;
		return;
	}

	formi.price_inverser_inversed.value = Round_And_Cut( 1/(1-1/a), 5, 0 );
	
}

function wager_combiner() { 

	var formi = document.forms["wager_combiner_form"];

	var a = muunna_JS_luvuksi(formi.wc_kerroin_1.value);
	var m = muunna_JS_luvuksi(formi.wc_panos_1.value);
	var b = muunna_JS_luvuksi(formi.wc_kerroin_2.value);
	var n = muunna_JS_luvuksi(formi.wc_panos_2.value);

	var error = "";

	if ( isNaN(a) || isNaN(b) || a <= 1 || b <= 1 )
		error = "invalid price value";

	if ( isNaN(m) || isNaN(n) )
		error = "invalid stake value";

	if ( error != "" ) {
		formi.wc_price.value = error;
		formi.wc_stake.value = error;
		return;
	}

	formi.wc_price.value = Round_And_Cut( (a*m+b*n)/(m+n), 5, 0 );
	formi.wc_stake.value = Round_And_Cut( (m+n), 2, 0 );
	
}

function ahc_kelly_calculator() {

	var formi = document.forms["ahc_kelly_calculator_form"];

	var kerroin = muunna_JS_luvuksi(formi.ahc_kelly_kerroin.value);
	var com = muunna_JS_luvuksi(formi.ahc_kelly_com.value);
	var tn = muunna_JS_luvuksi(formi.ahc_kelly_prob_win.value);
	var tn_half_win = muunna_JS_luvuksi(formi.ahc_kelly_prob_half_win.value);
	var tn_push = muunna_JS_luvuksi(formi.ahc_kelly_prob_push.value);
	var tn_half_loss = muunna_JS_luvuksi(formi.ahc_kelly_prob_half_loss.value);
	var jakaja = muunna_JS_luvuksi(formi.ahc_kelly_divider.value);
	var kassa = muunna_JS_luvuksi(formi.ahc_kelly_bankroll.value);
	
	var error = "";

	if ( isNaN(kerroin) || kerroin <= 1 )
		error = "invalid price";

	if ( isNaN(jakaja) || jakaja < 1 )
		error = "invalid stake divider";
	
	if ( isNaN(com) || com >= 100 || com < 0 )
		error = "invalid commission";
	com = 0.01 * com;

	if ( isNaN(tn) || tn >= 100 || tn <= 0 )
		error = "invalid P(win)";

	if ( isNaN(tn_half_win) || tn_half_win >= 100 || tn_half_win < 0 )
		error = "invalid P(˝win, ˝push)";

	if ( isNaN(tn_push) || tn_push >= 100 || tn_push < 0 )
		error = "invalid P(push)";

	if ( isNaN(tn_half_loss) || tn_half_loss >= 100 || tn_half_loss < 0 )
		error = "invalid P(˝push, ˝loss)";

	if ( isNaN(kassa) || kassa <= 0 )
		error = "invalid bankroll";

	if ( tn + tn_half_win + tn_push + tn_half_loss >= 100 )
		error = "invalid probabilities";

	if ( error != "" ) {
		formi.ahc_kelly_stake.value = error;
		formi.ahc_kelly_bgr.value = error;
		return;
	}
	
	if ( tn_half_win == 0 && tn_push == 0 && tn_half_loss == 0 )
		laske_kelly(tn, kerroin, jakaja, com);
	else if ( tn_half_win > 0 && tn_push == 0 && tn_half_loss == 0 )
		laske_ahc_half_win(tn, tn_half_win, kerroin, jakaja, com);
	else if ( tn_half_win == 0 && tn_push > 0 && tn_half_loss == 0 )
		laske_ml(tn, tn_push, kerroin, jakaja, com);
	else if ( tn_half_win == 0 && tn_push == 0 && tn_half_loss > 0 )
		laske_ahc_half_loss(tn, tn_half_loss, kerroin, jakaja, com);
	else
		error = "invalid probabilities";

	if ( error != "" ) {
		formi.ahc_kelly_stake.value = error;
		formi.ahc_kelly_bgr.value = error;
		return;
	}
	
	formi.ahc_kelly_stake.value = Round_And_Cut( small_tools_panos * 100, 2, 0 ) + "%" + " (" + Round_And_Cut( small_tools_panos * kassa , 2, 0 ) + "€)";
	formi.ahc_kelly_bgr.value = Round_And_Cut( small_tools_bgr , 6, 0 );
		
}

function kelly_calculator() {

	var formi = document.forms["kelly_calculator_form"];

	var kerroin = muunna_JS_luvuksi(formi.kelly_kerroin.value);
	var com = muunna_JS_luvuksi(formi.kelly_com.value);
	var tn = muunna_JS_luvuksi(formi.kelly_prob.value);
	var jakaja = muunna_JS_luvuksi(formi.kelly_divider.value);
	var kassa = muunna_JS_luvuksi(formi.kelly_bankroll.value);
	
	var error = "";

	if ( isNaN(kerroin) || kerroin <= 1 )
		error = "invalid price";

	if ( isNaN(jakaja) || jakaja < 1 )
		error = "invalid stake divider";
	
	if ( isNaN(com) || com >= 100 || com < 0 )
		error = "invalid commission";
	com = 0.01 * com;

	if ( isNaN(tn) || tn >= 100 || tn <= 0 )
		error = "invalid probability";
	
	if ( isNaN(kassa) || kassa <= 0 )
		error = "invalid bankroll";

	if ( error != "" ) {
		formi.kelly_stake.value = error;
		formi.kelly_bgr.value = error;
		return;
	}
	
	laske_kelly(tn, kerroin, jakaja, com);
	
	formi.kelly_stake.value = Round_And_Cut( small_tools_panos * 100, 2, 0 ) + "%" + " (" + Round_And_Cut( small_tools_panos * kassa , 2, 0 ) + "€)";
	formi.kelly_bgr.value = Round_And_Cut( small_tools_bgr , 6, 0 );
		
}

function laske_kelly(a, kerroin, jakaja, com) {
	a = a * 0.01;
	m = ( kerroin - 1 ) * ( 1 - com );
	small_tools_panos = (a*m-1+a)/m;
	small_tools_panos = small_tools_panos / jakaja;
	if ( small_tools_panos < 0 )
		small_tools_panos = 0;
	small_tools_bgr = Math.pow( 1 + small_tools_panos * m, a ) * Math.pow( 1 - small_tools_panos, 1 - a );
	small_tools_ev = a * (m + 1) - 1;
}

function laske_ahc_half_win(a, b, kerroin, jakaja, com) {
	a = a * 0.01;
	b = b * 0.01;
	var m = ( kerroin - 1 ) * ( 1 - com );
	var x = (a*m+b*m-1+a-2+2*b)*m;
	var sqr = Math.sqrt(x*x+4*m*m*(2*a*m+b*m-2+2*a+2*b));
	small_tools_panos = ( -x - sqr ) / ( (-2)*m*m );
	if ( small_tools_panos > 1 )
		small_tools_panos = ( -x + sqr ) / ( (-2)*m*m );
	small_tools_panos = small_tools_panos / jakaja;
	if ( small_tools_panos < 0 )
		small_tools_panos = 0;
	small_tools_bgr = Math.pow( 1 + small_tools_panos * m, a ) * Math.pow( 1 + 0.5 * small_tools_panos * m, b ) * Math.pow( 1 - small_tools_panos, 1 - a - b );
	small_tools_ev = a * ( m + 1 ) + 0.5 * b * ( m + 1 + 1 ) - 1;
}

function laske_ahc_half_loss(a, b, kerroin, jakaja, com) {
	a = a * 0.01;
	b = b * 0.01;
	var m = ( kerroin - 1 ) * ( 1 - com );
	var x = -0.5*a*m+0.5*b*m-m+0.5-0.5*a;
	var sqr = Math.sqrt(x*x-2*m*(a*m+0.5*b+a-1));
	small_tools_panos = ( -x + sqr ) / m;
	if ( small_tools_panos > 1 )
		small_tools_panos = ( -x - sqr ) / m;
	small_tools_panos = small_tools_panos / jakaja;
	if ( small_tools_panos < 0 )
		small_tools_panos = 0;
	small_tools_bgr = Math.pow( 1 + small_tools_panos * m, a ) * Math.pow( 1 - 0.5 * small_tools_panos, b ) * Math.pow( 1 - small_tools_panos, 1 - a - b );
	small_tools_ev = a * ( m + 1 ) + 0.5 * b - 1;
}

function laske_ml(a, b, kerroin, jakaja, com) {
	a = a * 0.01;
	b = b * 0.01;
	var m = ( kerroin - 1 ) * ( 1 - com );
	small_tools_panos = (a*m-1+a+b)/(m-b*m);
	small_tools_panos = small_tools_panos / jakaja;
	if ( small_tools_panos < 0 )
		small_tools_panos = 0;
	small_tools_bgr = Math.pow( 1 + small_tools_panos * m, a ) * Math.pow( 1 - small_tools_panos, 1 - a - b );
	small_tools_ev = a * ( m + 1 ) + b - 1;
}

function arb_calc_layout_reset() {
	document.getElementById('arbitrage_calculator').reset();
	var formi = document.forms["arbitrage_calculator"];
	Arb_calc();
}

function Arb_calc() {
	var kertoimet = new Array(21);
	var moodit = new Array(21);
	var panokset = new Array(21);
	var komissiot = new Array(21);
	var keystake_indeksi = -1;
	var samassa_moodissa_olevien_panosten_summa = 0;
	var tuntemattomia_panoksia = 0;
	var kaanteisluvut = 0;
	var temp_field_value = 0;
	var palautusprosentti = 0;
	var palautusprosentti_2 = 0;
	var panoksien_summa = 0;
	var kohteita = 0;
	var error = "";
	var arvot = new Array(21);
	var formi = document.forms["arbitrage_calculator"];
	var t = 0;
	
	for ( i=1; i<=20; i++ ) {
		formi.elements["stake_" + i].style.backgroundColor="#DAE3E5";
		if ( formi.elements["keystake"][i-1].checked ) {
			keystake_indeksi = i;
			formi.elements["stake_" + i].style.backgroundColor="white";
			formi.elements["stake_" + i].readOnly = false;
			formi.elements["stake_" + i].tabIndex = "";
			arvot[i] = 1;
			temp_field_value = formi.elements["stake_" + i].value;
			if ( temp_field_value != "" ) {
				temp_field_value = muunna_JS_luvuksi(temp_field_value);
				if ( !isNaN(temp_field_value) && temp_field_value > 0 )
					panokset[i] = temp_field_value;
				else
					error = "stake!";
			}
		}
		else {
			formi.elements["stake_" + i].readOnly = true;
			formi.elements["stake_" + i].tabIndex = -1;
		}
		
		if ( formi.elements["staking_mode_" + i].checked )
			moodit[i] = 0;
		else
			moodit[i] = 1;
			
		temp_field_value = formi.elements["ker_" + i].value;
		if ( temp_field_value != "" ) {
			arvot[i] = 1;
			temp_field_value = muunna_JS_luvuksi(temp_field_value);
			if ( !isNaN(temp_field_value) && temp_field_value > 1 ) {
				kertoimet[i] = temp_field_value;
				temp_field_value = muunna_JS_luvuksi(formi.elements["com_" + i].value);
				if ( !isNaN(temp_field_value) && temp_field_value >= 0 && temp_field_value < 100 ) {
					komissiot[i] = temp_field_value/100;
					kertoimet[i] = ( kertoimet[i] - 1 ) * (1-komissiot[i]) + 1;
				}
				else
					error = "com!";
				palautusprosentti = palautusprosentti + 1/kertoimet[i];
				if ( moodit[i] == 0 )
					palautusprosentti_2 = palautusprosentti_2 + 1/kertoimet[i];
				kohteita = kohteita + 1;
			}
			else
				error = "price!";
		}
		
	}

	if ( error == "price!" || error == "com!" ) {
		for ( i = 1; i <= 20; i++ ) {
			if ( arvot[i] == 1 )
				formi.elements["limit_" + i].value = error;
			else
				formi.elements["limit_" + i].value = "";
		}
		if ( panokset[keystake_indeksi] > 0 ) {
			for ( i = 1; i <= 20; i++ ) {
				if ( arvot[i] == 1 ) {
					formi.elements["profit_" + i].value = error;
					if ( i != keystake_indeksi )
						formi.elements["stake_" + i].value = error;
				}
				else {
					formi.elements["profit_" + i].value = "";
					formi.elements["stake_" + i].value = "";
				}
			}
		}
		formi.elements["total_stakes"].value = "";
		formi.elements["palautusprosentti"].value = "";
		return;
	}
		
	if ( error == "stake!" ) {
		for ( i = 1; i <= 20; i++ ) {
			if ( arvot[i] == 1 ) {
				formi.elements["profit_" + i].value = error;
				if ( i != keystake_indeksi )
					formi.elements["stake_" + i].value = error;
			}
			else {
				formi.elements["profit_" + i].value = "";
				formi.elements["stake_" + i].value = "";
			}
		}
		formi.elements["total_stakes"].value = error;
		return;
	}

	palautusprosentti = 1 / palautusprosentti;

	for ( i=1; i<=20; i++ ) {
		if ( kertoimet[i] > 1 ) {
			if ( moodit[i] == moodit[keystake_indeksi] ) {
				if ( i != keystake_indeksi )
					panokset[i] = panokset[keystake_indeksi] * kertoimet[keystake_indeksi] / kertoimet[i];
				samassa_moodissa_olevien_panosten_summa = samassa_moodissa_olevien_panosten_summa + panokset[i];
			}
			else
				kaanteisluvut = kaanteisluvut + 1 / kertoimet[i];
		}
	}

	tuntemattomia_panoksia = kertoimet[keystake_indeksi] * panokset[keystake_indeksi] - samassa_moodissa_olevien_panosten_summa;
	
	for ( i=1; i<=20; i++ ) {
		if ( kertoimet[i] > 1 ) {
			if ( moodit[i] != moodit[keystake_indeksi] ) {
				if ( moodit[i] == 0 )
					panokset[i] = samassa_moodissa_olevien_panosten_summa / ( kertoimet[i] * ( 1 - kaanteisluvut ) );
				else
					panokset[i] = ( 1 / kertoimet[i] ) / kaanteisluvut * tuntemattomia_panoksia;
			}
			panoksien_summa = panoksien_summa + panokset[i];
		}
	}

	if ( kohteita < 2 )
		return;
	formi.elements["palautusprosentti"].value = Round_And_Cut(100*palautusprosentti, 2, 0) + "%";
	if ( palautusprosentti_2 > 1 )
		formi.elements["total_stakes"].value = "";
	else
		formi.elements["total_stakes"].value = Round_And_Cut(panoksien_summa, 2, 0);

	for ( i=1; i<=20; i++ ) {
		if ( kertoimet[i] > 1 ) {
			if ( 1/palautusprosentti - 1/kertoimet[i] >= 0.999999 )
				formi.elements["limit_" + i].value = "arb n.a.";
			else {
				temp_field_value = 1 / ( 1 - ( 1/palautusprosentti - 1/kertoimet[i] ));
				temp_field_value = (temp_field_value-1)/(1-komissiot[i])+1;
				formi.elements["limit_" + i].value = Round_And_Cut( temp_field_value, 2, 0);
			}
			if ( palautusprosentti_2 > 1 ) {
				formi.elements["profit_" + i].value = "not possible";
				if ( i != keystake_indeksi )
					formi.elements["stake_" + i].value = "not possible";
			}
			else {
				t = panokset[i] * kertoimet[i] - panoksien_summa;
				if ( t > -0.005 && t < 0 )
					t = 0;
				formi.elements["profit_" + i].value = Round_And_Cut( t, 2, 1);
				if ( i != keystake_indeksi )
					formi.elements["stake_" + i].value = Round_And_Cut( panokset[i], 2, 0);
			}
		}
		else {
			formi.elements["limit_" + i].value = "";
			if ( i != keystake_indeksi )
				formi.elements["stake_" + i].value = "";
			formi.elements["profit_" + i].value = "";
		}
	}
	
}
