// 
// Ajax Library Opacc Software AG, by Roli Kurmann
// 
// Version 2.3 / 11.03.2008
// Neuerung: Clientseitige Tabellensortierung
// 
// 
// Parameters:
// 1:	url		string, asynchroner Aufruf der URL
// 2:	DivID		string, ID eines HTML-Elementes welches mit dem asynchronen Result gefüllt wird
// 3:	DivClass	string, (Optional) CSS-Klasse für das anzuzeigende HTML-Element
// 4:	WaitIcon	boolean, (Optional, default '1') soll das DivID (Param 3) angezeigt werden, während die Daten geladen werden?
// 			anzeigen = 1 / nicht anzeigen = 0
// 5:	Callback-Funktion nach erhalten des Results ausführen Bsp: 1/2:TestFunction:[Param1]*++*[Param2]*++*[Param3]...
// 6: Schränkt die zu postenden Felder auf das mitgegebene DIV ein. (Performance bei grossen Formularen beim Save.)

var http_request = false;
var queue = new Array();
var queueLength = 0

function sendRequest(url,DivID,setDiv,ShowWait,func,PostDiv) 
{

var http_request   = false;
var WPReq	   = "showpage.asp";
var strParam       = "";
var strKomplParams = "";
var sTableSorterID = "";

var ShowDiv 		= "1";
var ShowDivWennOC 	= "1";
var ShowDivDisplay 	= "block";
var ShowWaitDivID	= DivID;
var strLoadingImg	= "<table style='width:100%;height:100%;border:0px none #ffffff;' border='0'><tr><td style='vertical-align:middle; text-align:center;font-size:9px;border:0px none #ffffff;'><img src='config/layout/images/others/general/process_active.gif'></td></tr></table>"
var strLoadingImgSmall	= "<img src='config/layout/images/others/general/process_active.gif'>"


// Formvalidierung
// ================================================================================================

// $.metadata.setType("attr", "messages");
// $("form[name='OCForm']:first").validate();

// if($("form[name='OCForm']:first").valid()==false){
// return null;
// }


// WaitIcon
// ================================================================================================

		if (ShowWait == "0" || ShowWait == "" || ShowWait == undefined || ShowWait == 0)
		   {
		   strShowWait = "0";
		   }
		else if (ShowWait.split(":").length > "0")
		   {
			var segShowWait = ShowWait.split(":")
			for(var w=0;w<segShowWait.length;w++){
				if(w == 0){strShowWait = segShowWait[0]};
				if(w == 1){ShowWaitDivID = segShowWait[1];strLoadingImg = strLoadingImgSmall};
			}
		   }
		else
		   {
		   strShowWait = "1";
		   ShowWaitDivID = DivID;
		   }



// Form-Felder der aktuellen Seite sammeln
// =================================================================================================


if(PostDiv == undefined || PostDiv=='0')
{
var strInputFormFields  = document.getElementsByTagName("input");
var strSelectFormFields = document.getElementsByTagName("select");
var strTextFormFields   = document.getElementsByTagName("textarea");
var strParam = "";

	// Radio, input, select, hidden
	for(var f=0; f < strInputFormFields.length; f++){
		var sElementName = strInputFormFields[f];
		var sElementIdentifier = escape(sElementName.id);

/********************************************************************************
		var sElementIdentifier = escape(sElementName.id ? sElementName.id : sElementName.name);

		if (sElementIdentifier == "txtOriginalValues"){
			//console.info('XX' + sElementName.value + 'YY');
			sElementIdentifier = "";
		}
		
		if (sElementIdentifier == "bSave"){
			if (sElementName.id == "" && sElementName.name != ""){
				sElementIdentifier = "";
			}
		}
********************************************************************************/
		
		if(sElementIdentifier == "cmd_ShowAsynPage"){
			sElementIdentifier = "";
		}

		if(sElementIdentifier != ""){
			if((sElementName.type == "checkbox" || sElementName.type == "radio") && sElementName.checked == false){
				strParam = strParam + sElementIdentifier + "=" +"&";
			
			}else{
				strParam = strParam + sElementIdentifier + "=" + encodeURIComponent(sElementName.value)+"&";
			}
		}


		if(sElementName.type == "radio" && sElementName.checked == true){
				strParam = strParam + sElementIdentifier + "="  + encodeURIComponent(sElementName.value)+"&";
		}

	}

	// Select-Felder
	for(var s=0; s < strSelectFormFields.length; s++){
		var sElementName = strSelectFormFields[s];
		var sElementIdentifier = escape(sElementName.id ? sElementName.id : sElementName.name);

		strParam = strParam + sElementIdentifier + "=" + encodeURIComponent(sElementName.value)+"&";
	}

	// Textareas
	for(var t=0; t < strTextFormFields.length; t++){
		var sElementName = strTextFormFields[t];
		var sElementIdentifier = escape(sElementName.id);

		if(sElementIdentifier != ""){
		strParam = strParam + sElementIdentifier + "=" + encodeURIComponent(sElementName.value)+"&";
		}
	}
}
else
{
	var bSave = false;
      
	  $("#"+PostDiv+" input, #"+PostDiv+" select, #"+PostDiv+" textarea, #"+PostDiv+" hidden").each(function (i) {

		  if(this.id != ""){
			if((this.type == "checkbox" || this.type == "radio") && sthis.checked == false){
				strParam = strParam + escape(this.id) + "=" +"&";
				
			}else{
				strParam = strParam + escape(this.id) + "=" + encodeURIComponent(this.value)+"&";
			}
			}

			if(this.type == "radio" && this.checked == true){
					strParam = strParam + escape(this.name) + "="  + encodeURIComponent(this.value)+"&";
			}

			if(this.type == "select"){
				
				if(this.id != ""){
					strParam = strParam + escape(this.id) + "=" + encodeURIComponent(this.value)+"&";
				}else if(this.name != ""){
					strParam = strParam + escape(this.name) + "=" + encodeURIComponent(this.value)+"&";
				}
			}

			if(this.type == "select-one"){
				
				if(this.id != ""){
					strParam = strParam + escape(this.id) + "=" + encodeURIComponent(this.value)+"&";
				}else if(this.name != ""){
					strParam = strParam + escape(this.name) + "=" + encodeURIComponent(this.value)+"&";
				}
			}


			if(this.type == "textarea"){
				if(this.id != ""){
					strParam = strParam + escape(this.id) + "=" + encodeURIComponent(this.value)+"&";
				}
			}

			if(this.type == "hidden"){
				if(this.id != ""){
					strParam = strParam + escape(this.id) + "=" + encodeURIComponent(this.value)+"&";
				}
			}
			if(this.id == "bSave")
			{
				bSave = true;
			}
			
      });

//bSave separat auswerten, da dieser nicht zwingend in dem DIV vorhanden sein muss
if(bSave==false)
	{
		strParam = strParam + escape($("#bSave").attr('id')) + "=" + encodeURIComponent($("#bSave").val())+"&";
	}

}



// Remove id von vorhandenem cmd_ShowAsynPage Form-Felder
// ===================================================================================================


if(document.getElementById("cmd_ShowAsynPage")){
	document.getElementById("cmd_ShowAsynPage").removeAttribute("id");
}






// Parameter der Callback Funktion ermitteln
// ===================================================================================================

		if(func != "" && func != undefined){
			var fseg = func.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("*++*")
				// var strAllArgsCallBack = cb_f_Args.join(",")
			}

		}


        http_request = false;

        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/html; charset=utf-8');
                // zu dieser Zeile siehe weiter unten
            }

        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");

            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");

                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
            return false;
        }



        http_request.open('post', url, true);
	http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');


        http_request.onreadystatechange = alertInhalt;

        // http_request.send(null); > für methode GET

		// Wenn In URL "fc=" nicht vorkommt, dann automatisch "fc=1" setzen
		if(url.indexOf("fc=") == -1){
			url = url + "&fc=1";
		}


		strParam = strParam.replace(/\+/,'%2B')

		// Wenn WebPortal Request dann txtTargetLevel füllen sonst nicht
		if(url.indexOf(WPReq) == 0){
			var strKomplParams = 'txtTargetLevel='+ escape(url) +"&"+ strParam;

		}else{
			var strKomplParams = strParam
		}


	http_request.send(strKomplParams);

    // }


 function alertInhalt() {

// Wait-Icon für die Stati 1-4 anzeigen
// ================================================================================================================================
   if(http_request.readyState == 0 && strShowWait == "1"){
        document.getElementById(ShowWaitDivID).innerText = "initialisieren";
     
   }else if(http_request.readyState == 1 && strShowWait == "1"){
	 	$("#"+DivID).css("display","block");
        //KM document.getElementById(ShowWaitDivID).innerHTML = strLoadingImg;
		$("#"+ShowWaitDivID).html(strLoadingImg);

   }else if(http_request.readyState == 2 && strShowWait == "1"){ 

        //KM document.getElementById(ShowWaitDivID).innerHTML = strLoadingImg;
		$("#"+ShowWaitDivID).html(strLoadingImg);

   }else if(http_request.readyState == 3 && strShowWait == "1"){ 
        //KM document.getElementById(ShowWaitDivID).innerHTML = strLoadingImg;
		$("#"+ShowWaitDivID).html(strLoadingImg);

   }else if(http_request.readyState == 4){
          if (http_request.status == 200) {


		// var Ausgabe = http_request.responseText.replace("<form", "<pseudo");
		// Ausgabe = Ausgabe.replace("form>", "pseudo>");
		var Ausgabe = http_request.responseText
		Ausgabe = Ausgabe.replace(/<form name=\"OCForm\".*?>/gi, "");
		Ausgabe = Ausgabe.replace(/<form name=\'OCForm\'.*?>/gi, "");
		Ausgabe = Ausgabe.replace(/<\/form>/gi, "");
		Ausgabe = Ausgabe.replace(/<input type=\'hidden\' name=\'txtTargetLevel\'.*?>/gi, "");


// Parameter für Show DIV
// ================================================================================================

		if(document.getElementById("cmd_ShowAsynPage")){
			document.getElementById("cmd_ShowAsynPage").id = "";
		}

	if(document.getElementById("tempAsynResult")){
		//MK document.getElementById("tempAsynResult").innerHTML = Ausgabe;
		$("#tempAsynResult").html(Ausgabe);

		var AsynHiddenFields = document.getElementById("tempAsynResult").getElementsByTagName('input');

		for(var a=0;a<AsynHiddenFields.length;a++){
			if(AsynHiddenFields[a].id.indexOf('txtTableSorter_') != -1){
				sTableSorterID = AsynHiddenFields[a].id;
			}
		}

	}


			if(setDiv.search(/:/) != -1){
	
				var setDivSeg = setDiv.split(":");

				for(var d =0; d < setDivSeg.length; d++){


					if(d == "0"){ShowDiv = setDivSeg[d]};
					if(d == "1"){ShowDivWennOC = setDivSeg[d]};
					if(d == "2"){ShowDivDisplay = setDivSeg[d]};

				}


					if(document.getElementById("cmd_ShowAsynPage")){		
						if(ShowDivWennOC == "0+" && document.getElementById("cmd_ShowAsynPage").value <= 0){
							ShowDiv = (ShowDiv == "1") ? "0" : "1";
						}

						if(ShowDivWennOC == "0-" && document.getElementById("cmd_ShowAsynPage").value > 0){
							ShowDiv = (ShowDiv == "1") ? "0" : "1";
						}
					}


			}


	if(document.getElementById("tempAsynResult")){
		document.getElementById("tempAsynResult").innerHTML = "";
	}


// Callback-Funktion VOR der Ausgabe ausführen
// ================================================================================================================================
			if(func != "" && func != undefined && typeof window[f_Name] == "function" && f_Ausfuehrung == "1"){
			var eval_string = "window[f_Name](\"" + cb_f_Args.join("\", \"") + "\")";
			eval(eval_string)
			// window[f_Name](cb_f_Args);
			}



// Ausgabe der asynchron geladenen Seite
// ================================================================================================================================

// if(DivID == "Page_MasterArea"){alert(Ausgabe)};

// if(! document.getElementById(DivID)){
// alert(DivID)
// }


			if(document.getElementById(DivID)){
				if(ShowDiv == "1"){

					//KM document.getElementById(DivID).innerHTML = ""
					$("#"+DivID).html("");
					//KM document.getElementById(DivID).innerHTML = Ausgabe;
					$("#"+DivID).html(Ausgabe);
					//document.getElementById(DivID).innerText = Ausgabe;
					document.getElementById(DivID).style.display = ShowDivDisplay;

				}else{
					$("#"+DivID).html("");
					//KM document.getElementById(DivID).innerHTML = "";
					document.getElementById(DivID).style.display = "none";
				}


				// WaitIcon wieder auslbelenden, sofern dieses in einen anderen Container geladen wurde
				if(document.getElementById(ShowWaitDivID)){
					
					if(DivID != ShowWaitDivID){$("#"+ShowWaitDivID).html("");};
				}

			}else{
				// alert("Div-Id nicht verfügbar!\nID: " + DivID)
			}


// Callback-Funktion NACH der Ausgabe ausführen (first:TableSorter/seconde:custom JS-function)
// ================================================================================================================================

// TableSorter JS-Function
//-----------------------
			if(sTableSorterID != ""){
				if(typeof window['loadTableSorter2'] == "function"){
					loadTableSorter2(sTableSorterID);
				}
			}


// Customer JS-Function
//-----------------------

			if(func != "" && func != undefined && typeof window[f_Name] == "function" && f_Ausfuehrung == "2"){
			var eval_string = "window[f_Name](\"" + cb_f_Args.join("\", \"") + "\")";
			eval(eval_string)
			}


            } else {
		// document.getElemetById(DivID).innerHTML = "Es ist ein Fehler aufgetreten.<br>Fehler: " + http_request.status;
			// if(ShowDiv = "0"){alert("Es ist ein Fehler aufgetreten.\nFehler: "+ http_request.status)};
				// alert("Es ist ein Fehler aufgetreten.\nFehler: "+ http_request.status);
            }

    }


 } // Ende der Funktion alertInhalt


}


// Funktion dient zum ausführen von weiteren Funktionen nach dem asynchronen Laden von HTML-Inhalt
// Es müssen auf der asynchronen HTML-Seite hidden-felder mit bestimmter notation erfasst sein:
// Bsp:	  <input id="AsynOnLoad_Page01" alt="sendRequest" value="showpage.asp?id=.." name="Div_User" class="1::block" title="1" type="hidden">
// id:	  Muss mit "AsynOnLoad_Page" beginnen
// alt:	  Name der Funktion welche ausgeführt werden soll
// value: Übergabeparameter1
// name:  Übergabeparameter2
// class: Übergabeparameter3
// title: Übergabeparameter4
// lang:  Übergabeparameter5
//
function AsynOnLoad(ArgArray)
{
var strHiddenFormFields  = document.getElementsByTagName("input").length;
var exklPage = ""
var sfunc = ""


for (var a = 0; a < AsynOnLoad.arguments.length; ++a){
    exklPage = exklPage + String(AsynOnLoad.arguments[a]) + ",";
}

	for(var i=0; i < strHiddenFormFields; i++){

		if(typeof(document.getElementsByTagName("input")[i]) == "object"){

			var sElementName = document.getElementsByTagName("input")[i];

			if(sElementName.id != "" && sElementName.id.indexOf("AsynOnLoad_Page") != -1 && (AsynOnLoad.arguments.length == 0 || AsynOnLoad.arguments[0] == "null")){
				sfunc = sElementName.alt
					if(typeof window[sfunc] == "function"){

						eval(window[sfunc](sElementName.value,sElementName.name,sElementName.className,sElementName.title,sElementName.lang))
					}

			}else if(sElementName.id != "" && sElementName.id.indexOf("AsynOnLoad_Page") != -1 && (AsynOnLoad.arguments.length > 0 && exklPage.indexOf(sElementName.id.substr(sElementName.id.length-2, sElementName.id.length)) >= 0)){
				sfunc = sElementName.alt
					if(typeof window[sfunc] == "function"){
						eval(window[sfunc](sElementName.value,sElementName.name,sElementName.className,sElementName.title,sElementName.lang))
					}	
			}
		}


	}

}
