// --------------------------------------------------------------------------------------------------------------------------------------------------
// Globale Variablen
var sourceFormID                 = 'ajax_form';
var defaultTargetFormContainerID = 'FormContainer';
var targetFormContainerID        = 'FormContainer';
var AJAXTimoutCallCount          = 0;
var preventDelayedRefresh        = false;
var invalidInputOccurred         = false;
var formSnippetRetrievalURL      = '';

// --------------------------------------------------------------------------------------------------------------------------------------------------
// Formulareingaben an Server senden
function sendFormData(url, formID)
{
	var postParams = $(formID).serialize(true);

	var currentAJAX = new Ajax.Request(
		url,
		{
			method: 'post',
			parameters: postParams,
			onCreate: function()
			{		
				// Abblenden des aktuellen Formulars
				$('FormContainer').addClassName('fade');
				// Flabs nicht als klickbar zeigen		
				toggleFlabsCursorStyle('disable');
				// Ladeanimation einblenden
				Element.show('ajaxShowLoading');
			},						
			onSuccess: function(originalRequestObject)
					   {
					   		var contentType   = currentAJAX.getHeader('Content-Type');
					   		var contentLength = currentAJAX.getHeader('Content-Length');
					   		
							var serverResponse = originalRequestObject.responseText;
							var returnStatusObj = eval("("+serverResponse+")");

							if (returnStatusObj.items.length > 0)
							{
								
								errorHTML = '<div class="errorMessageBox" style="display: block"><p>Bitte &uuml;berpr&uuml;fen Sie Ihre Angaben:</p><ul>';								
								for (var i = 0; i < returnStatusObj.items.length; i++)
								{
									// Alle Fehlermeldungen zum HTML-String hinzufügen
									// errorHTML += '<li>' + returnStatusObj.items[i].text + '</li>';
									errorHTML += returnStatusObj.items[i].text;
								}
								errorHTML += '</ul></div>';
								
								// Fehlermeldung in trainingUnitDateFrame-DOM einhängen und anzeigen
								$('errorContainer').update(errorHTML);
								Element.show('errorContainer');
								
								// Flabwechsel rückgängig machen
								toggleFlabs(previousFlabID, true);
								
								// Laden des nächsten Formularsnippets verhindern
								invalidInputOccurred = true;							
								
								// Formular wieder einblenden
								$('FormContainer').removeClassName('fade');
								// Cursor-Style für die Flabs wieder auf 'Hand'
								toggleFlabsCursorStyle('enable');
								// Ladeanimation ausblenden
								Element.hide('ajaxShowLoading');								
							}
							else
							{
								// Nächstes Formularsnippet laden
								getFormSnippet(formSnippetRetrievalURL);
							}
					   },
			onException: function(originalRequestObject)
			{
				var serverResponse = originalRequestObject.responseText;
				//alert('Ausnahmefehler beim Senden von Formulardaten: ' + serverResponse);
			},
			onFailure: function()
			{
	  			//alert('AJAX-Request beim Senden von Formulardaten fehlgeschlagen');	
			}						
		});	
}


// --------------------------------------------------------------------------------------------------------------------------------------------------
// Formular von Server laden
function getFormSnippet(url)
{
	preventDelayedRefresh = false;
	
	var currentAJAX = new Ajax.Request(
		url,
		{
			method: 'get',
			onCreate: function()
			{		
				// Abblenden des aktuellen Formulars
				$('FormContainer').addClassName('fade');
				// Flabs nicht als klickbar zeigen		
				toggleFlabsCursorStyle('disable');
				// Ladeanimation einblenden
				Element.show('ajaxShowLoading');
			},			
			onSuccess: _updateFormContainer,
			onException: function(originalRequestObject)
			{
				var serverResponse = originalRequestObject.responseText;
				//alert('Ausnahmefehler beim Holen eines Formular-Snippets: ' + serverResponse);
			},
			onFailure: function()
			{
	  			//alert('AJAX-Request beim Holen eines Formular-Snippets fehlgeschlagen');	
			}			
		});
}


// --------------------------------------------------------------------------------------------------------------------------------------------------
// Wrapper-Funktion für die Vereinigung der Formulardaten-Senden- und Neues-Formular-Snippet-Holen-Funktionalität
function switchForm ()
{
	// function switchForm (sendCurrentFormDataToURL, retrieveFormSnippetURL, currentFormID, targetFormContainerID)
	// --> dynamische Parameterzahl; die ersten beiden sind Pflichtparameter, als Parameter 3 und 4 können optional die ID des auszulesenden Formulars und die ID des Zielcontainers übergeben werden
	var sendCurrentFormDataToURL = arguments[0];
	var retrieveFormSnippetURL   = arguments[1];
	
	if ((arguments.length == 3) || (arguments.length == 4))
	{
		sourceFormID = arguments[2];
	}
	
	if (arguments.length == 4)
	{
		targetFormContainerID = arguments[3];
	}			
	
	if(Ajax.activeRequestCount == 0) // Aktion nur ausführen, wenn momentan kein anderer Request läuft
	{
	  Element.hide('errorContainer');
		
  	  sendFormData(sendCurrentFormDataToURL, sourceFormID);
     
     formSnippetRetrievalURL = retrieveFormSnippetURL;
/*     
	  if (!invalidInputOccurred)
	  {
		  // Neues Formularsnippet nur holen, wenn kein Fehler aufgetreten ist
  	      getFormSnippet(retrieveFormSnippetURL);
	  }
*/	  
	  invalidInputOccurred = false;
	}
}


// --------------------------------------------------------------------------------------------------------------------------------------------------
// 
//function saveTrainingUnit (sendCurrentFormDataToURL, saveUnitActionURL)
function saveFormFinal (sendCurrentFormDataToURL)
{
	if(Ajax.activeRequestCount == 0) // Aktion nur ausführen, wenn momentan kein anderer Request läuft
	{
	  Element.hide('errorContainer');
		
  	  sendFormData(sendCurrentFormDataToURL, sourceFormID);

/*     
	  if (!invalidInputOccurred)
	  {
		  // Trainingseinheit speichern (wenn kein Eingabefehler aufgetreten ist)
//  	      window.location.href = saveUnitActionURL;
	  }
	  
	  invalidInputOccurred = false;
*/
	}	
}


// --------------------------------------------------------------------------------------------------------------------------------------------------
//
function saveFormFinalSynchron(asynchronUrl, synchronUrl, formId)
{
	var postParams = $(sourceFormID).serialize(true);

	var currentAJAX = new Ajax.Request(
		asynchronUrl,
		{
			method: 'post',
			parameters: postParams,
			onCreate: function()
			{		
				// Abblenden des aktuellen Formulars
				$('FormContainer').addClassName('fade');
				// Flabs nicht als klickbar zeigen		
				toggleFlabsCursorStyle('disable');
				// Ladeanimation einblenden
				Element.show('ajaxShowLoading');
			},						
			onSuccess: function(originalRequestObject)
					   {
					   		var contentType   = currentAJAX.getHeader('Content-Type');
					   		var contentLength = currentAJAX.getHeader('Content-Length');
					   		
							var serverResponse = originalRequestObject.responseText;
							var returnStatusObj = eval("("+serverResponse+")");

							if (returnStatusObj.items.length > 0)
							{
								
								errorHTML = '<div class="errorMessageBox" style="display: block"><p>Bitte &uuml;berpr&uuml;fen Sie Ihre Angaben:</p><ul>';								
								for (var i = 0; i < returnStatusObj.items.length; i++)
								{
									// Alle Fehlermeldungen zum HTML-String hinzufügen
									errorHTML += returnStatusObj.items[i].text;
								}
								errorHTML += '</ul></div>';
								
								// Fehlermeldung in trainingUnitDateFrame-DOM einhängen und anzeigen
								$('errorContainer').update(errorHTML);
								Element.show('errorContainer');
								
								// Flabwechsel rückgängig machen
								toggleFlabs(previousFlabID, true);
								
								// Laden des nächsten Formularsnippets verhindern
								invalidInputOccurred = true;							
							}
							else
							{
								if(formId) {
									$(formId).submit();	
								} else {
									window.location.href = synchronUrl;
								}
							}
							
							// Formular wieder einblenden
							$('FormContainer').removeClassName('fade');
							// Cursor-Style für die Flabs wieder auf 'Hand'
							toggleFlabsCursorStyle('enable');
							// Ladeanimation ausblenden
							Element.hide('ajaxShowLoading');
							
					   },
			onException: function(originalRequestObject)
			{
				var serverResponse = originalRequestObject.responseText;
				//alert('Ausnahmefehler beim Senden von Formulardaten: ' + serverResponse);
			},
			onFailure: function()
			{
	  			//alert('AJAX-Request beim Senden von Formulardaten fehlgeschlagen');	
			}						
		});	
}



// --------------------------------------------------------------------------------------------------------------------------------------------------
// EventHandler, der aufgerufen wird, wenn Daten vom Server angekommen sind
function _updateFormContainer(originalRequestObject)
{	
	if (!preventDelayedRefresh)
	{
		//alert(originalRequestObject.responseText);
		
		$(targetFormContainerID).update(originalRequestObject.responseText);
		targetFormContainerID = defaultTargetFormContainerID;
		
		// Formular wieder einblenden
		$('FormContainer').removeClassName('fade');
		// Cursor-Style für die Flabs wieder auf 'Hand'
		toggleFlabsCursorStyle('enable');
		// Ladeanimation ausblenden
		Element.hide('ajaxShowLoading');
		
	}	
}


// --------------------------------------------------------------------------------------------------------------------------------------------------
// Wird aufgerufen, falls ein AJAX-Request "hängengeblieben" ist 
function _resetFunctionalityAfterAJAXTimeout()
{
	if(Ajax.activeRequestCount > 0)
	{
		$('FormContainer').removeClassName('fade');
		toggleFlabsCursorStyle('enable');
		Element.hide('ajaxShowLoading');
		toggleFlabs(previousFlabID, true);
		previousFlabID = null;
		preventDelayedRefresh = true;
	}
}
// --------------------------------------------------------------------------------------------------------------------------------------------------

function sendSingleForm(url, formID, containerId, callback, loadingAnimationId)
{
	if (formID) {
		var postParams = $(formID).serialize(true);
	} else {
		var postParams = {};
	}

	new Ajax.Request(
		url,
		{
			method: 'post',
			parameters: postParams,
			onCreate: function()
			{		
				if ($(containerId) != null) $(containerId).addClassName('fadeLayer');
				if ($(loadingAnimationId) != null) $(loadingAnimationId).show();
			},						
			onSuccess: function(originalRequestObject)
					   {	
					   		if (containerId) 
					   		{			
								if (containerId == 'ajaxResponseOK')
								{
									if ($('ajaxLoadingAnimation') != null) 
									{
										$('ajaxLoadingAnimation').hide();
									}
									$(containerId).show();
								}
								else
								{								
									$(containerId).innerHTML = originalRequestObject.responseText;
									
									// Falls vorhanden, Speichern- oder Fehler-Fähnchen neben dem Button anzeigen (verwendet z.B. in "Mein Konto"-Subseiten)
									if ($($(containerId).parentNode.parentNode.parentNode).hasClassName('ajaxResponseMiniBox') || $($(containerId).parentNode.parentNode).hasClassName('boxes_boxAttentionSimple'))
									{									
										$($(containerId).parentNode.parentNode.parentNode).show();
									}
								}
					   		}
					   		if (typeof callback == 'function') {
					   			callback();
					   		}							
							if ($(containerId) != null) $(containerId).removeClassName('fadeLayer');
							if ($(loadingAnimationId) != null) $(loadingAnimationId).hide();
					   },
			onException: function(originalRequestObject)
			{
				var serverResponse = originalRequestObject.responseText;
				//alert('Ausnahmefehler beim Senden von Formulardaten: ' + serverResponse);
				if ($(containerId) != null) $(containerId).removeClassName('fadeLayer');
				if ($(loadingAnimationId) != null) $(loadingAnimationId).hide();				
			},
			onFailure: function()
			{
	  			//alert('AJAX-Request beim Senden von Formulardaten fehlgeschlagen');
				if ($(containerId) != null) $(containerId).removeClassName('fadeLayer');
				if ($(loadingAnimationId) != null) $(loadingAnimationId).hide();				
			}						
		});	
}


// --------------------------------------------------------------------------------------------------------------------------------------------------

function sendData(url, params)
{
	new Ajax.Request(
		url,
		{
			method: 'post',
			parameters: params,
			onSuccess: function(originalRequestObject)
					   {			   		
					   },
			onException: function(originalRequestObject)
			{
				var serverResponse = originalRequestObject.responseText;
				//alert('Ausnahmefehler beim Senden von Formulardaten: ' + serverResponse);
			},
			onFailure: function()
			{
	  			//alert('AJAX-Request beim Senden von Formulardaten fehlgeschlagen');	
			}						
		});	
}

var loadContent = function(url, container) {
	var container = $(container);
	container.innerHTML = '<div style="padding:30px; text-align:center;"><img src="jsp/de/img/anim_loading_50.gif" width="36" height="50" /></div>';
	
	new Ajax.Request(
		url,
		{
			method: 'post',
			onSuccess: function(response) {
				container.innerHTML = response.responseText;
			},
	        onFailure: 		function() { sports.core.error.add(sports.error.type.SERVER_FAILURE); },
	        onException: 	function() { sports.core.error.add(sports.error.type.EXCEPTION); },
	        on401: 			function() { sports.core.error.add(sports.error.type.SERVER_401); }            
	});
}
