
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);
    Links = new Array(Zeilen.length);
    Bold = 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);
        Links[i] = new Array(Zellen.length);
        Bold[i] = new Array(Zellen.length);
        for (j=0; j<Zellen.length; j++)
        {
            var one_node = Zellen[j].firstChild;
            Colours[i][j] = null;
            Links[i][j] = null;
            Bold[i][j] = 0;
            Values[i][j] = "";

			while (one_node != null)
			{

                if(one_node.nodeType == 3)
                {
                    Values[i][j] += one_node.nodeValue;
                }
                else if(one_node.nodeType == 1)
                    {
                    	switch (one_node.nodeName)
                    	{
                    		case "FONT":
//                                Values[i][j] += one_node.firstChild.data;
                                Colours[i][j] = one_node.getAttribute("color");
                                break;
                            case "A":
//                                Values[i][j] += one_node.firstChild.data;
                                Links[i][j] = one_node.href;
                                break;
                            case "B":
//                                Values[i][j] += one_node.firstChild.data;
                                Bold[i][j] = 1;
                                break;
                            default:
                                alert("unknown Element[" + i + "," + j + "]: " + one_node.nodeName);
                                break;
                        }
					}
                    else
                    {
                        alert("type: " + one_node.nodeType);
                        alert("value: " + one_node.nodeValue);
                    }
            	one_node = one_node.firstChild;

            }
        }
    }

    /* 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;
                helper = Links[j];
                Links[j] = Links[k];
                Links[k] = helper;
                helpCol = RowCol[j];
                RowCol[j] = RowCol[k];
                RowCol[k] = helpCol;
                helper = Bold[j];
                Bold[j] = Bold[k];
                Bold[k] = helper;
            }
        }
    }

    /* 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);
            while (one_node != null)
            {
            	Zellen[j].removeChild(one_node);
            	one_node = Zellen[j].firstChild;
            }
            first = 0;
            node = null;

            if (Links[i][j] != null) /*  Link hinzufügen */
            {
                var new_Element = document.createElement("A");
                new_Element.href = Links[i][j];
                if (node != null)
                {
                	node.appendChild(new_Element);
	                node = node.firstChild;
                }
                else
                {
                	Zellen[j].appendChild(new_Element);
                	node = Zellen[j].firstChild;
                }
/*                if (first)
	                Zellen[j].appendChild(new_Element);
                else
	                Zellen[j].firstChild.appendChild(new_Element);
                first =0; */
            }

            if (Colours[i][j] != null) /*  Farbe hinzufügen */
            {
                var new_Element = document.createElement("FONT");
                new_Element.setAttribute("color", Colours[i][j]);
                new_Element.removeAttribute("size");
                if (node != null)
                {
                	node.appendChild(new_Element);
	                node = node.firstChild;
                }
                else
                {
                	Zellen[j].appendChild(new_Element);
                	node = Zellen[j].firstChild;
                }
/*                if (first)
	                Zellen[j].appendChild(new_Element);
                else
	                Zellen[j].firstChild.appendChild(new_Element);
                first =0; */
            }

            if (Bold[i][j] != 0) /*  Fett hinzufügen */
            {
                var new_Element = document.createElement("B");
                if (node != null)
                {
                	node.appendChild(new_Element);
	                node = node.firstChild;
                }
                else
                {
                	Zellen[j].appendChild(new_Element);
                	node = Zellen[j].firstChild;
                }
/*                if (first)
	                Zellen[j].appendChild(new_Element);
                else
	                Zellen[j].firstChild.appendChild(new_Element);
                first =0; */
            }

            var new_text = document.createTextNode(Values[i][j]);
            if (node != null)
            {
                node.appendChild(new_text);
                node = node.firstChild;
            }
            else
            {
                Zellen[j].appendChild(new_text);
                node = Zellen[j].firstChild;
            }
/*            if (first)
                Zellen[j].appendChild(new_text);
            else
                Zellen[j].firstChild.appendChild(new_text); */
        }
    }
}