/* AJAX Object 
 * 
 * */
function ajax(){
    var xmlHttp = null;
    
    try {
    // Mozilla, Opera, Safari sowie Internet Explorer (ab v7)
    xmlHttp = new XMLHttpRequest();
    } catch(e) {
        try {
            // MS Internet Explorer (ab v6)
            xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e) {
            try {
                // MS Internet Explorer (ab v5)
                xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
            } catch(e) {
                alert("AJAX geht nicht.");
                xmlHttp  = null;
            }
        }
    }
    return xmlHttp;
}
function ajaxDo(page,query,handler,parameters){
    ajaxRequest("ajax.php?__do="+page,query,handler,parameters);
}
function ajaxRequest(page,query,handler,parameters){
    if (debug = document.getElementById("jsDebug")) debug.value += "\nURL: " + page + ", QS: " + query + "\n";
    
    thread = new ajax();
    // parameters die in der handler-Funktion verf�gbar sein sollen
    thread.parameters = parameters;
    thread.open('post',page,true);
    thread.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    if (handler == undefined){
        thread.onreadystatechange = defaultHandleAction;
    } else {
        thread.onreadystatechange = handler;
    }
    return thread.send(query);
}

function defaultHandleAction(){
    if (this.readyState == 4){

        if (debug = document.getElementById("jsDebug")){
            debug.value += "\nResponse: " + this.responseText;
        } else {
            debug = {value:""};
        }

        // Response als JSON auswerten
        
        
        if (this.responseText!=""){ 

            var response = eval('('+this.responseText+')');	
            
            var results  = response["results"];
            var messages = response["messages"];
            
            for (key in results){
                debug.value += "\n"+key+" = " + response[key];
                if (element = document.getElementById(key)){
                    for (prop in response[key]){
                        debug.value += "\n"+key+"."+prop+" = " + response[key];
                        setProperties(element,prop,response[key][prop]);
                    }
                }
            }
            
            if (results["_onsuccess"] && !results["_error"]){
                eval (results["_onsuccess"]);
            } else if (results["_onerror"] && results["_error"]){
                eval (results["_onerror"]);
            }
            
            showMessages(messages);
        }
    }
    delete(this);
}

function setProperties(element,name,properties){
	if (element[name] != null){
		if (name == "options"){
			while (element.options.length>0){
				element.options[0] = null;
			}
			for (i in properties){
				opt = new Option(properties[i]["text"],properties[i]["value"],false,false);
				element.options[i] = opt;
			}
		}
		else if (typeof(properties) == "object"){
			for (p in properties){
				setProperties(element[name],p,properties[p]);
			}
		}
		else {
			if (element) element[name] = properties;				
		}
	}
}



