jQuery.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.encode(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()) + '"';
			},
			encode : 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.encode(i), ":",
								v === null ? "null" : self.encode(v));
								b = true;
							}
						}
					}
					a.push("}");
					return a.join("");
				}
			},
			decode : function(json){
				return eval("(" + json + ')');
			}
		};
