docs: function(p, style) {
  		var i, o, s, b, sticy, suid, sgid, str, oct;
  		
  		if (!style) {
  			style = this.options.fileModeStyle.toLowerCase();
  		}
  		p = $.trim(p);
  		if (p.match(/[rwxs-]{9}$/i)) {
  			str = p = p.substr(-9);
  			if (style == 'string') {
  				return str;
  			}
  			oct = '';
  			s = 0;
  			for (i=0; i<7; i=i+3) {
  				o = p.substr(i, 3);
  				b = 0;
  				if (o.match(/[r]/i)) {
  					b += 4;
  				}
  				if (o.match(/[w]/i)) {
  					b += 2;
  				}
  				if (o.match(/[xs]/i)) {
  					if (o.match(/[xs]/)) {
  						b += 1;
  					}
  					if (o.match(/[s]/i)) {
  						if (i == 0) {
  							s += 4;
  						} else if (i == 3) {
  							s += 2;
  						}
  					}
  				}
  				oct += b.toString(8);
  			}
  			if (s) {
  				oct = s.toString(8) + oct;
  			}
  		} else {
  			p = parseInt(p, 8);
  			oct = p? p.toString(8) : '';
  			if (!p || style == 'octal') {
  				return oct;
  			}
  			o = p.toString(8);
  			s = 0;
  			if (o.length > 3) {
  				o = o.substr(-4);
  				s = parseInt(o.substr(0, 1), 8);
  				o = o.substr(1);
  			}
  			sticy = ((s & 1) == 1); // not support
  			sgid = ((s & 2) == 2);
  			suid = ((s & 4) == 4);
  			str = '';
  			for(i=0; i<3; i++) {
  				if ((parseInt(o.substr(i, 1), 8) & 4) == 4) {
  					str += 'r';
  				} else {
  					str += '-';
  				}
  				if ((parseInt(o.substr(i, 1), 8) & 2) == 2) {
  					str += 'w';
  				} else {
  					str += '-';
  				}
  				if ((parseInt(o.substr(i, 1), 8) & 1) == 1) {
  					str += ((i==0 && suid)||(i==1 && sgid))? 's' : 'x';
  				} else {
  					str += '-';
  				}
  			}
  		}
  		if (style == 'both') {
  			return str + ' (' + oct + ')';
  		} else if (style == 'string') {
  			return str;
  		} else {
  			return oct;
  		}
  	}