	function restore_search() {
		var request = [];
		var texts = [];
		var inputs = document.getElementsByTagName("input");
		var inputsl = inputs.length;
		for (var i = 0; i < inputsl; i++)
			texts.push(inputs[i]);
		var textareas = document.getElementsByTagName("textarea");
		var textareasl = textareas.length;
		for (var i = 0; i < textareasl; i++)
			texts.push(textareas[i]);
		textsl = texts.length;
		delete inputs, textareas;

		for (var i = 0; i < textsl; i++) {
			var input = texts[i];
			var names = String(input.name).split(",");
			var namesl = names.length;
			for (var j = 0; j < namesl; j++) {
				var name = names[j];
				if (name.substring(name.length-2) == "[]") // Array
					name = name.substring(0, name.length-2);
				if (!request[name])
					continue;
				var value = request[name];
				if (input.type == "checkbox") {
					if (typeof(value) == "string" && value)
						input.checked = "checked"
					else if (value.strInArray(input.value))
						input.checked = "checked";
				} else {
					if (typeof(value) == "object")
						value = value[0];
					if (input.type == "radio") {
						if (input.value == value)
							input.checked = "checked";
						else continue;
					} else
						input.value = value;
				}
				if (input.type != "hidden") {
					try {
						input.focus(); input.blur();
					} catch (e) {}
				}
				input.name = name
				restore_search_fire_events(input);
				break;
			}
		}
		var _selects = document.getElementsByTagName("select");
		var _selectsl = _selects.length;
		var selects = [];
		for (var i = 0; i < _selectsl; i++)
			selects[i] = _selects[i];
		selects.sort(function(a, b) {
			var va = Number(Boolean(a.getAttribute("onchange") || a.getAttribute("onclick")));
			var vb = Number(Boolean(b.getAttribute("onchange") || b.getAttribute("onclick")));
			return vb - va;
		});
		var selectsl = selects.length;
		for (var i = 0; i < selectsl; i++) {
			var select = selects[i];
			var name = select.name.toLowerCase();
			if (name.substring(name.length-2) == "[]") // Array
				name = name.substring(0, name.length-2);
			if (!request[name])
				continue;
			var value = request[name];
			if (typeof(value) == "object")
				var values = value;
			else
				var values = [value];
			for (var n = 0; n < values.length; n++) {
				value = values[n];
				var optionsl = select.options.length;
				for (var o = 0; o < optionsl; o++) {
					if (select.options[o].value == value) {
						select.selectedIndex = o;
						try {
							select.focus(); select.blur();
						} catch (e) {}
						break;
					}
				}
			}
			restore_search_fire_events(select);
		}
	}

	function restore_search_fire_events(el) {
		if (el.name == "orderby" || el.name == "n") return;
		if (el.onclick) el.onclick();
		if (el.onchange) el.onchange();
	}
	var restoreSearch = restore_search;
			
