document.observe('dom:loaded', function() {
	$('pleno-al-15').observe('click', apuesta_unica);
});
window.doble = 0;
window.triple = 0;

var azar = function(event, max) {
	if (!max) max = window.max;
	var item = event.element();
	if (item.id.match(/^azar-\d+$/)) {
		var column = $(item.id.replace('azar', 'column'));
		if (full_column(column.down('.negro-9'))) window.num_apuestas--;
		column.select('.casilla-selected').invoke('removeClassName', 'casilla-selected');
		var lines = column.childElements();
		
		for(var i=0; i < window.triple; ++i) {
			var rnd = Math.floor(Math.random() * lines.length);
			lines[rnd].select('.negro-9').each(function(casilla) { toggle_casilla(casilla); });
			lines.splice(rnd, 1);
		}
		for(var i=0; i < window.doble && lines.length > 0; ++i) {
			var rnd = Math.floor(Math.random() * lines.length);
			var casillas = lines[rnd].select('.negro-9');
			lines.splice(rnd, 1);
			for(var j=0; j < 2; ++j) {
				var rnd = Math.floor(Math.random() * casillas.length);
				toggle_casilla(casillas[rnd]);
				casillas.splice(rnd, 1);
			}
		}
		lines.each(function(line) {
			var casillas = line.select('.negro-9');
			var rnd = Math.floor(Math.random() * casillas.length);
			toggle_casilla(casillas[rnd]);
		});
		
		var pleno_al_15 = $$('#pleno-al-15 .casilla-selected');
		if (pleno_al_15.length == 0) {
			var casillas = $$('#pleno-al-15 .negro-9');
			var rnd = Math.floor(Math.random() * casillas.length);
			toggle_casilla(casillas[rnd]);
		}
	}
}

function full_column(casilla) {
	var columna = casilla.up('.column-box');
	if (columna) {
		var lineas = columna.childElements().select(function(linea) { return linea.select('.casilla-selected').length > 0 }).length;
		if (columna.id == 'column-1') {
			return multiples(2) == window.doble && multiples(3) == window.triple && lineas == window.max;
		} else return lineas == window.max;
	}
	return false;
}

function calc_apuestas() {
	return Math.pow(2, window.doble) * Math.pow(3, window.triple);
}

function columnas_ocultables() {
	var columns = $$('.column-box').invoke('up');
	columns.shift(); // la primera columna no se oculta nunca
	var botones = $$('#botones-azar td');
	botones.shift();
	botones.shift();
	columns = columns.concat(botones);
	var botones = $$('#botones-borrar td');
	botones.shift();
	botones.shift();
	columns = columns.concat(botones);
	return columns;
}

function toggle_multiple(casilla) {
	var multiple = 'doble';
	if (casilla.up().hasClassName('triple')) multiple = 'triple';
	
	if (casilla.hasClassName('casilla-selected')) {
		columnas_ocultables().each(function(columna) { columna.select('.casilla-selected').invoke('removeClassName', 'casilla-selected'); });
		columnas_ocultables().invoke('hide');
		window[multiple] = casilla.innerHTML;
	} else {
		window[multiple] = 0;
		if (window.doble == 0 && window.triple == 0) columnas_ocultables().invoke('show');
	}
	
	window.num_apuestas = full_column($('column-1').down('.negro-9')) ? 1 : 0;
	update_precio();
}

function multiples(tipo) {
	return $$('#column-1 > div').inject(0, function(total, line) {
		return total + (line.select('.casilla-selected').length == tipo);
	});
}

function apuesta(event, max) {
	var dobles = multiples(2);
	var triples = multiples(3);
	var item = event.element();
	var seleccionadas = item.up().select('.casilla-selected').length;
	
	if (window.triple > triples || seleccionadas == 3) {
		toggle_casilla(item);
	} else if (window.doble > dobles || seleccionadas == 2) {
		if (seleccionadas < 2 || item.hasClassName('casilla-selected')) toggle_casilla(item);
	} else apuesta_unica(event);
}

function filled_boxes(columns, max, nombre) {
	if (!max) max = window.max;
	if (!nombre) nombre = "casillas";
	var filled = columns.inject([], function(result, column) {
		if (column.up().visible()) {
			var lines = column.childElements().inject([], function(casillas, line) {
				var seleccionadas = line.select('.casilla-selected').pluck('innerHTML');
				if (seleccionadas.length > 1) {
					casillas.push("(" + seleccionadas.join("-") + ")");
				} else if (seleccionadas.length == 1) {
					casillas.push(seleccionadas[0]);
				}
				return casillas;
			});
			if (lines.length == max) {
				result.push(lines);
			} else if (lines.length > 0) {
				throw "Debe seleccionar al menos una casilla en cada partido";
			}
		}
		return result;
	});
	return filled;
}

var prepara_apuestas = function() {
	var dobles = multiples(2);
	var triples = multiples(3);
	var pleno_al_15 = $$("#pleno-al-15 .casilla-selected");
	if (window.doble != dobles) throw "El número de dobles seleccionado no es correcto";
	if (window.triple != triples) throw "El número de triples seleccionado no es correcto";
	if (pleno_al_15.length != 1) throw "Debe seleccionar una casilla en el pleno al 15";
	
	var columns = $$('.column-box');
	var filled = filled_boxes(columns);
	var multiple = window.doble != 0 || window.triple != 0;
	if ((multiple && filled.length == 1) || filled.length >= window.minapuestas) {
		$('apuestas').value = cadena_casillas(filled, "N") + " E: " + pleno_al_15[0].innerHTML;
	} else {
		if (multiple && filled.length > 1) throw "Solo hay que rellenar una columna";
		else throw "Hay que rellenar " + (multiple ? 1 : window.minapuestas) + " columnas";
	}
	return filled;
}

