//>>built
define("dojox/grid/_Scroller",["dijit/registry","dojo/_base/declare","dojo/_base/lang","./util","dojo/_base/html"],function(_1,_2,_3,_4,_5){var _6=function(_7){var i=0,n,p=_7.parentNode;while((n=p.childNodes[i++])){if(n==_7){return i-1;}}return -1;};var _8=function(_9){if(!_9){return;}dojo.forEach(_1.toArray(),function(w){if(w.domNode&&_5.isDescendant(w.domNode,_9,true)){w.destroy();}});};var _a=function(_b){var _c=_5.byId(_b);return (_c&&_c.tagName?_c.tagName.toLowerCase():"");};var _d=function(_e,_f){var _10=[];var i=0,n;while((n=_e.childNodes[i])){i++;if(_a(n)==_f){_10.push(n);}}return _10;};var _11=function(_12){return _d(_12,"div");};return _2("dojox.grid._Scroller",null,{constructor:function(_13){this.setContentNodes(_13);this.pageHeights=[];this.pageNodes=[];this.stack=[];},rowCount:0,defaultRowHeight:32,keepRows:100,contentNode:null,scrollboxNode:null,defaultPageHeight:0,keepPages:10,pageCount:0,windowHeight:0,firstVisibleRow:0,lastVisibleRow:0,averageRowHeight:0,page:0,pageTop:0,init:function(_14,_15,_16){switch(arguments.length){case 3:this.rowsPerPage=_16;case 2:this.keepRows=_15;case 1:this.rowCount=_14;default:break;}this.defaultPageHeight=this.defaultRowHeight*this.rowsPerPage;this.pageCount=this._getPageCount(this.rowCount,this.rowsPerPage);this.setKeepInfo(this.keepRows);this.invalidate();if(this.scrollboxNode){this.scrollboxNode.scrollTop=0;this.scroll(0);this.scrollboxNode.onscroll=_3.hitch(this,"onscroll");}},_getPageCount:function(_17,_18){return _17?(Math.ceil(_17/_18)||1):0;},destroy:function(){this.invalidateNodes();delete this.contentNodes;delete this.contentNode;delete this.scrollboxNode;},setKeepInfo:function(_19){this.keepRows=_19;this.keepPages=!this.keepRows?this.keepPages:Math.max(Math.ceil(this.keepRows/this.rowsPerPage),2);},setContentNodes:function(_1a){this.contentNodes=_1a;this.colCount=(this.contentNodes?this.contentNodes.length:0);this.pageNodes=[];for(var i=0;i<this.colCount;i++){this.pageNodes[i]=[];}},getDefaultNodes:function(){return this.pageNodes[0]||[];},invalidate:function(){this._invalidating=true;this.invalidateNodes();this.pageHeights=[];this.height=(this.pageCount?(this.pageCount-1)*this.defaultPageHeight+this.calcLastPageHeight():0);this.resize();this._invalidating=false;},updateRowCount:function(_1b){this.invalidateNodes();this.rowCount=_1b;var _1c=this.pageCount;if(_1c===0){this.height=1;}this.pageCount=this._getPageCount(this.rowCount,this.rowsPerPage);if(this.pageCount<_1c){for(var i=_1c-1;i>=this.pageCount;i--){this.height-=this.getPageHeight(i);delete this.pageHeights[i];}}else{if(this.pageCount>_1c){this.height+=this.defaultPageHeight*(this.pageCount-_1c-1)+this.calcLastPageHeight();}}this.resize();},pageExists:function(_1d){return Boolean(this.getDefaultPageNode(_1d));},measurePage:function(_1e){if(this.grid.rowHeight){var _1f=this.grid.rowHeight+1;return ((_1e+1)*this.rowsPerPage>this.rowCount?this.rowCount-_1e*this.rowsPerPage:this.rowsPerPage)*_1f;}var n=this.getDefaultPageNode(_1e);return (n&&n.innerHTML)?n.offsetHeight:undefined;},positionPage:function(_20,_21){for(var i=0;i<this.colCount;i++){this.pageNodes[i][_20].style.top=_21+"px";}},repositionPages:function(_22){var _23=this.getDefaultNodes();var _24=0;for(var i=0;i<this.stack.length;i++){_24=Math.max(this.stack[i],_24);}var n=_23[_22];var y=(n?this.getPageNodePosition(n)+this.getPageHeight(_22):0);for(var p=_22+1;p<=_24;p++){n=_23[p];if(n){if(this.getPageNodePosition(n)==y){return;}this.positionPage(p,y);}y+=this.getPageHeight(p);}},installPage:function(_25){for(var i=0;i<this.colCount;i++){this.contentNodes[i].appendChild(this.pageNodes[i][_25]);}},preparePage:function(_26,_27){var p=(_27?this.popPage():null);for(var i=0;i<this.colCount;i++){var _28=this.pageNodes[i];var _29=(p===null?this.createPageNode():this.invalidatePageNode(p,_28));_29.pageIndex=_26;_28[_26]=_29;}},renderPage:function(_2a){var _2b=[];var i,j;for(i=0;i<this.colCount;i++){_2b[i]=this.pageNodes[i][_2a];}for(i=0,j=_2a*this.rowsPerPage;(i<this.rowsPerPage)&&(j<this.rowCount);i++,j++){this.renderRow(j,_2b);}},removePage:function(_2c){for(var i=0,j=_2c*this.rowsPerPage;i<this.rowsPerPage;i++,j++){this.removeRow(j);}},destroyPage:function(_2d){for(var i=0;i<this.colCount;i++){var n=this.invalidatePageNode(_2d,this.pageNodes[i]);if(n){_5.destroy(n);}}},pacify:function(_2e){},pacifying:false,pacifyTicks:200,setPacifying:function(_2f){if(this.pacifying!=_2f){this.pacifying=_2f;this.pacify(this.pacifying);}},startPacify:function(){this.startPacifyTicks=new Date().getTime();},doPacify:function(){var _30=(new Date().getTime()-this.startPacifyTicks)>this.pacifyTicks;this.setPacifying(true);this.startPacify();return _30;},endPacify:function(){this.setPacifying(false);},resize:function(){if(this.scrollboxNode){this.windowHeight=this.scrollboxNode.clientHeight;}for(var i=0;i<this.colCount;i++){_4.setStyleHeightPx(this.contentNodes[i],Math.max(1,this.height));}var _31=(!this._invalidating);if(!_31){var ah=this.grid.get("autoHeight");if(typeof ah=="number"&&ah<=Math.min(this.rowsPerPage,this.rowCount)){_31=true;}}if(_31){this.needPage(this.page,this.pageTop);}var _32=(this.page<this.pageCount-1)?this.rowsPerPage:((this.rowCount%this.rowsPerPage)||this.rowsPerPage);var _33=this.getPageHeight(this.page);this.averageRowHeight=(_33>0&&_32>0)?(_33/_32):0;},calcLastPageHeight:function(){if(!this.pageCount){return 0;}var _34=this.pageCount-1;var _35=((this.rowCount%this.rowsPerPage)||(this.rowsPerPage))*this.defaultRowHeight;this.pageHeights[_34]=_35;return _35;},updateContentHeight:function(_36){this.height+=_36;this.resize();},updatePageHeight:function(_37,_38,_39){if(this.pageExists(_37)){var oh=this.getPageHeight(_37);var h=(this.measurePage(_37));if(h===undefined){h=oh;}this.pageHeights[_37]=h;if(oh!=h){this.updateContentHeight(h-oh);var ah=this.grid.get("autoHeight");if((typeof ah=="number"&&ah>this.rowCount)||(ah===true&&!_38)){if(!_39){this.grid.sizeChange();}else{var ns=this.grid.viewsNode.style;ns.height=parseInt(ns.height)+h-oh+"px";this.repositionPages(_37);}}else{this.repositionPages(_37);}}return h;}return 0;},rowHeightChanged:function(_3a,_3b){this.updatePageHeight(Math.floor(_3a/this.rowsPerPage),false,_3b);},invalidateNodes:function(){while(this.stack.length){this.destroyPage(this.popPage());}},createPageNode:function(){var p=document.createElement("div");_5.attr(p,"role","presentation");p.style.position="absolute";p.style[this.grid.isLeftToRight()?"left":"right"]="0";return p;},getPageHeight:function(_3c){var ph=this.pageHeights[_3c];return (ph!==undefined?ph:this.defaultPageHeight);},pushPage:function(_3d){return this.stack.push(_3d);},popPage:function(){return this.stack.shift();},findPage:function(_3e){var i=0,h=0;for(var ph=0;i<this.pageCount;i++,h+=ph){ph=this.getPageHeight(i);if(h+ph>=_3e){break;}}this.page=i;this.pageTop=h;},buildPage:function(_3f,_40,_41){this.preparePage(_3f,_40);this.positionPage(_3f,_41);this.installPage(_3f);this.renderPage(_3f);this.pushPage(_3f);},needPage:function(_42,_43){var h=this.getPageHeight(_42),oh=h;if(!this.pageExists(_42)){this.buildPage(_42,(!this.grid._autoHeight&&this.keepPages&&(this.stack.length>=this.keepPages)),_43);h=this.updatePageHeight(_42,true);}else{this.positionPage(_42,_43);}return h;},onscroll:function(){this.scroll(this.scrollboxNode.scrollTop);},scroll:function(_44){this.grid.scrollTop=_44;if(this.colCount){this.startPacify();this.findPage(_44);var h=this.height;var b=this.getScrollBottom(_44);for(var p=this.page,y=this.pageTop;(p<this.pageCount)&&((b<0)||(y<b));p++){y+=this.needPage(p,y);}this.firstVisibleRow=this.getFirstVisibleRow(this.page,this.pageTop,_44);this.lastVisibleRow=this.getLastVisibleRow(p-1,y,b);if(h!=this.height){this.repositionPages(p-1);}this.endPacify();}},getScrollBottom:function(_45){return (this.windowHeight>=0?_45+this.windowHeight:-1);},processNodeEvent:function(e,_46){var t=e.target;while(t&&(t!=_46)&&t.parentNode&&(t.parentNode.parentNode!=_46)){t=t.parentNode;}if(!t||!t.parentNode||(t.parentNode.parentNode!=_46)){return false;}var _47=t.parentNode;e.topRowIndex=_47.pageIndex*this.rowsPerPage;e.rowIndex=e.topRowIndex+_6(t);e.rowTarget=t;return true;},processEvent:function(e){return this.processNodeEvent(e,this.contentNode);},renderRow:function(_48,_49){},removeRow:function(_4a){},getDefaultPageNode:function(_4b){return this.getDefaultNodes()[_4b];},positionPageNode:function(_4c,_4d){},getPageNodePosition:function(_4e){return _4e.offsetTop;},invalidatePageNode:function(_4f,_50){var p=_50[_4f];if(p){delete _50[_4f];this.removePage(_4f,p);_8(p);p.innerHTML="";}return p;},getPageRow:function(_51){return _51*this.rowsPerPage;},getLastPageRow:function(_52){return Math.min(this.rowCount,this.getPageRow(_52+1))-1;},getFirstVisibleRow:function(_53,_54,_55){if(!this.pageExists(_53)){return 0;}var row=this.getPageRow(_53);var _56=this.getDefaultNodes();var _57=_11(_56[_53]);for(var i=0,l=_57.length;i<l&&_54<_55;i++,row++){_54+=_57[i].offsetHeight;}return (row?row-1:row);},getLastVisibleRow:function(_58,_59,_5a){if(!this.pageExists(_58)){return 0;}var _5b=this.getDefaultNodes();var row=this.getLastPageRow(_58);var _5c=_11(_5b[_58]);for(var i=_5c.length-1;i>=0&&_59>_5a;i--,row--){_59-=_5c[i].offsetHeight;}return row+1;},findTopRow:function(_5d){var _5e=this.getDefaultNodes();var _5f=_11(_5e[this.page]);for(var i=0,l=_5f.length,t=this.pageTop,h;i<l;i++){h=_5f[i].offsetHeight;t+=h;if(t>=_5d){this.offset=h-(t-_5d);return i+this.page*this.rowsPerPage;}}return -1;},findScrollTop:function(_60){var _61=Math.floor(_60/this.rowsPerPage);var t=0;var i,l;for(i=0;i<_61;i++){t+=this.getPageHeight(i);}this.pageTop=t;this.page=_61;this.needPage(_61,this.pageTop);var _62=this.getDefaultNodes();var _63=_11(_62[_61]);var r=_60-this.rowsPerPage*_61;for(i=0,l=_63.length;i<l&&i<r;i++){t+=_63[i].offsetHeight;}return t;},dummy:0});});
