/**
 *
 * @author Stefan Becker
 * @author frenzel
 *
 */

var oWebservice = {
	  sUri: null
	, sUser: null

	/**
	 * @param sUri
	 */
	, init: function __init(sUri) {
		oWebservice.sUri = sUri;
	}

	/**
	 * @param sMethod
	 * @param sPortal
	 * @param oQueryParameters
	 * @param fCallback
	 * @param fError
	 */
	, call: function __call(sMethod, sPortal, oQueryParameters, fCallback, fError) {
		var sUri = oWebservice.sUri;

		oQueryParameters['PORTAL'] = sPortal;

		switch (sMethod.toLowerCase()) {
			case 'get':
				return $.get(sUri, oQueryParameters, fCallback, 'json');
				break;

			case 'post':
				return $.post(sUri, oQueryParameters, fCallback, 'json');
				break;

			case 'ajax':
				return $.ajax({
					url:		sUri
					, data:		oQueryParameters
					, success:	fCallback
					, error:	fError
					, dataType:	'json'
					, type:		'post'
				});
				break;

			default:
				alert('unimplemented method ' + sMethod);
				break;
		}

		return false;
	}

	/**
	 * @param sUser
	 * @param sPassword
	 * @param sPortal
	 * @param fCallback
	 */
	, login: function __login(sUser, sPassword, sPortal, fCallback) {
		var fProxyCallback = function __proxyCallback(result) {
			if (false === result['bError']) {
				oWebservice.sUser = sUser;
			}

			if ('function' === typeof fCallback) {
				fCallback(result);
			}
		};

		return oWebservice.call
			('GET',
			 sPortal,
			 {  'method': 'login'
			  , 'user': sUser
			  , 'password': sPassword },
			 fProxyCallback);
	}

	/**
	 * @param fCallback
	 * @param sPortal
	 */
	, isloggedin: function __isloggedin(sPortal, fCallback) {
		return oWebservice.call('GET', sPortal, { 'method': 'isloggedin' }, fCallback);
	}

	/**
	 * @param fCallback
	 * @param sEmail
	 */
	, validateEmail: function __validateEmail(sEmail, sPortal, fCallback) {
		return oWebservice.call('GET', sPortal, { 'method': 'validateEmail', 'EMAIL': sEmail }, fCallback);
	}

	/**
	 * @param sDatensatzKennung
	 * @param sPortal
	 * @param fCallback
	 */
	, leseAdressDatensatz: function __leseAdressDatensatz(sDatensatzKennung, sPortal, fCallback) {
		return oWebservice.call('GET', sPortal, { 'method': 'leseAdressDatensatz', 'datensatz_kennung': sDatensatzKennung }, fCallback);
	}

	/**
	 * @param sDatensatzKennung
	 * @param sPortal
	 * @param oData
	 * @param fCallback
	 */
	, schreibeAdressDatensatz: function __schreibeAdressDatensatz(sDatensatzKennung, sPortal, oData, fCallback) {
		var oQueryParameters = {
			  'method': 'schreibeAdressDatensatz'
			, 'datensatz_kennung': sDatensatzKennung
		};

		for (var name in oData) {
			if ('undefined' === typeof oQueryParameters[name]) {
				oQueryParameters[name] = oData[name];
			}
		}

		return oWebservice.call('GET', sPortal, oQueryParameters, fCallback);
	}

	/**
	 * @param sDatensatzKennung
	 * @param sPortal
	 * @param oData
	 * @param fCallback
	 */
	, neuanlageSpendenzusage: function __neuanlageSpendenzusage(sDatensatzKennung, sPortal, oData, fCallback, fError) {
		var oQueryParameters = {
			  'method': 'neuanlageSpendenzusage'
			, 'datensatz_kennung': sDatensatzKennung
		};

		for (var name in oData) {
			if ('undefined' === typeof oQueryParameters[name]) {
				oQueryParameters[name] = oData[name];
			}
		}

		return oWebservice.call('ajax', sPortal, oQueryParameters, fCallback, fError);
	}

	/**
	 * @param sPortal
	 * @param fCallback
	 */
	, getDonationSuccess: function __getDonationSuccess(sPortal, fCallback) {
		var oQueryParameters = { 'method': 'getDonationSuccess' };

		return oWebservice.call('POST', sPortal, oQueryParameters, fCallback);
	}

	/**
	 * @param sBlz
	 * @param sPortal
	 * @param fCallback
	 */
	, blzToBank: function __blzToBank(sBlz, sPortal, fCallback) {
		var oQueryParameters = {
			  'method': 'blzToBank'
			, 'blz': sBlz
		};

		return oWebservice.call('GET', sPortal, oQueryParameters, fCallback);
	}

	, schreibeSpendenzusage: function __schreibeSpendenzusage() {
		// TODO
	}

	, leseSpendenzusage: function __leseSpendenzusage() {
		// TODO
	}

	, neuanlageAuftrag: function __neuanlageAuftrag() {
		// TODO
	}

	, leseBankdaten: function __leseBankdaten() {
		// TODO
	}

	, schreibeBankdaten: function __schreibeBankdaten() {
		// TODO
	}

	, newsletterAbonnieren: function __newletterAbonnieren() {
		// TODO
	}

	, newsletterBestätigen: function __newsletterBestätigen() {
		// TODO
	}

	, newsletterAbmelden: function __newletterAbmelden() {
		// TODO
	}
}

$(document).ready(function __documentReady() {
	var sUri = '/?eID=json&action=evewa2Request';

	oWebservice.init(sUri);
})

