elib.EdithCollection = function ()
{
	/**
	 * Instanzname des Controllers im AJAX-Workspace, auf den bei remote-Verbindung zugegriffen wird.
	 */
	this.controllerInstance = "EDJC";

	/**
	 * Gibt an, ob die Daten remote per AJAX an den EdithDataJSController oder lokal über die SQLite-DB heruntergeladen werden.
	 */
	this.remote = true;

	/**
	 * Name der Tabelle aus der Daten bezogen werden sollen.
	 */
	this.table = "";

	/**
	 * SQL-Statement, aufgrund dessen die Daten der Objekte bezogen werden sollen.
	 */
	this.selector = "";

	/**
	 * Wenn angegeben, wird diese Funktion nach Laden der Daten aufgerufen. Wird keine Callback-Funktion
	 * angegeben, so wird der AJAX-Aufruf synchron ausgeführt (kann das Script anhalten/verlangsamen).
	 */
	this.callback = null;

	/**
	 * Geladene Daten in Form eines Arrays von EdithData-Objekten.
	 */
	this.result = [];

	

	if ( arguments.length >= 1 )
	{
		this.table = arguments[0];
	}
	
	if ( arguments.length >= 2 )
	{
		this.selector = arguments[1];
	}
	
	if ( arguments.length >= 3 )
	{
		this.callback = arguments[2];
	}
	
	if ( arguments.length >= 4 )
	{
		this.remote = arguments[3];
	}
	
		
	/**
	 *
	 */
	this.execute = function () 
	{
		if (this.remote)
		{
			var parameter = {
					task: this.controllerInstance,
					mode: 'collection',
					selector: this.selector,
					table: this.table
			};
		
			var url = elib.rootPath;
		
			$.ajax({
				ed_coll: this,
				async: (this.callback != null),
				type: "POST",
				url: url,
				dataType: "json",
				data: parameter,
				success: function(json)
				{
					this.ed_coll.remoteLoaded ( json );
				},
				error: function (XMLHttpRequest, textStatus, errorThrown) 
				{
					alert ("Error: \n" + XMLHttpRequest + "\n\n" + textStatus + "\n" + errorThrown + ": " + url);
				}
			 });
		}
	}
	
	/**
	 *
	 */
	this.remoteLoaded = function (json)
	{
		if ( json.errorMessage != null )
		{
			alert ("EdithCollection - Fehler beim ausfuehren des Statements: " + json.errorMessage);
			return;
		}
		
		this.result = new Array();
		
		for (elem in json)
		{
			var ed = new elib.EdithData (this.table);
			
			ed.data = json[elem];
			
			this.result.push (ed);
		}
		
		if (this.callback != null)
		{
			this.callback (this);
		}
	}
	
	/**
	 *
	 */
	this.getResult = function ()
	{
		return this.result;
	}
	


	if ( (this.table != "") && (this.selector != "") )
	{
		this.execute();
	}


};


