// Copyright 1999-2008, Jacob Rief
function sum_slot(card, npks4)
{
	var Shoe = window.document.Shoe;
	if (Shoe[card].value<0)
		Shoe[card].value = 0;
	else if (Shoe[card].value>npks4)
		Shoe[card].value = npks4;
	return eval(Shoe[card].value);
}
function set_shoe_distribution()
{
	var Shoe = window.document.Shoe;
	var npks4 = Shoe['Decks'].value*4;
	var sum = 0;
	for (i = 1; i<10; ++i) {
		sum += sum_slot('C'+i, npks4);
	}
	sum += sum_slot('C10', npks4*4);
	document.getElementById('C0').innerHTML = sum;
	var nc = 1000/sum;
	for (i = 1; i<=10; ++i) {
		document.getElementById('shoedist'+i).innerHTML = Math.round(Shoe['C'+i].value*nc)/10+'%';
	}
}
function build_querystring()
{
	var querystr = 'Decks='+window.document.Shoe['Decks'].value;
	for (i = 1; i<=10; ++i) {
		querystr += '&C'+i+'='+window.document.Shoe['C'+i].value;
	}
	return querystr;
}

function send_request()
{
	var req = createXMLHTTPObject();
	if (!req) return;
	req.onreadystatechange = function() { 
		if (req.readyState!=4) return;
		if (req.status!=200 && req.status!=304) {
			alert('HTTP error: ' + req.status);
				return;
		}
		show_tables(req); 
	};
	req.open('GET', '/wsgi/bjworker.py?'+build_querystring(), true);
	req.send(null);
}
function init_shoe()
{
	var Shoe = window.document.Shoe;
	var npks4 = Shoe['Decks'].value*4;
	if (Shoe['Decks'].value<1)
		Shoe['Decks'].value = 1;
	if (Shoe['Decks'].value>10)
		Shoe['Decks'].value = 10;
	for (i = 1; i<10; ++i) {
		Shoe['C'+i].value = npks4;
	}
	Shoe['C10'].value = npks4*4;
	set_shoe_distribution();
	send_request();
}
function reset_shoe()
{
	init_shoe();
	send_request();
}
function modify_shoe()
{
	set_shoe_distribution();
	send_request();
}

function dec_in_shoe(card)
{
	window.document.Shoe[card].value--;
	set_shoe_distribution();
	send_request();
}

function inc_in_shoe(card)
{
	window.document.Shoe[card].value++;
	set_shoe_distribution();
	send_request();
}

function set_expectation(element, value)
{
	element.innerHTML = value;
	element.className = (value<=0) ? 'dont' : 'doit';
}

var bbjdtables;
function show_tables(req) {
	if (req.readyState==4 && req.status==200) {
		// Nowadays it might be possible to do these calculations in JavaScript directly, instead of 
		// using error prone AJAX technology, but the underling C code was written in 1992 and is 
		// comparably slow - about 10 seconds with that time's hardware. So lets do the calculation on 
		// the server, rather than on the client.
		bbjdtables = eval('('+req.responseText+')');
		for (i = 1; i<=10; ++i) {
			document.getElementById('total_'+i).innerHTML = bbjdtables['total'][i]['expect'];
		}
		var val = bbjdtables['total'][0]['expect'];
		document.getElementById('total_0').className = (val<=0) ? 'dont' : 'doit';
		document.getElementById('total_0').innerHTML = '<b>'+val+'</b>';
		// probability dealers last hand
		for (i = 0; i<=10; ++i) {
			document.getElementById('pdlh_'+i+'_0').innerHTML = bbjdtables['pdlh'][0][i]['prob'];
			for (k = 17; k<24; ++k) {
				document.getElementById('pdlh_'+i+'_'+k).innerHTML = bbjdtables['pdlh'][k-16][i]['prob'];
			}
		}
		// probability players last hand
		for (i = 0; i<=10; ++i) {
			for (k = 11; k<=23; ++k) {
				document.getElementById('pplh_'+i+'_'+k).innerHTML = bbjdtables['pplh'][k-11][i]['prob'];
			}
		}
		// expectation buy - stay
		for (i = 1; i<=10; ++i) {
			for (k = 12; k<=18; ++k) {
				set_expectation(document.getElementById('ebuy_'+i+'_'+k), bbjdtables['ebuy'][k-12][i-1]['expect']);
			}
		}
		// expectation double - buy/stay
		for (i = 1; i<=10; ++i) {
			for (k = 9; k<=11; ++k) {
				set_expectation(document.getElementById('edouble_'+i+'_'+k), bbjdtables['edouble'][k-9][i-1]['expect']);
			}
		}
		// expectation split - buy/stay
		for (i = 1; i<=10; ++i) {
			for (k = 1; k<=10; ++k) {
				set_expectation(document.getElementById('esplit_'+i+'_'+k), bbjdtables['esplitdefault'][k-1][i-1]['expect']);
				set_expectation(document.getElementById('esplitpar_'+i+'_'+k), bbjdtables['esplitpartner'][k-1][i-1]['expect']);
			}
		}
		set_expectation(document.getElementById('einsure'), bbjdtables['einsure']);
	} else {
		//alert(' still not ready');
	}
}

