
/**
 * sosAjax Klasse
 * author henbug
 * @version 0.2
 */
var all_sos_ajax = new Array();

function sosAjax(settings)
{
	this.http_request = false;
	
	if(settings && settings.request_url)
	{
		this.request_url = settings.request_url;
	} else
	{
		this.request_url = 'ajax_request.php';
	}
	
	this.settings = settings;
	this.name = settings.name;
	this.type = '[Object sosAjax]';
	
	all_sos_ajax[this.name] = this;
}

/**
 * Request verarbeiten
 */
sosAjax.prototype.request = function(phpFunction, jsFunction, params)
{
	this.http_request = false;
	var async = false;
	if(jsFunction) // Asyncron
	{
		async = true;
		this.settings.jsFunction = jsFunction;
	}
	
    if (window.XMLHttpRequest) 
    { // Mozilla, Safari,...
        this.http_request = new XMLHttpRequest();
        if (this.http_request.overrideMimeType) 
        {
            this.http_request.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) 
    { // IE
        try 
        {
            this.http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) 
        {
            try 
            {
                this.http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }

    if (!this.http_request) 
    {
        alert('XMLHTTP-Instanz konnt nicht erzeugt');
        return false;
    }

    if(async == true)
    {
	    var self = this; 
	    this.http_request.onreadystatechange = function()
	    {
	    	self.result();
	    }
    }
    
    var request_string = this.settings.host +  this.request_url + "?sosrf=" + phpFunction;

    if(params)
    {
    	for(k in params)
    	{
    		request_string = request_string + "&" + k +"=" + params[k];
    	}
    }

    if(async == false) // syncron
    {
	    var r = this.http_request.open('GET', request_string, false);
	    this.http_request.send(null);
    
	    return this.http_request.responseText;
    } else // asyncron
    {
    	var r = this.http_request.open('GET', request_string, true);
	    this.http_request.send(null);
    }
}

/**
 * Resulat vom Request
 */
sosAjax.prototype.result = function()
{
	if (this.http_request.readyState == 4)
	{
		if (this.http_request.status == 200)
		{
			try
			{
				eval(this.settings.jsFunction + "('" + this.http_request.responseText + "')");
			} catch(e)
			{
				alert(e + "\n\n" + this.settings.jsFunction + "('" + this.http_request.responseText + "')" + "\n\n" + this.http_request.responseText);
			}
		} else 
		{
			alert('Bei dem Request ist ein Problem aufgetreten.');
		}
    }
}