docs: function(data) {
  
      var _mode = QRMode.MODE_8BIT_BYTE;
      var _data = data;
      var _parsedData = [];
  
      var _this = {};
  
  
      // Added to support UTF-8 Characters
      for (var i = 0, l = _data.length; i < l; i++) {
  	var byteArray = [];
  	var code = _data.charCodeAt(i);
  
  	if (code > 0x10000) {
  	    byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);
  	    byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);
  	    byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);
  	    byteArray[3] = 0x80 | (code & 0x3F);
  	} else if (code > 0x800) {
  	    byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);
  	    byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);
  	    byteArray[2] = 0x80 | (code & 0x3F);
  	} else if (code > 0x80) {
  	    byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);
  	    byteArray[1] = 0x80 | (code & 0x3F);
  	} else {
  	    byteArray[0] = code;
  	}
  
          // Fix Unicode corruption bug
          _parsedData.push(byteArray);
      }
  
      _parsedData = Array.prototype.concat.apply([], _parsedData);
  
      if (_parsedData.length != _data.length) {
  	_parsedData.unshift(191);
  	_parsedData.unshift(187);
  	_parsedData.unshift(239);
      }
  
      var _bytes = _parsedData;
  
      _this.getMode = function() {
  	return _mode;
      };
  
      _this.getLength = function(buffer) {
  	return _bytes.length;
      };
  
      _this.write = function(buffer) {
  	for (var i = 0; i < _bytes.length; i += 1) {
  	    buffer.put(_bytes[i], 8);
  	}
      };
  
      return _this;
  }