function Request(pUrl,pMethod) {
  this.count = 0;
  this.url=pUrl;
  this.method=pMethod?pMethod:"GET";
  this.parameters=new Array();
  this.addParameter=addParameter;
  this.getPostData=getPostData;
  this.countParameters = countParameters;
}

function countParameters()
{
  return this.count;
}

function Parameter(pName,pValue) {
  this.name=pName;
  this.value=pValue;
}

function addParameter(pName,pValue) {
  this.parameters.push(new Parameter(pName,pValue));
  this.count++;
}

function getPostData() {
  var vPostData="";
  var vFirst="";
  for (var vIndex in this.parameters) {
    var vParameter=this.parameters[vIndex];
    vPostData += vFirst + encodeURIComponent(vParameter.name) + "=" + encodeURIComponent(vParameter.value);    
    vFirst="&";    
  }
  return vPostData;
}

function sendRequest(pRequest,callback,callbackError) {
	var req = createXMLHTTPObject();
	if (!req) return;
	req.open(pRequest.method,pRequest.url,true);
	req.setRequestHeader('User-Agent','XMLHTTP/1.0');
	if (pRequest.method=="POST")
		req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	  req.onreadystatechange = function () {
		if (req.readyState != 4) return;
		
    if (req.status != 200 && req.status != 304) {
	    showMessage(MSG_ERROR,"ERROR "+req.status+" al conectar con '"+pRequest.url+"'. " + req.responseText, true);
      //callbackError(req);
			return;
		}    
    if (req.responseText.substr(0,13)=="/* weblims */") {
		  callback(req);
    } else {
			callbackError(req);
    }
	}
	if (req.readyState == 4) return;
	req.send(pRequest.getPostData());
}

var XMLHttpFactories = [
	function () {return new XMLHttpRequest()},
	function () {return new ActiveXObject("Msxml2.XMLHTTP")},
	function () {return new ActiveXObject("Msxml3.XMLHTTP")},
	function () {return new ActiveXObject("Msxml4.XMLHTTP")},
	function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

function createXMLHTTPObject() {
	var xmlhttp = false;
	for (var i=0;i<XMLHttpFactories.length;i++) {
		try {
			xmlhttp = XMLHttpFactories[i]();
		}
		catch (e) {
			continue;
		}
		break;
	}
	return xmlhttp;
}

// ROC
// Para crear automaticamente un form que envíe datos por POST y no por GET 
function GoUrl(pAction, pMethod)
{
  this.target = "_self";
  this.action = pAction;
  this.method = pMethod;
  
  this.parametros = new Array();
  this.addParam = addGoUrlParam;
  
  this.submit = submitGoUrl;
}

function GoUrlParam(pName, pValue)
{
  this.name = pName;
  this.value = pValue;  
}

function addGoUrlParam(pName, pValue)
{
  var vParam = new GoUrlParam(pName, pValue);    
  this.parametros.push(vParam);
}

function submitGoUrl()
{
  var vForm = document.createElement("form");
  vForm.action = this.action;
  vForm.method = this.method;
  vForm.target = this.target;
  
  for (var param in this.parametros)
  {
    var vParam = document.createElement("input");
    vParam.type = "hidden";
    vParam.name = this.parametros[param].name;
    vParam.value = this.parametros[param].value;
    vForm.appendChild(vParam);
  }
  
  document.body.appendChild(vForm);
  vForm.submit();
}