function json_encode(arg){
  var i, o, u, v;
  switch (typeof arg) {
  case 'object':
    if (!arg) return null;
    if (arg.constructor == Array) {
      o = [];
      for (i = 0; i < arg.length; ++i) {
        v = json_encode(arg[i]);
        o .push( (v !== u)? v: 'null' );
      }
      return '[' + o.join(',') + ']';
    }
    if (typeof arg.toString != 'undefined') {
      o = [];
      for (i in arg) {
        v = json_encode(arg[i]);
        if (v !== u) o.push( json_encode(i) + ':' + v );
      }
      return '{' + o.join(',') + '}';
    }
    return;
  case 'unknown':case 'undefined':case 'function': return u;
  case 'string':return '"' + arg.replace(/(["\\])/g, '\\$1') + '"'; //' ]));
  default:return String(arg);
  }
}
function json_decode(str){
  var n;
  try{
    eval("n="+str);
  }catch (e){
    if( typeof debuglog != 'undefined' ) debuglog( str );
  }
  return n;
}
