
var last_sort = -1;

/* hier können die default Kopf und Fußzeilen der Tabelle angegeben werden ! */

var head_lines = 2;
var foot_lines = 1;

function sort_it(sort_was, sort_spalte)
{
    /* sort_was ...... Name der Tabelle */
    /* sort_spalte ... Nach welcher Spalte soll sortiert werden,  */
    /*                 bei mehrmalingen Aufruf selber Spalte wird die Sortierrichtung gedreht */
    /* (c) 2005 afu */


    to_sort= document.getElementById(sort_was);

    if (last_sort == sort_spalte)
        sort_down = !sort_down
    else
        sort_down = false;
    last_sort = sort_spalte;

    Zeilen = new Array();
    Zellen = new Array();
    Zeilen = to_sort.rows;
    Values  = new Array(Zeilen.length);
    Colours = new Array(Zeilen.length);
    RowCol = new Array(Zeilen.length);

    /* Array einlesen */
    foot_lines; // an Array anpassen

    Zellen = Zeilen[head_lines].cells;
    if(sort_spalte > Zellen.length)
    {
        alert("Es kann nicht nach Spalte " + sort_spalte + " sortiert werden, da nur " + Zellen.length + " Spalten vorhanden sind");
        return;
    }

    for(i=0; i<Zeilen.length; i++)
    {
        Zellen = Zeilen[i].cells;
        RowCol[i] = Zeilen[i].bgColor;

        Values[i]  = new Array(Zellen.length);
        Colours[i] = new Array(Zellen.length);
        for (j=0; j<Zellen.length; j++)
        {
            var one_node = Zellen[j].firstChild;

            if(one_node.nodeType == 3)
            {
                Values[i][j] = one_node.nodeValue;
                Colours[i][j] = null;
            }
            else if(one_node.nodeType == 1)
                {
                    Values[i][j] = one_node.firstChild.data;
                    Colours[i][j] = one_node.getAttribute("color");
                }
                else
                {
                    alert("type: " + one_node.nodeType);
                    alert("value: " + one_node.nodeValue);
                }
        }
    }

    /* sortieren */

    sort_spalte--; // an Array anpassen.
    helper = new Array();

    sorted = false;

    for (i = Values.length - foot_lines - 1; (i > head_lines) && !sorted;  i--) //bubblesort mit Abbruch
    {
        sorted = true;
        for (j=head_lines; j < i; j++)
        {
            k = j + 1;
            a = Values[j][sort_spalte];
            a = a.replace(",", ".");
            a = a * 1;
            if (isNaN(a))
                a = Values[j][sort_spalte];
            b = Values[k][sort_spalte];
            b = b.replace(",", ".");
            b= b*1;
            if (isNaN(b))
                b = Values[k][sort_spalte];
            if (((a > b) && !sort_down) || ((a < b) && sort_down))
            {
                sorted = false;
                helper = Values[j];
                Values[j] = Values[k];
                Values[k] = helper;
                helper = Colours[j];
                Colours[j] = Colours[k];
                Colours[k] = helper;
                helpCol = RowCol[j];
                RowCol[j] = RowCol[k];
                RowCol[k] = helpCol;
            }
        }
    }

    /* nur Kontrolle der Werte
    alert("Minimum: " + Values[head_lines][sort_spalte]);
    k = Values.length - foot_lines;
    alert("Maximum: " + Values[k][sort_spalte]);
    */


    /* Daten in Tabelle zurückschreiben */

    for (i = head_lines; i <= Values.length - foot_lines - 1; i++)
    {
        Zellen = Zeilen[i].cells;
        Zeilen[i].bgColor = RowCol[i];

        for (j = 0; j < Values[i].length; j++)
        {
            var one_node = Zellen[j].firstChild;
            var weg = Zellen[j].removeChild(one_node);

            if (Colours[i][j] != null) /*  Farbe hinzufügen */
            {
                var new_Element = document.createElement("font");
                Zellen[j].appendChild(new_Element);
                var new_text = document.createTextNode(Values[i][j]);
                Zellen[j].firstChild.appendChild(new_text);

                Zellen[j].firstChild.setAttribute("color", Colours[i][j]);
                Zellen[j].firstChild.removeAttribute("size");
            }
            else /* nur Text */
            {
                var new_text = document.createTextNode(Values[i][j]);
                Zellen[j].appendChild(new_text);
            }
        }
    }
}