var ajax;
var requestFunctionName;

function ajaxIni(){
	ajax = false;
    // branch for native XMLHttprequest object
    if(window.XMLHttpRequest) {
    	try {
			ajax = new XMLHttpRequest();
        } catch(e) {
			ajax = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	ajax = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		ajax = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		ajax = false;
        	}
		}
    }
    return ajax;
}

function ajaxRequestUrl(url,parameters,requestFunction) {
	var GET = true;
	ajax = ajaxIni();
	if(ajax) {
		
		requestFunctionName = requestFunction;
		ajax.onreadystatechange = processChange;
		
		if (parameters!='') url = url + '?' + parameters;
		
		if (GET){
			ajax.open("GET", url, true);
			ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			//ajax.setRequestHeader('Content-Type', 'text/html; charset=ISO-8859-1');
			ajax.setRequestHeader("Content-length", 0);
			ajax.setRequestHeader("Connection", "close");
	    	ajax.send(null);
		}else{
			ajax.open('POST', url);
    		ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
    		ajax.setRequestHeader("Content-length", parameters.length);
			ajax.setRequestHeader("Connection", "close");
			ajax.send(parameters);
			
		}
	}
}

function ajaxRequestForm(formname,requestFunction,addParameters) {
	//var GET = false;
	var url;
	var parameters = '';
	ajax = ajaxIni();
    if(ajax) {
    	url = document.forms[formname].action;
    	method = document.forms[formname].method;
    	if (addParameters != undefined) parameters = addParameters;
    	for(var i=0;i<document.forms[formname].length;i++){
    		elem = document.forms[formname].elements[i];
    		name = elem.name;
    		
    		if (elem.type == "radio"){
    			if (elem.checked != true){
    				continue
    			}else{
    				value = elem.value;
    			}
    		}else{
    			value = elem.value;
    		}						
			
    		name = escape(name);
    		value = escape(value);
    		
    		//if (method!="get"){
    			//name = encodeURIComponent(name);
    			//value= encodeURIComponent(value);
    		//}
    		if (parameters==''){
    			parameters = name + '=' + value;
    		}else{
    			parameters = parameters + '&' + name + '=' + value;
    		}
    	}
    	
    	requestFunctionName = requestFunction; 
    	ajax.onreadystatechange = processChange;
    	if (method=="get"){
	    	if (parameters!='') url = url + '?' + parameters;
	    	ajax.open("GET", url, true);
			ajax.send("");
    	}else{
    		ajax.open('POST', url);
    		ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    		ajax.setRequestHeader("Content-length", parameters.length);
			ajax.setRequestHeader("Connection", "close");
			ajax.send(parameters);
    	}
	} 
}

function processChange() {
    // only if ajax shows "loaded"
    if (ajax.readyState == 4) {
    	// only if "OK"
        if (ajax.status == 200) {
        	//alert(ajax.getAllResponseHeaders())
            //alert(ajax.responseText);
            //alert(ajax.responseXML)
            if (requestFunctionName!=''){
	            var t = ajax.responseText;
	            t = encodeURI(t);
	            evalstring = requestFunctionName + "(\"" + t + "\")";
	            eval(evalstring);
            }
        } else {
            alert("There was a problem retrieving the XML data:\n" + ajax.statusText);
        }
    }
}
 
function fade_out(){
	var area_obj = document.getElementsByTagName("body")[0];
	var opacity = 30;
	//area_obj.style.backgroundColor = 'white';
	area_obj.style.opacity = (opacity / 100); 
    area_obj.style.MozOpacity = (opacity / 100); 
    area_obj.style.KhtmlOpacity = (opacity / 100); 
    area_obj.style.filter = "alpha(opacity=" + opacity + ")"; 
}

function fade_in(){
    var area_obj = document.getElementsByTagName("body")[0];
	var opacity = 100;
	//area_obj.style.backgroundColor = 'white';
	area_obj.style.opacity = (opacity / 100); 
    area_obj.style.MozOpacity = (opacity / 100); 
    area_obj.style.KhtmlOpacity = (opacity / 100); 
    area_obj.style.filter = "alpha(opacity=" + opacity + ")"; 
}

/*
*	Folgende zwei Funktionen sollen nur Content eines Modules zurückgeben bzw. dann eine gewisse Objekt-ID inhaltlich austauschen
*/
var RepID;
function ajaxGetContent(Area,Request,ReplaceID){	
	RepID = ReplaceID;
	if (document.forms[Request]){ 
		//document.forms[Request].action="mc.php";
		ajaxRequestForm(Request,"ReplaceContent","AreacontentOf=" + encodeURIComponent(Area));
	}else{
		var param = Request;
		if (param==''){
			param = "AreacontentOf=" + Area;
		}else{
			param = param + "&AreacontentOf=" + Area;
		}
		ajaxRequestUrl("index.php",param,"ajaxSetContent");
	}
}
function ajaxSetContent(Content) {
	if (Content.substring(0,6)=='ALERT:'){
		alert(decodeURI(Content.substring(6)));
	}else{
		var rep = document.getElementById(RepID);
		rep.innerHTML = unescape(decodeURI(Content));
	}
}


function ajaxRequestContent(Area,Request){
	
	CurrentArea = Area;
	fade_out();
	if (document.forms[Request]){ 
		//document.forms[Request].action="mc.php";
		ajaxRequestForm(Request,"ReplaceContent","AreacontentOf=" + encodeURIComponent(Area));
	}else{
		var param = Request;
		if (param==''){
			param = "AreacontentOf=" + Area;
		}else{
			param = param + "&AreacontentOf=" + Area;
		}
		ajaxRequestUrl("index.php",param,"ReplaceContent");
	}
}

var CurrentArea;
function ReplaceContent(Content) {
    var area = document.getElementById('AREA_' + CurrentArea);
    area.innerHTML = unescape(decodeURI(Content));
    fade_in();
}
 
function encode_utf8(rohtext) {
	// dient der Normalisierung des Zeilenumbruchs
	rohtext = rohtext.replace(/\r\n/g,"\n");
	var utftext = "";
	for(var n=0; n<rohtext.length; n++){
		// ermitteln des Unicodes des  aktuellen Zeichens
		var c=rohtext.charCodeAt(n);
		// alle Zeichen von 0-127 => 1byte
		if (c<128){
			utftext += String.fromCharCode(c);
		}else if((c>127) && (c<2048)) {
			// alle Zeichen von 127 bis 2047 => 2byte
			utftext += String.fromCharCode((c>>6)|192);
			utftext += String.fromCharCode((c&63)|128);
		}else {
			// alle Zeichen von 2048 bis 66536 => 3byte
			utftext += String.fromCharCode((c>>12)|224);
			utftext += String.fromCharCode(((c>>6)&63)|128);
			utftext += String.fromCharCode((c&63)|128);
		}
	}
	return utftext;
}

function decode_utf8(utftext) {
	var plaintext = ""; var i=0; var c=c1=c2=0;
	// while-Schleife, weil einige Zeichen uebersprungen werden
	while(i<utftext.length){
		c = utftext.charCodeAt(i);
		if (c<128) {
			plaintext += String.fromCharCode(c);
			i++;
		}else if((c>191) && (c<224)) {
			c2 = utftext.charCodeAt(i+1);
			plaintext += String.fromCharCode(((c&31)<<6) | (c2&63));
			i+=2;
		}else{
			c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2);
			plaintext += String.fromCharCode(((c&15)<<12) | ((c2&63)<<6) | (c3&63));
			i+=3;
		}
	}
	return plaintext;
}



//ajaxRequest('_ajax_engine.php?txt=meinText');
