
/**
 * AsyncRequest is for sending asynchronous GET and POST requests to the
 * web server.  This is for *non* 'AJAX' and JSON calls (i.e. the response sent back
 * from the server is not XML).  Also, it is recommended that JSON be used
 * in lieu of Ajax since it is easier to work with.  JSON calls can be received
 * here as well. See http://www.json.org.
 * 
 * This file depends on coreweb/common/browser.js.  So you must include browser.js if 
 * you want to make asyncRequest calls.
 * 
 */
questia.asyncRequest = new Object();

questia.asyncRequest.get = function(url, callBack) {
  questia.asyncRequest.invoke( url, null, callBack, false );
}

questia.asyncRequest.post = function(url, parameters, callBack) {
  questia.asyncRequest.invoke( url, parameters, callBack, true );
}

questia.asyncRequest.invoke = function(url, parameters, callBack, bPost) {
    var browser = coreweb.common.Browser;

	var req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
	if(req) {
		req.onreadystatechange = function() {
		    if (req.readyState == 4) {
              if (req.status == 200) {
                 if ( callBack != null ) {
  				   callBack( req.responseText );
  			     }
    	       } else {
    	       	
                 if ( browser.isBrowser("safari") ) {
                     if ( 'undefined' != reg.status ) {
	       			   alert("There was a problem with your request: " +  req.statusText + "  code: " + req.status );
   	 	             }
                 } else {
	               alert("There was a problem with your request: " +  req.statusText + "  code: " + req.status );
                 }
              }
		    }
        }

        /**
        * add timestamp to url to fix IE caching issues.
        */
        var date = new Date();
	    var timestamp = date.getTime();
	    
        if ( bPost ) {
          req.open( "POST", url, true );
  	      req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  	      if ( parameters == null ) {
  	      	parameters = "time=" + timestamp;
  	      } else {
  	      	parameters += "&time=" + timestamp;
  	      }
	      req.setRequestHeader("Content-length", parameters.length);
    	  req.setRequestHeader("Connection", "close");
			// work around for safari 'undefined' bug
		  if ( browser.isBrowser("safari") ) {
			req.setRequestHeader( "If-Modified-Since", "Sun, 01 Jan 1990 00:00:00 GMT");
		  } 
          req.send(parameters);
        } else {
            if ( url.indexOf( '?' ) > 0 ) {
               url += "&time=" + timestamp;
            } else {
               url += "?time=" + timestamp;
            }
			req.open("GET", url, true);
			// work around for safari 'undefined' bug
			if ( browser.isBrowser("safari") ) {
				req.setRequestHeader( "If-Modified-Since", "Sun, 01 Jan 1990 00:00:00 GMT");
			}
			req.send(null);
        }
    }
 
}
