String.random=function(a){var b=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];var s='';if(a==undefined){a=8}for(var i=0;i<a;i++){s+=b[Math.round(Math.random()*(b.length-1))]}return s};String.prototype.parseInt=function(){var a='-0123456789';var s='';for(var i=0;i<this.length;i++){if(a.indexOf(this.substr(i,1))!=-1){s+=this.substr(i,1)}}return parseInt(s)};
Array.prototype.exists=function(a){if(this.length==0){return false}for(var i=0;i<this.length;i++){if(a==this[i]){return true}}return false};Array.prototype.remove=function(b){if(this.length==0){return}var a=[];for(var i=0;i<this.length;i++){if(b!=this[i]){a.push(this[i])}}this.length=a.length;for(var i=0;i<a.length;i++){this[i]=a[i]}};Array.prototype.uniqueSort=function(){if(this.length==0){return}this.sort();var t='';var a=[];for(var i=0;i<this.length;i++){if(t!=this[i]){t=this[i];a.push(t)}}this.length=a.length;for(var i=0;i<a.length;i++){this[i]=a[i]}};
jQuery.fn.filter=function(g){options={columns:[],filterTableClass:'filter',insertBefore:null,insertAfter:null,insertIn:null};
jQuery.extend(options,g);jQuery(this).each(function(){var d=jQuery(this);var e={obj:null,headers:[],values:[],clickedList:[],clickedColumns:[]};
var f={obj:this,rows:[],values:[]};init();
function init(){if(jQuery(f.obj).attr('id')===''){jQuery(f.obj).attr('id',String.random())}parseTable();createFilterTable()}function parseTable(){var a=jQuery(f.obj).find('thead tr th');for(var i=0;i<a.length;i++){e.headers[i]=jQuery(a[i]).html();e.clickedColumns[i]=-1;f.values[i]=[]}for(var i=0;i<options.columns.length;i++){e.values[i]=[]}f.rows=jQuery(f.obj).find('tbody tr');for(var j=0;j<f.rows.length;j++){var b=jQuery(f.rows[j]).find('td');for(var i=0;i<options.columns.length;i++){var c=jQuery(b[options.columns[i]]).find('div');for(var k=0;k<c.length;k++){e.values[i][e.values[i].length]=jQuery(c[k]).html()}}}for(var i=0;i<e.values.length;i++){e.values[i].uniqueSort();f.values[j]=[]}for(var j=0;j<f.rows.length;j++){var b=jQuery(f.rows[j]).find('td');for(var i=0;i<options.columns.length;i++){f.values[i][j]=[];var c=jQuery(b[options.columns[i]]).find('div');for(var k=0;k<c.length;k++){f.values[i][j].push(getFilterNumber(i,jQuery(c[k]).html()))}}}}function createFilterTable(){var s='<table id="'+jQuery(f.obj).attr('id')+'_filter"><thead><tr>';for(var i=0;i<options.columns.length;i++){s+='<th>'+e.headers[options.columns[i]]+'</th>'}s+='</tr></thead><tbody><tr>';for(var i=0;i<e.values.length;i++){s+='<td>';for(var j=0;j<e.values[i].length;j++){s+='<div cc="'+i+'" cr="'+j+'">'+e.values[i][j]+'</div>'}s+='</td>'}s+='</tr></tbody></table>';if(options.insertBefore!=null){jQuery(s).insertBefore('#'+options.insertBefore)}else if(options.insertAfter!=null){jQuery(s).insertAfter('#'+options.insertAfter)}else if(options.insertIn!=null){jQuery('#'+options.insertIn).html(jQuery(s))}else{jQuery(s).insertBefore(jQuery(d))}e.obj=jQuery('#'+jQuery(f.obj).attr('id')+'_filter');e.obj.attr('class',options.filterTableClass);jQuery(e.obj).find('div').click(function(){var a=parseInt(jQuery(this).attr('cc'));var b=parseInt(jQuery(this).attr('cr'));switch(jQuery(this).attr('class')){case'':if(e.clickedList.exists(a)){jQuery(this).parents('td').find('div').attr('class','')}else{e.clickedList.push(a)}e.clickedColumns[a]=b;jQuery(this).attr('class','selected');break;case'selected':e.clickedList.remove(a);e.clickedColumns[a]=-1;jQuery(this).parents('td').find('div').attr('class','');break;default:return}filterRows();filterUncheckable()})}function filterRows(){for(var i=0;i<f.rows.length;i++){jQuery(f.rows[i]).show()}for(var i=0;i<f.rows.length;i++){for(var j=0;j<e.clickedColumns.length;j++){if(e.clickedColumns[j]!=-1&&!f.values[j][i].exists(e.clickedColumns[j])){jQuery(f.rows[i]).hide();break}}}}function filterUncheckable(){var a=jQuery(e.obj).find('tbody div');for(var i=0;i<a.length;i++){if(jQuery(a[i]).attr('class')=='disabled'){jQuery(a[i]).attr('class','')}}for(var i=0;i<e.clickedList.length;i++){var b=jQuery(e.obj).find('tbody tr td');for(var j=0;j<e.values.length;j++){a=jQuery(b[j]).find('div');if(e.clickedList[i]!=j){for(var k=0;k<e.values[j].length;k++){if(!isInColumn(j,k)){if(jQuery(a[k]).attr('class')==''){jQuery(a[k]).attr('class','disabled')}}}}}}}function getFilterNumber(a,b){for(var i=0;i<e.values[a].length;i++){if(e.values[a][i]==b){return i}}return-1}function isInColumn(a,b){for(var i=0;i<f.values[a].length;i++){if(f.values[a][i].exists(b)&&jQuery(f.rows[i]).css('display')!='none'){return true}}return false}})};

