var tableEntrys = []; // Objektstack vom Typ TableEntry
var lastsort = "//";

function TableEntry(rowdata) {
    this.datum = rowdata[0];
    this.angebot = rowdata[1];
    this.plz = rowdata[2];
    this.ort = rowdata[3];
    this.veranstalter = rowdata[4];
    
    TableEntry.prototype.getDateValue = function () {
        // we assume the first part of the date to 
        // contain day, month and year like e.g.:
        // 12.04.2007 - 15.04.2007 
        // 12.4.07 - 15.4.07
        // leading zeros or the format of the year (2 or 4 digits) don't matter
        datesplit = this.datum.split(".");
        // get rid of everything that is not a number
        // to be able to get the last two digits of the year
        datesplit[2] = datesplit[2].replace(/[^0-9]+.*/, '');
        // year: get the last 2 digits
        this.y = datesplit[2].toString().substr(datesplit[2].length - 2 ,2);
        this.y = this.y.length == 1 ? '0' + this.y : this.y;
        // month: get the first 2 digits
        this.m = datesplit[1].toString().substr(0,2);
        this.m = this.m.length == 1 ? '0' + this.m : this.m;
        // day: get the first 2 digits
        this.d = datesplit[0].toString().substr(0,2);
        this.d = this.d.length == 1 ? '0' + this.d : this.d;
        return Math.abs( this.y + this.m + this.d );
        
    };

    TableEntry.prototype.getPlzValue = function () {
        return Math.abs( this.plz );
    };
}

function loadTableEntrys() {

    var nodeList = $('bildungsangebote').getElementsByTagName('tr');
    var nodes = $A(nodeList);

    var i = 0, plz = null, ort = null;
    nodes.each( function (node) {
        if (Element.classNames(node) == "datarow") {
            td_elements = $A(node.getElementsByTagName('td'));
            
            // plz = td_elements[2].innerHTML.substring(0, td_elements[2].innerHTML.indexOf("<"));
            // ort = td_elements[2].innerHTML.substring((td_elements[2].innerHTML.indexOf(">") + 1), td_elements[2].innerHTML.length);
            
            // cut out everything that is not a number
            plz = td_elements[2].innerHTML.replace(/[^0-9]/g, '');
            // cut out everything before the first capital letter
            ort = td_elements[2].innerHTML.replace(/^[0-9]*[^A-ZÄÖÜ]*/, '');

            date = td_elements[0].innerHTML;
            dateEnd = date.substring(date.indexOf("-")+1, date.length);

            if (!dateIsExpired(dateEnd, new Date())) { // filtert alle einträge wo enddatum größer als clientdatum
				tableEntrys[i] = new TableEntry(
					[date,
					td_elements[1].innerHTML,
					plz,
					ort,
					td_elements[3].innerHTML]
				);
				
				i++;
			}

            
        }
    });
}

function compareDate(e1, e2) {
    return e1.getDateValue() - e2.getDateValue();
}

function comparePlz(e1, e2) {
    return e1.getPlzValue() - e2.getPlzValue();
}

function clearTableRows() {
    var nodeList = $('bildungsangebote').getElementsByTagName('tr');
    var nodes = $A(nodeList);

    nodes.each( function (node) {
        if (Element.classNames(node) == "datarow") {
            node.parentNode.removeChild(node);
        }
    });    
}

function dateIsExpired(date, dateExp) {
	var dateEnd = new Date(
		Math.abs(date.substring(date.lastIndexOf(".") + 1)) + 2000,
		Math.abs(date.substring(date.indexOf(".") + 1, date.lastIndexOf("."))) - 1,
		Math.abs(date.substring(0, date.indexOf(".")))
	);
	
	//alert(dateEnd.toLocaleString());
	//alert(date.toLocaleString());
	
	if (dateExp > dateEnd) {
		return true;
	}
	
	return false;
}


function rebuildTable() {
    clearTableRows();

    var tableRow, element, html = null, dateEnd;
    for (var i = 0; i < tableEntrys.length; i++) {
        
        tableRow = document.createElement("tr");
        tableRow.setAttributeNode(new DOBJgetAttrib("class", "datarow"));
        
        element = document.createElement("td");
		element.innerHTML = tableEntrys[i].datum;
		tableRow.appendChild(element);
        

        element = document.createElement("td");
        element.innerHTML = tableEntrys[i].angebot;
        tableRow.appendChild(element);

        element = document.createElement("td");
        html = document.createTextNode(tableEntrys[i].plz);
        element.appendChild(html);
        // html = document.createElement("br");
        // element.appendChild(html);
        html = document.createTextNode(" ");
        element.appendChild(html);
        html = document.createTextNode(tableEntrys[i].ort);
        element.appendChild(html);
        tableRow.appendChild(element);

        element = document.createElement("td");
        element.setAttributeNode(new DOBJgetAttrib("class", "last"));
        html = document.createTextNode(tableEntrys[i].veranstalter);
        element.appendChild(html);
        tableRow.appendChild(element);

        
        $("datarowlist").appendChild(tableRow);
    }
}

function sortTable(by) {
    direction = "ASC";
    loadTableEntrys();

    switch (by) {
    case "date":
        if (lastsort.split("//")[0] == "date") {
            if (lastsort.split("//")[1] == "ASC") { 
                direction = "DESC"; 
            }
            if (lastsort.split("//")[1] == "DESC") {
                direction = "ASC";
            }
        }
        tableEntrys.sort(compareDate);
        break;
    case "plz":
        if (lastsort.split("//")[0] == "plz") {
            if (lastsort.split("//")[1] == "ASC") {
                direction = "DESC";
            }
            if (lastsort.split("//")[1] == "DESC") { 
                direction = "ASC";
            }
        }
        tableEntrys.sort(comparePlz);
        break;
    default:
        return;
    }

    lastsort = by + "//" + direction;

    if (direction == "DESC") {
        tableEntrys.reverse();
    }

    rebuildTable();
} 

function sortInit() {
    
    var elementsSortPlz = document.getElementsByClassName("sort_plz");
    for (var i = 0; i < elementsSortPlz.length; i++) {
        elementsSortPlz[i].onclick = function () {
            sortTable('plz');
        };        
    }
    var elementsSortDate = document.getElementsByClassName("sort_date");
    for (var k = 0; k < elementsSortDate.length; k++) {
        elementsSortDate[k].onclick = function () {
            sortTable('date');
        };        
    }
    sortTable("date");
}

addLoadEvent(sortInit);
