/*
 *	Content Allocator API
 *	Version 1.0
 *
 *	Vereinfacht das Abfragen der Daten aus den Reports
 */

jQuery(function($) {

CALL = function(baseurl) {
	// Konstruktor
	this.url = baseurl;
	this.version = '1.0';
	this.lastUsedUrl = '';
	
	// Eine Abfrage an den Service
	this.get = function(report, request, callback) {
		var _this = this;
		var thisUrl = this.url+'api/'+report+'/'+request;
		
		$.ajax({
			url: thisUrl,
			callback: 'CALL_callback',
			dataType: 'jsonp',
			success: function(response) {
				if(response.error) {
					_this.error('API Fehler', error);
				}
				else {
					if(typeof response.data == 'object') {
						if(typeof response.data.error == 'string') {
							//_this.error('Datenfehler', response.data.error);
							//return false;
						}
					}
					
					if(typeof callback != 'function') {
						_this.error('Logikfehler', 'Der Ÿbergebene Callback ist keine Funktion.');
					}
					else {
						callback(response);
					}
				}
			},
			error: function(error) {
				_this.error('Verbindungsfehler', error);
			},
			complete: function() {
				_this.lastUsedUrl = thisUrl;
			}
		});
	}
	
	//Alle Reports vom Call bekommen	
	this.getReports = function(callback) {
		this.get('info', '', callback);
	}
	
	//Alle Felder eines Reports bekommen
	//@param report Name des Reports
	this.getFields = function(report, callback) {
		this.get(report, 'keys', callback);
	}
	
	//Liefert den aktuellsten Wert eines Feldes zurŸck
	//@param report Name des Reports
	//@param field Name des Feldes
	this.getFieldValue = function(report, field, callback) {

		this.get(report, 'current/'+field, callback);
	}
	
	this.getFieldValuesByDate = function(report,date,callback){
		this.get(report, 'date/'+date, callback);
	}
	
	this.getPrevValuesByDate = function(report,date,callback){
		this.get(report, 'prev/'+date, callback);
	}

	this.getNextValuesByDate = function(report,date,callback){
		this.get(report, 'next/'+date, callback);
	}

	
	//Wenn ein Fehler aufgetreten ist
	this.error = function(title, details) {
		alert(title+"\n"+details);
		console.error(title);
		console.error(details);
		console.info('CALL Objekt', this);
	}	
}

});
