
  var sortingXMLHTTP;
  var CurrentID = '';
  
  function enableSorting(window)
  {
    var lists = document.getElementsByTagName('ul');
    for (var i = 0; i < lists.length; i++)
    {
      if (lists[i].className == 'sortable')
      {
        Sortable.create(lists[i].getAttribute('id'), {tag:"li"});
        var links = lists[i].getElementsByTagName('li');
        for (var x = 0; x < links.length; x++)
        {
          link = links[x].getElementsByTagName('a');
          link = link[0];
          link.className = link.getAttribute('href');
          link.style.cursor = 'move';
          link.removeAttribute('href');
        }
      }
    }
    
    var globalLinks = document.getElementsByTagName('a');
    for (var i = 0; i < globalLinks.length; i++)
    {
      if (globalLinks[i].getAttribute('href') == 'javascript:enableSorting(this);')
      {
        globalLinks[i].setAttribute('href', 'javascript:disableSorting(this);');
        globalLinks[i].firstChild.nodeValue = 'wyłącz sortowanie i zapisz zmiany';
      }
    }
  }

  function serializeListItems(listItems)
  {
    // ustalanie kolejności "itemów" na liście :)
    var serialized = '';
    if ((listItems == null) || (listItems.length == 0))
    {
      return '';
    }
    for (i = 0; i < listItems.length; i++)
    {
      serialized = serialized+listItems[i].getAttribute('id')+'|';
    }
    return serialized;
  }
  
  function disableSorting()
  {
    // włączanie sortowania
    var lists = document.getElementsByTagName('ul');
    for (i = 0; i < lists.length; i++)
    {
      if (lists[i].className == 'sortable')
      {
        var globalListID = lists[i].getAttribute('id');
        Sortable.destroy(lists[i]);
        var links = lists[i].getElementsByTagName('li');
        for (var x = 0; x < links.length; x++)
        {
          link = links[x].getElementsByTagName('a');
          link = link[0];
          link.style.cursor = '';
          link.setAttribute('href', link.className);
          link.className = '';
        }
      }
    }
    // zmiana wyglądu łącza aktywującego
    var globalLinks = document.getElementsByTagName('a');
    for (var i = 0; i < globalLinks.length; i++)
    {
      if (globalLinks[i].getAttribute('href') == 'javascript:disableSorting(this);')
      {
        globalLinks[i].setAttribute('href', '#wait');
        globalLinks[i].firstChild.nodeValue = '<czekaj, trwa zapisywanie zmian...>';
      }
    }
    // zapisywanie kolejności
    var listOrder = 'order='+serializeListItems(links)+'&list='+globalListID;
    if (globalListID == 'authorities_groupList')
    {
      sortingXMLHTTP.open('POST', 'authorities/ajaxSaveSorting.php', true);
    }
    else
    {
      sortingXMLHTTP.open('POST', 'units/ajaxSaveSorting.php', true);
    }
    sortingXMLHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    sortingXMLHTTP.onreadystatechange = handleReadyStateChange;
    sortingXMLHTTP.send(listOrder);
  }
  
  function deleteMember(identifier)
  {
    if (CurrentID != '') 
    {
      alert('Inne żądanie jest w trakcie przetwarzania, poczekaj na ukończenie zadania.');
    }
    else if (confirm('Czy chcesz usunąć tą osobę z grupy?'))
    {
      sortingXMLHTTP.open('POST', 'authorities/ajaxDeleteMember.php', true);
      sortingXMLHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      sortingXMLHTTP.onreadystatechange = handleDeleteRSChange;
      CurrentID = identifier;
      sortingXMLHTTP.send('id='+identifier);
    }    
  }

  function undeleteMember(identifier)
  {
    if (CurrentID != '') 
    {
      alert('Inne żądanie jest w trakcie przetwarzania, poczekaj na ukończenie zadania.');
    }
    else if (confirm('Czy chcesz przywrócić tą osobę do grupy?'))
    {
      sortingXMLHTTP.open('POST', 'authorities/ajaxDeleteMember.php', true);
      sortingXMLHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      sortingXMLHTTP.onreadystatechange = handleDeleteRSChange;
      CurrentID = identifier;
      sortingXMLHTTP.send('id='+identifier+'&action=undelete');
    }    
  }
  
  function createHTTPObject()
  {
    var LocalHTTP;
    try
    {
      LocalHTTP = new XMLHttpRequest();
    }
    catch (e)
    {
      var Versions = 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 < Versions.length; i++)
      {
        try
        {
          LocalHTTP = new ActiveXObject(Versions[i]);
        }
        catch (e) {}
      }
    }
      if (!LocalHTTP) alert("Błąd podczas ładowania obiektu żądania HTTP: Twoja przeglądarka nie obsługuje niezbędnych technologii.");
      else return LocalHTTP;
  }
  
  function handleReadyStateChange()
  {
    if (sortingXMLHTTP.readyState == 4)
    {
      if (sortingXMLHTTP.status == 200)
      {
        var response = sortingXMLHTTP.responseText;
        if (response != '')
          alert(response);
        var globalLinks = document.getElementsByTagName('a');
        for (var i = 0; i < globalLinks.length; i++)
        {
          if (globalLinks[i].getAttribute('href') == '#wait')
          {
            globalLinks[i].setAttribute('href', 'javascript:enableSorting(this);');
            globalLinks[i].firstChild.nodeValue = 'sortowanie listy';
          }
        }
      }
    }    
  }

  function handleDeleteRSChange()
  {
    if (sortingXMLHTTP.readyState == 4)
    {
      if (sortingXMLHTTP.status == 200)
      {
        var response = sortingXMLHTTP.responseText;
        if (response != '')
        {
          alert(response);
        }
        else
        {
          var links = document.getElementsByClassName(CurrentID)[0];
          if (links.style.textDecoration == 'line-through')
          {
            links.style.textDecoration = '';
            var links = document.getElementsByClassName(CurrentID+'/dl')[0];
            links.firstChild.nodeValue = '<usuń>';
            links.setAttribute('href', 'javascript:deleteMember("'+CurrentID+'");');
          }
          else
          {
            links.style.textDecoration = 'line-through';
            var links = document.getElementsByClassName(CurrentID+'/dl')[0];
            links.firstChild.nodeValue = '<przywróć>';
            links.setAttribute('href', 'javascript:undeleteMember("'+CurrentID+'");');
          }
        }
        CurrentID = '';
      }
    }        
  }
  
  sortingXMLHTTP = createHTTPObject();
