(function($){var sortIndex=0;$.widget("ui.ariaSorTable",{_init:function(){var options=this.options,self=this;options.tableData=[];options.originalData=[];options.selectedCol=0;options.activeCol=0;var elementID=self.element.attr("id");if(elementID!=""){options.uid=elementID;}else{options.uid=new Date().getTime();self.element.attr("id","ui-table-"+options.uid)}
self.element.find("caption").attr("id","ui-table-"+options.uid+"-caption");self.element
.attr("role","grid")
.attr("aria-readonly","true")
.attr("aria-labelledby","ui-table-"+options.uid+"-caption");var theadTr=self.element.find("thead tr")
.bind("click",function(e){if(!options.disabled){var el=th=$(e.target);while(!th.is("th")){th=th.parents("th");}
if(!th.hasClass("ui-table-deactivate")){e.preventDefault();self.rowSort(th.prevAll("th:visible").length);}}})
.attr("role","row");options.headers=theadTr.find("th");options.headers.each(function(index){var th=$(options.headers[index]);th.attr("id","ui-table-"+options.uid+"-header-"+index)
.attr("role","columnheader")
.attr("scope","col");var text=(options.defaultSortBy=="asc")?options.textAsc:options.textDesc;var thA=th.find("a").length;if(!th.hasClass("ui-table-deactivate")){if(!thA){th.html('<a title="'+text+'" href="#ui-table-dummy">'+th.html()+'</a>');}
th.children("a")
.attr("title",text)
.bind("mouseenter",function(){$(this).parent().addClass('ui-state-hover');})
.bind("mouseleave",function(){$(this).parent().removeClass('ui-state-hover');});}else if(!thA){th.attr("tabindex",0);}
if(th.hasClass("ui-state-active")){if(th.hasClass("ui-table-asc")){th.attr("aria-sort","ascending").children("a").attr("title",options.textDesc);}else if(th.hasClass("ui-table-desc")){th.attr("aria-sort","descending").children("a").attr("title",options.textAsc);}
options.activeCol=index;}});var rows=self.element.find("tbody tr");for(var x=0;x<rows.length;x++){options.originalData[x]=[];var cells=$(rows[x]).children("td");for(var y=0;y<cells.length;y++){options.originalData[x][y]=$(cells[y]).html();}}
if(!options.rowsToShow)options.rowsToShow=rows.length;self.updateData();self.setHTML();if(options.pager)self.buildPager();if(options.keyboard)self._setKeyboard();self._trigger("onInit",0);},updateData:function(){var options=this.options,self=this;options.tableData=[];var xIndex=0;for(var x=0;x<options.originalData.length;x++){if(!options.rowsToHide[x]){options.tableData[xIndex]=[];for(var y=0;y<options.headers.length;y++){if(!options.colsToHide[y])options.tableData[xIndex].push(options.originalData[x][y]);}
xIndex++;}}
self._trigger("onUpdateData",0);},setHTML:function(){var options=this.options,self=this;var second=true;var html=[];html.push("<tbody class=\"ui-table-tbody-active\" aria-live=\"polite\" aria-relevant=\"text\">\n");for(var x=options.rowToStart-1;x<options.rowToStart-1+options.rowsToShow;x++){if(options.tableData[x]){var rowClass=(second)?"class=\"odd\"":"";second=(second)?false:true;html.push("\t\t\t\t<tr role=\"row\""+rowClass+">\n");for(var y=0;y<options.tableData[x].length;y++){if(y+1==options.colScopeRow){html.push("\t\t\t\t\t<td headers=\"ui-table-"+options.uid+"-header-"+y+"\" scope=\"row\" role=\"rowheader\">"+options.tableData[x][y]+"</td>\n");}else{html.push("\t\t\t\t\t<td headers=\"ui-table-"+options.uid+"-header-"+y+"\" role=\"gridcell\">"+options.tableData[x][y]+"</td>\n");}}
html.push("\t\t\t\t</tr>\n");}}
html.push("\t\t\t</tbody>");var str='';str=html.join('');var tbody=self.element.find("tbody.ui-table-tbody-active");if(tbody.length){tbody.replaceWith(str);}else{self.element.find("tbody").hide();self.element.append(str);}
if(options.colsToHide)
options.headers.each(function(index){if(!options.colsToHide[index]){$(this).show();}else{$(this).hide();}});$(options.headers[0]).parent().parent()
.attr("aria-live","polite")
.attr("aria-relevant","text");self._updateVirtualBuffer();self._trigger("onSetHTML",0);},rowSort:function(index){var options=this.options,self=this;var thArray=options.headers.filter(":visible");th=$(thArray[index]);sortIndex=index;if(th.hasClass("ui-table-number")){options.tableData.sort(self._sortNumber);}else if(th.hasClass("ui-table-number-de")){options.tableData.sort(self._sortNumberDE);}else if(th.hasClass("ui-table-date")){options.tableData.sort(self._sortDate);}else if(th.hasClass("ui-table-date-de")){options.tableData.sort(self._sortDateDE);}else if(th.hasClass("ui-table-date-iso")){options.tableData.sort(self._sortDateISO);}else{options.tableData.sort(self._sortText);}
var asc=th.hasClass("ui-table-asc");if(asc||th.hasClass("ui-table-desc")){var newSortBy=(asc)?"desc":"asc";}else{var newSortBy=options.defaultSortBy;}
if(newSortBy=="desc")options.tableData.reverse();var thActiveCol=$(thArray[options.activeCol]);var sortedBy=(thActiveCol.hasClass("ui-table-asc"))?"asc":"desc";thActiveCol
.removeClass("ui-table-"+sortedBy)
.removeClass("ui-state-active")
.attr("aria-sort","none");$(thArray[options.selectedCol]).removeClass("ui-state-focus");var newSortByText=(newSortBy=="asc")?options.textDesc:options.textAsc;var newSortByARIA=(newSortBy=="asc")?"ascending":"descending";th.addClass("ui-state-active")
.addClass("ui-table-"+newSortBy)
.attr("aria-sort",newSortByARIA)
.children("a").attr("title",newSortByText);options.activeCol=options.selectedCol=index;self._trigger("onRowSort",0);self.setHTML();},_sortNumber:function(a,b){return(a[sortIndex]-b[sortIndex]);},_sortNumberDE:function(a,b){return(a[sortIndex].replace(",",".")-b[sortIndex].replace(",","."));},_sortDateDE:function(a,b){var aDate=a[sortIndex].substr(3,2)+"/"+a[sortIndex].substr(0,2)+"/"+a[sortIndex].substr(6,4);var bDate=b[sortIndex].substr(3,2)+"/"+b[sortIndex].substr(0,2)+"/"+b[sortIndex].substr(6,4);return(Date.parse(aDate)<Date.parse(bDate));},_sortDate:function(a,b){return(Date.parse(a[sortIndex])<Date.parse(b[sortIndex]));},_sortDateISO:function(a,b){var aDate=a[sortIndex].substr(5,2)+"/"+a[sortIndex].substr(8,2)+"/"+a[sortIndex].substr(0,4);var bDate=b[sortIndex].substr(5,2)+"/"+b[sortIndex].substr(8,2)+"/"+b[sortIndex].substr(0,4);return(Date.parse(aDate)<Date.parse(bDate));},_sortText:function(a,b){var patern=/<\/?\w+(\s*([a-zA-Z]+=".+")*)*\s*\/?>/g;a=a[sortIndex].replace(patern,"");b=b[sortIndex].replace(patern,"");return(a>b);},_setKeyboard:function(){var options=this.options,self=this;options.shift=false;$(document)
.keyup(function(e){if(e.keyCode==$.ui.keyCode.SHIFT&&!options.disabled){options.shift=false;return true;}})
.keydown(function(e){if(e.keyCode==$.ui.keyCode.SHIFT&&!options.disabled){options.shift=true;return true;}});self.element
.keydown(function(e){if(!options.disabled){switch(e.keyCode){case $.ui.keyCode.DOWN:case $.ui.keyCode.PAGE_DOWN:if(options.rowToStart<options.tableData.length-1&&options.rowsToShow!=options.tableData.length){if(options.pager)self.setPager(options.rowToStart+options.rowsToShow);options.rowToStart+=options.rowsToShow;self.setHTML();}
break;case $.ui.keyCode.UP:case $.ui.keyCode.PAGE_UP:if(options.rowToStart>0+options.rowsToShow&&options.rowsToShow!=options.tableData.length){if(options.pager)self.setPager(options.rowToStart-options.rowsToShow);options.rowToStart-=options.rowsToShow;self.setHTML();}
break;case $.ui.keyCode.HOME:if(options.rowsToShow!=options.tableData.length){options.rowToStart=1;self.setHTML();}
break;case $.ui.keyCode.END:if(options.rowsToShow!=options.tableData.length){options.rowToStart=((Math.ceil(options.tableData.length/options.rowsToShow))*options.rowsToShow)-options.rowsToShow+1;self.setHTML();}
break;case $.ui.keyCode.TAB:if(options.shift){if(options.selectedCol>0){self.colSwitch(-1)}else{return true;}}else{if(options.selectedCol<options.headers.filter(":visible").length-1){self.colSwitch(1);}else{return true;}}
break;case $.ui.keyCode.LEFT:if(options.selectedCol>0)self.colSwitch(-1);break;case $.ui.keyCode.RIGHT:if(options.selectedCol<options.headers.filter(":visible").length-1)self.colSwitch(1);break;case $.ui.keyCode.SPACE:var th=options.headers.filter(":visible");$(th[options.selectedCol]).find("a").click();break;default:return true;break;}
return false;}})},colSwitch:function(dir){var options=this.options,self=this;var thArray=options.headers.filter(":visible");$(thArray[options.selectedCol]).removeClass("ui-state-focus");options.selectedCol=options.selectedCol+dir;el=$(thArray[options.selectedCol]);el.addClass("ui-state-focus");if(el.find("a").length){el.find("a").focus();}else{el.focus();}},destroy:function(){this.element
.unbind(".ariaSorTable")
.removeData('ariaSorTable')
.removeAttr("role")
.removeAttr("aria-readonly")
.removeAttr("aria-labelledby")
.find("caption").removeAttr("id")
.end().find("thead")
.removeAttr("aria-live")
.removeAttr("aria-relevant")
.find("tr")
.removeAttr("role")
.unbind("click")
.end().end()
.find("tbody.ui-table-tbody-active").remove().end()
.find("tbody").show();$.each(this.options.headers,function(){$(this)
.show()
.removeAttr("id")
.removeAttr("role")
.removeAttr("aria-sort")
.removeAttr("tabindex")
.removeAttr("scope");var link=$(this).children("a");if(link.length){link.unbind("mouseenter mouseleave").removeAttr("title");if(link.attr("href")=="#ui-table-dummy")$(this).html(link.html());}});if(this.options.pager)$(".ui-table-pager").remove();$("#virtualBufferForm").parent().remove();},_updateVirtualBuffer:function(){var form=$("#virtualBufferForm");if(form.length){(form.val()=="1")?form.val("0"):form.val("1")}else{var html='<form><input id="virtualBufferForm" type="hidden" value="1" /></form>';$("body").append(html);}}});$.extend($.ui.ariaSorTable,{version:"1.7.1",defaults:{rowToStart:1,rowsToShow:false,colScopeRow:1,defaultSortBy:"asc",colsToHide:false,rowsToHide:false,keyboard:true,pager:false,textPager:"Page:",textAsc:"Sort ascending",textDesc:"Sort descending"}});$.fn.extend($.ui.ariaSorTable.prototype,{buildPager:function(){var options=this.options,self=this;var site=0;var y=0;var html='<div class="ui-table-pager" aria-controls="ui-table-'+options.uid+'">'+"\n";html+='<span id="ui-table-'+options.uid+'-pager-title" class="ui-corner-all">'+options.textPager+'</span>'+"\n";while(y<options.tableData.length){html+='	<button title="'+options.textPager+' '+(site+1)+'" type="button" class="ui-state-default ui-corner-all" aria-selected="false" aria-labelledby="ui-table-'+options.uid+'-pager-title">'+(site+1)+'</button>'+"\n";site++;y=y+options.rowsToShow;}
html+='</div>'+"\n";self.element.after(html);options.pager=self.element.next(".ui-table-pager")
.attr("aria-valuemin",1)
.attr("aria-valuemax",site);options.pagerButtons=options.pager.find("button")
.each(function(index){$(this)
.bind("click",function(){var newRowToStart=(options.rowsToShow*index==0)?1:(options.rowsToShow*index)+1;self.setPager(newRowToStart);options.rowToStart=newRowToStart;self.setHTML();})
.bind("mouseenter",function(){$(this).addClass('ui-state-hover');})
.bind("mouseleave",function(){$(this).removeClass('ui-state-hover');})
.bind("focus",function(){$(this).addClass('ui-state-focus');})
.bind("blur",function(){$(this).removeClass('ui-state-focus');});});self.setPager(options.rowToStart);},setPager:function(newRow){var options=this.options,self=this;$(options.pagerButtons[Math.floor(options.rowToStart/options.rowsToShow)]).removeClass('ui-state-active').attr("aria-selected",false);$(options.pagerButtons[Math.floor(newRow/options.rowsToShow)]).addClass('ui-state-active').attr("aria-selected",true);options.pager.attr("aria-valuenow",Math.floor(newRow/options.rowsToShow)+1);}});})(jQuery);