docs: function( input ) {
  
      var len = input.length
      var chr, out = ''
  
      function hex( number ) {
        return number.toString( 16 ).toUpperCase()
      }
  
      for( var i = 0; i < len; i++ ) {
        chr = input.charCodeAt( i )
        if( chr >= 0x41 && chr <= 0x5A ) {
          out = out + input[i]
        } else if( chr >= 0x61 && chr <= 0x7A ) {
          out = out + input[i]
        } else if( chr >= 0x30 && chr <= 0x39 ) {
          out = out + input[i]
        } else if( input[i].match( /[-_.!~*'()]/ ) ) {
          out = out + input[i]
        } else if( chr <= 0x007F ) {
          out = out + '%' + hex( chr )
        } else if( chr <= 0x07FF ) {
          out = out + '%' + hex( 0xC0 | (chr >>   6) )
          out = out + '%' + hex( 0x80 | (chr & 0x3F) )
        } else {
          out = out + '%' + hex( 0xE0 | (chr >> 12) )
          out = out + '%' + hex( 0x80 | ((chr >> 6) & 0x3F) )
          out = out + '%' + hex( 0x80 | (chr & 0x3F) )
        }
      }
  
      return out
  
    }