var waiterContent;
var waiter;
function XML() {
	var _this = this;
	var req;
	this.post = {};
	this.onLoad;
	
	// --> Objekt erzeugen
	try {
		req = new XMLHttpRequest(); 
	} catch(e) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");  
		} catch (e2) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");  
			} catch (e3) {
				try {
					req = new ActiveXObject("Msxml2.XMLHTTP.4.0");
				} catch(e4) {
					req = false;
				}
			} 
		} 
	}
  
	this.Load = function(url, arg_method){
		if(document.getElementById('modalloader')){
			document.getElementById('modalloader').style.display = 'block';
		}
		if (!url) {
			return;
    	}
		var str = '';
		var method = (arg_method != 'POST') ? null : arg_method;
		
		// Array in String umwandeln
		if(method){
			for (key in this.post) {
				if (typeof(this.post[key]) == 'object') {
					var pair = '';
					for (key2 in this.post[key]) {
						if(pair!=''){
							pair += '&';
						}
						pair += key + '[]=' + encodeURIComponent(this.post[key][key2]);
					}
				} else {
					var pair = key + '=' + encodeURIComponent(this.post[key]);
				}
				str = (!str) ? pair : str + '&' + pair;
			}
			// Länge des Strings ermitteln
			//str = escape(str);
			req.open('POST', url, true);
			req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			req.setRequestHeader('Content-length', str.length);
			req.setRequestHeader('Connection', 'close');
		} else {
			req.open('GET', url, true);
        	str = null;
		}
		req.onreadystatechange = function() {
			if(req.readyState == 4) {
				if(req.status == 200) {
					// - Alles Ok
					if(document.getElementById('modalloader')){
						document.getElementById('modalloader').style.display = 'none';
					}
					_this.loaded();//output = req.responseText;
				} else {
					_this.failure();// - Es ist ein Fehler passiert
					
				}
			}
		};
		req.send(str);
	}
  
	this.loaded = function(){
		if(this.onLoad){
			this.onLoad(true, req);
		}
	}
	
	this.failure = function(){
		if(this.onLoad){
			this.onLoad(false);
		}
	}
}
// --> Paramter: this.name oder Name des Formulars
function ajaxForm(callForm, action){
	var metaXML = new XML();
	// ---> Felder auslesen
	for (var i = 0; i < document.forms[callForm].length; ++i) {
		element = document.forms[callForm].elements[i];
		type = element.type;
		name = element.name;
		value = element.value;
		
		if(type == "text" || type == "hidden" || type == "password" || type == "textarea" || type == "submit"){
			// abfrage mit value
			// - Vorsicht!! Mehrfache Auswahl
			if(name.substr(name.length-2) == '[]'){
				name = name.substr(0, name.length-2)
				if(!metaXML.post[name] || typeof(metaXML.post[name]) != 'object'){
					metaXML.post[name] = new Array();
				}
				metaXML.post[name].push(value);
			} else {
				metaXML.post[name] = value;
			}
			//metaXML.post[name] = value;
			// abfrage mit value
		} else if(type == "checkbox"){
			if(element.checked){
				// abfrage mit value
				// - Vorsicht!! Mehrfache Auswahl
				if(name.substr(name.length-2) == '[]'){
					name = name.substr(0, name.length-2)
					if(!metaXML.post[name] || typeof(metaXML.post[name]) != 'object'){
						metaXML.post[name] = new Array();
					}
					metaXML.post[name].push(value);
				} else {
					metaXML.post[name] = value;
				}
			}
		} else if(type == "radio"){
			if(element.checked){
				metaXML.post[name] = value;
			}
		} else if(type == "select-one"){
			// --> ES WIRD NUR GESENDET WENN value="irgendwas" angegeben wurde
			// --> leere Values (z.B.: value="") werden nicht gesendet
			// --> ist kein Value-attribut angegeben wird das Label gesendet
			// --> ist ein Value angegeben wird dieser gesendet
			if(element.selectedIndex > -1){
				// Es wurde was ausgeählt...
				if(name.substr(name.length-2) == '[]'){
					name = name.substr(0, name.length-2)
					if(!metaXML.post[name] || typeof(metaXML.post[name]) != 'object'){
						metaXML.post[name] = new Array();
					}
					metaXML.post[name].push(value);
				} else {
					metaXML.post[name] = value;
				}
				/*
				if(element.options[element.selectedIndex].getAttribute("value") || element.options[element.selectedIndex].getAttribute("value") != ""){
					alert("Value gesetzt");
				} else {
					alert("Value nicht gesetzt");
				}
				alert("Länge: "+value.length);
				alert("Wert: "+value);
				*/
			}
		} else if(type == "select-multiple"){
			// --> ES WIRD NUR GESENDET WENN value="irgendwas" angegeben wurde
			name = name.substr(0, name.length-2)
			for(a=0; a<element.options.length; a++){
				if(element.options[a].selected && element.options[a].getAttribute("value")){
					if(!metaXML.post[name] || typeof(metaXML.post[name]) != 'object'){
						metaXML.post[name] = new Array();
					}
					metaXML.post[name].push(element.options[a].value);
				}
			}
		} else if(type == "button"){
			// --> Wird nicht gesendet
		} else if(type == "reset"){
			// --> Wird nicht gesendet
		} else if(type == "file"){
			// --> Noch nicht implementiert
		} else {
			alert(type+" - noch nicht implementiert");
		}
	}
	target = document.forms[callForm].getAttribute('ajaxTarget');
	onLoad = document.forms[callForm].getAttribute("onresponse");
	if(!action){
		action = document.forms[callForm].action;
	}
	action += (action.indexOf('?') == -1) ? "?ajax" : "&ajax";
	if(target){
		if(document.getElementById(target)){
			waiterContent = document.getElementById(target).innerHTML;
			waiter = document.getElementById(target);
			document.getElementById(target).innerHTML = '<table width="100%"><tr align="center"><td valign="middle"><img src="img/activity/bar.gif" /></td></tr></table>';
		}
	}
	metaXML.onLoad = function(success, res){
		if(success){
			parseResponse(res);
		} else {
			document.getElementById(target).innerHTML = "Error 404";
		}
		delete metaXML;
	}
	metaXML.Load(action, "POST");
	return false;
}
function loadPage(url, target, postvars){
	url += (url.indexOf('?') == -1) ? "?ajax" : "&ajax";
	var a = new XML();
	for(i in postvars){
		a.post[i] = postvars[i];
	}
	a.onLoad = function(success, req){
		if(success){
			parseResponse(req);
		} else {
			if(document.getElementById(target)){
				document.getElementById(target).innerHTML = "Error 404";
			}
		}
	}
	if(document.getElementById(target)){
		document.getElementById(target).innerHTML = '<table width="100%"><tr align="center"><td valign="middle"><img src="img/activity/bar.gif" /></td></tr></table>';
	} else {
		
	}
	a.Load(url, "POST");
}
function sendInf(url, postvars){
	var a = new XML();
	for(i in postvars){
		a.post[i] = postvars[i];
	}
	a.onLoad = function(success, req){
		if(success){
			parseResponse(req);
		} else {
			alert("Verbindungs-Fehler");
		}
	}
	a.Load(url, "POST");
}
function parseTextResponse(req){
	req = req.responseText;
	anw = req.substring(0, req.indexOf(":"));
	switch (anw){
		case 'content':
			tmp = req.substring(req.indexOf(":"));
			target = tmp.substring(1, req.indexOf(":"));
			tmp = tmp.substring(req.indexOf(":"));
			content = tmp.substring(1, req.indexOf(":"));
			
			if(document.getElementById(target)){
				document.getElementById(target).innerHTML = content;
			}
		break;
		case '':
		break;
		default:
		break;
	}
}
function parseResponse(req){
	reqO = req;
	req = req.responseXML;
	// - Mozilla-abfrage
	if(!req){
		alert(reqO.responseText);
		if(target){
			document.getElementById(target).innerHTML = "Es konnten keine Daten vom Server empfangen werden";
		} else {
			alert("Es konnten keine Daten vom Server empfangen werden");
		}
		
	} else {
		// - IE Explorer Abfrage
		if(!req.firstChild){
			alert(reqO.responseText);
			if(target){
				document.getElementById(target).innerHTML = "Es konnten keine Daten vom Server empfangen werden";
			} else {
				alert("Es konnten keine Daten vom Server empfangen werden");
			}
		} else {
			var jsCode = '';
			for(i=0; i<req.firstChild.childNodes.length; i++){
				switch(req.firstChild.childNodes[i].nodeName){
					case "fallback":
						if(waiter){
							waiter.innerHTML = waiterContent;
						}
					break;
					case "content":
						/*
						if(document.getElementById(req.firstChild.childNodes[i].getAttribute('target'))){
							document.getElementById(req.firstChild.childNodes[i].getAttribute('target')).innerHTML = req.firstChild.childNodes[i].childNodes[0].nodeValue;
						}
						*/
						var content = req.firstChild.childNodes[i].childNodes[0].nodeValue;
						// ScriptTags-filtern, und später mittels eval() ausführen
							var Suche = /<script.*>([^<]*)<\/script>/gi;
							while(Ergebnis = Suche.exec(content)){
								jsTag = Ergebnis[0];
								js = Ergebnis[1];
								index = Ergebnis['index'];
								input = Ergebnis['input'];
								
								jsCode += js;
								
								contentb = content.substr(0, index);
								contente = content.substr(index+jsTag.length);
								content = contentb+contente;
								// FF - Workaround (findet er einmal nix, findet der nie was)
								delete Suche;
								var Suche = /<script>([^<]*)<\/script>/gi;
							}
						
						// IE - Workaround
						var tmp_tag = document.createElement('div');
						var div_tag = document.getElementById(req.firstChild.childNodes[i].getAttribute('target'));
						div_tag.innerHTML = "";
						tmp_tag.innerHTML = content;
						div_tag.appendChild(tmp_tag);
					break;
					case "alert":
						alert(req.firstChild.childNodes[i].childNodes[0].nodeValue);
					break;
					case "script":
						eval(req.firstChild.childNodes[i].childNodes[0].nodeValue);
					break;
					default:
					break;
				}
			}
			if(jsCode){
				alert(jsCode);
				eval(jsCode);
			}
		}
	}
}
