// $Id: quick_play.js,v 1.45 2009-11-20 11:59:16 jbesson Exp $

document.sng_desc = {
	'ALL':      'All',
	'TC_REG':   'Regular',
	'TC_DBL':   'Double Your Money',
	'TC_SCARY': 'Scary',
	'TC_SPEED': 'Speed',
	'BOUNTY':   'Bounty',
	'HEADS_UP': 'Heads-up'
};

function qp_on_load() {

	if (!document.getElementById('qp_loading')) {return;}

	document.qpCookieIds    = ['qp_game_def_id_sel', 'qp_game_type_sel', 'qp_cash_limit_type_sel', 'qp_cash_seats_sel', 'qp_cash_stake_sel', 'qp_cash_num_seated_sel', 'qp_sng_limit_type_sel', 'qp_sng_type_sel', 'qp_sng_reg_max_sel', 'qp_sng_buy_in_sel'];
	document.qpDefaults     = {
		'qp_game_def_id_sel'      : 1,
		'qp_game_type_sel'        : 'S',
		'qp_cash_limit_type_sel'  : 'N',
		'qp_cash_seats_sel'       : 6,
		'qp_cash_stake_sel'       : '0.25~0.50~GBP',
		'qp_cash_num_seated_sel'  : 1,
		'qp_sng_limit_type_sel'   : 'N',
		'qp_sng_type_sel'         : 'ALL',
		'qp_sng_reg_max_sel'      : 6,
		'qp_sng_buy_in_sel'       : '5.00~0.50~GBP',
		'qp_sng_type_sel|HEADS_UP': 2
	};

	qpMemLoad();

	try {
		_build_select(
			'qp_game_type_sel',
			['S', 'T'],
			function(v) {
				return (v == 'S') ? 'Cash Game' : 'Sit & Go';
			}
		);
		_build_select(
			'qp_cash_limit_type_sel',
			['N', 'P', 'F'],
			limit_type_desc
		);
		_build_select(
			'qp_sng_limit_type_sel',
			['N', 'P', 'F'],
			limit_type_desc
		);

		game_type_changed();

	} catch(e) {}

	document.getElementById('qp_loading').style.display = 'none';
	document.getElementById('qp_loaded').style.display  = '';
}

function qpMemLoad() {

	var cookie = get_cookie(document.qp_cookie),
		cookie_vals, i, j, o;

	if (cookie) {
		cookie_vals = cookie.split('|');

		for (i = 0; i < cookie_vals.length; i++) {
			document.qpDefaults[document.qpCookieIds[i]] = cookie_vals[i];
		}
	}
}

function qpMemStore() {

	var params = [];

	for (var i = 0; i < document.qpCookieIds.length; i++) {
		params.push(document.getElementById(document.qpCookieIds[i]).value);
	}

	set_cookie(document.qp_cookie, params.join('|'), '', '/', '', '');
}


// --------------------------------------------
// Onchange handlers
// --------------------------------------------

function game_type_changed() {

	var gt = document.getElementById('qp_game_type_sel').value;

	document.getElementById('qp_cash_limit_type_tr').style.display  = (gt == 'S' ? '' : 'none');
	document.getElementById('qp_cash_seats_tr').style.display       = (gt == 'S' ? '' : 'none');
	document.getElementById('qp_cash_stake_tr').style.display       = (gt == 'S' ? '' : 'none');
	document.getElementById('qp_cash_num_seated_tr').style.display  = (gt == 'S' ? '' : 'none');
	document.getElementById('qp_sng_limit_type_tr').style.display   = (gt == 'T' ? '' : 'none');
	document.getElementById('qp_sng_type_tr').style.display         = (gt == 'T' ? '' : 'none');
	document.getElementById('qp_sng_reg_max_tr').style.display      = (gt == 'T' ? '' : 'none');
	document.getElementById('qp_sng_buy_in_tr').style.display       = (gt == 'T' ? '' : 'none');

	// cascade
	game_def_id_changed();
}


function game_def_id_changed() {

	if (document.getElementById('qp_game_type_sel').value == 'S') {
		_build_select('qp_game_def_id_sel', document.cash.game_def_ids, game_def_id_desc);

		// cascade
		cash_limit_type_changed();
	} else {
		_build_select('qp_game_def_id_sel', document.tnmt.game_def_ids, game_def_id_desc);

		// cascade
		sng_limit_type_changed();
	}
}


function cash_limit_type_changed() {

	var limit       = document.getElementById('qp_cash_limit_type_sel').value,
		game_def_id = document.getElementById('qp_game_def_id_sel').value;;

	// update seats
	_build_select(
		'qp_cash_seats_sel',
		document.cash.seats[game_def_id + '|' + limit]
	);

	// cascade
	cash_seats_changed();
}


function cash_seats_changed() {

	var seats       = document.getElementById('qp_cash_seats_sel').value,
	    limit       = document.getElementById('qp_cash_limit_type_sel').value,
		game_def_id = document.getElementById('qp_game_def_id_sel').value,
	    arr = [],
	    i;

	// update stakes
	_build_select(
		'qp_cash_stake_sel',
		document.cash.stakes[game_def_id + '|' + limit + '|' + seats],
		function(v) {
			return qp_cost_desc(v, '/', 'txt');
		}
	);

	// update num_seated
	for (i = 1; i < seats; i++) {
		arr.push(i);
	}
	_build_select(
		'qp_cash_num_seated_sel',
		arr
	);
}


function sng_limit_type_changed() {

	var limit       = document.getElementById('qp_sng_limit_type_sel').value,
		game_def_id = document.getElementById('qp_game_def_id_sel').value;

	// update type
	_build_select(
		'qp_sng_type_sel',
		document.tnmt.type[game_def_id + '|' + limit],
		function(v) {
			return (typeof document.sng_desc[v] != 'undefined') ? document.sng_desc[v] : v;
		}
	);

	// cascade
	sng_tnmt_type_changed();
}


function sng_tnmt_type_changed() {

	var limit       = document.getElementById('qp_sng_limit_type_sel').value,
	    tnmt_type   = document.getElementById('qp_sng_type_sel').value,
		game_def_id = document.getElementById('qp_game_def_id_sel').value;

	// update reg_max
	_build_select(
		'qp_sng_reg_max_sel',
		document.tnmt.reg_max[game_def_id + '|' + limit + '|' + tnmt_type],
		function(v) {
			if (v >= document.tnmt.reg_max_large) {
				v += '+';
			}
			return v;
		},
		'qp_sng_type_sel|' + tnmt_type
	);

	// cascade
	sng_reg_max_changed();
}


function sng_reg_max_changed() {

	var limit     = document.getElementById('qp_sng_limit_type_sel').value,
	    tnmt_type = document.getElementById('qp_sng_type_sel').value,
	    reg_max   = document.getElementById('qp_sng_reg_max_sel').value,
		game_def_id = document.getElementById('qp_game_def_id_sel').value;

	// update buy_in
	_build_select(
		'qp_sng_buy_in_sel',
		document.tnmt.buy_in[game_def_id + '|' + limit + '|' + tnmt_type + '|' + reg_max],
		function(v) {
			return qp_cost_desc(v, ' + ', 'txt');
		}
	);
}


// Build a select list
//
//   _select_id - id of select element to build
//   _list      - list containing options to add to select
//   _f         - (optional) apply _f() to option value to get option text
//
function _build_select(_select_id, _list, _f, _default) {

	var os = document.getElementById(_select_id).options,
	    i, t, prev_value, prev_diff;

	var sel = {
		idx  : 0,
		diff : -1
	};

	if (typeof _f == 'undefined') {
		_f = function(_a) { return _a }
	}

	// Remember currently-selected value; if there isn't one, use default
	if (typeof _default != 'undefined' && typeof document.qpDefaults[_default] != 'undefined') {
		prev_value = document.qpDefaults[_default];
	} else {
		if (os.selectedIndex >= 0 && os.selectedIndex < os.length) {
			prev_value = os[os.selectedIndex].value;
		} else if (typeof document.qpDefaults[_select_id] != 'undefined') {
			prev_value = document.qpDefaults[_select_id];
		} else {
			prev_value = void(0);
		}
	}

	// Rebuild
	os.length = 0;
	if (typeof _list != 'undefined' && _list.length) {
		for (i = 0; i < _list.length; i++) {
			// Add option
			os.add(new Option(_f(_list[i]), _list[i]));

			if (typeof prev_value != 'undefined') {
				// Non-numerical - exact match
				if (isNaN(parseFloat(prev_value))) {
					if (_list[i] == prev_value) {
						sel.idx  = os.length - 1;
					}
				// Numerical -- use closest value
				} else {
					prev_diff = Math.abs(parseFloat(_list[i]) - parseFloat(prev_value));
					if (sel.diff != -1) {
						if (prev_diff < sel.diff) {
							sel.idx  = os.length - 1;
							sel.diff = prev_diff;
						}
					} else {
						sel.idx  = os.length - 1;
						sel.diff = prev_diff;
					}
				}
			}
		}
		if (sel.idx > 0) {
			os.selectedIndex = sel.idx;
		}
	} else {
		// Shouldn't get here...
		os.add(new Option('n/a', -1));
	}
}


// --------------------------------------------
// Formatting
// --------------------------------------------

function qp_cost_desc(str, joiner, type) {

	var parts = str.split(/~/);
	if (type == 'txt') {
		if (parts[2] == 'GBP') {
			parts[2] = '£';
		} else if (parts[2] == 'USD') {
			parts[2] = '$';
		}
	} else {
		if (parts[2] == 'GBP') {
			parts[2] = '&pound;';
		} else if (parts[2] == 'USD') {
			parts[2] = '$';
		}
	}
	return '' + parts[2] + parts[0] + joiner + parts[2] + parts[1];
}

function sng_desc(_game_def_id, _limit, _sng_type, _reg_max, _another) {

	return limit_type_desc(_limit)
		+ ' ' + (_sng_type == 'ALL' ? '' : document.sng_desc[_sng_type])
		+ ' ' + game_def_id_desc(_game_def_id)
		+ ' ' + _reg_max + '-player Sit & Go';
}

// Reduce min_players and resubmit form
function retry_decr_min_players() {

	sky.overlay.destroy();

	if (document.getElementById('qp_cash_num_seated_sel').selectedIndex) {
		document.getElementById('qp_cash_num_seated_sel').selectedIndex--;
		Quickplay.req('reserve');
	}
}


// Increase stake by one level and resubmit form
function retry_incr_stake(_idx) {

	sky.overlay.destroy();

	document.getElementById('qp_cash_stake_sel').selectedIndex = _idx;
	Quickplay.req('reserve');
}

function qp_switch_game_type(type) {

	try {
		var sel = document.getElementById('qp_game_type_sel');
		if (sel) {
			var os = sel.options;
			var prevIdx = os.selectedIndex;
			var newIdx = -1;
			for (var i = 0; i < os.length; i++) {
				if (os[i].value == type) {
					newIdx = i;
					break;
				}
			}
			if (newIdx > -1 && newIdx != prevIdx) {
				os.selectedIndex = newIdx;
				game_type_changed();
			}
		}
	} catch(e) {}
}
