var DynaTable=Class.create({initialize:function(B,D,C,A){this.domNode=$(D);if(A.scrollNode){this.scroller=new DynaTableScroller(this,A.scrollNode)}else{this.scroller=new DynaTableScroller(this,$(D).down(".dynatable-scroller"))}if(A.filterClass){this.filter=A.filterClass;this.filter.setup(this)}else{if(A.filterNode){this.filter=new DynaTableFilter(this,A.filterNode)}}if(A.loadingStatus){this.loadingStatus=$(A.loadingStatus)}else{this.loadingStatus=$("ajax-loader")}this.filters="";this.getHandler=C;this.totalRows=-1;this.fetchedRows=new Array();this.limit=A.limit||10;this.getUrl=B;this.lastoffset=1;this.sendReqNo=0;this.recvReqNo=0;this.showRows(1,this.limit)},changeUrl:function(A){this.getUrl=A;this.totalRows=-1;this.fetchedRows=new Array();this.showRows(1,this.limit)},getRows:function(reqOffset,reqLimit,displayOffset,displayLimit){var url=this.getUrl+"&offset="+reqOffset+"&limit="+reqLimit+"&reqNo="+(++this.sendReqNo);if(this.filter){this.filters=this.filter.getFilters();if(this.filters!=""&&this.filters!=undefined){url+=this.filters}}var self=this;this.loadingStatus.style.display="block";new Ajax.Request(url,{method:"get",onComplete:function(transport){self.loadingStatus.style.display="none"},onSuccess:function(transport){var res=eval("("+transport.responseText+")");if(res.reqNo<self.sendReqNo){return }self.recvReqNo=res.reqNo;self.loadingStatus.style.display="none";if(res.totalrows<=res.returnedrows){self.scroller.domNode.style.display="none"}else{self.scroller.domNode.style.display="block"}self.updateFetchedRows(res);self.displayRows(displayOffset,displayLimit)}})},updateFetchedRows:function(B){this.json=B;this.totalRows=B.totalrows;for(var A=B.offset;A<B.offset+B.returnedrows;++A){this.fetchedRows[A]=B.rows[A-B.offset]}},clearDisplay:function(){var A=this.domNode;while(A.hasChildNodes()){A.removeChild(A.firstChild)}},displayRows:function(G,A){var D=G+A-1;if(D>this.totalRows){D=this.totalRows}var F=(this.totalRows>0)?G:0;var E="From <strong>"+F+"</strong> To <strong>"+D+"</strong> out of <strong>"+this.totalRows+"</strong>";var E=E.toLowerCase();$("showLimits").innerHTML="Results "+E;this.clearDisplay();for(var B=F;B<=D;B++){if(this.fetchedRows[B]){var C=this.getHandler(this.fetchedRows[B],B,this);this.domNode.appendChild(C)}}this.scroller.refreshScrollbar()},showRows:function(E,B){this.lastoffset=E;var F="request to display rows "+E+" to "+(E+B)+" <br />\n";if(this.totalRows==-1){this.getRows(E,B,E,B);F+="table is empty so we get all rows";return F}var D=-1;var A=-1;for(var C=E;C<(E+B);++C){if(this.fetchedRows[C]==undefined){if(D==-1){D=C}A=C}}if(D==-1){F+="no need to get new rows <br />\n";this.displayRows(E,B)}else{F+="we need to get rows "+D+" to "+(A+1)+" <br />\n";this.getRows(D,A-D+1,E,B)}return F},deleteAndShiftRows:function(A){for(i in this.fetchedRows){if(i>=A){this.fetchedRows[i]=this.fetchedRows[""+(parseInt(i)+1)]}}},debugFetchedRows:function(){var A="";for(i in this.fetchedRows){if(this.fetchedRows[i]!=undefined){A+=i+" "}}return A},deleteRow:function(B){this.deleteAndShiftRows(B);var A=this.lastoffset;if(B>this.totalRows-this.limit-1){A-=1}if(A<=0){A=1}this.totalRows-=1;if(this.totalRows<this.limit){this.showRows(A,this.totalRows)}else{this.showRows(A,this.limit)}this.scroller.refreshScrollbar()}});DynaTableScroller=Class.create({initialize:function(B,A){this.table=B;this.domNode=$(A);var C=this.domNode.getElementsByTagName("button");if(C.length==2){this.prevBut=C[0];this.nextBut=C[1]}else{this.inscroll=this.domNode.getElementsByTagName("div")[0]}this.advanceRTG=1;this.timer=null;this.attachEventHandlers();this.refreshDelay=800},attachEventHandlers:function(){if(this.prevBut){Event.observe(this.prevBut,"click",this.makePrevHandler(this));Event.observe(this.nextBut,"click",this.makeNextHandler(this))}else{Event.observe(this.domNode,"scroll",this.makeScrollHandler(this))}},makeScrollHandler:function(A){return function(){A.onscroll()}},onscroll:function(){if(this.timer!=null){clearTimeout(this.timer)}this.advanceRTG=this.computeScroll();this.timer=setTimeout(this.makeTimeoutHandler(this),this.refreshDelay)},makePrevHandler:function(A){return function(){A.prevclick()}},prevclick:function(){if(this.timer!=null){clearTimeout(this.timer)}this.advanceRTG=this.computePrevNext(-this.table.limit);this.timer=setTimeout(this.makeTimeoutHandler(this),this.refreshDelay)},makeNextHandler:function(A){return function(){A.nextclick()}},nextclick:function(){if(this.timer!=null){clearTimeout(this.timer)}this.advanceRTG=this.computePrevNext(this.table.limit);this.timer=setTimeout(this.makeTimeoutHandler(this),this.refreshDelay)},computeScroll:function(){var B=this.domNode.scrollHeight-this.table.domNode.parentNode.offsetHeight;var D=this.domNode.scrollTop;var C=D/B;if(this.table.totalRows==-1||this.table.totalRows<=this.table.limit){var A=1}else{var A=Math.round((this.table.totalRows-this.table.limit)*C)+1}if((A+this.table.limit)>this.table.totalRows){A=this.table.totalRows-this.table.limit+1}if(A<1){A=1}return A},computePrevNext:function(A){if(this.table.totalRows==-1||this.table.totalRows<=this.table.limit){var B=1}else{var B=this.advanceRTG+A}if((B+this.table.limit)>this.table.totalRows){B=this.table.totalRows-this.table.limit+1}if(B<1){B=1}return B},makeTimeoutHandler:function(A){return function(){A.applyScroll()}},applyScroll:function(){this.table.showRows(this.advanceRTG,this.table.limit);this.timer=null},refreshScrollbar:function(){if(this.table.totalRows<this.table.limit){this.domNode.style.display="none";return }if(this.prevBut){if(this.advanceRTG==1){this.prevBut.disabled=true}else{this.prevBut.disabled=false}if((this.advanceRTG+this.table.limit)>this.table.totalRows){this.nextBut.disabled=true}else{this.nextBut.disabled=false}}else{var D=this.table.totalRows/this.table.limit;var C=this.table.domNode.parentNode.offsetHeight;var B=Math.round(C*D);var A=Math.round(((this.table.lastoffset-1)/(this.table.totalRows-this.table.limit))*(B-C));this.domNode.style.height=C+"px";this.inscroll.style.height=B+"px";if(this.domNode.scrollTop!=A){this.domNode.scrollTop=A}this.domNode.style.display="block"}}});DynaTableFilter=Class.create({initialize:function(A,B){this.table=A;this.filterNode=$(B);this.filters=new Object();this.attachEventHandlers()},makeRefreshHandler:function(A){return function(){A.refreshContent()}},attachEventHandlers:function(){var A=this.filterNode.getElementsByTagName("input");var C=this.filterNode.getElementsByTagName("select");for(var B=0;B<A.length;B++){if(A[B].type=="text"){Event.observe(A[B],"keyup",this.makeRefreshHandler(this))}else{Event.observe(A[B],"click",this.makeRefreshHandler(this))}}for(var B=0;B<C.length;B++){Event.observe(C[B],"change",this.makeRefreshHandler(this))}},getFilters:function(){var A=this.filterNode.getElementsByTagName("input");this.filters=new Object();var E=new Object();for(var G in this.filters){E[G]=true}for(var D=0;D<A.length;D++){var C=A[D].name;if(A[D].type=="radio"||A[D].type=="checkbox"){if(A[D].checked){this.filters[C]=A[D].value.strip()}}else{this.filters[C]=A[D].value.strip()}}var B=this.filterNode.getElementsByTagName("select");for(var D=0;D<B.length;D++){this.filters[B[D].name]=B[D].value.strip()}var F="";for(C in this.filters){if(!E[C]&&this.filters[C]!=""){F+="&"+C+"="+this.filters[C]}}delete E;return F},refreshContent:function(){var A=this.getFilters();if(A==this.table.filters){return }this.table.totalRows=-1;this.table.fetchedRows=new Array();this.table.filters=A;this.table.showRows(1,this.table.limit)}});var DynaTableGoogleFilter=Class.create({initialize:function(A){logMessage("Initializing google filter");if(A==null){logMessage("The calendar content is not available")}this.googleDocument=A;this.setupDone=false},setup:function(A){logMessage("setting up filter table");this.setupDone=true;this.table=A;this.attachEventHandlers()},getFilters:function(){logMessage("Retrieving filter value");var B=this.googleDocument.getElementById("currentDate1");var A="";if(B){A=B.innerHTML}return"&currentDate="+A},attachEventHandlers:function(){logMessage("Attaching to calendar events");var D=this.googleDocument.getElementById("todayButton1");var A=this.googleDocument.getElementById("navBack1");var C=this.googleDocument.getElementById("navForward1");var B=this.googleDocument.getElementById("dpPopup1");Event.observe(D,"mouseup",this.onDateChanged(this));Event.observe(A,"mouseup",this.onDateChanged(this));Event.observe(C,"mouseup",this.onDateChanged(this));Event.observe(B,"mouseup",this.onDateChanged(this));this.onDateChanged(this)},onDateChanged:function(A){logMessage("Date changed");return function(){A.refreshContent()}},refreshContent:function(){var A=this.getFilters();if(A==this.table.filters){logMessage("Skipping refresh");return }this.table.totalRows=-1;this.table.fetchedRows=new Array();this.table.filters=A;this.table.showRows(1,this.table.limit)},forceRefresh:function(){var A=this.getFilters();this.table.totalRows=-1;this.table.fetchedRows=new Array();this.table.filters=A;this.table.showRows(1,this.table.limit)}});function logMessage(A){try{if(console){console.log(A)}else{if(window.console){window.console.log(A)}}}catch(B){}}function invalidateRow(B,A){delete B.fetchedRows[A];if(B.totalRows<B.limit){B.showRows(B.lastoffset,B.totalRows)}else{B.showRows(B.lastoffset,B.limit)}}