// tsort.js (rwm)
// sort tables
// Version 1.0.07.01.09
// 1.0.07.01.09 rwm currency: use innerHTML, wipe out <strike>
// 1.0.06.12.18 rwm set no price to 99999.99
// 1.0.06.12.12 rwm added messages
// 1.0.06.12.04 rwm created it

asknet.ts = {};
asknet.ts.sortcounter = 0;
asknet.ts.c_index = 0;
asknet.ts.title_up = '';
asknet.ts.title_down = '';
// asknet.messages.ts included by mle

if ( typeof asknet.messages.ts !== 'undefined' ) {
	asknet.ts.title_up = ' title="'+asknet.messages.ts.title_up+'"';
	asknet.ts.title_down = ' title="'+asknet.messages.ts.title_down+'"';
}

asknet.ts.init_tablesort = function () {
    var myTables,t;
    if (!document.getElementsByTagName) {return;}
    myTables = document.getElementsByTagName("table");
    for (var i=0;i<myTables.length;i++) {
        t = myTables[i];
        if (((' '+t.className+' ').indexOf("sortMe") != -1)) {asknet.ts.addArrows(t);}
    }
};

asknet.ts.addArrows = function (table) {
    if (table.rows && table.rows.length > 0) {
        var firstRow = table.rows[0];
    }
    if (!firstRow) {return;}
    
    // We have a first row: assume it's the header, and make its contents clickable links
    for (var i=0;i<firstRow.cells.length;i++) {
        var cell = firstRow.cells[i];
        var txt = "";
        txt = asknet.ts.getInnerText(cell);
        var checktext = txt.toLowerCase();
        if ( checktext === 'menge' || checktext === 'amount' || checktext === "" ) {continue;}
        cell.innerHTML = '<p>'+txt  // p-tag must be known in asknet.ts.sortTable
        +'<img src="/pics/t.gif" class="tbl-sort-up"'+asknet.ts.title_up+' onclick="asknet.ts.sortTable(this, '+i+',1);return false;">'
        +'<img src="/pics/t.gif" class="tbl-sort-down"'+asknet.ts.title_down+' onclick="asknet.ts.sortTable(this, '+i+',0);return false;">'
        +'</p>';
    }
};

asknet.ts.getInnerText = function (el) {
  if (typeof el == "string") { return el; }
  if (typeof el == "undefined") { return el; }
  if (el.innerText) { return el.innerText; }  //Not needed but it is faster
  var str = "";
  
  var cs = el.childNodes;
  var l = cs.length;
  for (var i = 0; i < l; i++) {
    switch (cs[i].nodeType) {
      case 1: //ELEMENT_NODE
        str += asknet.ts.getInnerText(cs[i]);
        break;
      case 3:  //TEXT_NODE
        str += cs[i].nodeValue;
        break;
    }
  }
  return str;
};

asknet.ts.sortTable = function (lnk,clid,direction) {
    var i, j, txt, checktext, sortfn;
    var p = lnk.parentNode; // assume a p tag
    var td = p.parentNode;
    var column = clid || td.cellIndex;

    var table = asknet.ts.getParent(td,'TABLE');
    if (table.rows.length <= 1) { return; }

    txt = "";
    txt = asknet.ts.getInnerText(table.rows[0].cells[column]);
    checktext = txt.toLowerCase();
    sortfn = asknet.ts.sortProduct;
    // alert(checktext);
    if ( checktext == 'product' || checktext == 'produkt' ) { sortfn = asknet.ts.sortProduct; }
    if ( checktext == 'preis' || checktext == 'price' ) { sortfn = asknet.ts.sortCurrency; }

    asknet.ts.c_index = column;
    // make copy of array without heading
    var newRows = [];
    for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }
    // sort copy
    newRows.sort(sortfn);
    if (direction === 0) { newRows.reverse(); }
    // copy sorted rows back
    // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
    for (i=0;i<newRows.length;i++) { table.tBodies[0].appendChild(newRows[i]);}

// alert(asknet.ts.sortcounter);
asknet.ts.sortcounter=0;
};

asknet.ts.getParent = function (el, pTagName) {
  if (el === null) { return null; }
  else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())  // Gecko bug, supposed to be uppercase
    { return el; }
  else
    { return asknet.ts.getParent(el.parentNode, pTagName); }
};

asknet.ts.sortCurrency = function (a,b) {
    asknet.ts.sortcounter++;
    var aa,bb;
    aa = asknet.ts.cleanCurrency(a.cells[asknet.ts.c_index].innerHTML);
		bb = asknet.ts.cleanCurrency(b.cells[asknet.ts.c_index].innerHTML);
    if (sysDebug)  { sysPrint(1,a.cells[asknet.ts.c_index].innerHTML+' aa='+aa+', bb='+bb+' # '+(parseFloat(aa) - parseFloat(bb))); }
    return parseFloat(aa) - parseFloat(bb);
    
};

asknet.ts.cleanCurrency = function (s) {
	  s = s.replace(/<strike>.*<\/strike>/i,'');
	  s = s.replace(/[^0-9.,]/g,''); 
		s = s.replace(',','.');
		if ( s === '') { s = '99999.99'; }
		return  s;
};

asknet.ts.sortProduct = function (a,b) {
    asknet.ts.sortcounter++;
    var aa,bb,ret = 1;
    aa = asknet.ts.cleanProduct(asknet.ts.getInnerText(a.cells[asknet.ts.c_index]));
    bb = asknet.ts.cleanProduct(asknet.ts.getInnerText(b.cells[asknet.ts.c_index]));
    if (aa==bb) { ret = 0; }
    if (aa<bb) { ret = -1; }
    if (sysDebug)  { sysPrint(1,asknet.ts.getInnerText(a.cells[asknet.ts.c_index])+' <br>aa=<br>'+aa+' <br>bb=<br>'+bb+'<br>ret=<br>'+ret); }

    return ret;
};

asknet.ts.cleanProduct = function (s) {
	  s = s.toLowerCase();
		s = s.replace(/(\d+)/g,'0000000000$1');
		s = s.replace(/(0+)(\d{10})/g,'$2');
		return s;
};

asknet.addOnLoadListener(asknet.ts.init_tablesort);