/**********************************************************************************
** File name:   http_request.js
** Description: This is a library to generate HTTP request for AJAX application
** Version:     1.0
** Last Update: 2006-08-10
** Author:      YAP KIN SHU
**********************************************************************************/

//
// Global variable
//
var request = null;

//
// Wrapper function for constructing a request object.
// Parameters:
//  reqType:    The HTTP request type, such as GET or POST.
//  url:        The URL of the server program.
//  asynch:     Whether to send the request asynchronously or not.
//  respHandle: The name of the function that will handle the response.
//  args:       Any fifth parameters, represented as arguments[4], are the data a
//  						POST request is designed to send. 
//
function httpRequest(reqType,url,asynch,respHandle){
  // Microsoft-based browsers
  if(window.ActiveXObject){
    request = new ActiveXObject("Msxml2.XMLHTTP");
    if(!request){
       request = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  // Mozilla-based browsers
  else if(window.XMLHttpRequest){
    request = new XMLHttpRequest();
  }
  if(request){
    // If the reqType parameter is POST, then the
    // 5th argument to the function is the POSTed data
    if(reqType.toLowerCase() != "post"){
      initReq(reqType,url,asynch,respHandle);
    }
    else{
      // The POSTed data
      var args = arguments[4];
      if(args != null && args.length > 0){
      	initReq(reqType,url,asynch,respHandle,args);
      }
    }
  }
  else{
  	alert("Your browser does not permit the use of all "+
          "of this application's features!");
  }
}

//
// Initialize a request object that is already constructed
//
function initReq(reqType,url,bool,respHandle){
  try{
    /* Specify the function that will handle the HTTP response */
    request.onreadystatechange=respHandle;
    request.open(reqType,url,bool);
    // If the reqType parameter is POST, then the
    // 5th argument to the function is the POSTed data
    if(reqType.toLowerCase() == "post") {
      request.setRequestHeader("Content-Type",
        "application/x-www-form-urlencoded; charset=UTF-8");
      request.send(arguments[4]);
    }
    else {
    	request.send(null);
    }
  }
  catch(errv){
    alert(
	    "The application cannot contact "+
	    "the server at the moment. "+
	    "Please try again in a few seconds.\\n"+
	    "Error detail: "+errv.message);
  }
}
