//Objeto Manejador de hilos de conexiones a Servidor
app.pserver = new emptyobj();
app.pserver.connections = new Array;
//Numero de conexiones paralelas permitidas
app.pserver.nRequests = 5;
app.pserver.queue_content = new Array;
app.pserver.queue_script = new Array;
app.pserver.stack = new Array;

for(var x=0;x<app.pserver.nRequests;x++) {
  app.pserver.stack.push(x);
}
 
app.pserver.req = function(script, content,sync) {
  //Revisa si existe conexiones disponibles en la pila
  if(app.pserver.stack.length!=0) {
    //extrae una conexion disponible de la pila y executa
    var connection = app.pserver.stack.pop();
    if (window.XMLHttpRequest) {
		  app.pserver.connections[connection]=new XMLHttpRequest();
	  }
		else if (window.ActiveXObject) {
		  app.pserver.connections[connection]=new ActiveXObject("Microsoft.XMLHTTP");   
	  }
		if (app.pserver.connections[connection]) {
			if(script.indexOf('.php') != -1) {
				app.pserver.connections[connection].open("POST",script, sync ? sync : true);
			}
			else {
				app.pserver.connections[connection].open("POST",script+".pl", sync ? sync : true);
			}
			
			app.pserver.connections[connection].setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	    app.pserver.connections[connection].onreadystatechange = function() 
			{
				if (app.pserver.connections[connection].readyState==4) {
					if (app.pserver.connections[connection].status==200) {
						eval(app.pserver.connections[connection].responseText);
						//Coloca nuevamente la conexion en la pila
						app.pserver.stack.push(connection);
						//Verifica si existe algun elemento en cola para ser ejecutado
						if(app.pserver.queue_script.length!=0) {
							app.pserver.req(app.pserver.queue_script.shift(),app.pserver.queue_content.shift());
						}
					} 
					else {
						alert("Error:" + app.pserver.connections[connection].status
							+ "-" + app.pserver.connections[connection].statusText);
   				  app.pserver.stack.push(connection);
					}
      	}
      }
			
      app.pserver.connections[connection].send(content);
		}
	}
	else {
	//coloca la peticion en espera en la cola
		app.pserver.queue_content.push(content);
		app.pserver.queue_script.push(script);
	}
}

