var con; //Variable que contiene el objeto conexión AJAX
var updateFreq = 5000;	//frecuencia de actualización de los agentes
var requestTimeout = 10000; //tiempo de timeout para peticiones al servidor web
var lastStatusCode;	//último estado de retorno de la petición AJAX, o -1 si timeout
var ajaxTimeout; //variable auxiliar para cancelar la función de timeout
var arrayAgentes = new Array();	//array con el estado de los agentes
var totalAgentes = 0; //número de agentes total obtenidos del servidor
var allinfo = true;
var func = "";

var hayAgentes = false; //Indica que no hay ningún agente conectado

// función para la creación del objeto para AJAX
function newXmlHttp(){
  var xmlHttp=null;
  if (window.ActiveXObject) 
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  else 
    if (window.XMLHttpRequest) 
      xmlHttp = new XMLHttpRequest();
  return xmlHttp;
}

//
function procesarAgentes()
{
	totalAgentes = 0;
	arrayAgentes = new Array();
	hayAgentes = false;
	
	if (con.readyState==4)
	{ 	
	    clearTimeout(ajaxTimeout);    
        var texto = con.responseText.replace(/(^\s*)|(\s*$)/g, "");
        agArray = texto.split(",");	
    			
	    for (i=1; i<agArray.length; i++)
		{arrayAgentes[totalAgentes++] = agArray[i].split("--");	}
    	
	    var ag = "";
    		
	    for (i=0; i<totalAgentes; i++)
	    {				    		        
            var agente = arrayAgentes[i];
            var vagente = new String(agente);
            var age = vagente.split(",");    
            
            var id = new String(age[0]); //obtenemos el identificador
            if (document.getElementById(id)!=null)
            {              
            if (age[1] == "0")//AGENTE ACTIVO                 
            { 
	            document.getElementById(id).style.display = "block";
	            document.getElementById(id+"img").src= urlAplicacion +"/images/foto_vendedor"+id+".gif";		      
	            if (allinfo)
	            {
	            document.getElementById(id+"estado").className = "t12VerdeBTab estado";
	            document.getElementById(id+"estado").innerHTML = "- LIBRE -";	
	            }
	            hayAgentes = true;		        		                		                        		        
            }
            if (age[1] == "-1") //AGENTE NO DISPONIBLE                          
	            document.getElementById(id).style.display = "none";		        
                        
            if (age[1] == "1")//AGENTE OCUPADO  
            { 
                document.getElementById(id).style.display = "block";                 
	            document.getElementById(id+"img").src= urlAplicacion + "/images/foto_vendedor"+id+"_off.gif";     		       
	            if (allinfo)
	            {
	            document.getElementById(id+"estado").className = "t12RojoBTab";		       
	            document.getElementById(id+"estado").innerHTML = "- OCUPADO -";				        
	            }
	            hayAgentes = true;		        		                		                       		       
            }
            }
	    } //cerramos for
    	
    	if (func!="")
    	    eval(func);
    		 
        if (document.getElementById("mensaje")!=null)
        {
            if (!hayAgentes)
	            document.getElementById("mensaje").style.display="none";   
	        else
	            document.getElementById("mensaje").style.display="none";  
    	}
	} //cerramos if		
	
	lastStatusCode = con.readyState;		
}

function generarLlamada(){
	//Función procesada en la respuesta del servidor de asterisk al solicitar una llamada.
	
}

// Función gestora del timeout al tratar de conectar al servidor.
function timeout(tm)
{
	clearTimeout(ajaxTimeout);
	con.abort();
	lastStatusCode = -1;
}

/* Ejecuta la llamada al servidor que pide el estado actual de los agentes 
 */
function getAgents(url){    
  if(url==''){
    return;
	}	
	con=newXmlHttp();	
	con.onreadystatechange = procesarAgentes;
	con.open("POST", url, true);	
	con.send(1);	//jp:error length required he cambiando el null por 1
	ajaxTimeout = setTimeout( "timeout(ajaxTimeout)" , requestTimeout); 
}

/* Obtiene los datos del formulario y los envía al servidor asterisk.
 * Ha de ser llamada en el momento en que el usuario pulsa el botón de llamada
 */
function placeACall(frm, url){ 	//frm: formulario del que obtener los datos
		
								//url: url a la que solicitar la llamada (astcall.php)
	if (url == ""){
		return;
	}

    //Como colisionan con el mismo nombre de en cruise_prices he tenido que usar var
	var nombre = frm.nombrec2c.value; //Nombre del usuario
	var telefono = frm.telefonoc2c.value;  //telefono al que desea ser llamado
	cuando = ""; //now: llamada a realizar ahora; later: llamada agendada
	horaLlamada = "";  //hora de la llamada, en caso de ser agendada
	minLlamada = "";   //minuto de la llamada, en caso de ser agendada
	diaLlamada = "";	//dia de la llamada, en caso de ser agendada
	mesLlamada = ""; //mes de la llamada, en caso de ser agendada
	anioLlamada = ""; //año de la llamada, en caso de ser agendada
	agRadio = "";	//identificador del agente, igual que llegó desde el servidor al array

//radiobutton eliges entre now y later
	/*cuandoObj = document.getElementsByName('cuando'); //se obtiene el momento de la llamada
	for (i=0; i<cuandoObj.length; i++){
		if (cuandoObj[i].checked)
			cuando = cuandoObj[i].value; 
	}*/
	
	//FIXME a piñón (later)
	cuando = "now";
//	horaLlamada = "18";  //hora de la llamada, en caso de ser agendada
//	minLlamada = "55";   //minuto de la llamada, en caso de ser agendada
//	diaLlamada = "14";	//dia de la llamada, en caso de ser agendada
//	mesLlamada = "11"; //mes de la llamada, en caso de ser agendada
//	anioLlamada = "07";
	
	agRadio = frm.agRadio.value;
	
//descomentar
	if(cuando == "later"){ //si es agendada, se obtiene la fecha y hora
		horaLlamada = frm.horaLlamada.value;
		minLlamada = frm.minLlamada.value;
		diaLlamada = frm.diaLlamada.value;
		mesLlamada = frm.mesLlamada.value;
		anioLlamada = frm.anioLlamada.value;
	} 

//Lo mismo es otro radiobutton
	/*agObj = document.getElementsByName("agRadio");  //agente seleccionado
	if (agObj.length > 0){
		for (i=0; i< agObj.length; i++){
			if(agObj[i].checked)
				agRadio = agObj[i].value;
		}
	}*/
	
	//GETData = url + "?" + "nombre=" + nombre + "&telefono=" + telefono + "&cuando=" + cuando + "&horaLlamada=" + horaLlamada + "&minLlamada=" + minLlamada + "&diaLlamada=" + diaLlamada + "&mesLlamada=" + mesLlamada + "&anioLlamada=" + anioLlamada + "&agRadio=" + agRadio; //se genera la URL con las variables para asterisk
    GETData = url + "&" + "nombre=" + nombre + "&telefono=" + telefono + "&cuando=" + cuando + "&horaLlamada=" + horaLlamada + "&minLlamada=" + minLlamada + "&diaLlamada=" + diaLlamada + "&mesLlamada=" + mesLlamada + "&anioLlamada=" + anioLlamada + "&agRadio=" + agRadio; //se genera la URL con las variables para asterisk
        
	con = newXmlHttp();
	con.onreadystatechange = generarLlamada;	
	con.open("GET", GETData, true); //se envían los datos al asterisk
	con.send(1); //null
}

/* bucle que llama al servidor asterisk para obtener los agentes. 
	Esta función ha de ser llamada al cargar el módulo 
	o la página. 
*/
function redrawAgents(){
	getAgents('/book/ajaxGateway.ashx');
	setTimeout("redrawAgents()", updateFreq); 
}

