/*
 * jQuery UI AriaSorTable (24.12.10)
 * http://github.com/fnagel/jQuery-Accessible-RIA
 *
 * Copyright (c) 2009 Felix Nagel for Namics (Deustchland) GmbH
 * Copyright (c) 2010-2011 Felix Nagel
 * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
 *
 * Depends: jQuery UI
 * Optional: jQuery Address Plugin
 */
(function(a){var b=0;a.widget("ui.ariaSorTable",{version:"1.8",options:{rowToStart:1,rowsToShow:false,colScopeRow:1,defaultSortBy:"asc",colsToHide:false,rowsToHide:false,keyboard:true,pager:false,textPager:"Page:",textAsc:"Aufsteigend",textDesc:"Absteigend",jqAddress:{enable:true,title:{enable:true,split:" | "},changeRow:true}},_create:function(){var k=this.options,i=this;k.tableData=[];k.originalData=[];k.selectedCol=0;k.activeCol=0;var f=i.element.attr("id");if(f!=""){k.uid=f;}else{k.uid=Math.random().toString(16).slice(2,10);i.element.attr("id","ui-table-"+k.uid);}i.element.find("caption").attr("id","ui-table-"+k.uid+"-caption");i.element.attr("role","grid").attr("aria-readonly","true").attr("aria-labelledby","ui-table-"+k.uid+"-caption");var c=i.element.find("thead tr");k.headers=c.find("th");c.bind("click",function(l){if(!k.disabled){th=a(l.target).closest("th",c);if(!th.hasClass("ui-table-deactivate")){i.rowSort(i._getVisible(th.prevAll("th")).length);return false;}}}).attr("role","row");k.headers.each(function(l){var m=a(this);m.attr("id","ui-table-"+k.uid+"-header-"+l).attr("role","columnheader").attr("scope","col");var o=(k.defaultSortBy=="asc")?k.textAsc:k.textDesc;var n=m.find("a").length;if(!m.hasClass("ui-table-deactivate")){if(!n){m.html('<a title="'+o+'" href="#ui-table-dummy">'+m.html()+"</a>");}m.children("a").attr("title",o).bind("mouseenter",function(){a(this).parent().addClass("ui-state-hover");}).bind("mouseleave",function(){a(this).parent().removeClass("ui-state-hover");});}else{if(!n){m.attr("tabindex",0);}}if(m.hasClass("ui-state-active")){if(m.hasClass("ui-table-asc")){m.attr("aria-sort","ascending").children("a").attr("title",k.textDesc);}else{if(m.hasClass("ui-table-desc")){m.attr("aria-sort","descending").children("a").attr("title",k.textAsc);}}k.activeCol=l;}});var j=i.element.find("tbody tr");for(var e=0;e<j.length;e++){k.originalData[e]=[];var h=a(j[e]).children("td");for(var d=0;d<h.length;d++){k.originalData[e][d]=a(h[d]).html();}}if(!k.rowsToShow){k.rowsToShow=j.length;}i.updateData();if(k.pager){i.buildPager();}if(k.keyboard){i._setKeyboard();}if(a.address&&k.jqAddress.enable&&i._jqAddressHelper){var g=i._jqAddressHelper(a.address.pathNames());a.address.externalChange(function(m){var l=i._jqAddressHelper(m.pathNames);if(l){i.setHTML(l,false,true);}});}g=(g)?g:k.rowToStart;i.setHTML(g,true);i._trigger("onInit",0);},updateData:function(){var f=this.options,e=this;f.tableData=[];var d=0;for(var c=0;c<f.originalData.length;c++){if(!f.rowsToHide[c]){f.tableData[d]=[];for(var g=0;g<f.headers.length;g++){if(!f.colsToHide[g]){f.tableData[d].push(f.originalData[c][g]);}}d++;}}e._trigger("onUpdateData",0);},setHTML:function(k,l,g){var n=this.options,m=this;var c=true;var f=[];if(!k){k=option.rowToStart;}if(n.pager){m.setPager(k);}f.push('<tbody class="ui-table-tbody-active" aria-live="polite" aria-relevant="text">\n');for(var j=k-1;j<k-1+n.rowsToShow;j++){if(n.tableData[j]){var e=(c)?'class="odd"':"";c=(c)?false:true;f.push('\t\t\t\t<tr role="row"'+e+">\n");for(var i=0;i<n.tableData[j].length;i++){if(i+1==n.colScopeRow){f.push('\t\t\t\t\t<td headers="ui-table-'+n.uid+"-header-"+i+'" scope="row" role="rowheader">'+n.tableData[j][i]+"</td>\n");}else{f.push('\t\t\t\t\t<td headers="ui-table-'+n.uid+"-header-"+i+'" role="gridcell">'+n.tableData[j][i]+"</td>\n");}}f.push("\t\t\t\t</tr>\n");}}f.push("\t\t\t</tbody>");var h="";h=f.join("");var d=m.element.find("tbody.ui-table-tbody-active");if(d.length){d.replaceWith(h);}else{m.element.find("tbody").hide();m.element.append(h);}if(n.colsToHide){n.headers.each(function(o){if(!n.colsToHide[o]){a(this).show();}else{a(this).hide();}});}a(n.headers[0]).parent().parent().attr("aria-live","polite").attr("aria-relevant","text");if(a.address&&n.jqAddress.enable){if(!l){if(n.jqAddress.title.enable){a.address.title(a.address.title().split(n.jqAddress.title.split)[0]+n.jqAddress.title.split+m.element.find("caption").text()+" ("+k+"-"+(k-1+n.rowsToShow)+")");}if(n.rowToStart==1&&k!=1&&!g){if(a.address.value()==""){a.address.history(false);}a.address.value(n.uid+"/"+1+"/"+n.rowsToShow);a.address.history(true);}a.address.value(n.uid+"/"+k+"/"+(k-1+n.rowsToShow));}}m._updateVirtualBuffer();n.rowToStart=k;m._trigger("onSetHTML",0);},rowSort:function(g){var k=this.options,j=this;var c=j._getVisible(k.headers);th=a(c[g]);b=g;if(th.hasClass("ui-table-number")){k.tableData.sort(j._sortNumber);}else{if(th.hasClass("ui-table-number-de")){k.tableData.sort(j._sortNumberDE);}else{if(th.hasClass("ui-table-date")){k.tableData.sort(j._sortDate);}else{if(th.hasClass("ui-table-date-de")){k.tableData.sort(j._sortDateDE);}else{if(th.hasClass("ui-table-date-iso")){k.tableData.sort(j._sortDateISO);}else{if(th.hasClass("ui-table-text-html")){k.tableData.sort(j._sortTextHTML);}else{k.tableData.sort(j._sortText);}}}}}}var i=th.hasClass("ui-table-asc");if(i||th.hasClass("ui-table-desc")){var l=(i)?"desc":"asc";}else{var l=k.defaultSortBy;}if(l=="desc"){k.tableData.reverse();}var e=a(c[k.activeCol]);var f=(e.hasClass("ui-table-asc"))?"asc":"desc";e.removeClass("ui-table-"+f).removeClass("ui-state-active").attr("aria-sort","none");a(c[k.selectedCol]).removeClass("ui-state-focus");var d=(l=="asc")?k.textDesc:k.textAsc;var h=(l=="asc")?"ascending":"descending";th.addClass("ui-state-active").addClass("ui-table-"+l).attr("aria-sort",h).children("a").attr("title",d);k.activeCol=k.selectedCol=g;j._trigger("onRowSort",0);j.setHTML(k.rowToStart);},_sortNumber:function(d,c){return(d[b]-c[b]);},_sortNumberDE:function(d,c){return(d[b].replace(",",".")-c[b].replace(",","."));},_sortDateDE:function(e,d){var c=Date.parse(e[b].substr(3,2)+"/"+e[b].substr(0,2)+"/"+e[b].substr(6,4));var f=Date.parse(d[b].substr(3,2)+"/"+d[b].substr(0,2)+"/"+d[b].substr(6,4));return((c<f)?1:((c>f)?-1:0));},_sortDate:function(e,d){var c=Date.parse(e[b]);var f=Date.parse(d[b]);return((c<f)?1:((c>f)?-1:0));},_sortDateISO:function(e,d){var c=Date.parse(e[b].substr(5,2)+"/"+e[b].substr(8,2)+"/"+e[b].substr(0,4));var f=Date.parse(d[b].substr(5,2)+"/"+d[b].substr(8,2)+"/"+d[b].substr(0,4));return((c<f)?1:((c>f)?-1:0));},_sortTextHTML:function(e,d){var c=a(e[b]).text().toLowerCase();var f=a(d[b]).text().toLowerCase();return((c<f)?1:((c>f)?-1:0));},_sortText:function(e,d){var c=e[b].toLowerCase();var f=d[b].toLowerCase();return((c<f)?1:((c>f)?-1:0));},_getVisible:function(e){var d=[];var c=0;e.each(function(f){if(a(this).css("display")!="none"){d[c]=a(this);c++;}});return d;},_setKeyboard:function(){var d=this.options,c=this;c.element.keydown(function(g){if(!d.disabled){switch(g.keyCode){case a.ui.keyCode.DOWN:case a.ui.keyCode.PAGE_DOWN:if(d.rowToStart<d.tableData.length-1&&d.rowsToShow!=d.tableData.length){c.setHTML(d.rowToStart+d.rowsToShow);}break;case a.ui.keyCode.UP:case a.ui.keyCode.PAGE_UP:if(d.rowToStart>0+d.rowsToShow&&d.rowsToShow!=d.tableData.length){c.setHTML(d.rowToStart-d.rowsToShow);}break;case a.ui.keyCode.HOME:if(d.rowsToShow!=d.tableData.length){c.setHTML(1);}break;case a.ui.keyCode.END:if(d.rowsToShow!=d.tableData.length){c.setHTML(((Math.ceil(d.tableData.length/d.rowsToShow))*d.rowsToShow)-d.rowsToShow+1);}break;case a.ui.keyCode.TAB:if(g.shiftKey){if(d.selectedCol>0){c.colSwitch(-1);}else{return true;}}else{if(d.selectedCol<c._getVisible(d.headers).length-1){c.colSwitch(1);}else{return true;}}break;case a.ui.keyCode.LEFT:if(d.selectedCol>0){c.colSwitch(-1);}break;case a.ui.keyCode.RIGHT:if(d.selectedCol<c._getVisible(d.headers).length-1){c.colSwitch(1);}break;case a.ui.keyCode.SPACE:var f=c._getVisible(d.headers);a(f[d.selectedCol]).find("a").click();break;default:return true;break;}return false;}});},colSwitch:function(f){var e=this.options,d=this;var c=d._getVisible(e.headers);a(c[e.selectedCol]).removeClass("ui-state-focus");e.selectedCol=e.selectedCol+f;el=a(c[e.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();a.each(this.options.headers,function(){a(this).show().removeAttr("id").removeAttr("role").removeAttr("aria-sort").removeAttr("tabindex").removeAttr("scope");var c=a(this).children("a");if(c.length){c.unbind("mouseenter mouseleave").removeAttr("title");if(c.attr("href")=="#ui-table-dummy"){a(this).html(c.html());}}});if(this.options.pager){a("#ui-table-pager").remove();}a("body>form #virtualBufferForm").parent().remove();a.Widget.prototype.destroy.apply(this,arguments);},_updateVirtualBuffer:function(){var d=a("body>form #virtualBufferForm");if(d.length){(d.val()=="1")?d.val("0"):d.val("1");}else{var c='<form><input id="virtualBufferForm" type="hidden" value="1" /></form>';a("body").append(c);}}});a.fn.extend(a.ui.ariaSorTable.prototype,{buildPager:function(){var e=this.options,c=this;var d=0;var g=0;var f='<div class="ui-table-pager" aria-valuemin="1" aria-controls="ui-table-'+e.uid+'">'+"\n";f+='<span id="ui-table-'+e.uid+'-pager-title" class="ui-corner-all">'+e.textPager+"</span>"+"\n";while(g<e.tableData.length){d++;f+='	<button title="'+e.textPager+" "+d+'" type="button" class="ui-state-default ui-corner-all" aria-selected="false" aria-labelledby="ui-table-'+e.uid+'-pager-title">'+d+"</button>"+"\n";g=g+e.rowsToShow;}f+="</div>"+"\n";e.pager=c.element.next(".ui-table-pager");if(e.pager.length){e.pager.replaceWith(f);}else{c.element.after(f);}e.pager=c.element.next(".ui-table-pager").attr("aria-valuemax",d);e.pagerButtons=e.pager.find("button").each(function(h){a(this).bind("click",function(){var i=(e.rowsToShow*h==0)?1:(e.rowsToShow*h)+1;c.setHTML(i);}).bind("mouseenter",function(){a(this).addClass("ui-state-hover");}).bind("mouseleave",function(){a(this).removeClass("ui-state-hover");}).bind("focus",function(){a(this).addClass("ui-state-focus");}).bind("blur",function(){a(this).removeClass("ui-state-focus");});});c.setPager(e.rowToStart);},setPager:function(e){var d=this.options,c=this;a(d.pagerButtons[Math.floor(d.rowToStart/d.rowsToShow)]).removeClass("ui-state-active").attr("aria-selected",false);a(d.pagerButtons[Math.floor(e/d.rowsToShow)]).addClass("ui-state-active").attr("aria-selected",true);d.pager.attr("aria-valuenow",Math.floor(e/d.rowsToShow)+1);},_jqAddressHelper:function(h){var g=this.options,f=this;if(h!=""&&h[0]==g.uid){var i=parseInt(h[1]);var d=parseInt(h[2]);if(isNaN(i)){return false;}if(i<=g.tableData.length){if(isNaN(d)||i>d){return i;}var e=d-(i-1);if(g.rowToStart==i&&g.rowsToShow==e){return false;}if(g.jqAddress.changeRow){var c=g.rowsToShow;g.rowsToShow=e;if(g.pager&&c!=g.rowsToShow){f.buildPager();}}return i;}}return false;}});})(jQuery);
