var xmlHttp;
var queryString = ""; //will hold the POSTed data
var requestStatus = 0;
var callBackFunction = "";

function setQueryString(frm) {	
	var numberElements = frm.elements.length;
	var queryStr = "";
	for(var i = 0; i < numberElements; i++) {		
		switch (frm.elements[i].type) {
			case "checkbox": if (frm.elements[i].checked) queryStr += frm.elements[i].name + "=" + encodeURIComponent(frm.elements[i].value); break;
			case "radio": if (frm.elements[i].checked) queryStr += frm.elements[i].name + "=" + encodeURIComponent(frm.elements[i].value); break;
			default: queryStr += frm.elements[i].name + "=" + encodeURIComponent(frm.elements[i].value);
		}
		if(i < numberElements-1) queryStr += "&";
	}
	return queryStr;
}

function createRequestObject() {
    var obj = null;
    try {
        // Mozilla / Safari
        obj = new XMLHttpRequest();
    } catch (e) {
        // IE
        var XMLHTTP_IDS = new Array(
            'MSXML2.XMLHTTP.5.0',
            'MSXML2.XMLHTTP.4.0',
            'MSXML2.XMLHTTP.3.0',
            'MSXML2.XMLHTTP',
            'Microsoft.XMLHTTP');
        var success = false;
        for (var i=0;i < XMLHTTP_IDS.length && !success; i++) {
            try {
                obj = new ActiveXObject(XMLHTTP_IDS[i]);
                success = true;
            } catch (e) {}
        }
        if (!success) {
            throw new Error('Unable to create XMLHttpRequest.');
        }
    }
    return obj;    
}

//event handler for XMLHttpRequest
function handleResponse(objid) {
  if (xmlHttp.readyState == 4) {
    if(xmlHttp.status == 0 || xmlHttp.status == 200) {
      if (objid != "")
        document.getElementById(objid).innerHTML = xmlHttp.responseText;
     // alert(callBackFunction);
      eval(callBackFunction);
    } else {
      //alert("A problem occurred with communicating between the XMLHttpRequest object and the server program.");
    }
  } 
}


/* Initialize a Request object that is already constructed
 reqType: The HTTP request type such as "GET" or "POST." 
 url: The URL of the server program.
 isAsynch: Whether to send the request asynchronously or not. */
 function initReq(reqType, url, isAsynch, objid) {
   /* Specify the function that will handle the HTTP response */
   try {
     xmlHttp.onreadystatechange = function() { handleResponse(objid); }
     if (xmlHttp.overrideMimeType) xmlHttp.overrideMimeType("text/xml");
     xmlHttp.open(reqType, url, isAsynch);
     
     if (reqType.toLowerCase() == "post") {
       /* set the Content-Type header for a POST request */
       xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
       xmlHttp.send(queryString);
     } else {
       xmlHttp.send(null);
     }
   } catch(err) {
     alert("The application cannot contact the server at the moment. \nPlease try again in a few seconds.\nError detail: " + err.message);
   }
}
// after ajax request is completed
function setCallBack (callback)
{
  callBackFunction = callback;   
}

function sendData(url, objid, method, frm) {
  if (objid == null) objid = "";
  if (method == null) method = "GET";
  if (frm != null) queryString = setQueryString(frm);
  //if (callback != null) callBackFunction = callback;
     
  xmlHttp = new createRequestObject();
  if (xmlHttp)
    initReq(method, url, true, objid);
}

