var LastColumnIndex = -1;
var Ascending = false;
var DataArray;
 
function GetTableData(table) {
 DataArray = new Array(table.rows.length-1); //-1 because we dont want the headerrow
 var dtArr, dArr, tArr, dt;
 for(i = 0; i < table.rows.length-1; i++) {
  DataArray[i] = new Array(4); //number of columns
  DataArray[i][0] = table.rows[i+1].cells[0].innerHTML;
  DataArray[i][1] = table.rows[i+1].cells[1].innerHTML;
  DataArray[i][2] = parseFloat(table.rows[i+1].cells[2].innerHTML.replace(",","."));
  dtArr=table.rows[i+1].cells[3].innerHTML.split(" ");
  dArr=dtArr[0].split("-");
  tArr=dtArr[1].split(":");
  dt=new Date(dArr[2],dArr[1]-1,dArr[0],tArr[0],tArr[1]);
  DataArray[i][3] = dt;
  DataArray[i][4] = table.rows[i+1].cells[4].innerHTML;
 }
}
function WriteData(table) {
 var dt;
 if (Ascending) {
  var j = 1;
  for (var i = DataArray.length-1; i > -1; i--) {
   WriteRowData(table, j, i);
   j++;
  }
 }
 else {
  for (var i = 0; i < DataArray.length; i++) {
   WriteRowData(table, i+1, i);
  }
 }
}
function WriteRowData(table, row, idx) {
 table.rows[row].cells[0].innerHTML = DataArray[idx][0];
 table.rows[row].cells[1].innerHTML = DataArray[idx][1];
 table.rows[row].cells[2].innerHTML = GetFloatString(DataArray[idx][2]);
 dt = DataArray[idx][3];
 table.rows[row].cells[3].innerHTML = GetDateTimeString(dt);
 table.rows[row].cells[4].innerHTML = DataArray[idx][4];
}
function GetFloatString(f) {
 var p = f.toString().replace(".",",");
 if (p.lastIndexOf(",") < 0)
  p += ".00";
 else {
  var a = p.split(",");
  if (a[1].length < 2)
   p += "0";
 }
 return p;
}
function GetDateTimeString(dt) {
 var dtString = "";
 if (dt.getDate() < 10) dtString += "0" + dt.getDate(); else dtString += dt.getDate();
 if (dt.getMonth() < 9) dtString += "-0" + (dt.getMonth()+1); else dtString += "-" + (dt.getMonth()+1);
 dtString += "-" + dt.getFullYear();
 if (dt.getHours() < 10) dtString += " 0" + dt.getHours(); else dtString += " " + dt.getHours();
 if (dt.getMinutes() < 10) dtString += ":0" + dt.getMinutes(); else dtString += ":" + dt.getMinutes();
 return dtString;
}
function BubleSortDataArray(idx) {
 var i, j, temp, swap;
 for (i = (DataArray.length-1); i >= 0; i--) {
  swap = false;
  for (j = 1; j <= i; j++) {
   if (DataArray[j-1][idx] > DataArray[j][idx]) {
    temp = DataArray[j-1];
    DataArray[j-1] = DataArray[j];
    DataArray[j] = temp;
    swap = true;
   }
  }
  if (swap == false) break;
 }
}
function SortTable(columnIndex, tabletosort) {
 var tbl = document.getElementById(tabletosort);
 if (!DataArray)
  GetTableData(tbl);
 if (LastColumnIndex == columnIndex) {
  Ascending = (Ascending == false);
 }
 else {
  BubleSortDataArray(columnIndex);
  LastColumnIndex = columnIndex;
  Ascending = false;
 }
 WriteData(tbl);
}