if(!JsNamespace.exist("Eco.Json")){JsNamespace.declare("Eco.Json",{_Token_Type:{UNKNOWN: -1,COMMA:0,LEFT_BRACE:1,RIGHT_BRACE:2,LEFT_BRACKET:3,RIGHT_BRACKET:4,COLON:6,TRUE:7,FALSE:8,NULL:9,STRING:10,NUMBER:11,NAN:12},decode:(JSON&&JSON.parse)?function(_a){if(Eco.isEmpty(_a)){return;}return JSON.parse(_a);}:function(_a,_b){if(Eco.isEmpty(_a)){return;}var _c=Eco.Json;_c._jsonString=_a;_c._strict=_b;_c._loc=0;_c._ch=null;_c._nextChar();_c._nextToken();_c._value=_c._parseValue();if(_b&&_c._nextToken()!=null){_c._parseError("Unexpected characters left in input stream");}return _c._value;},_nextToken:function(){var _a=Eco.Json;return _a._token=_a.getNextToken();},_parseArray:function(){var _a=[];var _b;var _c=Eco.Json;var _d=_c._strict;_b=_c._nextToken();var _e=_c._Token_Type;if(_b.type==_e.RIGHT_BRACKET){return _a;}else if(!_d&&_b.type==_e.COMMA){_b=_c._nextToken();if(_b.type==_e.RIGHT_BRACKET){return _a;}else{_c._parseError("Leading commas are not supported. Expecting ']' but found "+_b.value);}}while(true){_a.push(_c._parseValue());_b=_c._nextToken();if(_b.type==_e.RIGHT_BRACKET){return _a;}else if(_b.type==_e.COMMA){_b=_c._nextToken();if(!_d){if(_b.type==_e.RIGHT_BRACKET){return _a;}}}else{_c._parseError("Expecting ] or , but found "+_b.value);}}return null;},_parseObject:function(){var _a=Eco.Json;var _b={};var _c=_a._strict;var _d;var _e=_a._nextToken();var _f=_a._Token_Type;if(_e.type==_f.RIGHT_BRACE){return _b;}else if(!_c&&_e.type==_f.COMMA){_e=_a._nextToken();if(_e.type==_f.RIGHT_BRACE){return _b;}else{_a._parseError("Leading commas are not supported. Expecting '}' but found "+_e.value);}}while(true){if(_e.type==_f.STRING){_d=String(_e.value);_e=_a._nextToken();if(_e.type==_f.COLON){_e=_a._nextToken();_b[_d]=_a._parseValue();_e=_a._nextToken();if(_e.type==_f.RIGHT_BRACE){return _b;}else if(_e.type==_f.COMMA){_e=_a._nextToken();if(!_c){if(_e.type==_f.RIGHT_BRACE){return _b;}}}else{_a._parseError("Expecting } or , but found "+_e.value);}}else{_a._parseError("Expecting : but found "+_e.value);}}else{_a._parseError("Expecting string but found "+_e.value);}}return null;},_parseValue:function(){var _a=Eco.Json;var _b=_a._strict;var _c=_a._token;if(_c==null){_a._parseError("Unexpected end of input");}var _d=_a._Token_Type;switch(_c.type){case _d.LEFT_BRACE:return _a._parseObject();case _d.LEFT_BRACKET:return _a._parseArray();case _d.STRING:case _d.NUMBER:case _d.TRUE:case _d.FALSE:case _d.NULL:return _c.value;case _d.NAN:if(!_b){return _c.value;}else{_a._parseError("Unexpected "+_c.value);}default:_a._parseError("Unexpected "+_c.value);}return null;},encode:(JSON&&JSON.parse)?function(_a){return JSON.stringify(_a);}:function(_a){return Eco.Json._convertToString(_a);},_convertToString:function(_a){var _b=Eco.Json;if(Eco.isString(_a)){return _b._escapeString(_a);}else if(Eco.isNumber(_a)){return isFinite(_a)?_a.toString():"null";}else if(Eco.isBoolean(_a)){return _a?"true":"false";}else if(Eco.isArray(_a)){return _b._arrayToString(_a);}else if(Eco.isXComponent(_a)){return _a.name;}else if(_a){return _b._objectToString(_a);}return "null";},_escapeString:function(_a){var _b="";var _c;var _d=_a.length;for(var _e=0;_e<_d;_e++ ){_c=_a.charAt(_e);switch(_c){case '"':_b+="\\\"";break;case '\\':_b+="\\\\";break;case '\b':_b+="\\b";break;case '\f':_b+="\\f";break;case '\n':_b+="\\n";break;case '\r':_b+="\\r";break;case '\t':_b+="\\t";break;default:if(_c<' '){var _f=_c.charCodeAt(0).toString(16);var _g=_f.length==2?"00":"000";_b+="\\u"+_g+_f;}else{_b+=_c;}}}return "\""+_b+"\"";},_arrayToString:function(_a){var _b=Eco.Json;var _c="";for(var _d=0;_d<_a.length;_d++ ){if(_c.length>0){_c+=",";}_c+=_b._convertToString(_a[_d]);}return "["+_c+"]";},_objectToString:function(_a){var _b="";var _c=Eco.Json;if(Eco.isObject(_a)){var _d;for(var _e in _a){if(_a.hasOwnProperty(_e)){_d=_a[_e];if(Eco.isFunction(_d)){continue;}if(_b.length>0){_b+=",";}_b+=_c._escapeString(_e)+":"+_c._convertToString(_d);}}}else{var _d;var _f;var _g=_a._properties;var _h;trace("json.js > _objectToString > ■ start 테스트를 위한 임의설정 ");if(_g===undefined){trace("json.js > _objectToString > s="+_b);return "{"+_b+"}";}for(var _i=0,_j=_g.length;_i<_j;_i++ ){_f=_g[_i];if(_f=="name"){continue;}_h=_a["get"+_f.charAt(0).toUpperCase()+_f.substr(1)];if(_h){_d=_h.call(_a);}else{_d=_a["_"+_f];}if(_b.length>0){_b+=",";}_b+=_c._escapeString(_f)+":"+_c._convertToString(_d);}}return "{"+_b+"}";},setToken:function(_a,_b){Eco.Json._token={type:_a,value:_b};},getToken:function(){return Eco.Json._token;},getNextToken:function(){var _a=Eco.Json;_a.skipIgnored();var _b=_a._Token_Type;var _c=_a._ch;switch(_c){case '{':_a.setToken(_b.LEFT_BRACE,'{');_a._nextChar();break;case '}':_a.setToken(_b.RIGHT_BRACE,'}');_a._nextChar();break;case '[':_a.setToken(_b.LEFT_BRACKET,'[');_a._nextChar();break;case ']':_a.setToken(_b.RIGHT_BRACKET,']');_a._nextChar();break;case ',':_a.setToken(_b.COMMA,',');_a._nextChar();break;case ':':_a.setToken(_b.COLON,':');_a._nextChar();break;case 't':var _d="t"+_a._nextChar()+_a._nextChar()+_a._nextChar();if(_d=="true"){_a.setToken(_b.TRUE,true);_a._nextChar();}else{_a._parseError("Expecting 'true' but found "+_d);}break;case 'f':var _e="f"+_a._nextChar()+_a._nextChar()+_a._nextChar()+_a._nextChar();if(_e=="false"){_a.setToken(_b.FALSE,false);_a._nextChar();}else{_a._parseError("Expecting 'false' but found "+_e);}break;case 'n':var _f="n"+_a._nextChar()+_a._nextChar()+_a._nextChar();if(_f=="null"){_a.setToken(_b.NULL,null);_a._nextChar();}else{_a._parseError("Expecting 'null' but found "+_f);}break;case 'N':var _g="N"+_a._nextChar()+_a._nextChar();if(_g=="NaN"){_a.setToken(_b.NAN,NaN);_a._nextChar();}else{_a._parseError("Expecting 'NaN' but found "+_g);}break;case '"':_a._readString();break;default:if(_a._isDigit(_c)||_c=='-'){_a._readNumber();}else if(_c==''){return null;}else{_a._parseError("Unexpected "+_c+" encountered");}}return _a._token;},_readString:function(){var _a=Eco.Json;var _b="";var _c=_a._nextChar();while(_c!='"'&&_c!=''){if(_c=='\\'){_c=_a._nextChar();switch(_c){case '"':_b+='"';break;case '/':_b+="/";break;case '\\':_b+='\\';break;case 'b':_b+='\b';break;case 'f':_b+='\f';break;case 'n':_b+='\n';break;case 'r':_b+='\r';break;case 't':_b+='\t';break;case 'u':var _d="";for(var _e=0;_e<4;_e++ ){if(!_a._isHexDigit(_c=_a._nextChar())){_a._parseError(" Excepted a hex digit, but found: "+_c);}_d+=_c;}_b+=String.fromCharCode(parseInt(_d,16));break;default:_b+='\\'+_c;}}else{_b+=_c;}_c=_a._nextChar();}if(_c==''){_a._parseError("Unterminated string literal");}_a._nextChar();_a.setToken(_a._Token_Type.STRING,_b);},_readNumber:function(){var _a=Eco.Json;var _b="";var _c=_a._ch;var _d=_a._strict;if(_c=='-'){_b+='-';_c=_a._nextChar();}if(!_a._isDigit(_c)){_a._parseError("Expecting a digit");}if(_c=='0'){_b+=_c;_c=_a._nextChar();if(_a._isDigit(_c)){_a._parseError("A digit cannot immediately follow 0");}else if(!_d&&_c=='x'){_b+=_c;_c=_a._nextChar();if(_a._isHexDigit(_c)){_b+=_c;_c=_a._nextChar();}else{_a._parseError("Number in hex format require at least one hex digit after \"0x\"");}while(_a._isHexDigit(_c)){_b+=_c;_c=_a._nextChar();}}}else{while(_a._isDigit(_c)){_b+=_c;_c=_a._nextChar();}}if(_c=='.'){_b+='.';_c=_a._nextChar();if(!_a._isDigit(_c)){_a._parseError("Expecting a digit");}while(_a._isDigit(_c)){_b+=_c;_c=_a._nextChar();}}if(_c=='e'||_c=='E'){_b+="e";_c=_a._nextChar();if(_c=='+'||_c=='-'){_b+=_c;_c=_a._nextChar();}if(!_a._isDigit(_c)){_a._parseError("Scientific notation number needs exponent value");}while(_a._isDigit(_c)){_b+=_c;_c=_a._nextChar();}}var _e=Number(_b);if(isFinite(_e)&&!isNaN(_e)){_a.setToken(_a._Token_Type.NUMBER,_e);return;}else{_a._parseError("Number "+_e+" is not valid!");}_a._token=null;},_nextChar:function(){var _a=Eco.Json;return _a._ch=_a._jsonString.charAt(_a._loc++ );},skipIgnored:function(){var _a;var _b=Eco.Json;do{_a=_b._loc;_b._skipWhite();_b._skipComments();}while(_a!=_b._loc)},_skipComments:function(){var _a=Eco.Json;var _b=_a._ch;if(_b=='/'){_b=_a._nextChar();switch(_b){case '/':do{_b=_a._nextChar();}while(_b!='\n'&&_b!='')_b=_a._nextChar();break;case '*':_b=_a._nextChar();while(true){if(_b=='*'){_b=_a._nextChar();if(_b=='/'){_b=_a._nextChar();break;}}else{_b=_a._nextChar();}if(_b==''){_a._parseError("Multi-line comment not closed");}}break;default:_a._parseError("Unexpected "+_b+" encountered (expecting '/' or '*' )");}}},_skipWhite:function(){var _a=Eco.Json;var _b=_a._ch;while(_a._isWhiteSpace(_b)){_b=_a._nextChar();}},_isWhiteSpace:function(_a){return (_a==' '||_a=='\t'||_a=='\n'||_a=='\r');},_isDigit:function(_a){return (_a>='0'&&_a<='9');},_isHexDigit:function(_a){var _b=_a.toUpperCase();return (Eco.Json._isDigit(_a)||(_b>='A'&&_b<='F'));},_parseError:function(_a){Eco.Logger.error({"message":_a,"stack":true});}});}