Add a 'report a problem' link for the RebootNode button on node page.
[plewww.git] / plekit / table / columns.js
1
2 /* $Id: table.js 13009 2009-04-10 10:49:28Z baris $ */
3
4 var filtered_color = "grey";
5 var normal_color = "black";
6
7
8 function inTypeA(header_name) {
9         var typeA = ['ST','SN','RES','OS','NRR','NTP','NSR','NSF','NDS','NTH','NEC','LRN','LCY','LPR','LCN','LAT','LON','IP','ASN','AST'];
10         return typeA.indexOf(header_name);
11 }
12
13 function inTypeB(header_name) {
14         var typeB = ['BW','DS','MS','CC','CR','AS','MU','DU','CN'];
15         return typeB.indexOf(header_name);
16 }
17
18 function inTypeC(header_name) {
19         var typeC = ['Rw','Rm','Ry','BWw','BWm','BWy','Lw','Lm','Ly','Sw','Sm','Sy','CFw','CFm','CFy','BUw','BUm','BUy','MUw','MUm','MUy','SSHw','SSHm','SSHy'];
20         return typeC.indexOf(header_name);
21 }
22
23 function inTypeD(header_name) {
24         var typeD = ['HC'];
25         return typeD.indexOf(header_name);
26 }
27
28 function debugfilter(s) {
29         document.getElementById('debug').innerHTML+=s;
30 }
31
32 function scrollList(tableid) {
33
34 debugfilter("here");
35
36 if (event.keyCode == 40)
37         debugfilter("down");
38 else if (event.keyCode == 38)
39         debugfilter("up");
40
41 }
42
43 function highlightOption(divid) {
44
45 //debugfilter("highlighting option "+divid);
46
47 for (var kk in column_headers) {
48
49 if (document.getElementById(kk))
50         document.getElementById(kk).className = 'out'; 
51 }
52
53 document.getElementById(divid).className = 'selected';
54
55 showDescription(divid);
56
57 }
58
59
60 function showDescription(h) {
61
62         //debugfilter("showing description "+h);
63
64         if (document.getElementById('selectdescr'))
65         {
66                 if (window['desc'+h])
67                         document.getElementById('selectdescr').innerHTML = ""+window['desc'+h];
68                 else if (column_table[h] && column_table[h]['description'])
69                         document.getElementById('selectdescr').innerHTML = column_table[h]['description'];
70                 else 
71                         document.getElementById('selectdescr').innerHTML = "No description provided";
72         }
73 }
74
75
76 function overrideTitles() {
77
78         //debugfilter("<p>overriding...");
79
80         for (var kk in column_headers) {
81
82         //debugfilter("here "+kk);
83
84         if (document.getElementById(kk) && window['title'+kk])
85                 document.getElementById('htitle'+kk).innerHTML = window['title'+kk];
86         }
87
88 }
89
90 function changeCheckStatus(column) {
91
92
93 if (document.getElementById('selectdescr'))
94 {
95 showDescription(document.getElementById(column).value);
96
97 if (document.getElementById(column).checked)
98         addColumn(document.getElementById(column).value);
99 else
100         deleteColumn(document.getElementById(column).value);
101 }
102
103 }
104
105 function updatePeriod(h) {
106         deleteColumn2(h, h+'w');
107         deleteColumn2(h, h+'m');
108         deleteColumn2(h, h+'y');
109         addColumn(h);
110 }
111
112 function filterByType(selectedtype) {
113
114 var notselectedyet = true;
115
116 for (var kk in column_headers) {
117
118         if (document.getElementById(kk))
119         {
120                 if (window['type'+kk] == selectedtype)
121                 {
122                         document.getElementById(kk).className = 'in';
123                         if (notselectedyet)
124                                 highlightOption(kk);
125                         notselectedyet = false;
126                 }
127                 else
128                         document.getElementById(kk).className = 'out';
129         }
130 }
131 }
132
133
134 /*
135  
136 RESET/SAVE CONFIGURATION
137 */
138
139
140 function resetColumns() {
141
142         for (var kk in column_table) {
143
144         if (column_table[kk]['visible'] == true && column_table[kk]['fetch'] == false)
145                 deleteColumn(kk);
146         else if (column_table[kk]['visible'] == false && column_table[kk]['fetch'] == true)
147                 addColumn(kk);
148         }
149
150 }
151
152 function resetCols(which_conf) {
153
154         var target_configuration = "|"+document.getElementById(which_conf).value+"|";
155         
156         //debugfilter("<p>Target configuration =  "+target_configuration);
157
158         for (var kk in column_table) {
159                 //debugfilter("in "+kk+" ");
160
161                 if (target_configuration.indexOf("|"+kk+"|")>=0)
162                 {
163                         if (document.getElementById('check'+kk))
164                         if (document.getElementById('check'+kk).checked == false)
165                         {
166                                 debugfilter("<p>Adding "+kk);
167                                 addColumn(kk);
168                         }
169                 }
170                 else
171                 {
172                         if (document.getElementById('check'+kk))
173                         if (document.getElementById('check'+kk).checked == true)
174                         {
175                                 debugfilter("<p>Deleting "+kk);
176                                 deleteColumn(kk);
177                         }
178                 }
179         }
180 }
181
182 function saveConfiguration(which_conf)
183 {
184         var slice_id = document.getElementById('slice_id').value;
185
186         var target_configuration = document.getElementById(which_conf).value;
187
188         debugfilter("saving configuration "+target_configuration);
189         updateColumnConfiguration(slice_id, target_configuration);
190 }
191
192 function updateColumnConfiguration(slice_id, value)
193 {
194
195         if (window.XMLHttpRequest)
196           {// code for IE7+, Firefox, Chrome, Opera, Safari
197           xmlhttp=new XMLHttpRequest();
198           }
199         else
200           {// code for IE6, IE5
201           xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
202           }
203         xmlhttp.onreadystatechange=function()
204           {
205           if (xmlhttp.readyState==4) // && xmlhttp.status==200)
206             {
207                 //value=xmlhttp.responseText;
208                 //debugfilter(value);
209                 if (document.getElementById('column_configuration'))
210                 document.getElementById('column_configuration').value=value;
211             }
212           }
213         xmlhttp.open("GET","/plekit/php/updateConf.php?value="+value+"&slice_id="+slice_id+"&tagName=Configuration",true);
214
215         xmlhttp.send();
216 }
217
218
219
220 function resetConfiguration(which_conf)
221 {
222         var slice_id = document.getElementById('slice_id').value;
223         var target_configuration = document.getElementById(which_conf).value;
224
225         debugfilter("reseting configuration "+target_configuration);
226
227         if (window.XMLHttpRequest)
228           {// code for IE7+, Firefox, Chrome, Opera, Safari
229           xmlhttp=new XMLHttpRequest();
230           }
231         else
232           {// code for IE6, IE5
233           xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
234           }
235         xmlhttp.onreadystatechange=function()
236           {
237           if (xmlhttp.readyState==4) // && xmlhttp.status==200)
238             {
239                 //value=xmlhttp.responseText;
240                 //debugfilter(value);
241                 window.location.reload(true);
242             }
243           }
244         xmlhttp.open("GET","/plekit/php/updateConf.php?value="+target_configuration+"&slice_id="+slice_id+"&tagName=Configuration",true);
245
246         xmlhttp.send();
247 }
248
249 function addColumnToConfiguration(column) {
250
251
252         var old_configuration = document.getElementById('column_configuration').value;
253         var slice_id = document.getElementById('slice_id').value;
254
255         var new_configuration = "";
256
257         if (old_configuration != "")
258                 new_configuration = old_configuration += "|"+column;
259         else
260                 new_configuration = column;
261
262         //debugfilter("new configuration = "+new_configuration);
263
264         updateColumnConfiguration(slice_id, new_configuration);
265 }
266
267
268
269 /*
270  
271 ADD/REMOVE COLUMNS
272
273 */
274
275
276 function getHTTPObject()
277 {
278         if (typeof XMLHttpRequest != 'undefined')
279         { return new XMLHttpRequest(); }
280
281         try
282         { return new ActiveXObject("Msxml2.XMLHTTP"); }
283         catch (e)
284         {
285                 try { return new ActiveXObject("Microsoft.XMLHTTP"); }
286                 catch (e) {}
287         }
288         return false;
289 }
290
291
292 function load_html(column, url) {
293         var req = getHTTPObject();
294         var res;
295         req.open('GET', url, true);
296         req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
297         req.onreadystatechange =
298         function() {
299                 if (req.readyState == 4)
300                 { updateColumnData(column, req.responseText); }
301         }
302         req.send(null);
303 }
304
305 function updateColumnData(column,data) {
306
307
308 var headers = column.split("|");
309 var data_table = data.split("|"); 
310
311 //debugfilter("<p>headers[0] = "+headers[0]);
312 //debugfilter("<p>sample line = "+data_table[2]);
313
314
315   var node_data;
316
317   var table_id1 = 'nodes';
318   var table=$(table_id1);
319   var css='#'+table_id1+'>tbody';
320   var rows = $$(css)[0].rows;
321
322   var data_array1 = new Array();
323
324   //debugfilter("COLUMN "+column+"<p>");
325
326   for (var node_index = 1; node_index < data_table.length; node_index++) {
327         if (data_table[node_index] == '---potential---')        
328                 break;
329         node_data = data_table[node_index].split(':');
330
331         data_array1[node_data[0]] = new Array();
332
333         for (var h_index=0; h_index < headers.length; h_index++) {
334                 
335                 if (node_data[h_index+1] == "")
336                         data_array1[node_data[0]][h_index] = "n/a";
337                 else
338                         data_array1[node_data[0]][h_index] = node_data[h_index+1];
339         }
340
341   }
342         
343   if (rows)
344   for (var row_index = 0; row_index < rows.length ; row_index++) {
345     var tr=rows[row_index];
346
347     for (var column_index=0; column_index < tr.cells.length; column_index++) {
348                 //debugfilter("<p>node id = "+tr.cells[0].innerHTML);
349                 var found_index = headers.indexOf(tr.cells[column_index].getAttribute('name'));
350                 if (found_index != -1)
351                         tr.cells[column_index].innerHTML = data_array1[tr.cells[0].innerHTML][found_index];
352     }
353   }
354
355 //potential nodes
356 if (data_table[node_index] == '---potential---')        
357 {
358
359   var table_id2 = 'add_nodes';
360   var table2=$(table_id2);
361   var css2='#'+table_id2+'>tbody';
362   var rows2 = $$(css2)[0].rows;
363
364   var data_array2 = new Array();
365
366   //debugfilter("COLUMN "+column+"<p>");
367
368   for (; node_index < data_table.length; node_index++) {
369         if (data_table[node_index] == '')       
370                 continue;
371         node_data = data_table[node_index].split(':');
372
373         data_array2[node_data[0]] = new Array();
374
375         for (var h_index=0; h_index < headers.length; h_index++) {
376                 
377                 if (node_data[h_index+1] == "")
378                         data_array2[node_data[0]][h_index] = "n/a";
379                 else
380                         data_array2[node_data[0]][h_index] = node_data[h_index+1];
381         }
382   }
383         
384   if (rows)
385   for (var row_index = 0; row_index < rows2.length ; row_index++) {
386     var tr=rows2[row_index];
387
388     for (var column_index=0; column_index < tr.cells.length; column_index++) {
389                 var found_index = headers.indexOf(tr.cells[column_index].getAttribute('name'));
390                 if (found_index != -1)
391                         tr.cells[column_index].innerHTML = data_array2[tr.cells[0].innerHTML][found_index];
392     }
393   }
394
395 }
396
397   document.getElementById('loadingDiv').innerHTML = ""
398 }
399
400
401
402
403
404 function addColumnCells(column,header) {
405
406         //debugfilter("adding cells now: "+column+":"+header);
407         column_table[header]['visible']=true;
408
409         var cells = document.getElementsByName(header);
410
411
412         //debugfilter("got cells -"+cells+"- for "+header);
413         for(var j = 0; j < cells.length; j++) 
414                 cells[j].style.display = "table-cell";
415 }
416
417 function addColumnSamples(column) {
418
419         var cellsheader = document.getElementsByName("confheader"+column);
420         for(var j = 0; j < cellsheader.length; j++) 
421                 cellsheader[j].style.display = "table-cell";
422
423 }
424
425 function addColumnAjax(column) {
426
427         var selectedperiod="";
428
429         if (document.getElementById('selectperiod'+column))
430                 selectedperiod = document.getElementById('selectperiod'+column).value;
431
432         var header = column+""+selectedperiod;
433
434         addColumnCells(column, header);
435
436         var t = column_table[header]['tagname'];
437         var slice_id = document.getElementById('slice_id').value;
438         document.getElementById('loadingDiv').innerHTML = "<img src=/plekit/icons/ajax-loader.gif>LOADING ...";
439         var url = "/plekit/php/updateColumn.php?slice_id="+slice_id+"&tagName="+t;
440         load_html(header, url);
441
442         addColumnToConfiguration(header);
443 }
444
445
446 function addColumn2(column) {
447
448         var selectedperiod="";
449
450         if (document.getElementById('selectperiod'+column))
451                 selectedperiod = document.getElementById('selectperiod'+column).value;
452
453         var header = column+""+selectedperiod;
454
455         addColumnCells(column,header);
456
457         addColumnToConfiguration(column);
458
459         checkDataToFetch();
460 }
461
462 function addColumn(column) {
463
464         var selectedperiod="";
465         var header=column;
466
467         //debugfilter("adding column "+column+" and header "+header);
468
469         if (inTypeC(column)!=-1)
470         {
471                 column = column.substring(0,column.length-1);
472         }
473         else if (document.getElementById('selectperiod'+column))
474         {
475                 selectedperiod = document.getElementById('selectperiod'+column).value;
476                 header = column+""+selectedperiod;
477         }
478
479         //debugfilter("adding "+column+","+header);
480
481         addColumnCells(column, header);
482
483         addColumnToConfiguration(header);
484
485         column_table[header]['visible'] = true;
486         
487         checkDataToFetch();
488 }
489
490 function checkDataToFetch() {
491
492 var dataExist = false;
493
494 for (var kk in column_table) {
495
496         if (document.getElementById(kk))
497         {
498                 if (column_table[kk]['visible'] == true && column_table[kk]['fetch'] == false)
499                 {
500                         document.getElementById('fetchbutton').disabled = false;
501                         document.getElementById('fetchbutton').style.color = 'red';
502                         dataExist = true;
503                 }
504         }
505 }
506
507 if (!dataExist)
508 {
509         document.getElementById('fetchbutton').disabled = true;
510         document.getElementById('fetchbutton').style.color = 'grey';
511 }
512
513 }
514
515
516 function fetchData() {
517
518 var tagnames = "";
519 var headers = "";
520
521 for (var kk in column_table) {
522
523 if (column_table[kk]['visible'] == true && column_table[kk]['fetch'] == false)
524         if (tagnames == "")
525         {       
526                 tagnames = column_table[kk]['tagname'];
527                 headers = kk;
528         }
529         else
530         {
531                 tagnames += "|"+column_table[kk]['tagname'];
532                 headers += "|"+kk;
533         }
534 }
535
536 //debugfilter("fetching these columns: "+tagnames+ "("+headers+")");
537
538         var slice_id = document.getElementById('slice_id').value;
539         document.getElementById('loadingDiv').innerHTML = "&nbsp;&nbsp;&nbsp;<img src=/plekit/icons/ajax-loader.gif>&nbsp;Loading data. Please wait ...";
540         var url = "/plekit/php/updateColumn.php?slice_id="+slice_id+"&tagName="+tagnames;
541         load_html(headers, url);
542 }
543
544 function deleteColumnCells(column, header) {
545
546         column_table[header]['visible']=false;
547
548         var cells = document.getElementsByName(header);
549         for(var j = 0; j < cells.length; j++) 
550                 cells[j].style.display = "none";
551
552 }
553
554 function deleteColumnSample() {
555         var cellsheader = document.getElementsByName("confheader"+column);
556         for(var j = 0; j < cellsheader.length; j++) 
557                 cellsheader[j].style.display = "none";
558
559 }
560
561 function deleteColumnFromConfiguration(column) {
562
563
564         var old_configuration = document.getElementById('column_configuration').value;
565         var slice_id = document.getElementById('slice_id').value;
566
567         var old_columns = old_configuration.split("|");
568         var new_columns = new Array();
569
570         for (var column_index = 0; column_index < old_columns.length ; column_index++) {
571                 var conf = old_columns[column_index].split(':');
572                 if (conf[0] != column)
573                         new_columns.push(old_columns[column_index]);
574         }
575
576         var new_configuration = new_columns.join("|");
577         updateColumnConfiguration(slice_id, new_configuration);
578
579         checkDataToFetch();
580 }
581
582 function deleteColumn2(column, header) {
583
584         deleteColumnCells(column,header);
585
586         deleteColumnFromConfiguration(column);
587
588         column_table[header]['visible'] = false;
589         document.getElementById('check'+column).checked = false;
590 }
591
592 function deleteColumn(column) {
593
594         var selectedperiod="";
595         var header=column;
596
597         if (inTypeC(column)!=-1)
598         {
599                 column = column.substring(0,column.length-1);
600         }
601         else if (document.getElementById('selectperiod'+column))
602         {
603                 selectedperiod = document.getElementById('selectperiod'+column).value;
604                 header = column+""+selectedperiod;
605         }
606
607         //debugfilter("deleting "+column+","+header);
608
609         deleteColumnCells(column,header);
610
611         deleteColumnFromConfiguration(header);
612
613         column_table[header]['visible'] = false;
614
615         //document.getElementById('check'+column).checked = false;
616 }
617
618
619
620
621 /*
622  
623
624 HIGHLIGHTING
625
626
627
628 function updateColumnThreshold(column, minT, maxT) {
629
630 debugfilter("updating threshold for "+column+" with "+minT+" and "+maxT);
631
632 var cells = document.getElementsByName(column);
633
634 for(var j = 0; j < cells.length; j++) 
635 {
636 var val = parseFloat(cells[j].innerHTML);
637
638 if (val >= minT && val <= maxT)
639         cells[j].style.color = filtered_color;
640 else
641         cells[j].style.color = normal_color;
642 }
643
644 var old_configuration = document.getElementById('column_configuration').value;
645 var slice_id = document.getElementById('slice_id').value;
646
647 var old_columns = old_configuration.split("|");
648 var new_columns = new Array();
649
650 for (var column_index = 0; column_index < old_columns.length ; column_index++) {
651         var conf = old_columns[column_index].split(':');
652         if (conf[0] != column)
653                 new_columns.push(old_columns[column_index]);
654         else
655                 new_columns.push(column+":"+minT+","+maxT);
656 }
657
658 var new_configuration = new_columns.join("|");
659
660 updateColumnConfiguration(slice_id, new_configuration);
661
662 }
663
664 function updateExcludeList(column, excludeList) {
665
666 //debugfilter("updating list");
667 debugfilter("updating list for "+column+" with "+excludeList);
668
669 var cells = document.getElementsByName(column);
670
671 for(var j = 1; j < cells.length; j++) 
672 {
673 var val = cells[j].innerHTML;
674
675 if (excludeList == val)
676         cells[j].style.color = filtered_color;
677 else
678         cells[j].style.color = normal_color;
679 }
680
681 var old_configuration = document.getElementById('column_configuration').value;
682 var slice_id = document.getElementById('slice_id').value;
683
684 var old_columns = old_configuration.split("|");
685 var new_columns = new Array();
686
687 for (var column_index = 0; column_index < old_columns.length ; column_index++) {
688         var conf = old_columns[column_index].split(':');
689         if (conf[0] != column)
690                 new_columns.push(old_columns[column_index]);
691         else
692                 new_columns.push(column+":"+excludeList);
693 }
694
695 var new_configuration = new_columns.join("|");
696
697 updateColumnConfiguration(slice_id, new_configuration);
698
699 }
700
701
702
703 /*
704  
705 ROW FILTERING
706
707
708 function plekit_table_showAll (slicetable_id) {
709
710   var table=$(slicetable_id);
711   var css='#'+slicetable_id+'>tbody';
712   var rows = $$(css)[0].rows;
713
714   // scan rows, elaborate 'visible'
715   for (var row_index = 0; row_index < rows.length ; row_index++) {
716     var tr=rows[row_index];
717     var visible=true;
718     plekit_table_row_visible(tr,visible);
719   }
720
721     plekit_table_count_filtered(slicetable_id);
722
723   tablePaginater.init(slicetable_id);
724   
725 }
726
727 function plekit_table_count_filtered (slicetable_id) {
728   var table=$(slicetable_id);
729   var css='#'+slicetable_id+'>tbody';
730   var rows = $$(css)[0].rows;
731
732   var no_filtered=0;
733
734   // scan rows, elaborate 'visible'
735   for (var row_index = 0; row_index < rows.length ; row_index++) {
736     var tr=rows[row_index];
737     var filtered = false;
738
739     for (var column_index=0; column_index < tr.cells.length; column_index++) 
740                 if (tr.cells[column_index].style.color == "red")
741                         filtered = true;
742
743         if (filtered)
744         no_filtered++;
745
746   }
747
748   debugfilter(no_filtered+' nodes do not satisfy the requested threshold');
749 }
750
751
752 function plekit_table_hide_filtered (slicetable_id) {
753   var table=$(slicetable_id);
754   var css='#'+slicetable_id+'>tbody';
755   var rows = $$(css)[0].rows;
756
757   var reg = /(^|\s)invisibleRow(\s|$)/;
758
759
760   if (!document.getElementById('filtercheck').checked)
761   {
762         plekit_table_showAll(slicetable_id);
763         return;
764   }
765
766   var hidden=0;
767
768   // scan rows, elaborate 'visible'
769   for (var row_index = 0; row_index < rows.length ; row_index++) {
770     var tr=rows[row_index];
771     var visible=true;
772
773     for (var column_index=0; column_index < tr.cells.length; column_index++) {
774                 if (tr.cells[column_index].style.color == filtered_color)
775                         visible = false;
776     }
777     if (!visible)
778         hidden++;
779
780     plekit_table_row_visible(tr,visible);
781   }
782
783   //debugfilter('hidden '+hidden+' nodes');
784   debugfilter(hidden+' nodes do not satisfy the requested threshold (hidden)');
785   
786   tablePaginater.init(slicetable_id);
787 }
788
789
790
791
792 function plekit_table_apply_config(slicetable_id, configuration) {
793
794 var new_configuration = document.getElementById('new_conf').value;
795 var all_columns = new_configuration.split("|");
796
797 var min_values = new Array();
798 var max_values = new Array();
799
800
801 for (var column_index = 0; column_index < all_columns.length ; column_index++) {
802
803         var conf = all_columns[column_index].split(':');
804         
805         if (inTypeB(conf[0]) != -1)
806         {
807                 var threshold = conf[1].split(',');
808                 if (threshold.length == 2)
809                 {
810                 min_values.push(parseFloat(threshold[0]));
811                 max_values.push(parseFloat(threshold[1]));
812                 }
813         }
814         else if (inTypeC(conf[0]) == -1)
815         {
816                 var threshold = conf[2].split(',');
817                 if (threshold.length == 2)
818                 {
819                 min_values.push(parseInt(threshold[0]));
820                 max_values.push(parseInt(threshold[1]));
821                 }
822         }
823         else
824         {
825                 min_values.push(-1);
826                 max_values.push(-1);
827         }
828         
829 }
830
831   var table=$(slicetable_id);
832   var css='#'+slicetable_id+'>tbody';
833   var rows = $$(css)[0].rows;
834
835
836   var no_filtered=0;
837
838   for (var row_index = 0; row_index < rows.length ; row_index++) {
839
840         var tr=rows[row_index];
841
842         var filtered = false;
843
844         for (var column_index = 0; column_index < all_columns.length ; column_index++) 
845         if (min_values[column_index]!=-1)
846         {
847                 var val = parseFloat(tr.cells[3+column_index].innerHTML);
848                 
849                 if (val >= min_values[column_index] && val <= max_values[column_index])
850                 {
851                         tr.cells[3+column_index].style.color = filtered_color;
852                         filtered = true;
853                 }
854                 else
855                         tr.cells[3+column_index].style.color = normal_color;
856         }
857         else
858                 if (tr.cells[3+column_index].style.color == filtered_color)
859                         filtered = true;
860                 
861
862         if (filtered)
863         no_filtered++;
864   }
865
866   debugfilter(no_filtered+' nodes do not satisfy the requested threshold');
867
868   //tablePaginater.init(slicetable_id);
869
870 }
871
872
873 function reset_select () {
874   var table=$(slicetable_id);
875   var css='#'+slicetable_id+'>tbody';
876   var rows = $$(css)[0].rows;
877
878 var action = document.getElementById('onlyselected');
879 action.checked=false;
880
881   // scan rows, elaborate 'visible'
882   for (var row_index = 0; row_index < rows.length ; row_index++) {
883     var tr=rows[row_index];
884
885     document.getElementById("check"+tr.id).checked=false;
886
887   }
888
889   plekit_table_count_nodes();
890 }
891
892 }
893
894
895 function plekit_table_select_filter () {
896   var table=$(slicetable_id);
897   var css='#'+slicetable_id+'>tbody';
898   var rows = $$(css)[0].rows;
899
900   var reg = /(^|\s)invisibleRow(\s|$)/;
901
902   var action = document.getElementById('onlyselected');
903   if (!action.checked)
904         plekit_table_reset_filter();
905
906   // scan rows, elaborate 'visible'
907   for (var row_index = 0; row_index < rows.length ; row_index++) {
908     var tr=rows[row_index];
909     var visible=true;
910
911     if (action.checked)
912     {
913          if(tr.className.search(reg) == -1) 
914               if(!document.getElementById("check"+tr.id).checked)
915                   visible=false;
916     }
917
918     if(tr.className.search(reg) != -1) 
919         visible=false;
920
921     plekit_table_row_visible(tr,visible);
922   }
923   
924   tablePaginater.init(slicetable_id);
925   plekit_table_count_nodes();
926 }
927
928 function plekit_table_select_filter2 () {
929   var table=$(slicetable_id);
930   var css='#'+slicetable_id+'>tbody';
931   var rows = $$(css)[0].rows;
932
933   var reg = /(^|\s)invisibleRow(\s|$)/;
934
935   var action = document.getElementById('onlyselected');
936
937   // scan rows, elaborate 'visible'
938   for (var row_index = 0; row_index < rows.length ; row_index++) {
939     var tr=rows[row_index];
940     var visible=true;
941
942     if (action.checked)
943     {
944          if(tr.className.search(reg) == -1) 
945               if(!document.getElementById("check"+tr.id).checked)
946                   visible=false;
947     }
948
949     if(tr.className.search(reg) != -1) 
950         visible=false;
951
952     plekit_table_row_visible(tr,visible);
953   }
954   
955   tablePaginater.init(slicetable_id);
956   plekit_table_count_nodes();
957 }
958
959 function CheckTopNodes(n) {
960   var table=$(slicetable_id);
961   var css='#'+slicetable_id+'>tbody';
962   var rows = $$(css)[0].rows;
963   var reg = /(^|\s)invisibleRow(\s|$)/;
964
965   var checked=0;
966
967   for (var row_index = 0; row_index < rows.length ; row_index++) {
968     var tr=rows[row_index];
969
970     if(tr.className.search(reg) == -1) {
971         if (checked<n)
972         {
973                 document.getElementById("check"+tr.id).checked=true;
974                 checked++;
975         }
976         else
977         {
978                 document.getElementById("check"+tr.id).checked=false;
979         };
980     };
981    };
982 };
983
984
985 function CheckRandomNodes(n) {
986   var table=$(slicetable_id);
987   var css='#'+slicetable_id+'>tbody';
988   var rows = $$(css)[0].rows;
989   var reg = /(^|\s)invisibleRow(\s|$)/;
990
991   var r = n/plekit_table_visible_count();
992   var checked=0;
993
994   for (var row_index = 0; row_index < rows.length ; row_index++) {
995     var tr=rows[row_index];
996
997     if(tr.className.search(reg) == -1) {
998         if(Math.random() < r) {
999                 document.getElementById("check"+tr.id).checked=true;
1000                 checked++;
1001         };
1002         if (checked>=n)
1003                 break;
1004      };
1005   };
1006 };
1007
1008
1009 function plekit_table_visible_count() {
1010   var table=$(slicetable_id);
1011   var css='#'+slicetable_id+'>tbody';
1012   var rows = $$(css)[0].rows;
1013   var reg = /(^|\s)invisibleRow(\s|$)/;
1014   var v=0;
1015
1016   for (var row_index = 0; row_index < rows.length ; row_index++) {
1017     var tr=rows[row_index];
1018
1019         if(tr.className.search(reg) == -1) 
1020         {
1021                 v++;
1022         }
1023   }
1024
1025   return v;
1026 }
1027
1028
1029 function plekit_table_count_nodes() {
1030   var table=$(slicetable_id);
1031   var css='#'+slicetable_id+'>tbody';
1032   var rows = $$(css)[0].rows;
1033   var reg = /(^|\s)invisibleRow(\s|$)/;
1034   var n=0;
1035   var v=0;
1036   var s=0;
1037
1038   for (var row_index = 0; row_index < rows.length ; row_index++) {
1039     var tr=rows[row_index];
1040
1041         n++;
1042         var ch = document.getElementById("check"+tr.id);
1043
1044         if(tr.className.search(reg) == -1) 
1045                 v++;
1046         else
1047         {
1048                 if (ch.checked)
1049                         ch.checked=false;
1050         };
1051
1052         if (ch.checked)
1053                 s++;
1054         
1055    };
1056
1057    var dd = document.getElementById('node_statistics');
1058    dd.innerHTML = "Total: "+n+" - Shown: "+v+" - Selected: "+s;
1059 };
1060
1061 function AutoSelect()
1062 {
1063   var a = document.getElementById('automatic').value;
1064   var n = parseInt(document.getElementById('no_nodes').value);
1065
1066   if (isNaN(n))
1067         return;
1068
1069   if (a == "random")
1070          CheckRandomNodes(n);
1071   else if (a == "top")
1072          CheckTopNodes(n);
1073
1074   plekit_table_select_filter2();
1075   plekit_table_count_nodes();
1076 }
1077
1078 */