/**______________________________________________________________
				#  AJAX - Szenario-Routinen

					#______________________________________________________________
					#  Erklärungen	ÜBERARBEITEN!		#{{{


					... funktionieren so:

						- Erzeugen eines Szenario-Objekts
						- dort setzen diverser Eigenschaften
						- nennen der Reaktions-Funktion, die nach Erhalt des XML-Objekts aus der aufgerufenen Seite reagiert
							In der Reaktions-Funktion liegt das Szenario-Objekt selbst wieder vor, ebenso wie das ResponseXML-Objekt, das explizit übergeben wird!
						- evtl. vorbereitende Maßnahmen (Einblenden und Ausblenden von Bereichen)
						- Aufruf der allgemeinen AjInit-Funktion mit diesem Objekt (mit "AjInit(objSzenario);" )

					Folgende Eigenschaften müssen im Szenario-Objekt gesetzt sein:

						objSzenario.SzName		Name dieses Szenario für evtl. Switch-Statements bei re-entrant-Funktionen wichtig!
						objSzenario.WarteMeldung
						objSzenario.WiederholDelay="";
						objSzenario.GetPostModus="GET";
						objSzenario.AsynchronModus=false;
						objSzenario.IDMeldung="MeldungenBest";		// hier werden Meldungen reingeschrieben. Kann leer bleiben.
						objSzenario.URL						die eigentliche aufgerufene URL mit allen Parametern

						objSzenario.Reaktion 				Name der reagierenden Funktion, die alles spezielle an Reaktionen abfährt,
																		z.B. = function () {BestellungenReaktion(ResponseXML);};

					Zusatz-Elemente...

						... können definiert und so mit dem Objekt weitergegeben werden, z.B.
						objSzenario.IDTabelle="ErgebnisTabelleBestellungen";


					#}}}


					#______________________________________________________________
					#  Objekt / Funktionen			#{{{ */

					function AjaxSzenario() {	// {{{
						this.WarteMeldung = "";
						this.WiederholDelay = "";
						this.GetPostModus = "GET";
						this.AsynchronModus = true;
						this.IDMeldung = "";
						this.URL = "";
						this.Rerun = false;
						this.FehlerCode=0;

						// Funktionen

						this.AjInit = AjInit;
						function AjInit() { // {{{
							// Mozilla, Opera, Safari sowie Internet Explorer 7
							if (typeof(XMLHttpRequest) != 'undefined') {
								// Der Internet-Explorer verträgt es nicht, wenn man ein Objekt weiterverwenden will, also immer komplett neu erstellen
								// Dieses Objekt wurde bereits initalisiert, wenn wir noch eins erstellen würde wäre das unnötig
								if(!this.XObj)
								{
									//document.getElementById(TargetIDMeldung).innerHTML = "AJAX: OK";
									this.XObj = new XMLHttpRequest();
									if (this.XObj.overrideMimeType) {
										this.XObj.overrideMimeType('text/xml');
									}
								}
							}
							else {
									// Internet Explorer 6 und älter
									try {
										this.XObj  = new ActiveXObject("Msxml2.XMLHTTP");
									}
									catch(e) {
										try {
											this.XObj  = new ActiveXObject("Microsoft.XMLHTTP");
										}
										catch(e) {
											if (this.IDMeldung != "") {
												document.getElementById(this.IDMeldung).innerHTML = "AJAX nicht unterstützt!";
											}
											return false;
										}
									}
								}


							// URL erweitern:
							// aber nur bei GET:
							var URL2;
							if (this.GetPostModus=="GET") {
								if (this.URL.match(/\?/)) {
									//alert("Match!");
									var jetzt = new Date();
									URL2 = this.URL + "&time" + jetzt.getTime()  + "=1";
									//alert("URL2: " +URL2);
								}
								else {
									//alert("NoMatch!");
									var jetzt = new Date();
									URL2 = this.URL + "?time" + jetzt.getTime()  + "=1";
									//alert("URL2: " +URL2);
								}
							}
							else {
								// bei POST einfach die alte URL nehmen:
								URL2 = this.URL;
							}

							//document.getElementById(TargetID).innerHTML = WarteMeldung;
							if (this.AsynchronModus==true) {
								// wir brauchen ein HIlfsobjekt, weil in der eigebeteten Funktion this auf etwas anderes zeigen würde
								var thisObj = this;
								this.XObj.onreadystatechange = function(){thisObj.AjStateChange()};
							}
							else {
								// nicht asynchron, also auf Sanduhr umschalten....
								document.body.style.cursor = 'wait';
							}

							this.XObj.open(this.GetPostModus, URL2, this.AsynchronModus);
							// je nach GetPostModus:
							if (this.GetPostModus=="GET") {
								this.XObj.setRequestHeader('Cache-Control', 'no-cache');
								// this.XObj.send("");
								// besser?
								this.XObj.send(null);
							}
							else {
								// POST
								this.XObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

								// macht bei Netscape 7 Probleme!
								//this.XObj.setRequestHeader("Content-Length", this.POSTParameters.length);

								this.XObj.setRequestHeader("Connection", "close");
								this.XObj.send(this.POSTParameters);
							}

							if (this.AsynchronModus==true) {
								// bei Asynchron-Modus nichts weiter tun
							}
							else {
								// bei Synchron-Modus einmal die Reaktions-Funktion aufrufen:
								this.AjStateChange();
								// Cursor wieder umsetzen:
								document.body.style.cursor = 'default';
							}

						} //}}}

						this.AjStateChange = AjStateChange;
						function AjStateChange() { //{{{
							switch (this.XObj.readyState) {
								case 4: // Seite ist fertig {{{
									if (this.XObj.status == 200) {	//{{{
										this.ResponseXML = this.XObj.responseXML;
										this.Reaktion();

										if (this.WiederholDelay != null) { //{{{
											if (this.WiederholDelay!=0) {
												// Flag setzen, daß ab jetzt wiederholt wird:
												this.ReRun=true;
												// wir brauchen ein HIlfsobjekt, weil in der eigebeteten Funktion this auf etwas anderes zeigen würde
												var thisObj = this;
												// so geht es nicht im IE:
												setTimeout(function(){thisObj.AjInit()}, this.WiederholDelay); // resubmit after delay
												// so geht es nicht mit "rerun", da immer wieder frisch ausgelöst wird! Nzw. scheinbar gar nicht!!!
//													setTimeout(this.WiederholCommand, this.WiederholDelay); // resubmit after delay
//												setTimeout("alert('here we go.." + this.WiederholCommand + "');", this.WiederholDelay); // resubmit after delay
											}
										}	//}}}

									//}}}
									}
									else {
										// anderer RetCode als 200:
										if (this.IDMeldung != "") {
											document.getElementById(this.IDMeldung).innerHTML="AJAX-Fehler (Errorcode: " + this.XObj.statusText + ")";
											document.getElementById(this.IDMeldung).style.display="";
										}
										this.FehlerCode= this.XObj.status;
										this.FehlerText= this.XObj.statusText;
										this.Reaktion();
									}
									//}}}
									break;
								default:	// {{{
									// Wartemeldung nur setzen (und damit die evtl. schon vorhandene Tabelle nur setzen), wenn wir nicht in der Schleife sind!
									if (this.ReRun != true) {
										if (this.IDMeldung != "") {
											document.getElementById(this.IDMeldung).innerHTML =this.WarteMeldung;
										}
									}
									else {
										// document.getElementById(TargetIDMeldung).innerHTML = document.getElementById(TargetIDMeldung).innerHTML +".";
									}
								// }}}
								}

						} //}}}

						this.XmlIDInDomID = XmlIDInDomID;
						function XmlIDInDomID(XmlID, DomID) {	//{{{

							if (DomID=="") {
								alert("XmlIDInDomID: keine DomID gegeben!");
								return;
							}
							if (XmlID=="") {
								alert("XmlIDInDomID: keine XmlID gegeben!");
								return;
							}

							elDOM = document.getElementById(DomID);
							if (!elDOM) {
								alert("XmlIDInDomID: Element mit ID " + DomID + " konnte nicht ermittelt werden!");
								return;
							}

							elDOM.innerHTML=this.GetXmlID(XmlID);

						}	//}}}

						this.XmlIDInDomIDVal = XmlIDInDomIDVal;
						// nicht in das innerHTML schreiben, sondern den value setzen..
						function XmlIDInDomIDVal(XmlID, DomID) {	//{{{

							if (DomID=="") {
								alert("XmlIDInDomID: keine DomID gegeben!");
								return;
							}
							if (XmlID=="") {
								alert("XmlIDInDomID: keine XmlID gegeben!");
								return;
							}

							elDOM = document.getElementById(DomID);
							if (!elDOM) {
								alert("XmlIDInDomID: Element mit ID " + DomID + " konnte nicht ermittelt werden!");
								return;
							}

							elDOM.value=this.GetXmlID(XmlID);

						}	//}}}

						this.GetXmlID = GetXmlID;
						function GetXmlID(XmlID) {	//{{{

							if (XmlID=="") {
								alert("XmlIDInDomID: keine XmlID gegeben!");
								return;
							}
							try {
								var elXML = this.XObj.responseXML.getElementsByTagName(XmlID);
								if (!elXML) {
									alert("XmlIDInDomID: XML-Element mit ID " + XmlID + " konnte nicht ermittelt werden!");
									return;
								}
								var elInhalt = "";
								var cntNodes;
								var AnzNodes=elXML[0].childNodes.length;
								for (cntNodes=0; cntNodes< AnzNodes; cntNodes++) {
									elInhalt += elXML[0].childNodes[cntNodes].data;
								}

								return elInhalt;
							}
							catch(e) {
									alert("XmlIDInDomID: XML-Element mit ID " + XmlID + " konnte nicht ermittelt werden! - Fehler: " + e);
									return;
							}


						}	//}}}

						this.GetDomID = GetDomID;
						function GetDomID(DomID) {	//{{{

							if (DomID=="") {
								alert("GetDomID: keine DomID gegeben!");
								return;
							}

							elDOM = document.getElementById(DomID);
							if (!elDOM) {
								alert("GetDomID: Element mit ID " + DomID + " konnte nicht ermittelt werden!");
								return;
							}
							return elDOM.value;


						}	//}}}

						this.GetDomIDinnerHTML = GetDomIDinnerHTML;
						function GetDomIDinnerHTML(DomID) {	//{{{

							// im Unterschied zur normalen Funktion wird hier NICHT der value gezogen
							if (DomID=="") {
								alert("GetDomIDinnerHTML: keine DomID gegeben!");
								return;
							}

							elDOM = document.getElementById(DomID);
							if (!elDOM) {
								alert("GetDomIDinnerHTML: Element mit ID " + DomID + " konnte nicht ermittelt werden!");
								return;
							}
							return elDOM.innerHTML;


						}	//}}}

						this.WriteDataToDomID = WriteDataToDomID;
						function WriteDataToDomID(Data, DomID) {	//{{{

							document.getElementById(DomID).innerHTML = Data;

						}	//}}}

						this.ShowDomID = ShowDomID;
						function ShowDomID(DomID, TrueFalse) {	//{{{
							elDOM = document.getElementById(DomID);
							if (!elDOM) {
								alert("ShowDomID: Element mit ID " + DomID + " konnte nicht ermittelt werden!");
								return;
							}
							if (TrueFalse) {
								document.getElementById(DomID).style.display="";
							}
							else {
								document.getElementById(DomID).style.display="none";
							}
						}	//}}}

						this.EnableDomID = EnableDomID;
						function EnableDomID(DomID, TrueFalse) {	//{{{
							document.getElementById(DomID).disabled=!TrueFalse;
						}	//}}}

						this.RefreshImg = RefreshImg;
						function RefreshImg(ImageDomID) {	//{{{
							// sorgt dafür, daß ein Animated GIF frisch abgespielt wird:
							elOK = document.getElementById(ImageDomID);
							SrcAlt=elOK.src;
							elOK.src = SrcAlt;
						} //}}}

						this.SetCursorWait = SetCursorWait;
						function SetCursorWait(DomID, TrueFalse) {	//{{{
							// setzt den Cursor auf das Element auf Wait (true) bzw. auf Default (false):
							// ist keine ID gegeben, wird das Document selbst gesetzt:
							if (DomID=="") {
								if (TrueFalse) {
									document.body.style.cursor="wait";
								}
								else {
									document.body.style.cursor="default";
								}
							}
							else {
								elCursor = document.getElementById(DomID);
								if (TrueFalse) {
									elCursor.style.cursor="wait";
								}
								else {
									elCursor.style.cursor="default";
								}
							}
						} //}}}

						this.SetCursorWaitEl = SetCursorWaitEl;
						function SetCursorWaitEl(elCursor, TrueFalse) {	//{{{
							// setzt den Cursor auf das Element auf Wait (true) bzw. auf Default (false):
							if (TrueFalse) {
								elCursor.style.cursor="wait";
							}
							else {
								elCursor.style.cursor="default";
							}
						} //}}}

						this.MyEscape = MyEscape;
						function MyEscape(Rein) {	//{{{
							// ersetzt außer dem Standard von escape() auch noch das Pluszeichen!:
							Rein = escape(Rein);
							return Rein.replace("+", "%2B");
						} //}}}

					} //}}}


					//}}}





