/**********************
 * Hier stehen die Funktionen im Zusammenhang mit der Personensuche.
 **********************/
 
 
function person_clearSearch() {
	person_closeDetails();

	byId('fffi-home_content').style.display = 'none';
	byId('fffi-home_tb').style.display = 'none';
	byId('fffi-person_content').style.display = 'block';
	byId('fffi-person_tb').style.display = 'block';
	byId('fffi-doc_content').style.display = 'none';
	byId('fffi-doc_tb').style.display = 'none';
	byId('tabHome').className ='tabClosed homeClosed';
	byId('tabPerson').className ='tabOpen personOpen';
	byId('tabDoc').className = 'tabClosed docClosed';
	
	byId('person_filterArea').innerHTML = '';

	var empty = byId('person_template_empty').cloneNode(true);
	empty.id = 'person_0_col0_empty';
	empty.style.display = 'block';
	
	byId('person_filterArea').appendChild(empty);
}

function person_externalSearchSurname(surname) {
	person_externalSearch('surname', surname);
}

function person_externalSearch(field, value) {
	person_clearSearch();
	
	byId('person_0_col0_empty').getElementsByTagName('select')[0].value = field;
	person_createFilter(byId('person_0_col0_empty').getElementsByTagName('select')[0]);	
	
	byId('person_0_col0_filter').getElementsByTagName('input')[0].value = value;	
	person_getSearchSentence();
	person_search();
}

/**
 * Diese Funktion erstellt eine neue Filterbox, indem ein Knoten als Kopie von einer Vorlage erzeugt wird.
 */

function person_createFilter(selectBox) {

	var val = selectBox.value;
	
	var oldId = selectBox.parentNode.id;
	var row = oldId.substring(oldId.indexOf('_') + 1, oldId.indexOf('_col'));
	var col = (oldId.indexOf('col0') != -1?'col0':'col1');
	var next = selectBox.parentNode.nextSibling;
	
	var filter = null;

	if(val.indexOf('allNames') != -1)			filter = byId('person_template_AllNames').cloneNode(true);
	else if(val.indexOf('surname') != -1)		filter = byId('person_template_Surname').cloneNode(true);
	else if(val.indexOf('forename') != -1)		filter = byId('person_template_Forename').cloneNode(true);
	else if(val.indexOf('institution') != -1)	filter = byId('person_template_Institution').cloneNode(true);
	else if(val.indexOf('addName') != -1)		filter = byId('person_template_AddName').cloneNode(true);
	else if(val.indexOf('occupation') != -1)	filter = byId('person_template_Occupation').cloneNode(true);
	else if(val.indexOf('placeSummary') != -1)	filter = byId('person_template_PlaceSummary').cloneNode(true);
	else if(val.indexOf('placeOfBirth') != -1)	filter = byId('person_template_PlaceOfBirth').cloneNode(true);
	else if(val.indexOf('dayOfBirth') != -1)	filter = byId('person_template_DayOfBirth').cloneNode(true);
	else if(val.indexOf('placeOfDeath') != -1)	filter = byId('person_template_PlaceOfDeath').cloneNode(true);
	else if(val.indexOf('dayOfDeath') != -1)	filter = byId('person_template_DayOfDeath').cloneNode(true);
	else if(val.indexOf('full') != -1)			filter = byId('person_template_FullText').cloneNode(true);
		
	filter.id = 'person_' + row + '_' + col + '_filter';
	filter.style['display'] = 'block';
		
	byId('person_filterArea').replaceChild(filter, selectBox.parentNode);

	if(col.indexOf('col1') == -1) {
		var or = byId('person_template_or').cloneNode(true);
		or.id = 'person_' + row + '_or';
		or.style['display'] = 'block';

		var empty1 = byId('person_template_empty').cloneNode(true);
		empty1.id = 'person_' + row + '_' + 'col1_empty';
		empty1.style['display'] = 'block';

		var and = byId('person_template_and').cloneNode(true);
		and.id = 'person_' + row + '_and';
		and.style['display'] = 'block';

		var empty2 = byId('person_template_empty').cloneNode(true);
		empty2.id = 'person_' + (Number(row) + 1) + '_col0_empty';
		empty2.style['display'] = 'block';

		if(next) {
			byId('person_filterArea').insertBefore(or, next);
			byId('person_filterArea').insertBefore(empty1, next);
			byId('person_filterArea').insertBefore(and, next);
			byId('person_filterArea').insertBefore(empty2, next);
		}else {
			byId('person_filterArea').appendChild(or);
			byId('person_filterArea').appendChild(empty1);
			byId('person_filterArea').appendChild(and);
			byId('person_filterArea').appendChild(empty2);
		}
	}

	byId('person_' + row + '_' + col + '_filter').getElementsByTagName('input')[0].value = "";
	inputField = byId('person_' + row + '_' + col + '_filter').getElementsByTagName('input')[0];
	window.setTimeout("setFocus()", 42);		
	// byId('person_' + row + '_' + col + '_filter').getElementsByTagName('input')[0].focus();
}

/**
 * Hilfsfunktion zum selektieren des erzeugten Input-Feldes.
 */

var inputField;
function setFocus() {
	inputField.focus();
}


/**
 *  Diese Funktion entfernt eine Filterbox. Es werden die nachfolgenden Boxen
 *  ggf. nach vorne gezogen.
 */

function person_removeFilter(deleteDiv) {

	var filterBox = deleteDiv.parentNode.parentNode;
	var row = filterBox.id.substring(filterBox.id.indexOf('_') + 1, filterBox.id.indexOf('_col'));
	var col = (filterBox.id.indexOf('col0') != -1?'col0':'col1');
	
	if(col.indexOf('col1') != -1) {
		var empty1 = byId('person_template_empty').cloneNode(true);
		empty1.id = 'person_' + row + '_' + 'col1_empty';
		empty1.style['display'] = 'block';
		
		byId('person_filterArea').replaceChild(empty1, filterBox);
	
	}else {
		if(byId('person_' + row + '_' + 'col1_empty')) {
			if(byId('person_' + (Number(row) + 1) + '_' + 'col0_empty')) {
				byId('person_filterArea').removeChild(filterBox);
				byId('person_filterArea').removeChild(byId('person_' + row + '_or'));
				
				byId('person_filterArea').removeChild(byId('person_' + row + '_and'));
				byId('person_filterArea').removeChild(byId('person_' + (Number(row) + 1) + '_' + 'col0_empty'));

				byId('person_' + row + '_' + 'col1_empty').id = 'person_' + row + '_' + 'col0_empty';
			}else {
				byId('person_filterArea').removeChild(filterBox);
				byId('person_filterArea').removeChild(byId('person_' + row + '_or'));
				byId('person_filterArea').removeChild(byId('person_' + row + '_' + 'col1_empty'));
				byId('person_filterArea').removeChild(byId('person_' + row + '_and'));
			}

		}else {
			byId('person_filterArea').replaceChild(byId('person_' + row + '_' + 'col1_filter'), filterBox);
			byId('person_' + row + '_' + 'col1_filter').id = 'person_' + row + '_' + 'col0_filter';
			
			var empty1 = byId('person_template_empty').cloneNode(true);
			empty1.id = 'person_' + row + '_' + 'col1_empty';
			empty1.style['display'] = 'block';

			byId('person_filterArea').insertBefore(empty1, byId('person_' + row + '_' + 'or').nextSibling);
		}
	}	
	person_getSearchSentence();
}

/**
 *  Diese Funktion baut die Suchanfrage für die Datenbank
 *  und den Suchsatz für die Anzeige auf.
 **/

function person_search() {
	byId('person_startSearch').style['display'] = 'none';
	byId('person_currentSearch').style['display'] = 'block';

	var row = 0;
	var searchQuery = '';
	
	while(true) {
		if(byId('person_' + row + '_col0_empty')) break;		
		var filter = '';
		if(byId('person_' + row + '_col0_filter')) { var search = person_getSearchString('person_' + row + '_col0_filter'); if(search.length != 0) filter += search; }		
		if(byId('person_' + row + '_col1_filter')) { var search = person_getSearchString('person_' + row + '_col1_filter'); if(search.length != 0) filter += '--or--' + search; }
		if(filter.length != 0) { if(searchQuery.length != 0)	searchQuery += '--and--' + filter; else searchQuery += filter; }		
		row++;
	}
	if(searchQuery.length != 0) person_getTable(searchQuery);
}

/**
 * Diese Funktion ruft im Hintergrund die PHP-Datei auf, welche die Suchergebnisse zurückliefert
 * Neu ist, dass es eine Such-ID gibt - wird die noch gebraucht?
 **/

var person_hits=0;
var loadedPersons=0;

function person_getTable(crit) {
	startRequest('person_search');
	if(requests != null) requests.transport.abort();
	loadedPersons=0;
	requests = new Ajax.Request('PHP/person/existRequestTable.php', {
		method: 'get', 
		parameters: 'unique=' + new Date().getTime() + '&criteria=' + encodeURIComponent(crit), 
		onSuccess: person_getTableLoad,
		onFailure: person_getTableFailure
	});
}

/**
 *  Diese Funktion interpretiert das Ergebnis der Suchanfrage
 **/

function person_getTableLoad(t) {

	requests = null;
	person_selected = null;
	
	var data = t.responseText;
	
	if(data.indexOf('ERROR') != -1) {
		byId('person_hitsList').innerHTML = '';
		byId('person_currentSearch').style['display'] = 'none';
		byId('person_startSearch').style['display'] = 'block';
		alert(data);
	}
	
	person_hits = data.substring(0,data.indexOf('*'));
	byId('person_hits').innerHTML = person_hits;
	
	data = data.substring(data.indexOf('*'));
	data = data.substr(data.indexOf('*')+1);
	byId('person_hitsList').innerHTML = data;
	
	byId('person_showShortBio').style.color = '#999999';
	byId('person_showDetails').style.color = '#999999';
		
	if(byId('person_listTriangle').className.indexOf('Closed') != -1) {
		byId('person_hitsList').style['display'] = 'block';
		byId('person_listModuleBack').style['display'] = 'block';
		byId('person_listTriangle').className = 'triangleOpen';
	}
	
	if(person_hits>10) {
		loadedPersons = 10;
		person_reloadTable();
	}
	else person_getTableSuccess(t);
}

function person_reloadTable() {
	requests = new Ajax.Request('PHP/person/existRequestTableReload.php', {
		method: 'get', 
		parameters: 'unique=' + new Date().getTime() + '&loaded=' + loadedPersons, 
		onSuccess: function(t) {
			loadedPersons += 10;
			var data = t.responseText;
			
			var elem = document.createElement('div');
			elem.innerHTML = data;
			byId('person_hitsList').appendChild(elem);
			
			if (loadedPersons >= person_hits) { person_getTableSuccess(t); }
			else if (!person_reloadInterrupted) person_reloadTable();
		},
		onFailure: function(t) { alert('Fehler beim Zugriff auf die Datenbank!'); }
	});
}

function person_getTableSuccess(t) {
	if(person_hits!=0) {
		byId('person_showShortBio').style['display'] = 'block';
		byId('person_hideShortBio').style['display'] = 'none';
		byId('person_showDetails').style['display'] = 'block';
	}
	else {
		byId('person_showShortBio').style['display'] = 'none'; 
		byId('person_hideShortBio').style['display'] = 'none';
		byId('person_showDetails').style['display'] = 'none';
	}
	byId('person_currentSearch').style['display'] = 'none';
	byId('person_startSearch').style['display'] = 'block';
	if(person_selected)	person_selected = null;
	finishRequest('person_search');
}

/**
 *  Diese Funktion interpretiert das Ergebnis der Suchanfrage
 */

function person_getTableFailure(t) {
	
 	byId('person_hits').innerHTML = '0';

	byId('person_hitsList').innerHTML = '';

	byId('person_currentSearch').style['display'] = 'none';
	byId('person_startSearch').style['display'] = 'block';

	if(person_selected) person_selected = null;
		
	byId('person_showShortBio').style.color = '#999999';
	byId('person_showDetails').style.color = '#999999';

 	alert('Error ' + t.status + ' -- ' + t.statusText);
}

/**
 *  Diese Funktion baut die Anfrage für die Datenbank für jedes einzelne Kriterium
 **/

function person_getSearchString(id) {
	
	var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
	if(value.length === 0) return '';
	
	if(byId(id).className.indexOf('filterAllNames') != -1)		return 'allnames_all$$' + value;
	if(byId(id).className.indexOf('filterSurname') != -1)		return 'surname_all$$' + value;
	if(byId(id).className.indexOf('filterForename') != -1)		return 'forename_all$$' + value;
	if(byId(id).className.indexOf('filterInstitution') != -1)	return 'institution$$' + value;
	if(byId(id).className.indexOf('filterAddName') != -1)		return 'addName_all$$' + value;
	if(byId(id).className.indexOf('filterOccupation') != -1)	return 'occupation$$' + value;
	if(byId(id).className.indexOf('filterPlaceSummary') != -1)	return 'place$$' + value;
	if(byId(id).className.indexOf('filterPlaceOfBirth') != -1)  {	}
	if(byId(id).className.indexOf('filterDayOfBirth') != -1)    {	}
	if(byId(id).className.indexOf('filterPlaceOfDeath') != -1)  {	}
	if(byId(id).className.indexOf('filterDayOfDeath') != -1)    {	}
	return '';
}

/**
 *  Diese Funktion baut bei jeder Veränderung der Suchanfrage den angezeigten Satz neu auf
 **/

function person_getSearchSentence() {
	var row = 0;
	var sentence = new Array();
	var searchQuery = '';
	
	while(true) {		
		if(byId('person_' + row + '_col0_empty')) break;
		
		if(byId('person_' + row + '_col0_filter')) {
			var string = person_getSearchSentenceById('person_' + row + '_col0_filter');
			if(!sentence[row]) sentence[row] = new Array();
			if(string.length > 0 ) sentence[row][0] = string;
		}		
		if(byId('person_' + row + '_col1_filter')) {
			var string = person_getSearchSentenceById('person_' + row + '_col1_filter');
			if(!sentence[row]) sentence[row] = new Array();
			if(string.length > 0 ) sentence[row][1] = string;
		}		
		row++;
	}
	
	var sentenceStr = '';
	for(var i = 0; i < sentence.length; i++) {
		for(var j = 0; j < sentence[i].length; j++) {
			if(sentence[i][j])				sentenceStr += sentence[i][j];
			if(j < sentence[i].length - 1)	sentenceStr += ' oder ';
		}				
		if(i < sentence.length - 1) sentenceStr += ' und ';
	}
			
	if(sentenceStr.length == 0) {
		byId('person_filterSentence').innerHTML = 'Bitte formulieren Sie Ihre Suchanfrage mit Hilfe der links auszuwählenden Suchkriterien.';
		byId('person_startSearch').style['display'] = 'none';
		byId('person_currentSearch').style['display'] = 'none';
	}else {
		sentenceStr = 'Sie suchen Personen, ' + sentenceStr + '.';
		byId('person_filterSentence').innerHTML = '<h1>Ihre Suchanfrage:</h1>' + sentenceStr;
		byId('person_startSearch').style['display'] = 'block';
	}
}
/**
 * Diese Funktion baut den Satz zusammen, der zur Überprüfung der Suchanfrage angezeigt wird
 **/

function person_getSearchSentenceById(id) {	
	if(byId(id).className.indexOf('filterAllNames') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'deren Name <span class="filterHighlight">' + value + '</span> enth&auml;lt';
	}	
	if(byId(id).className.indexOf('filterSurname') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'deren Nachname <span class="filterHighlight">' + value + '</span> enth&auml;lt';
	}
	if(byId(id).className.indexOf('filterForename') != -1) {
		var value = trim(byId(id).getElementsByTagName('input')[0].value);
		if(value.length == 0) return '';
		return 'deren Vorname <span class="filterHighlight">' + value + '</span> enth&auml;lt';
	}	
	if(byId(id).className.indexOf('filterInstitution') != -1) {
		var value = trim(byId(id).getElementsByTagName('input')[0].value);
		if(value.length == 0) return '';
		return 'die von der Institution <span class="filterHighlight">' + value + '</span> hinzugef&uuml;gt wurden';
	}
	if(byId(id).className.indexOf('filterAddName') != -1) {
		var value = trim(byId(id).getElementsByTagName('input')[0].value);
		if(value.length == 0) return '';
		return 'deren Namenszusatz <span class="filterHighlight">' + value + '</span> enth&auml;lt';
	}
	if(byId(id).className.indexOf('filterOccupation') != -1) {
		var value = trim(byId(id).getElementsByTagName('input')[0].value);
		if(value.length == 0) return '';
		return 'deren Beruf <span class="filterHighlight">' + value + '</span> enth&auml;lt';
	}
	if(byId(id).className.indexOf('filterPlaceSummary') != -1) {
		var value = trim(byId(id).getElementsByTagName('input')[0].value);
		if(value.length == 0) return '';
		return 'welche in <span class="filterHighlight">' + value + '</span> besch&auml;ftigt waren';
	}
	if(byId(id).className.indexOf('filterPlaceOfBirth') != -1) {
		var value = trim(byId(id).getElementsByTagName('input')[0].value);
		if(value.length == 0) return '';
		return 'welche in <span class="filterHighlight">' + value + '</span> geboren wurden';
	}
	if(byId(id).className.indexOf('filterDayOfBirth') != -1) {
		var value1 = trim(byId(id).getElementsByTagName('input')[0].value);
		var value2 = trim(byId(id).getElementsByTagName('input')[1].value);
		
		if(value1.length == 0 && value2.length == 0) return '';
		if(value2.length == 0) return 'welche nach dem <span class="filterHighlight">' + value1 + '</span> geboren wurden';
		if(value1.length == 0) return 'welche vor dem  <span class="filterHighlight">' + value2 + '</span> geboren wurden';
		return 'welche zwischen dem <span class="filterHighlight">' + value1 + '</span> und dem <span class="filterHighlight">' + value2 + '</span> geboren wurden';
	}
	if(byId(id).className.indexOf('filterPlaceOfDeath') != -1) {
		var value = trim(byId(id).getElementsByTagName('input')[0].value);
		if(value.length == 0) return '';
		return 'die in <span class="filterHighlight">' + value + '</span> gestorben sind';
	}
	if(byId(id).className.indexOf('filterDayOfDeath') != -1) {		
		var value1 = trim(byId(id).getElementsByTagName('input')[0].value);
		var value2 = trim(byId(id).getElementsByTagName('input')[1].value);
		
		if(value1.length == 0 && value2.length == 0) return '';
		if(value2.length == 0) return 'welche nach dem <span class="filterHighlight">' + value1 + '</span> gestorben sind';
		if(value1.length == 0) return 'welche vor dem <span class="filterHighlight">' + value2 + '</span> gestorben sind';
		return 'welche zwischen dem <span class="filterHighlight">' + value1 + '</span> und dem <span class="filterHighlight">' + value2 + '</span> gestorben sind';
	}
	if(byId(id).className.indexOf('filterFullText') != -1) {
		var value = trim(byId(id).getElementsByTagName('input')[0].value);
		if(value.length == 0) return '';
		return '';
	}
	return '';
}

/**
 *  Diese Funktion öffnet einen Personeneintrag
 **/

var person_selected = null;

function person_setSelected(elem) {
	if(person_selected && person_selected.style) person_selected.style.backgroundColor = '#ffffff';
	
	if(!person_selected || !person_selected.id || person_selected.id != elem.id) {
		person_selected = elem;		
		if(person_selected.id) person_selected.style.backgroundColor = '#66b2ff';
 	} else if(person_selected.id == elem.id) person_selected = null;
 		
	if(person_selected) {
		byId('person_showShortBio').style.color = '#e5e5e5';
		byId('person_showDetails').style.color = '#e5e5e5';
		/*byId('person_clipboard').style.color = '#e5e5e5';*/		
		if(byId('personShortBio_' + person_getActId())) {
			if(byId('personShortBio_' + person_getActId()).style.display == 'none') {
				byId('person_showShortBio').style.display = 'block';
				byId('person_hideShortBio').style.display = 'none';
			}else {
				byId('person_showShortBio').style.display = 'none';
				byId('person_hideShortBio').style.display = 'block';
			}
		}else {
			byId('person_showShortBio').style.display = 'block';
			byId('person_hideShortBio').style.display = 'none';
		}		
	}else {
		byId('person_showShortBio').style.color = '#999999';
		byId('person_showDetails').style.color = '#999999';
		/*byId('person_clipboard').style.color = '#999999';*/
	}
}

function person_doubleclick(elem) {
	if (person_selected == null) person_setSelected(elem);
	person_openDetails();
}

/**
 *  Diese Funktion schließt die Kurzbiographie einer Person für die Suchergebnis
 **/

function hideShortBio() {
	byId('person_showShortBio').style.display = 'block';
	byId('person_hideShortBio').style.display = 'none';
	byId('personShortBio_' + person_getActId()).style.display = 'none';
}

/**
 *  Diese Funktion öffnet die Kurzbiographie einer Person und läd sie ggf. nach
 **/

function getShortBio() {

	if(!person_selected) return;
	
	byId('person_showShortBio').style.display = 'none';
	byId('person_hideShortBio').style.display = 'block';
	if(byId('personShortBio_' + person_getActId()))		byId('personShortBio_' + person_getActId()).style.display = 'block';
	else {
		person_selected.getElementsByTagName('div')[0].style.display = 'block';
		new Ajax.Request('PHP/person/existRequestShortBio.php', {
			method: 'get', 
			parameters: 'unique=' + new Date().getTime() + '&id=' + person_getActId(), 
			onSuccess: getShortBioSuccess,
			onFailure: getShortBioFailure
		});
	}
}

/**
 *  Diese Funktion nimmt die angefragte Kurzbiographie entgegen
 **/

function getShortBioSuccess(t) {

	var data = trim(t.responseText);
	var elem = byId('person_' + data.substring(0, data.indexOf('_-_')));
	
	if(data.indexOf('ERROR') != -1) {
		elem.getElementsByTagName('div')[0].style.display = 'none';
		alert(data);
	}
	
	if(data.length > 300) {
		data = data.substr(0, 300);
		data = data.substring(0, data.lastIndexOf(' ')) + ' \u2026';
	}
	
	var elem2 = document.createElement('div');
	elem2.className = 'shortBio';
	elem2.id = 'personShortBio_' + person_getActId();
	elem2.innerHTML = '<strong>Kurzbiographie: </strong>' + getBreak(trim(data.substr(data.indexOf('_-_') + 3)));
	
	elem.appendChild(elem2);

	elem.getElementsByTagName('div')[0].style.display = 'none';
}


/**
 *  Diese Funktion gibt eine Fehlermeldung aus, wenn die Kurzbiographie nicht richtig geladen wurde
 **/

function getShortBioFailure(t) {
	var elem = byId('person_' + data.substring(0, data.indexOf('_-_')));
	elem.childNodes[0].style.display = 'none';
 	alert('Error ' + t.status + ' -- ' + t.statusText);
}