function JSON() {
}

(function(){
  
  var m = {
    '\b': '\\b',
    '\t': '\\t',
    '\n': '\\n',
    '\f': '\\f',
    '\r': '\\r',
    '"' : '\\"',
    '\\': '\\\\'
  },
  
  s = {
    
    array: function(x){
      var a = ['['], b, f, i, l = x.length, v;
      for(i = 0; i < l; i += 1){
        
        v = x[i];
        f = s[typeof v];
        
        if(f){
          
          v = f(v);
          
          if(typeof v == 'string'){
            if(b){
              a[a.length] = ',';
            }
            
            a[a.length] = v;
            b = true;
          }
        }
      }
      
      a[a.length] = ']';
      return a.join('');
    },
    
    'boolean': function(x){
      return String(x);
    },
    
    'null': function(x){
      return "null";
    },
    
    number: function(x){
      return isFinite(x) ? String(x) : 'null';
    },
    
    object: function(x){
      
      if(x){
        
        if(x instanceof Array){return s.array(x);}
        var a = ['{'], b, f, i, v;
        
        for(i in x){
          
          v = x[i];
          f = s[typeof v];
          
          if(f){
            
            v = f(v);
            
            if(typeof v == 'string'){
              if(b){a[a.length] = ',';}
              a.push(s.string(i), ':', v);
              b = true;
            }
          }
        }
        
        a[a.length] = '}';
        return a.join('');
      }
      return 'null';
    },

    string: function(x){
      
      if(/["\\\x00-\x1f]/.test(x)){
        x = x.replace(/([\x00-\x1f\\"])/g, function(a, b){
            var c = m[b];
            if(c){return c;}
            c = b.charCodeAt();
            return '\\u00' +
            Math.floor(c / 16).toString(16) +
            (c % 16).toString(16);
        });
      }
      return '"' + x + '"';
    }
  };


  JSON.prototype.toJSONString = function(x){
    if(x instanceof Object){
      return s.object(x);
    } else if(x instanceof Array){
      return s.array(x);
    }
  };

})();


String.prototype.parseJSON = function(){
  try {
    return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
    this.replace(/"(\\.|[^"\\])*"/g, ''))) &&
    eval('(' + this + ')');
  } catch (e) {
    return false;
  }
};