
var xmlHttp = createXmlHttpRequestObject();

var updateInterval = 5; // how many seconds to wait to get new message

var errorRetryInterval = 30; // seconds to wait after server error

var debugMode = true;

var loader = "<div id='loader'><img src='images/loader.gif'></div>";

function createXmlHttpRequestObject() 
{
  var xmlHttp;
  try
  {
    xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
    var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) 
    {
      try 
      { 
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      } 
      catch (e) {}
    }
  }
  if (!xmlHttp)
    alert("Error creating the XMLHttpRequest object.");
  else 
    return xmlHttp;
}

function display($message)
{
  myDiv = document.getElementById("formDiv");
  myDiv.innerHTML = $message;

}

function displayError($message)
{
  display("Error retrieving the news message! Will retry in " +  errorRetryInterval + " seconds." +  (debugMode ? "<br/>" + $message : ""));
}


function getitem(tid,qid,i)
{
  if (xmlHttp)
  {
    try
    {
      display(loader);
	var serverAddress = (tid > 0)? "test/getitem.php?act=getitem&tid=" + tid +"&qid=" + qid +"&item=" + i : "test/getitem.php?act=getranditem&qid=" + qid +"&item=" + i;
      xmlHttp.open("GET", serverAddress, true);
      xmlHttp.onreadystatechange = handleGettingItem;
      xmlHttp.send(null);
    }
    catch(e)
    {
      displayError(e.toString());
    }
  }
}

function handleGettingItem() 
{
  if (xmlHttp.readyState == 4) 
  {
    if (xmlHttp.status == 200) 
    {
      try
      {
        getItem();
      }
      catch(e)
      {
        displayError(e.toString());
      }
    } 
    else
    {
      displayError(xmlHttp.statusText);   
    }
  }
}

function getItem()
{
  var response = xmlHttp.responseText;
  if (response.indexOf("ERRNO") >= 0 || response.indexOf("error") >= 0  || response.length == 0)
    throw(response.length == 0 ? "Server error." : response);
  display(response);


 var JMooltips = new Tips($$('.info-icon'), { hideDelay: 2000, 	offsets: {x: -16, y: -16}, fixed: true, className: 'testTip' }); 

}


function doitem(f)
{
  if (xmlHttp)
  {
    try
    {
	var params = $('myForm').toQueryString();
      display(loader);
	var serverAddress = f.action;
	xmlHttp.open("POST", serverAddress, true);
      xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      xmlHttp.onreadystatechange = handleDoItem;
      xmlHttp.send(params);

    }
    catch(e)
    {
      displayError(e.toString());
    }
  }
}

function handleDoItem() 
{
  if (xmlHttp.readyState == 4) 
  {
    if (xmlHttp.status == 200) 
    {
      try
      {
        doItem();
      }
      catch(e)
      {
        displayError(e.toString());
      }
    } 
    else
    {
      displayError(xmlHttp.statusText);   
    }
  }
}


function doItem()
{
  var response = xmlHttp.responseText;
  if (response.indexOf("ERRNO") >= 0 || response.indexOf("error") >= 0  || response.length == 0)
    throw(response.length == 0 ? "Server error." : response);

    responsedata = response.split(",");

    if (responsedata[0] > 0)
    {
	display("<div id='responseOK'>La risposta alla domanda #" + responsedata[1] + " è stata memorizzata</div>");
	itemnum = responsedata[1].trim();
	var item = document.getElementById(itemnum);
	if ( $(item) ) $(item).fireEvent('onsubm');
    }
	else
    {
	display("<div id='responseKO'>Non è stata inviata alcuna risposta alla domanda #" + responsedata[1] + "!</div>");
	itemnum = responsedata[1].trim();
	var item = document.getElementById(itemnum);
	if ( $(item) ) $(item).fireEvent('disableselected');
    }

}


// cancella la risposta sul server

function cancelcheck(item, qid)
{
  if (xmlHttp)
  {
    try
    {
 	display(loader)
      xmlHttp.open("GET", "test/getitem.php?act=delitem&qid=" + qid +"&item=" + item, true);
      xmlHttp.onreadystatechange = handleDelItem;
      xmlHttp.send(null);
    }
    catch(e)
    {
      displayError(e.toString());
    }
  }
}

function handleDelItem() 
{
  if (xmlHttp.readyState == 4) 
  {
    if (xmlHttp.status == 200) 
    {
      try
      {
        delItem();
      }
      catch(e)
      {
        displayError(e.toString());
      }
    } 
    else
    {
      displayError(xmlHttp.statusText);   
    }
  }
}


function delItem()
{
  var response = xmlHttp.responseText;
  if (response.indexOf("ERRNO") >= 0 || response.indexOf("error") >= 0  || response.length == 0)
    throw(response.length == 0 ? "Server error." : response);

    responsedata = response.split(",");

    if (responsedata[0] > 0)
    {
	display("<div id='responseOK'>La risposta alla domanda #" + responsedata[1] + " è stata cancellata</div>");
	itemnum = responsedata[1].trim();
	var item = document.getElementById(itemnum);
	if ( $(item) )
      {
	  $(item).fireEvent('cancelcheck');
	  $(item).fireEvent('disableselected');
	}
    }
	else
    {
	display("<div id='responseKO'>Non ho trovato la risposta alla domanda #" + responsedata[1] + "!</div>");
	itemnum = responsedata[1].trim();
	var item = document.getElementById(itemnum);
	if ( $(item) ) $(item).fireEvent('disableselected');
    }

}



function dbtest(tid)
{
  if (xmlHttp)
  {
    try
    {
  	display(loader)
      xmlHttp.open("GET", "test/getitem.php?act=dbtest&tid=" + tid, true);
      xmlHttp.onreadystatechange = handledbTest;
      xmlHttp.send(null);

    }
    catch(e)
    {
      displayError(e.toString());
    }
  }
}

function handledbTest() 
{
  if (xmlHttp.readyState == 4) 
  {
    if (xmlHttp.status == 200) 
    {
      try
      {
        serverdbtest();
      }
      catch(e)
      {
        displayError(e.toString());
      }
    } 
    else
    {
      displayError(xmlHttp.statusText);   
    }
  }
}


function serverdbtest()
{
  var response = xmlHttp.responseText;
  if (response.indexOf("ERRNO") >= 0 || response.indexOf("error") >= 0  || response.length == 0)
    throw(response.length == 0 ? "Server error." : response);

    if (response.trim() != 0)
    {
		window.location = "test.php?act=submit&t_id=" + response.trim();
    }
	else
    {
		display("<div id='responseKO'>Vi sono domande senza risposta!</div>");
    }

 
}

// submit random test


function dbrandtest()
{
  if (xmlHttp)
  {
    try
    {
  	display(loader)
      xmlHttp.open("GET", "test/getitem.php?act=dbrandtest", true);
      xmlHttp.onreadystatechange = handledbRandTest;
      xmlHttp.send(null);

    }
    catch(e)
    {
      displayError(e.toString());
    }
  }
}

function handledbRandTest() 
{
  if (xmlHttp.readyState == 4) 
  {
    if (xmlHttp.status == 200) 
    {
      try
      {
        serverdbRandtest();
      }
      catch(e)
      {
        displayError(e.toString());
      }
    } 
    else
    {
      displayError(xmlHttp.statusText);   
    }
  }
}


function serverdbRandtest()
{
  var response = xmlHttp.responseText;
  if (response.indexOf("ERRNO") >= 0 || response.indexOf("error") >= 0  || response.length == 0)
    throw(response.length == 0 ? "Server error." : response);

    if (response.trim() > 0)
    {
		window.location = "test.php?act=submitrand";
    }
	else
    {
		display("<div id='responseKO'>Vi sono domande senza risposta!</div>");
    }

 
}



// test a gruppi di domande


function getgroupitems(tid,gid,item,init)
{
  if (xmlHttp)
  {
    try
    {
      display(loader)
      xmlHttp.open("GET", "test/getgroupitems.php?act=getitems&tid=" + tid +"&gid=" + gid +"&item=" + item +"&init=" + init, true);
      xmlHttp.onreadystatechange = handleGettingGroupItems;
      xmlHttp.send(null);
    }
    catch(e)
    {
      displayError(e.toString());
    }
  }
}

function handleGettingGroupItems() 
{
  if (xmlHttp.readyState == 4) 
  {
    if (xmlHttp.status == 200) 
    {
      try
      {
        getGroupItems();
      }
      catch(e)
      {
        displayError(e.toString());
      }
    } 
    else
    {
      displayError(xmlHttp.statusText);   
    }
  }
}

function getGroupItems()
{
  var response = xmlHttp.responseText;

  if (response.indexOf("ERRNO") >= 0 || response.indexOf("error") >= 0  || response.length == 0)
    throw(response.length == 0 ? "Server error." : response);

  display(response);

 var JMooltips = new Tips($$('.info-icon'), { hideDelay: 2000, 	offsets: {x: -16, y: -16}, fixed: true, className: 'testTip' }); 

}


// invia le risposte del gruppo di domande

function dogroupitem(f)
{
  if (xmlHttp)
  {
    try
    {
	var params = $('myForm').toQueryString();
      display(loader);
	var serverAddress = f.action;
	xmlHttp.open("POST", serverAddress, true);
      xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      xmlHttp.onreadystatechange = handleDoGroupItems;
      xmlHttp.send(params);

    }
    catch(e)
    {
      displayError(e.toString());
    }
  }
}

function handleDoGroupItems() 
{
  if (xmlHttp.readyState == 4) 
  {
    if (xmlHttp.status == 200) 
    {
      try
      {
        doGroupItems();
      }
      catch(e)
      {
        displayError(e.toString());
      }
    } 
    else
    {
      displayError(xmlHttp.statusText);   
    }
  }
}


function doGroupItems()
{
  var response = xmlHttp.responseText;
  if (response.indexOf("ERRNO") >= 0 || response.indexOf("error") >= 0  || response.length == 0)
    throw(response.length == 0 ? "Server error." : response);

responsedata = response.split(",");
    

    if (responsedata[0].trim() == 'no')
    {
	display("<div id='responseOK'>Le risposte al gruppo di domande #" + responsedata[1] + " sono state memorizzate</div>");
	itemnum = responsedata[1].trim();
	var item = document.getElementById(itemnum);
	if ( $(item) ) $(item).fireEvent('onsubm');
    }
	else
    {
	display("<div id='responseKO'>Mancano ancora " + responsedata[0] + " risposte al gruppo di domande  #" + responsedata[1] + " !</div>");
	itemnum = responsedata[1].trim();
	var item = document.getElementById(itemnum);
	if ( $(item) ) $(item).fireEvent('disableselected');
    }

}

// cancella la risposta sul server

function cancelgroupcheck(item, gid)
{
  if (xmlHttp)
  {
    try
    {
	var params = $('myForm').toQueryString();
 	display(loader);
	var serverAddress = "test/getgroupitems.php?act=delitem&gid=" + gid +"&item=" + item;
	xmlHttp.open("POST", serverAddress, true);
      xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      xmlHttp.onreadystatechange = handleDelGroupItems;
      xmlHttp.send(params);
    }
    catch(e)
    {
      displayError(e.toString());
    }
  }
}

function handleDelGroupItems() 
{
  if (xmlHttp.readyState == 4) 
  {
    if (xmlHttp.status == 200) 
    {
      try
      {
        delGroupItems();
      }
      catch(e)
      {
        displayError(e.toString());
      }
    } 
    else
    {
      displayError(xmlHttp.statusText);   
    }
  }
}


function delGroupItems()
{
  var response = xmlHttp.responseText;
  if (response.indexOf("ERRNO") >= 0 || response.indexOf("error") >= 0  || response.length == 0)
    throw(response.length == 0 ? "Server error." : response);

    responsedata = response.split(",");

    if (responsedata[0] > 0)
    {
	display("<div id='responseOK'>Le risposte alle domande del gruppo #" + responsedata[1] + " sono state cancellate</div>");
	itemnum = responsedata[1].trim();
	var item = document.getElementById(itemnum);
	$(item).fireEvent('cancelcheck');
	$(item).fireEvent('disableselected');
    }
	else
    {
	display("<div id='responseKO'>Non ho trovato le risposte alle domande del gruppo #" + responsedata[1] + "!</div>");
	itemnum = responsedata[1].trim();
	var item = document.getElementById(itemnum);
	$(item).fireEvent('disableselected');
    }

}



window.addEvent('domready', function(){
			 
		var links = $$(".testbuttonlink");
		links.each(function(link, i){
			link.addEvent('click', function(e){
				this.addClass('itemselected');
				links.each(function(other, j){
					if (other != link){
						other.removeClass('itemselected');
					}
				});
			});
			link.addEvent('onsubm', function(e){
				this.addClass('itemsubmit');
			});
			link.addEvent('cancelcheck', function(e){
				this.removeClass('itemsubmit');
			});
			link.addEvent('disableselected', function(e){
				this.removeClass('itemselected');
			});
		});

});



