(function(){fdTableSort={regExp_Currency:/^[Â£$â‚¬Â¥Â¤]/,regExp_Number:/^(\-)?[0-9]+(\.[0-9]*)?$/,pos:-1,uniqueHash:1,thNode:null,tableId:null,tableCache:{},tmpCache:{},sortActiveClass:"sort-active",colspan:"colspan",rowspan:"rowspan",addEvent:function(a,b,c,d){d||(d=true);if(a.attachEvent){a["e"+b+c]=c;a[b+c]=function(){a["e"+b+c](window.event)};a.attachEvent("on"+b,a[b+c])}else{a.addEventListener(b,c,true)}},removeEvent:function(a,b,c,d){d||(d=true);try{if(a.detachEvent){a.detachEvent("on"+b,a[b+c]);a[b+c]=null}else{a.removeEventListener(b,c,true)}}catch(e){}},stopEvent:function(a){a=a||window.event;if(a.stopPropagation){a.stopPropagation();a.preventDefault()}return false},parseClassName:function(a,b){var c=b.className.match(new RegExp(a+"((-[\\d]+([r]){0,1})+)"));return c&&c.length?c[0].replace(a,"").split("-"):[]},disableSelection:function(a){a.onselectstart=function(){return false};a.unselectable="on";a.style.MozUserSelect="none"},removeTableCache:function(a){if(!(a in fdTableSort.tableCache))return;fdTableSort.tableCache[a]=null;delete fdTableSort.tableCache[a];var b=document.getElementById(a);if(!b)return;var c=b.getElementsByTagName("th");var d;for(var e=0,f;f=c[e];e++){d=f.getElementsByTagName("a");if(d.length)d[0].onkeydown=d[0].onclick=null;f.onclick=f.onselectstart=f=d=null}},removeTmpCache:function(a){if(!(a in fdTableSort.tmpCache))return;var b=fdTableSort.tmpCache[a].headers;var c;for(var d=0,e;e=b[d];d++){for(var f=0,g;g=e[f];f++){c=g.getElementsByTagName("a");if(c.length)c[0].onkeydown=c[0].onclick=null;g.onclick=g.onselectstart=g=c=null}}fdTableSort.tmpCache[a]=null;delete fdTableSort.tmpCache[a]},initEvt:function(a){fdTableSort.init(false)},init:function(a){if(!document.getElementsByTagName||!document.createElement||!document.getElementById)return;var b=a&&document.getElementById(a)?[document.getElementById(a)]:document.getElementsByTagName("table");var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y;var z=document.createElement("a");z.href="#";z.className="fdTableSortTrigger";var A=document.createElement("span");for(var B=0,C;C=b[B];B++){if(C.id){fdTableSort.removeTableCache(C.id);fdTableSort.removeTmpCache(C.id)}s=C.getElementsByTagName("thead").length?C.getElementsByTagName("thead")[0].getElementsByTagName("tr"):C.getElementsByTagName("tr");t=[];u=false;for(var D=0,E;E=s[D];D++){if(E.getElementsByTagName("td").length||!E.getElementsByTagName("th").length){continue}t[t.length]=E.getElementsByTagName("th");for(var F=0,G;G=t[t.length-1][F];F++){if(G.className.search(/sortable/)!=-1){u=true}}}if(!u)continue;if(!C.id){C.id="fd-table-"+fdTableSort.uniqueHash++}i=C.className.search("no-arrow")==-1;g=C.className.search("sortable-onload-show")!=-1;j={};f=fdTableSort.parseClassName(g?"sortable-onload-show":"sortable-onload",C);for(h=1;h<f.length;h++){j[parseInt(f[h],10)]={reverse:f[h].search("r")!=-1}}y=t[0].length;for(c=0;c<t[0].length;c++){if(t[0][c].getAttribute(fdTableSort.colspan)&&t[0][c].getAttribute(fdTableSort.colspan)>1){y=y+(t[0][c].getAttribute(fdTableSort.colspan)-1)}}l=new Array(t.length);for(c=t.length;c--;){l[c]=new Array(y)}for(c=0;c<l.length;c++){v=0;for(D=0;D<y;D++){if(!l[c][D]){r=t[c][v];w=r.getAttribute(fdTableSort.colspan)>1?r.getAttribute(fdTableSort.colspan):1;x=r.getAttribute(fdTableSort.rowspan)>1?r.getAttribute(fdTableSort.rowspan):1;for(var H=0;H<w&&D+H<y;H++){for(var I=0;I<x&&c+I<l.length;I++){l[c+I][D+H]=r}}if(++v==t[c].length)break}}}for(c=0;c<l.length;c++){for(D=0;D<l[c].length;D++){if(l[c][D].className.search("fd-column-")==-1&&l[c][D].className.search("sortable")!=-1)l[c][D].className=l[c][D].className+" fd-column-"+D;if(l[c][D].className.match("sortable")){l[c][D].className=l[c][D].className.replace(/forwardSort|reverseSort/,"");if(D in j){j[D]["thNode"]=l[c][D];j["active"]=true}n=fdTableSort.getInnerText(l[c][D]);for(var J=l[c][D].childNodes.length;J--;){if(l[c][D].childNodes[J].nodeType==1&&(l[c][D].childNodes[J].className=="fdFilterTrigger"||/img/i.test(l[c][D].childNodes[J].nodeName))){continue}if(l[c][D].childNodes[J].nodeType==1&&/^a$/i.test(l[c][D].childNodes[J].nodeName)){l[c][D].childNodes[J].onclick=l[c][D].childNodes[J].onkeydown=null}l[c][D].removeChild(l[c][D].childNodes[J])}o=z.cloneNode(true);o.appendChild(document.createTextNode(n));o.title="Sort on “"+n+"”";o.onclick=o.onkeydown=l[c][D].onclick=fdTableSort.initWrapper;l[c][D].appendChild(o);if(i)l[c][D].appendChild(A.cloneNode(false));l[c][D].className=l[c][D].className.replace(/fd-identical|fd-not-identical/,"");fdTableSort.disableSelection(l[c][D]);o=null}}}fdTableSort.tmpCache[C.id]={cols:y,headers:l};l=null;p=0;if("active"in j){fdTableSort.tableId=C.id;fdTableSort.prepareTableData(document.getElementById(fdTableSort.tableId));delete j["active"];for(col in j){k=j[col];if(!("thNode"in k)){continue}fdTableSort.multi=true;e=k.reverse?2:1;for(d=0;d<e;d++){fdTableSort.thNode=k.thNode;if(!g){fdTableSort.initSort(false,true)}else{fdTableSort.addThNode()}}if(g){fdTableSort.removeClass(k.thNode,"(forwardSort|reverseSort)");fdTableSort.addClass(k.thNode,k.reverse?"reverseSort":"forwardSort");if(i){A=fdTableSort.thNode.getElementsByTagName("span")[0];if(A.firstChild){A.removeChild(A.firstChild)}A.appendChild(document.createTextNode(e==1?" ↓":" ↑"))}}}if(g&&(fdTableSort.tableCache[C.id].colStyle||fdTableSort.tableCache[C.id].rowStyle)){fdTableSort.redraw(C.id,false)}}else if(C.className.search(/onload-zebra/)!=-1){fdTableSort.tableId=C.id;fdTableSort.prepareTableData(C);if(fdTableSort.tableCache[C.id].rowStyle){fdTableSort.redraw(C.id,false)}}}fdTableSort.thNode=o=z=A=j=thNode=C=s=t=null},initWrapper:function(a){a=a||window.event;var b=a.type=="keydown"?a.keyCode!=null?a.keyCode:a.charCode:-1;if(fdTableSort.thNode==null&&(a.type=="click"||b==13)){var c=this;while(c.tagName.toLowerCase()!="th"){c=c.parentNode}fdTableSort.thNode=c;while(c.tagName.toLowerCase()!="table"){c=c.parentNode}fdTableSort.tableId=c.id;fdTableSort.multi=a.shiftKey;fdTableSort.addSortActiveClass();setTimeout(fdTableSort.initSort,5,false);return fdTableSort.stopEvent(a)}return b!=-1?true:fdTableSort.stopEvent(a)},jsWrapper:function(a,b){if(!(a in fdTableSort.tmpCache)){return false}if(!(a in fdTableSort.tableCache)){fdTableSort.prepareTableData(document.getElementById(a))}if(!(b instanceof Array)){b=[b]}fdTableSort.tableId=a;var c=b.length,d;if(fdTableSort.tableCache[a].thList.length==b.length){var e=true;var f;for(var g=0;g<c;g++){d=b[g];f=fdTableSort.tmpCache[a].headers[0][d];if(f!=fdTableSort.tableCache[a].thList[g]){e=false;break}}if(e){fdTableSort.thNode=f;fdTableSort.initSort(true);return}}fdTableSort.addSortActiveClass();for(var g=0;g<c;g++){fdTableSort.multi=g;d=b[g];fdTableSort.thNode=fdTableSort.tmpCache[a].headers[0][d];fdTableSort.initSort(true)}},addSortActiveClass:function(){if(fdTableSort.thNode==null){return}fdTableSort.addClass(fdTableSort.thNode,fdTableSort.sortActiveClass);fdTableSort.addClass(document.getElementsByTagName("body")[0],fdTableSort.sortActiveClass)},removeSortActiveClass:function(){if(fdTableSort.thNode==null)return;fdTableSort.removeClass(fdTableSort.thNode,fdTableSort.sortActiveClass);fdTableSort.removeClass(document.getElementsByTagName("body")[0],fdTableSort.sortActiveClass)},doCallback:function(a){if(!fdTableSort.tableId||!(fdTableSort.tableId in fdTableSort.tableCache)){return}fdTableSort.callback(fdTableSort.tableId,a?fdTableSort.tableCache[fdTableSort.tableId].initiatedCallback:fdTableSort.tableCache[fdTableSort.tableId].completeCallback)},addClass:function(a,b){if((new RegExp("(^|\\s)"+b+"(\\s|$)")).test(a.className)){return}a.className+=(a.className?" ":"")+b},removeClass:function(a,b){a.className=!b?"":a.className.replace(new RegExp("(^|\\s)"+b+"(\\s|$)")," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")},callback:function(a,b){var c;if(b.indexOf(".")!=-1){var d=b.split(".");c=window;for(var e=0,f;f=d[e];e++){if(f in c){c=c[f]}else{c="";break}}}else if(b+a in window){c=window[b+a]}else if(b in window){c=window[b]}if(typeof c=="function"){c(a,fdTableSort.tableCache[a].thList)}c=null},prepareTableData:function(a){var b=[];var c=a.getElementsByTagName("tbody");c=c.length?c[0]:a;var d=c.rows;var e=a.getElementsByTagName("th");var f=d.length;var g=fdTableSort.tmpCache[a.id].cols;var b=[];var h=new Array(g);var i=new Array(g);for(var j=0;j<g;j++)h[j]=true;var k,l,m,n,o,p,q;var r=new RegExp(/fd-column-([0-9]+)/);var s=0;var t=[];for(var j=0,m;m=e[j];j++){if(m.className.search(r)==-1)continue;t[t.length]=m}for(q=0;q<f;q++){k=d[q];if(k.parentNode!=c||k.getElementsByTagName("th").length||k.parentNode&&k.parentNode.tagName.toLowerCase().search(/thead|tfoot/)!=-1)continue;b[s]=[];o=k.cells;for(var j=0,m;m=t[j];j++){p=m.className.match(r)[1];l=o[p];n=fdTableSort.getInnerText(l)+" ";n=n.replace(/^\s+/,"").replace(/\s+$/,"");if(m.className.search(/sortable-date/)!=-1){n=fdTableSort.dateFormat(n,m.className.search(/sortable-date-dmy/)!=-1)}else if(m.className.search(/sortable-numeric|sortable-currency/)!=-1){n=parseFloat(n.replace(/[^0-9\.\-]/g,""));if(isNaN(n))n=""}else if(m.className.search(/sortable-text/)!=-1){n=n.toLowerCase()}else if(m.className.search(/sortable-keep/)!=-1){n=s}else if(m.className.search(/sortable-([a-zA-Z\_]+)/)!=-1){if(m.className.match(/sortable-([a-zA-Z\_]+)/)[1]+"PrepareData"in window){n=window[m.className.match(/sortable-([a-zA-Z\_]+)/)[1]+"PrepareData"](l,n)}}else if(n!=""){fdTableSort.removeClass(m,"sortable");if(fdTableSort.dateFormat(n)!=0){fdTableSort.addClass(m,"sortable-date");n=fdTableSort.dateFormat(n)}else if(n.search(fdTableSort.regExp_Number)!=-1||n.search(fdTableSort.regExp_Currency)!=-1){fdTableSort.addClass(m,"sortable-numeric");n=parseFloat(n.replace(/[^0-9\.\-]/g,""));if(isNaN(n))n=""}else{fdTableSort.addClass(m,"sortable-text");n=n.toLowerCase()}}if(s>0&&h[p]&&i[p]!=n){h[p]=false}i[p]=n;b[s][p]=n}b[s][g]=k;s++}var u=a.className.search(/colstyle-([\S]+)/)!=-1?a.className.match(/colstyle-([\S]+)/)[1]:false;var v=a.className.search(/rowstyle-([\S]+)/)!=-1?a.className.match(/rowstyle-([\S]+)/)[1]:false;var w=a.className.search(/sortinitiatedcallback-([\S-]+)/)==-1?"sortInitiatedCallback":a.className.match(/sortinitiatedcallback-([\S]+)/)[1];var x=a.className.search(/sortcompletecallback-([\S-]+)/)==-1?"sortCompleteCallback":a.className.match(/sortcompletecallback-([\S]+)/)[1];w=w.replace("-",".");x=x.replace("-",".");fdTableSort.tableCache[a.id]={hook:c,initiatedCallback:w,completeCallback:x,thList:[],colOrder:{},data:b,identical:h,colStyle:u,rowStyle:v,noArrow:a.className.search(/no-arrow/)!=-1};t=b=k=l=m=d=h=i=null},onUnload:function(){for(tbl in fdTableSort.tableCache){fdTableSort.removeTableCache(tbl)}for(tbl in fdTableSort.tmpCache){fdTableSort.removeTmpCache(tbl)}fdTableSort.removeEvent(window,"load",fdTableSort.initEvt);fdTableSort.removeEvent(window,"unload",fdTableSort.onUnload);fdTableSort.tmpCache=fdTableSort.tableCache=null},addThNode:function(){var a=fdTableSort.tableCache[fdTableSort.tableId];var b=fdTableSort.thNode.className.match(/fd-column-([0-9]+)/)[1];var c=false;if(!fdTableSort.multi){if(a.colStyle){var d=a.thList.length;for(var e=0;e<d;e++){a.colOrder[a.thList[e].className.match(/fd-column-([0-9]+)/)[1]]=false}}if(a.thList.length&&a.thList[0]==fdTableSort.thNode)c=true;a.thList=[]}var f=false;var g=a.thList.length;for(var e=0,h;h=a.thList[e];e++){if(h==fdTableSort.thNode){f=true;break}}if(!f){a.thList.push(fdTableSort.thNode);if(a.colStyle){a.colOrder[b]=true}}var i=document.getElementById(fdTableSort.tableId).getElementsByTagName("th");for(var e=0,j;j=i[e];e++){f=false;for(var k=0,h;h=a.thList[k];k++){if(h==j){f=true;break}}if(!f){fdTableSort.removeClass(j,"(forwardSort|reverseSort)");if(!a.noArrow){span=j.getElementsByTagName("span");if(span.length){span=span[0];while(span.firstChild)span.removeChild(span.firstChild)}}}}if(a.thList.length>1){classToAdd=fdTableSort.thNode.className.search(/forwardSort/)!=-1?"reverseSort":"forwardSort";fdTableSort.removeClass(fdTableSort.thNode,"(forwardSort|reverseSort)");fdTableSort.addClass(fdTableSort.thNode,classToAdd);a.pos=-1}else if(c){a.pos=fdTableSort.thNode}},initSort:function(noCallback,ident){var thNode=fdTableSort.thNode;var tableElem=document.getElementById(fdTableSort.tableId);if(!(fdTableSort.tableId in fdTableSort.tableCache)){fdTableSort.prepareTableData(document.getElementById(fdTableSort.tableId))}fdTableSort.addThNode();if(!noCallback){fdTableSort.doCallback(true)}fdTableSort.pos=thNode.className.match(/fd-column-([0-9]+)/)[1];var dataObj=fdTableSort.tableCache[tableElem.id];var lastPos=dataObj.pos&&dataObj.pos.className?dataObj.pos.className.match(/fd-column-([0-9]+)/)[1]:-1;var len1=dataObj.data.length;var len2=dataObj.data.length>0?dataObj.data[0].length-1:0;var identical=dataObj.identical[fdTableSort.pos];var classToAdd="forwardSort";if(dataObj.thList.length>1){var js="var sortWrapper = function(a,b) {\n";var l=dataObj.thList.length;var cnt=0;var e,d,th,p,f;for(var i=0;i<l;i++){th=dataObj.thList[i];p=th.className.match(/fd-column-([0-9]+)/)[1];if(dataObj.identical[p]){continue}cnt++;if(th.className.match(/sortable-(numeric|currency|date|keep)/)){f="fdTableSort.sortNumeric"}else if(th.className.match("sortable-text")){f="fdTableSort.sortText"}else if(th.className.search(/sortable-([a-zA-Z\_]+)/)!=-1&&th.className.match(/sortable-([a-zA-Z\_]+)/)[1]in window){f="window['"+th.className.match(/sortable-([a-zA-Z\_]+)/)[1]+"']"}else f="fdTableSort.sortText";e="e"+i;d=th.className.search("forwardSort")!=-1?"a,b":"b,a";js+="fdTableSort.pos   = "+p+";\n";js+="var "+e+" = "+f+"("+d+");\n";js+="if("+e+") return "+e+";\n";js+="else { \n"}js+="return 0;\n";for(var i=0;i<cnt;i++){js+="};\n"}if(cnt)js+="return 0;\n";js+="};\n";eval(js);dataObj.data.sort(sortWrapper);identical=false}else if(lastPos==fdTableSort.pos&&!identical||thNode.className.search(/sortable-keep/)!=-1&&lastPos==-1){dataObj.data.reverse();classToAdd=thNode.className.search(/reverseSort/)!=-1?"forwardSort":"reverseSort";if(thNode.className.search(/sortable-keep/)!=-1&&lastPos==-1)fdTableSort.tableCache[tableElem.id].pos=thNode}else{fdTableSort.tableCache[tableElem.id].pos=thNode;classToAdd=thNode.className.search(/forwardSort/)!=-1?"reverseSort":"forwardSort";if(!identical){if(thNode.className.match(/sortable-(numeric|currency|date|keep)/)){dataObj.data.sort(fdTableSort.sortNumeric)}else if(thNode.className.match("sortable-text")){dataObj.data.sort(fdTableSort.sortText)}else if(thNode.className.search(/sortable-([a-zA-Z\_]+)/)!=-1&&thNode.className.match(/sortable-([a-zA-Z\_]+)/)[1]in window){dataObj.data.sort(window[thNode.className.match(/sortable-([a-zA-Z\_]+)/)[1]])}if(thNode.className.search(/(^|\s)favour-reverse($|\s)/)!=-1){classToAdd=classToAdd=="forwardSort"?"reverseSort":"forwardSort";dataObj.data.reverse()}}}if(ident){identical=false}if(dataObj.thList.length==1){fdTableSort.removeClass(thNode,"(forwardSort|reverseSort)");fdTableSort.addClass(thNode,classToAdd)}if(!dataObj.noArrow){var span=fdTableSort.thNode.getElementsByTagName("span")[0];if(span.firstChild)span.removeChild(span.firstChild);span.appendChild(document.createTextNode(fdTableSort.thNode.className.search(/forwardSort/)!=-1?" ↓":" ↑"))}if(!dataObj.rowStyle&&!dataObj.colStyle&&identical){fdTableSort.removeSortActiveClass();if(!noCallback){fdTableSort.doCallback(false)}fdTableSort.thNode=null;return}if("tablePaginater"in window&&"tableInfo"in tablePaginater&&fdTableSort.tableId in tablePaginater.tableInfo){tablePaginater.redraw(fdTableSort.tableId,identical)}else{fdTableSort.redraw(fdTableSort.tableId,identical)}fdTableSort.removeSortActiveClass();if(!noCallback){fdTableSort.doCallback(false)}fdTableSort.thNode=null},redraw:function(a,b){if(!a||!(a in fdTableSort.tableCache)){return}var c=fdTableSort.tableCache[a];var d=c.data;var e=d.length;var f=e?d[0].length-1:0;var g=c.hook;var h=c.colStyle;var i=c.rowStyle;var j=c.colOrder;var k=0;var l=/(^|\s)invisibleRow(\s|$)/;var m,n;for(var o=0;o<e;o++){m=d[o][f];if(h){n=m.cells;for(thPos in j){if(!j[thPos])fdTableSort.removeClass(n[thPos],h);else fdTableSort.addClass(n[thPos],h)}}if(!b){if(i&&m.className.search(l)==-1){if(k++&1)fdTableSort.addClass(m,i);else fdTableSort.removeClass(m,i)}g.appendChild(m)}}m=n=g=null},getInnerText:function(a){if(typeof a=="string"||typeof a=="undefined")return a;if(a.innerText)return a.innerText;var b="",c;for(c=a.firstChild;c;c=c.nextSibling){if(c.nodeType==3)b+=c.nodeValue;else if(c.nodeType==1)b+=fdTableSort.getInnerText(c)}return b},dateFormat:function(a,b){var c=[{regExp:/^(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])([- \/.])((\d\d)?\d\d)$/,d:3,m:1,y:5},{regExp:/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/,d:1,m:3,y:5},{regExp:/^(\d\d\d\d)([- \/.])(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])$/,d:5,m:3,y:1}];var e,f=0,g=c.length;while(f<g){e=(f+(b?g+1:g))%g;if(a.match(c[e].regExp)){res=a.match(c[e].regExp);y=res[c[e].y];m=res[c[e].m];d=res[c[e].d];if(m.length==1)m="0"+String(m);if(d.length==1)d="0"+String(d);if(y.length!=4)y=parseInt(y)<50?"20"+String(y):"19"+String(y);return y+String(m)+d}f++}return 0},sortNumeric:function(a,b){var c=a[fdTableSort.pos];var d=b[fdTableSort.pos];if(c==d)return 0;if(c===""&&!isNaN(d))return-1;if(d===""&&!isNaN(c))return 1;return c-d},sortText:function(a,b){var c=a[fdTableSort.pos];var d=b[fdTableSort.pos];if(c==d)return 0;if(c<d)return-1;return 1}}})();fdTableSort.addEvent(window,"load",fdTableSort.initEvt);fdTableSort.addEvent(window,"unload",fdTableSort.onUnload)
