/**
 * @author SimonDevil
 */


function toJsonString(o) {
	var UNDEFINED
	switch (typeof o) {
		case 'string': return '"' + encodeJS(o) + '"'
		case 'number': return String(o)
		case 'object':
			if(o) {
				var a = []
				if (o.constructor == Array) {
					for (var i = 0; i <o.length; i++) {
						var json = toJsonString(o[i])
						if(json != UNDEFINED) a[a.length] = json
			  }
					return '[' + a.join(',') + ']'
				} else if (o.constructor == Date) {
					return 'new Date(' + o.getTime() + ')'
				} else {
					for (var p in o) {
						var json = toJsonString(o[p])
						if (json != UNDEFINED) a[a.length] = (/^[A-Za-z_]\w*$/.test(p) ? ('"' + p + '":') : ('"' + encodeJS(p) + '":')) + json
					}
					return '{' + a.join(',') + '}'
				}
			}
			return 'null'
		case 'boolean'  : return String(o)
		case 'function' : return
		case 'undefined': return 'null'
	}
}
function encodeJS(s){ return (!/[\x00-\x19\'\\]/.test(s)) ? s : s.replace(/([\\'])/g, '\\$1').replace(/\r/g, '\\r').replace(/\n/g, '\\n').replace(/\t/g, '\\t').replace(/[\x00-\x19]/g, '');}