var image_path="images/sortable_table/";var image_up="arrow-up.gif";var image_down="arrow-down.gif";var image_none="arrow-none.gif";addEvent(window,"load",sortables_init);var SORT_COLUMN_INDEX;function sortables_init(){if(!document.getElementsByTagName)return;tbls=document.getElementsByTagName("table");for(ti=0;ti<tbls.length;ti++){thisTbl=tbls[ti];if(((' '+thisTbl.className+' ').indexOf("sortable")!=-1)&&(thisTbl.id)){ts_makeSortable(thisTbl)}}}function ts_makeSortable(table){if(table.rows&&table.rows.length>0){var firstRow=table.rows[0]}if(!firstRow)return;for(var i=0;i<firstRow.cells.length;i++){var cell=firstRow.cells[i];var txt=ts_getInnerText(cell);if(cell.className!="unsortable"&&cell.className.indexOf("unsortable")==-1){cell.innerHTML='<a href="#" class="sortheader" onclick="ts_resortTable(this);return false;">'+txt+'<span class="sortarrow">&nbsp;&nbsp;<img src="'+image_path+image_none+'" alt="&darr;"/></span></a>'}}alternate(table)}function ts_getInnerText(el){if(typeof el=="string")return el;if(typeof el=="undefined"){return el};if(el.innerText)return el.innerText;var str="";var cs=el.childNodes;var l=cs.length;for(var i=0;i<l;i++){switch(cs[i].nodeType){case 1:str+=ts_getInnerText(cs[i]);break;case 3:str+=cs[i].nodeValue;break}}return str}function ts_resortTable(lnk){var span;for(var ci=0;ci<lnk.childNodes.length;ci++){if(lnk.childNodes[ci].tagName&&lnk.childNodes[ci].tagName.toLowerCase()=='span')span=lnk.childNodes[ci]}var spantext=ts_getInnerText(span);var td=lnk.parentNode;var column=td.cellIndex;var table=getParent(td,'TABLE');if(table.rows.length<=1)return;var itm=ts_getInnerText(table.rows[1].cells[column]);sortfn=ts_sort_caseinsensitive;if(itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/))sortfn=ts_sort_date;if(itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/))sortfn=ts_sort_date;if(itm.match(/^[£$€]/))sortfn=ts_sort_currency;if(itm.match(/^[\d\.]+$/))sortfn=ts_sort_numeric;SORT_COLUMN_INDEX=column;var firstRow=new Array();var newRows=new Array();for(i=0;i<table.rows[0].length;i++){firstRow[i]=table.rows[0][i]}for(j=1;j<table.rows.length;j++){newRows[j-1]=table.rows[j]}newRows.sort(sortfn);if(span.getAttribute("sortdir")=='down'){ARROW='&nbsp;&nbsp;<img src="'+image_path+image_up+'" alt="&uarr;"/>';newRows.reverse();span.setAttribute('sortdir','up')}else{ARROW='&nbsp;&nbsp;<img src="'+image_path+image_down+'" alt="&darr;"/>';span.setAttribute('sortdir','down')}for(i=0;i<newRows.length;i++){if(!newRows[i].className||(newRows[i].className&&(newRows[i].className.indexOf('sortbottom')==-1))){table.tBodies[0].appendChild(newRows[i])}}for(i=0;i<newRows.length;i++){if(newRows[i].className&&(newRows[i].className.indexOf('sortbottom')!=-1))table.tBodies[0].appendChild(newRows[i])}var allspans=document.getElementsByTagName("span");for(var ci=0;ci<allspans.length;ci++){if(allspans[ci].className=='sortarrow'){if(getParent(allspans[ci],"table")==getParent(lnk,"table")){allspans[ci].innerHTML='&nbsp;&nbsp;<img src="'+image_path+image_none+'" alt="&darr;"/>'}}}span.innerHTML=ARROW;alternate(table)}function getParent(el,pTagName){if(el==null){return null}else if(el.nodeType==1&&el.tagName.toLowerCase()==pTagName.toLowerCase()){return el}else{return getParent(el.parentNode,pTagName)}}function ts_sort_date(a,b){aa=ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);bb=ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);if(aa.length==10){dt1=aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2)}else{yr=aa.substr(6,2);if(parseInt(yr)<50){yr='20'+yr}else{yr='19'+yr}dt1=yr+aa.substr(3,2)+aa.substr(0,2)}if(bb.length==10){dt2=bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2)}else{yr=bb.substr(6,2);if(parseInt(yr)<50){yr='20'+yr}else{yr='19'+yr}dt2=yr+bb.substr(3,2)+bb.substr(0,2)}if(dt1==dt2){return 0}if(dt1<dt2){return-1}return 1}function ts_sort_currency(a,b){aa=ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');bb=ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');return parseFloat(aa)-parseFloat(bb)}function ts_sort_numeric(a,b){aa=parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));if(isNaN(aa)){aa=0}bb=parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));if(isNaN(bb)){bb=0}return aa-bb}function ts_sort_caseinsensitive(a,b){aa=ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();bb=ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();if(aa==bb){return 0}if(aa<bb){return-1}return 1}function ts_sort_default(a,b){aa=ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);bb=ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);if(aa==bb){return 0}if(aa<bb){return-1}return 1}function addEvent(elm,evType,fn,useCapture){if(elm.addEventListener){elm.addEventListener(evType,fn,useCapture);return true}else if(elm.attachEvent){var r=elm.attachEvent("on"+evType,fn);return r}else{alert("Handler could not be removed")}}function replace(s,t,u){i=s.indexOf(t);r="";if(i==-1)return s;r+=s.substring(0,i)+u;if(i+t.length<s.length)r+=replace(s.substring(i+t.length,s.length),t,u);return r}function alternate(table){var tableBodies=table.getElementsByTagName("tbody");for(var i=0;i<tableBodies.length;i++){var tableRows=tableBodies[i].getElementsByTagName("tr");for(var j=1;j<tableRows.length;j++){if((j%2)==0){if(tableRows[j].className=='odd'||!(tableRows[j].className.indexOf('odd')==-1)){tableRows[j].className=replace(tableRows[j].className,'odd','even')}else{tableRows[j].className+=" even"}}else{if(tableRows[j].className=='even'||!(tableRows[j].className.indexOf('even')==-1)){tableRows[j].className=replace(tableRows[j].className,'even','odd')}tableRows[j].className+=" odd"}}}}