﻿(function(a){a.fn.tableFilter=function(Z){var E;var O;var Q;var N;var e;var i;var z;var R;var Y;var F=a.extend(a.fn.tableFilter.defaults,Z);this.each(function(){Q=a(this);w()});function w(){e=Q.attr("id")+"_filters";U();i=R.length-z.length;h();K();o()}function h(){z.filter("input").keyup(M);z.filter("select").change(M);if(F.clearFiltersControls){for(var ab=0;ab<F.clearFiltersControls.length;ab++){F.clearFiltersControls[ab].click(function(){C();return false})}}if(!F.additionalFilterTriggers){return}for(var ab=0;ab<F.additionalFilterTriggers.length;ab++){var ac=F.additionalFilterTriggers[ab];switch(ac.attr("type")){case"select-one":ac.change(M);break;case"text":ac.attr("title",a.fn.tableFilter.filterToolTipMessage);ac.keyup(M);break;case"checkbox":ac.click(M);break;default:throw"Filter type "+ac.attr("type")+" is not supported"}}}function C(){z.val("");if(F.additionalFilterTriggers){for(var ab=0;ab<F.additionalFilterTriggers.length;ab++){var ac=F.additionalFilterTriggers[ab];switch(ac.attr("type")){case"text":ac.val("");break;case"checkbox":ac.attr("checked",false);break;default:throw"Filter type "+ac.attr("type")+" is not supported"}}}g()}function U(){R=Q.find("thead tr:first th");Y=a("#"+Q.attr("id")+" tbody tr");X();z=Q.find("thead tr:last").find("input, select")}function X(){var ad=a("<tr class='filters'></tr>");for(var ab=0;ab<R.length;ab++){var af=a(R[ab]);var ac=af.text();var ae=a(ac.length>1?"<td>"+v(ab,af)+"</td>":"<td>&nbsp;</td>");ad.append(ae)}Q.children("thead").append(ad)}function v(ad,ac){var ab=ac.attr("filter-type");if(!ab){ab="text"}switch(ab){case"text":return"<input type='text' id='filter_"+ad+"' class='filter filter_"+ad+"' value='"+F.inputDefaultValue+"' />";case"ddl":return B(ad,ac);case"none":return"";default:throw"filter-type: "+ab+" is not supported"}}function B(af,ae){var ad="<select id='filter_"+af+"' class='filter_"+af+"'><option value=''>"+F.selectOptionLabel+"</option>";var ac=Y.find("td:nth-child("+(af+1)+")");var ab=[];a.each(ac,function(){var ag=a(this).text();if(!ag||ag==="&nbsp;"){return}for(var ah=0;ah<ab.length;ah++){if(ab[ah]===ag){return}}ab.push(ag)});ab.sort();a.each(ab,function(){ad+='<option value="'+this+'">'+this+"</option>"});ad+="</select>";return ad}function o(){if(!a.cookie){return}var ad=a.cookie(e);if(!ad){return}ad=ad.split(";");for(var ab=0;ab<ad.length;ab++){var ac=ad[ab].split(",");ad[ab]={id:ac[0],value:ac[3],idx:ac[1],type:ac[2]}}l(ad,true)}function K(){for(var ab=0;ab<z.length;ab++){var ad=a(z[ab]);var ac=a(R[ab+i]).width();ad.width(ac)}}function M(ab){E=new Date().getTime();P()}function P(){if(O){clearTimeout(O)}N=true;var ab=new Date().getTime();if(ab-E>=F.filterDelay){g()}else{O=setTimeout(P,F.filterDelay/3)}}function g(){N=false;clearTimeout(O);var ab=V();l(ab,false);p(ab)}function V(){var ac=new Array();for(var ab=0;ab<z.length;ab++){var ad=q(a(z[ab]));if(ad){ac[ac.length]=ad}}if(!F.additionalFilterTriggers){return ac}for(var ab=0;ab<F.additionalFilterTriggers.length;ab++){var ad=q(F.additionalFilterTriggers[ab]);if(ad){ac[ac.length]=ad}}return ac}function q(ad){var ac=ad.attr("type");var ae;switch(ac){case"text":if((ad.val()===null)||(ad.val()===F.inputDefaultValue)){ae=null}else{ae=ad.val().toLowerCase()}break;case"select-one":ae=ad.val()===null?null:ad.val();break;case"checkbox":ae=ad.attr("checked");break;default:throw"Filter type "+ac+" is not supported"}if(ae===null||ae.length<=0){return null}var ab=d(ad);return{id:ad.attr("id"),value:ae.toString(),idx:ab,type:ad.attr("type")}}function p(ae){if(!a.cookie){return}var ad=[];for(var ab=0;ab<ae.length;ab++){if(ad.length>0){ad.push(";")}var ac=ae[ab];ad.push(ac.id);ad.push(",");ad.push(ac.idx);ad.push(",");ad.push(ac.type);ad.push(",");ad.push(ac.value)}ad=ad.join("");a.cookie(e,ad)}function l(ad,ac){n();if((!ad||ad.length)===0&&(F.matchingRow===null||F.matchingCell)){I();return}if(ad===null||ad.length===0){c(null)}else{for(var ab=0;ab<ad.length;ab++){var ae=ad[ab];if(ac&&ae.type&&ae.id){switch(ae.type){case"select-one":case"text":a("#"+ae.id).val(ae.value);break;case"checkbox":a("#"+ae.id).attr("checked",ae.value==="true");break;default:throw"Filter type "+ae.type+" is not supported"}}c(ae)}}I()}function n(){Y.removeAttr("filtermatch")}function c(af){var ab=J(af);var ac=af===null?-1:af.idx;for(var ad=0;ad<Y.length;ad++){if(N){return}var ae=a(Y[ad]);if(ae.attr("filtermatch")){continue}if(!y(af,ae,ab,ac)){ae.attr("filtermatch","false")}}}function J(ab){if(ab===null){return null}switch(ab.type){case"select-one":return[ab.value];case"text":return G(ab.value);case"checkbox":return null;default:throw"Filter type "+f.attr("type")+" is not supported"}}function I(){for(var ab=0;ab<Y.length;ab++){if(N){return}var ac=a(Y[ab]);if(ac.attr("filtermatch")==="false"){ac.hide()}else{ac.show()}}Q.trigger("filterEnd")}function d(ac){var ab=ac.parent("td");if(!ab||ab.length<=0){return -1}var ad=ab.parent();return ad.children("td").index(ab)}function y(ah,ag,af,ae){var ad=ag.children("td");if(ae<0){for(var ac=i;ac<ad.length;ac++){var ab=a(ad[ac]);if(aa(ah,ab,af)){return W(ah,ag,af)}}return false}else{return aa(ah,a(ad[ae]),af)&&W(ah,ag,af)}}function W(ad,ac,ab){if(!F.matchingRow){return true}return F.matchingRow(ad,ac,ab)}function aa(ac,ae,ab){var ad=ae.text();if(!x(ad,ab,ac!=null&&ac.type==="select-one")){return false}return !F.matchingCell||F.matchingCell(ac,ae,ab)}var m;function G(ad){if(!ad){return null}if(!m){m=new Object();m.or=1;m.and=2;m.not=3}ad=ad.toLowerCase();var ab=u(ad);ab=r(ab);var ac=t(ab);var ae=ac.split("|");return ae}function u(ag){var af=L(ag);var ab=new Array();for(var ae=0;ae<af.length;ae++){var ad=af[ae];var ac=ad.indexOf("(");while(ac!=-1){if(ac>0){ab[ab.length]=ad.substring(0,ac)}ab[ab.length]="(";ad=ad.substring(ac+1);ac=ad.indexOf("(")}ac=ad.indexOf(")");while(ac!=-1){if(ac>0){ab[ab.length]=ad.substring(0,ac)}ab[ab.length]=")";ad=ad.substring(ac+1);ac=ad.indexOf(")")}if(ad.length>0){ab[ab.length]=ad}}return ab}function L(ae){var ac=/([^"^\s]+)\s*|"([^"]+)"\s*/g;var ad=ae.match(ac);for(var ab=0;ab<ad.length;ab++){ad[ab]=b(ad[ab]).replace(/"/g,"")}return ad}function r(ae){var af=new Array();var ab;for(var ad=0;ad<ae.length;ad++){var ac=ae[ad];if(!ac||ac.length===0){continue}if(ac.indexOf("-")===0){ac="not";ae[ad]=ae[ad].substring(1);ad--}if(!ab){af[af.length]=ac}else{if(ab!="("&&ab!="not"&&ab!="and"&&ab!="or"&&ac!="and"&&ac!="or"&&ac!=")"){af[af.length]="and"}af[af.length]=ac}ab=ac}return af}function t(ad){var ag="";var ac=new Array();var ab;for(var af=0;af<ad.length;af++){var ae=ad[af];if(ae.length===0){continue}if(ae!="and"&&ae!="or"&&ae!="not"&&ae!="("&&ae!=")"){ag=ag+"|"+ae}else{if(ac.length===0||ae==="("){ac.push(ae)}else{if(ae===")"){ab=ac.pop();while(ab!="("){ag=ag+"|"+ab;ab=ac.pop()}}else{if(ac[ac.length-1]==="("){ac.push(ae)}else{while(ac.length!=0){if(ac[ac.length-1]==="("){break}if(m[ac[ac.length-1]]>m[ae]){ab=ac.pop();ag=ag+"|"+ab}else{break}}ac.push(ae)}}}}}while(ac.length>0){ag=ag+"|"+ac.pop()}return ag.substring(1)}function b(ab){return ab.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function x(ag,ah,ae){if(!ah){return true}ag=ae?ag:ag.toLowerCase();var ac=new Array();var af;var ad;for(var ab=0;ab<ah.length;ab++){token=ah[ab];if(token!="and"&&token!="or"&&token!="not"){ac.push(ae?ag===token:ag.indexOf(token)>=0)}else{if(token==="and"){af=ac.pop();ad=ac.pop();ac.push(af&&ad)}else{if(token==="or"){af=ac.pop();ad=ac.pop();ac.push(af||ad)}else{if(token==="not"){af=ac.pop();ac.push(!af)}}}}}return ac.length===1&&ac.pop()}function k(){j();D();H();T();S();s();window.alert("All Tests Passed")}function j(){var ac=G("text1 and text2");var ab=G("text1 text2");A(ac,ab);var ac=G("not text2");var ab=G("-text2");A(ac,ab)}function A(ac,ab){if(ac.length!=ab.length){throw new Error("ERROR: assertArraysAreSame:1")}for(var ad=0;ad<ac.length;ad++){if(ac[ad]!=ab[ad]){throw new Error("ERROR: assertArraysAreSame:2")}}}function D(){var ab=G("text1 and text2");if(x("text1",ab)){throw new Error("ERROR: testAndMatches:1")}if(x("text1 text3",ab)){throw new Error("ERROR: testAndMatches:2")}if(!x("text1 text2",ab)){throw new Error("ERROR: testAndMatches:3")}if(!x("text2 text1",ab)){throw new Error("ERROR: testAndMatches:4")}if(!x("text2 text 3text1",ab)){throw new Error("ERROR: testAndMatches:5")}}function H(){var ab=G("text1 or text2");if(!x("text1",ab)){throw new Error("ERROR: testSimpleORMatches:1")}if(!x("text1 text3",ab)){throw new Error("ERROR: testSimpleORMatches:2")}if(!x("text1 text2",ab)){throw new Error("ERROR: testSimpleORMatches:3")}if(!x("text2 text1",ab)){throw new Error("ERROR: testSimpleORMatches:4")}if(!x("text2 text 3text1",ab)){throw new Error("ERROR: testSimpleORMatches:5")}if(x("text3 text4",ab)){throw new Error("ERROR: testSimpleORMatches:6")}}function T(){var ab=G("not text2");if(!x("text1",ab)){throw new Error("ERROR: testSimpleNOTMatches:1")}if(x("text1 text2",ab)){throw new Error("ERROR: testSimpleNOTMatches:2")}}function S(){var ab=G("(text1 and text2) or text3");if(x("text1",ab)){throw new Error("ERROR: testSimpleGroupMatches:1")}if(!x("text1 text2",ab)){throw new Error("ERROR: testSimpleGroupMatches:2")}if(!x("text3",ab)){throw new Error("ERROR: testSimpleGroupMatches:2")}if(!x("text33",ab)){throw new Error("ERROR: testSimpleGroupMatches:3")}}function s(){var ab=G('"text1 is not text2" t3e3x3t3');if(x("text1 not is text2 t3e3x3t3",ab)){throw new Error("ERROR: testSimpleQuoteMatches:1")}if(x("text1 is not t3e3x3t3 text3",ab)){throw new Error("ERROR: testSimpleQuoteMatches:2")}if(!x("this will match text1 is not text2 yet3e3x3t3ssss ",ab)){throw new Error("ERROR: testSimpleQuoteMatches:3")}}};a.fn.tableFilter.filterToolTipMessage='Quotes (") match phrases. (not) excludes a match from the results. (or) can be used to do Or searches. I.e. [red or blue] will match either red or blue.';a.fn.tableFilter.defaults={additionalFilterTriggers:[],clearFiltersControls:[],matchingRow:null,matchingCell:null,filterDelay:200,inputDefaultValue:"Suchbegriff eingeben",selectOptionLabel:"Bitte auswählen"}})(jQuery);
