 			return NOT_A_NUMBER;
 		}
 		
+		/**
+		 * Preserves primitive values not supported by JSON: undefined, NaN, Infinity, -Infinity
+		 */
 		private static function _jsonReviver(key:String, value:*):*
 		{
 			if (value === NOT_A_NUMBER)

				code = JS_var_this(thisVar) + '\nreturn (function(){\n' + code + '}).apply(' + thisVar + ');';
			}
			
			
			// concatenate all code inside a function wrapper
			code = 'function(' + pNames.join(',') + '){\n' + code + '}';
			
			// if there are no parameters, just run the code
			if (pNames.length == 0)
				return ExternalInterface.call(code);
			
			// call the function with the specified parameters
			pValues.unshift(code);
			return ExternalInterface.call.apply(null, pValues);
		}

		private static const UNDEFINED:String = undefined + JSON_SUFFIX;
		private static const INFINITY:String = Infinity + JSON_SUFFIX;
		private static const NEGATIVE_INFINITY:String = -Infinity + JSON_SUFFIX;
		
		/**
		 * Initializes json variable and required external JSON interface.
		 */
		private static function initialize():void
		{
			// one-time initialization attempt
