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 + ')');
	}
};

