docs: function(keyCode, append) {
  				var code     = $.ui.keyCode,
  					prev     = keyCode == code.LEFT || keyCode == code.UP,
  					sel      = cwd.find('[id].'+clSelected),
  					selector = prev ? 'first:' : 'last',
  					s, n, sib, top, left;
  
  				function sibling(n, direction) {
  					return n[direction+'All']('[id]:not(.'+clDisabled+'):not(.elfinder-cwd-parent):first');
  				}
  				
  				if (sel.length) {
  					s = sel.filter(prev ? ':first' : ':last');
  					sib = sibling(s, prev ? 'prev' : 'next');
  					
  					if (!sib.length) {
  						// there is no sibling on required side - do not move selection
  						n = s;
  					} else if (list || keyCode == code.LEFT || keyCode == code.RIGHT) {
  						// find real prevoius file
  						n = sib;
  					} else {
  						// find up/down side file in icons view
  						top = s.position().top;
  						left = s.position().left;
  
  						n = s;
  						if (prev) {
  							do {
  								n = n.prev('[id]');
  							} while (n.length && !(n.position().top < top && n.position().left <= left));
  
  							if (n.hasClass(clDisabled)) {
  								n = sibling(n, 'next');
  							}
  						} else {
  							do {
  								n = n.next('[id]');
  							} while (n.length && !(n.position().top > top && n.position().left >= left));
  							
  							if (n.hasClass(clDisabled)) {
  								n = sibling(n, 'prev');
  							}
  							// there is row before last one - select last file
  							if (!n.length) {
  								sib = cwd.find('[id]:not(.'+clDisabled+'):last');
  								if (sib.position().top > top) {
  									n = sib;
  								}
  							}
  						}
  					}
  					// !append && unselectAll();
  				} else {
  					if (selectedNext.length) {
  						n = prev? selectedNext.prev() : selectedNext;
  					} else {
  						// there are no selected file - select first/last one
  						n = cwd.find('[id]:not(.'+clDisabled+'):not(.elfinder-cwd-parent):'+(prev ? 'last' : 'first'));
  					}
  				}
  				
  				if (n && n.length && !n.hasClass('elfinder-cwd-parent')) {
  					if (s && append) {
  						// append new files to selected
  						n = s.add(s[prev ? 'prevUntil' : 'nextUntil']('#'+n.attr('id'))).add(n);
  					} else {
  						// unselect selected files
  						sel.trigger(evtUnselect);
  					}
  					// select file(s)
  					n.trigger(evtSelect);
  					// set its visible
  					scrollToView(n.filter(prev ? ':first' : ':last'));
  					// update cache/view
  					trigger();
  				}
  			}