// Meldet benutzer mit seine eingegeben Anmeldedaten am System an,
// und aktualisiert im Erfolgsfall die Anmeldeinformation im UI
// andernfalss erfolgt eine Fehlermeldung
function doLogin(selname, topname, profam)
{
	var errmsg = 'Fehler:\n';

	if ($('#loginform').length > 0)
	{
		var loginid = $('#id').val();
		var passwd = $('#pw').val();

		if (loginid.length != 0 && passwd.length != 0)
		{
			var user = loginUser(loginid, passwd);

			if (user.isValidated)
			{
				$('#loginstatus').html((user.firstName.length != 0) ? (user.firstName + '<br>' + user.lastName) : user.lastName);
				$('#id').val('');
				$('#pw').val('');

				$('#login_panel').hide();
				$('#logout_panel').show();

				if (topname.length > 0)
				{
					if (topname == 'products' && profam.length > 0)
					{
						updateProductsDisplay(selname, profam, '#92959C');
					}
					else if (topname == 'shop')
					{
						location.reload(true);
					}
				}

				getBasketInfo();
			}
			else
			{
				alert('Unbekannter Benutzer oder Passwort');
			}
		}
		else
		{
			if (loginid.length == 0)
			{
				errmsg += 'Login-ID darf nicht leer sein\n';
			}

			if (passwd.length == 0)
			{
				errmsg += 'Login-PW darf nicht leer sein\n';
			}

			alert(errmsg);
		}
	}

	return false;
}

// Meldet Benutzer am System ab und zerstört seinen Anwendersitzung auf dem Server
function doLogout(selname, topname, profam)
{
	if ($('#loginform').length > 0)
	{
		logoutUser();

		// reset login panel
		$('#loginstatus').html('');
		$('#id').val('');
		$('#pw').val('');

		$('#login_panel').show();
		$('#logout_panel').hide();

		if (topname.length > 0)
		{
			if (topname == 'products' && profam.length > 0)
			{
				updateProductsDisplay(selname, profam, '#92959C');
			}
			else if (topname == 'shop')
			{
				location.reload(true);
			}
		}

		getBasketInfo();
	}

	return false;
}

// AJAX Wrapper Funktionen
// Versucht, einen Benutzer mit der angegebene LoginID und dem angegebene Passwort
// anzumelden. Es wird ein Benutzerobjekt zurückgegeben, welches den Anmeldestatus
// und im Erfolgsfall Basisdaten des Benutzers enhält
function loginUser(loginid, passwd)
{
	var userObj = new Object();
	userObj.isValidated = false;

	// encode data
	var encodedData = $.toJSON([loginid, passwd]);

	$.ajax
	(
		/*
			Festlegung:
			- Hinter der server script datei wird mit '/' getrennt
			der Funktionsname angegeben
			- Daten / Payload wird JSON encodiert
			- AJAX callbacks werden ausschliesslich per HTTP POST
			angesprochen (Sicherheit XSS)
			- AJAX callbacks müssen für den POST request immer für die
			Daten als Content-Type application/json setzen (Sicherheit)
			- Die Ausgabe des Scripts ist immer JSON encodiert und hat
			Content-Type application/json
		*/
		{
			url: 'all-ajax-login.php/loginUser',
			type: 'POST',
			contentType: 'application/json',
			async: false,
			data: encodedData,
			dataType: 'json',
			success: function(data, textStatus, XMLHttpRequest)
			{
				if (typeof(data) == 'object' && data.hasOwnProperty('status') && data.hasOwnProperty('user'))
				{
					if (data.status == 'success')
					{
						userObj = data.user;
					}
					else if (data.status == 'error')
					{
						if (ajaxDebugLevel > 0)
						{
							if (data.hasOwnProperty('errmsg') && data.hasOwnProperty('errctx'))
							{
								alert('loginUser - \'' + data.errmsg + '\'\n' + data.errctx);
							}
							else
							{
								alert('loginUser - AJAX Anforderung fehlgeschlagen');
							}
						}
					}
				}
			}
		}
	);

	return userObj;
}

// AJAX Wrapper Funktionen
// Meldet einen angemeldeten Benutzer ab und zerstört seine Anwendersitzung auf dem server
function logoutUser()
{
	// encode data
	var encodedData = $.toJSON([]);

	$.ajax
	(
		/*
			Festlegung:
			- Hinter der server script datei wird mit '/' getrennt
			der Funktionsname angegeben
			- Daten / Payload wird JSON encodiert
			- AJAX callbacks werden ausschliesslich per HTTP POST
			angesprochen (Sicherheit XSS)
			- AJAX callbacks müssen für den POST request immer für die
			Daten als Content-Type application/json setzen (Sicherheit)
			- Die Ausgabe des Scripts ist immer JSON encodiert und hat
			Content-Type application/json
		*/
		{
			url: 'all-ajax-login.php/logoutUser',
			type: 'POST',
			contentType: 'application/json',
			async: false,
			data: encodedData,
			dataType: 'json',
			success: function(data, textStatus, XMLHttpRequest)
			{
				if (typeof(data) == 'object' && data.hasOwnProperty('status'))
				{
					if (data.status == 'error')
					{
						if (ajaxDebugLevel > 0)
						{
							if (data.hasOwnProperty('errmsg') && data.hasOwnProperty('errctx'))
							{
								alert('logoutUser - \'' + data.errmsg + '\'\n' + data.errctx);
							}
							else
							{
								alert('logoutUser - AJAX Anforderung fehlgeschlagen');
							}
						}
					}
				}
			}
		}
	);
}

function updateProductsDisplay(pagename, profam, btnbg)
{
	// encode data
	var encodedData = $.toJSON([pagename, profam]);

	$.ajax
	(
		/*
			Festlegung:
			- Hinter der server script datei wird mit '/' getrennt
			der Funktionsname angegeben
			- Daten / Payload wird JSON encodiert
			- AJAX callbacks werden ausschliesslich per HTTP POST
			angesprochen (Sicherheit XSS)
			- AJAX callbacks müssen für den POST request immer für die
			Daten als Content-Type application/json setzen (Sicherheit)
			- Die Ausgabe des Scripts ist immer JSON encodiert und hat
			Content-Type application/json
		*/
		{
			url: 'all-ajax-products.php/getProducts',
			type: 'POST',
			contentType: 'application/json',
			data: encodedData,
			dataType: 'json',
			success: function(data, textStatus, XMLHttpRequest)
			{
				if (typeof(data) == 'object' && data.hasOwnProperty('status') && data.hasOwnProperty('products'))
				{
					if (data.status == 'success')
					{
						for (var i = 0; i < data.products.length; i++)
						{
							if (data.products[i].isPriceVisible)
							{
								$('#price' + data.products[i].productId).html(data.products[i].displayPrice);
								$('#tax' + data.products[i].productId).html(data.products[i].displayTaxRate);

								if (data.products[i].isOnlineSales)
								{
									$('#btn' + data.products[i].productId).show();
									$('#btnbg' + data.products[i].productId).attr('bgcolor', btnbg);

									if (onlinesalesProducts[data.products[i].productId] != null)
									{
										onlinesalesProducts[data.products[i].productId]['price'] = data.products[i].price;
										onlinesalesProducts[data.products[i].productId]['taxRate'] = data.products[i].taxtrate;
									}
								}
							}
							else
							{
								$('#price' + data.products[i].productId).html('');
								$('#tax' + data.products[i].productId).html('');

								if (data.products[i].isOnlineSales)
								{
									$('#btn' + data.products[i].productId).hide();
									$('#btnbg' + data.products[i].productId).removeAttr('bgcolor');

									if (onlinesalesProducts[data.products[i].productId] != null)
									{
										onlinesalesProducts[data.products[i].productId]['price'] = data.products[i].price;
										onlinesalesProducts[data.products[i].productId]['taxRate'] = data.products[i].taxtrate;
									}
								}
							}
						}
					}
					else if (data.status == 'error')
					{
						if (ajaxDebugLevel > 0)
						{
							if (data.hasOwnProperty('errmsg') && data.hasOwnProperty('errctx'))
							{
								alert('updateProductsDisplay - \'' + data.errmsg + '\'\n' + data.errctx);
							}
							else
							{
								alert('updateProductsDisplay - AJAX Anforderung fehlgeschlagen');
							}
						}
					}
				}
			}
		}
	);
}

function getBasketInfo()
{
	// encode data
	var encodedData = $.toJSON([]);

	$.ajax
	(
		/*
			Festlegung:
			- Hinter der server script datei wird mit '/' getrennt
			der Funktionsname angegeben
			- Daten / Payload wird JSON encodiert
			- AJAX callbacks werden ausschliesslich per HTTP POST
			angesprochen (Sicherheit XSS)
			- AJAX callbacks müssen für den POST request immer für die
			Daten als Content-Type application/json setzen (Sicherheit)
			- Die Ausgabe des Scripts ist immer JSON encodiert und hat
			Content-Type application/json
		*/
		{
			url: 'all-ajax-basket.php/getBasketInfo',
			type: 'POST',
			contentType: 'application/json',
			data: encodedData,
			dataType: 'json',
			success: function(data, textStatus, XMLHttpRequest)
			{
				if (typeof(data) == 'object' && data.hasOwnProperty('status') && data.hasOwnProperty('basket'))
				{
					if (data.status == 'success')
					{
						$('#basket_articlecount').html(data.basket.quantity);
						$('#basket_totalgross').html(data.basket.total_gross);
					}
					else if (data.status == 'error')
					{
						if (ajaxDebugLevel > 0)
						{
							if (data.hasOwnProperty('errmsg') && data.hasOwnProperty('errctx'))
							{
								alert('getBasketInfo - \'' + data.errmsg + '\'\n' + data.errctx);
							}
							else
							{
								alert('getBasketInfo - AJAX Anforderung fehlgeschlagen');
							}
						}
					}
				}
			}
		}
	);
}