//=======================[ AJAX based class to make transparent requests to the server ]===========
function mAJAXRequest(){
	var requestObj;
	var request_location;
	var requestData;
	var responseType;
	var resp_parserFunction;
	var error_handlerFunction;
	var response;
	var reqType='POST';
	//------------------[ method to set type of returning data (if requested XML it has to be set to 'xml')
	this.setResponseType=function(type){
		responseType=type;
	}
	//------------------[ method to set request type ('GET' or 'POST'(default))
	this.setRequestType=function(type){
		reqType=type;
	}
	this.setRequestLocation=function(toaddr){
		request_location=toaddr;
	}
	//------------------[ mthod to set data that will be transmitted
	this.setData=function(data){
		requestData=data;
	}
	//------------------[ method to assign function that will parse incoming response
	this.assignParser=function(parser){
		resp_parserFunction=parser;
	}
	//------------------[ method to assign function that will handle errors
	this.assignErrorHandler=function(errorFunc){
		error_handlerFunction=errorFunc;
	}
	//------------------[ this function will send request to the server
	this.send=function(){
		if(window.ActiveXObject){
			requestObj = new ActiveXObject("Msxml2.XMLHTTP");
    	if(!requestObj)
      	requestObj = new ActiveXObject("Microsoft.XMLHTTP");
  		//----------------------------------------------------
		}else{//if FF we can reuse requestObj if we created it before so check for it first
			if(!requestObj)
				requestObj=new XMLHttpRequest();
			if(responseType=='xml')
				requestObj.overrideMimeType('text/xml');
		}
		//------------------------------------------------------
		requestObj.onreadystatechange=this.responseServer;
  	requestObj.open(reqType,request_location,true);
  	requestObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  	requestObj.send(requestData);//if no requestData and method is GET so for ie it has to be NULL but for ff it can be empty
  	return true;
	}
	//------------------[ private method for ajax
	this.responseServer=function(){
  	if(requestObj.readyState==4){
  		var status=requestObj.status;
    	if(status==200){
    		if(responseType=='xml')
    			response=requestObj.responseXML;
    		else response=requestObj.responseText;
    		resp_parserFunction();//<-call our result parsing function
    	}else error_handlerFunction();
  	}
 }
 //-------------------[ method to return response object
 this.getResponse=function(){
 		return response;
 }
}
//=================================================================================================