/**
 * @author emir
 */

/**
 * Fortfuehren des Vorgangs
 */
function proceed(contentId, actionId) {
	// alert(contentId + " " + actionId);
	document.forms[0].contentId.value = contentId;
	document.forms[0].actionId.value = actionId;
	// document.getElementById("contentId").value = contentId;
	// document.getElementById("actionId").value = actionId;
}

/**
 * Setzt den Curcer suf das Element
 * @param elementId
 */
function setCursor(elementId) {
	document.getElementById(elementId).setFocus();
}

/**
 * Setzt den Focus auf das 1. Feld im 1. Formular
 */
function setFocus() {
	if (this.document.forms[0] != null)
		this.document.forms[0].elements[0].focus();
}

/**
 * Zeigt einen alert bei Fehlermeldung.
 * Greift nur wenn in dem HTML-Dokument ein Element mit der ID "error" oder "message" exsitiert
 * und auch nur wenn dieses Element nicht leer ist. 
 */
function showAlert() {
	var msgBuf = null;
	var err = document.getElementById("error");
	if (err != null)
		msgBuf = err.innerHTML;

	msg = document.getElementById("message");
	if (msg != null) {
		msg = msg.innerHTML;
		if (msgBuf != null)
			msgBuf += "\n\n" + msg;
		else
			msgBuf = msg;
	}
	if (msgBuf != null)
		alert(msgBuf);
}

function setVonTime() {
	// alert("setvontime");
	var vonElement = document.forms[0].von;
	var bisElement = document.forms[0].bis;

	var von = vonElement.options[vonElement.selectedIndex].value;
	var bis = bisElement.options[bisElement.selectedIndex].value;

	if (bis < von)
		vonElement.selectedIndex = bisElement.selectedIndex;
}

function setBisTime() {
	// alert("setbistime");
	var bisElement = document.forms[0].bis;
	var vonElement = document.forms[0].von;

	var bis = bisElement.options[bisElement.selectedIndex].value;
	var von = vonElement.options[vonElement.selectedIndex].value;

	if (von > bis)
		bisElement.selectedIndex = vonElement.selectedIndex;
}

/////////////////////////////
// AJAX - HANDLING //////////
/////////////////////////////

var responseDestination;
var requestSource;

//AJAX XMLHTTPRequestObject
var requestObject = createRequestObject();

/*
 * Erzeugt ein Ajax-XMLHTTPRequestObject
 */
function createRequestObject() {
	requestObject = null;
	/* Prueft die verschiednen Browser ab. Alte IE -> Neue IE -> den Rest */
	try {
		requestObject = new ActiveXObject("Microsoft.XMLHTTP");
	} catch (Error) {
		try {
			requestObject = new ActiveXObject("MSXML2.XMLHTTP");
		} catch (Error) {
			try {
				requestObject = new XMLHttpRequest();
			} catch (Error) {
				alert("Erzeugung des XMLHttpRequest-Objekts ist nicht möglich");
			}
		}
	}
	return requestObject;
}


/**
 * Sendet eine Anfrage an den Server(*jsp-Seite)
 * @param methode (GET | POST)
 * @param url (STRING)
 * @param srcId (STRING) 
 * @param destId (STRING) 
 */
function sendRequest( methode, url, srcId, destId) {
	requestSource = document.getElementById(srcId);
	responseDestination = document.getElementById(destId);
	
	var isAsynchron = true;
	requestObject.open(methode, url, isAsynchron);
	requestObject.setRequestHeader("Content-Type", "text/html; charset=UTF-8");
	requestObject.onreadystatechange = handleResponse;
	// Beit der Methode GET wird immer null gesendet.
	requestObject.send(null);
}

/**
 * Berabeitet die Antwort vom Server
 */
function handleResponse() {
	if (requestObject.readyState == 4) {
		// Umlaute werden zwar korrekt dargestellt, allerdings meldet der Browser das er die Entitaet nicht kennt.
		var htmlPlainText = requestObject.responseText;

		// trim() gibt es nicht im JavaScript (obwohl es alle bis auf IE unterstuetzen).
		htmlPlainText = htmlPlainText.replace(/^\s+|\s+$/g, "");

		// Den html-code in die div schreiben
		responseDestination.innerHTML = htmlPlainText;
	}
}

///////////////////////////////////////////////////////////////
// XSS Sicherheits Puefung von "input" Feldern des Typs text //
///////////////////////////////////////////////////////////////

var foundPotentialXSS = false;
/**
 * Liest alle Fromular Felder aus in denen Text eingegeben wird aus und prueft deren Inhalt auf Schadcode.
 */
function parseInputValues(){
	var inputArray = document.getElementsByTagName("input");
	
	// Alle <input> Elemente vom tyoe="text" pruefen
	for (var i=0; i<inputArray.length; i++){
		var inputElement = inputArray[i];
		var typeAttribute = inputElement.getAttribute("type");
		
		// es sind nur die Elemente vom Typ "text" und "password" zu pruefen
		if(!(typeAttribute == "text" || typeAttribute == "password")){
			continue;
		}
		
		var text = inputElement.value;
		text = validateInputValue(text);
		inputElement.value = text;
		
		if(text.search("SECURITY PASSED") >= 0){
			foundPotentialXSS = true;
			// break; sicher ist sicher
		}
	}
	
	// Alle <textarea> Elemente pruefen
	var textareaArray = document.getElementsByTagName("textarea");
	for(var j=0; j<textareaArray.length; j++){
		var textareaElement = textareaArray[j];
		var text = textareaElement.value;
		text = validateInputValue(text);
		textareaElement.value = text;
		
		if(text.search("SECURITY PASSED") >= 0){
			foundPotentialXSS = true;
		//	break; sicher ist sicher
		}
	}
	
	return foundPotentialXSS;
}

/**
 * Validiert den text auf JS Schadcode. Ersetzt gefundenen JS durch einen String.
 * @param text
 * @returns
 */
function validateInputValue(text){
	// JAVASCRIPT TAGS
	text = text.replace(/[\"\'][\s]*javascript:(.*)[\"\']/gi, "\"\"");
	text = text.replace(/script(.*)/gi, "SECURITY PASSED />");    
	
	// JAVASCRIPT FUNKTIONEN
	// Bei diesen aufrufen kann JS-code ausgefuehrt werden. (ausser eval());
	text = text.replace(/eval\((.*)\)/gi, "SECURITY PASSED />");
	text = text.replace(/onclick(.*)/gi, "SECURITY PASSED />");
	text = text.replace(/ondblclick(.*)/gi, "SECURITY PASSED />");
	text = text.replace(/onhelp(.*)/gi, "SECURITY PASSED />");
	text = text.replace(/onkeydown(.*)/gi, "SECURITY PASSED />");
	text = text.replace(/onkeypress\((.*)\)/gi, "SECURITY PASSED />");
	text = text.replace(/ononkeyup(.*)/gi, "SECURITY PASSED />");
	text = text.replace(/onmousedown(.*)/gi, "SECURITY PASSED />");
	text = text.replace(/onmouseout(.*)/gi, "SECURITY PASSED />");
	text = text.replace(/onmouseover(.*)/gi, "SECURITY PASSED />");
	text = text.replace(/onmouseup(.*)/gi, "SECURITY PASSED />");
	text = text.replace(/onscroll(.*)/gi, "SECURITY PASSED />");
	text = text.replace(/onload(.*)/gi, "SECURITY PASSED />");
	text = text.replace(/onunload(.*)/gi, "SECURITY PASSED />");
	
	// HTML TAGS
	// Diese Tags binden fremden Code ein.
	text = text.replace(/object(.*)/gi, "SECURITY PASSED />");
	text = text.replace(/embed(.*)/gi, "SECURITY PASSED />");
	text = text.replace(/iframe(.*)/gi, "SECURITY PASSED />");
	text = text.replace(/applet(.*)/gi, "SECURITY PASSED />");
	
	return text;
}

/**
 * Pruefen der Eingabefelder und anschliessendes Ausfuehren des Formulars.
 */
function processSubmit(elementId){
	var bool = parseInputValues();
	//alert("FOUND POTENTIAL XSS:" + foundPotentialXSS );
	var element = document.getElementById(elementId);
	if(!bool){
		element.submit();
	} else {
		element.reset();
		alert("In der Eingabe wurden unerlaubte Zeichen gefunden. Bitte überprüfen Sie Ihre Eingabe");
	}
}

/**
 * Trims the text.
 * @param text
 * @returns trimmed text
 */
function trim(text){
	text = text.replace(/^\s+|\s+$/g, "");
	return text;
}


// ---------------------------- //
// GEHÖRT IN DIE web-buchung.js //
// ---------------------------- //
function setVonTime() {
	// alert("setvontime");
	var vonElement = document.forms[0].von;
	var bisElement = document.forms[0].bis;

	var von = vonElement.options[vonElement.selectedIndex].value;
	var bis = bisElement.options[bisElement.selectedIndex].value;

	if (bis < von)
		vonElement.selectedIndex = bisElement.selectedIndex;
}

function setBisTime() {
	// alert("setbistime");
	var bisElement = document.forms[0].bis;
	var vonElement = document.forms[0].von;

	var bis = bisElement.options[bisElement.selectedIndex].value;
	var von = vonElement.options[vonElement.selectedIndex].value;

	if (von > bis)
		bisElement.selectedIndex = vonElement.selectedIndex;
}

function checkBrowser() {
	var isIE6 = navigator.userAgent.toLowerCase().indexOf('msie 6') != -1;
	if (isIE6)
		location.href = "/framework-WEB/MasterServlet?contentId=browser_update";
}

/*
 * Berechnet heute + 1 Jahr als Gültigkeitsgrenze fuer den Studentenstatus, wenn
 * Student aktiviert ist. Ansonsten wird das Datumsfeld geleert.
 */ 
function setPreisgrpBis(isDate) {
	if (isDate) {
		date = new Date();
		nextYear = date.getFullYear() + 1;
		actMonth = date.getMonth() + 1;

		preisGrpBis = date.getDate() + "." + actMonth + "." + nextYear;
		document.forms[0].preisgrpbis.value = preisGrpBis;
	} else {
		document.forms[0].preisgrpbis.value = "";
	}
}
