var MooTable=new Class({initialize:function(b,a){this.element=$(b);this.klon=$(b).clone();this.options=Object.extend({height:"90%",resizable:false,sortable:"",useloading:true,position:"inside",section:20,delay:10,fade:false,headers:false,data:false,protectedyes:"",debug:false,footer:false,filter:[],minColWidth:50,decimal:"."},a||{});this.headers=[];this.rows=[];this.rows=this.klon.getElements("tr");this.fade=this.options.fade?(window.ie6?"":'<div class="fade"></div>'):"";this.minSizes=[];this.colSortOrder=[];this.curSortOrder=[];this.loading=true;this.sortasc=true;this.sortby=false;this.sortby2=false;this.sortColumnIndex="";this.sortables={};this.visibleColumnList=this._getVisibleColumnsCookie();this.addEvent("buildFinish",function(){if(this.klon.rows.length>0){if(this.options.footer){this.rows[this.rows.length-1].className+="sortbottom"}this.colSortOrder=this._getOrderCookie()!=""?this._getOrderCookie().split(","):[];if(this.colSortOrder.length>0){this.orderCols()}this._hideVisibleColumns();this._setColumnWidthsKlon();this._zebra();$$("input.filter_field").each(function(c){c.addEvent("keyup",function(){for(i=1;i<this.klon.rows.length;i++){if(c.value!=""){if(!(this.klon.rows[i].cells[c.id].innerHTML.replace(/<[\/\!]*?[^<>]*?>/gi,"").test(c.value,"i"))){this.klon.rows[i].setStyle("display","none")}else{if(this.klon.rows[i].getStyle("display")=="none"){this.klon.rows[i].setStyle("display","")}}}else{this.klon.rows[i].setStyle("display","")}}this._zebra()}.bind(this))}.bind(this));if(this.options.sortable&&Cookie.get(document.location.search.replace(/=/g,"")+this.element.id)){this.ts_resortTable(Cookie.get(document.location.search.replace(/=/g,"")+this.element.id))}}});if(this.options.debug){this.debug={};this.addEvent("buildStart",function(){this.debug.startTime=new Date().getTime()});this.addEvent("buildFinish",function(){});this.addEvent("sortStart",function(){this.debug.sortStart=new Date().getTime()});this.addEvent("sortFinish",function(){})}if(this.options.useloading){this.addEvent("loadingStart",function(){this.tbody.setStyle("overflow","hidden");this.tbodyloading.setStyle("display","block")});this.addEvent("loadingFinish",function(){this.tbody.setStyle("overflow","auto");this.tbodyloading.setStyle("display","none")})}this._minSizes();this._makeTable(this.element);this.div.setStyle("height",this.options.height);this._manageHeight();this.tbody.addEvent("scroll",function(c){this.thead_tr.setStyle("left","-"+this.tbody.scrollLeft+"px");return true}.bind(this))},_minSizes:function(){if(this.klon.rows.length<2){return}this.klon.rows[0].id="controlRowWidth";this.klon.addClass("klonPadding");this.minSizes=[];if(this.options.fade){for(var c=0;c<this.klon.rows.length;c++){for(var b=0;b<this.klon.rows[c].cells.length;b++){this.klon.rows[c].cells[b].innerHTML="<div class='cell'><span style='display:block'>"+this.klon.rows[c].cells[b].innerHTML+"</span><div class='fade'>&nbsp;</div></div>"}}for(var c=0;c<this.klon.rows[1].cells.length;c++){this.minSizes.push(this.options.minColWidth)}}else{for(var c=0;c<this.klon.rows[0].cells.length;c++){this.element.rows[0].cells[c].setAttribute("width",1);var a=(this.element.rows[0].cells[c].clientWidth>this.options.minColWidth)?this.element.rows[0].cells[c].clientWidth+5:this.options.minColWidth;this.minSizes.push(a)}}},_replaceCols:function(c,b){$$("#"+this.klon.id+" tr").each(function(e){var d="";d=e.cells[c].innerHTML;e.cells[c].innerHTML=e.cells[b].innerHTML;e.cells[b].innerHTML=d});var a=$$("div.th")[c].firstChild.innerHTML;$$("div.th")[c].firstChild.empty().innerHTML=$$("div.th")[b].firstChild.innerHTML;$$("div.th")[b].firstChild.empty().innerHTML=a;var a=this.minSizes[c];this.minSizes[c]=this.minSizes[b];this.minSizes[b]=a;var a=$("controlRowWidth").cells[c].style.width;$("controlRowWidth").cells[c].style.width=$("controlRowWidth").cells[b].style.width;$("controlRowWidth").cells[b].style.width=a},orderCols:function(){var b=[];if(this.curSortOrder.length<1){for(var a=0;a<this.colSortOrder.length;a++){this.curSortOrder.push(a)}}this.colSortOrder.each(function(e,d){if(e){if(this.curSortOrder[d]!=e){for(var c=0;c<this.curSortOrder.length;c++){if(this.curSortOrder[c]==e){this.curSortOrder[c]=this.curSortOrder[d];this.curSortOrder[d]=e;this._replaceCols(d,c);break}}}}}.bind(this));this.curSortOrder=this.colSortOrder.slice();this._setOrderCookie(this.curSortOrder);this._setColumnWidthsKlon();this._setHeaderWidthsKlon()},_hideVisibleColumns:function(){var b=this.visibleColumnList;for(i=0;i<b.length;i++){if(b[i]!=""){for(var a=0;a<this.klon.rows.length;a++){this.klon.rows[a].cells[b[i]].style.display="none"}this.headers[b[i]].element.setStyle("display","none")}}if(b.length>0){this._setHeaderTableWidth();this._setDataTableWidth();this._setColumnWidthsKlon()}},_manageHeight:function(){var a=this.options.resizable?8:1;this.tbody.setStyle("height",(this.div.getSize().size.y-this.thead.getSize().size.y-a)+"px");if(this.options.useloading){this.tbodyloading.setStyle("height",(this.div.getSize().size.y-this.thead.getSize().size.y-a)+"px")}this.tbody.setStyle("top",this.thead.getSize().size.y+"px")},_rememberCookies:function(){this.headers.each(function(b){var a=this._getWidthCookie(b.element);if(a){b.element.setStyle("width",a);this._changeColumnWidth(b.element)}},this)},_makeTable:function(a){this._fireEvent("buildStart");if(!a){return}this._createTableFramework();if(a.getTag()=="table"){this._fireEvent("loadingStart");this._makeTableFromTable(a);return}this.div.inject(a,this.options.position);this._build()},_makeTableFromTable:function(a,b){var d=$type(a)=="array"?a:a.getElements("tr");if(!$chk(b)){b=0}while(b<1){var c=d[b];if(b==0){c.setStyle("display","none");this.div.injectBefore(a);this.klon.injectInside(this.tbody);a.setStyle("display","none");if(a.getElement("tfoot")){a.getElement("tfoot").remove()}c.getElementsBySelector("th,td").each(function(e){value=e.innerHTML;if(this.options.sortable.length>0){if(this.options.sortable.indexOf(value)!=-1){this._addHeader(value)}else{this._addHeader(value,{sortable:false})}}else{this._addHeader(value)}},this)}b++;this.element.remove()}this.loading=false;this._setHeaderTableWidth();this._setDataTableWidth();this._fireEvent("buildFinish");this._fireEvent("loadingFinish")},_build:function(){if(this.options.headers&&$type(this.options.headers)=="array"){this.options.headers.each(function(a){switch($type(a)){case"string":this._addHeader(a.trim()==""?"&nbsp;":a);break;case"object":this._addHeader(a.text||"&nbsp;",a);break;default:break}},this)}this.options.headers=null},_emptyData:function(){this.rows.each(function(a){a.element.remove()});this.rows=[]},_createTableFramework:function(){this.div=new Element("div").addClass("mootable_container");this.mootable=new Element("div").addClass("mootable").injectInside(this.div);this.thead=new Element("div").addClass("thead").injectInside(this.mootable);this.thead_tr=new Element("div").addClass("tr").injectInside(this.thead);this.tbody=new Element("div").addClass("tbody").injectAfter(this.thead);this.table=new Element("table").setProperties({cellpadding:"0",cellspacing:"0",border:"0"}).injectInside(this.tbody);this.tablebody=new Element("tbody").injectInside(this.table);if(this.options.useloading){this.tbodyloading=new Element("div").addClass("loading").injectInside(this.tbody);this.tbodyloading.setStyle("opacity",".84")}if(this.options.resizable){this.resizehandle=new Element("div").addClass("resizehandle").injectInside(this.div);new Drag.Base(this.div,{handle:this.resizehandle,modifiers:{y:"height"},onComplete:function(){this._manageHeight()}.bind(this)})}},_addHeader:function(g,f){var c=Object.extend({fixedWidth:false,defaultWidth:"50px",sortable:true,key:null,fade:true},f||{});var b=new Element("div").injectInside(this.thead_tr).addClass("th");new Element("div").addClass("cell").setHTML(g).injectInside(b);if(this.options.filter.length!=0){var a=new Element("div").setStyle("overflow","hidden");new Element("input").setProperty("type","text").setProperty("id",this.headers.length).setProperty("class","filter_field").injectInside(a);a.injectInside(b)}var e={element:b,value:g,options:c};e.element.col=this.headers.length;this.headers.push(e);var d=this._getWidthCookie(e.element)?this._getWidthCookie(e.element):this.minSizes[e.element.col];if(d<this.minSizes[e.element.col]){d=this.minSizes[e.element.col]}if(d&&!e.options.fixedWidth){e.element.setStyle("width",d)}else{e.element.setStyle("width",e.options.defaultWidth)}e.width=e.element.getStyle("width");if(this.options.sortable&&e.options.sortable){e.element.addClass("sortable");e.element.addEvent("mouseup",function(h){if(h.className.indexOf("dragging")==-1){this.ts_resortTable(e.element.col)}}.pass(e.element,this))}e.element.addEvent("mouseover",function(){this.addClass("mouseover")});e.element.addEvent("mouseout",function(){this.removeClass("mouseover")})},_setHeaderWidthsKlon:function(){$$("div.th").each(function(b,a){w=$("controlRowWidth").cells[a].style.width;b.setStyle("width",w)}.bind(this));this._setHeaderTableWidth();this._setDataTableWidth()},_setColumnWidthsKlon:function(){if(this.klon.rows.length>0){$(this.klon.id).getElements("td[style^=width]").each(function(a){a.style.width=""});$$("div.th").each(function(b,a){w=b.getStyle("width");if(w.replace(/px/,"")<this.minSizes[a]){w=this.minSizes[a]}$("controlRowWidth").cells[a].style.width=w}.bind(this))}this._setHeaderTableWidth();this._setDataTableWidth()},_setHeaderTableWidth:function(){var a=0;$$("div.th").each(function(c,b){a+=c.getStyle("display")=="none"?0:c.getSize().size.x}.bind(this));this.thead_tr.setStyle("width",a)},_setDataTableWidth:function(){this.klon.setStyle("width",this.thead_tr.getStyle("width"));this.tbody.fireEvent("scroll")},_initDisplayOptions:function(){this.displayOptions=new Element("div").addClass("mootable_options");var h=new Element("div").setProperty("id","sortablesList").setStyle("display","none").injectInside(this.displayOptions);h.addEvent("change",function(l){this.colSortOrder=h.innerHTML.split(",");this.visibleColumnList.length=0;$$("input[name^=mootable_h]").each(function(n,m){n.setProperty("sort",m);if(!n.getProperty("checked")){this.visibleColumnList.push(m)}}.bind(this));this._setVisibleColumnsCookie(this.visibleColumnList);this.orderCols()}.bind(this));this.form=new Element("form").setProperty("id","display_forma").injectInside(this.displayOptions);var c=0;var k=0;this.curSortOrder=[];for(var f=0;f<this.headers.length;f++){if(this.colSortOrder.length>f){k=this.colSortOrder[f]}else{k=f}var d=this.headers[k];var b="mootable_h"+k;var a=new Element("div").setProperty("id",k).injectInside(this.form);if(d){if(this.options.protectedyes.indexOf(d.value)!=-1){a.setStyle("display","none")}var e=new Element("input").setProperty("type","checkbox").setProperty("id",b).setProperty("sort",f).setProperty("name",b).injectInside(a);e.setProperty("checked",true);if(this.visibleColumnList.contains(""+f+"")){e.setProperty("checked",false)}e.addEvent("click",this.toggleColumn.pass($(b),this));var g=new Element("label").setProperty("for",b).setProperty("htmlFor",b).setHTML(d.value).injectInside(a);if(c<this.headers.length){new Element("br").injectAfter(g)}this.curSortOrder.push(k)}}this.displayOptionsTrigger=new Element("div").addClass("displayTrigger").injectInside(this.thead);this.displayOptionsTrigger.addEvent("click",this._toggleDisplayOptions.bind(this));this.displayOptions.addClass("displayOptions").injectAfter(this.displayOptionsTrigger);this.sortables=new Sortables($("display_forma"),{initialize:function(){var l=0;this.options.snap=10;this.elements.each(function(n,m){n.addClass("sortables_bg")})},snap:3,ghost:true,handles:"div label",onComplete:function(){$("sortablesList").empty();this.serialize(function(l){$("sortablesList").innerHTML+=l.id+","});$("sortablesList").fireEvent("change")}})},toggleColumn:function(a){a=new Event(a);a=a.target.getProperty("sort");if(this.colSortOrder.length>a){var c=this.form["mootable_h"+this.colSortOrder[a]].checked}else{var c=this.form["mootable_h"+a].checked}for(var b=0;b<this.klon.rows.length;b++){this.klon.rows[b].cells[a].style.display=c?"":"none"}if(c){this.visibleColumnList.remove(""+a+"")}else{if(!this.visibleColumnList.contains(""+a+"")){this.visibleColumnList.include(a)}}this._setVisibleColumnsCookie(this.visibleColumnList);this.headers[a].element.setStyle("display",c?"":"none");this._setHeaderTableWidth();this._setDataTableWidth()},_toggleDisplayOptions:function(a){if(this.displayOptions.getStyle("display")=="none"){this.displayOptions.setStyle("display","block");document.addEvent("mousemove",this._monitorDisplayOptions.bind(this))}else{this.displayOptions.setStyle("display","none");document.removeEvent("mousemove",this._monitorDisplayOptions)}},_monitorDisplayOptions:function(a){var b=new Event(a);var c=this.displayOptions.getCoordinates();if(b.page.x<c.left||b.page.x>(c.left+c.width)){this.displayOptions.setStyle("display","none");document.removeEvent("mousemove",this._monitorDisplayOptions)}else{if(b.page.y<c.top||b.page.y>(c.top+c.height)){this.displayOptions.setStyle("display","none");document.removeEvent("mousemove",this._monitorDisplayOptions)}}},_zebra:function(){var d=0;var a=0;var b=this.options.footer?this.klon.rows.length-1:this.klon.rows.length;for(d=0;d<b;d++){if(this.klon.rows[d].getStyle("display")!="none"){this.klon.rows[d].addClass(a%2==0?"odd":"even");this.klon.rows[d].removeClass(a%2==1?"odd":"even");this.klon.rows[d].addEvent("click",function(c){c=new Event(c);$$("tr.sel").each(function(e){e.removeClass("sel")});this.addClass("sel")});a++}}},_setWidthCookie:function(a){Cookie.set("mootable_h_"+this.element.id+"_"+document.location.pathname.replace(/=/g,"")+"_"+a.col,a.getStyle("width"),{duration:0})},_getWidthCookie:function(a){return Cookie.get("mootable_h_"+this.element.id+"_"+document.location.pathname.replace(/=/g,"")+"_"+a.col)},_setOrderCookie:function(a){Cookie.set("mootable_order_"+this.element.id+"_"+document.location.pathname.replace(/=/g,""),a,{duration:0})},_getOrderCookie:function(a){return Cookie.get("mootable_order_"+this.element.id+"_"+document.location.pathname.replace(/=/g,""))},_setVisibleColumnsCookie:function(a){Cookie.set("mootable_v_"+this.element.id+"_"+document.location.pathname.replace(/=/g,""),a,{duration:0})},_getVisibleColumnsCookie:function(b){var a=Cookie.get("mootable_v_"+this.element.id+"_"+document.location.pathname.replace(/=/g,""));a=a?a.split(","):[];return a},ts_resortTable:function(d){this._fireEvent("sortStart");this.sortColumnIndex=d;var l;var c=0;$$("div.th").each(function(n){if(c==d){l=n}c++});var b=this.ts_getInnerText(l);if(this.rows.length<=1){return}var k=this.ts_getInnerText(this.rows[1].cells[d]);sortfn=this.ts_sort_caseinsensitive;var f=k.replace(/\./g,"");f=f.replace(",",".");if(k.match(/^[?]/)){sortfn=this.ts_sort_currency}if(k.match(/^[\d\.]+$/)){sortfn=this.ts_sort_numeric}if(parseFloat(f)){sortfn=this.ts_sort_numeric}if(k.match(/[a-z]./i)){sortfn=this.ts_sort_caseinsensitive}if(k.match(/^\d\d[\/-]\d\d[\/-]\d?\d?\d\d$/)){sortfn=this.ts_sort_date}if(k.match(/^\d?\d[\/.]\d?\d[\/.]\d\d\d\d$/)){sortfn=this.ts_sort_date}var e=new Array();var g=new Array();for(i=0;i<this.rows[1].length;i++){e[i]=this.rows[1][i]}for(j=1;j<this.rows.length;j++){g[j-1]=this.rows[j]}Cookie.set(document.location.search.replace(/=/g,"")+this.element.id,this.sortColumnIndex,{duration:0});g.sort(sortfn.bind(this));var h=parseInt(Cookie.get(document.location.search.replace(/=/g,"")+this.element.id+"dir"));var m=l.className?l.className.indexOf("sorted_asc"):-1;if(h){m=h}if(m>-1){g.reverse();Cookie.set(document.location.search.replace(/=/g,"")+this.element.id+"dir",-1,{duration:0});var a="sorted_asc";l.className=l.className+" sorted_desc";l.className=l.className.replace("sorted_asc","")}else{var a="sorted_desc";l.className=l.className+" sorted_asc";l.className=l.className.replace("sorted_desc","");Cookie.set(document.location.search.replace(/=/g,"")+this.element.id+"dir",1,{duration:0})}$$("div.th").each(function(n,o){if(o!=d){n.removeClass("sorted_asc");n.removeClass("sorted_desc")}});for(i=0;i<g.length;i++){if(!g[i].className||(g[i].className&&(g[i].className.indexOf("sortbottom")==-1))){this.klon.tBodies[0].appendChild(g[i])}}for(i=0;i<g.length;i++){if(g[i].className&&(g[i].className.indexOf("sortbottom")!=-1)){this.klon.tBodies[0].appendChild(g[i])}}this._zebra();this._fireEvent("sortFinish")},ts_sort_date:function(e,d){aa=this.ts_getInnerText(e.cells[this.sortColumnIndex]);bb=this.ts_getInnerText(d.cells[this.sortColumnIndex]);var c=aa.split(".");if(c[1]<10){c[1]="0"+c[1]}if(c[0]<10){c[0]="0"+c[0]}dt1=c[2]+c[1]+c[0];var f=bb.split(".");if(f[1]<10){f[1]="0"+f[1]}if(f[0]<10){f[0]="0"+f[0]}dt2=f[2]+f[1]+f[0];if(dt1==dt2){return 0}if(dt1<dt2){return -1}return 1},ts_sort_currency:function(d,c){aa=this.ts_getInnerText(d.cells[this.sortColumnIndex]).replace(/[^0-9.]/g,"");bb=this.ts_getInnerText(c.cells[this.sortColumnIndex]).replace(/[^0-9.]/g,"");return parseFloat(aa)-parseFloat(bb)},ts_sort_numeric:function(d,c){if(this.options.decimal==","){aa=this.ts_getInnerText(d.cells[this.sortColumnIndex]).replace(/\./g,"");aa=parseFloat(aa.replace(/\,/g,"."));bb=this.ts_getInnerText(c.cells[this.sortColumnIndex]).replace(/\./g,"");bb=parseFloat(bb.replace(/\,/g,"."))}else{aa=d;bb=c}if(isNaN(aa)){aa=0}if(isNaN(bb)){bb=0}return aa-bb},ts_sort_caseinsensitive:function(d,c){aa=this.ts_getInnerText(d.cells[this.sortColumnIndex]).toLowerCase();bb=this.ts_getInnerText(c.cells[this.sortColumnIndex]).toLowerCase();if(aa==bb){return 0}if(aa<bb){return -1}return 1},ts_sort_default:function(d,c){aa=ts_getInnerText(d.cells[this.sortColumnIndex]);bb=ts_getInnerText(c.cells[this.sortColumnIndex]);if(aa==bb){return 0}if(aa<bb){return -1}return 1},ts_getInnerText:function(d){if(typeof d=="string"){return d}if(typeof d=="undefined"){return""}if(d.value){return d.value}var e="";var c=d.childNodes;var a=c.length;for(var b=0;b<a;b++){switch(c[b].nodeType){case 1:e+=this.ts_getInnerText(c[b]);break;case 3:e+=c[b].nodeValue;break}}return e},bestFit:function(b){var a=0;$$("#"+this.klon.id+" tr").each(function(e){var c=0;for(var d=0;d<e.cells.length;d++){if(b==c){s=e.cells[d].clientWidth;if(s>a){a=s}}c++}});if(b){this.headers[b].element.setStyle("width",(a+(this.headers[b].options.fade&&this.options.fade?5:0))+"px");this._setWidthCookie(this.headers[b].element)}this._setHeaderTableWidth();this._setColumnWidthsKlon()},addEvent:function(b,a){this.events=this.events||{};this.events[b]=this.events[b]||{keys:[]};if(!this.events[b].keys.test(a)){this.events[b].keys.push(a)}return this},_fireEvent:function(b,a){if(this.events&&this.events[b]){this.events[b].keys.each(function(c){c.bind(this,a)()},this)}}});
