function getSearchFormHTML() {
	var html = '';

	html += '\
		<form id="suchformular" method="post">\
		<table>\
			<tr>\
				<th>Mit allen Wörtern:</th>\
				<td><input name="all" type="text"></td>\
			</tr>\
			<tr>\
				<th>Mit irgendeinem der Wörter:</th>\
				<td><input name="any" type="text"></td>\
			</tr>\
			<tr>\
				<th>Mit keinem der Wörter:</th>\
				<td><input name="not" type="text"></td>\
			</tr>\
			<tr>\
				<th>Typ:</th>\
				<td>\
					<label for="type_d"><input type="radio" name="type" value="d" id="type_d"/>Dokumente</label> \
					<label for="type_f"><input type="radio" name="type" value="f" id="type_f"/>Dateien</label> \
					<label for="type_"><input type="radio" name="type" value="" id="type_" checked="checked"/>beide</label> \
				</td>\
			</tr>\
			<tr>\
				<th>Autor:</th>\
				<td><input name="author"/></td>\
			</tr>\
			<tr>\
				<th>Mindest-Aufrufhäufigkeit (Sterne):</th>\
				<td>\
					<label for="rating_"><input type="radio" name="rating" value="" id="rating_" checked="checked"/>egal</label> \
					<label for="rating_2"><input type="radio" name="rating" value="2" id="rating_2"/>2</label> \
					<label for="rating_3"><input type="radio" name="rating" value="3" id="rating_3"/>3</label> \
					<label for="rating_4"><input type="radio" name="rating" value="4" id="rating_4"/>4</label> \
					<label for="rating_5"><input type="radio" name="rating" value="5" id="rating_5"/>5</label> \
				</td>\
			</tr>\
			<tr>\
				<th>Geändert ab:</th>\
				<td><div><input name="modified_from" style="vertical-align:middle;"/><img src="' + window.contextPath + '/IMAGELIB/dialog/calendar_16x16.png" style="vertical-align:middle;" onclick="showCalendar(this.parentNode, this.previousSibling, 0)"/></div></td>\
			</tr>\
			<tr>\
				<th>Geändert bis:</th>\
				<td><div><input name="modified_to" style="vertical-align:middle;"/><img src="' + window.contextPath + '/IMAGELIB/dialog/calendar_16x16.png" style="vertical-align:middle;" onclick="showCalendar(this.parentNode, this.previousSibling, 1)"/></div></td>\
			</tr>\
		</table>\
		<div class="buttons">\
			<div style="position:absolute;left:0;top:0;width:0;height:0;overflow:hidden;">\
				<input type="submit" onclick="var pa = sa.getDefaultSearchParams(); extendedSearchTerm($(\'suchformular\').elements, pa);doExtendedSearch(pa);return false"/>\
			</div>\
			<a href="#" onclick="var pa = sa.getDefaultSearchParams(); extendedSearchTerm($(\'suchformular\').elements, pa);doExtendedSearch(pa);">Suchen</a>\
		</div>\
		</form>\
	';
	return html;
}

function zerofill2(v) {
	v = String(v);
	return v.length == 1 ? "0" + v : v;
}

function dateToZ(d, up) {
	if (d.match(/^\s*(\d\d?)\s*\.\s*(\d\d?)\s*\.\s*(\d\d\d\d)\s*(?:(\d\d?)\s*(?::\s*(\d\d?)\s*(?::\s*(\d\d?)\s*)?)?)?$/)) {
		return (
			RegExp.$3 + "-" +
			zerofill2(RegExp.$2) + "-" +
			zerofill2(RegExp.$1) + "T" +
			(RegExp.$4 ? zerofill2(RegExp.$4) : (up ? "23" : "00")) + ":" +
			(RegExp.$5 ? zerofill2(RegExp.$5) : (up ? "59" : "00")) + ":" +
			(RegExp.$6 ? zerofill2(RegExp.$6) : (up ? "59" : "00")) + "." +
			(up ? "999" : "000") + "Z");
	} else {
		return "";
	}
}

function extendedSearchTerm(e, searchParams) {
	var t = "";
	if (e.all.value) t += e.all.value.replace(/"/g, " ") + " ";
	if (e.any.value) {
		var l = e.any.value.split(/\s+/);
		for (var i = 0; i < l.length; i++) if (!l[i]) l.splice(i--,1);
		if (l.length) {
			t += l.join(" OR ") + " ";
		}
	}
	if (e.not.value) {
		var l = e.not.value.split(/\s+/);
		for (var i = 0; i < l.length; i++) if (!l[i]) l.splice(i--,1);
		if (l.length) {
			t += "-" + l.join(" -") + " ";
		}
	}
	
	var filter = [];
	if ($('type_d').checked) {
		filter.push('term("content-type","inode/directory")');
	}
	if ($('type_f').checked) {
		filter.push('not(term("content-type","inode/directory"))');
	}
	if (e.author.value) {
		filter.push('term("author","' + e.author.value.replace(/"/g,"\\\"") + '")');
	}
	for (var i = 2; i <= 5; i++) if ($('rating_'+i).checked) {
		filter.push('range("rating",' + i + ',5)');
	}
	if (e.modified_from.value.match(/\d/) && !dateToZ(e.modified_from.value)) {
		alert("Ungültiges Datum");
		e.modified_from.focus();
		return;
	}
	if (e.modified_to.value.match(/\d/) && !dateToZ(e.modified_to.value)) {
		alert("Ungültiges Datum");
		e.modified_to.focus();
		return;
	}
	
	var df = dateToZ(e.modified_from.value, false);
	var dt = dateToZ(e.modified_to.value, true);
	if (df || dt) {
		df = df || '0000-01-01T00:00:00Z';
		dt = dt || '9999-01-01T00:00:00Z';
		filter.push('range("modified","' + df + '","' + dt + '")');
	}
	
	searchParams.searchQuery.terms = [t];
	searchParams.searchQuery.parameterAssignments.push({parameterId: "filter", values: filter});
}

var CALENDAR_idx;

function showCalendar(div, input, idx) {
	if (CHAMAELEON_CALENDAR.isVisible() && CALENDAR_idx == idx) {
		CHAMAELEON_CALENDAR.hide();
	} else {
		CALENDAR_idx = idx;
		var d = new Date();
		var s = dateToZ(input.value, false);
		if (s) {
			d.setFullYear(s.substring(0,4));
			d.setMonth(s.substring(5,7)-1);
			d.setDate(s.substring(8,10));
			d.setHours(s.substring(11,13));
			d.setMinutes(s.substring(14,16));
			d.setSeconds(s.substring(17,19));
		}
		CHAMAELEON_CALENDAR.render(div, d, function(d){
			input.value = zerofill2(d.getDate()) + "." + zerofill2(d.getMonth()+1) + "." + d.getFullYear() + " " +
						  zerofill2(d.getHours()) + ":" + zerofill2(d.getMinutes()) + ":" + zerofill2(d.getSeconds());
		}, true, null, null, {timeGranularity: 300});
	}
}
