// Ustawienie wartości początkowej określającej
// czy sortowanie może się odbyć
var is_busy = false;

// Funkcja odpowiedzialna za posortowanie wskazanej kolumny
// względem zadanych parametrów
function MakeSortable(row, number, mode)
{
    // Jeżeli można sortować po wskazanej kolumnie
    if(is_busy == false)
    {
        // Zablokowanie możliwości sortowania danych za pomocą innych parametrów
        is_busy = true;
        
        // Wyświetlenie paska oczekiwania na posortowanie danych
        $("div[rel='vcmSortTableLoader']").css("visibility", "visible");

        // Pobranie wszystkich wierszy tabelki
        var all_rows = $(row).parent().find("tr");

        // Pobranie wszystkich wierszy, które podlegać będą sortowaniu
        var sortable_rows = $(row).parent().find("tr[rel!='vcmSortTable']");
    
        // Pobranie do lokalnej tablicy wartości, według których ma się
        // odbywać sortowanie
        var sortable_values = new Array();
    
        // Przepisanie wartości, według których ma się odbywać sortowanie
        for(var i = 0; i < sortable_rows.length; i++)
            sortable_values[i] = $(sortable_rows[i]).find("td").eq(number).text();

        // Ukrycie wierszy, które mają być posortowane
        $(sortable_rows).css("visibility", "hidden");
    
        // Usunięcie nieposortowanych wierszy
        $(row).parent().find("tr[rel!='vcmSortTable']").remove();

        // Dla każdego znalezionego wiersza
        for(var i = 0; i < sortable_values.length; i++)
            for(var j = i+1; j < sortable_values.length; j++)
            {
                if(!isNaN(sortable_values[i]) && !isNaN(sortable_values[j]))
                {
                    // Pobranie tymczasowej wartości A
                    var a = parseFloat(sortable_values[i]);

                    // Pobranie tymczasowej wartości B
                    var b = parseFloat(sortable_values[j]);
                }
                else
                {
                    // Pobranie tymczasowej wartości A i zamiana znaków na małe
                    var a = sortable_values[i].toLowerCase();
                    // Podmiana polskich liter w tymczasowej zmiennej A
                    a = a.replace('ś', 's').replace('ą', 'a').replace('ę', 'e').replace('ć', 'c').replace('ź', 'z').replace('ń', 'n').replace('ż', 'z').replace('ł', 'l').replace('ó', 'o').replace('"', '');

                    // Pobranie tymczasowej wartości B i zamiana znaków na małe
                    var b = sortable_values[j].toLowerCase();
                    // Podmiana polskich liter w tymczasowej zmiennej B
                    b = b.replace('ś', 's').replace('ą', 'a').replace('ę', 'e').replace('ć', 'c').replace('ź', 'z').replace('ń', 'n').replace('ż', 'z').replace('ł', 'l').replace('ó', 'o').replace('"', '');
                }

                if(mode == 1)
                {
                    // Jeżeli należy dokonać zmiany
                    if(a < b)
                    {
                        // Podmiana wartości w liście
                        var t = sortable_values[i];
                        sortable_values[i] = sortable_values[j];
                        sortable_values[j] = t;


                        // Podmiana wierszy tablicy
                        t = sortable_rows[i];
                        sortable_rows[i] = sortable_rows[j];
                        sortable_rows[j] = t;
                    }
                }
            
                if(mode == 0)
                {
                    // Jeżeli należy dokonać zmiany
                    if(a > b)
                    {
                        // Podmiana wartości w liście
                        var t = sortable_values[i];
                        sortable_values[i] = sortable_values[j];
                        sortable_values[j] = t;


                        // Podmiana wierszy tablicy
                        t = sortable_rows[i];
                        sortable_rows[i] = sortable_rows[j];
                        sortable_rows[j] = t;
                    }
                }
            }
        
        // Dopisanie do tablicy posortowanych elementów
        for(var i = 0; i < sortable_rows.length; i++)
        {
            // Dodanie posortowanych wierszy
            $(row).parent().append("<tr>" + $(sortable_rows[i]).html() + "</tr>");
        }
    
        var my_rows = $(row).parent().find("tr");
    
        for(var i = 1; i < my_rows.length; i+=2)
            $(my_rows[i]).addClass("color");

        // Wyświetlenie posortowaych wierszy
        $(sortable_rows).css("visibility", "visible");
    
        // Odblokowanie możliwości sortowania
        is_busy = false;
        
        // Ukrycie paska oczekiwania na posortowanie danych
        $("div[rel='vcmSortTableLoader']").css("visibility", "hidden");
    }
}

// Funkcja odpowiedzialna za dodanie przycisków odpowiedzialnych za sortowanie
function AddButtons(row, obj, number)
{
    // Dodanie do odpowiednich kolumn przycisków
    // i zdarzeń za pomocą których będzie odbywać się sortowanie
    $(obj).html   (
                                '<div class="sortowanie">' +
                                    '<span rel="SortUp" class="up">&nbsp;</span>' +
                                    '<span rel="SortDown" class="down">&nbsp;</span>' +
                                '</div>' +
                                $(obj).html()
                    );

    // Dodanie obsługi zdarzenia sortowania
    $(obj).find("span[rel='SortUp']:first").click(function()
    {
        MakeSortable(row, number, 0);
    });

    // Dodanie obsługi zdarzenia sortowania
    $(obj).find("span[rel='SortDown']:first").click(function()
    {
        MakeSortable(row, number, 1);
    });
}

$(document).ready(function(){
   // Po załadowaniu strony następuje dołączenie do odpowiednich nagłówków przycisków
   // odpowiedzialnych zadostarczenie metod sortujących

   // Odnalezienie wierszów tabel, wg których powinno odbywać się sortowanie
   var rows = $("tr[rel='vcmSortTable']");

   // Dla każdej komórki tabeli
   for(var i = 0; i < rows.length; i++)
   {
       // Pobranie wszystkich nagłówków
       var ths = $(rows[i]).find("th");

       // Pobranie ilości wszystkich nagłówków
       var th_count = ths.length;

       // Dla każdego znalezionego nagłówka
       for(var j = 0; j < th_count; j++)
       {
           // Sprawdzenie, czy kolumna ma być sortowana
           if($(ths[j]).attr("rel") == "vcmSortTable")
           {
               // Dodanie przycisków do obsługi sortowania
               AddButtons(rows[i], ths[j], j);
           }
       }
       
       // Pobranie wszystkich wierszy tabeli
       var all_rows = $(rows[i]).parent().find("tr");

       // Pokolorowanie przycisków
       for(var k = 1; k < all_rows.length; k+=2)
           $(all_rows[k]).addClass("color");
   }
 });


