/**********************
 * Hier stehen alle Funktionen, die nicht für Suche, Anzeige und Bearbeiten von Perrsonen da sind.
 * 1. Funktionen für das Erstellen von neuen Personeneinträgen
 * 2. Allgemeine Hilfsfunktionen
 **********************/

var person_oldView = null;
var person_lastSelected = null;

function createPerson() {
	if(byId('fffi-person_create').style.display == 'block') return;
	
	if(lockRenewTimeout) releasePerson();
	
	if(person_selected) {
		person_lastSelected = person_selected;
		person_setSelected(person_selected);
	}
	
	if(byId('fffi-person_details').style.display == 'none')	person_oldView = 'search';
	else 													person_oldView = 'details';
	
	byId('person_createPerson_link').style.color = '#999999';
	
	byId('fffi-person_database').style.display = 'none';
	byId('fffi-person_options').style.display  = 'none';
	byId('fffi-person_results').style.display  = 'none';

	byId('fffi-person_details').style.display  = 'none';
	byId('fffi-person_create').style.display   = 'block';

	byId('person_createTitle').innerHTML     = 'Neue Person:';
	byId('person_IB_name_create_edit').value = '';
}

function saveNewPerson() {
	if(trim(byId('person_IB_name_create_edit').value) == '') return;
	byId('person_createPerson_link').style.display = 'none';
	byId('person_cancelPerson_link').style.display = 'none';
	byId('person_IB_name_create_edit').style.display = 'none';
	new Ajax.Request('PHP/person/existCreatePerson.php', {
		method: 'get',
		parameters: 'unique=' + new Date().getTime() + '&value=' + encodeURIComponent(replaceSpecialChars(trim(byId('person_IB_name_create_edit').value))) + '&institution='+encodeURIComponent(replaceSpecialChars(trim(byId('ins_select').value))),
		onSuccess: function(t) {
				if(t.responseText.indexOf('ERROR') != -1) alert(t.responseText);
				else { byId('fffi-person_create').style.display = 'none'; person_externalOpenDetails(trim(t.responseText)); }
				byId('person_createPerson_link').style.display = 'block';
				byId('person_cancelPerson_link').style.display = 'block';
				byId('person_IB_name_create_edit').style.display = 'block';
		},
		onFailure: function(t) { alert('Error ' + t.status + ' -- ' + t.statusText) }
	});

}

function cancelNewPerson() {
	byId('fffi-person_create').style.display = 'none';
	
	if(person_oldView && person_oldView == 'details' && person_lastSelected) {
		person_setSelected(person_lastSelected);
		person_openDetails();
	}else {
		byId('fffi-person_database').style.display = 'block';
		byId('fffi-person_options').style.display = 'block';
		byId('fffi-person_results').style.display = 'block';
	}
}

/*************************************************************************************
 * 
 * Hier kommen Hilfsfunktionen aller Art
 * 
 *************************************************************************************/


var nee = new Array();

var nobility = new Array();
var nobilityCombine = new Array();
var military = new Array();
var religion = new Array();
var academic = new Array();
var academicCombine = new Array();
var otherTitle = new Array();
var otherBegins = new Array();
var generation = new Array();
var honorific = new Array();
var forename = new Array();

function createNameTypeArray(t) {
	var list = trim(t.responseText);

	while(list.indexOf('\n') != -1) {
		var line = list.substring(0, list.indexOf('\n'));
		list = trim(list.substr(list.indexOf('\n')));
		
		if(trim(line).length == 0) continue;
			
		if(line.indexOf('***NEE_') != -1)					list = createSpecificNameTypeArray(list, nee);		
		else if(line.indexOf('***NOBILITY_') != -1)			list = createSpecificNameTypeArray(list, nobility);		
		else if(line.indexOf('***NOBILITY-ADD_') != -1)		list = createSpecificNameTypeArray(list, nobilityCombine);		
		else if(line.indexOf('***MILITARY_') != -1)			list = createSpecificNameTypeArray(list, military);		
		else if(line.indexOf('***RELIGION_') != -1)			list = createSpecificNameTypeArray(list, religion);		
		else if(line.indexOf('***ACADEMIC_') != -1)			list = createSpecificNameTypeArray(list, academic);		
		else if(line.indexOf('***ACADEMIC-ADD_') != -1)		list = createSpecificNameTypeArray(list, academicCombine);		
		else if(line.indexOf('***OTHER-TITLE_') != -1)		list = createSpecificNameTypeArray(list, otherTitle);		
		else if(line.indexOf('***OTHER-BEGINS_') != -1)		list = createSpecificNameTypeArray(list, otherBegins);		
		else if(line.indexOf('***GENERATION-NAMES_') != -1)	list = createSpecificNameTypeArray(list, generation);		
		else if(line.indexOf('***HONORIFIC_') != -1)		list = createSpecificNameTypeArray(list, honorific);		
		else if(line.indexOf('***FORENAME_') != -1)			list = createSpecificNameTypeArray(list, forename);
	}
}

function createSpecificNameTypeArray(list, array) {
	while(list.indexOf('\n') != -1) {
		line = list.substring(0, list.indexOf('\n'));
		list = trim(list.substr(list.indexOf('\n')));
		
		if(line.indexOf('***') != -1) break;
			
		array[line] = 'accepted';
	}	
	return list;
}

var nameInput_new = new Array();

function getNameTable(elem) {
	
	var nameInput_old = nameInput_new[elem.parentNode.id];
	
	nameInput_new[elem.parentNode.id] = new Array();
	
	var name = trim(elem.value);
	name.replace(/,/g, '');
	
	while(name.length > 0) {
		if(name.indexOf(' ') != -1) { var value = name.substring(0, name.indexOf(' ')); name = trim(name.substr(name.indexOf(' '))); 
		}else { var value = name; name = ''; }
		
		if(value.substr(0, 1) == '"' && (value.substr(1).indexOf('"') != -1 || name.indexOf('"') != -1)) {
			var array = getNicEntry(name, value, '"');
			name = array[0];
			
			var temp = new Array();
			temp[0] = array[1];
			temp[1] = array[2];
			nameInput_new[elem.parentNode.id].push(temp);

		}else if(value.substr(0, 1) == "'" && (value.substr(1).indexOf("'") != -1 || name.indexOf("'") != -1)) {
			var array = getNicEntry(name, value, "'");
			name = array[0];
			
			var temp = new Array();
			temp[0] = array[1];
			temp[1] = array[2];
			nameInput_new[elem.parentNode.id].push(temp);
			
		}else if(value.substr(0, 1) == "<" && (value.substr(1).indexOf(">") != -1 || name.indexOf(">") != -1)) {
			var array = getNicEntry(name, value, ">");
			name = array[0];
			
			var temp = new Array();
			temp[0] = array[1];
			temp[1] = array[2];
			nameInput_new[elem.parentNode.id].push(temp);
			
		}else if(nee[value.toLowerCase()] == 'accepted') {
			var array = getNeeEntry(name, value);
			name = array[0];
			
			var temp = new Array();
			temp[0] = array[1];
			temp[1] = array[2];
			nameInput_new[elem.parentNode.id].push(temp);
			
		}else if(nobility[value.toLowerCase()] == 'accepted') {
			var array = getNobilityEntry(name, value);
			name = array[0];
			
			var temp = new Array();
			temp[0] = array[1];
			temp[1] = array[2];
			nameInput_new[elem.parentNode.id].push(temp);
			
		}else if(military[value.toLowerCase()] == 'accepted') {
			var temp = new Array();
			temp[0] = value;
			temp[1] = 'military';
			nameInput_new[elem.parentNode.id].push(temp);
			
		}else if(religion[value.toLowerCase()] == 'accepted') {
			var temp = new Array();
			temp[0] = value;
			temp[1] = 'religious';
			nameInput_new[elem.parentNode.id].push(temp);
			
		}else if(academic[value.toLowerCase()] == 'accepted') {
			var array = getAcademicEntry(name, value);
			name = array[0];
			
			var temp = new Array();
			temp[0] = array[1];
			temp[1] = array[2];
			nameInput_new[elem.parentNode.id].push(temp);
			
		}else if(otherTitle[value.toLowerCase()] == 'accepted') {
			var temp = new Array();
			temp[0] = value;
			temp[1] = 'title';
			nameInput_new[elem.parentNode.id].push(temp);
			
		}else if(otherBegins[value.toLowerCase()] == 'accepted' && (generation[name.toLowerCase()] == 'accepted' || generation[name.substring(0, name.indexOf(' ')).toLowerCase()] == 'accepted' || honorific[name.toLowerCase()] == 'accepted' || honorific[name.substring(0, name.indexOf(' ')).toLowerCase()] == 'accepted')) {
		
			var array = getGenerationHonorificEntry(name, value);
			name = array[0];
			
			var temp = new Array();
			temp[0] = array[1];
			temp[1] = array[2];
			nameInput_new[elem.parentNode.id].push(temp);
			
		}else if(forename[value.toLowerCase()] == 'accepted') {
			var temp = new Array();
			temp[0] = value;
			temp[1] = 'forename';
			nameInput_new[elem.parentNode.id].push(temp);
			
		}else if(value.indexOf('-') != -1 && forename[value.substring(0, value.indexOf('-')).toLowerCase()] == 'accepted' && forename[value.substr(value.indexOf('-') + 1).toLowerCase()] == 'accepted') {
			var temp = new Array();
			temp[0] = value;
			temp[1] = 'forename';
			nameInput_new[elem.parentNode.id].push(temp);
			
		}else if(value.substr(0, 1) == value.substr(0, 1).toLowerCase()) {
			var temp = new Array();
			temp[0] = value;
			temp[1] = 'addName';
			nameInput_new[elem.parentNode.id].push(temp);
			
		}else {
			var temp = new Array();
			temp[0] = value;
			temp[1] = 'surname';
			nameInput_new[elem.parentNode.id].push(temp);
		}
	}
	
	var table = '';
	var type = '';
	
	for(var i = 0; i < nameInput_old.length; i++) {
		// Schaue erst einmal, ob das aktuelle Wort nicht das erste mal vorgekommen ist
		var occurance = 1;
		for(var j = 0; j < i; j++) { if(nameInput_old[i][0] == nameInput_old[j][0]) occurance++; }
		
		// Ist das Wort auch im aktuellen Inhalt enthalten
		for(var j = 0; j < nameInput_new[elem.parentNode.id].length; j++) {
			if(nameInput_old[i][0] == nameInput_new[elem.parentNode.id][j][0]) { 
				if(occurance == 1) { nameInput_new[elem.parentNode.id][j][1] = nameInput_old[i][1]; break; }else occurance--;
			}
		}
	}
	
	for(var i = 0; i < nameInput_new[elem.parentNode.id].length; i++) {
		table += '<td>' + nameInput_new[elem.parentNode.id][i][0] + '</td>';
		type += '<td lang="' + nameInput_new[elem.parentNode.id][i][1] + '" onclick="person_openNameTypePopup(this, \'' + elem.parentNode.id + '\')">' + getTypeDesc(nameInput_new[elem.parentNode.id][i][1]) + '</td>';
	}
	
	var node = document.createElement('div');
	node.innerHTML = '<table><tr class="one">' + table + '</tr><tr class="two">' + type + '</tr></table>';
	node.className = 'variant';
	
	var div = elem.parentNode.getElementsByTagName('table')[0].parentNode;
	div.parentNode.replaceChild(node, div);
}

function person_divideNameElems() {

	var elemNo = 0;
	
	var table1 = byId(person_nameID).getElementsByTagName('table')[0];
	var tds1 = table1.getElementsByTagName('tr')[0].getElementsByTagName('td');
	var tds2 = table1.getElementsByTagName('tr')[1].getElementsByTagName('td');
	
	for(var i = 0; i < tds2.length; i++) {
		if(tds2[i] == person_nameElem) break;
		elemNo++;
	}
	
	var origNameElem = tds1[elemNo].innerHTML;
	
	tds1[elemNo].innerHTML = trim(origNameElem.substring(0, origNameElem.indexOf(' ')));
	origNameElem = trim(origNameElem.substr(origNameElem.indexOf(' ')));
	
	var elemToInsertBefore1 = tds1[elemNo].nextSibling;
	var elemToInsertBefore2 = tds2[elemNo].nextSibling;
	
	while(origNameElem.indexOf(' ') != -1) {
		var newTd1 = document.createElement('td');
		newTd1.innerHTML = trim(origNameElem.substring(0, origNameElem.indexOf(' ')));
		
		origNameElem = trim(origNameElem.substr(origNameElem.indexOf(' ')));
		
		var newTd2 = document.createElement('td');
		newTd2.lang = tds2[elemNo].lang;
		newTd2.innerHTML = getTypeDesc(newTd2.lang);
		newTd2.onclick = new Function("person_openNameTypePopup(this, '" + person_nameID + "')");
		
		
		if(elemToInsertBefore1 != null) {
			table1.getElementsByTagName('tr')[0].insertBefore(newTd1, elemToInsertBefore1);
			table1.getElementsByTagName('tr')[1].insertBefore(newTd2, elemToInsertBefore2);
		}else {
			table1.getElementsByTagName('tr')[0].appendChild(newTd1);
			table1.getElementsByTagName('tr')[1].appendChild(newTd2);
		}
		
		elemToInsertBefore1 = newTd1.nextSibling;
		elemToInsertBefore2 = newTd2.nextSibling;
	
	}
	
	var newTd1 = document.createElement('td');
	newTd1.innerHTML = trim(origNameElem);
	
	var newTd2 = document.createElement('td');
	newTd2.lang = tds2[elemNo].lang;
	newTd2.innerHTML = getTypeDesc(newTd2.lang);
	newTd2.onclick = new Function("person_openNameTypePopup(this, '" + person_nameID + "')");

	if(elemToInsertBefore1 != null) {
		table1.getElementsByTagName('tr')[0].insertBefore(newTd1, elemToInsertBefore1);
		table1.getElementsByTagName('tr')[1].insertBefore(newTd2, elemToInsertBefore2);
	}else {
		table1.getElementsByTagName('tr')[0].appendChild(newTd1);
		table1.getElementsByTagName('tr')[1].appendChild(newTd2);
	}
	
	nameInput_new[person_nameID] = new Array();
		var tds1 = byId(person_nameID).getElementsByTagName('tr')[0].getElementsByTagName('td');
		var tds2 = byId(person_nameID).getElementsByTagName('tr')[1].getElementsByTagName('td');
		for(var i = 0; i < tds1.length; i++) {
			var array = new Array();
			array[0] = tds1[i].innerHTML;
			array[1] = tds2[i].lang;
			nameInput_new[person_nameID].push(array);
	}
}

function person_mergeNameElemLeft() {
	
	var elemNo = 0;
	
	var table1 = byId(person_nameID).getElementsByTagName('table')[0];
	var tds1 = table1.getElementsByTagName('tr')[0].getElementsByTagName('td');
	var tds2 = table1.getElementsByTagName('tr')[1].getElementsByTagName('td');
	
	for(var i = 0; i < tds2.length; i++) {
		if(tds2[i] == person_nameElem) break;
		elemNo++;
	}

	tds1[elemNo].innerHTML = tds1[elemNo - 1].innerHTML + " " + tds1[elemNo].innerHTML;
	
	table1.getElementsByTagName('tr')[0].removeChild(tds1[elemNo - 1]);
	table1.getElementsByTagName('tr')[1].removeChild(tds2[elemNo - 1]);

	nameInput_new[person_nameID] = new Array();
	var tds1 = byId(person_nameID).getElementsByTagName('tr')[0].getElementsByTagName('td');
	var tds2 = byId(person_nameID).getElementsByTagName('tr')[1].getElementsByTagName('td');
	for(var i = 0; i < tds1.length; i++) {
		var array = new Array();
		array[0] = tds1[i].innerHTML;
		array[1] = tds2[i].lang;
		nameInput_new[person_nameID].push(array);
	}
}

function person_mergeNameElemRight() {
	
	var elemNo = 0;
	
	var table1 = byId(person_nameID).getElementsByTagName('table')[0];
	var tds1 = table1.getElementsByTagName('tr')[0].getElementsByTagName('td');
	var tds2 = table1.getElementsByTagName('tr')[1].getElementsByTagName('td');
	
	for(var i = 0; i < tds2.length; i++) {
		if(tds2[i] == person_nameElem) break;
		elemNo++;
	}

	tds1[elemNo].innerHTML = tds1[elemNo].innerHTML + " " + tds1[elemNo + 1].innerHTML;
	
	table1.getElementsByTagName('tr')[0].removeChild(tds1[elemNo + 1]);
	table1.getElementsByTagName('tr')[1].removeChild(tds2[elemNo + 1]);


	nameInput_new[person_nameID] = new Array();
	var tds1 = byId(person_nameID).getElementsByTagName('tr')[0].getElementsByTagName('td');
	var tds2 = byId(person_nameID).getElementsByTagName('tr')[1].getElementsByTagName('td');
	for(var i = 0; i < tds1.length; i++) {
		var array = new Array();
		array[0] = tds1[i].innerHTML;
		array[1] = tds2[i].lang;
		nameInput_new[person_nameID].push(array);
	}
}



var person_nameTypePopupClickCounter = 0;
var person_nameElem = null;
var person_nameID = null;

function person_openNameTypePopup(elem, id) {
	
	// Es muss überprüft werden, ob das Element grade editiert wird.
	if(!byId(id + '_edit')) return;
	
	var elemNo = 0;
	
	var table1 = byId(id).getElementsByTagName('table')[0];
	var tds1 = table1.getElementsByTagName('tr')[0].getElementsByTagName('td');
	var tds2 = table1.getElementsByTagName('tr')[1].getElementsByTagName('td');
	
	for(var i = 0; i < tds2.length; i++) {
		if(tds2[i] == elem) break;	
		elemNo++;
	}
	
	byId('nameTypePopup_mergeLeft').innerHTML = '';
	byId('nameTypePopup_mergeRight').innerHTML = '';
	byId('nameTypePopup_divide').innerHTML = '';

//	byId('nameTypePopup_seperator1').style.display = 'none';

	if(elemNo > 0) {
		byId('nameTypePopup_mergeLeft').innerHTML = '<span class="nameTypePopup_value">' + tds1[elemNo - 1].innerHTML + '</span> und <span class="nameTypePopup_value">' + tds1[elemNo].innerHTML + '</span> zusammenfassen';
//		byId('nameTypePopup_seperator1').style.display = 'block';
	}
	
	if(elemNo < tds2.length - 1) {
		byId('nameTypePopup_mergeRight').innerHTML = '<span class="nameTypePopup_value">' + tds1[elemNo].innerHTML + '</span> und <span class="nameTypePopup_value">' + tds1[elemNo + 1].innerHTML + '</span> zusammenfassen';
//		byId('nameTypePopup_seperator1').style.display = 'block';
	}
	
	if(tds1[elemNo].innerHTML.indexOf(' ') != -1) {
		byId('nameTypePopup_divide').innerHTML = '<span class="nameTypePopup_value">' + tds1[elemNo].innerHTML + '</span> auftrennen';
//		byId('nameTypePopup_seperator1').style.display = 'block';
	}

	
	person_nameElem = elem;
	person_nameID = id;
	var obj = elem;
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}

	byId('nameTypePopup').style.left = curleft + 'px';
	byId('nameTypePopup').style.top = (curtop + 10) + 'px';
	byId('nameTypePopup').style.display = 'block';
	
	person_nameTypePopupClickCounter = 0;
	document.onclick = person_hideNameTypePopup;
}

function person_hideNameTypePopup() {
	if(person_nameTypePopupClickCounter == 0) {
		person_nameTypePopupClickCounter++;
		return;
	}
	
	if(byId('nameTypePopup') && byId('nameTypePopup').style.display == 'block') {
		byId('nameTypePopup').style.display = 'none';
		
		if(byId('nameTypePopup_name') && byId('nameTypePopup_name').style.display == 'block')		byId('nameTypePopup_name').style.display = 'none';
		if(byId('nameTypePopup_addName') && byId('nameTypePopup_addName').style.display == 'block')	byId('nameTypePopup_addName').style.display = 'none';
		if(byId('nameTypePopup_title') && byId('nameTypePopup_title').style.display == 'block')		byId('nameTypePopup_title').style.display = 'none';
		
		document.onclick = '';
	}
}

function person_openNameTypePopup_name(obj) {

	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}

	byId('nameTypePopup_name').style.left = (curleft + 60) + 'px';
	byId('nameTypePopup_name').style.top = (curtop + 10) + 'px';
	byId('nameTypePopup_name').style.display = 'block';

}

function person_openNameTypePopup_addName(obj) {

	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}

	byId('nameTypePopup_addName').style.left = (curleft + 60) + 'px';
	byId('nameTypePopup_addName').style.top = (curtop + 10) + 'px';
	byId('nameTypePopup_addName').style.display = 'block';

}

function person_openNameTypePopup_title(obj) {

	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}

	byId('nameTypePopup_title').style.left = (curleft + 60) + 'px';
	byId('nameTypePopup_title').style.top = (curtop + 10) + 'px';
	byId('nameTypePopup_title').style.display = 'block';

}

function person_hideNameTypePopup_other(exception) {
	if(exception != 'name' && byId('nameTypePopup_name') && byId('nameTypePopup_name').style.display == 'block')			byId('nameTypePopup_name').style.display = 'none';
	if(exception != 'addName' && byId('nameTypePopup_addName') && byId('nameTypePopup_addName').style.display == 'block')	byId('nameTypePopup_addName').style.display = 'none';
	if(exception != 'title' && byId('nameTypePopup_title') && byId('nameTypePopup_title').style.display == 'block')			byId('nameTypePopup_title').style.display = 'none';
}


function person_setNameType(type) {
	if(person_nameElem != null) {
		person_nameElem.lang = type;
		person_nameElem.innerHTML = getTypeDesc(type);
		
		nameInput_new[person_nameID] = new Array();
			var tds1 = byId(person_nameID).getElementsByTagName('tr')[0].getElementsByTagName('td');
			var tds2 = byId(person_nameID).getElementsByTagName('tr')[1].getElementsByTagName('td');
			for(var i = 0; i < tds1.length; i++) {
				var array = new Array();
				array[0] = tds1[i].innerHTML;
				array[1] = tds2[i].lang;
				nameInput_new[person_nameID].push(array);
		}
	}
}

function getTypeDesc(type) {
	if(type == 'nobility')	return 'Adelstitel';
	if(type == 'academic')	return 'akadem. Titel';
	if(type == 'genName')	return 'Generationsname';
	if(type == 'honorific')	return 'Ehrenzusatz';
	if(type == 'nick')		return 'Spitzname';
	if(type == 'military')	return 'mil. Rang';
	if(type == 'religious')	return 'rel. Titel';
	if(type == 'title')		return 'Titel';
	if(type == 'forename')	return 'Vorname';
	if(type == 'addName')	return 'Zusatz';
	if(type == 'surname')	return 'Nachname';
	if(type == 'given')		return 'Rufname';
	if(type == 'maiden')	return 'Geburtsname';
	if(type == 'married')	return 'Ehename';
	if(type == 'office')	return 'berufl. Titel';
	if(type == 'religious')	return 'rel. Titel';
	if(type == 'epithet')	return 'Beiname';
	return '';
}

function getNeeEntry(name, value) {

	if(name.indexOf(' ') != -1) {
		value = name.substring(0, name.indexOf(' '));
		name = trim(name.substr(name.indexOf(' ')));
	}else if(name.length > 0) {
		value = name;
		name = '';
	}
	
	var array = new Array();
	array[0] = trim(name);
	array[1] = value;
	array[2] = 'maiden';
	return array;
}

function getNobilityEntry(name, value) {

	var lastPart = 0; // 0: sonst, 1: Bindewort

	while(true) {
		if(name.indexOf(' ') != -1) {
			var value2 = name.substring(0, name.indexOf(' '));

			if(nobilityCombine[value2.toLowerCase()] == 'accepted') {
				lastPart = 1;
				value += ' ' + value2;
				name = trim(name.substr(name.indexOf(' ')));

			}else if(lastPart == 1) {
				lastPart = 0;
				value += ' ' + value2;
				name = trim(name.substr(name.indexOf(' ')));

			}else
				break;
				
		}else {
			if(lastPart == 1 || nobilityCombine[name.toLowerCase()] == 'accepted') {
				value += ' ' + name;
				name = '';
			}			
			break;
		}
	}
	
	var array = new Array();
	array[0] = trim(name);
	array[1] = value;
	array[2] = 'nobility';
	return array;
}

function getAcademicEntry(name, value) {

	while(true) {
		if(name.indexOf(' ') != -1) {
			var value2 = name.substring(0, name.indexOf(' '));
			if(academicCombine[value2.toLowerCase()] == 'accepted' || academic[value2.toLowerCase()] == 'accepted') {
				value += ' ' + value2;
				name = trim(name.substr(name.indexOf(' ')));
			}else break;
		}else {
			if(academicCombine[name.toLowerCase()] == 'accepted' || academic[name.toLowerCase()] == 'accepted') {
				value += ' ' + name;
				name = '';
			}
			break;
		}
	}
	
	var array = new Array();
	array[0] = trim(name);
	array[1] = value;
	array[2] = 'academic';
	return array;
}

function getGenerationHonorificEntry(name, value) {

	if(name.indexOf(' ') != -1) var value2 = name.substring(0, name.indexOf(' '));
	else var value2 = name;
	if(generation[value2.toLowerCase()] == 'accepted') {
		value += ' ' + value2;
		if(name.indexOf(' ') != -1) name = trim(name.substr(name.indexOf(' ')));
		else 						name = '';
		var type = 'genName';
	}else if(honorific[value2.toLowerCase()] == 'accepted') {
		value += ' ' + value2;
		if(name.indexOf(' ') != -1) name = trim(name.substr(name.indexOf(' ')));
		else 						name = '';
		var type = 'honorific';
	}
	
	var array = new Array();
	array[0] = trim(name);
	array[1] = value;
	array[2] = type;
	return array;
}

function getNicEntry(name, value, character) {

	if(value.lastIndexOf(character) == value.indexOf(character)) {
		value += ' ' + name.substring(0, name.indexOf(character) + 1);
		name = name.substr(name.indexOf(character) + 1);
	}

	var array = new Array();
	array[0] = trim(name);
	array[1] = value;
	array[2] = 'nick';
	return array;
}

var lifeInput_new = new Array();

function getLifeTable(elem) {
	
	lifeInput_new[elem.parentNode.id] = new Array();
	
	var life = trim(elem.value);
	life.replace(/\(/g, '');
	life.replace(/\)/g, '');
	life.replace(/\?/g, '');
	life.replace(/dem/g, '');
	
	var date = '';
	var date2 = '';
	var place = '';
	if(life.indexOf('in ') != -1) {
		place = life.substr(life.indexOf('in ') + 'in '.length);
		life = life.substring(0, life.indexOf('in '));
	}
	
	if(life.indexOf(', ') != -1) {
		place = life.substr(life.indexOf(', ') + ', '.length);
		life = life.substring(0, life.indexOf(', '));
	}
	
	lifeInput_new[elem.parentNode.id]["value"] = life;
	
	var table = '';
	var type = '';
	
	var regExp = /(zwischen|zw\.*\s).*(und|u\.*\s)/i;
	var result = regExp.exec(life);

	if(result != null) {

		// Es werden zwei Daten erwartet, mit einem "und" getrennt
	
		var life1 = life.substring(life.indexOf(result[1]) + result[1].length, life.indexOf(result[2]));
		var life2 = life.substr(life.indexOf(result[2]) + result[2].length);

		date = searchForDate(life1)[0];
		var array = searchForDate(life2);
		if(array[1].length > 0)
			date2 = array[1];
		else
			date2 = array[0];

		if(date.length > 0 && date2.length > 0) {
			var offset = dateFilterAdds(life1, true);
			var offset2 = dateFilterAdds(life2, true);

			var dateStr = getNiceDate(date.substr(0, 4), date.substring(date.indexOf('-') + 1, date.lastIndexOf('-')), date.substr(date.lastIndexOf('-') + 1));
			var dateStr2 = getNiceDate(date2.substr(0, 4), date2.substring(date2.indexOf('-') + 1, date2.lastIndexOf('-')), date2.substr(date2.lastIndexOf('-') + 1));

			dateStr = dateFilterOffset(dateStr, offset);
			dateStr2 = dateFilterOffset(dateStr2, offset);
			
			date = normaliseDate(date);
			date2 = normaliseDate(date2);

			lifeInput_new[elem.parentNode.id]["date"] = date;
			lifeInput_new[elem.parentNode.id]["date2"] = date2;
			
			lifeInput_new[elem.parentNode.id]["offset"] = offset;
			lifeInput_new[elem.parentNode.id]["offset2"] = offset2;

			table += '<td lang="' + date + ':' + offset + '__' + date2 + ':' + offset2 + '">' + dateStr + ' bis ' + dateStr2 + '</td>';
			type += '<td>Zeitraum</td>';
		}
	
	} else if(life.toLowerCase().indexOf('bis') != -1) {

		// Es werden zwei Daten erwartet, mit einem "bis" getrennt
	
		var life1 = life.substring(0, life.indexOf('bis'));
		var life2 = life.substr(life.indexOf('bis') + 'bis'.length);

		date = searchForDate(life1)[0];
		var array = searchForDate(life2);
		if(array[1].length > 0)	date2 = array[1];
		else					date2 = array[0];

		if(date.length > 0 && date2.length > 0) {
			var offset = dateFilterAdds(life1, true);
			var offset2 = dateFilterAdds(life2, true);

			var dateStr = getNiceDate(date.substr(0, 4), date.substring(date.indexOf('-') + 1, date.lastIndexOf('-')), date.substr(date.lastIndexOf('-') + 1));
			var dateStr2 = getNiceDate(date2.substr(0, 4), date2.substring(date2.indexOf('-') + 1, date2.lastIndexOf('-')), date2.substr(date2.lastIndexOf('-') + 1));

			dateStr = dateFilterOffset(dateStr, offset);
			dateStr2 = dateFilterOffset(dateStr2, offset);

			date = normaliseDate(date);
			date2 = normaliseDate(date2);

			lifeInput_new[elem.parentNode.id]["date"] = date;
			lifeInput_new[elem.parentNode.id]["date2"] = date2;
			
			lifeInput_new[elem.parentNode.id]["offset"] = offset;
			lifeInput_new[elem.parentNode.id]["offset2"] = offset2;

			table += '<td lang="' + date + ':' + offset + '__' + date2 + ':' + offset2 + '">' + dateStr + ' bis ' + dateStr2 + '</td>';
			type += '<td>Zeitraum</td>';
		}
	
	}else {		
		// Es wird nur ein Datum erwartet		
		var array = searchForDate(life);
		date = array[0];
		date2 = array[1];
		
		if(date.length > 0 && date2.length == 0) {
			var offset = dateFilterAdds(life, false);
			
			var dateStr = getNiceDate(date.substr(0, 4), date.substring(date.indexOf('-') + 1, date.lastIndexOf('-')), date.substr(date.lastIndexOf('-') + 1));
			
			dateStr = dateFilterOffset(dateStr, offset);

			date = normaliseDate(date);

			lifeInput_new[elem.parentNode.id]["date"] = date;
			lifeInput_new[elem.parentNode.id]["offset"] = offset;

			table += '<td lang="' + date + ':' + offset + '__:">' + dateStr + '</td>';
			type += '<td>Datum</td>';

		}else if(date.length > 0 && date2.length > 0) {
			var offset = dateFilterAdds(life, true);
			var offset2 = dateFilterAdds(life, true);

			var dateStr = getNiceDate(date.substr(0, 4), date.substring(date.indexOf('-') + 1, date.lastIndexOf('-')), date.substr(date.lastIndexOf('-') + 1));
			var dateStr2 = getNiceDate(date2.substr(0, 4), date2.substring(date2.indexOf('-') + 1, date2.lastIndexOf('-')), date2.substr(date2.lastIndexOf('-') + 1));
			
			dateStr = dateFilterOffset(dateStr, offset);
			dateStr2 = dateFilterOffset(dateStr2, offset);

			date = normaliseDate(date);
			date2 = normaliseDate(date2);

			lifeInput_new[elem.parentNode.id]["date"] = date;
			lifeInput_new[elem.parentNode.id]["date2"] = date2;
			
			lifeInput_new[elem.parentNode.id]["offset"] = offset;
			lifeInput_new[elem.parentNode.id]["offset2"] = offset2;

			table += '<td lang="' + date + ':' + offset + '__' + date2 + ':' + offset2 + '">' + dateStr + ' bis ' + dateStr2 + '</td>';
			type += '<td>Zeitraum</td>';
			
		}
	}
	
	if(place.length > 0) {
		lifeInput_new[elem.parentNode.id]["place"] = place;

		table += '<td lang="place">' + place + '</td>';
		type += '<td>Ort</td>';
	}
	
	var node = document.createElement('div');
	node.innerHTML = '<table><tr class="one">' + table + '</tr><tr class="two">' + type + '</tr></table>';
	node.className = 'variant';
	
	var div = elem.parentNode.getElementsByTagName('table')[0].parentNode;
	div.parentNode.replaceChild(node, div);
	
	lifeInput_new[elem.parentNode.id][0] = date;
	lifeInput_new[elem.parentNode.id][1] = place;
}

function normaliseDate(date) {
	var year = date.substr(0, 4);
	var month = date.substring(date.indexOf('-') + 1, date.lastIndexOf('-'));
	var day = date.substr(date.lastIndexOf('-') + 1);
	if(month.length == 1) month = '0' + month;
	if(day.length == 1) day = '0' + day;
	return year + '-' + month + '-' + day;
}

function dateFilterOffset(date, offset) {
	if(offset.length == 0) return date;
	if(offset == 'CE')		return date + ' n. Chr.';
	if(offset == 'BCE')		return date + ' v. Chr.';
	if(offset == 'before')	return 'vor dem ' + date;
	if(offset == 'after')	return 'nach dem ' + date;
}

function dateFilterAdds(life, between) {
	if(life.toLowerCase().indexOf('nach christus') != -1)			return 'CE';
	if(life.toLowerCase().indexOf('nach christi') != -1)			return 'CE';
	if(life.toLowerCase().search(/n\.*\s*chr\.*/) != -1)			return 'CE';
	if(life.toLowerCase().indexOf('vor christus') != -1)			return 'BCE';
	if(life.toLowerCase().indexOf('vor christi') != -1)				return 'BCE';
	if(life.toLowerCase().search(/v\.*\s*chr\.*/) != -1)			return 'BCE';
	if(life.toLowerCase().indexOf('nach der zeitenwende') != -1)	return 'CE';
	if(life.toLowerCase().search(/n\.*\s*d\.*\s*z\.*/) != -1)		return 'CE';
	if(life.toLowerCase().indexOf('vor der zeitenwende') != -1)		return 'BCE';
	if(life.toLowerCase().search(/v\.*\s*d\.*\s*z\.*/) != -1)		return 'BCE';
	if(!between && life.toLowerCase().indexOf('frühestens') != -1)	return 'after';
	if(!between && life.toLowerCase().indexOf('nicht vor') != -1)	return 'after';
	if(!between && life.toLowerCase().indexOf('nach') != -1)		return 'after';
	if(!between && life.toLowerCase().indexOf('spätestens') != -1)	return 'before';
	if(!between && life.toLowerCase().indexOf('nicht nach') != -1)	return 'before';
	if(!between && life.toLowerCase().indexOf('vor') != -1)			return 'before';
	return '';
}

function getNiceDate(year, month, day) {
	if(month.substr(0, 1) == '0')	month = month.substr(1);
	if(day.substr(0, 1) == '0')		day = day.substr(1);
		
	var monthStr = '';
	switch(month) {
		case "1":	monthStr = 'Januar';	break;
		case "2":	monthStr = 'Februar';	break;
		case "3":	monthStr = 'März';		break;
		case "4":	monthStr = 'April';		break;
		case "5":	monthStr = 'Mai';		break;
		case "6":	monthStr = 'Juni';		break;
		case "7":	monthStr = 'Juli';		break;
		case "8":	monthStr = 'August';	break;
		case "9":	monthStr = 'September';	break;
		case "10":	monthStr = 'Oktober';	break;
		case "11":	monthStr = 'November';	break;
		case "12":	monthStr = 'Dezember';	break;
		default:	monthStr = month;		break;
	}
	
	return day+'. '+monthStr+' '+year;
}


function getLastDayOfMonth(year, month) {
	if(month.substr(0, 1) == "0") month = month.substr(1);

	month = Number(month);
	
	if(month == 4 || month == 6 || month == 9 || month == 11) return "30";

	if(month == 2) {
		if(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) return "29";
		return "28";
	}	
	return "31";
}

function searchForDate(life) {
	var date = '';
	var date2 = '';
	
	// Exaktes Datum		
	var regExp = /([1-9]\d\d\d)([-|/])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])/;
	var result = regExp.exec(life);
	if(result != null) {
		date = result[1] + '-' + result[3] + '-' + result[4];
		life = life.substring(0, result.index) + life.substr(result.index + result[0].length);
	}

	if(date.length == 0) {
		var regExp = /(0[1-9]|[12][0-9]|3[01])[/](0[1-9]|1[012])[/]([1-9]\d\d\d)/;
		var result = regExp.exec(life);
		if(result != null) {
			date = result[3] + '-' + result[2] + '-' + result[1];
			life = life.substring(0, result.index) + life.substr(result.index + result[0].length);
		}
	}

	if(date.length == 0) {
		var regExp = /(0[1-9]|[1-9]|[12][0-9]|3[01])[\.]\s*(0[1-9]|[1-9]|1[012])[\.]\s*([1-9]\d\d\d)/;
		var result = regExp.exec(life);
		if(result != null) {
			date = result[3] + '-' + result[2] + '-' + result[1];
			life = life.substring(0, result.index) + life.substr(result.index + result[0].length);
		}
	}

	if(date.length == 0) {
		var regExp = /(0[1-9]|[1-9]|[12][0-9]|3[01])[\.]\s*(januar|jänner|februar|märz|april|mai|juni|juli|august|september|oktober|november|dezember)\s*([1-9]\d\d\d)/i;
		var result = regExp.exec(life);
		if(result != null) {
			switch(result[2].toLowerCase()) {
				case "januar":		date = result[3] + '-' + "1" + '-' + result[1]; break;
				case "jänner":		date = result[3] + '-' + "1" + '-' + result[1]; break;
				case "februar":		date = result[3] + '-' + "2" + '-' + result[1]; break;
				case "märz":		date = result[3] + '-' + "3" + '-' + result[1]; break;
				case "april":		date = result[3] + '-' + "4" + '-' + result[1]; break;
				case "mai":			date = result[3] + '-' + "5" + '-' + result[1]; break;
				case "juni":		date = result[3] + '-' + "6" + '-' + result[1]; break;
				case "juli":		date = result[3] + '-' + "7" + '-' + result[1]; break;
				case "august":		date = result[3] + '-' + "8" + '-' + result[1]; break;
				case "september":	date = result[3] + '-' + "9" + '-' + result[1]; break;
				case "oktober":		date = result[3] + '-' + "10" + '-' + result[1]; break;
				case "november":	date = result[3] + '-' + "11" + '-' + result[1]; break;
				case "dezember":	date = result[3] + '-' + "12" + '-' + result[1]; break;
				default: break;
			}
			life = life.substring(0, result.index) + life.substr(result.index + result[0].length);
		}
	}

	if(date.length == 0) {
		var regExp = /(0[1-9]|[1-9]|[12][0-9]|3[01])[\.]\s*(jan|feb|mar|apr|mai|may|jun|jul|aug|sep|okt|oct|nov|dez|dec)\s*([1-9]\d\d\d)/i;
		var result = regExp.exec(life);
		if(result != null) {
			switch(result[2].toLowerCase()) {
				case "jan": date = result[3] + '-' + "1" + '-' + result[1]; break;
				case "feb": date = result[3] + '-' + "2" + '-' + result[1]; break;
				case "mar": date = result[3] + '-' + "3" + '-' + result[1]; break;
				case "apr": date = result[3] + '-' + "4" + '-' + result[1]; break;
				case "mai": date = result[3] + '-' + "5" + '-' + result[1]; break;
				case "may": date = result[3] + '-' + "5" + '-' + result[1]; break;
				case "jun": date = result[3] + '-' + "6" + '-' + result[1]; break;
				case "jul": date = result[3] + '-' + "7" + '-' + result[1]; break;
				case "aug": date = result[3] + '-' + "8" + '-' + result[1]; break;
				case "sep": date = result[3] + '-' + "9" + '-' + result[1]; break;
				case "okt": date = result[3] + '-' + "10" + '-' + result[1]; break;
				case "oct": date = result[3] + '-' + "10" + '-' + result[1]; break;
				case "nov": date = result[3] + '-' + "11" + '-' + result[1]; break;
				case "dez": date = result[3] + '-' + "12" + '-' + result[1]; break;
				case "dec": date = result[3] + '-' + "12" + '-' + result[1]; break;
				default: break;
			}
			life = life.substring(0, result.index) + life.substr(result.index + result[0].length);
		}
	}

	// Implizite Zeiträume
	if(date.length == 0) {
		var regExp = /([1-9]\d\d\d)([-|/])(0[1-9]|1[012])/;
		var result = regExp.exec(life);
		if(result != null) {
			date = result[1] + '-' + result[3] + '-' + "1";
			date2 = result[1] + '-' + result[3] + '-' + getLastDayOfMonth(result[1], result[3]);
			life = life.substring(0, result.index) + life.substr(result.index + result[0].length);
		}
	}

	if(date.length == 0) {
		var regExp = /(0[1-9]|1[012])[/]([1-9]\d\d\d)/;
		var result = regExp.exec(life);
		if(result != null) {
			date = result[2] + '-' + result[1] + '-' + "1";
			date2 = result[2] + '-' + result[1] + '-' + getLastDayOfMonth(result[2], result[1]);
			life = life.substring(0, result.index) + life.substr(result.index + result[0].length);
		}
	}

	if(date.length == 0) {
		var regExp = /(0[1-9]|[1-9]|1[012])[\.]\s*([1-9]\d\d\d)/;
		var result = regExp.exec(life);
		if(result != null) {
			date = result[2] + '-' + result[1] + '-' + "1";
			date2 = result[2] + '-' + result[1] + '-' + getLastDayOfMonth(result[2], result[1]);
			life = life.substring(0, result.index) + life.substr(result.index + result[0].length);
		}
	}

	if(date.length == 0) {
		var regExp = /(januar|jänner|februar|märz|april|mai|juni|juli|august|september|oktober|november|dezember)\s*([1-9]\d\d\d)/i;
		var result = regExp.exec(life);
		if(result != null) {

			switch(result[1].toLowerCase()) {
				case "januar":		date = result[2] + '-' + "1" + '-' + "1"; date2 = result[2] + '-' + "1" + '-' + "31"; break;
				case "jänner":		date = result[2] + '-' + "1" + '-' + "1"; date2 = result[2] + '-' + "1" + '-' + "31"; break;
				case "februar": 	date = result[2] + '-' + "2" + '-' + "1"; date2 = result[2] + '-' + "2" + '-' + getLastDayOfMonth(result[2], "2"); break;
				case "märz":		date = result[2] + '-' + "3" + '-' + "1"; date2 = result[2] + '-' + "3" + '-' + "31"; break;
				case "april":		date = result[2] + '-' + "4" + '-' + "1"; date2 = result[2] + '-' + "4" + '-' + "30"; break;
				case "mai":			date = result[2] + '-' + "5" + '-' + "1"; date2 = result[2] + '-' + "5" + '-' + "31"; break;
				case "juni":		date = result[2] + '-' + "6" + '-' + "1"; date2 = result[2] + '-' + "6" + '-' + "30"; break;
				case "juli":		date = result[2] + '-' + "7" + '-' + "1"; date2 = result[2] + '-' + "7" + '-' + "31"; break;
				case "august":		date = result[2] + '-' + "8" + '-' + "1"; date2 = result[2] + '-' + "8" + '-' + "31"; break;
				case "september":	date = result[2] + '-' + "9" + '-' + "1"; date2 = result[2] + '-' + "9" + '-' + "30"; break;
				case "oktober":		date = result[2] + '-' + "10" + '-' + "1"; date2 = result[2] + '-' + "10" + '-' + "31"; break;
				case "november":	date = result[2] + '-' + "11" + '-' + "1"; date2 = result[2] + '-' + "11" + '-' + "30"; break;
				case "dezember":	date = result[2] + '-' + "12" + '-' + "1"; date2 = result[2] + '-' + "12" + '-' + "31"; break;
				default: break;
			}
			life = life.substring(0, result.index) + life.substr(result.index + result[0].length);
		}
	}

	if(date.length == 0) {
		var regExp = /(jan|feb|mar|apr|mai|may|jun|jul|aug|sep|okt|oct|nov|dez|dec)\s*([1-9]\d\d\d)/i;
		var result = regExp.exec(life);
		if(result != null) {

			switch(result[1].toLowerCase()) {
				case "jan": date = result[2] + '-' + "1" + '-' + "1"; date2 = result[2] + '-' + "1" + '-' + "31"; break;
				case "feb": date = result[2] + '-' + "2" + '-' + "1"; date2 = result[2] + '-' + "2" + '-' + getLastDayOfMonth(result[2], "2"); break;
				case "mar": date = result[2] + '-' + "3" + '-' + "1"; date2 = result[2] + '-' + "3" + '-' + "31"; break;
				case "apr": date = result[2] + '-' + "4" + '-' + "1"; date2 = result[2] + '-' + "4" + '-' + "30"; break;
				case "mai": date = result[2] + '-' + "5" + '-' + "1"; date2 = result[2] + '-' + "5" + '-' + "31"; break;
				case "may": date = result[2] + '-' + "5" + '-' + "1"; date2 = result[2] + '-' + "5" + '-' + "31"; break;
				case "jun": date = result[2] + '-' + "6" + '-' + "1"; date2 = result[2] + '-' + "6" + '-' + "30"; break;
				case "jul": date = result[2] + '-' + "7" + '-' + "1"; date2 = result[2] + '-' + "7" + '-' + "31"; break;
				case "aug": date = result[2] + '-' + "8" + '-' + "1"; date2 = result[2] + '-' + "8" + '-' + "31"; break;
				case "sep": date = result[2] + '-' + "9" + '-' + "1"; date2 = result[2] + '-' + "9" + '-' + "30"; break;
				case "okt": date = result[2] + '-' + "10" + '-' + "1"; date2 = result[2] + '-' + "10" + '-' + "31"; break;
				case "oct": date = result[2] + '-' + "10" + '-' + "1"; date2 = result[2] + '-' + "10" + '-' + "31"; break;
				case "nov": date = result[2] + '-' + "11" + '-' + "1"; date2 = result[2] + '-' + "11" + '-' + "30"; break;
				case "dez": date = result[2] + '-' + "12" + '-' + "1"; date2 = result[2] + '-' + "12" + '-' + "31"; break;
				case "dec": date = result[2] + '-' + "12" + '-' + "1"; date2 = result[2] + '-' + "12" + '-' + "31"; break;
				default: break;
			}

			life = life.substring(0, result.index) + life.substr(result.index + result[0].length);
		}
	}

	if(date.length == 0) {
		var regExp = /(erstes|zweites|1\.*|2\.*)\s*halbjahr\s*([1-9]\d\d\d)/i;
		var result = regExp.exec(life);
		if(result != null) {
			if(result[1] == 'erstes' || result[1].indexOf('1') != -1) {
				date = result[2] + '-' + "1" + '-' + "1";
				date2 = result[2] + '-' + "6" + '-' + "30";
			}else {
				date = result[2] + '-' + "7" + '-' + "1";
				date2 = result[2] + '-' + "12" + '-' + "31";
			}
			life = life.substring(0, result.index) + life.substr(result.index + result[0].length);
		}
	}

	if(date.length == 0) {
		var regExp = /(erstes|zweites|drittes|viertes|1\.*|2\.*|3\.*|4\.*)\s*quartal\s*([1-9]\d\d\d)/i;
		var result = regExp.exec(life);
		if(result != null) {
			if(result[1].toLowerCase() == 'erstes' || result[1].indexOf('1') != -1) {
				date = result[2] + '-' + "1" + '-' + "1";
				date2 = result[2] + '-' + "3" + '-' + "31";
			}else if(result[1].toLowerCase() == 'zweites' || result[1].indexOf('2') != -1) {
				date = result[2] + '-' + "4" + '-' + "1";
				date2 = result[2] + '-' + "6" + '-' + "30";
			}else if(result[1].toLowerCase() == 'drittes' || result[1].indexOf('3') != -1) {
				date = result[2] + '-' + "7" + '-' + "1";
				date2 = result[2] + '-' + "9" + '-' + "30";
			}else if(result[1].toLowerCase() == 'viertes' || result[1].indexOf('4') != -1) {
				date = result[2] + '-' + "10" + '-' + "1";
				date2 = result[2] + '-' + "12" + '-' + "31";
			}
			life = life.substring(0, result.index) + life.substr(result.index + result[0].length);
		}
	}

	if(date.length == 0) {
		var regExp = /(sommer|herbst|winter|frühling|frühjahr)\s*([1-9]\d\d\d)/i;
		var result = regExp.exec(life);
		if(result != null) {
			if(result[1].toLowerCase() == 'sommer') {
				date = result[2] + '-' + "6" + '-' + "21";
				date2 = result[2] + '-' + "9" + '-' + "20";
			}else if(result[1].toLowerCase() == 'herbst') {
				date = result[2] + '-' + "9" + '-' + "21";
				date2 = result[2] + '-' + "12" + '-' + "20";
			}else if(result[1].toLowerCase() == 'winter') {
				date = result[2] + '-' + "12" + '-' + "21";
				date2 = result[2] + '-' + "3" + '-' + "20";
			}else if(result[1].toLowerCase() == 'frühling' || result[1].toLowerCase() == 'frühjahr') {
				date = result[2] + '-' + "3" + '-' + "21";
				date2 = result[2] + '-' + "6" + '-' + "20";
			}
			life = life.substring(0, result.index) + life.substr(result.index + result[0].length);
		}
	}

	if(date.length == 0) {
		var regExp = /([1-9]\d\d\d)/;
		var result = regExp.exec(life);
		if(result != null) {
			date = result[1] + '-' + "1" + '-' + "1";
			date2 = result[1] + '-' + "12" + '-' + "31";
			life = life.substring(0, result.index) + life.substr(result.index + result[0].length);
		}
	}
	
	var array = new Array();
	array[0] = date;
	array[1] = date2;	
	return array;
}

var workInput_new = new Array();

function getWorkTable(elem) {
	
	workInput_new[elem.parentNode.id] = new Array();
	
	var work = trim(elem.value);
	
	var table = '<td>' + work + '</td>';
	var type = '';
	
	if(elem.parentNode.id.indexOf('occupation') != -1)	type = '<td>Beruf</td>';
	else type = '<td>Wirkort</td>';
	
	var node = document.createElement('div');
	node.innerHTML = '<table><tr class="one">' + table + '</tr><tr class="two">' + type + '</tr></table>';
	node.className = 'variant';
	
	var div = elem.parentNode.getElementsByTagName('table')[0].parentNode;
	div.parentNode.replaceChild(node, div);
	
	workInput_new[elem.parentNode.id][0] = work;
}

/**
 * Diese Funktion speichert die letzte Aenderung an einer Person
 * where: welcher Knoten ist betroffen?
 * what:  added,changed,removed
 * docId: Dateiname.xml
 */

function update_revisionDesc(where,what,docId,xquery) {
	
	new Ajax.Request('PHP/person/existSaveChange.php', {
			method: 'get',
			parameters: 'unique=' + new Date().getTime() + '&where=' + where + '&what=' + what + '&docId=' + docId + '&xquery=' + xquery,
			onSuccess: function(t) { if(t.responseText.indexOf('ERROR') != -1) alert(t.responseText); },
			onFailure: function(t) { alert('Error ' + t.status + ' -- ' + t.statusText) }
		});
	
	return;
}