	////////////////////////////////////////////////////////////////////////////////////////////////////
	// Ajax Globals
	////////////////////////////////////////////////////////////////////////////////////////////////////
	var ajax = new Array();
	ajax['xmlRequest'] = false;
	ajax['targetArray'] = null;
	
	
	////////////////////////////////////////////////////////////////////////////////////////////////////
	// Ajax Main-functions
	////////////////////////////////////////////////////////////////////////////////////////////////////
	function ajaxGetXMLHttpRequest()
	{
		if(window.ActiveXObject)
		{
			try
				{ajax['xmlRequest'] = new ActiveXObject("Msxml2.XMLHTTP");}				// IE 6.x
			catch(e)
			{
				try
					{ajax['xmlRequest'] = new ActiveXObject("Microsoft.XMLHTTP");}		// IE 5.x
				catch(e)
					{ajax['xmlRequest'] = false;}
			}
		}
		else if(window.XMLHttpRequest)
		{
			try
				{ajax['xmlRequest'] = new XMLHttpRequest();}							// Mozilla, Opera, Safari
			catch(e)
				{ajax['xmlRequest'] = false;}
		}
		
		return ajax['xmlRequest'];
	}
	
	function ajaxLoadXMLDoc(url, callback, targetArray, postReq)
	{
		ajax['xmlRequest'] = ajaxGetXMLHttpRequest();
		if(!ajax['xmlRequest'])	return;
		
		if(targetArray)
			ajax['targetArray'] = targetArray;
		
		var async = false;
		if(callback)
		{
			ajax['xmlRequest'].onreadystatechange = callback;
			async = true;
		}
		
		postReq = (postReq) ? postReq : null;
		var reqMeth = (postReq) ? "POST" : "GET";
		
		ajax['xmlRequest'].open(reqMeth, url, async);
		
		if(postReq)
			ajax['xmlRequest'].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		
		ajax['xmlRequest'].send(postReq);
	}
	
	
	////////////////////////////////////////////////////////////////////////////////////////////////////
	// Ajax user-defined Callback-functions
	////////////////////////////////////////////////////////////////////////////////////////////////////
	
	function ajaxUpdateZIPList()
	{
		if(ajax['xmlRequest'].readyState == 4 && ajax['xmlRequest'].status == 200 && ajax['targetArray'])
		{
			var aResponseText = ajax['xmlRequest'].responseText.split("|||");
			
			if(ajax['targetArray']['herkunftSpan'])
				ajax['targetArray']['herkunftSpan'].innerHTML = aResponseText[0];
			
			if(ajax['targetArray']['plz'])
			{
				var oPlz = ajax['targetArray']['plz'];
				oPlz.maxLength = aResponseText[1];
				oPlz.size = 5;
				if((aResponseText[1] <= 5))
				{
					oPlz.value = oPlz.value.substring(0, aResponseText[1]);
					oPlz.size = aResponseText[1];
				}
			}
		}
	}
	
	function getCityList(plzName, herkunftName, landName)
	{
		plzName = (plzName) ? plzName : "plz";
		var oPlz = document.getElementsByName(plzName)[0];
		
		herkunftName = (herkunftName) ? herkunftName : "herkunft";
		var oHerkunft = document.getElementsByName(herkunftName)[0];
		var oHerkunftSpan = document.getElementById(herkunftName+"Span");
		
		landName = (landName) ? landName : "land";
		var oLand = document.getElementsByName(landName)[0];
		
		var targetArray = new Array();
		targetArray['herkunftSpan'] = oHerkunftSpan;
		targetArray['plz'] = oPlz;
		
		var url = config['domain'] + "/lib/ajax/part_zipsuggest.php";
		url += "?plz=" + oPlz.value;
		url += (oHerkunft) ? "&herkunft=" + oHerkunft.value : "";
		url += "&land=" + oLand[oLand.selectedIndex].value;
		ajaxLoadXMLDoc(url, ajaxUpdateZIPList, targetArray);
	}
	
	
	
	////////////////////////////////////////////////////////////////////////////////////////////////////
	// Ajax user-defined functions (NON-Callback and synchronous)
	////////////////////////////////////////////////////////////////////////////////////////////////////
	function ajaxLoginCorrect(oUser, oPassword)
	{
		var aResult = new Array();
		
		if(oUser && oPassword)
		{
			var url = config['domain'] + "/lib/ajax/login_correct.php";
			var postReq = "user=" + oUser.value;
			postReq += "&password=" + oPassword.value;
			ajaxLoadXMLDoc(url, null, null, postReq);
			
			var aResponseText = ajax['xmlRequest'].responseText.split("|||");
			
			aResult['loginCorrect'] = (aResponseText[0] == "true") ? true : false;
			aResult['picAvailable'] = (aResponseText[1] == "true") ? true : false;
			
			if(!aResult['loginCorrect'])
			{
				oUser.value = "";
				oPassword.value = "";
				oUser.focus();
			}
		}
		
		return aResult;
	}

