// TableSort 7
// Dr. Jürgen Berkemeier, 7. 9. 2006
// www.j-berkemeier.de
function JB_Table(tab) {
 var up = String.fromCharCode(160,9650);
 var down = String.fromCharCode(160,9660);
// var up = String.fromCharCode(160,8593);
// var down = String.fromCharCode(160,8595);
 var no = String.fromCharCode(160,160);
 var first=1;
 var ssort;
 var tbdy=tab.getElementsByTagName("tbody")[0];
 var tz=tbdy.getElementsByTagName("tr");
 var nzeilen=tz.length;
 var nspalten=tz[0].getElementsByTagName("td").length;
 this.titel=tab.getElementsByTagName("thead")[0].getElementsByTagName("tr")[0].getElementsByTagName("th");
 var Arr=new Array(nzeilen);
 var ct=0;
 tab.title="Ein Klick auf die Spaltenüberschrift sortiert die Tabelle.";
 for(var i=0;i<this.titel.length;i++) {
  var t=this.titel[i];
  if(t.className.indexOf("sortierbar")>-1 || t.className.indexOf("vorsortiert")>-1) {
   ct++;
   t.nr=i;
   t.style.cursor="pointer";
   t.thisObj = this;
   t.onclick = function() { this.thisObj.sort(this.nr); }
// Besser mit closures?
// http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#closures
   t.appendChild(document.createTextNode(no));
   t.title='Die Tabelle nach "'+t.firstChild.data+'" sortieren.';
   if(t.className.indexOf("vorsortiert-")>-1) {
    t.lastChild.data=down;
    ssort=i;
   }
   else if(t.className.indexOf("vorsortiert")>-1) {
    t.lastChild.data=up;
    ssort=i;
   }
  }
 }
 if(ct==0) {
  for(var i=0;i<this.titel.length;i++) {
   var t=this.titel[i];
   t.nr=i;
   t.style.cursor="pointer";
   t.thisObj = this;
   t.onclick = function() { this.thisObj.sort(this.nr); }
   t.appendChild(document.createTextNode(no));
   t.title='Die Tabelle nach "'+t.firstChild.data+'" sortieren.';
   if(t.className.indexOf("vorsortiert-")>-1) {
    t.lastChild.data=down;
    ssort=i;
   }
   else if(t.className.indexOf("vorsortiert")>-1) {
    t.lastChild.data=up;
    ssort=i;
   }
  }
 }
 this.VglFkt=function(a,b) {
  var ta=a[ssort].toUpperCase();
  var tb=b[ssort].toUpperCase();
  if(!isNaN(ta)&&!isNaN(tb)) {
   ta=parseFloat(ta);
   tb=parseFloat(tb);
  }
  if (ta>tb) return 1;
  else if (ta<tb) return -1;
  else {
   ta=a[0].toUpperCase();
   tb=b[0].toUpperCase();
   if(!isNaN(ta)&&!isNaN(tb)) {
    ta=parseFloat(ta);
    tb=parseFloat(tb);
   }
   if (ta>tb) return 1;
   else if (ta<tb) return -1;
   else return 0;
  }
 }
 this.sort=function(sp) {
  if (first==1) {
   for(var z=0;z<nzeilen;z++) {
    var zeile=tz[z].getElementsByTagName("td");
    Arr[z]=new Array(nspalten);
    for(var s=0;s<nspalten;s++)
//     Arr[z][s]=zeile[s].firstChild.nodeValue;
     Arr[z][s]=zeile[s].innerHTML;
   }
   first=0;
  }
  if(sp==ssort) {
   Arr.reverse() ;
   if ( this.titel[ssort].lastChild.data==down )
    this.titel[ssort].lastChild.data=up;
   else
    this.titel[ssort].lastChild.data=down;
  }
  else {
   if ( ssort>=0 && ssort<nspalten ) this.titel[ssort].lastChild.data=no;
   ssort=sp;
   Arr.sort(this.VglFkt);
   this.titel[ssort].lastChild.data=up;
  }
  for(var z=0;z<nzeilen;z++) {
   var zeile=tz[z].getElementsByTagName("td");
   for(var s=0;s<nspalten;s++) {
//    zeile[s].firstChild.nodeValue=Arr[z][s];
    zeile[s].innerHTML=""; // für den MAC-IE
    zeile[s].innerHTML=Arr[z][s];
   }
  }
 }
}
function BrowserTest() {
 var kannDOM=document.getElementsByTagName;
 if (kannDOM) kannDOM=kannDOM && document.getElementsByTagName('body')[0].appendChild;
 if (!kannDOM) return false;
 return true;
}
function addEvent(oTarget, sType, fpDest) {
 var oOldEvent = oTarget[sType];
 if (typeof oOldEvent != "function") {
  oTarget[sType] = fpDest;
  } else {
   oTarget[sType] = function(e) {
   oOldEvent(e);
   fpDest(e);
  }
 }
}
function getElementsByClass_TagName(tagname,classname) {
 var tag=document.getElementsByTagName(tagname);
 var Elements=new Array();
 for(var i=0;i<tag.length;i++) {
  if(tag[i].className.indexOf(classname)>-1) Elements[Elements.length]=tag[i];
 }
 return Elements;
}
function JB_TabSort_Init(e) {
 if (!BrowserTest()) return;
 var Sort_Table=getElementsByClass_TagName("table","sortierbar");
 for(var i=0;i<Sort_Table.length;i++) new JB_Table(Sort_Table[i]);
}
addEvent(window,"onload",JB_TabSort_Init);
