// 1.0
if (typeof tonosamart === 'undefined'){
	var tonosamart = {};
}

/* Json
------------------- */
tonosamart.obj2Json = function(o){
	var ret;
	var buf = [];

	if (o === null) {
		ret = "null";
	}else{
		switch(o.constructor){
			case Boolean:
				ret = o.toString();
				break;
			case Number:
				if(isNaN(o) || !isFinite(o)){
					ret = "null";
				}else{
					ret = o.toString(10);
				}
				break;
			case String:
				ret = '"' + o.replace(/\\/g,'\\\\').replace(/"/g,'\\\"') + '"';
				break;
			case Array:
				for(var i = 0; i < o.length; ++i){
					buf.push(arguments.callee(o[i]));
				}
				ret = "[" + buf.join(",") + "]";
				break;
			case Object:
				for(var key in o){
					if(o.hasOwnProperty(key)){
						buf[buf.length] = arguments.callee(key) + ":" + arguments.callee(o[key]);
					}
				}
				ret = "{" + buf.join(",") + "}";
				break;
			default:
				ret = "null";
				break;
		}
	}
	return ret;
};

/* http://www.ietf.org/rfc/rfc4627.txt */
tonosamart.evalJson = function(text){
	var ret;

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

	return ret;
};
