// przechowuje obiekt XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();
// przechowa adres zdalnego serwera
var serverAddress = "page.php";
// kiedy ma wartość true, wyświetla szczegółowy opis błędu
var showErrors = true;
var cache = new Array();
var id = new Array();
var kt = '';
// tworzy obiekt XMLHttpRequest
function createXmlHttpRequestObject() 
{
  // przechowa odwołanie do obiektu XMLHttpRequest
  var xmlHttp;
  // powinno działać dla wszystkich przeglądarek z wyjątkiem IE6 i starszych
  try
  {
    // próbuje stworzyć obiekt XMLHttpRequest
    xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
    // zakładając, że IE6 lub starsza
    var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    // sprawdza każdy prog id aż któryś zadziała
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) 
    {
      try 
      { 
        // próbuje stworzyć obiekt XMLHttpRequest
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      } 
      catch (e) {} // ignoruje potencjalne błędy
    }
  }
  // zwraca stworzony obiekt albo wyświetla komunikat o błędzie
  if (!xmlHttp)
    displayError("Błąd podczas tworzenia obiektu XMLHttpRequest.");
  else 
    return xmlHttp;
}
// funkcja wyświetlająca komunikat o błędzie
function displayError($message)
{
  // ignoruje błąd, jeśli zmienna showErrors ma wartość false
  if (showErrors)
  {
    // wyłącza wyświetlanie błędów
    showErrors = false;
    // wyświetla wiadomość o błędzie
    alert("Wystąpił błąd: \n" + $message);
    // ponawia weryfikację po 10. sekundach
    //setTimeout("uzupelnij();", 5000);
  }
}

// funkcja obsługuje uzupelnienie dowolnego pola
function uzupelnij(sel,k)
{
kt = k; 
//alert(sel.selectedIndex);
id[kt] = sel.options[sel.selectedIndex].value;
cache.push("/porownanie/szczegoly_projektu_xml&rid="+id[kt]+"/");
// kontynuuje tylko jeśli obiekt xmlHttp nie jest pusty
  if (xmlHttp)
  {
    // próbuje połączyć się z serwerem
    try
    {
      // kontynuuje jeśli obiekt XMLHttpRequest jest wolny
      if ((xmlHttp.readyState == 4 || xmlHttp.readyState == 0) && cache.length>0)
      {
        // pobiera nowe parametry z pamięci
		var cacheEntry = cache.shift();
        // wysyła żądanie weryfikacji na serwer
		if(id[kt] == '')id[kt] = '0';
	      	xmlHttp.open("GET", cacheEntry, true);
      		xmlHttp.onreadystatechange = handleRequestStateChange;
      		xmlHttp.send(null);
      }
    }
    catch (e)
    {
      // wyświetla komunikat o błędzie, jeśli nie uda się połączyć z serwerem
      displayError(e.toString());
    }
  }
}
// funkcja obsługująca odpowiedź HTTP
function handleRequestStateChange() 
{
  // kiery readyState ma wartość 4, pobieramy odpowiedź serwera
  if (xmlHttp.readyState == 4) 
  {
    // kontynuuje, jeśli status HTTP jest "OK"
    if (xmlHttp.status == 200) 
    {
      try
      {
        // czyta odpowiedź serwera
        readResponse();
      }
      catch(e)
 
      {
        // wyświetla komunikat o błędzie
        displayError(e.toString());
      }
    }
    else
    {
      // wyświetla komunikat o błędzie
      displayError(xmlHttp.statusText);
    }
  }
}
// czyta odpowiedź serwera
function readResponse()
{

  // odbiera odpowiedź serwera
  var response = xmlHttp.responseText;
  // błąd serwera?
  if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0
    || response.length == 0)
    throw(response.length == 0 ? "Server error." : response);
  // pobiera odpowiedź w formacie XML (zakładając, że jest to poprawny plik XML)
  responseXml = xmlHttp.responseXML; //alert(xmlHttp.response.nodeName);
  // pobiera element document
  // pobiera element document pliku XML
  var xmlRoot = responseXml.documentElement; 
  // pobiera tablice
  var pola = xmlRoot.getElementsByTagName("pole");// alert(pola[5].childNodes[0].firstChild.nodeValue);
//alert(response);
  for(j=0; j<pola.length; j++){
	try{
		document.getElementById(pola[j].childNodes[0].firstChild.nodeValue+'__'+kt).innerHTML = 'brak danych';
		document.getElementById(pola[j].childNodes[0].firstChild.nodeValue+'__'+kt).innerHTML = pola[j].childNodes[1].firstChild.nodeValue;
		
	}
	catch(e){}
  }
  //setTimeout("uzupelnij("+id[kt]+","+kt+");", 500)
}


