function semanal(event) {
	var element = event.element();
	if (!element.match('input')) return;
	
	this.select('label').each(function(item) { item.removeClassName('selected'); });
	this.select('label[for='+element.id+']')[0].addClassName('selected');
	
	var semanal = $('semanal');
	if (semanal && window.minapuestas_tipo) {
		window.minapuestas = window.minapuestas_tipo[semanal.checked ? 1 : 0];
	}
	new Ajax.Request('run.php', {method: 'get', parameters: Form.serialize('juego') + '&op=info_juego',
		onComplete: function(result) {
			var data = result.responseJSON;
			$("fecha-juego").update(data.fecha);
			$("limite-juego").update(data.limite);
			$("sorteos-juego").update(data.sorteos);
			update_precio();
		}
	});
}

function abonado() {
	var abono = this;
	$$('#abonos input').invoke(abono.checked ? 'enable' : 'disable');
	update_precio();
}

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();
	columns = columns.concat(botones);
	var botones = $$('#botones-borrar td');
	botones.shift();
	columns = columns.concat(botones);
	return columns;
}

function toggle_casilla(div) {
	var was_full = full_column(div);
	div.toggleClassName('casilla-selected');
	var is_full = full_column(div);
	if (was_full != is_full) {
		if (was_full) window.num_apuestas--;
		else window.num_apuestas++;
		update_precio();
	}
}

function full_column(casilla) {
	var columna = casilla.up('.column-box');
	if (columna) {
		var casillas = columna.select('.casilla-selected').length;
		return casillas == window.max;
	}
	return false;
}

function hide_columnas() {
  var columnas = columnas_ocultables();
  columnas.each(function(columna) { columna.select('.casilla-selected').invoke('removeClassName', 'casilla-selected'); });
  columnas.invoke('hide');
}

function show_columnas() {
  columnas_ocultables().invoke('show');
}

function toggle_columnas() {
  if ($$('.multiple .casilla-selected').length > 0) {
    hide_columnas();
  } else {
    show_columnas();
  }
}

function cambia_max(casilla) {
  if (casilla.hasClassName('casilla-selected')) {
    window.max = window.maxsele[casilla.innerHTML];
  } else {
    window.max = window.simple_max;
  }
}

function toggle_multiple(casilla) {
	toggle_columnas();
	cambia_max(casilla);
	
	window.num_apuestas = full_column($('column-1').down('.negro-9')) ? 1 : 0;
	update_precio();
}

function calc_apuestas() {
	var apuestas = window.apuestas[window.max];
	if (!apuestas) apuestas = 1;
	return apuestas;
}

function update_precio() {
	var apuestas = calc_apuestas();
	var sorteos = parseInt($('sorteos-juego').innerHTML);
	var abono = $A($('juego')['abono']).select(function(radio) { return radio.checked })[0];
	if ($F("abonado") && abono) {
		var semanal = $('semanal');
		sorteos += $F(abono) * (semanal && semanal.checked ? dias_semanal : 1);
	}
	$("precio-juego").value = window.num_apuestas * coste * apuestas * sorteos;
}

function apuesta_multiple(event) {
	var casilla = event.element();
	if (casilla.hasClassName('negro-9')) {
		casilla.up().select('.casilla-selected').without(casilla).invoke('removeClassName', 'casilla-selected');
		casilla.toggleClassName('casilla-selected');
		toggle_multiple(casilla);
	}
}

function apuesta_unica(event) {
	var casilla = event.element();
	if (casilla.hasClassName('negro-9')) {
		var casillas = casilla.up().select('.casilla-selected');
		var nueva_apuesta = casillas.length == 0;
		casillas.invoke('removeClassName', 'casilla-selected');
		casilla.toggleClassName('casilla-selected');
		if (nueva_apuesta && full_column(casilla)) {
			window.num_apuestas++;
			update_precio();
		}
	}
}

function apuesta(event, max) {
	if (!max) max = window.max;
  else if (Object.isString(max)) max = window[max];
	var item = event.element();
	if (item.hasClassName('negro-9')) {
		if (item.hasClassName('casilla-selected') || item.up().select('.casilla-selected').length < max) {
			toggle_casilla(item);
		}
	}
}

function borrar(event) {
	var item = event.element();
	if (item.id.match(/^borrar-\d+$/)) {
		event.stop();
		var column = $(item.id.replace('borrar', 'column'));
		if (full_column(column.down('.negro-9'))) window.num_apuestas--;
		column.select('.casilla-selected').invoke('removeClassName', 'casilla-selected');
		update_precio();
	}
}

function azar(event, max) {
	if (!max) max = window.max;
	var item = event.element();
	if (item.id.match(/^azar-\d+$/)) {
		event.stop();
		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 casillas = column.select('.negro-9');
		for(var i=0; i < max; ++i) {
			var rnd = Math.floor(Math.random() * casillas.length);
			toggle_casilla(casillas[rnd]);
			casillas.splice(rnd, 1);
		}
	}
}

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 casillas = column.select('.casilla-selected').pluck('innerHTML');
			if (casillas.length == max) {
				result.push(casillas);
			} else if (casillas.length > 0) {
				throw "Debe seleccionar " + max + " " + nombre;
			}
		}
		return result;
	});
	return filled;
}

function cadena_casillas(filled, codigo) {
	return codigo + ": " + filled.collect(function(casillas) {
		return casillas.sort(function(a,b) { return a-b; }).join("-");
	}).join(" " + codigo + ": ");
}

function prepara_apuestas() {
	var columns = $$('.column-box');
	var filled = filled_boxes(columns);
	var multiple = $$('.multiple .casilla-selected').length > 0;
	if ((multiple && filled.length == 1) || filled.length >= window.minapuestas) {
		$('apuestas').value = cadena_casillas(filled, "N");
	} 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;
}

function envia() {
	try {
		prepara_apuestas();
		$('juego').submit();
	} catch (e) {
		alert(e); // mostrar error
	}
}

document.observe('dom:loaded', function() {
	$('dias-juego').observe('click', semanal);
	if ($('abonado')) abonado.apply($('abonado').observe('click', abonado));
	$$('.multiple').invoke('observe', 'click', apuesta_multiple);
	$$('.column-box').invoke('observe', 'click', apuesta);
	$('botones-borrar').observe('click', borrar);
	$('botones-azar').observe('click', azar);
});

