﻿// 
// Ajax Library Opacc Software AG
// Version 3.0.0 / 16.08.2011
// 

//Ideen:
//EJ .. waitClass (also Drehrad) eventuell auf einem anderern Div einblenden

// Parameters:
// 1: url - string, asynchroner Aufruf der URL
// 2: postFormOrButton - undefined/null: keine Felder posten, this: Felder der umschliessenden Form posten, form-object: Felder explizit dieser Form posten
// 3: waitClass - string, (Optional) CSS-Klasse, welche auf Div gesetzt wird während dem Laden
// 4: ocId - string, (Optional) Id der/des zu ladenden form/div, leer default gemäss OC
// 5: asForm - boolean, (Optional) true form, false div, leer default gemäss OC
// 6: targetDivId - string, ID eines HTML-Elementes welches mit dem asynchronen Result gefüllt wird
// 7: targetDivClass - string, (Optional) CSS-Klassen-Name für das anzuzeigende HTML-Element
// 8: resultPartSelector - string, (Optional) JQuery-Selektor um einen Teilbereich des nachgeladenen OCs auszuwählen
// 9: callbackFunction - string, (Optional) Funktion, die nach dem Laden ausgeführt werden soll. Format 1 (vor der Ausgabe) / 2 (nach der Ausgabe):Funktionsname:Parameter getrennt mit *++*. Bsp: 1:TestFunction:[Param1]*++*[Param2]*++*[Param3]...
//10: save - boolean; (Optional) Soll die automatische Formularspeicherung ausgeführt werden oder nicht? Wenn true oder false wird im versteckten Feld "bSave" immer der übergebene Wert gepostet. Wenn leer wird der Wert des Feldes gepostet.
function sendAsynRequest(url, postFormOrButton, waitClass, ocId, asForm, targetDivId, targetDivClass, resultPartSelector, callbackFunction, save) 
{
	var WPReq = "showpage.aspx";
	var strParam = "";
	var strKomplParams = "";

	if (waitClass) {
		$("#"+targetDivId).addClass(waitClass);
	}
	
	// Entferne fälschlicherweise html-codierte Ampersands
	if (url) {
		url = url.replace(/&amp;/g, "&");
	}
	
	// Form-Felder der aktuellen Seite sammeln
	// =================================================================================================
	if ((postFormOrButton) && (postFormOrButton != '')) {
		
		//Nur 1 SaveButton pro Form?
		//var postFormId = $("#" + postFormOrButton.id).closest("form")[0].id;
		var postFormId = $(postFormOrButton).closest("form")[0].id;
		
		var escapedId = ""; 
		var uriEncodedValue = "";
		
		$("#"+postFormId+" input, #"+postFormId+" select, #"+postFormId+" textarea").each(function (index, field) {
			// Felder welche "disabled" sind, dürfen nicht gepostet werden (analog zum synchronen Fall)
			if (field.disabled != true) {

			    var jQueryField = $(field);

			    if (jQueryField.hasClass("dateOO") || jQueryField.hasClass("timeOO")) {
			        escapedId = escape(field.name);
			    }
			    else {
			        escapedId = escape(field.id ? field.id : field.name);
			    }
				
				uriEncodedValue = encodeURIComponent(field.value);
				
				// Falls nicht gespeichert werden soll: bSave auf false setzen.
				if ((save == true) || (save == false)) {
					if(escapedId.indexOf("bSave") === 0) {
						uriEncodedValue = encodeURIComponent(save);
					}
				}
						
				if(field.type === "checkbox"){
					if(field.checked) {
						strParam += escapedId + "=" + uriEncodedValue +"&";
					} else {
						strParam += escapedId + "=" + "0" +"&"; //sofern 0/1					
					}
				} else if (field.type === "radio") {
					if  (field.checked) {
						strParam += escapedId + "="  + uriEncodedValue +"&";
					}
				} else {
					strParam += escapedId + "=" + uriEncodedValue +"&";
				}
			}
		});
	}
	
	// Parameter der Callback Funktion ermitteln
	// ===================================================================================================
	if(callbackFunction) {
		var fseg = callbackFunction.split(":");
		if(fseg.length === 3){
			var f_Ausfuehrung = fseg[0];
			var f_Name = fseg[1];
			var f_Args = fseg[2];
			var cb_f_Args = f_Args.split("*++*");
		}
	}

	// URL mit ocId ergänzen
	if (ocId) {
		url += "&ocId=" + ocId;
	}

	// URL mit asForm ergänzen
	if (asForm != null) {
		url += "&asForm=";
		if (asForm) {
			url += "1";
		} else {
			url += "0";
		}	
	}
    
	// URL mit isPart ergänzen
	url += "&isPart=";
	if ($("#" + targetDivId).closest("form").length > 0) {
		url += "1";
	} else {
		url += "0";
	}
	
	// URL mit "fc=1" ergänzen, wenn's fehlt
	if(url.indexOf("fc=") === -1) {
		url += "&fc=1";
	}
	
	strParam = strParam.replace(/\+/,'%2B');
	   
	if (postFormOrButton) {
		$.ajax({
			type: 'POST',
			url:url, 
			data:strParam, 
			success:processResponse
		});
	}
	else
	{
		$.ajax({
			type: 'GET',
			url:url, 
			data: '', 
			success:processResponse
		});
	}
	
	function processResponse(response) {
	
		var codeToShow;
		
		if(resultPartSelector) {
			var resultPart = $(response).find('#' + resultPartSelector).html();
			codeToShow = (resultPart ? resultPart : response);		
		}
		else {
			codeToShow = response;
		}
	
		var eval_string = "";

		// Callback-Funktion VOR der Ausgabe ausführen
		// ================================================================================================================================
		if(callbackFunction && typeof window[f_Name] === "function" && f_Ausfuehrung === "1") {
			eval_string = "window[f_Name](\"" + cb_f_Args.join("\", \"") + "\")";
			eval(eval_string);
		}

		// Ausgabe der asynchron geladenen Seite
		// ================================================================================================================================

		if(document.getElementById(targetDivId)) {
			$("#"+targetDivId).html("");
			$("#"+targetDivId).html(codeToShow);
		}
		
		if (waitClass) {
			$("#"+targetDivId).removeClass(waitClass);
		}
		if (targetDivClass) {
			$("#"+targetDivId).addClass(targetDivClass);
		}

		// Callback-Funktion NACH der Ausgabe ausführen (first:TableSorter/seconde:custom JS-function)
		// ================================================================================================================================

		// Customer JS-Function
		//-----------------------
		if(callbackFunction && typeof window[f_Name] === "function" && f_Ausfuehrung === "2") {
			eval_string = "window[f_Name](\"" + cb_f_Args.join("\", \"") + "\")";
			eval(eval_string);
		}
	}
}

