function centerSimileAjax(date) {	tl.getBand(0).setCenterVisibleDate(SimileAjax.DateTime.parseGregorianDateTime(date));}function setupFilterHighlightControls(div, timeline, bandIndices, theme) {	var table = document.createElement("table");	var tr = table.insertRow(0);	var td = tr.insertCell(0);	td.innerHTML = "Filter:";	td = tr.insertCell(1);	td.innerHTML = "Highlight:";	var handler = function(elmt, evt, target) {		onKeyPress(timeline, bandIndices, table);	};	tr = table.insertRow(1);	tr.style.verticalAlign = "top";	td = tr.insertCell(0);	var input = document.createElement("input");	input.type = "text";	SimileAjax.DOM.registerEvent(input, "keypress", handler);	td.appendChild(input);	for (var i = 0; i < theme.event.highlightColors.length; i++) {		td = tr.insertCell(i + 1);		input = document.createElement("input");		input.type = "text";		SimileAjax.DOM.registerEvent(input, "keypress", handler);		td.appendChild(input);		var divColor = document.createElement("div");		divColor.style.height = "0.5em";		divColor.style.background = theme.event.highlightColors[i];		td.appendChild(divColor);	}	td = tr.insertCell(tr.cells.length);	var button = document.createElement("button");	button.innerHTML = "Clear All";	SimileAjax.DOM.registerEvent(button, "click", function() {		clearAll(timeline, bandIndices, table);	});	td.appendChild(button);	div.appendChild(table);}var timerID = null;function onKeyPress(timeline, bandIndices, table) {	if (timerID != null) {		window.clearTimeout(timerID);	}	timerID = window.setTimeout(function() {		performFiltering(timeline, bandIndices, table);	}, 300);}function cleanString(s) {	return s.replace(/^\s+/, '').replace(/\s+$/, '');}function performFiltering(timeline, bandIndices, table) {	timerID = null;	var tr = table.rows[1];	var text = cleanString(tr.cells[0].firstChild.value);	var filterMatcher = null;	if (text.length > 0) {		var regex = new RegExp(text, "i");		filterMatcher = function(evt) {			return regex.test(evt.getText()) || regex.test(evt.getDescription());		};	}	var regexes = [];	var hasHighlights = false;	for (var x = 1; x < tr.cells.length - 1; x++) {		var input = tr.cells[x].firstChild;		var text2 = cleanString(input.value);		if (text2.length > 0) {			hasHighlights = true;			regexes.push(new RegExp(text2, "i"));		} else {			regexes.push(null);		}	}	var highlightMatcher = hasHighlights ? function(evt) {		var text = evt.getText();		var description = evt.getDescription();		for (var x = 0; x < regexes.length; x++) {			var regex = regexes[x];			if (regex != null && (regex.test(text) || regex.test(description))) {				return x;			}		}		return -1;	} : null;	for (var i = 0; i < bandIndices.length; i++) {			var bandIndex = bandIndices[i];			timeline.getBand(bandIndex).getEventPainter().setFilterMatcher(filterMatcher);			timeline.getBand(bandIndex).getEventPainter().setHighlightMatcher(highlightMatcher);	}	timeline.paint();}function clearAll(timeline, bandIndices, table) {	var tr = table.rows[1];	for (var x = 0; x < tr.cells.length - 1; x++) {		tr.cells[x].firstChild.value = "";	}		for (var i = 0; i < bandIndices.length; i++) {		var bandIndex = bandIndices[i];		timeline.getBand(bandIndex).getEventPainter().setFilterMatcher(null);		timeline.getBand(bandIndex).getEventPainter().setHighlightMatcher(null);	}	timeline.paint();}
