/* successCallback: function ( request_output, data )
	failCallback: function ( request status, request_output, data ) */
function ServerRequest( reqId, data, wait)
{
	this.Request=null
	this.wait=get_id(wait)
	this.data=data
	this.reqId=reqId
	this.params={}

	this.setReqId=function(nId){this.reqId=nId}
	this.setParam=function(p,v){this.params[p]=v}

	this.Execute=function(okCb,koCb, debug)
	{
		try{Request = new XMLHttpRequest()}
		catch(a){
			try{Request=new ActiveXObject("Msxml2.XMLHTTP")}
			catch(b){
				try{Request=new ActiveXObject("Microsoft.XMLHTTP")}
				catch(c){
					Request = null
					alert("Request is unavailable: something might not work! UPGRADE BROWSER")
					return false
				}
			}
		}
	
		var successCallback=okCb
		var failCallback=koCb

		var url="/request.php?s="+page_data["section"]+"&p="+page_data["site_prefix"]+"&l="+page_data["lang"]+"&RQST="+this.reqId
		for(var i in this.params)
			url+="&"+i+"="+this.params[i]

		if ( debug )
			alert("URL for "+this.reqId+" is: "+url)

		Request.open("GET",url,true)

		var w = (this.wait) ? new Wait(this.wait) : null
		if ( w )
			w.Start()

		var local_data = this.data;

		Request.onreadystatechange=function()
		{
		 	if ( Request.readyState==4 ) // done
		 	{
				if ( w ) w.Stop()
				if (Request.status==200) // request successfull..
				{
					try { eval( Request.responseText ) }
					catch (e) {
						alert("Error in processing request result ("+Request.responseText+"): "+e+"!")
						var request_output = {status:"ko",error:"unk error"}
					}

					if ( request_output.status == "ko" )
					{
						try { failCallback(request_output, Request.status, local_data) }
						catch (err) { alert(request_output.error+" - "+err) }
					 }
					else
					{
						try { successCallback(request_output, local_data) }
						catch (err) { alert("Error calling successCallback function ("+err+")") }
					}
					if ( debug && request_output.execution_time)
						alert("Total execution time: "+request_output.execution_time)
				}
				else
				{
					try { failCallback(null, Request.status, local_data) }
					catch (err) { alert("Request error ("+Request.status+")! "+err+")") }
				}
			}
		}
		Request.send(null)
	}
}