function RequestManager(){
	this.requestCount=0;
	this.requests=new Array();
	this.initialRequestPoolSize=1;
	this.callbackNumber=0;
}

RequestManager.prototype.createRequest=function(){
	var ret = new Requester("request"+this.requestCount);
	this.requests[this.requestCount]=ret;
	this.requestCount +=1;
	return ret ;
};
RequestManager.prototype.retrieveRequest=function(pwRequestId){
	for(var i=0;i<this.requestCount;i+=1){
	    var temp = this.requests[i];
		if(temp !==null && temp.id===pwRequestId){
			return temp;
		}
	}
	return null;
};

RequestManager.prototype.cleanRequest=function(pwRequestId){
	for(var i=0;i<this.requestCount;i+=1){
		var temp = this.requests[i];
		if(temp !==null && temp.id===pwRequestId){
			this.requests[i] =null;
			return ;
		}
	}
};

var applimediaRequestManager = new RequestManager();
 
var handlerText="";
handlerText+="var requestObject = applimediaRequestManager.retrieveRequest(requestId);";
handlerText+="if(requestObject){";
handlerText+="var isComplete = requestObject.ready(requestObject);";
handlerText+="if( isComplete){applimediaRequestManager.cleanRequest(requestId);};";
handlerText+="}";


function Requester(id) {
    this.id = id;
	this.requester=createXMLHttpRequest();
	this.method="post";
	this.caller = null;
	this.sendData = sendData; 
	this.sendXML = sendXML; 
	this.ready =ready;
	
		 
	  function sendData( url ,params,noresponse){
	  try{
	  if(noresponse !== true ){
		this.internalHandler=new Function("var requestId = '"+this.id+"';"+handlerText);
		
		this.requester.onreadystatechange = this.internalHandler;
		}
		this.requester.open(this.method, url);
		this.requester.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=utf-8');
		this.requester.setRequestHeader('Accept-Charset','utf-8');
		if(noresponse !== true && this.caller ===null){
			alert("caller is null for " + url + params);
		}
		this.requester.send(params);
		}
		catch(e){
			//alert("error in http request : " + e);
		}
	}
	
	function sendXML( url ,xmlBody,noresponse){
	  try{
	  if(noresponse !== true ){
		this.internalHandler=new Function("var requestId = '"+this.id+"';"+handlerText);
		
		this.requester.onreadystatechange = this.internalHandler;
		}
		this.requester.open(this.method, url);
		this.requester.setRequestHeader("Content-Type", "text/xml");
		this.requester.setRequestHeader('Accept-Charset','utf-8');
		
		if(noresponse !== true && this.caller ===null){
			alert("caller is null for " + url + params);
		}
		this.requester.send('<?xml version="1.0" encoding="UTF-8"?>' + xmlBody);
		}
		catch(e){
			//alert("error in http request");
		}
	}
	
		function ready(it){
		    var ret = false ;
		    var caller = it.caller;
		    try{
		   if(caller !==null){
			var state =-1;
			var req = it.requester ;
			state=req.readyState;
    		if ( state == 4 && caller  &&   caller.readyListener ) {
        		 caller.readyListener(it);
        		 ret = true ;
			}
			}else{
			ret= true ;
			}
			}catch(e){}
			return ret ;
		}

}

