f_addEvent(window, "load", f_init, false);

var hTipos     = null, oTipos     = null;
var hSecciones = null, oSecciones = null;
var hApartados = null, oApartados = null;
var hPuntos    = null, oPuntos    = null;

function f_init() {
	hTipos     = $("hTipos");
	hSecciones = $("hSecciones");
	hApartados = $("hApartados");
	hPuntos    = $("hPuntos");

	oTipos            = new clsChecks(hTipos);
	oTipos.change     = loadListado;
	oTipos.loaded     = f_loadedTipos;

	oSecciones        = new clsRadios(hSecciones);
	oSecciones.change = loadApartados;
	oSecciones.reload();
	oSecciones.setDefault();

	oApartados        = new clsRadios(hApartados);
	oApartados.change = loadPuntos;
	oApartados.loaded = f_loadedApartados;

	oPuntos           = new clsRadios(hPuntos);
	oPuntos.change    = loadListado;
	oPuntos.loaded    = f_loadedPuntos;

	loadTipos();
	loadApartados();
}

function loadTipos() {
	new Ajax.Request("ajaxTipos.php", {
		onSuccess: oTipos.loaded
	});
}

function loadApartados() {
	var s = oSecciones.getValues();
	new Ajax.Request("ajaxApartados.php?s="+s, {
		onSuccess: oApartados.loaded
	});
}

function loadPuntos() {
	var s = oApartados.getValues();
	new Ajax.Request("ajaxPuntos.php?s="+s, {
		onSuccess: oPuntos.loaded
	});
}

function loadListado() {
	var s = oSecciones.getValues();
	var a = oApartados.getValues();
	var p = oPuntos.getValues();
	var t = oTipos.getValues();
	setCookie("hSecciones", s);
	setCookie("hApartados", a);
	setCookie("hPuntos", p);
	setCookie("hTipos", t);
	new Ajax.Request("ajaxListado.php?s="+p+"&t="+t, {
		onSuccess: function(req) {
			$("listado").innerHTML = req.responseText;
		}
	});
}

function clsChecks(elm) {
	var pthis = this;
	this.parent = elm;
	this.reload = function() {
		this.checks = $$("#"+elm.id+" input");
		this.checks.each(function(elm) {
			elm.onclick = function() {
				if(!this.checked) pthis.cAll.checked = false;
				pthis.change();
			}
		});
		this.cAll   = this.checks.first();
		this.cAll.onclick = this.checkAll;
	}
	this.setDefault = function() {
		var sv = getCookie(pthis.parent.id);
		if(sv==null || sv=="" || sv=="0") {
			this.checks[0].checked = true;
			this.checkAll();
		} else {
			var av = sv.split(",");
			pthis.checks.each(function(elm) {
				if(av.indexOf(elm.value)>-1) elm.checked = true;
			});
		}
	}
	this.checkAll = function() {
		if(pthis.cAll.checked) {
			var checks = pthis.checks;
			for(k in checks) {
				checks[k].checked = true;
			}
		}
	}
	this.getValues = function() {
		if(this.cAll.checked) return "0";
		var retval = "";
		for(k in this.checks) {
			if(typeof(this.checks[k])=="object")
				if(this.checks[k].checked)
					retval += this.checks[k].value+",";
		}
		return retval.substring(0, retval.length-1);
	}
}

function clsRadios(elm) {
	var pthis = this;
	this.parent = elm;
	this.reload = function() {
		this.radios = $$("#"+elm.id+" input");
		this.radios.each(function(elm) {
			elm.onclick = function() {
				pthis.change();
			}
		});
	}
	this.setDefault = function() {
		var sv = getCookie(pthis.parent.id);
		if(!sv || sv==null || sv=="" || sv=="0") {
			this.radios[0].checked = true;
		} else {
			var almostone = false;
			pthis.radios.each(function(elm) {
				if(elm.value==sv) {
					elm.checked = true;
					almostone = true;
				}
			});
			if(!almostone) this.radios[0].checked = true;
		}
	}
	this.getValues = function() {
		for(i=0;i<this.radios.length;i++)
			if(this.radios[i].checked)
				return this.radios[i].value;
		return null;
	}
}

function f_loadedTipos(req) {
	var aOptions = req.responseText.evalJSON();
	hTipos.innerHTML = "";
	for(k in aOptions) {
		hTipos.innerHTML += "<p class=\"optn\"><input type=\"checkbox\" name=\"cTipos\" value=\""+k+"\" /> "+aOptions[k]+"</p>";
	};
	oTipos.reload();
	oTipos.setDefault();
}

function f_loadedApartados(req) {
	var aOptions = req.responseText.evalJSON();
	hApartados.innerHTML = "";
	for(k in aOptions) {
		hApartados.innerHTML += "<p class=\"optn\"><input type=\"radio\" name=\"rApartados\" value=\""+k+"\" /> "+aOptions[k]+"</p>";
	};
	oApartados.reload();
	oApartados.setDefault();
	loadPuntos();
}

function f_loadedPuntos(req) {
	var aOptions = req.responseText.evalJSON();
	hPuntos.innerHTML = "";
	for(k in aOptions) {
		hPuntos.innerHTML += "<p class=\"optw\"><input type=\"radio\" name=\"rPuntos\" value=\""+k+"\" /> "+aOptions[k]+"</p>";
	};
	oPuntos.reload();
	oPuntos.setDefault();
	loadListado();
}

function setCookie(name, value) {
	document.cookie = name+"="+value+"";
}

function getCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}