
/* - table_sorter.js - */
// http://www.ripe.net/portal_javascripts/table_sorter.js?original=1
(function($){
function sortabledataclass(cell){var re=new RegExp("sortabledata-([^ ]*)","g");var matches=re.exec(cell.attr('class'));if(matches) return matches[1]
else return null}
function sortable(cell){var text=sortabledataclass(cell);if(text==null) text=cell.text();if(text.charAt(4)!='-'&&text.charAt(7)!='-'&&!isNaN(parseFloat(text)))
return parseFloat(text);return text.toLowerCase()}
function sort(){var th=$(this).closest('th');var colnum=$('th',$(this).closest('thead')).index(th);var table=$(this).parents('table:first');var tbody=table.find('tbody:first');var reverse=table.attr('sorted')==colnum;$(this).parent().find('th:not(.nosort) .sortdirection').html('&#x2003;');$(this).children('.sortdirection').html(reverse?'&#x25b2;':'&#x25bc;');var index=$(this).parent().children('th').index(this);var data=[];var usenumbers=true;tbody.find('tr').each(function(){var cells=$(this).children('td');var sortableitem=sortable(cells.slice(index,index+1));if(isNaN(sortableitem)) usenumbers=false;data.push([sortableitem,sortable(cells.slice(1,2)),sortable(cells.slice(0,1)),this])});if(data.length){if(usenumbers)
data.sort(function(a,b){return a[0]-b[0]});else
data.sort();if(reverse) data.reverse();table.attr('sorted',reverse?'':colnum);tbody.append($.map(data, function(a){return a[3]}));tbody.each(setoddeven)}}
function setoddeven(){var tbody=$(this);tbody.find('tr').removeClass('odd').removeClass('even').filter(':odd').addClass('even').end().filter(':even').addClass('odd')}
$(function(){var blankarrow=$('<span>&#x2003;</span>').addClass('sortdirection');$('table.listing:not(.nosort) thead th:not(.nosort)').append(blankarrow.clone()).css('cursor','pointer').click(sort);$('table.listing:not(.nosort) tbody').each(setoddeven)})})(jQuery);

