/*******************************************************************************
*
* © 2008 Copyright A-Vision
*
* File description :       AJAX function
* 
* Created by       :       Arnold Velzel
* Created on       :       08/07/2008
*
* Last changed by  :       Arnold Velzel
* Last changed on  :       <LastChanged>
* 
*******************************************************************************/

XMLHTTPSupport = false;
var XMLHttpFactories = [
	function () {return new XMLHttpRequest()},
	function () {return new ActiveXObject("Msxml2.XMLHTTP")},
	function () {return new ActiveXObject("Msxml3.XMLHTTP")},
	function () {return new ActiveXObject("Microsoft.XMLHTTP")},
];

function createXMLHTTPObject() {
	var xmlhttp = false;
	for (var i=0;i<XMLHttpFactories.length;i++)
	{
		try {
			xmlhttp = XMLHttpFactories[i]();
		}
		catch (e) {
			continue;
		}
		break;
	}
	return xmlhttp;
}

function GetElementValue(InStr, Tag)
{
 var pattern = "<" + Tag + ">(([^<]|\n)*)</" + Tag + ">";
 var re = new RegExp(pattern, "m");
 var arr = re.exec(InStr);

 if (arr != null) {
  return arr[1];
 } else {
  return "";
 }
}
function getServerHtml( url, targetObject, furtherAction, errorAction, userAgent)
{
 var req = createXMLHTTPObject();
 if (!req) return( false);
 try {
  req.open("GET",url,true);
 }
 catch (e) {
  alert("ERROR connecting: "+url+"\n"+e.message);
  return(false);
 }
 if ( !userAgent) userAgent = 'XMLHTTP/1.0';
 req.setRequestHeader('User-Agent',userAgent);
 req.setRequestHeader("Connection", "close");
 req.onreadystatechange = function () {
	 if (req.readyState != 4) return;
  if ( targetObject && ( targetObject.nodeName != "#text")) targetObject.setAttribute("AJAXstatus",req.status);
	 if (req.status != 200 && req.status != 304) {
   hdrs = req.getAllResponseHeaders();
   if ( req.status != 0) alert(url+'\nAJAX error ' + req.status+'\n'+hdrs);
   if ( typeof(furtherAction)=="function") furtherAction(targetObject);
 		return;
	 }
  hdrs = req.getAllResponseHeaders();
  if ( targetObject && ( targetObject.nodeName != "#text")) targetObject.setAttribute("AJAXheaders",hdrs);
  if ( hdrs.indexOf("text/javascript")>=0) {
   if ( targetObject) targetObject.setAttribute("responseText", req.responseText);
   try {
    eval(req.responseText);
   }
   catch (e) {
//    alert("ERROR executing:"+req.responseText+"\n"+e.message);
    alert("ERROR executing:"+e.message);
   }
   if ( typeof(furtherAction)=="function") furtherAction(targetObject);
   return;
  }
  if ( targetObject) {
   if ( targetObject.nodeName == "#text") {
    targetObject.nodeValue = req.responseText;
   } else {
    if (( targetObject.nodeName == "INPUT") || ( targetObject.nodeName == "SELECT") || ( targetObject.nodeName == "TEXTAREA")) {
     targetObject.setAttribute("responseText", req.responseText);
    } else {
     try {
      var HTML = req.responseText;
      targetObject.innerHTML = HTML;
      var javaScript = GetElementValue( HTML, "script");
      if ( javaScript.trim()!="") eval(javaScript);
     }
     catch (e) {
      targetObject.setAttribute("responseText", req.responseText);
      targetObject.setAttribute("responseError", e.message);
      alert(e.message);
     }
    }
   }
  }
  if ( typeof(furtherAction)=="function") furtherAction(targetObject);
 }
 req.send( null);
 return(true);
}

function postServerHtml( url, data, targetObject, furtherAction, errorAction, userAgent)
{
 var req = createXMLHTTPObject();
 if (!req) return( false);
 try {
  req.open("POST",url,true);
 }
 catch (e) {
  alert("ERROR connecting: "+url+"\n"+e.message);
  return(false);
 }
 if ( !userAgent) userAgent = 'XMLHTTP/1.0';
 req.setRequestHeader('User-Agent',userAgent);
 req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
 req.setRequestHeader("Connection", "close");
 req.onreadystatechange = function () {
	 if (req.readyState != 4) return;
  if ( targetObject && ( targetObject.nodeName != "#text")) targetObject.setAttribute("AJAXstatus",req.status);
	 if (req.status != 200 && req.status != 304) {
	  alert(url+'\nAJAX error ' + req.status);
   if ( typeof(furtherAction)=="function") furtherAction(targetObject);
 		return;
	 }
  hdrs = req.getAllResponseHeaders();
  if ( targetObject && ( targetObject.nodeName != "#text")) targetObject.setAttribute("AJAXheaders",hdrs);
  if ( hdrs.indexOf("text/javascript")>=0) {
   if ( targetObject) targetObject.setAttribute("responseText", req.responseText);
   try {
    eval(req.responseText);
   }
   catch (e) {
//    alert("ERROR executing:"+req.responseText+"\n"+e.message);
    alert("ERROR executing:"+e.message);
   }
   if ( typeof(furtherAction)=="function") furtherAction(targetObject);
   return;
  }
  if ( targetObject) {
   if ( targetObject.nodeName == "#text") {
    targetObject.nodeValue = req.responseText;
   } else {
    if (( targetObject.nodeName == "INPUT") || ( targetObject.nodeName == "SELECT") || ( targetObject.nodeName == "TEXTAREA")) {
     targetObject.setAttribute("responseText", req.responseText);
    } else {
     try {
      targetObject.innerHTML = req.responseText;
     }
     catch (e) {
      targetObject.setAttribute("responseText", req.responseText);
      targetObject.setAttribute("responseError", e.message);
     }
    }
   }
  }
  if ( typeof(furtherAction)=="function") furtherAction(targetObject);
 }
 req.send( data);
 return(true);
}

function formSubmit( frm, targetObject, furtherAction)
{
 if ( frm.nodeName == "FORM") {
  post = "";
  uploadform = false;
  var includehidden = false;
  if ( frm.elements["includehidden"]) includehidden = frm.elements["includehidden"].value;
  for ( f=0;f<frm.elements.length;f++) {
   var elm = frm.elements[f];
   var name = elm.name;
   var type = elm.type;
   var value = elm.value;
   if (( type == "radio") && !elm.checked) {
    continue;
   }
   if ( validateField( elm, includehidden)) {
    if ( name.trim()!="") {
     if ( post!="") post += "&";
     post += encodeURIComponent(name)+"="+encodeURIComponent(value); 
    }
   } else {
    var strname = elm.getAttribute("strname");
    if ( !strname) strname = name;
    alert( "Het veld '"+strname+"' is verplicht.");
    return(false);
   }

   if (( elm.type == "file") && ( value.trim()!="")) {
    uploadform = true;
   }
   
  }

  if ( uploadform) { 
   var ifrm = document.createElement("IFRAME");
   ifrm.id = "ajaxUploadFrame";
   ifrm.name = "ajaxUploadFrame";
   ifrm.setAttribute("name","ajaxUploadFrame");
   ifrm.style.position = "absolute";
   ifrm.style.width = "100%";
   ifrm.style.top = "-2000px";
   ifrm.furtherAction = furtherAction;
   ifrm.targetObject = targetObject;
   ifrm.onload = function() {
    if ( typeof(this.furtherAction)=="") this.furtherAction(this.targetObject);
   }
   if ( targetObject) {
    targetObject.appendChild( ifrm);
   } else {
    document.body.appendChild( ifrm);
   }
   frm.target = "ajaxUploadFrame";
   top.msgBox( "<id>SUCCESS</id><title>PLEASE WAIT</title><center>Sending form data.</center>", "#040", "#0a0", -1, "STATIC");
   frm.submit();
   return( false);
  }

  if ( post != "") {
   post = "random="+Math.random()+"&"+post;
   url = frm.action;
   // postServerHtml( url, data, targetObject, furtherAction, errorAction);
//   if ( typeof(top.msgBox)=="function") top.msgBox( "<id>SUCCESS</id><title>PLEASE WAIT</title><center>Sending form data.</center>", "#040", "#0a0", -1, "STATIC");
   targetObject.furtherAction = furtherAction;
   postServerHtml( url, post, targetObject, function(obj) {
    if ( !obj.getAttribute("skipclose")) top.closeMsgBox("SUCCESS");
    if ( typeof(obj.furtherAction)=="function") obj.furtherAction(obj);
   });
   return( false);
  } else {
   return( false);
  }
 } else {
  return( false);
 }
}
