
if( typeof JSON == 'undefined' ) {

	JSON = {
		useHasOwn : ({}.hasOwnProperty ? true : false),
		pad : function(n) {
			return n < 10 ? "0" + n : n;
		},
		m : {
			"\b": '\\b',
			"\t": '\\t',
			"\n": '\\n',
			"\f": '\\f',
			"\r": '\\r',
			'"' : '\\"',
			"\\": '\\\\'
		},
		encodeString : function(s){
			if (/["\\\x00-\x1f]/.test(s)) {
				return '"' + s.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 '"' + s + '"';
		},
		encodeArray : function(o){
			var a = ["["], b, i, l = o.length, v;
			for (i = 0; i < l; i += 1) {
				v = o[i];
				switch (typeof v) {
					case "undefined":
					case "function":
					case "unknown":
						break;
					default:
						if (b) {
							a.push(',');
						}
						a.push(v === null ? "null" : this.stringify(v));
						b = true;
				}
			}
			a.push("]");
			return a.join("");
		},
		encodeDate : function(o){
			return '"' + o.getFullYear() + "-" +
				pad(o.getMonth() + 1) + "-" +
				pad(o.getDate()) + "T" +
				pad(o.getHours()) + ":" +
				pad(o.getMinutes()) + ":" +
				pad(o.getSeconds()) + '"';
		},
		stringify : function(o){
			if(typeof o == "undefined" || o === null){
				return "null";
			}else if(o instanceof Array){
				return this.encodeArray(o);
			}else if(o instanceof Date){
				return this.encodeDate(o);
			}else if(typeof o == "string"){
				return this.encodeString(o);
			}else if(typeof o == "number"){
				return isFinite(o) ? String(o) : "null";
			}else if(typeof o == "boolean"){
				return String(o);
			}else {
				var self = this;
				var a = ["{"], b, i, v;
				for (i in o) {
					if(!this.useHasOwn || o.hasOwnProperty(i)) {
						v = o[i];
						switch (typeof v) {
							case "undefined":
							case "function":
							case "unknown":
								break;
							default:
								if(b){
									a.push(',');
								}
								a.push(self.stringify(i), ":", v === null ? "null" : self.stringify(v));
								b = true;
						}
					}
				}
				a.push("}");
				return a.join("");
			}
		},
		parse : function(json){
			return eval("(" + json + ')');
		}
	};
	
}

