var xmlHttpSelect = createXmlHttpRequestObject();

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) {}
    }
  }
  // zwraca stworzony obiekt albo wyświetla komunikat o błędzie
  if (!xmlHttp)
    alert("Error during creating XMLHttpRequest object.");
  else 
    return xmlHttp;
}

function SelecthandleRequestStateChange() 
{
  // kiedy readyState ma wartość 4, jesteśmy gotowi do odebrania odpowiedzi z serwera
  if (xmlHttpSelect.readyState == 4) 
  {
    // kontynuuje tylko, gdy status HTTP ma wartość "OK"
    if (xmlHttpSelect.status == 200) 
    {    
      try
      {     
        // przetwarza wiadomość z serwera
        SelecthandleServerResponse();
      }
      catch(e)
      {
        // komunikat o błędzie
        alert("Error reading the response: " + e.toString());
      }
    } 
    else
    {
      // wyświetla wiadomość o statusie
      alert("Problem przy pobieraniu danych:\n" + xmlHttp.statusText);
    }
  }
}

// obsługuje odpowiedź otrzymaną z serwera
function SelecthandleServerResponse()
{
  // pobiera odpowiedź serwera
  var xmlResponse = xmlHttpSelect.responseXML;
  // wyłapywanie potencjalnych błędów przez IE i Operę
  if (!xmlResponse || !xmlResponse.documentElement)
    throw("Niepoprawna struktura XML:\n" + xmlHttpSelect.responseText);
  // wyłapywanie potencjalnych błędów przez Firefox
  var rootNodeName = xmlResponse.documentElement.nodeName;
  if (rootNodeName == "parsererror") throw("Niepoprawna struktura XML");
  // pobiera element document pliku XML
  xmlRoot = xmlResponse.documentElement;  

  idArray = xmlRoot.getElementsByTagName("checkbox");
  var limit = idArray.length; 

  var button = document.getElementById("CompareBtn");

    //if 3 checked
    if (limit == 3) {
    
      var f = document.getElementById("result"); 
      var c = f['ptc[]'];

      for(var i = 0; i < c.length; i++) {

        for (var j = 0; j < limit; j++) {
        
          if (c[i].checked == false) {
            if (c[i].value != idArray.item(0).firstChild.data) {
              c[i].disabled = true;
            } else c[i].disabled = false;        
        
          }
          
        }
      
      }
    //if 0,1,2
    } else {
    
      var f = document.getElementById("result"); 
      var c = f['ptc[]'];

      for(var i = 0; i < c.length; i++) {

        for (var j = 0; j < limit; j++) {
        
          if (c[i].checked == false) {
            if (c[i].value != idArray.item(0).firstChild.data) {
              c[i].disabled = false;
            }         
        
          }
          
        }
      
      }    
    
    }        
  
   
  if ((limit >= 2) && (limit <= 3)) {
    
      button.value = 'CompareON';
      
  } else {
  
      button.value = 'CompareOFF';
     
  }  
  
  /*
    var responseArray = xmlRoot.getElementsByTagName("response");
    var rlimit = responseArray.length;
    
    if (rlimit == 1) {
    
      var response = responseArray.item(0).firstChild.data;
   
      if (response != 'empty') {
   
        var bcArray = xmlRoot.getElementsByTagName("badcheckbox");
        var blimit = bcArray.length;
      
        if (blimit == 1) {
      
          var bc = bcArray.item(0).firstChild.data;
          var f = document.getElementById("result"); 
          var c = f['ptc[]'];

          for(var i = 0; i < c.length; i++) {
            //check only checked
            if (c[i].value == bc) c[i].checked = false;
          }        
   
        }
    
        alert(response);
    
      }
    
    }  
    
    */

//  var f = document.getElementById("result"); 
//  var c = f['ptc[]'];
  
//  for(var i = 0; i < c.length; i++) {
//    c[i].disabled = false;
//  }   
  
}

function myselect(id) {
  // kontynuuje, jeśli obiekt xmlHttp nie jest pusty
  if (xmlHttpSelect)
  {
    // próbuje połączyć się z serwerem
    try
    {
      // początkuje odczyt pliku z serwera
      xmlHttpSelect.open("GET", "/ajax/select.php?id="+id, true);
      xmlHttpSelect.onreadystatechange = SelecthandleRequestStateChange;
      xmlHttpSelect.send(null);
    }
    // w razie niepowodzenia wyświetla komunikat o błędzie
    catch (e)
    {
      //alert("Nie mogę połączyć się z serwerem:\n" + e.toString());
    }
  }
    
}