// Übersetzungsschlüssel entsprechen meist der deutschen Version, deshalb ist die
// deutsche Übersetzung nur scheinbar unvollständig
// Der Übersetzungscode ist in beiden Javascript-Dateien enthalten, da meist nur eine von beiden eingebunden wird.
var translations = {
	"": "de",
	de: {
		agb_gelesen_1: "Ich habe die ",
		agb_gelesen_2: "Teilnahme- und Zahlungsbedingungen",
		agb_gelesen_3: "<br>gelesen und akzeptiert.",
		"error_want_TT.MM.JJJJ": ' Please enter dates using the format DD.MM.YYYY.',
		"[de] mwst-zzgl": "zzgl. MwSt.",
		"[de] mwst-incl": "inkl. MwSt."
	},
	en: {
		agb_gelesen_1: "I've read and accepted the ",
		agb_gelesen_2: "participation and payment terms",
		agb_gelesen_3: ".",
		"error_want_TT.MM.JJJJ": ' Bitte geben Sie ein Datum im Format TT.MM.JJJJ ein.',

		Veranstaltung: "Event",
		"Zum Anmeldeformular": "Show registration form",
		Nummer: 'Number',
		Information: 'Information',
		Veranstalter: 'Organiser',
		Stoffplan: 'Subject matter plan',
		Dauer: 'Duration',
		Uhrzeit: 'Time of day',
		Uhr: "",
		Termininformation: "Event information",
		Teilnahme: "Participation",
		Veranstaltungsgebühr: "Event fee",
		Voraussetzungen: "Requirements",
		Abschluss: "Certificate",
		Förderung: "Promotion",
		Kontakt: "Contact",
		Ansprechpartner: "Contact person",
		Telefon: "Phone",
		"E-Mail": "E-mail",
		Fax: "Fax",
		Anmeldeformular: "Registration form",
		"Zurück zur Veranstaltung": "Go back to event",
		"Zur Veranstaltung anmelden": "Register for this event",
		Anrede: "Gender",
		Herr: "Male",
		Frau: "Female",
		Vorname: "Given name",
		Nachname: "Surname",
		Straße: "Street",
		PLZ: "Zip code",
		Ort: "City",
		Telefax: "Fax",
		Arbeitgeber: "Employer",
		Bemerkung: "Comment",
		Pflichtfeld: "Required field",
		
		Volltext: "Full text",
		Titel: "title",
		Zeitraum: "Period",
		"Beginn ab": "Starting from",
		"Beginn bis": "Starting until",
		"Veranstaltungsort / -PLZ": "Event city / zip code",
		Veranstaltungsort: "Location",
		Veranstaltungsnummer: "Event number",
		Suchen: "Search",
		Thema: "Topic",
		Kursnummer: "Course number",
		"Sie müssen die Teilnahme- und Zahlungsbedingungen akzeptieren!": "You need to accept the participation and payment terms first!",
		Veranstaltungstitel: "Event title",
		Beginn: "Start date",
		Seminare: "Seminars",
		Anmeldegebühr: "Registration fee",
		Kursgebühr: "Course fee",
		Prüfungsgebühr: "Exam fee",
		"zzgl. Materialkosten": "Add. material costs",
		"[de] mwst-zzgl": "plus VAT",
		"[de] mwst-incl": "incl. VAT"
	}
};

(function(){
	var language = "";

	var l=document.getElementsByTagName("meta");
	for (var i = 0; i < l.length; i++) {
		if (l[i].httpEquiv == "content-language") {
			language = l[i].content;
		}
	}

	if (translations[language] == null) {
		language = "";
	}
	
	if (typeof(translations[language]) == "string") {
		language = translations[language];
	}
	
	translations = translations[language];
})();

function translate(name) {
	return translations[name] != null ? translations[name] : name;
}

// Ende Übersetzungscode

function getSearchFormHTML() {
	var html = '';

	html += '\
		<form id="suchformular" method="post">\
		<table class="suche">\
		    <tr>\
			    <th colspan="2">' + translate('Volltext') + '</th>\
		    </tr>\
		    <tr>\
			    <td colspan="2"><input class="text" id="volltext" name="volltext" type="text"></td>\
		    </tr>\
		    <tr>\
			    <th colspan="2">' + translate('Titel') + '</th>\
		    </tr>\
		    <tr>\
			    <td colspan="2"><input class="text" id="thema" name="thema" type="text"></td>\
		    </tr>\
		    <tr>\
			    <th colspan="2">' + translate('Zeitraum') + '</th>\
		    </tr>\
		    <tr>\
		    	<td>' + translate('Beginn ab') + '</td>\
			    <td><input class="text initial" id="beginn_ab" name="beginn_ab" value="TT.MM.JJJJ" type="text" onFocus="if (this.value == \'TT.MM.JJJJ\' ) { this.value = \'\'; $(\'beginn_ab\').removeClassName(\'initial\'); }" onBlur="if (this.value == \'\' || this.value == \'TT.MM.JJJJ\' ) { this.value = \'TT.MM.JJJJ\'; $(\'beginn_ab\').addClassName(\'initial\'); }"></td>\
		    </tr>\
		    <tr>\
		    	<td>' + translate('Beginn bis') + '</td>\
			    <td><input class="text initial" id="beginn_bis" name="beginn_bis" value="TT.MM.JJJJ" type="text" onFocus="if (this.value == \'TT.MM.JJJJ\' ) { this.value = \'\'; $(\'beginn_bis\').removeClassName(\'initial\'); }" onBlur="if (this.value == \'\' || this.value == \'TT.MM.JJJJ\' ) { this.value = \'TT.MM.JJJJ\'; $(\'beginn_bis\').addClassName(\'initial\'); }"></td>\
		    </tr>\
		    <tr>\
			    <th colspan="2">' + translate('Veranstaltungsort / -PLZ') + '</th>\
		    </tr>\
		    <tr>\
			    <td colspan="2"><input class="text" id="ort" name="raum_adresse_ort" type="text"></td>\
		    </tr>\
		    <tr>\
		    	<th colspan="2">' + translate('Veranstaltungsnummer') + '</th>\
	    	</tr>\
		    <tr>\
			    <td colspan="2"><input class="text" id="vnr" name="vnr" type="text"></td>\
		    </tr>\
   		</table>\
		<div class="buttons">\
			<a href="#" onclick="doExtendedSearch($(\'suchformular\').serialize(true));">' + translate('Suchen') + '</a>\
		</div>\
		</form>\
	';

	return html;
}

function doExtendedSearch(h, placeholder) {
	/* Bei Fehlern in einem der eingabefelder bis zum Ende der validierung laufen und erst dann abbrechen */
	var inputErrors = false;
	/* Input nicht leer, nicht Initialtext und keine gültige Formatierung --> Fehler */
	for (var i = 0; i < 2; i++) {
		var el = $(i ? 'beginn_bis' : 'beginn_ab');
		if (!el) continue;
		var badValue = el.value != 'TT.MM.JJJJ' && el.value != '' && el.value.match(/^[\d]{1,2}\.[\d]{1,2}\.[\d]{4}$/i) == null;
		/* Falls ein Fehler vorliegt, aber nicht sichtbar ist bzw. umgekehrt  */
		if (badValue != (el.up('td').innerHTML.match(/ein\.$/i) != null)) {
			var oldValue = (el.value == '') ? 'TT.MM.JJJJ' : el.value;
			/* Wenn wert dann normalformatiert, wenn Initialwert dann Initialwertklasse zuweisen */
			var className = (el.value == 'TT.MM.JJJJ') ? 'text initial' : 'text';
			if (!el.nextSibling) el.parentNode.appendChild(document.createTextNode(" "));
			el.value = oldValue;
			el.onfocus = new Function("if (this.value == 'TT.MM.JJJJ' ) { this.value = ''; $(this).removeClassName('initial'); }");
			el.onblur  = new Function("if (this.value == '' || this.value == 'TT.MM.JJJJ' ) { this.value = 'TT.MM.JJJJ'; $(this).addClassName('initial'); }");
			el.nextSibling.nodeValue = badValue ? translate('error_want_TT.MM.JJJJ') : ' ';
			el.setStyle({ borderColor: badValue ? '#FF0000' : '#BBBBBB #CECECE #CECECE' });
		}
		inputErrors = inputErrors || badValue;
	}
	
	/* Sollten Fehler aufgetreten sein --> abbrechen */
	if (inputErrors) return;
	
	for (var i = 0; i < 2; i++) {
		var el = $(i ? 'beginn_bis' : 'beginn_ab');
		if (el && el.value == 'TT.MM.JJJJ') el.value = '';
	}
	
	var parameterAssignments = new Array();
	var volltext = h.volltext;
	delete h.volltext;
	h = new Hash(h);
	h.each(
		function(pair) {
			if(pair.value) {
				parameterAssignments.push(new Hash({parameterId: pair.key, values:[pair.value]}));
			}
		}
	);
	var searchParams = sa.getDefaultSearchParams();
	searchParams.searchQuery.terms = [volltext];
	searchParams.searchQuery.parameterAssignments = parameterAssignments;
	prepareResultView(placeholder);
	// notwendig, weil dort unnötigerweise die Default-Parameter überschrieben werden
	// und ich keine Lust hab, mich mit den Nebenwirkungen einer etwaigen Änderung
	// rumzuschlagen
	var backup = sa.parameters;
	sa.doExtendedSearch(searchParams, sourceSystemKey);
	sa.parameters = backup;
}

function getQSBuilderHTML() {
	var data = getQueryData();

	var value = function(key) {
		return data[key] ? data[key].replace(/&/g,"&amp;").replace("<","&lt;").replace(">","&gt;").replace('"',"&quot;") : "";
	}
	var opt = function(key, value, content) {
		return '<option value="' + value + '"'
			+ (data[key] == value ? ' selected="selected"' : '')
			+ '>' + content + '</option>';
	}
	
	var handlers = ' onblur="updateQueryString()" onkeyup="updateQueryString()" onmouseup="updateQueryString()"';
	
	var html = '';

	html += '\
		<table class="suche">\
		    <tr>\
			    <th colspan="2">' + translate('Thema') + '</th>\
		    </tr>\
		    <tr>\
			    <td colspan="2"><input class="text" id="thema" name="thema" type="text" value="' + value('thema') + '"' + handlers + '></td>\
		    </tr>\
		    <tr>\
			    <th colspan="2">' + translate('Veranstaltungsort / -PLZ') + '</th>\
		    </tr>\
		    <tr>\
			    <td colspan="2"><input class="text" id="raum_adresse_ort" name="raum_adresse_ort" type="text" value="' + value('raum_adresse_ort') + '"' + handlers + '></td>\
		    </tr>\
		    <tr>\
		    	<th colspan="2">' + translate('Veranstaltungsnummer') + '</th>\
	    	</tr>\
		    <tr>\
			    <td colspan="2"><input class="text" id="vnr" name="vnr" type="text" value="' + value('vnr') + '"' + handlers + '></td>\
		    </tr>\
		    <tr>\
		    	<th colspan="2">' + translate('Kursnummer') + '</th>\
	    	</tr>\
		    <tr>\
			    <td colspan="2"><input class="text" id="knr" name="knr" type="text" value="' + value('knr') + '"' + handlers + '></td>\
		    </tr>\
		</table>\
	';

	return html;
}

function updateQueryString() {
	var textElementId = document.getElementById('jsquerydiv').firstChild.id;
	var keys = ["thema", "raum_adresse_ort", "vnr", "knr"];
	var list = [];
	for (var i = 0; i < keys.length; i++) {
		var v = document.getElementById(keys[i]).value;
		if (v) list.push(encodeURIComponent(keys[i]) + "=" + encodeURIComponent(v));
	}
	IONASAPI.getElement(textElementId).setValue("?" + list.join("&")); 
}

function getQueryData() {
	document.getElementById('searchQuery').style.display = "none";
	var textElementId = document.getElementById('jsquerydiv').firstChild.id;
	var v = IONASAPI.getElement(textElementId).getValue();
	var data = {};
	if (v.substring(0,1) != "?") return data;
	v = v.substring(1);
	var l = v.split("&");
	for (var i = 0; i < l.length; i++) {
		var l2 = l[i].split("=",2);
		if (l2.length == 2) data[decodeURIComponent(l2[0])] = decodeURIComponent(l2[1]);
	}
	return data;
}