/* fffi_db-doc.js */


function doc_clearSearch() {
	doc_closeDetails();

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

	var empty = byId('doc_template_empty').cloneNode(true);
	empty.id = 'doc_0_col0_empty';
	empty.style.display = 'block';
	
	byId('doc_filterArea').appendChild(empty);
}

function doc_externalSearch(field, value) {
	doc_clearSearch();
	
	byId('doc_0_col0_empty').getElementsByTagName('select')[0].value = field;
	doc_createFilter(byId('doc_0_col0_empty').getElementsByTagName('select')[0]);
	
	byId('doc_0_col0_filter').getElementsByTagName('input')[0].value = value;
	
	doc_getSearchSentence();
	doc_search();
}

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

function doc_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('author') != -1)
		filter = byId('doc_template_Author').cloneNode(true);
	else if(val.indexOf('siglum') != -1)
		filter = byId('doc_template_Siglum').cloneNode(true);
	else if(val.indexOf('journal') != -1)
		filter = byId('doc_template_Journal').cloneNode(true);
	else if(val.indexOf('theme') != -1)
		filter = byId('doc_template_Theme').cloneNode(true);
	else if(val.indexOf('publicationDate') != -1)
		filter = byId('doc_template_PublicationDate').cloneNode(true);
	else if(val.indexOf('reviewPeriod') != -1)
		filter = byId('doc_template_ReviewPeriod').cloneNode(true);
	else if(val.indexOf('fullText') != -1)
		filter = byId('doc_template_FullText').cloneNode(true);
		
	else if(val.indexOf('role') != -1)
		filter = byId('doc_template_Role').cloneNode(true);
	else if(val.indexOf('pers') != -1)
		filter = byId('doc_template_Pers').cloneNode(true);
	else if(val.indexOf('work') != -1)
		filter = byId('doc_template_Work').cloneNode(true);
	else if(val.indexOf('opera') != -1)
		filter = byId('doc_template_Opera').cloneNode(true);
	else if(val.indexOf('play') != -1)
		filter = byId('doc_template_Play').cloneNode(true);
	else if(val.indexOf('painting') != -1)
		filter = byId('doc_template_Painting').cloneNode(true);
		
	filter.id = 'doc_' + row + '_' + col + '_filter';
	filter.style['display'] = 'block';
	
	
	byId('doc_filterArea').replaceChild(filter, selectBox.parentNode);


	if(col.indexOf('col1') == -1) {	
		var or = byId('doc_template_or').cloneNode(true);
		or.id = 'doc_' + row + '_or';
		or.style['display'] = 'block';
		
		var empty1 = byId('doc_template_empty').cloneNode(true);
		empty1.id = 'doc_' + row + '_' + 'col1_empty';
		empty1.style['display'] = 'block';
		
		var and = byId('doc_template_and').cloneNode(true);
		and.id = 'doc_' + row + '_and';
		and.style['display'] = 'block';
		
		var empty2 = byId('doc_template_empty').cloneNode(true);
		empty2.id = 'doc_' + (Number(row) + 1) + '_col0_empty';
		empty2.style['display'] = 'block';
			
		if(next) {
			byId('doc_filterArea').insertBefore(or, next);
			byId('doc_filterArea').insertBefore(empty1, next);
			byId('doc_filterArea').insertBefore(and, next);
			byId('doc_filterArea').insertBefore(empty2, next);
		}else {
			byId('doc_filterArea').appendChild(or);
			byId('doc_filterArea').appendChild(empty1);
			byId('doc_filterArea').appendChild(and);
			byId('doc_filterArea').appendChild(empty2);
		}
	}
	
	byId('doc_' + row + '_' + col + '_filter').getElementsByTagName('input')[0].value = "";
	inputField = byId('doc_' + row + '_' + col + '_filter').getElementsByTagName('input')[0];
	window.setTimeout("setFocus()", 42);
}

/**
 * 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 doc_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('doc_template_empty').cloneNode(true);
		empty1.id = 'doc_' + row + '_' + 'col1_empty';
		empty1.style['display'] = 'block';
		
		byId('doc_filterArea').replaceChild(empty1, filterBox);
	
	}else {
		if(byId('doc_' + row + '_' + 'col1_empty')) {
			if(byId('doc_' + (Number(row) + 1) + '_' + 'col0_empty')) {
				byId('doc_filterArea').removeChild(filterBox);
				byId('doc_filterArea').removeChild(byId('doc_' + row + '_or'));
				
				byId('doc_filterArea').removeChild(byId('doc_' + row + '_and'));
				byId('doc_filterArea').removeChild(byId('doc_' + (Number(row) + 1) + '_' + 'col0_empty'));
				

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

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

			byId('doc_filterArea').insertBefore(empty1, byId('doc_' + row + '_' + 'or').nextSibling);
		}
	}
	
	doc_getSearchSentence();
}

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

var docs_fulltext_words = new Array();

function doc_search() {
	byId('doc_startSearch').style['display'] = 'none';
	byId('doc_currentSearch').style['display'] = 'block';

	var row = 0;
	var searchQuery = '';
	docs_fulltext_words = new Array();
	
	while(true) {
		
		if(byId('doc_' + row + '_col0_empty')) break;
		
		var filter = '';

		if(byId('doc_' + row + '_col0_filter')) {
			var search = doc_getSearchString('doc_' + row + '_col0_filter');
			if(search.length != 0)
				filter += search;
		}
		
		if(byId('doc_' + row + '_col1_filter')) {
			var search = doc_getSearchString('doc_' + 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)
  	doc_getTable(searchQuery);
}

/**
*  Diese Funktion ruft im Hintergrund die PHP-Datei auf, welche die Suchergebnisse
*  zurückliefert
**/
var loadedDocs=0;
function doc_getTable(crit) {
	startRequest('doc_search');
	if(requests != null) requests.transport.abort();
	loadedDocs=0;
	requests = new Ajax.Request('PHP/docs/existRequestTable.php', {
					method: 'get', 
					parameters: 'unique=' + new Date().getTime() + '&criteria=' + encodeURIComponent(crit), 
					onSuccess: doc_getTableReload,
					onFailure: doc_getTableFailure
				});
}

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

function doc_getTableReload(t) {
	requests = null;
	selected = null;
	
	var data = t.responseText;
	
	byId('doc_hits').innerHTML = '0';

	if(data.indexOf('ERROR') != -1) {
		byId('doc_hitsList').innerHTML = '';
		byId('doc_currentSearch').style['display'] = 'none';
		byId('doc_startSearch').style['display'] = 'block';
		alert(data);
	}	
	
	/*
 	var meta = data.substring(0, data.indexOf(">"));
 	var regExp = /hits="(\d*)"/i;
	var result = regExp.exec(meta);
	var hits = result[1];
	if(result != null) byId('doc_hits').innerHTML = hits;
			
  	// <exist:result xmlns:exist="http://exist.sourceforge.net/NS/exist" hits="25" start="1" count="25">
  	
 	data = data.substr(data.indexOf(">") + 1);
    */
   	hits = data.substring(0,data.indexOf('*'));
   	byId('doc_hits').innerHTML = hits;
   	
	data = data.substring(data.indexOf('*'));
	data = data.substr(data.indexOf('*')+1);
	byId('doc_hitsList').innerHTML = data;

	if(byId('doc_listTriangle').className.indexOf('Closed') != -1) {
		byId('doc_hitsList').style['display'] = 'block';
		byId('doc_listModuleBack').style['display'] = 'block';
		byId('doc_listTriangle').className = 'triangleOpen';
	}
	if(hits>10) {
		loadedDocs = 10;
		doc_reloadTable();
		
	}
	else doc_getTableSuccess(t);
}

function doc_reloadTable() {
	requests = new Ajax.Request('PHP/docs/existRequestTableReload.php', {
			method: 'get', 
			parameters: 'unique=' + new Date().getTime() + '&loaded=' + loadedDocs, 
			onSuccess: function(t) {
				loadedDocs += 10;
				var data = t.responseText;
				
				var elem = document.createElement('div');
				elem.innerHTML = data;
				byId('doc_hitsList').appendChild(elem);
				
				if (loadedDocs >= hits) doc_getTableSuccess(t);
				else if (!doc_reloadInterrupted) doc_reloadTable();
			},
			onFailure: function(t) { alert('Fehler beim Zugriff auf die Datenbank!'); }
		});
}

function doc_getTableSuccess(t) {
	byId('doc_currentSearch').style['display'] = 'none';
	byId('doc_startSearch').style['display'] = 'block';

	if(doc_selected) doc_selected = null;

	byId('doc_showDetails').style.color = '#999999';
	finishRequest('doc_search');
}

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

function doc_getTableFailure(t) {

 	byId('doc_hits').innerHTML = '0';

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

	byId('doc_currentSearch').style['display'] = 'none';
	byId('doc_startSearch').style['display'] = 'block';

	if(doc_selected)
		doc_selected = null;

	byId('doc_showDetails').style.color = '#999999';

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

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

function doc_getSearchString(id) {
	
	var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
	if(value.length == 0) return '';
	
	if(byId(id).className.indexOf('filterAuthor') != -1)
		return 'author$$' + value;

	if(byId(id).className.indexOf('filterSiglum') != -1)
		return 'siglum$$' + value;

	if(byId(id).className.indexOf('filterJournal') != -1)
		return 'journal$$' + value;
	/*
	if(byId(id).className.indexOf('filterTheme') != -1)
		return 'theme$$' + value;
	*/
	if(byId(id).className.indexOf('filterPublicationDate') != -1)
		return 'publicationDate$$' + value;

	if(byId(id).className.indexOf('filterReviewPeriod') != -1)
		return 'reviewPeriod$$' + value;

	if(byId(id).className.indexOf('filterFullText') != -1) {
		docs_fulltext_words.push(value);
		return 'fullText$$' + value;
	}

	if(byId(id).className.indexOf('filterRole') != -1)
		return 'role$$' + value;
		
	if(byId(id).className.indexOf('filterPers') != -1)
		return 'pers$$' + value;
		
	if(byId(id).className.indexOf('filterWork') != -1)
		return 'work$$' + value;
		
	if(byId(id).className.indexOf('filterOpera') != -1)
		return 'opera$$' + value;
		
	if(byId(id).className.indexOf('filterPlay') != -1)
		return 'play$$' + value;
		
	if(byId(id).className.indexOf('filterPainting') != -1)
		return 'painting$$' + value;		
	
	return '';
}


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

function doc_getSearchSentence() {
	var row = 0;
	var sentence = new Array();
	var searchQuery = '';
	
	while(true) {
		
		if(byId('doc_' + row + '_col0_empty')) break;
		
		if(byId('doc_' + row + '_col0_filter')) {
			var string = doc_getSearchSentenceById('doc_' + row + '_col0_filter');
			
			if(string.length > 0 ) {
				if(!sentence[row]) sentence[row] = new Array();
				sentence[row][0] = string;
			}
		}
		
		if(byId('doc_' + row + '_col1_filter')) {
			var string = doc_getSearchSentenceById('doc_' + row + '_col1_filter');
			
			if(string.length > 0 ) {
				if(!sentence[row]) sentence[row] = new Array();
				sentence[row][1] = string;
			}
		}
		
		row++;
	}
	
	var sentenceStr = '';
	for(var i = 0; i < sentence.length; i++) {
		for(var j = 0; j < sentence[i].length; 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('doc_filterSentence').innerHTML = 'Bitte formulieren Sie Ihre Suchanfrage mit Hilfe der links auszuwählenden Suchkriterien.';

		byId('doc_startSearch').style['display'] = 'none';
		byId('doc_currentSearch').style['display'] = 'none';
	}else {
		sentenceStr = 'Sie suchen Dokumente, ' + sentenceStr + '.';
		byId('doc_filterSentence').innerHTML = '<h1>Ihre Suchanfrage:</h1>' + sentenceStr;

		byId('doc_startSearch').style['display'] = 'block';
	}
}

/**
*  Diese Funktion baut den Satz zusammen, der zur Überprüfung der Suchanfrage angezeigt wird
**/

function doc_getSearchSentenceById(id) {
	if(byId(id).className.indexOf('filterAuthor') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'welche von <span class="filterHighlight">' + value + '</span> geschrieben wurden';
	}

	if(byId(id).className.indexOf('filterSiglum') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'die mit <span class="filterHighlight">' + value + '</span> unterzeichnet wurden';
	}

	if(byId(id).className.indexOf('filterJournal') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'welche in <span class="filterHighlight">' + value + '</span> veröffentlicht wurden';
	}

	if(byId(id).className.indexOf('filterTheme') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'die sich mit <span class="filterHighlight">' + value + '</span> befassen';
	}

	if(byId(id).className.indexOf('filterPublicationDate') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'welche <span class="filterHighlight">' + value + '</span> publiziert wurden';
	}

	if(byId(id).className.indexOf('filterReviewPeriod') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'deren Berichtszeitraum vom <span class="filterHighlight">' + value + '</span> reicht';
		/*return 'deren Berichtszeitraum sich auf den <span class="filterHighlight">' + value + '</span> beschränkt';*/
	}

	if(byId(id).className.indexOf('filterFullText') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'in deren Inhalt <span class="filterHighlight">' + value + '</span> vorkommt';
	}
	
	if(byId(id).className.indexOf('filterRole') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'in deren Inhalt die Rolle <span class="filterHighlight">' + value + '</span> vorkommt';
	}
	
	if(byId(id).className.indexOf('filterPers') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'in deren Inhalt die Person <span class="filterHighlight">' + value + '</span> vorkommt';
	}
	
	if(byId(id).className.indexOf('filterWork') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'in deren Inhalt das Werk <span class="filterHighlight">' + value + '</span> vorkommt';
	}
	
	if(byId(id).className.indexOf('filterOpera') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'in deren Inhalt die Oper <span class="filterHighlight">' + value + '</span> vorkommt';
	}
	
	if(byId(id).className.indexOf('filterPlay') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'in deren Inhalt das Schauspiel <span class="filterHighlight">' + value + '</span> vorkommt';
	}
	
	if(byId(id).className.indexOf('filterPainting') != -1) {
		var value = replaceSpecialChars(trim(byId(id).getElementsByTagName('input')[0].value));
		if(value.length == 0) return '';
		return 'in deren Inhalt das Gem&auml;lde <span class="filterHighlight">' + value + '</span> vorkommt';
	}

	return '';
}

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

var doc_selected = null;

function doc_setSelected(elem) {
	
	if(doc_selected && doc_selected.id)
		doc_selected.style.backgroundColor = '#ffffff';
	
	if(!doc_selected || doc_selected.id != elem.id) {
		doc_selected = elem;
		doc_selected.style.backgroundColor = '#ffb266';

 	}else if(doc_selected.id && doc_selected.id == elem.id)
 		doc_selected = null;
 		
	if(doc_selected) {
		byId('doc_showDetails').style.color = '#e5e5e5';
		/*byId('doc_clipboard').style.color = '#e5e5e5';*/
		
	}else {
		byId('doc_showDetails').style.color = '#999999';
		/*byId('doc_clipboard').style.color = '#999999';*/
	}
}

function doc_doubleclick(elem) {
	if (doc_selected == null) doc_setSelected(elem);
	doc_openDetails();
}

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

function getIDSuccess(t) {

	var data = trim(t.responseText);
	
	if(data.indexOf('ERROR') != -1) {
		alert(data);
	}
	
	byId('doc_detailTitle').innerHTML = trim(data);
	
	if(--requestsDocShortLoading == 0)
		byId('doc_shortLoading').style.display = 'none';
}

/**
*  Diese Funktion nimmt die angefragte Kurzbiographie für die Details entgegen
**/

function getSummarySuccess(t) {

	var data = trim(t.responseText);
	
	if(data.indexOf('ERROR') != -1) {
		alert(data);
	}
	
	byId('doc_ib_summary').innerHTML = data;
	
	if(--requestsDocShortLoading == 0)
		byId('doc_shortLoading').style.display = 'none';
}

/**
*  Diese Funktion nimmt die angefragte Kurzbiographie für die Details entgegen
**/

function getTranscriptionSuccess(t) {

	var data = trim(t.responseText);
	
	if(data.indexOf('ERROR') != -1) {
		alert(data);
	}
	
//	for(var i = 0; i < docs_fulltext_words.length; i++)
//		data = data.replace(new RegExp('(' + docs_fulltext_words[i].toLowerCase() + ')', 'gi'), '<span class="searched">$1</span>');
	
		
	byId('doc_transcription').innerHTML = data;

	if(--requestsTranscriptionLoading == 0)
		byId('doc_transcriptionLoading').style.display = 'none';
}

/**
*  Diese Funktion nimmt die angefragte Kurzbiographie für die Details entgegen
**/

function getMetaDataSuccess(t) {

	var data = trim(t.responseText);
	
	if(data.indexOf('ERROR') != -1) {
		alert(data);
	}
	
	byId('doc_metaData').innerHTML = data;

	if(--requestsMetaDataLoading == 0)
		byId('doc_metaDataLoading').style.display = 'none';
}


function doc_externalOpenDetails(id) {
	
	doc_selected = id;
	
	doc_openDetails();
	
	openDatabase('doc');
}

/**
*  Die Funktion öffnet die Detailansicht des markierten Eintrags
**/

var requestsDocShortLoading = 0;
var requestsTranscriptionLoading = 0;
var requestsMetaDataLoading = 0;
var requestCount = 0;

function doc_openDetails() {
	startRequest('doc_detail');
	if(!doc_selected) return;
	
	
	byId('doc_detailTitle').innerHTML = '';
	byId('doc_ib_summary').innerHTML = '';
	byId('doc_transcription').innerHTML = '';
	
	byId('fffi-doc_database').style.display = 'none';
	byId('fffi-doc_options').style.display = 'none';
	byId('fffi-doc_results').style.display = 'none';

	byId('fffi-doc_details').style.display = 'block';
	
	byId('doc_detailID').innerHTML = 'ID: ' + doc_getActId();
	
	doc_highlightedTags = 9999;
	doc_highlight('person', false);
	doc_highlight('role', false);
	doc_highlight('place', false);
	doc_highlight('work', false);
	doc_highlight('date', false);
	doc_highlight('searched', false);
	doc_highlightedTags = 0;
	
	
	byId('doc_shortLoading').style.display = 'block';
	byId('doc_transcriptionLoading').style.display = 'block';
	byId('doc_metaDataLoading').style.display = 'block';
	requestsDocShortLoading = 2;
	requestsTranscriptionLoading = 1;
	requestsMetaDataLoading = 1;
	// Die Anzahl der folgenden DB-Anfragen:
	requestCount = 4;
	
	new Ajax.Request('PHP/docs/existRequestID.php', {
				method: 'get', parameters: 'unique=' + new Date().getTime() + '&id=' + doc_getActId(), 
				onSuccess: function(t) {
					getIDSuccess(t);
					doc_countDisplayRequests();
				},
				onFailure: getDocRequestFailure
			});

	new Ajax.Request('PHP/docs/existRequestSummary.php', {
				method: 'get', parameters: 'unique=' + new Date().getTime() + '&id=' + doc_getActId(), 
				onSuccess: function(t) {
					getSummarySuccess(t);
					doc_countDisplayRequests();
				},
				onFailure: getDocRequestFailure
			});
	new Ajax.Request('PHP/docs/existRequestTranscription.php', {
				method: 'get', parameters: 'unique=' + new Date().getTime() + '&id=' + doc_getActId(), 
				onSuccess: function(t) {
					getTranscriptionSuccess(t);
					doc_countDisplayRequests();
				},
				onFailure: getDocRequestFailure
			});	
	new Ajax.Request('PHP/docs/existRequestMetaData.php', {
				method: 'get', parameters: 'unique=' + new Date().getTime() + '&id=' + doc_getActId(), 
				onSuccess: function(t) {
					getMetaDataSuccess(t);
					doc_countDisplayRequests();
				},
				onFailure: getDocRequestFailure
			});
}

function getDocRequestFailure(t) { finishRequest('doc_detail'); getRequestsFailure(t); }

function doc_countDisplayRequests() { requestCount--; if(requestCount==0) finishRequest('doc_detail'); }

/**
 *  Die Funktion schließt die Detailansicht
 **/
 
function doc_closeDetails() {
	byId('fffi-doc_database').style.display = 'block';
	byId('fffi-doc_options').style.display = 'block';
	byId('fffi-doc_results').style.display = 'block';

	byId('fffi-doc_details').style.display = 'none';
}

function doc_getActId() {
	if(doc_selected && doc_selected.id)
		return doc_selected.id.replace(/doc_/, '');
		
	return doc_selected;
}


var doc_highlightedTags = 0;

function doc_highlight(type, on) {
	if(!byId('doc_highlight_' + type + '_on') | !byId('doc_highlight_' + type + '_off'))
		return;
		
	if(on) {
		byId('doc_highlight_' + type + '_on').style.display = 'none';
		byId('doc_highlight_' + type + '_off').style.display = 'block';
		
		var spans = byId('doc_transcription').getElementsByTagName('span');
		for(var i = 0; i < spans.length; i++) {
			if(spans[i].className.indexOf(type) != -1)
				spans[i].className = type + ' textHighlighted';
		}

		if(doc_highlightedTags++ == 0)
			fadeBackgroundColor('FF', 'BB', 'out');

	} else {
		byId('doc_highlight_' + type + '_on').style.display = 'block';
		byId('doc_highlight_' + type + '_off').style.display = 'none';
		
		var spans = byId('doc_transcription').getElementsByTagName('span');
		for(var i = 0; i < spans.length; i++) {
			if(spans[i].className.indexOf(type) != -1)
				spans[i].className = type;
		}

		if(--doc_highlightedTags == 0)
			fadeBackgroundColor('BB', 'FF', 'in');
	}
}

function fadeBackgroundColor(color, endColor, dir) {
	var divs = byId('doc_transcription').getElementsByTagName('div');
	for(var i = 0; i < divs.length; i++) {
		if(divs[i].className.indexOf('informationsBlock') != -1)
			divs[i].style.backgroundColor = '#' + color + color + color;
	}
	
	if((dir == 'out' && xd(color) > xd(endColor)) || (dir == 'in' && xd(color) < xd(endColor)))
		setTimeout('fadeBackgroundColor("' + getNextColor(color, dir) + '", "' + endColor + '", "' + dir + '")', 10);
}

function getNextColor(color, dir) {
	if(dir == 'out') {
		var num = xd(color);
		num -= 5;
		if(num < 0) num = 0;
		return dx(num);
	}
	
	var num = xd(color);
	num += 5;
	if(num > 255) num = 255;
	return dx(num);
}

function dx(d) {
  max = Math.pow(16,8);
  
  var z = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
    "A", "B", "C", "D", "E", "F");
  
  var x = "";
  var i = 1, v = d, r = 0;
  while (v > 15) {
    v = Math.floor(v / 16);
    i++;
  }
  v = d;
  for (j=i; j >= 1; j--) {
    x = x + z[Math.floor(v / Math.pow(16, j-1))];
    v = v - (Math.floor(v / Math.pow(16, j-1)) * Math.pow(16, j-1));
  }
  
  return x;
}

function xd(x) {
  max = 8;

  var e = new Array();
  var z = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
    "A", "B", "C", "D", "E", "F");

  var d = 0, chk = 0;
  x = x.toUpperCase();

  for(i=0; i < x.length; i++) {
    for (j=0; j <= 16; j++) {
      if (x.substring(i, i+1) == z[j]) {
        chk = 1;
        e[i] = j;
      }
    }
  }

  for (i=0; i < x.length; i++)
    d = d + e[i] * Math.pow(16, x.length-i-1)

  return d;
}