/* 
	ajr.js 
	Asynchronous, Javascript, Request
  	Javascript lib for making asynchronous background http request, 
	
	Copyright (C) 2005  Colin Faulkingham
  
	// Function Docs
	- request(callBack, escapeReturnData, method, url, queryString, statusDiv);

	[callBack] = function to call when request is done your function should take 1 parmeter which is the return data.
	[escapeReturnData] = if the return data is html or XML this should be true else make it false
	[method] = POST or GET *WARNING GET IS DANGEROUS* unless you modify this souce to deal with caching issues.
	[url] = url of your app example http://my.domain.com/yourApp.extension
	[queryString] = the parmeters you want to pass to your server app example: param1=foo;param2=bar;
	[statusDiv] = the ID of the div you want to use as a status default =status example: <div id="status" class="hide"></div>
					the statusDiv requires 2 CSS class .show{padding:5px;}  and  .hide{display: none;visibility: hidden;} 
  
  - status(message,signal,statusDiv); the requestor uses this method automatically while it's waiting a response.
	 [message] = message you want the status to say such as Loadding... Please Wait...
	 [signal]  = open or close open = show status, close=close status
	 [statusDiv] = the html div id you want to use.
	
*/     
   
function request(callBack,escapeReturnData,method,url,queryString,statusDiv,param){ 
	   var httpRequest;
		try{
			httpRequest = new XMLHttpRequest();
		}
		catch(error){
			try{
				httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (error){
				return false;
			}
		}
		
		httpRequest.open(method,url,true);
		if(method == "POST"){ 
			httpRequest.setRequestHeader("Method", "POST " + url + " HTTP/1.1");
			httpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		}
		
		httpRequest.onreadystatechange = function() {	
		  	  
				if (httpRequest.readyState == 4){
					var returnData = httpRequest.responseText;
					delete httpRequest;
					if(statusDiv){setTimeout("showStatus('Done...','close','" + statusDiv + "')",1);}
		  			if(callBack){
						if(escapeReturnData == 'true'){ 
							if(param){
								setTimeout(callBack+"('"+escape(returnData)+"','"+param+"')",0); 
							}
							else{
								setTimeout(callBack+"('"+escape(returnData)+"')",0);
							}
		         	}
						else{
							if(param){
								setTimeout(callBack+"('"+returnData+"','"+param+"')",0);
							  	      
							}
							else{
							  	setTimeout(callBack+"('"+returnData+"')",0);
						  	 
							}	 
						}
					}
				}
				else{ 
					// Status 
					if(statusDiv){
			      		setTimeout("showStatus('Please Wait... Loading   ','open','" + statusDiv + "')",1);
					}
				}
		}

		if(method == "POST"){
			httpRequest.send(queryString);
		}
		else{
		 	httpRequest.send(null);
		}
}

function showStatus(message,signal,statusDiv){
	if(statusDiv !='none'){
		document.getElementById(statusDiv).innerHTML=message + '&nbsp;<img src="/img/status.gif"/>';
		if(signal=='open'){
  		document.getElementById(statusDiv).className='pleaseWait';
   	}
		else{
			document.getElementById(statusDiv).className='hide';
		}
	}
  
	
}
