

var toJsonString

(function () {
  toJsonString = function(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, '')
  }
})()


