// JavaScript Document
window.jsonParse = function()
{
	var r="(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)";
	var k='(?:[^\\0-\\x08\\x0a-\\x1f"\\\\]|\\\\(?:["/\\\\bfnrt]|u[0-9A-Fa-f]{4}))';
	k='(?:"'+k+'*")';
	var s = new RegExp("(?:false|true|null|[\\{\\}\\[\\]]|"+r+"|"+k+")","g");
	var t = new RegExp("\\\\(?:([^u])|u(.{4}))","g");
	var u = {'"':'"',"/":"/","\\":"\\",b:"\u0008",f:"\u000c",n:"\n",r:"\r",t:"\t"};
	
	function v(h,j,e)
	{
		return j?u[j]:String.fromCharCode(parseInt(e,16))
	}

	var w = new String("");
	var x = Object.hasOwnProperty;
	return function(h,j)
	{
		h=h.match(s);
		var c = h[0];
		var e = h[0];		
		var l = false;
		if("{"===c)
			e={};
		else if("["===c)
			e=[];
		else
		{
			e=[];
			l=true;
		}
		for(var b,d=[e],m=1-l,y=h.length;m<y;++m)
		{
			c=h[m];
			var a;
			switch(c.charCodeAt(0))
			{
				default:
					a=d[0];
					a[b||a.length]=+c;
					b=void 0;
					break;
				case 34:
					c=c.substring(1,c.length-1);
					if(c.indexOf("\\")!==-1)
						c=c.replace(t,v);
					a=d[0];
					if(!b)
						if(a instanceof Array)
							b=a.length;
						else
						{
							b=c||w;
							break;
						}
					a[b]=c;
					b=void 0;
					break;
				case 91:
					a=d[0];
					d.unshift(a[b||a.length]=[]);
					b=void 0;
					break;
				case 93:
					d.shift();
					break;
				case 102:
					a=d[0];
					a[b||a.length]=false;
					b=void 0;
					break;
				case 110:
					a=d[0];
					a[b||a.length]=null;
					b=void 0;
					break;
				case 116:
					a=d[0];
					a[b||a.length]=true;
					b=void 0;
					break;
				case 123:
					a=d[0];
					d.unshift(a[b||a.length]={});
					b=void 0;
					break;
				case 125:
					d.shift();
					break
			}
		}
		if(l)
		{
			if(d.length!==1)
				throw new Error;
			e=e[0]
		}
		else if(d.length)
			throw new Error;
		if(j)
		{
			var p=function(n,o)
			{
				var f=n[o];
				if(f&&typeof f==="object")
				{
					var i=null;
					for(var g in f)
						if(x.call(f,g)&&f!==n)
						{
							var q=p(f,g);
							if(q!==void 0)
								f[g]=q;
							else
							{
								i||(i=[]);
								i.push(g);
							}
						}
					if(i)
						for(g=i.length;--g>=0;)
							delete f[i[g]];
				}
				return j.call(n,o,f);
			};
			e=p({"":e},"");
		}
		return e;
	}
}();

