java/HrisniciSpameri/web/tridenitabulky.js
author František Kučera <franta-hg@frantovo.cz>
Thu, 12 Feb 2009 01:02:12 +0100
changeset 10 025cde619dd9
parent 7 29bb67aa99fd
permissions -rw-r--r--
Doladění Antu a další drobnosti.
franta-hg@7
     1
addEvent(window, "load", sortables_init);
franta-hg@7
     2
franta-hg@7
     3
var SORT_COLUMN_INDEX;
franta-hg@7
     4
franta-hg@7
     5
function trim(myText)
franta-hg@7
     6
{
franta-hg@7
     7
  if (myText != null)
franta-hg@7
     8
  {
franta-hg@7
     9
    while (myText.indexOf(". ") != -1 || myText.indexOf(": ") != -1 || myText.indexOf("\n") != -1)
franta-hg@7
    10
    {
franta-hg@7
    11
      myText = myText.replace(/\. /,".");
franta-hg@7
    12
      myText = myText.replace(/\: /,".");
franta-hg@7
    13
      myText = myText.replace(/\s /,"");
franta-hg@7
    14
    }
franta-hg@7
    15
  }
franta-hg@7
    16
  return myText;
franta-hg@7
    17
}
franta-hg@7
    18
franta-hg@7
    19
function sortables_init()
franta-hg@7
    20
{
franta-hg@7
    21
  predemNactiNahoru = new Image(14,11);
franta-hg@7
    22
  predemNactiNahoru.src ="tabulka-nahoru.gif";
franta-hg@7
    23
  predemNactiDolu = new Image(14,11);
franta-hg@7
    24
  predemNactiDolu.src ="tabulka-dolu.gif";
franta-hg@7
    25
franta-hg@7
    26
  if (!document.getElementsByTagName)
franta-hg@7
    27
   return;
franta-hg@7
    28
  tbls = document.getElementsByTagName("table");
franta-hg@7
    29
  for (ti=0;ti<tbls.length;ti++)
franta-hg@7
    30
  {
franta-hg@7
    31
    thisTbl = tbls[ti];
franta-hg@7
    32
    if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id))
franta-hg@7
    33
    {
franta-hg@7
    34
      ts_makeSortable(thisTbl);
franta-hg@7
    35
    }
franta-hg@7
    36
  }
franta-hg@7
    37
}
franta-hg@7
    38
franta-hg@7
    39
function ts_makeSortable(table)
franta-hg@7
    40
{
franta-hg@7
    41
  if (table.rows && table.rows.length > 0)
franta-hg@7
    42
  {
franta-hg@7
    43
    var firstRow = table.rows[0];
franta-hg@7
    44
  }
franta-hg@7
    45
  if (!firstRow)
franta-hg@7
    46
    return;
franta-hg@7
    47
  var cell;
franta-hg@7
    48
  var txt;
franta-hg@7
    49
  for (var i=0;i<firstRow.cells.length;i++)
franta-hg@7
    50
  {
franta-hg@7
    51
    cell = firstRow.cells[i];
franta-hg@7
    52
    if (cell.className != 'dontsort')
franta-hg@7
    53
    {
franta-hg@7
    54
      txt = ts_getInnerText(cell);
franta-hg@7
    55
      cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this); return false;">'+txt+'<span class="sortarrow"></span></a>';
franta-hg@7
    56
    }
franta-hg@7
    57
  }
franta-hg@7
    58
}
franta-hg@7
    59
franta-hg@7
    60
function ts_getInnerText(el)
franta-hg@7
    61
{
franta-hg@7
    62
  if (typeof el == "string")
franta-hg@7
    63
    return el;
franta-hg@7
    64
  if (typeof el == "undefined")
franta-hg@7
    65
    return el;
franta-hg@7
    66
  if (el.innerText)
franta-hg@7
    67
    return el.innerText;  //Not needed but it is faster
franta-hg@7
    68
  var str = "";
franta-hg@7
    69
franta-hg@7
    70
  var cs = el.childNodes;
franta-hg@7
    71
  var l = cs.length;
franta-hg@7
    72
  for (var i = 0; i < l; i++)
franta-hg@7
    73
  {
franta-hg@7
    74
    switch (cs[i].nodeType)
franta-hg@7
    75
    {
franta-hg@7
    76
      case 1: //ELEMENT_NODE
franta-hg@7
    77
        str += ts_getInnerText(cs[i]);
franta-hg@7
    78
      break;
franta-hg@7
    79
      case 3:  //TEXT_NODE
franta-hg@7
    80
        str += cs[i].nodeValue;
franta-hg@7
    81
      break;
franta-hg@7
    82
    }
franta-hg@7
    83
  }
franta-hg@7
    84
  return str;
franta-hg@7
    85
}
franta-hg@7
    86
franta-hg@7
    87
function findValidRowInColumn(table,column)
franta-hg@7
    88
{
franta-hg@7
    89
  var ir = 1;
franta-hg@7
    90
  for (ir=1 ;ir < table.rows.length; ir++)
franta-hg@7
    91
  {
franta-hg@7
    92
    if (table.rows[ir].cells[column] != undefined && table.rows[ir].cells[column].className != 'dontsort' && ts_getInnerText(table.rows[ir].cells[column]).length > 0  && ts_getInnerText(table.rows[ir].cells[column]) != " ")
franta-hg@7
    93
      return ir;
franta-hg@7
    94
  }
franta-hg@7
    95
  return 0;
franta-hg@7
    96
}
franta-hg@7
    97
franta-hg@7
    98
function ts_resortTable(lnk)
franta-hg@7
    99
{
franta-hg@7
   100
  var span;
franta-hg@7
   101
  for (var ci=0;ci<lnk.childNodes.length;ci++)
franta-hg@7
   102
  {
franta-hg@7
   103
    if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
franta-hg@7
   104
  }
franta-hg@7
   105
  var spantext = ts_getInnerText(span);
franta-hg@7
   106
  var td = lnk.parentNode;
franta-hg@7
   107
  var column = td.cellIndex;
franta-hg@7
   108
  var table = getParent(td,'TABLE');
franta-hg@7
   109
franta-hg@7
   110
  if (table.rows.length <= 1)
franta-hg@7
   111
    return;
franta-hg@7
   112
  var vr = findValidRowInColumn(table,column);
franta-hg@7
   113
  var itm = ts_getInnerText(table.rows[vr].cells[column]);
franta-hg@7
   114
franta-hg@7
   115
  if (itm.match(/^\d{1,2}[\/.\/-][ ]?\d{1,2}[\/.\/-][ ]?(\d{2}|\d{4})([ ]{0,3}\d{1,2}[:]{1}\d{1,2}([ ]{0}|[:]{1}\d{1,2}))?$/))
franta-hg@7
   116
    sortfn = ts_sort_date;
franta-hg@7
   117
  else if (itm.match(/^(([�L\$])|k� |K� |K� ){1}.*|.*(([�L\$])|k� |K� |K� ){1}$/))
franta-hg@7
   118
    sortfn = ts_sort_currency;
franta-hg@7
   119
  else if (itm.match(/^[\d\,]+$/))
franta-hg@7
   120
    sortfn = ts_sort_numeric;
franta-hg@7
   121
  else
franta-hg@7
   122
    sortfn = ts_sort_caseinsensitive;
franta-hg@7
   123
franta-hg@7
   124
  SORT_COLUMN_INDEX = column;
franta-hg@7
   125
  var firstRow = new Array();
franta-hg@7
   126
  var newRows = new Array();
franta-hg@7
   127
  var noSortRows = new Array();
franta-hg@7
   128
  firstRow[0] = table.rows[0];
franta-hg@7
   129
  var tableRowIndex = 1;
franta-hg@7
   130
  var newRowIndex = 0;
franta-hg@7
   131
  var noSortIndex = 0;
franta-hg@7
   132
  while (tableRowIndex < table.rows.length)
franta-hg@7
   133
  {
franta-hg@7
   134
    if (!table.rows[tableRowIndex].className || (table.rows[tableRowIndex].className && (table.rows[tableRowIndex].className != 'dontsort')))
franta-hg@7
   135
    {
franta-hg@7
   136
      newRows[newRowIndex] = table.rows[tableRowIndex];
franta-hg@7
   137
      newRowIndex++;
franta-hg@7
   138
    }
franta-hg@7
   139
    else
franta-hg@7
   140
    {
franta-hg@7
   141
      noSortRows[noSortIndex] = table.rows[tableRowIndex];
franta-hg@7
   142
      noSortIndex++;
franta-hg@7
   143
    }
franta-hg@7
   144
    tableRowIndex++;
franta-hg@7
   145
  }
franta-hg@7
   146
franta-hg@7
   147
  newRows.sort(sortfn);
franta-hg@7
   148
franta-hg@7
   149
  if (span.getAttribute("sortdir") == 'down')
franta-hg@7
   150
  {
franta-hg@7
   151
    ARROW = '&nbsp;&nbsp;<img src=\"tabulka-dolu.gif\">';
franta-hg@7
   152
    //ARROW = '&nbsp;&nbsp;&uarr;';
franta-hg@7
   153
    newRows.reverse();
franta-hg@7
   154
    span.setAttribute('sortdir','up');
franta-hg@7
   155
  }
franta-hg@7
   156
  else
franta-hg@7
   157
  {
franta-hg@7
   158
    //ARROW = '&nbsp;&nbsp;&darr;';
franta-hg@7
   159
    ARROW = '&nbsp;&nbsp;<img src=\"tabulka-nahoru.gif\">';
franta-hg@7
   160
    span.setAttribute('sortdir','down');
franta-hg@7
   161
  }
franta-hg@7
   162
franta-hg@7
   163
  for (i=0;i<noSortRows.length;i++)
franta-hg@7
   164
  {
franta-hg@7
   165
    newRows[newRows.length] = noSortRows[i];
franta-hg@7
   166
  }
franta-hg@7
   167
franta-hg@7
   168
  for (i=0;i<newRows.length;i++)
franta-hg@7
   169
  {
franta-hg@7
   170
    table.tBodies[0].appendChild(newRows[i]);
franta-hg@7
   171
  }
franta-hg@7
   172
franta-hg@7
   173
  var allspans = document.getElementsByTagName("span");
franta-hg@7
   174
  for (var ci=0;ci<allspans.length;ci++)
franta-hg@7
   175
    if (allspans[ci].className == 'sortarrow')
franta-hg@7
   176
      if (getParent(allspans[ci],"table") == getParent(lnk,"table"))
franta-hg@7
   177
        allspans[ci].innerHTML = '';
franta-hg@7
   178
  span.innerHTML = ARROW;
franta-hg@7
   179
}
franta-hg@7
   180
franta-hg@7
   181
function getParent(el, pTagName)
franta-hg@7
   182
{
franta-hg@7
   183
  if (el == null)
franta-hg@7
   184
    return null;
franta-hg@7
   185
  else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())
franta-hg@7
   186
    return el;
franta-hg@7
   187
  else
franta-hg@7
   188
    return getParent(el.parentNode, pTagName);
franta-hg@7
   189
}
franta-hg@7
   190
franta-hg@7
   191
function ts_sort_date(a,b)
franta-hg@7
   192
{
franta-hg@7
   193
  var aaDateTime;
franta-hg@7
   194
  if (a.cells[SORT_COLUMN_INDEX] != undefined && a.cells[SORT_COLUMN_INDEX].className != 'dontsort' && ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).length > 0  && ts_getInnerText(a.cells[SORT_COLUMN_INDEX]) != " ")
franta-hg@7
   195
  {
franta-hg@7
   196
    aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
franta-hg@7
   197
    var aaList = trim(aa).split(" ");
franta-hg@7
   198
    var aaDateList;
franta-hg@7
   199
    var aaTimeList;
franta-hg@7
   200
    if (aaList[0].indexOf(".") != -1)
franta-hg@10
   201
    {// první je datum
franta-hg@7
   202
franta-hg@7
   203
      aaDateList = aaList[0].split(".");
franta-hg@7
   204
franta-hg@7
   205
      if (aaList[1] != null && aaList[1].indexOf(":") != -1)
franta-hg@10
   206
      { // rozbrakovat čas
franta-hg@7
   207
        aaTimeList = aaList[1].split(":");
franta-hg@7
   208
        if (aaTimeList.length > 2)
franta-hg@7
   209
          aaDateTime = new Date(aaDateList[2],(aaDateList[1]-1),aaDateList[0],aaTimeList[0],aaTimeList[1],aaTimeList[2]);
franta-hg@7
   210
        else
franta-hg@7
   211
          aaDateTime = new Date(aaDateList[2],(aaDateList[1]-1),aaDateList[0],aaTimeList[0],aaTimeList[1],0);
franta-hg@7
   212
      }
franta-hg@7
   213
      else
franta-hg@7
   214
      { // jenom datum
franta-hg@7
   215
        aaDateTime = new Date(aaDateList[2],(aaDateList[1]-1),aaDateList[0]);
franta-hg@7
   216
      }
franta-hg@7
   217
    }
franta-hg@7
   218
    else
franta-hg@10
   219
    { // první je čas
franta-hg@7
   220
      aaTimeList = aaList[1].split(":");
franta-hg@7
   221
      aaDateList = aaList[0].split(".");
franta-hg@7
   222
      if (aaTimeList.length > 2)
franta-hg@7
   223
        aaDateTime = new Date(aaDateList[2],(aaDateList[1]-1),aaDateList[0],aaTimeList[0],aaTimeList[1],aaTimeList[2]);
franta-hg@7
   224
      else
franta-hg@7
   225
        aaDateTime = new Date(aaDateList[2],(aaDateList[1]-1),aaDateList[0],aaTimeList[0],aaTimeList[1],0);
franta-hg@7
   226
    }
franta-hg@7
   227
  }
franta-hg@7
   228
  else
franta-hg@7
   229
    aaDateTime = new Date(1900,0,1);
franta-hg@7
   230
franta-hg@7
   231
  var bbDateTime;
franta-hg@7
   232
  if (b.cells[SORT_COLUMN_INDEX] != undefined && b.cells[SORT_COLUMN_INDEX].className != 'dontsort' && ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).length > 0  && ts_getInnerText(b.cells[SORT_COLUMN_INDEX]) != " ")
franta-hg@7
   233
  {
franta-hg@7
   234
    bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
franta-hg@7
   235
    var bbList = trim(bb).split(" ");
franta-hg@7
   236
    var bbDateList;
franta-hg@7
   237
    var bbTimeList;
franta-hg@7
   238
franta-hg@7
   239
    if (bbList[0].indexOf(".") != -1)
franta-hg@10
   240
    {// první je datum
franta-hg@7
   241
      bbDateList = bbList[0].split(".");
franta-hg@7
   242
      if (bbList[1] != null && bbList[1].indexOf(":") != -1)
franta-hg@10
   243
      { // rozbrakovat čas
franta-hg@7
   244
        bbTimeList = bbList[1].split(":");
franta-hg@7
   245
        if (bbTimeList.length > 2)
franta-hg@7
   246
          bbDateTime = new Date(bbDateList[2],(bbDateList[1]-1),bbDateList[0],bbTimeList[0],bbTimeList[1],bbTimeList[2]);
franta-hg@7
   247
        else
franta-hg@7
   248
          bbDateTime = new Date(bbDateList[2],(bbDateList[1]-1),bbDateList[0],bbTimeList[0],bbTimeList[1],0);
franta-hg@7
   249
      }
franta-hg@7
   250
      else
franta-hg@7
   251
      { // jenom datum
franta-hg@7
   252
        bbDateTime = new Date(bbDateList[2],(bbDateList[1]-1),bbDateList[0]);
franta-hg@7
   253
      }
franta-hg@7
   254
    }
franta-hg@7
   255
    else
franta-hg@10
   256
    { // první je čas
franta-hg@7
   257
      bbTimeList = bbList[1].split(":");
franta-hg@7
   258
      bbDateList = bbList[0].split(".");
franta-hg@7
   259
      if (bbTimeList.length > 2)
franta-hg@7
   260
        bbDateTime = new Date(bbDateList[2],(bbDateList[1]-1),bbDateList[0],bbTimeList[0],bbTimeList[1],bbTimeList[2]);
franta-hg@7
   261
      else
franta-hg@7
   262
        bbDateTime = new Date(bbDateList[2],(bbDateList[1]-1),bbDateList[0],bbTimeList[0],bbTimeList[1],0);
franta-hg@7
   263
    }
franta-hg@7
   264
  }
franta-hg@7
   265
  else
franta-hg@7
   266
    bbDateTime = new Date(1900,0,1);
franta-hg@7
   267
franta-hg@7
   268
  if (aaDateTime == bbDateTime)
franta-hg@7
   269
    return 0;
franta-hg@7
   270
  else if (aaDateTime < bbDateTime)
franta-hg@7
   271
    return -1;
franta-hg@7
   272
  else
franta-hg@7
   273
    return 1;
franta-hg@7
   274
}
franta-hg@7
   275
franta-hg@7
   276
function ts_sort_currency(a,b)
franta-hg@7
   277
{
franta-hg@7
   278
  aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
franta-hg@7
   279
  bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
franta-hg@7
   280
  return parseFloat(aa) - parseFloat(bb);
franta-hg@7
   281
}
franta-hg@7
   282
franta-hg@7
   283
function ts_sort_numeric(a,b)
franta-hg@7
   284
{
franta-hg@7
   285
  if (a.cells[SORT_COLUMN_INDEX] != undefined && a.cells[SORT_COLUMN_INDEX].className != 'dontsort' && ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).length > 0  && ts_getInnerText(a.cells[SORT_COLUMN_INDEX]) != " ")
franta-hg@7
   286
    aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
franta-hg@7
   287
  else
franta-hg@7
   288
    aa = 0;
franta-hg@7
   289
  if (b.cells[SORT_COLUMN_INDEX] != undefined && b.cells[SORT_COLUMN_INDEX].className != 'dontsort' && ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).length > 0  && ts_getInnerText(b.cells[SORT_COLUMN_INDEX]) != " ")
franta-hg@7
   290
    bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
franta-hg@7
   291
  else
franta-hg@7
   292
    bb = 0;
franta-hg@7
   293
  return aa-bb;
franta-hg@7
   294
}
franta-hg@7
   295
franta-hg@7
   296
function char2Diacritic(transDiacritic)
franta-hg@7
   297
{
franta-hg@7
   298
  var charDiacritic = "�����ĚĽ�����ŠŤ�Ŏ�Ž";
franta-hg@7
   299
  var numDiacritic = "ACDEILLNOORRSTUUYZ";
franta-hg@7
   300
  var tmpDiacritic = "";
franta-hg@7
   301
  var newDiacritic = "";
franta-hg@7
   302
  transDiacritic = transDiacritic.toUpperCase();
franta-hg@7
   303
  for(i=0;i<transDiacritic.length;i++)
franta-hg@7
   304
  {
franta-hg@7
   305
    if (charDiacritic.indexOf(transDiacritic.charAt(i))!=-1)
franta-hg@7
   306
      tmpDiacritic += numDiacritic.charAt(charDiacritic.indexOf(transDiacritic.charAt(i)))+'|';
franta-hg@7
   307
    else
franta-hg@7
   308
     tmpDiacritic += transDiacritic.charAt(i);
franta-hg@7
   309
  }
franta-hg@7
   310
  return tmpDiacritic;
franta-hg@7
   311
}
franta-hg@7
   312
franta-hg@7
   313
function ts_sort_caseinsensitive(a,b)
franta-hg@7
   314
{
franta-hg@7
   315
  var aa = "_";
franta-hg@7
   316
  var bb = "_";
franta-hg@7
   317
  if (a.cells[SORT_COLUMN_INDEX] != undefined && a.cells[SORT_COLUMN_INDEX].className != 'dontsort' && ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).length > 0)
franta-hg@7
   318
    aa = char2Diacritic(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
franta-hg@7
   319
  if (b.cells[SORT_COLUMN_INDEX] != undefined && b.cells[SORT_COLUMN_INDEX].className != 'dontsort' && ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).length > 0)
franta-hg@7
   320
    bb = char2Diacritic(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
franta-hg@7
   321
  if (aa==bb)
franta-hg@7
   322
    return 0;
franta-hg@7
   323
  else if (aa < bb)
franta-hg@7
   324
    return -1;
franta-hg@7
   325
  else
franta-hg@7
   326
    return 1;
franta-hg@7
   327
}
franta-hg@7
   328
franta-hg@7
   329
function ts_sort_default(a,b)
franta-hg@7
   330
{
franta-hg@7
   331
  aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
franta-hg@7
   332
  bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
franta-hg@7
   333
  if (aa==bb)
franta-hg@7
   334
    return 0;
franta-hg@7
   335
  else if (aa<bb)
franta-hg@7
   336
    return -1;
franta-hg@7
   337
  else
franta-hg@7
   338
    return 1;
franta-hg@7
   339
}
franta-hg@7
   340
franta-hg@7
   341
function addEvent(elm, evType, fn, useCapture)
franta-hg@7
   342
{
franta-hg@7
   343
  if (elm.addEventListener)
franta-hg@7
   344
  {
franta-hg@7
   345
    elm.addEventListener(evType, fn, useCapture);
franta-hg@7
   346
    return true;
franta-hg@7
   347
  }
franta-hg@7
   348
  else if (elm.attachEvent)
franta-hg@7
   349
  {
franta-hg@7
   350
    var r = elm.attachEvent("on"+evType, fn);
franta-hg@7
   351
    return r;
franta-hg@7
   352
  }
franta-hg@7
   353
  else
franta-hg@7
   354
  {
franta-hg@7
   355
    alert("Handler could not be removed");
franta-hg@7
   356
  }
franta-hg@7
   357
}