docs: function(init, recnt) {
  				var firstNode = (list? cwd.find('tbody:first') : cwd).children('[id]:first');
  				if (!firstNode.length) {
  					return;
  				}
  				var selectable = cwd.data('selectable'),
  					rec = (function() {
  						var wos = wrapper.offset(),
  							w = $(window),
  							x = firstNode.width() / 2,
  							l = wos.left - w.scrollLeft() + (fm.direction === 'ltr'? x : wrapper.width() - x),
  							t = wos.top - w.scrollTop() + 10 + (list? bufferExt.itemH || (fm.UA.Touch? 36 : 24) : 0);
  						return {left: Math.max(0, Math.round(l)), top: Math.max(0, Math.round(t))};
  					})(),
  					tgt = init? firstNode : $(document.elementFromPoint(rec.left , rec.top)),
  					ids = {},
  					tmbs = {},
  					multi = 5,
  					cnt = Math.ceil((bufferExt.hpi? Math.ceil((wz.data('rectangle').height / bufferExt.hpi) * 1.5) : showFiles) / multi),
  					chk = function() {
  						var id, hash, file, i;
  						for (i = 0; i < multi; i++) {
  							id = tgt.attr('id');
  							if (id) {
  								bufferExt.getTmbs = [];
  								hash = fm.cwdId2Hash(id);
  								inViewHashes[hash] = id;
  								// for tmbs
  								if (bufferExt.attachTmbs[hash]) {
  									tmbs[hash] = bufferExt.attachTmbs[hash];
  								}
  								// for selectable
  								selectable && (ids[id] = true);
  							}
  							// next node
  							tgt = tgt.next();
  							if (!tgt.length) {
  								break;
  							}
  						}
  					},
  					done = function() {
  						var idsArr;
  						if (cwd.data('selectable')) {
  							Object.assign(ids, selectedFiles);
  							idsArr = Object.keys(ids);
  							if (idsArr.length) {
  								selectableOption.filter = '#'+idsArr.join(', #');
  								cwd.selectable('enable').selectable('option', {filter : selectableOption.filter}).selectable('refresh');
  							}
  						}
  						if (Object.keys(tmbs).length) {
  							bufferExt.getTmbs = [];
  							attachThumbnails(tmbs);
  						}
  					},
  					setTarget = function() {
  						if (!tgt.hasClass(clFile)) {
  							tgt = tgt.closest(fileSelector);
  						}
  					},
  					arr, widget;
  				
  				inViewHashes = {};
  				selectable && cwd.selectable('option', 'disabled');
  				
  				if (tgt.length) {
  					if (!tgt.hasClass(clFile) && !tgt.closest(fileSelector).length) {
  						// dialog, serach button etc.
  						widget = fm.getUI().find('.ui-dialog:visible,.ui-widget:visible');
  						if (widget.length) {
  							widget.hide();
  							tgt = $(document.elementFromPoint(rec.left , rec.top));
  							widget.show();
  						} else {
  							widget = null;
  						}
  					}
  					setTarget();
  					if (!tgt.length) {
  						// try search 5px down
  						widget && widget.hide();
  						tgt = $(document.elementFromPoint(rec.left , rec.top + 5));
  						widget && widget.show();
  						setTarget();
  					}
  				}
  
  				if (tgt.length) {
  					if (tgt.attr('id')) {
  						if (init) {
  							for (var i = 0; i < cnt; i++) {
  								chk();
  								if (! tgt.length) {
  									break;
  								}
  							}
  							done();
  						} else {
  							bufferExt.repaintJob && bufferExt.repaintJob.state() === 'pending' && bufferExt.repaintJob.reject();
  							arr = new Array(cnt);
  							bufferExt.repaintJob = fm.asyncJob(function() {
  								chk();
  								if (! tgt.length) {
  									done();
  									bufferExt.repaintJob && bufferExt.repaintJob.state() === 'pending' && bufferExt.repaintJob.reject();
  								}
  							}, arr).done(done);
  						}
  					}
  				} else if (init && bufferExt.renderd) {
  					// In initial request, cwd DOM not renderd so doing lazy check
  					recnt = recnt || 0;
  					if (recnt < 10) { // Prevent infinite loop
  						requestAnimationFrame(function() {
  							wrapperRepaint(init, ++recnt);
  						});
  					}
  				}
  			}