/**
 * WebserviceAgent
 * Initialisiert eine AJAX-Anfrage
 * @param webserviceFunction serverseitige Funktion, die ausgeführt werden soll
 * @param callSuccess clientseitige Funktion, die bei Erfolg aufgerufen wird
 * @param callFailed clientseitige Funktion, die bei einem Fehler aufgerufen wird
 * @param jsonObject (optional) Objekt, das in JSON umformatiert werden soll
 * @param targetControl (optional) ID des HTML-Controls, in dem der Response geschrieben wird
 * @return void
 */
function WebserviceAgent(webserviceFunction, callSuccess, callFailed, jsonObject, targetControl)
{
	var json = "&json=";
	var control = "";
	var functionSuccess = "CallSuccess";
	var functionFailed = "CallFailed";
	
	switch(WebserviceAgent.arguments.length)
	{
		case 5:
			/*
			 * Alle Parameter sind gegeben
			 */
			 
			//Ziel-Control verarbeiten, optional!
			if (typeof(WebserviceAgent.arguments[WebserviceAgent.arguments.length-1]) == "string" && WebserviceAgent.arguments[WebserviceAgent.arguments.length-1] != "") 
			{
				control = WebserviceAgent.arguments[WebserviceAgent.arguments.length-1];
			}
			 
			//Json-Objekt verarbeiten, optional!
			if (typeof(WebserviceAgent.arguments[WebserviceAgent.arguments.length-2]) == "object") 
			{
				json = json + BuildJsonCore(WebserviceAgent.arguments[WebserviceAgent.arguments.length-2]);
			}
		break;
		
		case 4:
			/*
			 * Entweder jsonObject oder targetControl fehlen
			 */
			 
			//Ziel-Control verarbeiten, optional!
			if (typeof(WebserviceAgent.arguments[WebserviceAgent.arguments.length-1]) == "string" && WebserviceAgent.arguments[WebserviceAgent.arguments.length-1] != "") 
			{
				control = WebserviceAgent.arguments[WebserviceAgent.arguments.length-1];
			}
			 
			//Json-Objekt verarbeiten, optional!
			if (typeof(WebserviceAgent.arguments[WebserviceAgent.arguments.length-1]) == "object") 
			{
				json = json + BuildJsonCore(WebserviceAgent.arguments[WebserviceAgent.arguments.length-1]);
			}
		break;
	}

	//CallSuccess verarbeiten
	if (typeof(WebserviceAgent.arguments[1]) == "function") 
	{
		var Ausdruck = /function (.*?)\(/;
		Ausdruck.exec(WebserviceAgent.arguments[1]);
		functionSuccess = RegExp.$1
	}
	
	//CallFailed verarbeiten
	if (typeof(WebserviceAgent.arguments[2]) == "function") 
	{
		var Ausdruck = /function (.*?)\(/;
		Ausdruck.exec(WebserviceAgent.arguments[2]);
		functionFailed = RegExp.$1
	}

	var success = functionSuccess + "(data, control)";
	var failed = functionFailed + "()";

	//AJAX-Anfrage absenden
	$.ajax({
		type: "POST",
		data: "function=" + WebserviceAgent.arguments[0] + json + "&ctrl=" + control,
		success: function(data) { 
			eval(success);
		},
		error: function() { 
			eval(failed); 
		}
	});
}



/**
 * Erstellt ein JSON-Objekt
 * @param jsonObj JSON-Objekt
 * @return formatiertes JSON-Objekt
 */
function BuildJsonCore(jsonObj)
{
	return JSON.stringify(jsonObj);
}



/**
 * CallSuccess
 * Standardfunktion, die bei Erfolg aufgerufen wird
 * @param data AJAX-Response
 * @param destCtrl ID des HTML-Controls, in dem der Response geschrieben wird
 * @return void
 */
function CallSuccess(data, destCtrl)
{
	try
	{
		document.getElementById(destCtrl).innerHTML = evalScript(data);
	} catch(ex) {}
}

function evalScript(scripts) {
    try {
        if (scripts != '') {
            var script = "";
            scripts = scripts.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function () {
                if (scripts !== null) script += arguments[1] + '\n';
                return '';
            });
            if (script) (window.execScript) ? window.setTimeout(script, 0) : window.setTimeout(script, 0);
        }
        return scripts;
    }
    catch (e) { }
}



/**
 * CallFailed
 * Standardfunktion, die bei einem Fehler aufgerufen wird
 * @return void
 */
function CallFailed()
{
	alert('AJAX-Fehler!');
}
