//=======================[ 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';
	var resp_status;
	//------------------[ 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(){
		resp_status=false;
		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(){
		try{
			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
    			resp_status=true;
    		}else error_handlerFunction();
  		}
  	}catch(err){ error_handlerFunction(); }
 }
 this.getStatus=function(){
 	return resp_status;
 }
 //-------------------[ method to return response object
 this.getResponse=function(){
 		return response;
 }
}
//=================================================================================================