YAHOO.lang.JSON=(function(){var l=YAHOO.lang,_UNICODE_EXCEPTIONS=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,_ESCAPES=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,_VALUES=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,_BRACKETS=/(?:^|:|,)(?:\s*\[)+/g,_INVALID=/^[\],:{}\s]*$/,_SPECIAL_CHARS=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,_CHARS={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};
function _revive(data,reviver){var walk=function(o,key){var k,v,value=o[key];
if(value&&typeof value==="object"){for(k in value){if(l.hasOwnProperty(value,k)){v=walk(value,k);
if(v===undefined){delete value[k]
}else{value[k]=v
}}}}return reviver.call(o,key,value)
};
return typeof reviver==="function"?walk({"":data},""):data
}function _char(c){if(!_CHARS[c]){_CHARS[c]="\\u"+("0000"+(+(c.charCodeAt(0))).toString(16)).slice(-4)
}return _CHARS[c]
}function _prepare(s){return s.replace(_UNICODE_EXCEPTIONS,_char)
}function _isValid(str){return l.isString(str)&&_INVALID.test(str.replace(_ESCAPES,"@").replace(_VALUES,"]").replace(_BRACKETS,""))
}function _string(s){return'"'+s.replace(_SPECIAL_CHARS,_char)+'"'
}function _stringify(h,key,d,w,pstack){var o=typeof w==="function"?w.call(h,key,h[key]):h[key],i,len,j,k,v,isArray,a;
if(o instanceof Date){o=l.JSON.dateToString(o)
}else{if(o instanceof String||o instanceof Boolean||o instanceof Number){o=o.valueOf()
}}switch(typeof o){case"string":return _string(o);
case"number":return isFinite(o)?String(o):"null";
case"boolean":return String(o);
case"object":if(o===null){return"null"
}for(i=pstack.length-1;
i>=0;
--i){if(pstack[i]===o){return"null"
}}pstack[pstack.length]=o;
a=[];
isArray=l.isArray(o);
if(d>0){if(isArray){for(i=o.length-1;
i>=0;
--i){a[i]=_stringify(o,i,d-1,w,pstack)||"null"
}}else{j=0;
if(l.isArray(w)){for(i=0,len=w.length;
i<len;
++i){k=w[i];
v=_stringify(o,k,d-1,w,pstack);
if(v){a[j++]=_string(k)+":"+v
}}}else{for(k in o){if(typeof k==="string"&&l.hasOwnProperty(o,k)){v=_stringify(o,k,d-1,w,pstack);
if(v){a[j++]=_string(k)+":"+v
}}}}a.sort()
}}pstack.pop();
return isArray?"["+a.join(",")+"]":"{"+a.join(",")+"}"
}return undefined
}return{isValid:function(s){return _isValid(_prepare(s))
},parse:function(s,reviver){s=_prepare(s);
if(_isValid(s)){return _revive(eval("("+s+")"),reviver)
}throw new SyntaxError("parseJSON")
},stringify:function(o,w,d){if(o!==undefined){if(l.isArray(w)){w=(function(a){var uniq=[],map={},v,i,j,len;
for(i=0,j=0,len=a.length;
i<len;
++i){v=a[i];
if(typeof v==="string"&&map[v]===undefined){uniq[(map[v]=j++)]=v
}}return uniq
})(w)
}d=d>=0?d:1/0;
return _stringify({"":o},"",d,w,[])
}return undefined
},dateToString:function(d){function _zeroPad(v){return v<10?"0"+v:v
}return d.getUTCFullYear()+"-"+_zeroPad(d.getUTCMonth()+1)+"-"+_zeroPad(d.getUTCDate())+"T"+_zeroPad(d.getUTCHours())+":"+_zeroPad(d.getUTCMinutes())+":"+_zeroPad(d.getUTCSeconds())+"Z"
},stringToDate:function(str){if(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/.test(str)){var d=new Date();
d.setUTCFullYear(RegExp.$1,(RegExp.$2|0)-1,RegExp.$3);
d.setUTCHours(RegExp.$4,RegExp.$5,RegExp.$6);
return d
}return str
}}
})();
YAHOO.register("json",YAHOO.lang.JSON,{version:"2.6.0",build:"1321"});
