StreamFilter = function () {
	this.timer = null;
	bindMethods(this);
};

StreamFilter.prototype.initialize = function () {
	connect("filter", "onkeyup", this, "updateSoon");
	connect("random", "onclick", this, "updateRandom");
	for (var li = $("menu").lastChild.firstChild; li; li = li.nextSibling) {
		connect(li.id, "onclick", this, "updateMenu");
	}
	this.getArchive();
};

StreamFilter.prototype.updateSoon = function () {
	this.cancelTimer();
	this.timer = callLater(0.8, this.update);
};

StreamFilter.prototype.updateRandom = function (event) {
	$("sessionRandom").value = ($("random").firstChild.childNodes[1].checked ? 1 : 0);
	getstreamsdata(["sessionArchive", "sessionFilter", "sessionRandom", "sessionCount"], ["criteria", "streams", "random"]);
}

StreamFilter.prototype.updateMenu = function (event) {
	if (hasElementClass(event.src().id, "selected")) {
		return;
	}

	$("sessionArchive").value = event.src().id;
	$("sessionFilter").value = $("filter").value;

	$("filtertext").style.display = $("instructions").style.display = "block";
	$("description").innerHTML = "<p>loading description . . .</p>";

	this.getArchive();
}

StreamFilter.prototype.getArchive = function () {
	switcharchive(["sessionArchive"], ["description"]);
	if ($("sessionArchive").value != "about") {
		this.getFilter();
	} else {
		$("results").innerHTML = $("streams").innerHTML = $("criteria").innerHTML = "&nbsp;";
		$("filtertext").style.display = $("instructions").style.display = "none";
	}

	for (var li = $("menu").lastChild.firstChild; li; li = li.nextSibling) {
		setElementClass(li, "unselected");
	}
	setElementClass($("sessionArchive").value, "selected");
}

StreamFilter.prototype.getFilter = function () {
	var filter = $("sessionFilter").value;
	showfilter(["sessionArchive", "sessionFilter", "sessionRandom"], ["criteria", "streams", "random", "results", "sessionCount"]);
	if ($("filter").textLength > 0) {
		$("results").innerHTML = $("streams").innerHTML = "&nbsp;";
		$("criteria").innerHTML = "<p>processing filter m/" + $("sessionFilter").value + "/i";
	}
}

StreamFilter.prototype.cancelTimer = function () {
	if (this.timer) {
		this.timer.cancel();
	}
	this.timer = null;
};

StreamFilter.prototype.update = function () {
	this.cancelTimer();
	if($("sessionFilter").value != $("filter").value) {
		$("sessionFilter").value = $("filter").value;
		this.getFilter();
	}
};

streamFilter = new StreamFilter();
addLoadEvent(streamFilter.initialize);
