// variabile di classe 
var iIstanceCounter=0;
function Requester(){
	
	iIstanceCounter++;

	//Proprietà private
	var thisInstance = this;
	var thisTimeout=null;
	var objHTTPRequester = null;

	//Proprietà pubbliche
	this.name='rqst('+iIstanceCounter+')';
	this.RequesterType='';
	this.LastErrorCode=0;
	this.LastErrorMessage='';
	this.method='GET';
	this.url='';
	this.elOutput=null;

	//Proprietà metodi
	this.RequestHandler = function ()		{
		alert(this.name+': no \'RequestHandler\' function was assigned.\nSpecify a request handler as follows:\nobjYourInstance.RequestHandler=YourHandlerFunction;');
	}

	
	this.Call = function ()	{
		this.Dump('Calling...',true);
		objHTTPRequester.open(this.method,this.url,true);
		if (this.RequesterType=='Microsoft.XMLHTTP')	{
			objHTTPRequester.send();
	    }
	    else	{
			objHTTPRequester.send(null);
	    }
	}

	this.Submit = function (fForm)	{
		var i=0;
		var parameters='';
		
		this.Dump('Posting '+fForm.name,true);
		for (i=0;i<fForm.elements.length;i++)	{
			if (parameters.length > 0) parameters += '&';
			parameters += fForm.elements[i].name + '=' + encodeURI(fForm.elements[i].value );
		}
		objHTTPRequester.open('post',this.url,true);
		objHTTPRequester.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      	objHTTPRequester.setRequestHeader("Content-length", parameters.length);
      	objHTTPRequester.setRequestHeader("Connection", "close");
		objHTTPRequester.send(parameters);
	}
	
	this.Post = function (parameters)	{
		var i=0;
		this.Dump('Posting parameters...');
		objHTTPRequester.open('post',this.url,true);
		objHTTPRequester.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      	objHTTPRequester.setRequestHeader("Content-length", parameters.length);
      	objHTTPRequester.setRequestHeader("Connection", "close");
		objHTTPRequester.send(parameters);
	}

	
	this.Dump = function  (sLine,bClean)	{
		if (this.elOutput != null)	{
			if (bClean)	this.elOutput.value='';
			this.elOutput.value+=this.name+': '+sLine+'\n';
		}
	}


	function ResponseObject ()	{
		this.status='';
		this.statusText='';
		this.text='';
		this.xml=null;
	}
	
	function DefaultEventHandler(objRequester)	{
	    if (objHTTPRequester.readyState == 4) {
			var objResponse = new ResponseObject ();
			objResponse.status=objHTTPRequester.readyState;
			objResponse.statusText=objHTTPRequester.statusText;
			objResponse.text=objHTTPRequester.responseText;
			objResponse.xml=objHTTPRequester.responseXML;
			objRequester.RequestHandler(objHTTPRequester);
	    }
	}

	//instanziazione oggetto request
    if (window.XMLHttpRequest) {
        objHTTPRequester = new XMLHttpRequest();
		this.RequesterType='XMLHttpRequest';
    }
	if (window.ActiveXObject) {
        objHTTPRequester = new ActiveXObject("Microsoft.XMLHTTP");
		this.RequesterType='Microsoft.XMLHTTP';
    }

    if (this.RequesterType.length != 0) {
		objHTTPRequester.onreadystatechange = function() { DefaultEventHandler(thisInstance); };
    }
}
