

//****************************************************

// speichert eine Instanz von XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();

// erzeugt eine XMLHttpRequest-Instanz
function createXmlHttpRequestObject() 
{
  // speichert die Referenz auf das XMLHttpRequest-Object
  var xmlHttp;
  // this should work for all browsers except IE6 and older
  try
  {
    // try to create XMLHttpRequest object
    xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
    // assume IE6 or older
    var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    // try every prog id until one works
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) 
    {
      try 
      { 
        // try to create XMLHttpRequest object
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      } 
      catch (e) {}
    }
  }
  // return the created object or display an error message
  if (!xmlHttp)
    alert("Error creating the XMLHttpRequest object.");
  else 
    return xmlHttp;
}

//******************************************
// New Stuff
//******************************************

function StartRequest(url, params, sendtyp, postdata)
{
	if (sendtyp == undefined) 
	{
		var sendtyp = 'GET';
	}
	
	if (postdata == undefined) 
	{
		var postdata = '';
	}
	
	//getObj('waiter').style.display = "";
	//var loadstatustext='<div class="loadstatus">Loading</div>';
	
	if (xmlHttp)
	{
		try
	  	{
			//document.getElementById("modulcontent").innerHTML = "<div>" + loadstatustext + "</div>";

			if(xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
			{
				
				//var params = "?result_id=" + result_id + "&active_modul=" + active_modul  + "&action=edit"; 
		                        
			    // initiate the asynchronous HTTP request	
				if(sendtyp=='GET' || sendtyp=='get')
				{
					xmlHttp.open(sendtyp, url + params, true);
					xmlHttp.onreadystatechange = handleRequest;
					xmlHttp.setRequestHeader("Pragma", "no-cache");
					xmlHttp.setRequestHeader("Cache-Control", "must-revalidate");
					xmlHttp.setRequestHeader("If-Modified-Since", document.lastModified);
					xmlHttp.send(null);
				}
				else if(sendtyp=='POST' || sendtyp=='post')
				{
					xmlHttp.open(sendtyp, url + params, true);
					
					xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
					xmlHttp.setRequestHeader("Content-length", postdata.length);
					xmlHttp.setRequestHeader("Connection", "close");
					
					xmlHttp.onreadystatechange = handleRequest;
				
					xmlHttp.send(postdata);
				}
				
				
			}
			
		}
		catch (e) {}
	}
} // end function StartRequest(url, params, containerid, sendtyp)

function handleRequest() 
{
  // when readyState is 4, we are ready to read the server response
  if (xmlHttp.readyState == 4) 
  {
    // continue only if HTTP status is "OK"
    if (xmlHttp.status == 200) 
    {
      try
      {
        // do something with the response from the server
        handleServerResponse();
      }
      catch(e)
      {
        // display error message
        alert("Error reading the response: " + e.toString());
      }
    } 
    else
    {
      // display status message
      alert("There was a problem retrieving the data:\n" + 
            xmlHttp.statusText);
    }
  }
  else
  {
  	//alert('Not ready - ' + xmlHttp.readyState);
  }
}

function handleServerResponse()
{
	// retrieve the server's response packaged as an XML DOM object
	var xmlResponse = xmlHttp.responseXML;
	
	// catching potential errors with IE and Opera
	if (!xmlResponse || !xmlResponse.documentElement)
	  throw("Invalid XML structure:\n" + xmlHttp.responseText);
	 
	// catching potential errors with Firefox
	var rootNodeName = xmlResponse.documentElement.nodeName;
	if (rootNodeName == "parsererror") 
	  throw("Invalid XML structure:\n" + xmlHttp.responseText);
	 
	// getting the root element (the document element)
	xmlRoot = xmlResponse.documentElement;
	 
	// testing that we received the XML document we expect
	if (rootNodeName != "response" || !xmlRoot.firstChild)
	  throw("Invalid XML structure:\n" + xmlHttp.responseText);
	 
	// the value we need to display is the child of the root <response> element
	//responseText = xmlRoot.firstChild.data;
	responseStatus = xmlRoot.getElementsByTagName("status")[0].firstChild.data;

	
	var textResponse = xmlHttp.responseText;
	
	//textResponse = textResponse.replace('<response>', '');
	//textResponse = textResponse.replace('</response>', '');


	if(responseStatus == 0)
	{
		alert('Es ist leider ein Fehler aufgetreten\nBitte versuchen Sie es erneut.');
	}
	else
	{
		var responseHTML = xmlRoot.getElementsByTagName("html")[0].firstChild.data;
		if(responseHTML != 'null')
		{
			//var responseContainer = xmlRoot.getElementsByTagName("container")[0].firstChild.data;
			//alert(textResponse);
			InsertHTML(textResponse);
		}
		
		if(xmlRoot.getElementsByTagName("transfer")[0].firstChild.data != 'null')
		{
			if(xmlRoot.getElementsByTagName("data").length)
			{
				ResultArray= xmlToArray(xmlRoot.getElementsByTagName("data"));  
				//alert(nameArray);
				
				LaunchJavascript(xmlRoot.getElementsByTagName("TransferScript")[0].firstChild.data);
			}
		}
		
		var responseScript = xmlRoot.getElementsByTagName("script")[0].firstChild.data;
		if(responseScript != 'null')
		{
			//alert(responseScript);
			LaunchJavascript(responseScript);
		}
		
						
	}
}

function xmlToArray(resultsXml)
{
  // initiate the resultsArray
  var resultsArray= new Array();  
  // loop through all the xml nodes retrieving the content  
  for(i=0;i<resultsXml.length;i++)
  {
    //resultsArray[i]=resultsXml.item(i).firstChild.data;
    resultsArray[i]=resultsXml[i].firstChild.data;
    //alert(resultsXml[i].firstChild.data);
   }
  // return the node's content as an array
  return resultsArray;
}

function InsertHTML(ResponseText)
{
	
	//var HtmlFragment = '(?:<html.*?>)((\n|.)*?)(?:</html>)';
	var HtmlFragment = '(?:<html.*?>)((\n|\t|\r|.)*?)(?:</html>)';
	var HtmlMatch    = new RegExp(HtmlFragment, 'img');
  	var html_array  = ResponseText.match(HtmlMatch);
	
	if(html_array && html_array != 'null') 
	{
       // var js = '';
        for(var i = 0; i < html_array.length; i++) 
        {
            var HtmlMatch = new RegExp(HtmlFragment, 'im');
            //js += blocks[i].match(match)[1];         
           // alert(blocks[i].match(match)[1] + "\n\r");
           var html = html_array[i].match(HtmlMatch)[1];
           
        	//var CodeFragment = '(?:<code.*?>)((\n|.)*?)(?:</code>)';
        	var CodeFragment = '(?:<code.*?>)((\n|\t|\r|.)*?)(?:</code>)';
			var CodeMatch    = new RegExp(CodeFragment, 'im');
		  	var code_array  = html.match(CodeMatch);
		  	
		  	var code = code_array[0].match(CodeMatch)[1];
		  	
		  	//****************************************
		  	
		  	//var ContainerFragment = '(?:<container.*?>)((\n|.)*?)(?:</container>)';
		  	var ContainerFragment = '(?:<container.*?>)((\n|\t|\r|.)*?)(?:</container>)';
			var ContainerMatch    = new RegExp(ContainerFragment, 'im');
		  	var container  = html.match(ContainerMatch);
		  	
		  	var container_id = container[0].match(ContainerMatch)[1];
		  	
		  	//alert(container_id);
		  	document.getElementById(container_id).innerHTML = code;
        }
	
        //eval(script);
        //document.getElementById(container).innerHTML = HTML;
        
        //alert(js);
    }
		
	
}

function LaunchJavascript(script) 
{
	//alert(script);
	eval(script);
}

function PostAjaxForm(url, params, form, mode, variable)
{
	if(mode == undefined)
	{
		var mode = "DEFAULT";
		var DoPost = 1;
	}
	
	if(mode == "CONFIRM")
	{
		if(window.confirm(variable))
		{
			var DoPost = 1;
		}
	}
	
	if(DoPost == 1)
	{
		form = document.getElementById(form);
		var postdata = getForm(form);    
	 
	 	params = "?" + params;
	 
		if (!postdata) 
		{  
			return false;
	 	} 
	 	else 
	 	{
			//makeRequest(url, containerid, parameters, 'POST');
			StartRequest(url, params, 'POST', postdata)
	 	}
	 }

}

function getForm(fobj) {  
  var str = "";  
  var ft = "";  
  var fv = "";  
  var fn = "";  
  var els = "";  
  
  for (var i = 0;i < fobj.elements.length;i++) 
  {  
  
	els = fobj.elements[i];  
	ft = els.title;  
	fv = els.value;  
	fn = els.name;  

	switch(els.type) 
	{  
	   case "text":  
	   case "hidden":  
	   case "password":  
	   case "textarea":  
	    // is it a required field?  
	    //if(encodeURI(ft) == "required" && encodeURI(fv).length < 1) {  
	     //alert("Please fill in all required fields (*) in this form.");  
		//els.style.border = "1px solid red";
	     //els.focus();   
	     //return false;   
	    //}   
	    str += fn + "=" + encodeURI(fv) + "&";   
	   break;    
	   
	   case "checkbox":   
	   case "radio":   
	    if(els.checked) str += fn + "=" + encodeURI(fv) + "&";   
	    else str += fn + "=0&";   
	   break;       
	   
	   case "select-one":   
		str += fn + "=" +   
		els.options[els.selectedIndex].value + "&";
	   break;  

	   case "select-multiple":  
		var len2=els.length;
		var opts=new Array();
		for(var j=0;j<len2;j++)
		{
			if(els.options[j].selected)
			{
				var targ=(els.options[j].value) ? els.options[j].value : els.options[j].text;
				opts[opts.length]=encodeURIComponent(targ)
			}
		}
		str += fn + "=" + opts.join(",") + "&"; 
	   break;
	   
	} // switch   
	
  } // for   
  
  str = str.substr(0,(str.length - 1));   
  return str;   
} 

