//var RequestObject = new ActiveXObject('Microsoft.XMLHTTP');
// Globale Variablen
var tajax_FloodLock = false;
var tajax_timer = null;
/*
#########################################################################################
#########################################################################################
	
### tAJAX-Request-Initialisierung ###
## wird nur intern verwendet ##
*/
function tajax_InitRequest() {
	//var RequestObject;
	RequestObject = null;
	try {
		RequestObject = new ActiveXObject('Microsoft.XMLHTTP');
	}
	catch (Error) {
		try {
			RequestObject = new ActiveXObject('MSXML2.XMLHTTP');
		}
		catch (Error) {
			try {
				RequestObject = new XMLHttpRequest();
			}
			catch (Error) {
				alert('Ihr Browser unterstützt keine XMLHTTP-Objekte.');
			}
		}
	}
	return RequestObject;
}
/*
#########################################################################################
#########################################################################################
	
### tAJAX-Aufruffunktion ###
## wird nur intern verwendet ##
*/
function tajax_request(Interface, Query, QueryType, ASync, TargetObject, AddType, TargetType, MyAreaName) {
	//alert('Aufgerufen');
	var req;
	var response;
	req = tajax_InitRequest();
	if (!req) return;
	if (parseInt(ASync) == 1) {
		//alert('asynch');
		req.onreadystatechange = function() {
			//alert('Antwort?' + RequestObject.readyState );
			//document.getElementById('tajaxLoadArea').innerHTML = document.getElementById('tajaxLoadArea').innerHTML + RequestObject.readyState;
			ShowtajaxLoadArea(req.readyState, '', MyAreaName);
			if (req.readyState == 4) {
				ShowtajaxLoadArea(req.readyState, req.status, MyAreaName);
				if (req.status == 200) {
					tajax('', '', TargetObject, AddType, TargetType, '', '', 0, MyAreaName, 1, req.responseText)
					HidetajaxLoadArea(MyAreaName);
				} else {
					ShowtajaxLoadArea(5, req.status, MyAreaName);
					//ShowtajaxLoadArea(5, req.responseText, MyAreaName);
				}
			}
		};
		if (QueryType == 'POST') {
			req.open(QueryType, Interface, true);
			req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
			req.send(Query);
		} else {
			req.open(QueryType, Interface + '?' + Query, true);
			req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
			req.send(null);
		}
		return ('done');
	} else {
		req.open(QueryType, Interface + '?' + Query, false);
		req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		req.send(null);
		response = req.responseText;
		//alert(response);
		return (response);
	}
}
/*
#########################################################################################
#########################################################################################
	
tAJAX-Hauptfunktion
### Parameter ###
Interface		-	Optional		- Gibt die Seite an, welche als Interface benutzt werden soll. Im CRM schon als Standard eingetragen.
Query			-	Conditional		- Angabe eines GET-Query an die Schnittstelle
TargetObject	-	Conditional		- Gibt ein Zielobjekt an, wenn das Ergebniss auf die Seite geschrieben werden soll (Für "HTML", "Text" und "Value" PFLICHT!)
AddType			-	Conditional		- Gibt an, ob die Rückabge angehangen oder Vorgestellt werden soll. Wenn nichts angegeben, dann wird das Ziel ersetzt. (NICHT für "DirectReturn")
TargetType		-	Optional		- Gibt an, welcher Art die Rückgabe sein soll. ("HTML", "Text", "Value", "DirectReturn")
OriginForm		-	Conditional		- Ermöglicht die Übergabe eines ganzen Formulars. (Falls ein Formular an die Schnittstelle gesendet werden soll)
ASync			-	Optional		- Gibt an, ob die Anfrage Asynchron gestellt werden soll. Geht NICHT für "DirectReturn".
FloodTimer		-	Optional		- Angabe einer Zeit, wie lange tAJAX-Aufrufe zum 'Flutschutz' gesperrt werden sollen. (In Sekunden)
MyAreaName		-	Optional		- Gibt eine alternative Ladeanzeige an (ID des OberElements!). Der Aufbau muss alle 3 Elemente enthalten. (MyAreaName, MyAreaNameBody, MyAreaNameBar)
	
### Interne Parameter ###
### Diese Parameter dürfen NICHT im Aufruf gesetzt werden ###
Callback		-	Intern			- Ist zuständig einen Callback eine asynchronen Aufrufs zu ermitteln.
CallbackResponse-	Intern			- Enthält die Rückgabe der Schnittstelle eines asynch-Aufrufs.
	
*/
function tajax(Interface, Query, TargetObject, AddType, TargetType, OriginForm, ASync, FloodTimer, MyAreaName, Callback, CallbackResponse) {
	var Target = document.getElementById(TargetObject);
	var RequestResponse;
	var ElementsCounter = 0;
	var tempQuery = '';
	var tempQueryElement = '';
	// wenn taJaX-Aufrufe durch Überflutungsschutz gesperrt sind, einfach rausspringen
	if ((tajax_FloodLock == true) && (parseInt(Callback) != 1)) {
		return ('');
	}
	if (parseInt(FloodTimer) > 0) {
		tajax_Floodprotect(parseInt(FloodTimer));
	}
	if (Interface == '') Interface = '/afterbuy/Interfaces/ntrfc.aspx';
	if (Query == '') Query = 'ntrfctest=1';
	if ((AddType == '') || (AddType == null)) AddType = '';
	if ((TargetType == '') || (TargetType == null)) TargetType = 'Text';
	if ((MyAreaName == '') || (MyAreaName == null)) MyAreaName = 'tajaxLoadArea';
	if (OriginForm == null) OriginForm = '';
	if (parseInt(Callback) != 1) {
		if (OriginForm != '') {
			Query = '';
			do {
				if ((OriginForm.elements[ElementsCounter].type != 'button') && (OriginForm.elements[ElementsCounter].type != 'submit')) {
					//alert(OriginForm.elements[ElementsCounter].type);
					if (Query == '') {
						tempQueryElement = OriginForm.elements[ElementsCounter].value;
						tempQueryElement = tempQueryElement.replace(/\&/g, "%26");
						tempQuery = OriginForm.elements[ElementsCounter].name + '=';
						if ((OriginForm.elements[ElementsCounter].type == 'checkbox') || ((OriginForm.elements[ElementsCounter].type == 'radio'))) {
							if ((OriginForm.elements[ElementsCounter].checked == true)) tempQuery = tempQuery + tempQueryElement;
						} else {
							tempQuery = tempQuery + tempQueryElement;
						};
						tempQuery = tempQuery.replace(/\+/g, "%2B");
						Query = tempQuery;
					} else {
						tempQuery = OriginForm.elements[ElementsCounter].name + '=';
						if ((OriginForm.elements[ElementsCounter].type == 'checkbox') || ((OriginForm.elements[ElementsCounter].type == 'radio'))) {
							if ((OriginForm.elements[ElementsCounter].checked == true)) tempQuery = tempQuery + escape(OriginForm.elements[ElementsCounter].value);
						} else {
							tempQuery = tempQuery + escape(OriginForm.elements[ElementsCounter].value);
						};
						//tempQuery = tempQuery + escape(OriginForm.elements[ElementsCounter].value);
						tempQuery = tempQuery.replace(/\+/g, "%2B");
						Query = Query + '&' + tempQuery;
					}
				}
				ElementsCounter += 1
			} while (OriginForm.elements[ElementsCounter] != null);
			RequestResponse = tajax_request(Interface, Query, 'post', ASync, TargetObject, AddType, TargetType, MyAreaName);
		} else {
			Query = Query.replace(/\+/g, "%2B");
			RequestResponse = tajax_request(Interface, Query, 'get', ASync, TargetObject, AddType, TargetType, MyAreaName);
		}
	}
	if ((parseInt(ASync) != 1) || (parseInt(Callback) == 1)) {
		if (parseInt(Callback) == 1) {
			RequestResponse = CallbackResponse;
			//alert('RequestResponse:' + RequestResponse);
		}
		if (TargetType == 'HTML') {
			if (RequestResponse != null) {
				switch (AddType) {
					case "after":
						Target.innerHTML = Target.innerHTML + RequestResponse;
						break;
					case "before":
						Target.innerHTML = RequestResponse + Target.innerHTML;
						break;
					case "":
						Target.innerHTML = RequestResponse;
						break;
				}
			} else {
				Target.innerHTML = 'tajax_error!';
			}
		}
		if (TargetType == 'Text') {
			if (RequestResponse != null) {
				if (navigator.appName != 'Netscape') {
					switch (AddType) {
						case "after":
							Target.innerText = Target.innerText + RequestResponse;
							break;
						case "before":
							Target.innerText = RequestResponse + Target.innerText;
							break;
						case "":
							Target.innerText = RequestResponse;
							break;
					}
				} else {
					switch (AddType) {
						case "after":
							Target.textContent = Target.textContent + RequestResponse;
							break;
						case "before":
							Target.textContent = RequestResponse + Target.textContent;
							break;
						case "":
							Target.textContent = RequestResponse;
							break;
					}
				}
			} else {
				if (navigator.appName != 'Netscape') Target.innerText = 'tajax_error!';
				else Target.textContent = 'tajax_error!';
			}
		}
		if (TargetType == 'Value') {
			if (RequestResponse != null) {
				switch (AddType) {
					case "after":
						Target.value = Target.value + RequestResponse;
						break;
					case "before":
						Target.value = RequestResponse + Target.value;
						break;
					case "":
						Target.value = RequestResponse;
						break;
				}
			} else {
				Target.value = 'tajax_error!';
			}
		}
		if (TargetType == 'DirectReturn') {
			if (RequestResponse != null) {
				return (RequestResponse);
			} else {
				return ('tajax_error!');
			}
		}
	}
}
/*
#########################################################################################
#########################################################################################
	
### Hilsfunktion, um das Abschicken eines Formulares zu verhindern, ###
### falls tAJAX eingesetzt werden soll ###
!! HINWEIS: Aufruf mit RETURN!
Beispiel: <form name="testform" onsubmit="javascript:return nosubmit();">
*/
function nosubmit() {
	//event.returnValue = false;
	return false;
}
/*
#########################################################################################
#########################################################################################
	
### Anzeige des tAJAX-Ladebereichs ###
### Zeigt dem User, dass Daten nachgeladen werden ###
*/
function ShowtajaxLoadArea(state, code, MyAreaName) {
	var LoadArea;
	var LoadAreaBody;
	var LoadAreaBar;
	if ((MyAreaName == '') || (MyAreaName == null)) MyAreaName = 'tajaxLoadArea';
	try {
		LoadArea = document.getElementById(MyAreaName);
		LoadAreaBody = document.getElementById(MyAreaName + 'Body');
		LoadAreaBar = document.getElementById(MyAreaName + 'Bar');
	}
	catch (Error) { }
	if (LoadAreaBody != null) {
		//LoadAreaBody.style.top = (WindowHeight / 2) - 40;
		//LoadAreaBody.style.left  = (WindowWidth / 2) - 120;
		if (state == 5) {
			//ErrorCase
			LoadAreaBody.style.visibility = 'visible';
			LoadAreaBar.style.visibility = 'hidden';
			LoadArea.innerHTML = 'Es ist ein Fehler aufgetreten.<br>(' + code + ')';
			LoadAreaBody.className = MyAreaName + 'Error';
		} else {
			LoadAreaBody.style.visibility = 'visible';
			LoadAreaBar.style.visibility = 'visible';
			LoadAreaBody.className = MyAreaName + 'Body';
			LoadArea.innerHTML = 'Daten werden geladen';
		}
	}
}
/*
#########################################################################################
#########################################################################################
	
### Anzeige des tAJAX-Ladebereichs ###
### Versteckt den Ladebereich ###
*/
function HidetajaxLoadArea(MyAreaName) {
	var LoadAreaBody;
	var LoadAreaBar;
	if ((MyAreaName == '') || (MyAreaName == null)) MyAreaName = 'tajaxLoadArea';
	try {
		LoadAreaBody = document.getElementById(MyAreaName + 'Body');
		LoadAreaBar = document.getElementById(MyAreaName + 'Bar');
		//LoadArea = document.getElementById('tajaxLoadArea');
	}
	catch (Error) { }
	if (LoadAreaBody != null) {
		LoadAreaBody.style.visibility = 'hidden';
		LoadAreaBar.style.visibility = 'hidden';
	}
}
/*
#########################################################################################
#########################################################################################

### tAJAX-Überflutungsschutz ###
### Verhindert, das tAJAX sehr oft hintereinander ausgeführt wird. ###	
*/
function tajax_Floodprotect(timeout, Unlock) {
	if (parseInt(timeout) > 0) {
		tajax_FloodLock = true;
		setTimeout("tajax_Floodprotect('',1)", (timeout * 1000));
	}
	if (parseInt(Unlock) == 1) {
		tajax_FloodLock = false;
	}
}
function escapeHTML(str) {
	var div = document.createElement('div');
	var text = document.createTextNode(str);
	div.appendChild(text);
	return div.innerHTML;
}