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 'string':
	return '"' + arg.replace (/(["\\])/g, '\\$1') + '" '; //']));
  case 'unknown':
  case 'undefined':
  case 'function':
	return u;
  default:
	return String (arg);
  }
}

function json_decode (str) {
  var n;
  try {
    eval ("n=" + str);
  } catch (e) {
    if (typeof debuglog != 'undefined') debuglog (str);
  }
  return n;
}

