if (window.addEventListener)
{ 
   window.addEventListener("load", handbook_load, false);
}
else if (window.attachEvent)
{ 
   window.attachEvent("onload", handbook_load);
}
var doneload = false;
var tables = new Array();
var randomnumber;

function handbook_load()
{
   //find all tables we are interested in
   for(var i = 0; i < document.forms.length; i++)
   {
      if(document.forms[i].name == 'table_serve')
      {
         handbook_add_table(document.forms[i]);
      }
   }
   
   if(tables.length > 0)
   {
      handbook_request_table(tables[0]);
   }
   else
   {
      doneload = true;
   }
}


//take array and create larger one!
function handbook_add_table(noder)
{
   var curr_length = tables.length;
   var curr_array = tables;
   
   tables = new Array(curr_length+1);
   
   for(var i = 0; i < curr_array.length; i++)
   {
      tables[i] = curr_array[i];
   }
   
   tables[curr_length] = noder;
}

function handbook_request_table(pagenode)
{
   var parameters = '';
   randomnumber = Math.floor(Math.random()*10001)
   //get hidden nodes from form which hold parameters for request
   for(var i = 0; i < pagenode.elements.length; i++)
   {
      if(pagenode.elements[i].nodeName == 'INPUT')
      {
         if(pagenode.elements[i].getAttribute('type') == 'hidden')
         {
            if(parameters.length == 0)
            {
               parameters = parameters + pagenode.elements[i].getAttribute('name') + '=' + encodeURIComponent(pagenode.elements[i].getAttribute('value'));
            }
            else
            {
               parameters = parameters + '&' + pagenode.elements[i].getAttribute('name') + '=' + encodeURIComponent(pagenode.elements[i].getAttribute('value'));
            }
         }
      }
   }
   
   parameters = parameters + '&' + 'rand=' + randomnumber;
   
   var req = handbook_getRequest();
   if(securedTableServe())
   {
      req.open("POST", "https://www."+gethostTableServe()+".ac.uk/Teaching/coursemap/table-serve.jsp", true);
   }
   else
   {
      req.open("POST", "http://www."+gethostTableServe()+".ac.uk/Teaching/coursemap/table-serve.jsp", true);
   }
   req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
   req.onreadystatechange = function() { handbook_submitStages(req, pagenode); };
   
   //alert(parameters);

   req.send(parameters);
}


function securedTableServe()
{
   var proto = location.protocol;
   
   if(proto == 'https:')
   {
      return true;
   }
   else
   {
      return false;
   }
}

function gethostTableServe()
{
   var urler = location.href;
   
   return urler.substring((urler.indexOf('www.')+4),(urler.indexOf('.ac.uk')));
}


// Get a request object to interact with the server.
function handbook_getRequest()
{
   if (window.XMLHttpRequest) return new XMLHttpRequest()
   if (! window.ActiveXObject) return null
   try
   {
      return new ActiveXObject("Msxml2.XMLHTTP")
      return new ActiveXObject("Microsoft.XMLHTTP")
   }
   catch (e) { }
   return null
}


function handbook_submitStages(req, pagenode)
{
   if (req.readyState == 4)
   {
      //alert(req.status);
      if(req.status == 200)
      {
         //Save successful
         //var xmldoc = req.responseXML;
         //Check that the status is ok
         //Get status tag
         //var statusnode = xmldoc.getElementsByTagName('status')[0];
         pagenode.innerHTML = '';
         
         pagenode.innerHTML = req.responseText;
         
         pollDomComplete();
        /*  handbook_remove_table();
         
         if(tables.length > 0)
         {
            handbook_request_table(tables[0]);
         } */
      }
      else
      {
         //Insert error message into document
         
         pagenode.innerHTML = '';
         
         pagenode.innerHTML = 'Error '+req.status;
      }
   }
}


function pollDomComplete()
{
   //console.log(document.getElementById('rand'+randomnumber))
   if(document.getElementById('rand'+randomnumber))
   {
      handbook_remove_table();
      
      if(tables.length > 0)
      {
         handbook_request_table(tables[0]);
      }
   }
   else
   {
      setTimeout('pollDomComplete()', 20);
   }
}


function handbook_remove_table(noder)
{
   var curr_length = tables.length;
   var curr_array = tables;
   
   tables = new Array(curr_length-1);
   
   for(var i = 1; i < curr_array.length; i++)
   {
      tables[i-1] = curr_array[i];
   }
   
   if(tables.length == 0)
   {
      doneload = true;
   }
}