docs: function parseData(data, mode) {
      	    var parsed = '';
      	    var parameters = data.split(/\n/);
      	    var regPlaceHolder = /(\{\d+\})/g;
      	    var regRepPlaceHolder = /\{(\d+)\}/g;
      	    var unicodeRE = /(\\u.{4})/ig;
              var i = 0, l = parameters.length;
      	    for (i = 0; i < l; i++) {
      		parameters[i] = parameters[i].replace(/^\s\s*/, '').replace(/\s\s*$/, ''); // trim
      		if (parameters[i].length > 0 && parameters[i].match("^#") != "#") { // skip
      										    // comments
      		    var pair = parameters[i].split('=');
      		    if (pair.length > 0) {
      			/** Process key & value */
      			var name = unescape(pair[0]).replace(/^\s\s*/, '').replace(/\s\s*$/, ''); // trim
      			var value = pair.length == 1 ? "" : pair[1];
      			// process multi-line values
      			while (value.match(/\\$/) == "\\") {
      			    value = value.substring(0, value.length - 1);
      			    value += parameters[++i].replace(/\s\s*$/, ''); // right
      									    // trim
      			}
      			// Put values with embedded '='s back together
      			for (var s = 2; s < pair.length; s++) {
      			    value += '=' + pair[s];
      			}
      			value = value.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); // trim
  
      			/** Mode: bundle keys in a map */
      			if (mode == 'map' || mode == 'both') {
      			    // handle unicode chars possibly left out
      			    var unicodeMatches = value.match(unicodeRE);
      			    if (unicodeMatches) {
      				for (var u = 0; u < unicodeMatches.length; u++) {
      				    value = value.replace(unicodeMatches[u], unescapeUnicode(unicodeMatches[u]));
      				}
      			    }
      			    // add to map
      			    i18n.map[name] = value;
      			}
  
      			/* Mode: bundle keys as vars/functions */
      			if (mode == 'vars' || mode == 'both') {
      			    value = value.replace(/"/g, '\\"'); // escape quotation mark
  
      			    // make sure namespaced key exists (eg, some.key')
      			    checkKeyNamespace(name);
  
      			    // value with variable substitutions
      			    if (regPlaceHolder.test(value)) {
      				var parts = value.split(regPlaceHolder);
      				// process function args
      				var first = true;
      				var fnArgs = '';
      				var usedArgs = [];
      				for (var p = 0; p < parts.length; p++) {
      				    if (regPlaceHolder.test(parts[p]) && (usedArgs.length === 0 || usedArgs.indexOf(parts[p]) === -1)) {
      					if (!first) {
      					    fnArgs += ',';
      					}
      					fnArgs += parts[p].replace(regRepPlaceHolder, 'v$1');
      					usedArgs.push(parts[p]);
      					first = false;
      				    }
      				}
      				parsed += name + '=function(' + fnArgs + '){';
      				// process function body
      				var fnExpr = '"' + value.replace(regRepPlaceHolder, '"+v$1+"') + '"';
      				parsed += 'return ' + fnExpr + ';' + '};';
  
      				// simple value
      			    } else {
      				parsed += name + '="' + value + '";';
      			    }
      			} // END: Mode: bundle keys as vars/functions
      		    } // END: if(pair.length > 0)
      		} // END: skip comments
      	    }
      	    //eval(parsed);
              /* TODO: refactor */
      	}