/**
 * OSTLUFT - Fachbereich - QueryStorage
 *
 * Komponente zur Speicherung der Abfragen
 * 
 * Die Daten werden aus den anderen Fachbereichkomponenten bezogen und auf dem Server gespeichert.
 *
 * Status: Beta
 * Datum: 18.02.2008
 * Autor: Reto Zahner <reto.zahner@asgal.ch>
 */ 
YAHOO.namespace("ostluft.fachbereich");

YAHOO.ostluft.fachbereich.AbfrageRepository = function(kanalConfigurationApplication, messreiheApplication) {
	
	// Grundinformationen
	this.pluginPrefix = "tx_ostluft_pi6";
	
	// Fachbereichkomponenten
	this.kanalConfigurationApplication = kanalConfigurationApplication;
	this.messreiheApplication = messreiheApplication;
	
	// Wird ausgelöst, wenn die Daten korrekt auf dem Server gespeichert wurden.
	this.onAbfrageSavedEvent = new YAHOO.util.CustomEvent("onAbfrageSavedEvent", this);
	this.onAbfrageDeletedEvent = new YAHOO.util.CustomEvent("onAbfrageDeletedEvent", this);
	this.onAbfrageLoadedEvent = new YAHOO.util.CustomEvent("onAbfrageLoadedEvent", this);
	
}; // Ende des Konstruktors: AbfrageRepository()

YAHOO.ostluft.fachbereich.AbfrageRepository.prototype.saveQuery = function(abfrage) {
	
	var uriParamBuilder = new Array();
	
	// Kanalkonfiguration zusammenstellen
	var kanalNumber = 0;
	var kanalList = this.kanalConfigurationApplication.getKanalList();
	for(var i in kanalList)
	{
		if (!YAHOO.lang.isFunction(kanalList[i]))
		{
			uriParamBuilder.push(YAHOO.asgal.util.ObjectUtility.convertToUriParameter("k", kanalNumber++, kanalList[i]));
		}
	}
	
	// Diagrammkonfiguration zusammenstellen
	var diagrammNumber = 0;
	var diagrammList = this.messreiheApplication.getDiagrammList();
	for(var i in diagrammList)
	{
		if (!YAHOO.lang.isFunction(diagrammList[i]))
		{
			uriParamBuilder.push(YAHOO.asgal.util.ObjectUtility.convertToUriParameter("d", diagrammNumber++, diagrammList[i]));
		}
	}
	
	
	// Zeitinformationen anhängen
	var dateConfig = this.messreiheApplication.getDateConfiguration();
	uriParamBuilder.push(YAHOO.asgal.util.ObjectUtility.convertToUriParameter("t", 0, dateConfig));
	
	// Windgrafik in Parameter-Liste aufnehmen
	abfrage.windgrafik = YAHOO.util.Dom.get("windgrafik").checked ? '1' : '0';

	// Abfrage dem Formular anhängen
	uriParamBuilder.push(YAHOO.asgal.util.ObjectUtility.convertToUriParameter("a", 0, abfrage));

	// Daten auf dem Server speichern
	this._saveAbfrage(uriParamBuilder.join("&"));
	
}; // Ende der Methode: saveQuery()

/**
 * @private
 */
YAHOO.ostluft.fachbereich.AbfrageRepository.prototype._saveAbfrage = function(dataString) {
	
	// Request-URL erzeugen
//	var locationArray = self.location.href.split("?");
//	var pageIDMatch = locationArray[1].match(/id=([0-9a-z]+)&?/);
//	var requestURL = locationArray[0];
	var locationArray = self.location.href.split("/");
	var baseURL = locationArray[0] + "/" + locationArray[1] + "/" + locationArray[2] + "/";
	var pathName = locationArray[locationArray.length-1].split(".");
	var ID = pathName[0];
	var requestURL = baseURL;
	
	// Allgemeine Parameter anhängen
//	requestURL+= "?id=" + pageIDMatch[1];
	requestURL+= "?id=" + ID;
	requestURL+= "&" + [this.pluginPrefix + "_method", "saveAbfrage"].join("=");
	
	YAHOO.util.Connect.asyncRequest("POST", requestURL, {
		success: function(o) {
		
			var result = YAHOO.asgal.util.FormUtility.decodeResponse(o.responseText);
			if (result.status == "OK")
			{
				this.onAbfrageSavedEvent.fire(this, result.object);
			}
			else
			{
				alert(result.exception.message);
			}
		
		}, 
		failure: function(o) {
			alert(o.status + ": " + o.statusText);
		},
		scope: this
	}, dataString);
	
};  // Ende der Methode: _saveAbfrage()


YAHOO.ostluft.fachbereich.AbfrageRepository.prototype.deleteAbfrage = function(abfrage) {
	
	// Request-URL erzeugen
//	var locationArray = self.location.href.split("?");
//	var pageIDMatch = locationArray[1].match(/id=([0-9a-z]+)&?/);
//	var requestURL = locationArray[0];
	
	// Allgemeine Parameter anhängen
	var locationArray = self.location.href.split("/");
	var baseURL = locationArray[0] + "/" + locationArray[1] + "/" + locationArray[2] + "/";
	var pathName = locationArray[locationArray.length-1].split(".");
	var ID = pathName[0];
	var requestURL = baseURL;
	
//	requestURL+= "?id=" + pageIDMatch[1];
	requestURL+= "?id=" + ID;
	requestURL+= "&" + [this.pluginPrefix + "_method", "deleteAbfrage"].join("=");
	
	YAHOO.util.Connect.asyncRequest("POST", requestURL, {
		success: function(o) {
		
			var result = YAHOO.asgal.util.FormUtility.decodeResponse(o.responseText);
			if (YAHOO.lang.isUndefined(result))
			{
				alert("Der Server hat eine ungültige Antwort geliefert:\n" + o.resonseText);
			}
			else if (result.status == "OK")
			{
				this.onAbfrageDeletedEvent.fire(this, result.object);
			}
			else if (result.status == "ERROR")
			{
				if (!YAHOO.lang.isUndefined(result.exception.message))
				{
					alert("Es ist der folgende Fehler aufgetreten:\n" + result.exception.message);
				}
				else
				{
					alert("Es ist der folgende Fehler aufgetreten:\n" + result.exception);
				}
			}
		
		}, 
		failure: function(o) {
			alert(o.status + ": " + o.statusText);
		},
		scope: this
	}, YAHOO.asgal.util.ObjectUtility.convertToUriParameter("a", 0, abfrage));
	
}; // Ende der Methode: deleteAbfrage();

YAHOO.ostluft.fachbereich.AbfrageRepository.prototype.loadAbfrage = function(abfrage) {
	
	// Request-URL erzeugen
//	var locationArray = self.location.href.split("?");
//	var pageIDMatch = locationArray[1].match(/id=([0-9a-z]+)&?/);
//	var requestURL = locationArray[0];
	var locationArray = self.location.href.split("/");
	var baseURL = locationArray[0] + "/" + locationArray[1] + "/" + locationArray[2] + "/";
	var pathName = locationArray[locationArray.length-1].split(".");
	var ID = pathName[0];
	var requestURL = baseURL;
	
	// Allgemeine Parameter anhängen
//	requestURL+= "?id=" + pageIDMatch[1];
	requestURL+= "?id=" + ID;
	requestURL+= "&" + [this.pluginPrefix + "_method", "loadAbfrage"].join("=");
	
	YAHOO.util.Connect.asyncRequest("POST", requestURL, {
		success: function(o) {
		
			var result = YAHOO.asgal.util.FormUtility.decodeResponse(o.responseText);
			if (YAHOO.lang.isUndefined(result))
			{
				alert("Der Server hat eine ungültige Antwort geliefert:\n" + o.resonseText);
			}
			else if (result.status == "OK")
			{
				this.onAbfrageLoadedEvent.fire(this, result.object);
			}
			else if (result.status == "ERROR")
			{
				if (!YAHOO.lang.isUndefined(result.exception.message))
				{
					alert("Es ist der folgende Fehler aufgetreten:\n" + result.exception.message);
				}
				else
				{
					alert("Es ist der folgende Fehler aufgetreten:\n" + result.exception);
				}
			}
		
		}, 
		failure: function(o) {
			alert(o.status + ": " + o.statusText);
		},
		scope: this
	}, YAHOO.asgal.util.ObjectUtility.convertToUriParameter("a", 0, abfrage));
	
}; // Ende der Methode: loadAbfrage

// Als YAHOO-Modul registrieren
YAHOO.register("AbfrageRepository", YAHOO.ostluft.fachbereich.AbfrageRepository, {version: "1.0.0", build: "$Revision: 1.1 $"});
