1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/java/HrisniciSpameri/web/tridenitabulky.js Wed Feb 11 23:00:37 2009 +0100
1.3 @@ -0,0 +1,357 @@
1.4 +addEvent(window, "load", sortables_init);
1.5 +
1.6 +var SORT_COLUMN_INDEX;
1.7 +
1.8 +function trim(myText)
1.9 +{
1.10 + if (myText != null)
1.11 + {
1.12 + while (myText.indexOf(". ") != -1 || myText.indexOf(": ") != -1 || myText.indexOf("\n") != -1)
1.13 + {
1.14 + myText = myText.replace(/\. /,".");
1.15 + myText = myText.replace(/\: /,".");
1.16 + myText = myText.replace(/\s /,"");
1.17 + }
1.18 + }
1.19 + return myText;
1.20 +}
1.21 +
1.22 +function sortables_init()
1.23 +{
1.24 + predemNactiNahoru = new Image(14,11);
1.25 + predemNactiNahoru.src ="tabulka-nahoru.gif";
1.26 + predemNactiDolu = new Image(14,11);
1.27 + predemNactiDolu.src ="tabulka-dolu.gif";
1.28 +
1.29 + if (!document.getElementsByTagName)
1.30 + return;
1.31 + tbls = document.getElementsByTagName("table");
1.32 + for (ti=0;ti<tbls.length;ti++)
1.33 + {
1.34 + thisTbl = tbls[ti];
1.35 + if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id))
1.36 + {
1.37 + ts_makeSortable(thisTbl);
1.38 + }
1.39 + }
1.40 +}
1.41 +
1.42 +function ts_makeSortable(table)
1.43 +{
1.44 + if (table.rows && table.rows.length > 0)
1.45 + {
1.46 + var firstRow = table.rows[0];
1.47 + }
1.48 + if (!firstRow)
1.49 + return;
1.50 + var cell;
1.51 + var txt;
1.52 + for (var i=0;i<firstRow.cells.length;i++)
1.53 + {
1.54 + cell = firstRow.cells[i];
1.55 + if (cell.className != 'dontsort')
1.56 + {
1.57 + txt = ts_getInnerText(cell);
1.58 + cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this); return false;">'+txt+'<span class="sortarrow"></span></a>';
1.59 + }
1.60 + }
1.61 +}
1.62 +
1.63 +function ts_getInnerText(el)
1.64 +{
1.65 + if (typeof el == "string")
1.66 + return el;
1.67 + if (typeof el == "undefined")
1.68 + return el;
1.69 + if (el.innerText)
1.70 + return el.innerText; //Not needed but it is faster
1.71 + var str = "";
1.72 +
1.73 + var cs = el.childNodes;
1.74 + var l = cs.length;
1.75 + for (var i = 0; i < l; i++)
1.76 + {
1.77 + switch (cs[i].nodeType)
1.78 + {
1.79 + case 1: //ELEMENT_NODE
1.80 + str += ts_getInnerText(cs[i]);
1.81 + break;
1.82 + case 3: //TEXT_NODE
1.83 + str += cs[i].nodeValue;
1.84 + break;
1.85 + }
1.86 + }
1.87 + return str;
1.88 +}
1.89 +
1.90 +function findValidRowInColumn(table,column)
1.91 +{
1.92 + var ir = 1;
1.93 + for (ir=1 ;ir < table.rows.length; ir++)
1.94 + {
1.95 + 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]) != " ")
1.96 + return ir;
1.97 + }
1.98 + return 0;
1.99 +}
1.100 +
1.101 +function ts_resortTable(lnk)
1.102 +{
1.103 + var span;
1.104 + for (var ci=0;ci<lnk.childNodes.length;ci++)
1.105 + {
1.106 + if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
1.107 + }
1.108 + var spantext = ts_getInnerText(span);
1.109 + var td = lnk.parentNode;
1.110 + var column = td.cellIndex;
1.111 + var table = getParent(td,'TABLE');
1.112 +
1.113 + if (table.rows.length <= 1)
1.114 + return;
1.115 + var vr = findValidRowInColumn(table,column);
1.116 + var itm = ts_getInnerText(table.rows[vr].cells[column]);
1.117 +
1.118 + 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}))?$/))
1.119 + sortfn = ts_sort_date;
1.120 + else if (itm.match(/^(([�L\$])|k� |K� |K� ){1}.*|.*(([�L\$])|k� |K� |K� ){1}$/))
1.121 + sortfn = ts_sort_currency;
1.122 + else if (itm.match(/^[\d\,]+$/))
1.123 + sortfn = ts_sort_numeric;
1.124 + else
1.125 + sortfn = ts_sort_caseinsensitive;
1.126 +
1.127 + SORT_COLUMN_INDEX = column;
1.128 + var firstRow = new Array();
1.129 + var newRows = new Array();
1.130 + var noSortRows = new Array();
1.131 + firstRow[0] = table.rows[0];
1.132 + var tableRowIndex = 1;
1.133 + var newRowIndex = 0;
1.134 + var noSortIndex = 0;
1.135 + while (tableRowIndex < table.rows.length)
1.136 + {
1.137 + if (!table.rows[tableRowIndex].className || (table.rows[tableRowIndex].className && (table.rows[tableRowIndex].className != 'dontsort')))
1.138 + {
1.139 + newRows[newRowIndex] = table.rows[tableRowIndex];
1.140 + newRowIndex++;
1.141 + }
1.142 + else
1.143 + {
1.144 + noSortRows[noSortIndex] = table.rows[tableRowIndex];
1.145 + noSortIndex++;
1.146 + }
1.147 + tableRowIndex++;
1.148 + }
1.149 +
1.150 + newRows.sort(sortfn);
1.151 +
1.152 + if (span.getAttribute("sortdir") == 'down')
1.153 + {
1.154 + ARROW = ' <img src=\"tabulka-dolu.gif\">';
1.155 + //ARROW = ' ↑';
1.156 + newRows.reverse();
1.157 + span.setAttribute('sortdir','up');
1.158 + }
1.159 + else
1.160 + {
1.161 + //ARROW = ' ↓';
1.162 + ARROW = ' <img src=\"tabulka-nahoru.gif\">';
1.163 + span.setAttribute('sortdir','down');
1.164 + }
1.165 +
1.166 + for (i=0;i<noSortRows.length;i++)
1.167 + {
1.168 + newRows[newRows.length] = noSortRows[i];
1.169 + }
1.170 +
1.171 + for (i=0;i<newRows.length;i++)
1.172 + {
1.173 + table.tBodies[0].appendChild(newRows[i]);
1.174 + }
1.175 +
1.176 + var allspans = document.getElementsByTagName("span");
1.177 + for (var ci=0;ci<allspans.length;ci++)
1.178 + if (allspans[ci].className == 'sortarrow')
1.179 + if (getParent(allspans[ci],"table") == getParent(lnk,"table"))
1.180 + allspans[ci].innerHTML = '';
1.181 + span.innerHTML = ARROW;
1.182 +}
1.183 +
1.184 +function getParent(el, pTagName)
1.185 +{
1.186 + if (el == null)
1.187 + return null;
1.188 + else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())
1.189 + return el;
1.190 + else
1.191 + return getParent(el.parentNode, pTagName);
1.192 +}
1.193 +
1.194 +function ts_sort_date(a,b)
1.195 +{
1.196 + var aaDateTime;
1.197 + 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]) != " ")
1.198 + {
1.199 + aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
1.200 + var aaList = trim(aa).split(" ");
1.201 + var aaDateList;
1.202 + var aaTimeList;
1.203 + if (aaList[0].indexOf(".") != -1)
1.204 + {// prvnĂ je datum
1.205 +
1.206 + aaDateList = aaList[0].split(".");
1.207 +
1.208 + if (aaList[1] != null && aaList[1].indexOf(":") != -1)
1.209 + { // rozbrakovat �as
1.210 + aaTimeList = aaList[1].split(":");
1.211 + if (aaTimeList.length > 2)
1.212 + aaDateTime = new Date(aaDateList[2],(aaDateList[1]-1),aaDateList[0],aaTimeList[0],aaTimeList[1],aaTimeList[2]);
1.213 + else
1.214 + aaDateTime = new Date(aaDateList[2],(aaDateList[1]-1),aaDateList[0],aaTimeList[0],aaTimeList[1],0);
1.215 + }
1.216 + else
1.217 + { // jenom datum
1.218 + aaDateTime = new Date(aaDateList[2],(aaDateList[1]-1),aaDateList[0]);
1.219 + }
1.220 + }
1.221 + else
1.222 + { // prvnà je �as
1.223 + aaTimeList = aaList[1].split(":");
1.224 + aaDateList = aaList[0].split(".");
1.225 + if (aaTimeList.length > 2)
1.226 + aaDateTime = new Date(aaDateList[2],(aaDateList[1]-1),aaDateList[0],aaTimeList[0],aaTimeList[1],aaTimeList[2]);
1.227 + else
1.228 + aaDateTime = new Date(aaDateList[2],(aaDateList[1]-1),aaDateList[0],aaTimeList[0],aaTimeList[1],0);
1.229 + }
1.230 + }
1.231 + else
1.232 + aaDateTime = new Date(1900,0,1);
1.233 +
1.234 + var bbDateTime;
1.235 + 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]) != " ")
1.236 + {
1.237 + bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
1.238 + var bbList = trim(bb).split(" ");
1.239 + var bbDateList;
1.240 + var bbTimeList;
1.241 +
1.242 + if (bbList[0].indexOf(".") != -1)
1.243 + {// prvnĂ je datum
1.244 + bbDateList = bbList[0].split(".");
1.245 + if (bbList[1] != null && bbList[1].indexOf(":") != -1)
1.246 + { // rozbrakovat �as
1.247 + bbTimeList = bbList[1].split(":");
1.248 + if (bbTimeList.length > 2)
1.249 + bbDateTime = new Date(bbDateList[2],(bbDateList[1]-1),bbDateList[0],bbTimeList[0],bbTimeList[1],bbTimeList[2]);
1.250 + else
1.251 + bbDateTime = new Date(bbDateList[2],(bbDateList[1]-1),bbDateList[0],bbTimeList[0],bbTimeList[1],0);
1.252 + }
1.253 + else
1.254 + { // jenom datum
1.255 + bbDateTime = new Date(bbDateList[2],(bbDateList[1]-1),bbDateList[0]);
1.256 + }
1.257 + }
1.258 + else
1.259 + { // prvnà je �as
1.260 + bbTimeList = bbList[1].split(":");
1.261 + bbDateList = bbList[0].split(".");
1.262 + if (bbTimeList.length > 2)
1.263 + bbDateTime = new Date(bbDateList[2],(bbDateList[1]-1),bbDateList[0],bbTimeList[0],bbTimeList[1],bbTimeList[2]);
1.264 + else
1.265 + bbDateTime = new Date(bbDateList[2],(bbDateList[1]-1),bbDateList[0],bbTimeList[0],bbTimeList[1],0);
1.266 + }
1.267 + }
1.268 + else
1.269 + bbDateTime = new Date(1900,0,1);
1.270 +
1.271 + if (aaDateTime == bbDateTime)
1.272 + return 0;
1.273 + else if (aaDateTime < bbDateTime)
1.274 + return -1;
1.275 + else
1.276 + return 1;
1.277 +}
1.278 +
1.279 +function ts_sort_currency(a,b)
1.280 +{
1.281 + aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
1.282 + bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
1.283 + return parseFloat(aa) - parseFloat(bb);
1.284 +}
1.285 +
1.286 +function ts_sort_numeric(a,b)
1.287 +{
1.288 + 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]) != " ")
1.289 + aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
1.290 + else
1.291 + aa = 0;
1.292 + 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]) != " ")
1.293 + bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
1.294 + else
1.295 + bb = 0;
1.296 + return aa-bb;
1.297 +}
1.298 +
1.299 +function char2Diacritic(transDiacritic)
1.300 +{
1.301 + var charDiacritic = "�����ĚĽ�����ŠŤ�Ŏ�Ž";
1.302 + var numDiacritic = "ACDEILLNOORRSTUUYZ";
1.303 + var tmpDiacritic = "";
1.304 + var newDiacritic = "";
1.305 + transDiacritic = transDiacritic.toUpperCase();
1.306 + for(i=0;i<transDiacritic.length;i++)
1.307 + {
1.308 + if (charDiacritic.indexOf(transDiacritic.charAt(i))!=-1)
1.309 + tmpDiacritic += numDiacritic.charAt(charDiacritic.indexOf(transDiacritic.charAt(i)))+'|';
1.310 + else
1.311 + tmpDiacritic += transDiacritic.charAt(i);
1.312 + }
1.313 + return tmpDiacritic;
1.314 +}
1.315 +
1.316 +function ts_sort_caseinsensitive(a,b)
1.317 +{
1.318 + var aa = "_";
1.319 + var bb = "_";
1.320 + if (a.cells[SORT_COLUMN_INDEX] != undefined && a.cells[SORT_COLUMN_INDEX].className != 'dontsort' && ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).length > 0)
1.321 + aa = char2Diacritic(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
1.322 + if (b.cells[SORT_COLUMN_INDEX] != undefined && b.cells[SORT_COLUMN_INDEX].className != 'dontsort' && ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).length > 0)
1.323 + bb = char2Diacritic(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
1.324 + if (aa==bb)
1.325 + return 0;
1.326 + else if (aa < bb)
1.327 + return -1;
1.328 + else
1.329 + return 1;
1.330 +}
1.331 +
1.332 +function ts_sort_default(a,b)
1.333 +{
1.334 + aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
1.335 + bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
1.336 + if (aa==bb)
1.337 + return 0;
1.338 + else if (aa<bb)
1.339 + return -1;
1.340 + else
1.341 + return 1;
1.342 +}
1.343 +
1.344 +function addEvent(elm, evType, fn, useCapture)
1.345 +{
1.346 + if (elm.addEventListener)
1.347 + {
1.348 + elm.addEventListener(evType, fn, useCapture);
1.349 + return true;
1.350 + }
1.351 + else if (elm.attachEvent)
1.352 + {
1.353 + var r = elm.attachEvent("on"+evType, fn);
1.354 + return r;
1.355 + }
1.356 + else
1.357 + {
1.358 + alert("Handler could not be removed");
1.359 + }
1.360 +}