var TableOrderer=Class.create();TableOrderer.prototype={initialize:function(B,A){this.element=B;this.options=A;this.options=Object.extend({data:false,url:false,allowMultiselect:true,unsortedColumn:[],dateFormat:"d",filter:false,paginate:5},A||{});this.container=$(B);this.orderField=false;this.order="asc";this.thClickbfx=this.thClick.bindAsEventListener(this);this.thOverbfx=this.thOver.bindAsEventListener(this);this.thOutbfx=this.thOut.bindAsEventListener(this);this.setData()},perform:function(){this.setColumnsName();this.createTable()},getData:function(A){new Ajax.Request(A,{onLoading:function(){$(this.element).update("Loading...")}.bind(this),onSuccess:function(B){this.data=B.responseJSON;this.perform()}.bind(this),onFailure:function(){alert("invalid data")}})},setData:function(){if(!this.options.data&&!this.options.url){alert("no data")}this.data=this.options.data?this.options.data:false;this.data?this.perform():this.getData(this.options.url)},orderRule:function(B){var A=/^(\d{2})[\/\- ](\d{2})[\/\- ](\d{4}|\d{2})/;var C=new RegExp(A);if(C.test(B)){B=this.options.dateFormat=="d"?B.replace(A,"$3$2$1"):B.replace(A,"$3$1$2")}return B},defineOrderField:function(A){this.previousOrderField=this.orderField;this.orderField=Event.element(A).id.replace(this.table.id+"-","")},defineOrder:function(){if(this.previousOrderField==this.orderField){this.order=this.order=="desc"?"asc":"desc"}else{this.order="asc"}},orderData:function(A){var A=A;this.data=this.data.sortBy(function(B){v=Object.values(B)[Object.keys(B).indexOf(A)];return this.orderRule(v)}.bind(this))},thClick:function(A){this.defineOrderField(A);this.defineOrder();this.orderData(this.orderField);this.createTable()},thOver:function(A){Event.element(A).addClassName("on")},thOut:function(A){Event.element(A).removeClassName("on")},trClick:function(C){this.setSelected(Event.findElement(C,"tr"));items=Event.findElement(C,"tr").descendants().pluck("innerHTML");var A="{";var B=Object.keys(this.model);items.each(function(E,D){A+=D==0?"":", ";A+='"'+B[D]+'": "'+E+'"'});A+="}";selected=A.evalJSON()},trOver:function(A){Event.findElement(A,"tr").addClassName("on")},trOut:function(A){Event.findElement(A,"tr").removeClassName("on")},setSelected:function(A){if(this.options.allowMultiselect){A.hasClassName("selected")?A.removeClassName("selected"):A.addClassName("selected")}else{}},addObserver:function(){tid=this.table.id;$$("#"+tid+" th").invoke("observe","click",this.thClickbfx).invoke("observe","mouseover",this.thOverbfx).invoke("observe","mouseout",this.thOutbfx);$$("#"+tid+" tr.data").invoke("observe","click",this.trClick.bindAsEventListener(this)).invoke("observe","mouseover",this.trOver.bindAsEventListener(this)).invoke("observe","mouseout",this.trOut.bindAsEventListener(this));if(this.options.filter){var A=this.filterData.bindAsEventListener(this);Event.observe(tid+"-filter-column","change",A);Event.observe(tid+"-filter-data","keyup",A)}},filterData:function(B){var A=this.table.id;$$("#"+A+" td."+A+"-column-"+$F(A+"-filter-column")).each(function(C){C.ancestors()[1].show();if(!C.innerHTML.toUpperCase().include($F(A+"-filter-data").toUpperCase())){C.ancestors()[1].hide()}})},makeColumnUnsortable:function(A){A=this.table.id+"-"+A;$(A).setStyle({backgroundImage:"none"});Event.stopObserving($(A),"click",this.thClickbfx);Event.stopObserving($(A),"mouseover",this.thOverbfx);Event.stopObserving($(A),"mouseout",this.thOutbfx)},makeUnsort:function(){this.options.unsortedColumn.each(function(A){if($(this.table.id+"-"+A)){this.makeColumnUnsortable(A)}}.bind(this))},createTable:function(){this.container.update();this.container.insert({top:'<table cellspacing="1" cellpadding="0" id="data-grid-'+this.element+'" class="prototools-table"></table>'});this.table=$("data-grid-"+this.element);this.createRows();this.addObserver();this.makeUnsort()},createRow:function(C,B){line=B%2;var D='<tr class="data line'+line+'" id="'+this.table.id+"-"+B+'">\n';var C=C;var A=Object.values(C);this.tableColumnsName.each(function(F,E){D+='\t<td class="'+this.table.id+"-column-"+F+'">'+A[E]+"</td>\n"}.bind(this));D+="\n</tr>";return D},createFirstRow:function(A){row="<tr>\n";this.tableColumnsName.each(function(B){row+='\t<th id="'+this.table.id+"-"+B+'">'+B.replace("_"," ").capitalize()+"</th>"}.bind(this));row+="\n</tr>";this.model=Object.clone(A);return row},setColumnsName:function(){this.tableColumnsName=Object.keys(this.data[0])},createFilter:function(){var A="";this.tableColumnsName.each(function(B){A+='\t<option value="'+B+'">'+B.replace("_"," ").capitalize()+"</option>\n"});$(this.table.id+"-options").insert({bottom:"Filter Column :"}).insert({bottom:'<select id="'+this.table.id+'-filter-column">'+A+"</select>"}).insert({bottom:Element("input",{id:this.table.id+"-filter-data"})})},createRows:function(){var A=1;if(this.order=="desc"){this.data=this.data.reverse()}this.data.each(function(C,B){this.table.insert({bottom:this.createRow(C,B)});A=(A==1)?2:1}.bind(this));this.table.insert({top:this.createFirstRow()});if(this.options.filter||this.options.paginate){filterDiv=new Element("div",{id:this.table.id+"-options","class":"prototools-options"});if(this.options.filter){if(this.options.filter=="top"){this.table.insert({before:filterDiv});filterDiv.setStyle("border-bottom : none;")}else{this.table.insert({after:filterDiv});filterDiv.setStyle("border-top : none;")}this.createFilter()}}if(this.orderField){$(this.table.id+"-"+this.orderField).addClassName(this.order)}}};