if (typeof(XMLHttpRequest) == 'undefined')
var XMLHttpRequest = function() {
  var request = null;
  try {
    request = new ActiveXObject('Msxml2.XMLHTTP');
  } catch(e) {
    try {
      request = new ActiveXObject('Microsoft.XMLHTTP');
    } catch(ee) {
    }
  }
  return request;
}

///Funzioni per gestire JSON
function object_from_json(json) {
  var r = null;	
  eval('r=' + json + ';');
  return r;
}

function json_from_object(o)
{
  if (o == null)
    return 'null';

  switch (typeof(o)) {
	  case 'object':
		    if (o.constructor == Array) {	// checks if it is an array [,,,]
		      var s = '';
		      for (var i=0; i<o.length; ++i) {
				if (i > 0)
					s += ',';
				s += json_from_object(o[i]);
		      }//end for
		      return '[' + s + ']';
		    }//end if			
	    break;
	  case 'string':
	    return '"' + o.replace(/(["\\])/g, '\\$1') + '"'; // for emacs: ']));
	  default:
	    return String(o);
  }
}

function Server(url) {
  this.url = url;
  this.index = 0;
  this.params = new Array();
}



Server.prototype.rpc = function rpc(mode, service) {
  var args = arguments; 
  var uri = this.url + "?service="+service;	
  if (args != null) {
    switch(args.length){
        case 2: uri+= "&currentclientindex="+ escape(args[args.length-1]);break;
    }//end switch    
  }//end if
  var x = new XMLHttpRequest();
  var res=null;
  if(mode == "GET"){  
   x.open("GET", uri, false);
   x.send(null);
   if (x.status != 200) {
    alert("error " + x.status);
    return null;
   }   
  }
  else if(mode == "POST"){
   x.open("POST", this.url, false);
   x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
   //var sendString= "service="+service+"&param="+escape(args[args.length-1]);
   var sendString= "service="+service;
   if(this.index>0){
	   for(var sco =0; sco<this.index; sco++)		   
		   sendString+="&"+this.params[sco].name+"="+this.params[sco].value;
	 this.index= 0;
	 this.params = new Array();
   }
   //alert("ajax: "+sendString );
   x.send(sendString);//Da sistemare
  }
  res = x.responseText;  
  delete x;
  return res;  
}

function Pair(name, value){
	this.name = name;
	this.value = value;
}
//Funzione usata per settare una coppia Nome-Valore  
Server.prototype.paramPost = function paramPOST(nomeP, valoreP){
	var temp = new Pair(nomeP, valoreP);
	this.params[eval(this.index)] = temp;
	this.index++;
}





