!function(e){"use strict";functiono(e){varo=e.split("-");return{language:o[0],local:o[1]}}e||(e={});vart=Kekule,n=Kekule.language||(e&&e.navigator?navigator.language||navigator.browserLanguage:"en-US");t.language=n;vara=o(n),i=o("en-US"),_=[a.language+"_"+a.local,a.language,i.language+i.local,i.language];Kekule.Localization={},Kekule.LocalizationRes={};varr=Kekule.LocalizationRes;functionT(e,o,t){varn=t||r[e];return!n&&o&&(n={},r[e]=n),n}functionl(e,o,t){varn=T(o,!1,t);if(n){vara=Object.getCascadeFieldValue(e,n);if(void0!==a)returna}}functionE(e,o,t){for(varn=(o?[o]:[]).concat(_),a=0,i=n.length;a<i;++a){varr=l(e,n[a],t);if(void0!==r)returnr}}functionI(e,o,t){varn=E(e,o,t);if(void0!==n)returnn;Kekule.error("Can not find localization resource: "+e)}varO,s=[],c=!!(e||e.window).__kekuleMarkLocalizationModuleInfo__,N={};functiond(e,o,t,n){if(t){vara=l(o,e,n);(function(e,o,t,n,a){vari=T(t,n,a);!!i&&Object.setCascadeFieldValue(e,o,i,n)})(o,a?Object.extendEx(a,t,{cascade:!0}):JSON.parse(JSON.stringify(t)),e,!0,n)}}Kekule.$L=I,Kekule.Localization.getLanguages=function(){vare=[];for(varoinr)e.push(o);returne},Kekule.Localization.getValue=I,Kekule.Localization.findValue=E,Kekule.Localization.getModuleInfos=function(){returnN},Kekule.Localization.setCurrModule=function(e){O=e,s.indexOf(e)<0&&s.push(e)},Kekule.Localization.getModuleNames=function(){returns},Kekule.Localization.addResource=function(e,o,t){(d(e,o,t),c)&&d(e,o,t,function(e,o){e=e||"GLOBAL";vart=Object.getCascadeFieldValue(e,N);return!t&&o&&(t=Object.setCascadeFieldValue(e,{},N,!0)),t}(O,!0))}}(this),Kekule.LOCAL_RES=!0,Kekule.Localization.setCurrModule("general"),Kekule.Localization.addResource("en","Texts",{UNNAMED:"unnamed"}),Kekule.Localization.addResource("en","ErrorMsg",{MODULE_NOT_LOADED:"Module {0} is not loaded",NON_OWN_PROPERTY_CANNOT_BE_REPLACED:"Only directly owned property of object can be replaced",EMPTY_DOC:"Document is empty",ELEMENT_NOTSET:"Element not set",EMPTY_RESURI:"Resource URI is empty",CANNOT_LOAD_RES_OF_URI:"Can not load resource of URI: ",LIST_ITEM_CLASS_MISMATCH:"Mismatched item class, can not add to list",CANNOT_CLEAR_WEAKMAP:"Can not clear a weak map",CANNOT_GET_KEY_LIST_IN_WEAKMAP:"Can not get key array from a weak map",CANNOT_GET_VALUE_LIST_IN_WEAKMAP:"Can not get value array from a weak map",INVALID_CHEMELEMENT:"Invalid chemical element",INVALID_ISOTOPE:"Invalid isotope",COORD_STICK_NOT_ALLOWED_ON_CLASS:"Coordinate sticking is not allowed in this type of object",INVALID_STICK_TARGET_OBJ:"Invalid sticking target",UNABLE_TO_STICK_TO_OTHER_OWNER_OBJ:"Unable to stick to object with a different owner",UNABLE_TO_STICK_TO_OBJ_WITHOUT_ABS_COORD:"Unable to stick to object without absolute coordinates",STICK_RECURSION_NOT_ALLOWED:"Stick recursion is not allowed",UNABLE_ADD_MISTYPED_NODE:"Unable to link mistyped node to connector",UNABLE_ADD_DIFF_OWNER_OBJ:"Object with different owner can not be linked to connector",CHEMSTRUCTUREOBJECTGROUP_ITEMCLASS_MISMATCH:"Mismatched group item class",SORT_FUNC_UNSET:"Sort function is not set",SOURCE_FRAGMENT_NOT_SET:"Source structure fragment not set",UNABLE_ADD_NONMOLECULE_MAP:"Unable to add non-molecule to reactants or products",CANNOT_ADD_NON_NODE_NOR_CONNECTOR_TO_STRUCT_CONTAINER:"Can not add object other than node or connector to structure object container",REGISTERED_CANONICALIZATION_EXECUTOR_NOT_FOUND:"Can not find registered canonicalization executor",ERROR_LOADING_FILE:"Error loading file: ",READER_ID_ALREADY_EXISTS:"Can not register reader: id already exists",WRITER_ID_ALREADY_EXISTS:"Can not register writer: id already exists",FAIL_TO_READ_FORMAT:"Fail to load data of format: ",NO_SUITABLE_READER_FOR_FORMAT:"Can not read data of format: ",NO_SUITABLE_READER_FOR_MIMETYPE:"Can not read data of MIME type: ",NO_SUITABLE_READER_FOR_FILEEXT:"Can not read data of file extension: ",NO_SUITABLE_WRITER_FOR_FORMAT:"Can not write data of format: ",NO_SUITABLE_WRITER_FOR_MIMETYPE:"Can not write data of MIME type: ",NO_SUITABLE_WRITER_FOR_FILEEXT:"Can not write data of file extension: ",AJAX_FILELOADER_NOT_FOUND:"AJAX file loader not found, can not load URL",FAIL_TO_LOAD_FILE_URL:"Fail to load file of URL: ",CML_ELEM_READER_NOT_FOUND:"Reader for element <{0}> not found",ATOMID_NOT_EXISTS:"Atom id not exists: ",BONDID_NOT_EXISTS:"Bond id not exists: ",CML_ELEM_WRITER_TYPE_INPROPER:"{0} is not a proper CML element writer for {1}",CML_CAN_NOT_OUTPUT_TO_EMPTY_ELEMENT:"Can not output content to empty element",UNABLE_TO_OUTPUT_AS_CML:"Unable to output object <{0}> to CML data",MDL_CTAB_ATOM_CANNOT_CREATE:"Can not create atom from source MDL format data",MDL_CTAB_BOND_CANNOT_CREATE:"Can not create bond from source MDL format data",CAN_NOT_WRITE_NON_MOLECULE_TO_MOL:"Object is not a molecule and can not be output to connection table",MOLECULE_HAS_NO_CTAB_TO_OUTPUT:"Molecule has no connection table and can not be output to MDL format",NOT_MDL2000_FORMAT_DATA:"Data format wrong: not MDL 2000",NOT_MDL_RXN_DATA:"Not MDL Reaction(RXN) data",MALFORMED_MDL3000_COUNTLINE:"Malformed MDL 3000 count line",MDL3000_ATOMBLOCK_NOT_FOUND:"Atom block not found, malformed MDL 3000 data?",NOT_MDL_FORMAT_DATA:"Data format wrong: not MDL 2000 or 3000",NOT_MDL2000_RXN_DATA:"Not MDL RXN 2000 data",NOT_MDL3000_RXN_DATA:"Not MDL RXN 3000 data",NOT_MDL3000_RXN_COUNTLINE:"Error in reading RXN 3000 count line",MDL_OUTPUT_DATATYPE_NOT_TEXT:"MDL data can not be output to non text format",MDL_INPUT_DATATYPE_NOT_TEXT:"Non text format is not a legal MDL source data",UNABLE_TO_OUTPUT_AS_MDL:"Unable to output object <{0}> to MDL data",KCJ_INPUT_DATATYPE_NOT_JSON_OR_TEXT:"Non text or JSON format data is not a legal KCJ source",KCJ_OUTPUT_DATATYPE_NOT_JSON_OR_TEXT:"Can not output as non text or JSON data",KCX_INPUT_DATATYPE_NOT_DOM_OR_TEXT:"Non text or DOM data is not a legal KCX source",KCX_OUTPUT_DATATYPE_NOT_DOM_OR_TEXT:"Can not output as non text or DOM data",JSON_SERIALIZER_NOT_EXISTS:"Serializer for JSON not exists",XML_SERIALIZER_NOT_EXISTS:"Serializer for XML not exists",INAVAILABLE_AUTOSCALE_REF_LENGTH:"Can not determine the length for calculation of auto scale",FORMULA_RENDERER_3D_NOT_AVAILABLE:"3D renderer for molecule formula is not available",CANNOT_FIND_SUITABLE_RENDERER_FOR_OBJ:"Can not find suitable renderer for object",CALC_TERMINATED_BY_USER:"Calculation terminated by user",CALC_SERVICE_UNAVAILABLE:'Calculation service "{0}" is unavailable'}),Kekule.LOCAL_RES=!0,Kekule.Localization.setCurrModule("widget"),Kekule.Localization.addResource("en","WidgetTexts",{CAPTION_OK:"OK",CAPTION_CANCEL:"Cancel",CAPTION_YES:"Yes",CAPTION_NO:"No",CAPTION_BROWSE_COLOR:"Browse colors",HINT_BROWSE_COLOR:"Browse more colors",S_COLOR_UNSET:"(unset)",S_COLOR_DEFAULT:"(default)",S_COLOR_MIXED:"(mixed)",S_COLOR_TRANSPARENT:"(transparent)",S_OBJECT_UNSET:"(none)",S_ITEMS:"item(s)",S_OBJECT:"object",S_VALUE_UNSET:"(Unset)",CAPTION_MENU:"Menu",HINT_MENU:"Open menu",S_INSPECT_NONE:"(none)",S_INSPECT_OBJECTS:"({0} objects)",S_INSPECT_ID_OBJECT:"{0}: {1}",S_INSPECT_ANONYMOUS_OBJECT:"({0})",CAPTION_TOGGLE_TEXTWRAP:"Toggle text wrapping",CAPTION_INC_TEXT_SIZE:"Increase text size",CAPTION_DEC_TEXT_SIZE:"Decrease text size",HINT_TOGGLE_TEXTWRAP:"Toggle the state of text wrapping",HINT_INC_TEXT_SIZE:"Increase text size",HINT_DEC_TEXT_SIZE:"Decrease text size",HINT_CHOOSE_FONT_FAMILY:"Choose font family",CAPTION_FIRST_PAGE:"First",CAPTION_LAST_PAGE:"Last",CAPTION_PREV_PAGE:"Prev",CAPTION_NEXT_PAGE:"Next",HINT_FIRST_PAGE:"First page",HINT_LAST_PAGE:"Last page",HINT_PREV_PAGE:"Previous page",HINT_NEXT_PAGE:"Next page",HINT_CURR_PAGE:"Current page",MSG_RETRIEVING_DATA:"Loading data...",CAPTION_DATATABLE_EDIT:"Edit",CAPTION_DATATABLE_DELETE:"Delete",CAPTION_DATATABLE_INSERT:"Insert",HINT_DATATABLE_EDIT:"Edit",HINT_DATATABLE_DELETE:"Delete",HINT_DATATABLE_INSERT:"Insert",CAPTION_ADD_CELL:"+",HINT_ADD_CELL:"Add new cell",CAPTION_REMOVE_CELL:"Remove",HINT_REMOVE_CELL:"Remove cell",CAPTION_CONFIG:"Settings...",HINT_CONFIG:"Change settings",TITLE_IMG_FORMAT_PNG:"PNG format image",TITLE_IMG_FORMAT_JPG:"Jpeg format image",TITLE_IMG_FORMAT_GIF:"GIF format image",TITLE_IMG_FORMAT_SVG:"SVG format image"}),Kekule.Localization.addResource("en","ChemWidgetTexts",{CAPTION_CLEAROBJS:"Clear",CAPTION_LOADFILE:"Load...",CAPTION_LOADDATA:"Load...",CAPTION_SAVEFILE:"Save...",CAPTION_ZOOMIN:"Zoom In",CAPTION_ZOOMOUT:"Zoom Out",CAPTION_RESETZOOM:"Reset Zoom",CAPTION_RESETVIEW:"Reset",CAPTION_ROTATE:"Rotate",CAPTION_ROTATELEFT:"Left Rotate",CAPTION_ROTATERIGHT:"Right Rotate",CAPTION_ROTATEX:"X Rotate",CAPTION_ROTATEY:"Y Rotate",CAPTION_ROTATEZ:"Z Rotate",CAPTION_MOL_DISPLAY_TYPE:"Molecule Display Style",CAPTION_SKELETAL:"Skeletal",CAPTION_CONDENSED:"Condensed",CAPTION_WIRE:"Wire Frame",CAPTION_STICKS:"Sticks",CAPTION_BALLSTICK:"Ball Stick",CAPTION_SPACEFILL:"Space Fill",CAPTION_HIDEHYDROGENS:"Show/hide hydrogens",CAPTION_OPENEDITOR:"Edit...",CAPTION_EDITOR_DONE:"Done",CAPTION_EDITOR_CANCEL:"Cancel",CAPTION_EDIT_OBJ:"Edit",HINT_CLEAROBJS:"Clear objects",HINT_LOADFILE:"Load from file",HINT_LOADDATA:"Load data",HINT_SAVEFILE:"Save to file",HINT_ZOOMIN:"Zoom in",HINT_ZOOMOUT:"Zoom out",HINT_RESETZOOM:"Reset zoom",HINT_RESETVIEW:"Reset zoom and rotation",HINT_ROTATE:"Rotate",HINT_ROTATELEFT:"Rotate in anticlockwise direction",HINT_ROTATERIGHT:"Rotate in clockwise direction",HINT_ROTATEX:"Rotate around X axis",HINT_ROTATEY:"Rotate around Y axis",HINT_ROTATEZ:"Rotate around Z axis",HINT_MOL_DISPLAY_TYPE:"Change molecule display style",HINT_SKELETAL:"Show molecule in skeletal style",HINT_CONDENSED:"Show molecule in condensed style",HINT_WIRE:"Show molecule in wire frame style",HINT_STICKS:"Show molecule in sticks style",HINT_BALLSTICK:"Show molecule in ball-stick style",HINT_SPACEFILL:"Show molecule in space-fill style",HINT_HIDEHYDROGENS:"Show/hide hydrogen atoms in model",HINT_OPENEDITOR:"Open an editor to modify displayed object",HINT_EDITOR_DONE:"Save the modification",HINT_EDITOR_CANCEL:"Discard the modification",CAPTION_NEWDOC:"New",CAPTION_UNDO:"Undo",CAPTION_REDO:"Redo",CAPTION_COPY:"Copy",CAPTION_CUT:"Cut",CAPTION_PASTE:"Paste",CAPTION_TOGGLE_SELECT:"Toggle select",CAPTION_CLONE_SELECTION:"Clone selection",CAPTION_TOGGLE_INSPECTOR:"Object inspector",CAPTION_MANIPULATE:"Select",CAPTION_MANIPULATE_MARQUEE:"Marquee select",CAPTION_MANIPULATE_LASSO:"Lasso select",CAPTION_MANIPULATE_BRUSH:"Brush select",CAPTION_MANIPULATE_ANCESTOR:"Select molecule",CAPTION_CLIENT_DRAGSCROLL:"Scroll",CAPTION_ERASE:"Erase",CAPTION_TRACK_INPUT:"Track",CAPTION_MOL_BOND:"Bond",CAPTION_MOL_BOND_SINGLE:"Single bond",CAPTION_MOL_BOND_DOUBLE:"Double bond",CAPTION_MOL_BOND_TRIPLE:"Triple bond",CAPTION_MOL_BOND_QUAD:"Quad bond",CAPTION_MOL_BOND_EXPLICIT_AROMATIC:"Aromatic bond",CAPTION_MOL_BOND_WEDGEUP:"Wedge up bond",CAPTION_MOL_BOND_WEDGEUP_INVERTED:"Wedge up bond 2",CAPTION_MOL_BOND_WEDGEDOWN:"Wedge down bond",CAPTION_MOL_BOND_WEDGEDOWN_INVERTED:"Wedge down bond 2",CAPTION_MOL_BOND_CLOSER:"Outer bond",CAPTION_MOL_BOND_WAVY:"Wavy bond",CAPTION_MOL_BOND_DOUBLE_EITHER:"Double Either bond",CAPTION_MOL_BOND_IONIC:"Ionic bond",CAPTION_MOL_BOND_COORDINATE:"Coordinate bond",CAPTION_MOL_BOND_METALLIC:"Metallic bond",CAPTION_MOL_BOND_HYDROGEN:"Hydrogen bond",CAPTION_MOL_BOND_KEKULIZE:"Kekulize",CAPTION_MOL_BOND_HUCKLIZE:"Hucklize",CAPTION_MOL_ATOM:"Atom",CAPTION_MOL_FORMULA:"Formula",CAPTION_MOL_ATOM_AND_FORMULA:"Atom & formula",CAPTION_MOL_CHARGE:"Charge",CAPTION_MOL_CHARGE_CLEAR:"Charge clear",CAPTION_MOL_CHARGE_POSITIVE:"Positive charge",CAPTION_MOL_CHARGE_NEGATIVE:"Negative charge",CAPTION_MOL_CHARGE_SINGLET:"Singlet radical",CAPTION_MOL_CHARGE_DOUBLET:"Monoradical",CAPTION_MOL_CHARGE_TRIPLET:"Triplet radical",CAPTION_MOL_ELECTRON_LONEPAIR:"Lone pair",CAPTION_TEXT_BLOCK:"Text block",CAPTION_IMAGE_BLOCK:"Image block",CAPTION_TEXT_IMAGE:"Text & image",CAPTION_MOL_FLEXCHAIN:"Flex chain",CAPTION_MOL_FLEXRING:"Flex ring",CAPTION_REPOSITORY_RING:"Rings",CAPTION_REPOSITORY_RING_3:"Cyclopropane",CAPTION_REPOSITORY_RING_4:"Cyclobutane",CAPTION_REPOSITORY_RING_5:"Cyclopentane",CAPTION_REPOSITORY_RING_6:"Cyclohexane",CAPTION_REPOSITORY_RING_7:"Cycloheptane",CAPTION_REPOSITORY_RING_8:"Cyclooctane",CAPTION_REPOSITORY_RING_AR_6:"Benzene",CAPTION_REPOSITORY_RING_AR_5:"Cyclopentadiene",CAPTION_REPOSITORY_CYCLOHEXANE_CHAIR1:"Cyclohexane chair 1",CAPTION_REPOSITORY_CYCLOHEXANE_CHAIR2:"Cyclohexane chair 2",CAPTION_REPOSITORY_CYCLOHEXANE_HARWORTH1:"Cyclohexane Haworth 1",CAPTION_REPOSITORY_CYCLOHEXANE_HARWORTH2:"Cyclohexane Haworth 2",CAPTION_REPOSITORY_CYCLOPENTANE_HARWORTH1:"Cyclopentane Haworth 1",CAPTION_REPOSITORY_CYCLOPENTANE_HARWORTH2:"Cyclopentane Haworth 2",CAPTION_REPOSITORY_METHANE:"Methane",CAPTION_REPOSITORY_FISCHER1:"Fischer projection 1",CAPTION_REPOSITORY_FISCHER2:"Fischer projection 2",CAPTION_REPOSITORY_FISCHER3:"Fischer projection 3",CAPTION_REPOSITORY_SAWHORSE_STAGGERED:"Sawhorse staggered",CAPTION_REPOSITORY_SAWHORSE_ECLIPSED:"Sawhorse eclipsed",CAPTION_REPOSITORY_SUBBOND_MARK:"Substituent bond",CAPTION_REPOSITORY_ARROWLINE:"Arrows & symbols",CAPTION_REPOSITORY_GLYPH:"Glyphs",CAPTION_REPOSITORY_GLYPH_LINE:"Line",CAPTION_REPOSITORY_GLYPH_OPEN_ARROW_LINE:"Open arrow line",CAPTION_REPOSITORY_GLYPH_TRIANGLE_ARROW_LINE:"Triangle arrow line",CAPTION_REPOSITORY_GLYPH_DI_OPEN_ARROW_LINE:"Bidirectional open arrow line",CAPTION_REPOSITORY_GLYPH_DI_TRIANGLE_ARROW_LINE:"Bidirectional triangle arrow line",CAPTION_REPOSITORY_GLYPH_REV_ARROW_LINE:"Reversible arrow line",CAPTION_REPOSITORY_GLYPH_OPEN_ARROW_DILINE:"Open arrow double line",CAPTION_REPOSITORY_GLYPH_OPEN_ARROW_ARC:"Open arrow arc",CAPTION_REPOSITORY_GLYPH_SINGLE_SIDE_OPEN_ARROW_ARC:"Single side open arrow arc",CAPTION_ELECTRON_PUSHING_ARROW:"Electron pushing arrow",CAPTION_ELECTRON_PUSHING_ARROW_DOUBLE:"Double electron pushing arrow",CAPTION_ELECTRON_PUSHING_ARROW_SINGLE:"Single electron pushing arrow",CAPTION_REPOSITORY_HEAT_SYMBOL:"Heat symbol",CAPTION_REPOSITORY_ADD_SYMBOL:"Add symbol",CAPTION_TEXT_FORMAT:"Text format",CAPTION_PICK_COLOR:"Color",CAPTION_FONTNAME:"Font name",CAPTION_FONTSIZE:"Font size",CAPTION_TEXT_DIRECTION:"Text direction",CAPTION_TEXT_DIRECTION_DEFAULT:"Default",CAPTION_TEXT_DIRECTION_LTR:"Left to right",CAPTION_TEXT_DIRECTION_RTL:"Right to left",CAPTION_TEXT_DIRECTION_TTB:"Top to bottom",CAPTION_TEXT_DIRECTION_BTT:"Bottom to top",CAPTION_TEXT_HORIZONTAL_ALIGN:"Text horizontal alignment",CAPTION_TEXT_VERTICAL_ALIGN:"Text vertical alignment",CAPTION_TEXT_ALIGN_DEFAULT:"Default",CAPTION_TEXT_ALIGN_LEADING:"Leading",CAPTION_TEXT_ALIGN_TRAILING:"Trailing",CAPTION_TEXT_ALIGN_CENTER:"Center",CAPTION_TEXT_ALIGN_LEFT:"Left",CAPTION_TEXT_ALIGN_RIGHT:"Right",CAPTION_TEXT_ALIGN_TOP:"Top",CAPTION_TEXT_ALIGN_BOTTOM:"Bottom",CAPTION_NODE_LABEL_DISPLAY_MODE:"Atom label display mode",CAPTION_NODE_LABEL_DISPLAY_MODE_DEFAULT:"Default",CAPTION_NODE_LABEL_DISPLAY_MODE_SHOWN:"Show label",CAPTION_NODE_LABEL_DISPLAY_MODE_HIDDEN:"Hide label",CAPTION_NODE_LABEL_DISPLAY_MODE_SMART:"Smart",CAPTION_ATOM_MODIFIER:"Atom",CAPTION_ATOM_MODIFIER_MIXED:"[A]",CAPTION_BOND_MODIFIER:"Bond",CAPTION_CHARGE_MODIFIER:"Charge",CAPTION_GLYPH_PATH_MODIFIER:"Path",CAPTION_REACTION_ARROW_AND_SEGMENT_PATH_MODIFIER:"Reaction arrow & segment",CAPTION_ARC_PATH_MODIFIER:"Arc",CAPTION_MULTI_ARC_PATH_MODIFIER:"Multi-Arc",CAPTION_ELECTRON_PUSHING_ARROW_MODIFIER:"Electron pushing arrow",CAPTION_BOND_FORMING_ELECTRON_PUSHING_ARROW_MODIFIER:"Bond forming arrow",TEXT_CHARGE_POSITIVE:"+",TEXT_CHARGE_NEGATIVE:"-",TEXT_CHARGE_UNKNOWN:"<sup>+</sup>/<sub>-</sub>",TEXT_CHARGE_NONE:"∅",HINT_NEWDOC:"Create new document",HINT_UNDO:"Undo",HINT_REDO:"Redo",HINT_COPY:"Copy selection to internal clipboard",HINT_CUT:"Cut selection to internal clipboard",HINT_PASTE:"Paste from internal clipboard",HINT_CLONE_SELECTION:"Clone selection",HINT_TOGGLE_SELECT:"Toggle select",HINT_TOGGLE_INSPECTOR:"Show or hide object inspector panel",HINT_MANIPULATE:"Select tool",HINT_MANIPULATE_MARQUEE:"Marquee select",HINT_MANIPULATE_LASSO:"Lasso select",HINT_MANIPULATE_BRUSH:"Brush select",HINT_MANIPULATE_ANCESTOR:"Select molecule",HINT_CLIENT_DRAGSCROLL:"Scroll",HINT_ERASE:"Erase tool",HINT_TRACK_INPUT:"Track tool",HINT_MOL_BOND:"Bond tool",HINT_MOL_BOND_SINGLE:"Single bond",HINT_MOL_BOND_DOUBLE:"Double bond",HINT_MOL_BOND_TRIPLE:"Triple bond",HINT_MOL_BOND_QUAD:"Quad bond",HINT_MOL_BOND_EXPLICIT_AROMATIC:"Explicit aromatic bond",HINT_MOL_BOND_WEDGEUP:"Wedge up bond",HINT_MOL_BOND_WEDGEUP_INVERTED:"Wedge up bond 2",HINT_MOL_BOND_WEDGEDOWN:"Wedge down bond",HINT_MOL_BOND_WEDGEDOWN_INVERTED:"Wedge down bond 2",HINT_MOL_BOND_CLOSER:"Outer bond",HINT_MOL_BOND_WAVY:"Wavy bond",HINT_MOL_BOND_DOUBLE_EITHER:"Double either bond",HINT_MOL_BOND_IONIC:"Ionic bond",HINT_MOL_BOND_COORDINATE:"Coordinate bond",HINT_MOL_BOND_METALLIC:"Metallic bond",HINT_MOL_BOND_HYDROGEN:"Hydrogen bond",HINT_MOL_BOND_KEKULIZE:"Kekulize, convert explicit aromatic bonds to compartmental single and double ones",HINT_MOL_BOND_HUCKLIZE:"Hucklize, mark bonds on aromatic rings as explicit aromatic ones",HINT_MOL_ATOM:"Atom tool",HINT_MOL_FORMULA:"Formula tool",HINT_MOL_ATOM_AND_FORMULA:"Atom and formula tool",HINT_MOL_CHARGE:"Charge tool",HINT_MOL_CHARGE_CLEAR:"Clear charge and radical",HINT_MOL_CHARGE_POSITIVE:"Positive charge",HINT_MOL_CHARGE_NEGATIVE:"Negative charge",HINT_MOL_CHARGE_SINGLET:"Singlet radical",HINT_MOL_CHARGE_DOUBLET:"Monoradical",HINT_MOL_CHARGE_TRIPLET:"Triplet radical",HINT_MOL_ELECTRON_LONEPAIR:"Lone pair electrons",HINT_TEXT_BLOCK:"Text block tool",HINT_IMAGE_BLOCK:"Image block tool",HINT_TEXT_IMAGE:"Text and image tool",HINT_MOL_FLEXCHAIN:"Flex carbon chain",HINT_MOL_FLEXRING:"Flex carbon ring",HINT_REPOSITORY_RING:"Ring structures tool",HINT_REPOSITORY_RING_3:"Cyclopropane",HINT_REPOSITORY_RING_4:"Cyclobutane",HINT_REPOSITORY_RING_5:"Cyclopentane",HINT_REPOSITORY_RING_6:"Cyclohexane",HINT_REPOSITORY_RING_7:"Cycloheptane",HINT_REPOSITORY_RING_8:"Cyclooctane",HINT_REPOSITORY_RING_AR_6:"Benzene",HINT_REPOSITORY_RING_AR_5:"Cyclopentadiene",HINT_REPOSITORY_CYCLOHEXANE_CHAIR1:"Cyclohexane chair 1",HINT_REPOSITORY_CYCLOHEXANE_CHAIR2:"Cyclohexane chair 2",HINT_REPOSITORY_CYCLOHEXANE_HARWORTH1:"Cyclohexane Haworth 1",HINT_REPOSITORY_CYCLOHEXANE_HARWORTH2:"Cyclohexane Haworth 2",HINT_REPOSITORY_CYCLOPENTANE_HARWORTH1:"Cyclopentane Haworth 1",HINT_REPOSITORY_CYCLOPENTANE_HARWORTH2:"Cyclopentane Haworth 2",HINT_REPOSITORY_SUBBOND_MARK:"Substituent bond",HINT_REPOSITORY_METHANE:"Methane",HINT_REPOSITORY_FISCHER1:"Fischer projection with one chiral center",HINT_REPOSITORY_FISCHER2:"Fischer projection with two chiral centers",HINT_REPOSITORY_FISCHER3:"Fischer projection with three chiral centers",HINT_REPOSITORY_SAWHORSE_STAGGERED:"Sawhorse staggered",HINT_REPOSITORY_SAWHORSE_ECLIPSED:"Sawhorse eclipsed",HINT_REPOSITORY_ARROWLINE:"Arrows and symbols tool",HINT_REPOSITORY_GLYPH:"Glyphs",HINT_REPOSITORY_GLYPH_LINE:"Line",HINT_REPOSITORY_GLYPH_OPEN_ARROW_LINE:"Open arrow line",HINT_REPOSITORY_GLYPH_TRIANGLE_ARROW_LINE:"Triangle arrow line",HINT_REPOSITORY_GLYPH_DI_OPEN_ARROW_LINE:"Bidirectional open arrow line",HINT_REPOSITORY_GLYPH_DI_TRIANGLE_ARROW_LINE:"Bidirectional triangle arrow line",HINT_REPOSITORY_GLYPH_REV_ARROW_LINE:"Reversible arrow line",HINT_REPOSITORY_GLYPH_OPEN_ARROW_DILINE:"Open arrow double line",HINT_REPOSITORY_GLYPH_OPEN_ARROW_ARC:"Open arrow arc",HINT_REPOSITORY_GLYPH_SINGLE_SIDE_OPEN_ARROW_ARC:"Single side open arrow arc",HINT_REPOSITORY_HEAT_SYMBOL:"Heat symbol",HINT_REPOSITORY_ADD_SYMBOL:"Add symbol",HINT_ELECTRON_PUSHING_ARROW:"Electron pushing arrow",HINT_NODE_LABEL_DISPLAY_MODE:"Atom label display mode",HINT_TEXT_FORMAT:"Set text format",HINT_FONTNAME:"Set font name",HINT_FONTSIZE:"Set font size",HINT_PICK_COLOR:"Select color",HINT_TEXT_DIRECTION:"Set text direction",HINT_TEXT_HORIZONTAL_ALIGN:"Set text horizontal alignment",HINT_TEXT_VERTICAL_ALIGN:"Set text vertical alignment",HINT_CHARGE_NONE:"No charge",HINT_ATOM_MODIFIER:"Set atom",HINT_BOND_MODIFIER:"Set bond",HINT_CHARGE_MODIFIER:"Set charge",HINT_GLYPH_PATH_MODIFIER:"Set path properties",HINT_REACTION_ARROW_AND_SEGMENT_PATH_MODIFIER:"Set reaction arrow and segment properties",HINT_ARC_PATH_MODIFIER:"Set arc properties",HINT_MULTI_ARC_PATH_MODIFIER:"Set multi-arc properties",HINT_ELECTRON_PUSHING_ARROW_MODIFIER:"Set electron pushing arrow properties",HINT_BOND_FORMING_ELECTRON_PUSHING_ARROW_MODIFIER:"Set bond forming arrow properties",HINT_USE_ATOM_CUSTOM_COLOR:"(use atom custom color)",CAPTION_LOADDATA_DIALOG:"Load data",CAPTION_LOADDATA_DIALOG_APPENDMODE:"Append to current",CAPTION_SAVEDATA_DIALOG:"Save data",CAPTION_DATA_FORMAT:"Data format:",CAPTION_DATA_SRC:"Input or paste data below:",CAPTION_LOADDATA_FROM_FILE:"Load from file",CAPTION_CHOOSEFILEFORMAT:"Choose file format",CAPTION_SELECT_FORMAT:"Select format:",CAPTION_PREVIEW_FILE_CONTENT:"Preview: ",S_DEF_SAVE_FILENAME:"Unnamed",CAPTION_ATOMLIST_PERIODIC_TABLE:"more...",CAPTION_RGROUP:"Sub group",CAPTION_VARIABLE_ATOM:"Variable Atom (list)",CAPTION_VARIABLE_NOT_ATOM:"Variable Atom (not list)",CAPTION_PSEUDOATOM:"Pseudoatom",CAPTION_DUMMY_ATOM:"Dummy Atom",CAPTION_HETERO_ATOM:"Hetero Atom",CAPTION_ANY_ATOM:"Any Atom",CAPTION_ATOM:"Atom",CAPTION_SUBGROUP:"Subgroup",CAPTION_PERIODIC_TABLE_DIALOG:"Periodic table",CAPTION_PERIODIC_TABLE_DIALOG_SEL_ELEM:"Select element",CAPTION_PERIODIC_TABLE_DIALOG_SEL_ELEMS:"Select elements",CAPTION_TEXTBLOCK_INIT:"Enter text here",CAPTION_WIDTH:"Width",CAPTION_LENGTH:"Length",CAPTION_PATH_INDEX:"Path {0}",HINT_PATH_INDEX:"Path {0}",CAPTION_REACTION_ARROW_UNSET:"(Unset)",CAPTION_REACTION_ARROW_CUSTOM:"Custom",CAPTION_REACTION_ARROW_NORMAL:"Normal",CAPTION_REACTION_ARROW_RESONANCE:"Resonance",CAPTION_REACTION_ARROW_REVERSIBLE:"Reversible",CAPTION_REACTION_ARROW_RETROSYNTHESIS:"Retrosynthesis",HINT_REACTION_ARROW_UNSET:"Unset",HINT_REACTION_ARROW_CUSTOM:"Custom",HINT_REACTION_ARROW_NORMAL:"Normal arrow",HINT_REACTION_ARROW_RESONANCE:"Resonance arrow",HINT_REACTION_ARROW_REVERSIBLE:"Reversible arrow",HINT_REACTION_ARROW_RETROSYNTHESIS:"Retrosynthesis arrow",CAPTION_LINE_COUNT:"Line count",CAPTION_LINE_GAP:"Line gap",CAPTION_LINE:"Line",CAPTION_STARTING_ARROW:"Starting arrow",CAPTION_ENDING_ARROW:"Ending arrow",CAPTION_REACTION_ARROW_TYPE:"Reaction arrow type",CAPTION_ELECTRON_PUSHING_ARROW_TYPE:"Arrow type",CAPTION_OPPOSITE_ARROW_SIDES:"Opposite arrow sides",CAPTION_SAME_ARROW_SIDES:"Same arrow sides",CAPTION_ELECTRON_PUSHING_ARROW_1:"Single electron pushing arrow",CAPTION_ELECTRON_PUSHING_ARROW_1_ABBR:"Single",HINT_ELECTRON_PUSHING_ARROW_1:"Single electron pushing arrow",CAPTION_ELECTRON_PUSHING_ARROW_2:"Double electron pushing arrow",CAPTION_ELECTRON_PUSHING_ARROW_2_ABBR:"Double",HINT_ELECTRON_PUSHING_ARROW_2:"Double electron pushing arrow",CAPTION_BOND_FORMING_ELECTRON_PUSHING_ARROW_1:"Bond forming electron pushing arrow",HINT_BOND_FORMING_ELECTRON_PUSHING_ARROW_1:"Bond forming electron pushing arrow",LEGEND_CAPTION:"Legend",LEGEND_ELEM_SYMBOL:"Symbol",LEGEND_ELEM_NAME:"name",LEGEND_ATOMIC_NUM:"atomic number",LEGEND_ATOMIC_WEIGHT:"atomic weight",CAPTION_2D:"2D",CAPTION_3D:"3D",CAPTION_AUTOSIZE:"Autosize",CAPTION_AUTOFIT:"Autofit",CAPTION_SHOWSIZEINFO:"Show size info",CAPTION_LABEL_SIZE:"Size: ",CAPTION_BACKGROUND_COLOR:"Background color: ",CAPTION_WIDTH_HEIGHT:"width: {0}, height: {1}",PLACEHOLDER_WIDTH:"width",PLACEHOLDER_HEIGHT:"height",HINT_AUTOSIZE:"Whether graph size is determined by object automatically",HINT_AUTOFIT:"Whether object is zoomed to fullfill the whole graph",S_VALUE_DEFAULT:"(Default)"}),Kekule.Localization.addResource("en","ErrorMsg",{WIDGET_CLASS_NOT_FOUND:"Widget class not found",WIDGET_CAN_NOT_BIND_TO_ELEM:"Widget {0} can not be binded to element <{1}>",LOAD_CHEMDATA_FAILED:"Failed to load data",FILE_API_NOT_SUPPORTED:"File operations are not supported by your current web browser. Please update it.",DRAW_BRIDGE_NOT_SUPPORTED:"It seems that your web browser is not modern enough to support the drawing function. Please update it.",COMMAND_NOT_REVERSIBLE:"Command can not be undone",PAGE_INDEX_OUTOF_RANGE:"Page index out of range",FETCH_DATA_TIMEOUT:"Time out to fetch data",RENDER_TYPE_CHANGE_NOT_ALLOWED:"It is not allowed to change render type",CAN_NOT_CREATE_EDITOR:"Creating editor failed",CAN_NOT_SET_COORD_OF_CLASS:"Can not set coordinate of instance of {0}.",CAN_NOT_SET_DIMENSION_OF_CLASS:"Can not set dimension of instance of {0}.",CAN_NOT_MERGE_CONNECTORS:"Specified connectors can not be merged.",NOT_A_VALID_ATOM:"Not a valid atom",INVALID_ATOM_SYMBOL:"Invalid atom symbol",INVALID_OR_EMPTY_IMAGE:"Image is empty or invalidate"}),Kekule.LOCAL_RES=!0,Kekule.Localization.setCurrModule("objDefines"),Kekule.OBJDEF_TEXTS={},Kekule.Localization.addResource("en","OBJDEF_TEXTS",{TITLE_PREFIX:"TITLE_",DESCRIPTION_PREFIX:"DES_",DES_ID:"Unique ID for object.",Render:{GeneralConfigs:{TITLE_drawOpacity:"Opacity",DES_drawOpacity:"Opacity (between 0-1) to draw objects"},Render2DConfigs:{TITLE_generalConfigs:"General render settings",DES_generalConfigs:"General render settings",TITLE_moleculeDisplayConfigs:"Molecule display settings",DES_moleculeDisplayConfigs:"Settings about molecule display styles",TITLE_displayLabelConfigs:"Display label settings",DES_displayLabelConfigs:"Settings of displayed label in molecule/chem object",TITLE_textFontConfigs:"Text and font settings",DES_textFontConfigs:"Settings about text and font of display",TITLE_lengthConfigs:"Lengths settings",DES_lengthConfigs:"Lengths to display molecule/chem object",TITLE_colorConfigs:"Color settings",DES_colorConfigs:"Color settings to display molecule/chem object"},MoleculeDisplayConfigs:{TITLE_defMoleculeDisplayType:"Default molecule display mode",DES_defMoleculeDisplayType:"Default display type of molecule: in skeletal or in condensed mode",TITLE_defNodeDisplayMode:"Default atom display mode",DES_defNodeDisplayMode:"Default mode to display atom in molecule",TITLE_defHydrogenDisplayLevel:"Default hydrogen display level",DES_defHydrogenDisplayLevel:"How to display explicit or implicit hydrogens of atom",TITLE_defChargeMarkType:"Default charge mark type",DES_defChargeMarkType:null,TITLE_partialChargeDecimalsLength:"Decimal length of partial charge",DES_partialChargeDecimalsLength:"If an atom has a partical charge (e.g., +1.5), how many digits after decimal point should be displayed"},DisplayLabelConfigs:{TITLE_enableIsotopeAlias:"Enable isotope alias",DES_enableIsotopeAlias:"Whether isotope alias (e.g. D for 2H) is used to display atom label.",TITLE_unsetElement:"Unset element",DES_unsetElement:"Label for unset or unknown element",TITLE_dummyAtom:"Dummy atom",DES_dummyAtom:"Label for dummy atom",TITLE_heteroAtom:"Hetero atom",DES_heteroAtom:"Label for general hetero atom",TITLE_anyAtom:"Any atom",DES_anyAtom:"Label for atom wildcard",TITLE_variableAtom:"Variable atom",DES_variableAtom:"Label for variable atom or atom list",TITLE_rgroup:"RGroup",DES_rgroup:"Label for RGroup",TITLE_isoListLeadingBracket:"Atom list leading bracket",TITLE_isoListTailingBracket:"Atom list tailing bracket",TITLE_isoListDelimiter:"Atom delimiter in list",TITLE_isoListDisallowPrefix:"Prefix of not-atom list"},TextFontConfigs:{TITLE_labelFontFamily:"Label font",DES_labelFontFamily:"Font to draw general label",TITLE_atomFontFamily:"Atom font",DES_atomFontFamily:"Font to draw atom label",TITLE_supFontSizeRatio:"Superscript font size ratio",DES_supFontSizeRatio:"Ratio of Superscript text size to normal text size",TITLE_subFontSizeRatio:"Subscript font size ratio",DES_subFontSizeRatio:"Ratio of Subscript text size to normal text size",TITLE_superscriptOverhang:"Superscript text overhang",DES_superscriptOverhang:null,TITLE_subscriptOversink:"Subscript text oversink",DES_subscriptOversink:null,TITLE_textCharDirection:"Text direction",DES_textCharDirection:"Default text direction",TITLE_textHorizontalAlign:"Horizontal text alignment",DES_textHorizontalAlign:"Default horizontal text alignment of label",TITLE_textVerticalAlign:"Vertical text alignment",DES_textVerticalAlign:"Default vertical text alignment of label"},LengthConfigs:{TITLE_labelFontSize:"Label text size",DES_labelFontSize:"Size of general label text",TITLE_atomFontSize:"Atom text size",DES_atomFontSize:"Size of atom label text",TITLE_allenCenterAtomRadius:"Allen center radius",DES_allenCenterAtomRadius:"Radius to draw dot on center carbon atom in allen",TITLE_chargeMarkFontSize:"Charge mark size",DES_chargeMarkFontSize:"Font size of charge mark",TITLE_chargeMarkMargin:"Charge mark margin",DES_chargeMarkMargin:"Margin between charge mark and atom",TITLE_defBondLength:"Default bond length",DES_defBondLength:"Default length of a chemical bond",TITLE_bondLineWidth:"Bond line width",DES_bondLineWidth:"Line width to draw a chemical bond",TITLE_hashSpacing:"Hash spacing",DES_hashSpacing:"Spacing between small lines in hash bond",TITLE_multipleBondSpacingRatio:"Multiple bond spacing ratio",DES_multipleBondSpacingRatio:"Ratio of spacing between two lines in double or triple bond to bond length.",TITLE_multipleBondMaxAbsSpacing:"Max multiple bond spacing",DES_multipleBondMaxAbsSpacing:"Maximum spacing between multiple bond",TITLE_bondArrowLength:"Bond arrow length",DES_bondArrowLength:"The length of end triangle in arrow bond",TITLE_bondArrowWidth:"Bond arrow width",DES_bondArrowWidth:"The width of end triangle in arrow bond",TITLE_bondWedgeWidth:"Bond wedge max width",DES_bondWedgeWidth:"The width of ending point in wedge bond",TITLE_bondWedgeHashMinWidth:"Bond wedge min width",DES_bondWedgeHashMinWidth:"The width of starting point in wedge bond",TITLE_bondWavyRadius:"Bond wavy radius",DES_bondWavyRadius:"Radius to draw arc of wavy bond",TITLE_glyphStrokeWidth:"Glyph stroke width",DES_glyphStrokeWidth:"The default width of glyph strokes",TITLE_autofitContextPadding:"Autofit context padding",DES_autofitContextPadding:"Padding of autofit widget edge and drawn object"},ColorConfigs:{TITLE_useAtomSpecifiedColor:"Use element specified color",DES_useAtomSpecifiedColor:"Whether use different color on different element",TITLE_labelColor:"Label color",DES_labelColor:"Default color of general label",TITLE_atomColor:"Atom color",DES_atomColor:"Default color of atom label",TITLE_bondColor:"Bond color",DES_bondColor:"Default color of bond",TITLE_glyphStrokeColor:"Glyph stroke color",DES_glyphStrokeColor:"Default stroke color of glyph",TITLE_glyphFillColor:"Glyph fill color",DES_glyphFillColor:"Default fill color of glyph"},Render3DConfigs:{TITLE_generalConfigs:"General render settings",DES_generalConfigs:"General render settings",TITLE_moleculeDisplayConfigs:"Molecule display settings",DES_moleculeDisplayConfigs:"Settings about molecule display styles",TITLE_environmentConfigs:"3D environment settings",DES_environmentConfigs:"Settings of 3D environment",TITLE_modelConfigs:"3D model settings",DES_modelConfigs:"Settings to render a 3D molecule model",TITLE_lengthConfigs:"Lengths settings",DES_lengthConfigs:"Lengths to display molecule"},Render3DEnvironmentConfigs:{TITLE_graphicQuality:"Graphic quality",DES_graphicQuality:"Quality of 3D graphic"},Molecule3DDisplayConfigs:{TITLE_defMoleculeDisplayType:"Default molecule display type",DES_defMoleculeDisplayType:"Draw molecule in wire, stick, ball stick or space fill mode",TITLE_defBondSpliceMode:"Bond splice mode",DES_defBondSpliceMode:"How to draw a splice mode between two atoms with different color",TITLE_defDisplayMultipleBond:"Display multiple bond",DES_defDisplayMultipleBond:"Whether draw multiple bond lines for double or triple bond",TITLE_defBondColor:"Default bond color",DES_defBondColor:"Default bond color",TITLE_defAtomColor:"Default atom color",DES_defAtomColor:"Default atom color",TITLE_useAtomSpecifiedColor:"Use element specified color",DES_useAtomSpecifiedColor:"Whether use different color on different element"},Model3DConfigs:{TITLE_hideHydrogens:"Hide hydrogens",DES_hideHydrogens:"Whether hide all hydrogen atoms in 3D model",TITLE_useVdWRadius:"Use von dar Waals radius",DES_useVdWRadius:"Whether use atom's von dar Waals radius to draw 3D model",TITLE_multiConnectorRadiusRatio:"Multi-bond radius ratio",DES_multiConnectorRadiusRatio:"If use multi-cylinder for multibond, this value is the radius ratio between multi and single bond",TITLE_multiConnectorMarginRatio:"Multi-bond margin ratio",DES_multiConnectorMarginRatio:"If multi-cylinder is used for multibond, ratio of margin between cylinders and radius of cylinder"},Length3DConfigs:{TITLE_fixedNodeRadius:"Fixed atom radius",DES_fixedNodeRadius:"If vdW radius of atom is not used, this value will be used for all atom's radius",TITLE_connectorRadius:"Bond radius",DES_connectorRadius:"Bond will be draw based on this radius in stick or ball_stick mode",TITLE_connectorLineWidth:"Bond line width",DES_connectorLineWidth:"Bond will be draw on this width in wire mode"}},Widget:{BaseWidget:{TITLE_settingFacade:"General settings",DES_settingFacade:"General settings"}},ChemWidget:{ChemObjDisplayer:{TITLE_enableLoadNewFile:"Enable load data",DES_enableLoadNewFile:"Whether loading new data is enabled"},ChemObjDisplayerConfigs:{TITLE_ioConfigs:"I/O settings",DES_ioConfigs:"Settings of input/output"},ChemObjDisplayerIOConfigs:{TITLE_canonicalizeBeforeSave:"Canonicalize before save",DES_canonicalizeBeforeSave:"Whether canonicalize molecule before saving it"},Viewer:{TITLE_enableDirectInteraction:"Enable direct interaction",DES_enableDirectInteraction:"Whether interaction with chem object in viewer is enabled",TITLE_enableTouchInteraction:"Enable touch interaction",DES_enableTouchInteraction:"Whether touch interaction is enabled",TITLE_enableToolbar:"Enable toolbar",DES_enableToolbar:"Whether toolbar of viewer is displayed",TITLE_toolbarPos:"Toolbar Position",DES_toolbarPos:"Position of toolbar in viewer",TITLE_toolbarMarginHorizontal:"Toolbar horizontal margin",DES_toolbarMarginHorizontal:"Horizontal margin of toolbar to viewer edge",TITLE_toolbarMarginVertical:"Toolbar vertical margin",DES_toolbarMarginVertical:"Vertical margin of toolbar to viewer edge",TITLE_enableEdit:"Enable editing",DES_enableEdit:"Whether edit chem object in viewer is enabled",TITLE_modalEdit:"Modal editing",DES_modalEdit:"Using modal dialog or popup dialog to edit chem object"}},Editor:{BaseEditorConfigs:{TITLE_uiMarkerConfigs:"UI marker settings",DES_uiMarkerConfigs:"Settings of interaction marker",TITLE_interactionConfigs:"Interaction settings",DES_interactionConfigs:"Settings about interaction of editor",TITLE_structureConfigs:"Structure settings",DES_structureConfigs:"Settings about creating molecule structure"},ChemSpaceEditorConfigs:{TITLE_chemSpaceConfigs:"Chem space settings",DES_chemSpaceConfigs:"Settings about chem space/chem document",TITLE_styleSetterConfigs:"Style setter settings",DES_styleSetterConfigs:"Settings of style toolbar of editor"},InteractionConfigs:{TITLE_enableTrackOnNearest:"Enale track on nearest",DES_enableTrackOnNearest:"If setting to true, hot track or selection will focus on nearest object to current position, otherwise, the topmost object around will be focused.",TITLE_enableHotTrack:"Enable hot track",DES_enableHotTrack:"Whether highlighting objects under mouse position",TITLE_autoSelectNewlyInsertedObjects:"Auto select new inserted objects",DES_autoSelectNewlyInsertedObjects:"Whether select objects newly inserted or modified in editor automatically",TITLE_objBoundTrackMinInflation:"Object bound minimal inflation (default)",DES_objBoundTrackMinInflation:"The default minimal inflation of the bound of object to make it easier to select",TITLE_objBoundTrackMinInflationMouse:"Object bound minimal inflation (mouse)",DES_objBoundTrackMinInflationMouse:"The minimal inflation of the bound of object to make it easier to select when using mouse as pointer device",TITLE_objBoundTrackMinInflationTouch:"Object bound minimal inflation (touch)",DES_objBoundTrackMinInflationTouch:"The minimal inflation of the bound of object to make it easier to select when touching on screen",TITLE_objBoundTrackMinInflationPen:"Object bound minimal inflation (pen)",DES_objBoundTrackMinInflationPen:"The minimal inflation of the bound of object to make it easier to select when using pen as pointer device",TITLE_objBoundTrackInflationRatio:"Object bound inflation ratio (default)",DES_objBoundTrackInflationRatio:"The default inflation ratio (compaing with the default bond length) of the bound of object to make it easier to select",TITLE_objBoundTrackInflationRatioMouse:"Object bound inflation ratio (mouse)",DES_objBoundTrackInflationRatioMouse:"The inflation ratio (compaing with the default bond length) of the bound of object to make it easier to select when using mouse as pointer device",TITLE_objBoundTrackInflationRatioPen:"Object bound inflation ratio (pen)",DES_objBoundTrackInflationRatioPen:"The inflation ratio (compaing with the default bond length) of the bound of object to make it easier to select when using pen as pointer device",TITLE_objBoundTrackInflationRatioTouch:"Object bound inflation ratio (touch)",DES_objBoundTrackInflationRatioTouch:"The inflation ratio (compaing with the default bond length) of the bound of object to make it easier to select when touching on screen",TITLE_selectionMarkerInflation:"Selection marker inflation",DES_selectionMarkerInflation:"Inflation of object selection mark, makes it easier to see the containing objects",TITLE_selectionMarkerEdgeInflation:"Selection edge inflation",DES_selectionMarkerEdgeInflation:"Inflation when judging if a coord is on selection mark edge",TITLE_constrainedRotateStep:"Constrained rotation step",DES_constrainedRotateStep:"Constrained rotation step, in arc",TITLE_rotationLocationPointDistanceThreshold:"Rotation starting min distance",DES_rotationLocationPointDistanceThreshold:"Rotation will occur only when mouse point distance (from rotation center) larger than this value",TITLE_directedMoveDistanceThreshold:"Direct move min distance",DES_directedMoveDistanceThreshold:"Direct moving will only be done if moved distance large than this value",TITLE_enablePartialAreaSelecting:"Enable partial selecting",DES_enablePartialAreaSelecting:"If this value is true, when drag a selecting rubber band, object partly in the band will be totally selected",TITLE_selectingBrushWidth:"Brush selecting Width",DES_selectingBrushWidth:"Width of brush in brush selecting",TITLE_enableOffSelectionManipulation:"Enable off-selection manipulation",DES_enableOffSelectionManipulation:"When setting to true, you can still move, resize or rotate selected objects by holding mouse or touch outside selection for a while",TITLE_offSelectionManipulationActivatingTimeThreshold:"Off-selection manipulation hold time",DES_offSelectionManipulationActivatingTimeThreshold:"The minimal time (in ms) need for holding mouse or touch to invoke off-selection manipulation",TITLE_selectionMarkerDefPulseDuration:"Default selection mark pulse duration",DES_selectionMarkerDefPulseDuration:"The duration (in ms) of selection mark pulse when the selection is been emphasised",TITLE_selectionMarkerDefPulseCount:"Default selection mark pulse count",DES_selectionMarkerDefPulseCount:"The pulse count when the selection is been emphasised",TITLE_rotationRegionInflation:"Rotation region inflation",DES_rotationRegionInflation:"User can rotate the selected objects by pressing and move mouse in this inflated region outside selection",TITLE_enableMergePreview:"Enable merge preview",DES_enableMergePreview:"Whether a preview operation is used rather then the actual merge operation when merge two objects in editor during manipulation. Turn on this option may improve the performance of object manipulation.",TITLE_enableGestureManipulation:"Enable gesture manipulation",DES_enableGestureManipulation:"Whether user can use touch gestures (e.g. pinch) to scale or rotate selected objects in editor",TITLE_enableGestureZoomOnEditor:"Enable gesture zoom on editor",DES_enableGestureZoomOnEditor:"Whether user can use pinch gesture to zoom in or out the editor when there is no selection existed",TITLE_trackSimplifierDistanceThreshold:"Track-input curve simplification threshold",DES_trackSimplifierDistanceThreshold:"Distance threshold in simplifying curve drawn by track-input tool",TITLE_trackSimplifierIgnoreSegmentThreshold:"Track-input ignored segment threshold",DES_trackSimplifierIgnoreSegmentThreshold:"Segment length less than this threshold drawn by track-input will be ignored in parsing",TITLE_trackMergeDistanceThreshold:"Track-input merge distance threshold",DES_trackMergeDistanceThreshold:"If a joint or end point of line segment drawn by track-inpu tool is close to another line segment (less than this threshold), it will be regarded on that line.",TITLE_trackOptimizationAngleConstraint:"Track-input optimization line cross angle constraint",DES_trackOptimizationAngleConstraint:null,TITLE_trackOptimizationDistanceConstraints:"Track-input optimization line length constraint",DES_trackOptimizationDistanceConstraints:null,TITLE_trackOptimizationPrimaryDistanceConstraint:"Track-input optimization primary line length",DES_trackOptimizationPrimaryDistanceConstraint:null,TITLE_autoAdjustZoomLevelOnTrackTouching:null,DES_autoAdjustZoomLevelOnTrackTouching:null,TITLE_editorInitialZoom:"Editor initial zoom level",DES_editorInitialZoom:"The initial zoom level of editor",TITLE_atomSetterFontSize:"Atom setter font size",DES_atomSetterFontSize:"Font size of atom setter",TITLE_allowUnknownAtomSymbol:"Allow unknown atom symbol",DES_allowUnknownAtomSymbol:"Allow inputting unknown symbol and handle it as pseudo atom in atom setter",TITLE_clonedObjectScreenOffset:"Copied object coord offset",DES_clonedObjectScreenOffset:"The distance between copied objects and origin objects when doing paste selection action in editor"},UiMarkerConfigs:{TITLE_hotTrackerColor:"Hot track mark color",DES_hotTrackerColor:"Color of hot track mark",TITLE_hotTrackerOpacity:"Hot track mark opacity",DES_hotTrackerOpacity:"Opacity of hot track marker, value from 0 to 1",TITLE_selectionMarkerStrokeColor:"Selection mark stroke color",DES_selectionMarkerStrokeColor:"Stroke color of selection mark",TITLE_selectionMarkerStrokeWidth:"Selection mark stroke width",DES_selectionMarkerStrokeWidth:"Width of selection mark stroke",TITLE_selectionMarkerFillColor:"Selection mark fill color",DES_selectionMarkerFillColor:"Fill color of selection mark.",TITLE_selectionMarkerOpacity:"Selection mark opacity",DES_selectionMarkerOpacity:"Opacity of selection mark, value from 0 to 1",TITLE_selectionMarkerEmphasisOpacity:"Emphasised selection mark opacity",DES_selectionMarkerEmphasisOpacity:"Opacity of emphasised selection marker, value from 0 to 1",TITLE_selectingMarkerStrokeColor:"Selecting mark stroke color",DES_selectingMarkerStrokeColor:"Stroke color of selecting rubber band mark",TITLE_selectingMarkerStrokeWidth:"Selecting mark stroke width",DES_selectingMarkerStrokeWidth:"Stroke width of selection rubber band",TITLE_selectingMarkerStrokeDash:"Selecting mark dash style",DES_selectingMarkerStrokeDash:"Dash style of selecting rubber band",TITLE_selectingMarkerFillColor:"Selecting mark fill color",DES_selectingMarkerFillColor:"Fill color of selecting mark. Usually this value should be left blank (not filled)",TITLE_selectingMarkerOpacity:"Selecting mark opacity",DES_selectingMarkerOpacity:"Opacity of selecting mark, value from 0 to 1",TITLE_selectingBrushMarkerStrokeColor:"Brush selecting mark stroke color",DES_selectingBrushMarkerStrokeColor:"Stroke color of brush selecting mark",TITLE_selectingBrushMarkerStrokeDash:"Brush selecting mark dash style",DES_selectingBrushMarkerStrokeDash:"Dash style of brush selecting track",TITLE_selectingBrushMarkerStrokeLineCap:"Brushing selecting mark line-cap style",DES_selectingBrushMarkerStrokeLineCap:"Line-cap style of both ends of brush selecting track",TITLE_selectingBrushMarkerStrokeLineJoin:"Brushing selecting mark join point style",DES_selectingBrushMarkerStrokeLineJoin:"Join style of brush selection track segments",TITLE_selectingBrushMarkerOpacity:"Brush selecting mark opacity",DES_selectingBrushMarkerOpacity:"Opacity of brush selecting mark, value from 0 to 1",TITLE_trackMarkerStrokeColor:"Track-input mark stroke color",DES_trackMarkerStrokeColor:"Stroke color of track mark when using track-input tool to draw a structure",TITLE_trackMarkerStrokeWidth:"Track-input mark stroke width",DES_trackMarkerStrokeWidth:"Stroke width of track mark when using track-input tool to draw a structure",TITLE_trackMarkerStrokeDash:"Track-input mark dash style",DES_trackMarkerStrokeDash:"Dash style of track mark when using track-input tool to draw a structure",TITLE_trackMarkerOpacity:"Track-input mark opacity",DES_trackMarkerOpacity:"Opacity of track mark when using track-input tool to draw a structure",TITLE_flexStructureAssocMarkerColor:"Flex structure association mark color",DES_flexStructureAssocMarkerColor:"Color of mark showing atom count of flex ring/chain tool",TITLE_flexStructureAssocMarkerOpacity:"Flex structure association mark opacity",DES_flexStructureAssocMarkerOpacity:"Opacity of mark showing atom count of flex ring/chain tool",TITLE_flexStructureAssocMarkerFontSize:"Flex structure association mark font size",DES_flexStructureAssocMarkerFontSize:"Font size of mark showing atom count of flex ring/chain tool",TITLE_flexStructureAssocMarkerFontFamily:"Flex structure association mark font family",DES_flexStructureAssocMarkerFontFamily:"Font family of mark showing atom count of flex ring/chain tool"},StructureConfigs:{TITLE_defBondType:"Default bond type",DES_defBondType:"Default type of bond",TITLE_defBondOrder:"Default bond order",DES_defBondOrder:"Default bond order",TITLE_defBondLength:"Default bond length",DES_defBondLength:"Default bond length",TITLE_defIsotopeId:"Default isotope",DES_defIsotopeId:"Default isotope when adding a new atom",TITLE_maxFlexChainAtomCount:"Maximum flex chain atom count",DES_maxFlexChainAtomCount:"Maximum atom count when inputting with flex chain tool",TITLE_minFlexChainAtomCount:"Minimal flex chain atom count",DES_minFlexChainAtomCount:"Minimal atom count when inputting with flex chain tool",TITLE_maxFlexRingAtomCount:"Maximum flex ring atom count",DES_maxFlexRingAtomCount:"Maximum atom count when inputting with flex ring tool",TITLE_minFlexRingAtomCount:"Minimal flex ring atom count",DES_minFlexRingAtomCount:"Minimal atom count when inputting with flex ring tool",TITLE_enabledNonAtomNodeTypes:"Available non-atom structure node types",DES_enabledNonAtomNodeTypes:"Non-atom structure node types available in editor",TITLE_enabledBondForms:"Available bond forms",DES_enabledBondForms:"Bond forms available in editor"},ChemSpaceConfigs:{TITLE_defScreenSize2D:"Default 2D screen size",TITLE_defScreenSize3D:"Default 3D screen size",TITLE_defPadding:"Default padding",DES_defPadding:"Padding on top when adding an unpositioned object to container chem space"},BaseEditor:{TITLE_enableCreateNewDoc:"Enable create new document",DES_enableCreateNewDoc:"Whether creating a new document is allowed",TITLE_initOnNewDoc:"Starts with a new document",DES_initOnNewDoc:"Whether create a new document automatically when composer is initialized",TITLE_enableOperHistory:"Enable undo",DES_enableOperHistory:"Whether undo/redo is enabled"},Composer:{TITLE_enableStyleToolbar:"Enable style toolbar",DES_enableStyleToolbar:"Whether display style toolbar to set color, font and size of objects",TITLE_allowCreateNewChild:"Enable create new child object",DES_allowCreateNewChild:"Whether new direct child of document can be created"}}});
Kekule.Localization.setCurrModule("general"),Kekule.Localization.addResource("zh","Texts",{UNNAMED:"未命名"}),Kekule.Localization.addResource("zh","ErrorMsg",{MODULE_NOT_LOADED:"模块{0}未载入",NON_OWN_PROPERTY_CANNOT_BE_REPLACED:"只能替换对象的直接属性",EMPTY_DOC:"文档无内容",ELEMENT_NOTSET:"未设置元素",EMPTY_RESURI:"资源URI无内容",CANNOT_LOAD_RES_OF_URI:"无法载入资源URI:",LIST_ITEM_CLASS_MISMATCH:"条目类型错误,无法加入列表",CANNOT_CLEAR_WEAKMAP:"Can not clear a weak map",CANNOT_GET_KEY_LIST_IN_WEAKMAP:"Can not get key array from a weak map",CANNOT_GET_VALUE_LIST_IN_WEAKMAP:"Can not get value array from a weak map",INVALID_CHEMELEMENT:"无效的化学元素",INVALID_ISOTOPE:"无效的同位素",UNABLE_ADD_MISTYPED_NODE:"无法向键/连接符上连接错误的原子/顶点",UNABLE_ADD_DIFF_OWNER_OBJ:"对象有着不同的宿主,无法连接在同一键/连接符上",CHEMSTRUCTUREOBJECTGROUP_ITEMCLASS_MISMATCH:"条目类型不符",SORT_FUNC_UNSET:"排序函数未设置",SOURCE_FRAGMENT_NOT_SET:"未指定源分子",UNABLE_ADD_NONMOLECULE_MAP:"仅能向反应物或生成物中添加分子",CANNOT_ADD_NON_NODE_NOR_CONNECTOR_TO_STRUCT_CONTAINER:"仅能向结构中添加原子、键或顶点、连接符",REGISTERED_CANONICALIZATION_EXECUTOR_NOT_FOUND:"无法找到注册的归一化执行器",ERROR_LOADING_FILE:"文件载入错误:",READER_ID_ALREADY_EXISTS:"Can not register reader: id already exists",WRITER_ID_ALREADY_EXISTS:"Can not register writer: id already exists",FAIL_TO_READ_FORMAT:"读入数据失败,格式:",NO_SUITABLE_READER_FOR_FORMAT:"无法读入数据,格式:",NO_SUITABLE_READER_FOR_MIMETYPE:"无法读入数据,MIME类型:",NO_SUITABLE_READER_FOR_FILEEXT:"无法读入数据,文件后缀:",NO_SUITABLE_WRITER_FOR_FORMAT:"无法写入数据,格式:",NO_SUITABLE_WRITER_FOR_MIMETYPE:"无法写入数据,MIME类型:",NO_SUITABLE_WRITER_FOR_FILEEXT:"无法写入数据,文件后缀:",AJAX_FILELOADER_NOT_FOUND:"AJAX file loader not found, can not load URL",FAIL_TO_LOAD_FILE_URL:"载入文件或链接失败:",CML_ELEM_READER_NOT_FOUND:"CML元素<{0}>读入器不存在",ATOMID_NOT_EXISTS:"原子标识(ID)不存在:",BONDID_NOT_EXISTS:"键标识(ID)不存在:",CML_ELEM_WRITER_TYPE_INPROPER:"{0}不是合适的CML元素{1}的写入器",CML_CAN_NOT_OUTPUT_TO_EMPTY_ELEMENT:"无法向空的CML元素中输出内容",UNABLE_TO_OUTPUT_AS_CML:"无法将对象<{0}>输出至CML",MDL_CTAB_ATOM_CANNOT_CREATE:"无法从源MDL格式数据中创建原子",MDL_CTAB_BOND_CANNOT_CREATE:"无法从源MDL格式数据中创建化学键",CAN_NOT_WRITE_NON_MOLECULE_TO_MOL:"对象并非分子,无法输出至分子连接表",MOLECULE_HAS_NO_CTAB_TO_OUTPUT:"分子无连接表,无法输出至MDL格式数据",NOT_MDL2000_FORMAT_DATA:"数据格式错误:并非MDL 2000",NOT_MDL_RXN_DATA:"并非MDL反应(RXN)数据",MALFORMED_MDL3000_COUNTLINE:"MDL 3000计数行格式错误",MDL3000_ATOMBLOCK_NOT_FOUND:"无法找到原子块,错误的MDL 3000数据?",NOT_MDL_FORMAT_DATA:"数据格式错误:并非MDL 2000或3000",NOT_MDL2000_RXN_DATA:"并非MDL RXN 2000数据",NOT_MDL3000_RXN_DATA:"并非MDL RXN 3000数据",NOT_MDL3000_RXN_COUNTLINE:"读入RXN 3000计数行错误",MDL_OUTPUT_DATATYPE_NOT_TEXT:"MDL数据无法输出为非文本格式",MDL_INPUT_DATATYPE_NOT_TEXT:"非文本格式数据,非法的MDL源数据",UNABLE_TO_OUTPUT_AS_MDL:"无法将对象<{0}>输出至MDL格式数据",KCJ_INPUT_DATATYPE_NOT_JSON_OR_TEXT:"非文本或JSON格式数据,非法的KCJ源数据",KCJ_OUTPUT_DATATYPE_NOT_JSON_OR_TEXT:"无法输出为非文本或JSON格式",KCX_INPUT_DATATYPE_NOT_DOM_OR_TEXT:"非文本或DOM格式数据,非法的KCX源数据",KCX_OUTPUT_DATATYPE_NOT_DOM_OR_TEXT:"无法输出为非文本或DOM格式",JSON_SERIALIZER_NOT_EXISTS:"JSON序列化器不存在",XML_SERIALIZER_NOT_EXISTS:"XML序列化器不存在",INAVAILABLE_AUTOSCALE_REF_LENGTH:"无法计算自动缩放所需的长度",FORMULA_RENDERER_3D_NOT_AVAILABLE:"分子式3D渲染器暂不可用",CANNOT_FIND_SUITABLE_RENDERER_FOR_OBJ:"无法找到合适的渲染器",CALC_TERMINATED_BY_USER:"计算过程被用户中断",CALC_SERVICE_UNAVAILABLE:"计算服务“{0}”不可用"}),Kekule.Localization.setCurrModule("widget"),Kekule.Localization.addResource("zh","WidgetTexts",{CAPTION_OK:"确定",CAPTION_CANCEL:"取消",CAPTION_YES:"是",CAPTION_NO:"否",CAPTION_BROWSE_COLOR:"浏览颜色",HINT_BROWSE_COLOR:"浏览更多颜色",S_COLOR_UNSET:"(未设置)",S_COLOR_DEFAULT:"(缺省值)",S_COLOR_MIXED:"(多个值)",S_COLOR_TRANSPARENT:"(透明)",S_OBJECT_UNSET:"(无)",S_ITEMS:"条目",S_OBJECT:"对象",S_VALUE_UNSET:"(未设置)",CAPTION_MENU:"菜单",HINT_MENU:"打开菜单",S_INSPECT_NONE:"(无)",S_INSPECT_OBJECTS:"({0}个对象)",S_INSPECT_ID_OBJECT:"{0}: {1}",S_INSPECT_ANONYMOUS_OBJECT:"({0})",CAPTION_TOGGLE_TEXTWRAP:"切换文本换行",CAPTION_INC_TEXT_SIZE:"增大字号",CAPTION_DEC_TEXT_SIZE:"减小字号",HINT_TOGGLE_TEXTWRAP:"切换文本是否自动换行",HINT_INC_TEXT_SIZE:"增大字号",HINT_DEC_TEXT_SIZE:"减小字号",HINT_CHOOSE_FONT_FAMILY:"选择字体",CAPTION_FIRST_PAGE:"首页",CAPTION_LAST_PAGE:"末页",CAPTION_PREV_PAGE:"前一页",CAPTION_NEXT_PAGE:"后一页",HINT_FIRST_PAGE:"首页",HINT_LAST_PAGE:"末页",HINT_PREV_PAGE:"前一页",HINT_NEXT_PAGE:"后一页",HINT_CURR_PAGE:"当前页",MSG_RETRIEVING_DATA:"载入数据…",CAPTION_DATATABLE_EDIT:"编辑",CAPTION_DATATABLE_DELETE:"删除",CAPTION_DATATABLE_INSERT:"插入",HINT_DATATABLE_EDIT:"编辑数据",HINT_DATATABLE_DELETE:"删除数据",HINT_DATATABLE_INSERT:"插入数据",CAPTION_ADD_CELL:"+",HINT_ADD_CELL:"添加新单元格",CAPTION_REMOVE_CELL:"移除",HINT_REMOVE_CELL:"移除单元格",CAPTION_CONFIG:"设置…",HINT_CONFIG:"修改设置",TITLE_IMG_FORMAT_PNG:"PNG格式图像",TITLE_IMG_FORMAT_JPG:"Jpeg格式图像",TITLE_IMG_FORMAT_GIF:"GIF格式图像",TITLE_IMG_FORMAT_SVG:"SVG格式图像"}),Kekule.Localization.addResource("zh","ChemWidgetTexts",{CAPTION_CLEAROBJS:"清除",CAPTION_LOADFILE:"载入…",CAPTION_LOADDATA:"载入…",CAPTION_SAVEFILE:"保存…",CAPTION_ZOOMIN:"放大",CAPTION_ZOOMOUT:"缩小",CAPTION_RESETZOOM:"重置缩放",CAPTION_RESETVIEW:"重置",CAPTION_ROTATE:"旋转",CAPTION_ROTATELEFT:"向左旋转",CAPTION_ROTATERIGHT:"向右旋转",CAPTION_ROTATEX:"沿X轴旋转",CAPTION_ROTATEY:"沿Y轴旋转",CAPTION_ROTATEZ:"沿Z轴旋转",CAPTION_MOL_DISPLAY_TYPE:"分子显示样式",CAPTION_SKELETAL:"键线式",CAPTION_CONDENSED:"缩写式",CAPTION_WIRE:"单线模型",CAPTION_STICKS:"棍式模型",CAPTION_BALLSTICK:"球棍模型",CAPTION_SPACEFILL:"比例模型",CAPTION_HIDEHYDROGENS:"显示/隐藏氢原子",CAPTION_OPENEDITOR:"编辑…",CAPTION_EDITOR_DONE:"完成",CAPTION_EDITOR_CANCEL:"取消",CAPTION_EDIT_OBJ:"编辑",HINT_CLEAROBJS:"清除对象",HINT_LOADFILE:"自文件载入",HINT_LOADDATA:"载入数据",HINT_SAVEFILE:"存储到文件",HINT_ZOOMIN:"放大",HINT_ZOOMOUT:"缩小",HINT_RESETZOOM:"重置缩放",HINT_RESETVIEW:"重置缩放与旋转",HINT_ROTATE:"旋转",HINT_ROTATELEFT:"逆时针旋转",HINT_ROTATERIGHT:"顺时针旋转",HINT_ROTATEX:"沿X轴旋转",HINT_ROTATEY:"沿Y轴旋转",HINT_ROTATEZ:"沿Z轴旋转",HINT_MOL_DISPLAY_TYPE:"改变分子显示样式",HINT_SKELETAL:"以键线式显示",HINT_CONDENSED:"以缩写式显示",HINT_WIRE:"以单线模型显示",HINT_STICKS:"以棍式模型显示",HINT_BALLSTICK:"以球棍模型显示",HINT_SPACEFILL:"以比例模型显示",HINT_HIDEHYDROGENS:"模型中显示/隐藏氢原子",HINT_OPENEDITOR:"编辑当前对象",HINT_EDITOR_DONE:"关闭并保存编辑器中的修改",HINT_EDITOR_CANCEL:"关闭并取消编辑器中的修改",CAPTION_NEWDOC:"新建",CAPTION_UNDO:"撤销",CAPTION_REDO:"重做",CAPTION_COPY:"复制",CAPTION_CUT:"剪切",CAPTION_PASTE:"粘贴",CAPTION_TOGGLE_SELECT:"叠加选择",CAPTION_CLONE_SELECTION:"克隆选区",CAPTION_TOGGLE_INSPECTOR:"对象检视器",CAPTION_MANIPULATE:"选取",CAPTION_MANIPULATE_MARQUEE:"矩形选框",CAPTION_MANIPULATE_LASSO:"套索选择",CAPTION_MANIPULATE_BRUSH:"选择刷",CAPTION_MANIPULATE_ANCESTOR:"选择分子",CAPTION_CLIENT_DRAGSCROLL:"移动画布",CAPTION_ERASE:"删除",CAPTION_TRACK_INPUT:"手写输入",CAPTION_MOL_BOND:"键",CAPTION_MOL_BOND_SINGLE:"单键",CAPTION_MOL_BOND_DOUBLE:"双键",CAPTION_MOL_BOND_TRIPLE:"三键",CAPTION_MOL_BOND_QUAD:"四键",CAPTION_MOL_BOND_EXPLICIT_AROMATIC:"芳香键",CAPTION_MOL_BOND_WEDGEUP:"实楔线键",CAPTION_MOL_BOND_WEDGEUP_INVERTED:"实楔线键2",CAPTION_MOL_BOND_WEDGEDOWN:"虚楔线键",CAPTION_MOL_BOND_WEDGEDOWN_INVERTED:"虚楔线键2",CAPTION_MOL_BOND_CLOSER:"突出(加粗)键",CAPTION_MOL_BOND_WAVY:"波浪键",CAPTION_MOL_BOND_DOUBLE_EITHER:"顺或反式双键",CAPTION_MOL_BOND_IONIC:"离子键",CAPTION_MOL_BOND_COORDINATE:"配位键",CAPTION_MOL_BOND_METALLIC:"金属键",CAPTION_MOL_BOND_HYDROGEN:"氢键",CAPTION_MOL_ATOM:"原子",CAPTION_MOL_FORMULA:"分子式",CAPTION_MOL_ATOM_AND_FORMULA:"原子与分子式",CAPTION_MOL_CHARGE:"电荷",CAPTION_MOL_CHARGE_CLEAR:"清除电荷",CAPTION_MOL_CHARGE_POSITIVE:"正电荷",CAPTION_MOL_CHARGE_NEGATIVE:"负电荷",CAPTION_MOL_CHARGE_SINGLET:"单线态",CAPTION_MOL_CHARGE_DOUBLET:"双线态自由基",CAPTION_MOL_CHARGE_TRIPLET:"三线态",CAPTION_MOL_ELECTRON_LONEPAIR:"孤对电子",CAPTION_TEXT_BLOCK:"文字",CAPTION_IMAGE_BLOCK:"图像",CAPTION_TEXT_IMAGE:"文字与图像",CAPTION_MOL_FLEXCHAIN:"可变碳链",CAPTION_MOL_FLEXRING:"可变碳环",CAPTION_REPOSITORY_RING:"环",CAPTION_REPOSITORY_RING_3:"环丙烷",CAPTION_REPOSITORY_RING_4:"环丁烷",CAPTION_REPOSITORY_RING_5:"环戊烷",CAPTION_REPOSITORY_RING_6:"环己烷",CAPTION_REPOSITORY_RING_7:"环庚烷",CAPTION_REPOSITORY_RING_8:"环辛烷",CAPTION_REPOSITORY_RING_AR_6:"苯",CAPTION_REPOSITORY_RING_AR_5:"环戊二烯",CAPTION_REPOSITORY_CYCLOHEXANE_CHAIR1:"环己烷椅式1",CAPTION_REPOSITORY_CYCLOHEXANE_CHAIR2:"环己烷椅式2",CAPTION_REPOSITORY_CYCLOHEXANE_HARWORTH1:"环己烷Haworth式1",CAPTION_REPOSITORY_CYCLOHEXANE_HARWORTH2:"环己烷Haworth式2",CAPTION_REPOSITORY_CYCLOPENTANE_HARWORTH1:"环戊烷Haworth式1",CAPTION_REPOSITORY_CYCLOPENTANE_HARWORTH2:"环戊烷Haworth式2",CAPTION_REPOSITORY_METHANE:"甲烷",CAPTION_REPOSITORY_FISCHER1:"单手性中心Fischer投影式",CAPTION_REPOSITORY_FISCHER2:"双手性中心Fischer投影式",CAPTION_REPOSITORY_FISCHER3:"三手性中心Fischer投影式",CAPTION_REPOSITORY_SAWHORSE_STAGGERED:"交叉式锯架式",CAPTION_REPOSITORY_SAWHORSE_ECLIPSED:"重叠式锯架式",CAPTION_REPOSITORY_SUBBOND_MARK:"取代基键",CAPTION_REPOSITORY_ARROWLINE:"线段与箭头",CAPTION_REPOSITORY_GLYPH:"图符",CAPTION_REPOSITORY_GLYPH_LINE:"直线",CAPTION_REPOSITORY_GLYPH_OPEN_ARROW_LINE:"开放箭头线",CAPTION_REPOSITORY_GLYPH_TRIANGLE_ARROW_LINE:"三角箭头线",CAPTION_REPOSITORY_GLYPH_DI_OPEN_ARROW_LINE:"双向开放箭头线",CAPTION_REPOSITORY_GLYPH_DI_TRIANGLE_ARROW_LINE:"双向三角箭头线",CAPTION_REPOSITORY_GLYPH_REV_ARROW_LINE:"可逆箭头线",CAPTION_REPOSITORY_GLYPH_OPEN_ARROW_DILINE:"开放箭头双线",CAPTION_REPOSITORY_HEAT_SYMBOL:"加热符号",CAPTION_REPOSITORY_ADD_SYMBOL:"加号",CAPTION_TEXT_FORMAT:"文字格式",CAPTION_PICK_COLOR:"颜色",CAPTION_FONTNAME:"字体",CAPTION_FONTSIZE:"字号",CAPTION_TEXT_DIRECTION:"文字方向",CAPTION_TEXT_DIRECTION_DEFAULT:"缺省",CAPTION_TEXT_DIRECTION_LTR:"由左至右",CAPTION_TEXT_DIRECTION_RTL:"由右至左",CAPTION_TEXT_DIRECTION_TTB:"由上至下",CAPTION_TEXT_DIRECTION_BTT:"由下至上",CAPTION_TEXT_HORIZONTAL_ALIGN:"文字水平对齐",CAPTION_TEXT_VERTICAL_ALIGN:"文字垂直对齐",CAPTION_TEXT_ALIGN_DEFAULT:"缺省",CAPTION_TEXT_ALIGN_LEADING:"首对齐",CAPTION_TEXT_ALIGN_TRAILING:"尾对齐",CAPTION_TEXT_ALIGN_CENTER:"居中对齐",CAPTION_TEXT_ALIGN_LEFT:"左对齐",CAPTION_TEXT_ALIGN_RIGHT:"右对齐",CAPTION_TEXT_ALIGN_TOP:"上对齐",CAPTION_TEXT_ALIGN_BOTTOM:"下对齐",CAPTION_ATOM_MODIFIER:"原子",CAPTION_ATOM_MODIFIER_MIXED:"[A]",CAPTION_BOND_MODIFIER:"键",CAPTION_CHARGE_MODIFIER:"Charge",TEXT_CHARGE_POSITIVE:"+",TEXT_CHARGE_NEGATIVE:"-",TEXT_CHARGE_UNKNOWN:"<sup>+</sup>/<sub>-</sub>",TEXT_CHARGE_NONE:"∅",HINT_NEWDOC:"创建新文档",HINT_UNDO:"撤销",HINT_REDO:"重做",HINT_COPY:"将选定对象复制至内部剪贴板",HINT_CUT:"将选定对象剪切至内部剪贴板",HINT_PASTE:"自内部剪贴板复制",HINT_CLONE_SELECTION:"克隆当前选区",HINT_TOGGLE_SELECT:"叠加选择",HINT_TOGGLE_INSPECTOR:"显示或隐藏对象检视器",HINT_MANIPULATE:"选择工具",HINT_MANIPULATE_MARQUEE:"矩形选框",HINT_MANIPULATE_LASSO:"套索选择",HINT_MANIPULATE_BRUSH:"选择刷",HINT_MANIPULATE_ANCESTOR:"选择分子",HINT_CLIENT_DRAGSCROLL:"移动画布",HINT_ERASE:"删除工具",HINT_TRACK_INPUT:"手写输入工具",HINT_MOL_BOND:"化学键工具",HINT_MOL_BOND_SINGLE:"单键",HINT_MOL_BOND_DOUBLE:"双键",HINT_MOL_BOND_TRIPLE:"叁键",HINT_MOL_BOND_QUAD:"四键",HINT_MOL_BOND_EXPLICIT_AROMATIC:"显式芳香键",HINT_MOL_BOND_WEDGEUP:"实楔线键",HINT_MOL_BOND_WEDGEUP_INVERTED:"实楔线键2",HINT_MOL_BOND_WEDGEDOWN:"虚楔线键",HINT_MOL_BOND_WEDGEDOWN_INVERTED:"虚楔线键2",HINT_MOL_BOND_CLOSER:"突出(加粗)键",HINT_MOL_BOND_WAVY:"波浪键",HINT_MOL_BOND_DOUBLE_EITHER:"顺或反式双键",HINT_MOL_BOND_IONIC:"离子键",HINT_MOL_BOND_COORDINATE:"配位键",HINT_MOL_BOND_METALLIC:"金属键",HINT_MOL_BOND_HYDROGEN:"氢键",HINT_MOL_ATOM:"原子工具",HINT_MOL_FORMULA:"分子式工具",HINT_MOL_ATOM_AND_FORMULA:"原子与分子式工具",HINT_MOL_CHARGE:"电荷工具",HINT_MOL_CHARGE_CLEAR:"清除电荷或自由基",HINT_MOL_CHARGE_POSITIVE:"正电荷",HINT_MOL_CHARGE_NEGATIVE:"负电荷",HINT_MOL_CHARGE_SINGLET:"单线态自由基",HINT_MOL_CHARGE_DOUBLET:"双线态自由基",HINT_MOL_CHARGE_TRIPLET:"三线态自由基",HINT_MOL_ELECTRON_LONEPAIR:"孤对电子",HINT_TEXT_BLOCK:"文字工具",HINT_IMAGE_BLOCK:"图像工具",HINT_TEXT_IMAGE:"文字与图像工具",HINT_MOL_FLEXCHAIN:"可变碳链",HINT_MOL_FLEXRING:"可变碳环",HINT_REPOSITORY_RING:"环工具",HINT_REPOSITORY_RING_3:"环丙烷",HINT_REPOSITORY_RING_4:"环丁烷",HINT_REPOSITORY_RING_5:"环戊烷",HINT_REPOSITORY_RING_6:"环己烷",HINT_REPOSITORY_RING_7:"环庚烷",HINT_REPOSITORY_RING_8:"环辛烷",HINT_REPOSITORY_RING_AR_6:"苯",HINT_REPOSITORY_RING_AR_5:"环戊二烯",HINT_REPOSITORY_CYCLOHEXANE_CHAIR1:"环己烷椅式1",HINT_REPOSITORY_CYCLOHEXANE_CHAIR2:"环己烷椅式2",HINT_REPOSITORY_CYCLOHEXANE_HARWORTH1:"环己烷Haworth式1",HINT_REPOSITORY_CYCLOHEXANE_HARWORTH2:"环己烷Haworth式2",HINT_REPOSITORY_CYCLOPENTANE_HARWORTH1:"环戊烷Haworth式1",HINT_REPOSITORY_CYCLOPENTANE_HARWORTH2:"环戊烷Haworth式2",HINT_REPOSITORY_SUBBOND_MARK:"取代基键",HINT_REPOSITORY_METHANE:"甲烷",HINT_REPOSITORY_FISCHER1:"单手性中心Fischer投影式",HINT_REPOSITORY_FISCHER2:"双手性中心Fischer投影式",HINT_REPOSITORY_FISCHER3:"三手性中心Fischer投影式",HINT_REPOSITORY_SAWHORSE_STAGGERED:"交叉式锯架式",HINT_REPOSITORY_SAWHORSE_ECLIPSED:"重叠式锯架式",HINT_REPOSITORY_ARROWLINE:"线段与箭头",HINT_REPOSITORY_GLYPH:"图符",HINT_REPOSITORY_GLYPH_LINE:"直线",HINT_REPOSITORY_GLYPH_OPEN_ARROW_LINE:"开放箭头线",HINT_REPOSITORY_GLYPH_TRIANGLE_ARROW_LINE:"三角箭头线",HINT_REPOSITORY_GLYPH_DI_OPEN_ARROW_LINE:"双向开放箭头线",HINT_REPOSITORY_GLYPH_DI_TRIANGLE_ARROW_LINE:"双向三角箭头线",HINT_REPOSITORY_GLYPH_REV_ARROW_LINE:"可逆箭头线",HINT_REPOSITORY_GLYPH_OPEN_ARROW_DILINE:"开放箭头双线",HINT_REPOSITORY_HEAT_SYMBOL:"加热符号",HINT_REPOSITORY_ADD_SYMBOL:"加号",HINT_TEXT_FORMAT:"设置文字格式",HINT_FONTNAME:"设置字体",HINT_FONTSIZE:"设置字号",HINT_PICK_COLOR:"选择颜色",HINT_TEXT_DIRECTION:"设置文字方向",HINT_TEXT_HORIZONTAL_ALIGN:"设置文字水平对齐方式",HINT_TEXT_VERTICAL_ALIGN:"设置文字水平垂直方式",HINT_CHARGE_NONE:"无电荷",HINT_ATOM_MODIFIER:"设置原子",HINT_BOND_MODIFIER:"设置键",HINT_CHARGE_MODIFIER:"设置电荷",HINT_USE_ATOM_CUSTOM_COLOR:"(使用原子特征颜色)",CAPTION_LOADDATA_DIALOG:"载入数据",CAPTION_SAVEDATA_DIALOG:"保存数据",CAPTION_DATA_FORMAT:"数据格式:",CAPTION_DATA_SRC:"在下方输入或粘贴数据:",CAPTION_LOADDATA_FROM_FILE:"载入文件",CAPTION_CHOOSEFILEFORMAT:"选择文件格式",CAPTION_SELECT_FORMAT:"选择格式:",CAPTION_PREVIEW_FILE_CONTENT:"预览文件内容…",S_DEF_SAVE_FILENAME:"Unnamed",CAPTION_ATOMLIST_PERIODIC_TABLE:"更多…",CAPTION_RGROUP:"取代基",CAPTION_VARIABLE_ATOM:"(包含)原子列表",CAPTION_VARIABLE_NOT_ATOM:"(不包含)原子列表",CAPTION_PSEUDOATOM:"赝原子(Pseudoatom)",CAPTION_DUMMY_ATOM:"虚原子(Dummy atom)",CAPTION_HETERO_ATOM:"杂原子",CAPTION_ANY_ATOM:"任意原子",CAPTION_ATOM:"原子",CAPTION_SUBGROUP:"基团",CAPTION_PERIODIC_TABLE_DIALOG:"元素周期表",CAPTION_PERIODIC_TABLE_DIALOG_SEL_ELEM:"选择元素",CAPTION_PERIODIC_TABLE_DIALOG_SEL_ELEMS:"选择多个元素",CAPTION_TEXTBLOCK_INIT:"在此输入文字",LEGEND_CAPTION:"图例",LEGEND_ELEM_SYMBOL:"元素符号",LEGEND_ELEM_NAME:"名称",LEGEND_ATOMIC_NUM:"原子序数",LEGEND_ATOMIC_WEIGHT:"原子量",CAPTION_2D:"2D",CAPTION_3D:"3D",CAPTION_AUTOSIZE:"自动尺寸",CAPTION_AUTOFIT:"自动缩放",CAPTION_SHOWSIZEINFO:"显示尺寸信息",CAPTION_LABEL_SIZE:"尺寸:",CAPTION_BACKGROUND_COLOR:"背景颜色:",CAPTION_WIDTH_HEIGHT:"宽:{0}、高:{1}",PLACEHOLDER_WIDTH:"宽",PLACEHOLDER_HEIGHT:"高",HINT_AUTOSIZE:"图形尺寸是否由对象大小自动调整",HINT_AUTOFIT:"对象是否填满图形区域",S_VALUE_DEFAULT:"(缺省)"}),Kekule.Localization.addResource("zh","ErrorMsg",{WIDGET_CLASS_NOT_FOUND:"控件类不存在",WIDGET_CAN_NOT_BIND_TO_ELEM:"控件{0}无法绑定到HTML元素<{1}>",LOAD_CHEMDATA_FAILED:"载入数据失败",FILE_API_NOT_SUPPORTED:"您当前的浏览器不支持HTML文件操作,请升级浏览器。",DRAW_BRIDGE_NOT_SUPPORTED:"您当前的浏览器不支持该绘图功能,请升级浏览器。",COMMAND_NOT_REVERSIBLE:"命令无法撤销",PAGE_INDEX_OUTOF_RANGE:"页面超出范围",FETCH_DATA_TIMEOUT:"加载数据超时",RENDER_TYPE_CHANGE_NOT_ALLOWED:"渲染类型无法改变",CAN_NOT_CREATE_EDITOR:"创建编辑器失败",CAN_NOT_SET_COORD_OF_CLASS:"无法设置对象{0}实例的坐标",CAN_NOT_SET_DIMENSION_OF_CLASS:"无法设置对象{0}实例的尺寸",CAN_NOT_MERGE_CONNECTORS:"化学键或连接符无法合并",NOT_A_VALID_ATOM:"无效的原子",INVALID_ATOM_SYMBOL:"原子符号无效",INVALID_OR_EMPTY_IMAGE:"空白或不合法的图像"});
"use strict";!function($jsRoot){functionemptyFunction(){}function__$A__(e){if(!e)return[];if(e.toArray)returne.toArray();for(vart=e.length||0,r=newArray(t);t--;)r[t]=e[t];returnr}"object"==typeofself?$jsRoot=self:"object"==typeofwindow&&window.document?$jsRoot=window:"object"==typeofglobal&&($jsRoot=global);varClass={createCore:function(){vare=null,t=__$A__(arguments);if(!t[0]&&t.length>1){varr=t[1],n=r&&r.CLASS_NAME;throw"Can not create new class"+(n?""+n:"")+" , base class not found"}functioni(){this.initialize.apply(this,arguments)}if(Object.isFunction(t[0])&&(e=t.shift()),Object.extend(i,Class.Methods),i.superclass=e,i.subclasses=[],e){vara=function(){};a.prototype=e.prototype,i.prototype=newa,e.subclasses.push(i)}for(varo=0;o<t.length;o++)i.addMethods(t[o]);returni.prototype.initialize||(i.prototype.initialize=emptyFunction),i.prototype.constructor=i,i},create:function(){returnClass.createCore.apply(this,arguments)},free:function(e){e.finalize&&e.finalize(),e=null}};Class.Methods={addMethods:function(e){if(!e)returnthis;vart=this.superclass&&this.superclass.prototype,r=Object.keys(e);Object.keys({toString:!0}).length||r.push("toString","valueOf");for(varn=function(){},i=0,a=r.length;i<a;i++){varo=r[i],s=e[o],l=Object.isFunction(s);if(t&&l&&"$super"===FunctionUtils.argumentNames(s)[0]){varu=s;(s=function(e){returnfunction(){return(t[e]||n).apply(this,arguments)}}(o).wrap(u)).valueOf=u.valueOf.bind(u),s.toString=u.toString.bind(u)}this.prototype[o]=s}returnthis}},Object.extend=function(e,t,r,n){if(r||n)for(variint){vara=t[i];r&&null==a||(n&&""===a||(e[i]=a))}elsefor(variint)e[i]=t[i];returne},Object.extendEx=function(e,t,r){varn=r||{};for(variint){vara=t[i];if((!n.ignoreUnsetValue||null!=a)&&(!n.ignoreEmptyString||""!==a)){varo=e[i];if(!r.preserveExisted||!o){vars=o&&o.constructor&&o.constructor.prototype,l=a&&a.constructor&&a.constructor.prototype;o&&"object"==typeofo&&s===l?Object.extendEx(o,a,r):e[i]=a}}}returne},Object._extendSupportMethods=function(e,t){returnObject.extendEx(e,t,{ignoreUnsetValue:!0,preserveExisted:!0})},Object.getCascadeFieldValue=function(e,t){varr,n;if(n=e.length&&e.splice?e:e.split("."),!t)t=$jsRoot||this;for(vari=0,a=n.length;i<a&&(r=t[n[i]]);++i)t=r;returnr},Object.setCascadeFieldValue=function(e,t,r,n){for(vari,a=r,o=0,s=(i=e.length&&e.splice?e:e.split(".")).length;o<s;++o){varl=i[o];if(o===s-1)returna[l]=t,t;varu=a[l];if(!u&&n&&(u={},a[l]=u),!u)return!1;a=u}},Object._inherit=function(e){null===e&&(e={});vart=typeofe;if(!DataType.isFunctionType(t)&&!DataType.isObjectType(t))throwTypeError();functionr(){}returnr.prototype=e,newr},Object.create||(Object.create=Object._inherit),Object.copyValues=function(e,t,r){if(r){for(varn=0,i=r.length;n<i;++n){vara=r[n],o=t[a];void0!==o&&(e[a]=o)}returne}returnObject.extend(e,t)},Object._extendSupportMethods(Object,{keys:function(e){vart=[];for(varrine)t.push(r);returnt},isFunction:function(e){return"function"==typeofe},isUndefined:function(e){returnvoid0===e}}),Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(e){vart=[];for(varrine)e.hasOwnProperty(r)&&t.push(r);returnt});varFunctionUtils={argumentNames:function(e){vart=((e.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)||[])[1]||"").replace(/\s+/g,"").split(",");return1!=t.length||t[0]?t:[]}};Object._extendSupportMethods(Function.prototype,{argumentNames:function(){vare=this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1].replace(/\s+/g,"").split(",");return1!=e.length||e[0]?e:[]},wrap:function(e){vart=this;returnfunction(){returne.apply(this,[t.bind(this)].concat(__$A__(arguments)))}},methodize:function(){if(this._methodized)returnthis._methodized;vare=this;returnthis._methodized=function(){vart=Array.prototype.slice.call(arguments);returnt.unshift(this),e.apply(null,t)}},bind:function(){if(arguments.length<2&&Object.isUndefined(arguments[0]))returnthis;vare=this,t=__$A__(arguments),r=t.shift();returnfunction(){returne.apply(r,t.concat(__$A__(arguments)))}},delay:function(){vare=this,t=__$A__(arguments),r=t.shift();returnwindow.setTimeout(function(){returne.apply(e,t)},r)},defer:function(){vare=this,t=__$A__(arguments);t.shift();returnwindow.setTimeout(function(){returne.apply(e,t)},10)}}),Array.prototype.indexOf||(Array.prototype.indexOf=function(e,t){t||(t=0);varr=this.length;for(t<0&&(t=r+t);t<r;t++)if(this[t]===e)returnt;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(e,t){t=isNaN(t)?this.length:(t<0?this.length+t:t)+1;varr=this.slice(0,t).reverse().indexOf(e);returnr<0?r:t-r-1}),Object._extendSupportMethods(String.prototype,{gsub:function(e,t){for(varr="",n=this;n.length>0;)void0===n.match(e)?(r+=n.slice(0,(void0).index),r+=t,n=n.slice((void0).index+(void0)[0].length)):(r+=n,n="");returnr},sub:function(e,t,r){returnr=Object.isUndefined(r)?1:r,this.gsub(e,function(e){return--r<0?e[0]:t(e)})},scan:function(e,t){returnthis.gsub(e,t),String(this)},truncate:function(e,t){returne=e||30,t=Object.isUndefined(t)?"...":t,this.length>e?this.slice(0,e-t.length)+t:String(this)},strip:function(){returnthis.replace(/^\s+/,"").replace(/\s+$/,"")},stripTags:function(){returnthis.replace(/<\/?[^>]+>/gi,"")},stripScripts:function(){returnthis.replace(newRegExp(Prototype.ScriptFragment,"img"),"")},extractScripts:function(){vare=newRegExp(Prototype.ScriptFragment,"img"),t=newRegExp(Prototype.ScriptFragment,"im");return(this.match(e)||[]).map(function(e){return(e.match(t)||["",""])[1]})},evalScripts:function(){returnthis.extractScripts().map(function(script){returneval(script)})},escapeHTML:function(){returnthis.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/\n/g,"<br />")},unescapeHTML:function(){returnthis.replace(/\<br \/\>/g,"\n").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")},toQueryParams:function(e){vart=this.strip().match(/([^?#]*)(#.*)?$/);returnt?t[1].split(e||"&").inject({},function(e,t){if((t=t.split("="))[0]){varr=decodeURIComponent(t.shift()),n=t.length>1?t.join("="):t[0];null!=n&&(n=decodeURIComponent(n)),rine?(Object.isArray(e[r])||(e[r]=[e[r]]),e[r].push(n)):e[r]=n}returne}):{}},toArray:function(){returnthis.split("")},succ:function(){returnthis.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)},times:function(e){returne<1?"":newArray(e+1).join(this)},camelize:function(){vare=this.split("-"),t=e.length;if(1==t)returne[0];for(varr="-"==this.charAt(0)?e[0].charAt(0).toUpperCase()+e[0].substring(1):e[0],n=1;n<t;n++)r+=e[n].charAt(0).toUpperCase()+e[n].substring(1);returnr},capitalize:function(){returnthis.charAt(0).toUpperCase()+this.substring(1).toLowerCase()},capitalizeFirst:function(){returnthis.charAt(0).toUpperCase()+this.substring(1)},underscore:function(){returnthis.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()},dasherize:function(){returnthis.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1-$2").replace(/([a-z\d])([A-Z])/g,"$1-$2").replace(/-/g,"-").toLowerCase()},inspect:function(e){vart=this.gsub(/[\x00-\x1f\\]/,function(e){vart=String.specialChar[e[0]];returnt||"\\u00"+e[0].charCodeAt().toPaddedString(2,16)});returne?'"'+t.replace(/"/g,'\\"')+'"':"'"+t.replace(/'/g,"\\'")+"'"},toJSON:function(){returnthis.inspect(!0)},unfilterJSON:function(e){returnthis.sub(e||Prototype.JSONFilter,"#{1}")},isJSON:function(){vare=this;return!e.blank()&&(e=this.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,""),/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/.test(e))},evalJSON:function(sanitize){varjson=this.unfilterJSON();try{if(!sanitize||json.isJSON())returneval("("+json+")")}catch(e){}thrownewSyntaxError("Badly formed JSON string: "+this.inspect())},include:function(e){returnthis.indexOf(e)>-1},startsWith:function(e){return0===this.indexOf(e)},endsWith:function(e){vart=this.length-e.length;returnt>=0&&this.lastIndexOf(e)===t},empty:function(){return""==this},blank:function(){return/^\s*$/.test(this)},interpolate:function(e,t){returnnewTemplate(this,t).evaluate(e)}}),Object._extendSupportMethods(String.prototype,{upperFirst:function(){returnthis.charAt(0).toUpperCase()+this.substring(1)},format:function(){for(vare=this,t=0;t<arguments.length;t++){varr=newRegExp("\\{"+t+"\\}","gi");e=e.replace(r,arguments[t])}returne},trim:function(){returnthis.replace(/^\s*|\s*$/g,"")},ltrim:function(){returnthis.replace(/^\s+/,"")},rtrim:function(){returnthis.replace(/\s+$/,"")},trimLeft:function(){returnthis.ltrim()},trimRight:function(){returnthis.rtrim()},pad:function(e,t,r){for(varn=t||"",i=[],a=0,o=e-this.length;a<o;++a)i.push(n);returnr?this+i.join(""):i.join("")+this},lpad:function(e,t){returnthis.pad(e,t,!1)},rpad:function(e,t){returnthis.pad(e,t,!0)},reverse:function(){for(vare=[],t=this.length-1;t>=0;--t)e.push(this.charAt(t));returne.join("")},toCharArray:function(){for(vare=[],t=0,r=this.length;t<r;++t)e.push(this.charAt(t));returne},hyphenize:function(e){e||(e="-");for(vart=this.length,r=[],n=0;n<t;++n){vari=this.charAt(n);0!==n&&i>="A"&&i<="Z"?r.push(e+i.toLowerCase()):r.push(i)}returnr.join("")}});varStringUtils={STRUE:"$TRUE",SFALSE:"$FALSE",SUNDEFINED:"$UNDEFINED",SNULL:"$NULL",SNAN:"$NAN",SPOSITIVE:"+",SNEGATIVE:"-",SDATEPREFIX:"@",isAllDigitalChar:function(e){for(vart=0,r=e.length;t<r;++t){varn=e.charAt(t);if(!(n>="0"&&n<="9")&&"."!=n)return!1}return!0},isNumbericStr:function(e){vart=Number(e);return!isNaN(t)},serializeValue:function(e,t){varr=t||[],n=DataType.getType(e);if(r.indexOf(n)>=0)returne.toString();if(null===e)returnStringUtils.SNULL;if(void0===e)returnStringUtils.SUNDEFINED;if(e!=e)returnStringUtils.SNAN;switch(n){case"boolean":returne?StringUtils.STRUE:StringUtils.SFALSE;case"number":caseDataType.INT:caseDataType.FLOAT:return(e>=0?StringUtils.SPOSITIVE:"")+e;caseDataType.DATE:returnStringUtils.SDATEPREFIX+e.toString();default:returne.toString()}},deserializeValue:function(e,t){if("string"!=typeofe)returne;switch(e){caseStringUtils.STRUE:return!0;caseStringUtils.SFALSE:return!1;caseStringUtils.SNULL:returnnull;caseStringUtils.SUNDEFINED:return;caseStringUtils.SNAN:returnNaN;default:if(t)switch(t){caseDataType.FLOAT:returnparseFloat(e);caseDataType.INT:returnparseInt(e);case"number":returnparseFloat(e);case"boolean":return!!e;default:returne}elseswitch(e.charAt(0)){caseStringUtils.SPOSITIVE:caseStringUtils.SNEGATIVE:varr=e.substring(1);returnStringUtils.isNumbericStr(r)?parseFloat(e):e;caseStringUtils.SDATEPREFIX:r=e.substr(1);try{varn=newDate(r);returnisNaN(n.getTime())?e:n}catch(t){returne}default:returne}}}};Object.extend(Date.prototype,{copyFrom:function(e){this.setFullYear(e.getFullYear(),e.getMonth(),e.getDate()),this.setTime(e.getTime())}}),Math.sqr||(Math.sqr=function(e){returne*e}),Math.sign||(Math.sign=function(e){returne>0?1:e<0?-1:0}),$jsRoot.Node||($jsRoot.Node={}),$jsRoot.Node.ELEMENT_NODE||Object.extend($jsRoot.Node,{ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12}),Class.PropertyScope={DEFAULT:3,PUBLISHED:3,PUBLIC:2,PRIVATE:1},Class.PropList=function(){this.props=[]},Class.PropList.prototype={addProperty:function(e,t){varr;returnt||(t={}),(r=this.getPropInfo(e))||(r={},this.props.push(r)),void0===(r=Object.extend(r,t)).serializable&&(r.serializable=!0),r.name=e,r},removeProperty:function(e){vart=this.indexOf(e);t>=0&&this.props.splice(t,1)},removePropAt:function(e){e>=0&&(this.props[e]&&this.props.splice(e,1))},getLength:function(){returnthis.props.length},indexOf:function(e){for(vart=0,r=this.props.length;t<r;++t)if(this.props[t].name===e)returnt;return-1},getPropInfoAt:function(e){returne>=0?this.props[e]:null},getPropInfo:function(e){vart=this.indexOf(e);returnthis.getPropInfoAt(t)},hasProperty:function(e){returnthis.indexOf(e)>=0},clear:function(){this.props.clear()},clone:function(){vare=newClass.PropList;returne.props=this.props.slice(),e},appendList:function(e){for(vart=0,r=e.props.length;t<r;++t)this.props.push(e.props[t])}},Class.PropList.prototype.constructor=Class.PropList,Class.EventHandlerList=function(){this.handlers=[],this._$flag_="KekuleEventList"},Class.EventHandlerList.prototype={add:function(e,t){t||(t=null),this.handlers.push({thisArg:t,handler:e})},remove:function(e,t){varr=this.indexesOf(e,t);if(r.length>0)for(varn=r.length-1;n>=0;--n)this.removeAt(r[n])},removeAt:function(e){for(vart=e,r=this.handlers.length;t<r;++t)this.handlers[t]=this.handlers[t+1];this.handlers.length=this.handlers.length-1},clear:function(){this.handlers=[]},getHandlerInfo:function(e){returnthis.handlers[e]},indexOf:function(e,t){for(varr=0,n=this.handlers.length;r<n;++r)if(this.handlers[r].handler==e){if(void0!==t&&this.handlers[r].thisArg===t)returnr;if(void0===t)returnr}return-1},indexesOf:function(e,t){for(varr=[],n=0,i=this.handlers.length;n<i;++n)this.handlers[n].handler==e&&(void0!==t&&this.handlers[n].thisArg===t?r.push(n):void0===t&&r.push(n));returnr},getLength:function(){returnthis.handlers.length}},Class.EventHandlerList.constructor=Class.EventHandlerList;varDataType={UNKNOWN:null,VARIANT:null,PRIMARY:"primary",UNDEFINED:"undefined",BOOL:"boolean",BOOLEAN:"boolean",NUMBER:"number",INT:"int",INTEGER:"int",FLOAT:"float",STRING:"string",ARRAY:"array",FUNCTION:"function",DATE:"date",HASH:"object",OBJECT:"object",OBJECTEX:"objectex",CLASS:"class",isSimpleType:function(e){returne==DataType.STRING||e==DataType.NUMBER||e==DataType.INT||e==DataType.FLOAT||e==DataType.BOOL||e==DataType.UNDEFINED||e==DataType.PRIMARY},isComplexType:function(e){return!(DataType.isSimpleType(e)||DataType.isFunctionType(e))},isFunctionType:function(e){returne==DataType.FUNCTION},isObjectType:function(e){returne==DataType.OBJECT},isDateType:function(e){returne==DataType.DATE},isObjectExType:function(e){vart=DataType.isComplexType(e)&&!DataType.isObjectType(e)&&!DataType.isDateType(e);if(t){varr=ClassEx.findClass(e);t=r&&ClassEx.isOrIsDescendantOf(r,ObjectEx)}returnt},getType:function(e){vart=typeofe;switch(t){case"undefined":returnDataType.UNDEFINED;case"function":returnDataType.FUNCTION;case"boolean":returnDataType.BOOL;case"string":returnDataType.STRING;case"number":returnMath.floor(e)==e?DataType.INT:DataType.FLOAT;case"object":returnthis.isDateValue(e)?DataType.DATE:DataType.isArrayValue(e)?DataType.ARRAY:ClassEx.isClass(e)?DataType.CLASS:DataType.isObjectExValue(e)&&e.getClassName?e.getClassName():DataType.OBJECT;default:returnt}},isSimpleValue:function(e){returnDataType.isSimpleType(typeofe)},isUndefinedValue:function(e){returnvoid0===e},isNullValue:function(e){returnnull===e},isFunctionValue:function(e){return"function"==typeofe},isObjectValue:function(e){return!!e&&("object"==typeofe&&!DataType.isArrayValue(e)&&!DataType.isDateValue(e))},isDateValue:function(e){return!!e&&("object"==typeofe&&void0!==e.getFullYear)},isArrayValue:function(e){return!!e&&("object"==typeofe&&void0!==e.length)},isObjectExValue:function(e){returneinstanceofObjectEx},createInstance:function(e){switch(e){caseDataType.UNDEFINED:return;caseDataType.DATE:returnnewDate;caseDataType.ARRAY:returnnewArray;caseDataType.OBJECT:returnnewObject;caseDataType.FUNCTION:returnnewFunction;default:returnnew(ClassEx.findClass(e.capitalizeFirst()))}}},__definePropertyAvailable__=Object.defineProperty&&function(){try{returnObject.defineProperty({},"x",{}),!0}catch(e){return!1}}(),ClassEx={isClass:function(e){return!!e&&!(!e.superclass&&!e.subclasses)},findClass:function(e,t){returnObject.getCascadeFieldValue(e,t||$jsRoot)},getClassName:function(e){returne?e.prototype.CLASS_NAME:null},getClassLocalName:function(e){vart=ClassEx.getClassName(e),r=t.lastIndexOf(".");returnr>=0?t.substring(r+1):t},getPrototype:function(e){returne.prototype},getSuperClass:function(e){returne.superclass||e.constructor.superclass},getSuperClassPrototype:function(e){returne.superclass?e.superclass.prototype:null},_getCommonSuperClass2:function(e,t){for(varr=e;r&&!ClassEx.isOrIsDescendantOf(t,r);)r=ClassEx.getSuperClass(r);returnr},getCommonSuperClass:function(e){if(!e||!e.length)returnnull;vart=e[0].getClass?e[0].getClass():null;if(!t)returnnull;for(varr=1,n=e.length;r<n;++r){vari=e[r].getClass?e[r].getClass():null;if(!i)returnnull;t=ClassEx._getCommonSuperClass2(t,i)}returnt},isDescendantOf:function(e,t){for(varr=ClassEx.getSuperClass(e);r&&r!==t;)r=ClassEx.getSuperClass(r);return!!r},isOrIsDescendantOf:function(e,t){returne===t||ClassEx.isDescendantOf(e,t)},isOrIsDescendantOfClasses:function(e,t){for(varr=0,n=t.length;r<n;++r)if(ClassEx.isOrIsDescendantOf(e,t[r]))return!0;return!1},_ensurePropertySystem:function(e){vart=ClassEx.getPrototype(e);if(t&&!t.hasOwnProperty("properties")){varr=ClassEx.getSuperClass(e);r&&ClassEx._ensurePropertySystem(r),ClassEx._createPropertyList(e),ClassEx._remapPropGetters(e),t.hasOwnProperty("initProperties")&&t.initProperties.apply(t)}},_createPropertyList:function(e){ClassEx.getPrototype(e).hasOwnProperty("properties")||(ClassEx.getPrototype(e).properties=newClass.PropList)},_remapPropGetters:function(e,t){for(varr=ClassEx.getPrototype(e),n=t||Object.getOwnPropertyNames(r),i=0,a=n.length;i<a;++i){varo=n[i];if(o.length>5&&o.startsWith("doGet")){vars=r[o];if("function"==typeofs){varl=o.charAt(5).toLowerCase()+o.substr(6);if(r.hasDirectProperty(l))continue;varu=ClassEx.getPropInfo(e,l);if(u&&u.getter)if(r["get"+l.capitalizeFirst()]=s,__definePropertyAvailable__){varp=Object.extend({},u.descriptor);p.get=s;try{Object.defineProperty(r,l,p)}catch(e){throwe}}}}}},getOwnPropList:function(e){vart=ClassEx.getPrototype(e);returnt?(t._initPropertySystem(),t.properties):null},getAllPropList:function(e){vart,r=ClassEx.getSuperClassPrototype(e);returnr?(t=r.getAllPropList().clone()).appendList(ClassEx.getOwnPropList(e)):t=ClassEx.getOwnPropList(e),t},getPropListOfScopes:function(e,t){varr,n=function(e,t){varr=ClassEx.getOwnPropList(e).clone();if(r)for(varn=r.getLength()-1;n>=0;--n){vari=r.getPropInfoAt(n).scope||Class.PropertyScope.DEFAULT;t.indexOf(i)<0&&r.removePropAt(n)}returnr},i=ClassEx.getSuperClass(e);returni?(r=ClassEx.getPropListOfScopes(i,t).clone()).appendList(n(e,t)):r=n(e,t),r},defineProp:function(e,t,r){returnClassEx._ensurePropertySystem(e),ClassEx.getPrototype(e).defineProp(t,r)},defineProps:function(e,t){ClassEx._ensurePropertySystem(e);for(varr=ClassEx.getPrototype(e),n=0,i=t.length;n<i;++n){vara=t[n],o=a.name,s=a;r.defineProp(o,s)}},getPropInfo:function(e,t,r){returnClassEx.getPrototype(e).getPropInfo(t,r)},defineEvent:function(e,t){returnClassEx.getPrototype(e).defineEvent(t)},getUnusedMethodName:function(e,t,r){for(varn=r||0,i=ClassEx.getPrototype(e),a=t+Number(n).toString();i[a];)++n,a=t+Number(n).toString();returna},extendMethod:function(e,t,r){varn=ClassEx.getPrototype(e),i=n[t],a=ClassEx.getUnusedMethodName(e,"__$changed$_"+t+"__");n[a]=i;varo,s=(o=a,function(){returnn[o].apply(this,arguments)}).wrap(r);n[t]=s,s.valueOf=r.valueOf.bind(r),s.toString=r.toString.bind(r)},extend:function(e,t){varr=ClassEx.getPrototype(e),n=ClassEx.getSuperClassPrototype(e),i=Object.keys(t);Object.keys({toString:!0}).length||i.push("toString","valueOf");for(vara=0,o=i.length;a<o;a++){vars=i[a],l=t[s];if("function"==typeofl){varu=FunctionUtils.argumentNames(l),p=u[0];if("$origin"==p){varc=l,f=r[s],d=ClassEx.getUnusedMethodName(e,"__$changed$_"+s+"__");r[d]=f,(l=function(e){returnfunction(){returnr[e].apply(this,arguments)}}(d).wrap(c)).valueOf=c.valueOf.bind(c),l.toString=c.toString.bind(c),u.shift(),p=u.first()}if("$super"==p){c=l;(l=function(e){returnfunction(){returnn[e].apply(this,arguments)}}(s).wrap(c)).valueOf=c.valueOf.bind(c),l.toString=c.toString.bind(c)}}r[s]=l}returnClassEx._remapPropGetters(e,i),e}},ObjectEx=Class.create({CLASS_NAME:"ObjectEx",EVENT_HANDLERS_FIELD:"__$__k__eventhandlers__$__",initialize:function(){this._initPropertySystem(),this.initPropValues(),this._updateStatus=0,this._childChangeEventSuppressed=!1,this._modifiedProps=[],this._finalized=!1,this.afterInitialization()},afterInitialization:function(){},finalize:function(){this._finalized||(this.doFinalize(),this.invokeEvent("finalize",{obj:this}),this[this.EVENT_HANDLERS_FIELD]=null,this._finalized=!0)},doFinalize:function(){},initProperties:function(){this.defineProp("enablePropValueGetEvent",{dataType:DataType.BOOL,serializable:!1,scope:Class.PropertyScope.PUBLIC}),this.defineProp("enablePropValueSetEvent",{dataType:DataType.BOOL,serializable:!1,scope:Class.PropertyScope.PUBLIC}),this.defineProp("enableObjectChangeEvent",{dataType:DataType.BOOL,serializable:!1,scope:Class.PropertyScope.PUBLIC}),this.defineProp("bubbleEvent",{dataType:DataType.BOOL,serializable:!1,scope:Class.PropertyScope.PUBLIC}),this.defineProp("suppressChildChangeEventInUpdating",{dataType:DataType.BOOL,serializable:!1,scope:Class.PropertyScope.PUBLIC}),this.defineProp("eventHandlers",{dataType:DataType.HASH,serializable:!1,scope:Class.PropertyScope.PRIVATE,setter:null,getter:function(){vare=this[this.EVENT_HANDLERS_FIELD];returne||(e={},this[this.EVENT_HANDLERS_FIELD]=e),e}})},initPropValues:function(){},getHigherLevelObj:function(){returnnull},saved:function(){},loaded:function(){},_initPropertySystem:function(){ClassEx._ensurePropertySystem(this.getClass())},_createPropertyList:function(){ClassEx._createPropertyList(this.getClass())},_remapPropGetters:function(){ClassEx._remapPropGetters(this.getClass())},getClass:function(){returnthis.constructor},getSuperClass:function(){returnthis.getClass().superclass},getClassName:function(){returnthis.getPrototype().CLASS_NAME},getClassLocalName:function(){returnClassEx.getClassLocalName(this.getClass())},getSerializationName:function(){returnthis.getClassName()},getPrototype:function(){returnthis.prototype?this.prototype:this.constructor.prototype},getSuperClassPrototype:function(){returnthis.constructor&&this.constructor.superclass?this.constructor.superclass.prototype:null},__changeClass__:function(e){vart=ClassEx.getPrototype(e);returnthis.prototype=t,this.__proto__=t,this.constructor=e,this.objectChange(["__proto__"]),this},getOwnPropList:function(){returnthis._initPropertySystem(),this.getPrototype().properties},getAllPropList:function(){vare,t=this.getSuperClassPrototype();returnt?(e=t.getAllPropList().clone()).appendList(this.getOwnPropList()):e=this.getOwnPropList().clone(),e},getPropListOfScopes:function(e){returnClassEx.getPropListOfScopes(this.getClass(),e)},getPropInfoHashKey:function(e){returnObjectEx._PROPINFO_HASHKEY_PREFIX+e},getDefPropStoreFieldName:function(e){returnObjectEx._PROP_STOREFIELD_PREFIX+e},defineProp:function(e,t){varr;void0===(r=t?Object.extend({},t):{}).serializable&&(r.serializable=!0),r.storeField=this.getDefPropStoreFieldName(e);varn,i,a=this.getOwnPropList().addProperty(e,r);if(null!==r.getter&&!1!==r.getter&&(n=this.createPropGetter(a,r.getter),a.getter=n.doGetterName),null!==r.setter&&!1!==r.setter&&(i=this.createPropSetter(a,r.setter),a.setter=i.doSetterName),this[this.getPropInfoHashKey(e)]=a,__definePropertyAvailable__){varo={enumerable:r.enumerable,configurable:!1};void0===o.enumerable&&(o.enumerable=!0),n&&(o.get=this[n.getterName]),i&&(o.set=this[i.setterName]),a.descriptor=o;try{Object.defineProperty(this,e,o)}catch(e){throwe}}returna},createPropGetter:function(e,t){varr=e.name.toString().upperFirst(),n="get"+r,i="doGet"+r,a=this[i];returna||(a=t||newFunction('return this["'+e.storeField+'"];'),this.getPrototype()[i]=a),this.getPrototype()[n]=a,{getterName:n,doGetterName:i}},createPropSetter:function(e,t){varr=e.name.toString(),n=r.upperFirst(),i="set"+n,a="doSet"+n,o=this[a];returnthis[a]||(o=t||newFunction("value",'this["'+e.storeField+'"] = value;'),this.getPrototype()[a]=o),this.getPrototype()[i]=function(){vare=arguments[0];returnthis[a].apply(this,arguments),this.notifyPropSet(r,e),this},{setterName:i,doSetterName:a}},hasProperty:function(e){returnnull!=this.getPropInfo(e)},hasDirectProperty:function(e){returnnull!=this.getPropInfo(e,!0)},getPropInfo:function(e,t){varr,n=e||"";t||(r=this[this.getPropInfoHashKey(n)||""]);if(!r&&!(r=this.getOwnPropList().getPropInfo(n))&&!t){vari=this.getSuperClassPrototype();r=i&&i.getPropInfo?i.getPropInfo(n):null}returnr},getPropertyDataType:function(e){vart=this.getPropInfo(e);returnt?t.dataType:null},isPropertySerializable:function(e){vart=this.getPropInfo(e),r=t&&t.serializable;returnvoid0===r||!!r},getPropStoreFieldValue:function(e){returnthis[ObjectEx._PROP_STOREFIELD_PREFIX+e]},getPropValue:function(e){vart,r=this.getPropInfo(e);if(r){if(r.getter){varn=Array.prototype.slice.call(arguments);n.shift(),t=this[r.getter].apply(this,n)}elset=this[r.storeField];returnt}returnnull},getPropValues:function(e){vart={};if(DataType.isArrayValue(e))for(varr=0,n=e.length;r<n;++r){t[i=e[r]]=this.getPropValue(i)}elseif(DataType.isObjectValue(e))for(variine)e.hasOwnProperty(i)&&"function"!=typeofe[i]&&(t[i]=this.getPropValue(i));returnt},setPropStoreFieldValue:function(e,t){this[ObjectEx._PROP_STOREFIELD_PREFIX+e]=t},setPropValue:function(e,t,r){varn=this.getPropInfo(e);returnn&&(n.setter?this[n.setter].apply(this,[t]):r&&(this[n.storeField]=t),this.notifyPropSet(e,t)),this},setPropValueX:function(){vare=Array.prototype.slice.call(arguments),t=e.shift(),r=this.getPropInfo(t);returnr&&(r.setter&&this[r.setter].apply(this,e),this.notifyPropSet(t,this.getPropValue(t))),this},setPropValues:function(e,t){for(varrine)if(e.hasOwnProperty(r)&&this.hasProperty(r)){varn=e[r];this.setPropValue(r,n,t)}returnthis},_isPropGetOrSetEvent:function(e){return"propValueGet"==e||"propValueSet"==e},notifyPropSet:function(e,t,r){this.isUpdating()?this._modifiedProps.indexOf(e)<0&&this._modifiedProps.push(e):this._isPropGetOrSetEvent(e)||this.isEventPropName(e)||(this.doPropChanged(e,t),this.getPropStoreFieldValue("enablePropValueSetEvent")&&this.invokeEvent("propValueSet",{propName:e,propValue:t}),r||this.objectChange([e]))},objectChange:function(e){this.doObjectChange(e),this.getEnableObjectChangeEvent()&&this.invokeEvent("change",{changedPropNames:e})},doObjectChange:function(e){},doPropChanged:function(e,t){},defineEvent:function(e){},eventNameToPropName:function(e){return"__event_"+e},isEventPropName:function(e){return"string"==typeofe&&e.indexOf("__event_")>=0},isEventHandlerList:function(e){returne&&"object"==typeofe&&einstanceofClass.EventHandlerList},getEventHandlerList:function(e){vart=this.getEventHandlers(),r=t[e];returnr||(r=newClass.EventHandlerList,t[e]=r),r},addEventListener:function(e,t,r){varn=this.getEventHandlerList(e);returnthis.isEventHandlerList(n)?("change"===e&&this.setEnableObjectChangeEvent(!0),n.add(t,r)):null},addOnceEventListener:function(e,t,r){varn=this,i=function(a){n.removeEventListener(e,i,r),t(a)};returnthis.addEventListener(e,i,r)},removeEventListener:function(e,t,r){varn=this.getEventHandlerList(e);if(this.isEventHandlerList(n))returnn.remove(t,r)},on:function(e,t,r){returnthis.addEventListener(e,t,r)},once:function(e,t,r){returnthis.addOnceEventListener(e,t,r)},off:function(e,t,r){returnthis.removeEventListener(e,t,r)},invokeEvent:function(e,t){t?(t.name=e,t.target=this):t={name:e,target:this},t.stopImmediatePropagation||(t.stopImmediatePropagation=this._eventStopImmediatePropagation),t.stopPropagation||(t.stopPropagation=this._eventCancelBubble),t.preventDefault||(t.preventDefault=this._eventPreventDefault),this.dispatchEvent(e,t)},_eventStopImmediatePropagation:function(){this._stopImmediatePropagation=!0,this._cancelBubble=!0},_eventCancelBubble:function(){this._cancelBubble=!0},_eventPreventDefault:function(){this._preventDefault=!0},relayEvent:function(e,t){t.currentTarget=this,"change"===e&&this.getSuppressChildChangeEventInUpdating()&&this.isUpdating()?this._childChangeEventSuppressed=!0:this.dispatchEvent(e,t)},dispatchEvent:function(e,t){for(varr=this.getEventHandlerList(e),n=0,i=r.getLength();n<i&&!t._stopImmediatePropagation;++n){vara=r.getHandlerInfo(n);a.handler.apply(a.thisArg,[t])}if(!t._cancelBubble&&this.getBubbleEvent()){varo=this.getHigherLevelObj();o&&o.relayEvent&&o.relayEvent(e,t)}},stopEventPropagation:function(e){e.cancelBubble=!0},overwriteMethod:function(e,t){varr=this,n=this[e];returnthis[e]=function(){vare=Array.prototype.slice.call(arguments);returne.unshift(n&&n.bind(r)),t.apply(r,e)},this},assign:function(e){returne.assignTo(this)},assignTo:function(e){vart={};this.saveObj(t,"json"),e.loadObj(t,"json")},clone:function(){vare=new(this.getClass());returnthis.assignTo(e),e},beginUpdate:function(){++this._updateStatus},endUpdate:function(){if(--this._updateStatus,this.checkUpdateStatus(),!this.isUpdating()){vare=this._modifiedProps||[];this._modifiedProps=[],this._childChangeEventSuppressed&&(e.push("[children]"),this._childChangeEventSuppressed=!1),this.doEndUpdate(e)}},doEndUpdate:function(e){if(e.length){if(this.getPropStoreFieldValue("enablePropValueSetEvent"))for(vart=0,r=e.length;t<r;++t){varn=e[t],i=this.getPropValue(n);this.notifyPropSet(n,i,!0)}this.objectChange(e)}},isUpdating:function(){returnthis._updateStatus>0},isPropUpdated:function(e){returnthis._modifiedProps.indexOf(e)>=0},checkUpdateStatus:function(){this._updateStatus<=0&&(this._updateStatus=0)},copyPropsTo:function(e){for(vart=this.getAllPropList(),r=0,n=t.getLength();r<n;++r){vari=t.getPropInfoAt(r).name;if(e.hasProperty(i)){vara=this.getPropValue(i);e.setPropValue(i,a,!0)}}}});ObjectEx._PROPINFO_HASHKEY_PREFIX="__$propInfo__",ObjectEx._PROP_STOREFIELD_PREFIX="__$__k__p__",$jsRoot.Class=Class,$jsRoot.ClassEx=ClassEx,$jsRoot.ObjectEx=ObjectEx,$jsRoot.DataType=DataType,DataType.StringUtils=StringUtils}(this),function($root){varJsonUtility={DEF_LOAD_TIMEOUT:2e4,FILE_EXT_JSON:".json",FILE_EXT_JSON_JS_WRAPPER:".jsonjs",DEF_SERIALIZE_TO_JSCODE_VARNAME:"__jsonvar__",parse:function(e){returnJSON.parse(e)},parseFromJsWrappedCode:function(code,jsVarName){returnjsVarName||(jsVarName=JsonUtility.DEF_SERIALIZE_TO_JSCODE_VARNAME),eval(code),JsonUtility.parse(eval(jsVarName))},load:function(e,t,r){returnWebShow.URL.getFileExt(e).toLowerCase()==JsonUtility.FILE_EXT_JSON_JS_WRAPPER?JsonUtility.loadJsWrapper(e,t,r):JsonUtility.loadJson(e,t,r)},loadJsWrapper:function(url,callback,options){varloptions=options||{},wrapperVarName=loptions.wrapperVarName||JsonUtility.DEF_SERIALIZE_TO_JSCODE_VARNAME;loptions.timeout||(loptions.timeout=JsonUtility.DEF_LOAD_TIMEOUT);varrunCallBack=function(e,t){callback&&callback(e,t)},wrapperCallback=function(src,isSuccess){varjsonObj=null;if(isSuccess){varwrapperVar=eval(wrapperVarName);wrapperVar&&(jsonObj="string"==typeofwrapperVar?JsonUtility.parse(wrapperVar):wrapperVar),runCallBack(jsonObj,!0)}elserunCallBack(null,!1)};WebShow.ScriptLoader.load(url,wrapperCallback,loptions)},loadJson:function(e,t,r){varn=r||{};n.timeout||(n.timeout=JsonUtility.DEF_LOAD_TIMEOUT),n.resultType=WebShow.FileLoader.ResultType.TEXT,n.extractBody=!1;(newWebShow.XHRLoader).load(e,function(e,r,n){if(r){vari=JsonUtility.parse(e);t(i,!0)}elset(null,!1)},n)},serializeToStr:function(e,t){returnt&&t.prettyPrint?JSON.stringify(e,null,t.indentSpaces||2):JSON.stringify(e)},serializeToJsCode:function(e,t,r){r||(r="'"),t||(t=JsonUtility.DEF_SERIALIZE_TO_JSCODE_VARNAME);varn=JsonUtility.serializeToStr(e),i=newRegExp(r,"g");return"var "+t+" = "+r+(n=n.replace(i,"\\"+r))+r}},XmlUtility={DOM_PARSER:null,DOM_IMPLEMENTATION:null,XML_SERIALIZER:null,DEF_INCLUDE_TAG_NAME:"include",DEF_INCLUDE_SRC_ATTRIB:"src",DEF_LOAD_TIMEOUT:2e4,DEF_BYPASS_ROOT_ELEM:!0,DEF_SERIALIZE_TO_JSCODE_VARNAME:"__xmlStr__",FILE_EXT_XML:".xml",FILE_EXT_XML_JS_WRAPPER:".xmljs",newDocument:function(e,t){if(e||(e=""),t||(t=""),XmlUtility.DOM_IMPLEMENTATION)returnr=(newXmlUtility.DOM_IMPLEMENTATION).createDocument(t,e,null);if("undefined"!=typeofdocument){if(document.implementation&&document.implementation.createDocument)returnr=document.implementation.createDocument(t,e,null);if("undefined"!=typeofActiveXObject){varr=newActiveXObject("MSXML2.DOMDocument");if(e){varn="",i=e,a=e.indexOf(":");-1!=a&&(n=e.substring(0,a),i=e.substring(a+1));varo="<"+(n?n+":":"")+i+(t?(n?" xmlns:":" xmlns")+n+'="'+t+'"':"")+"/>";r.loadXML(o)}returnr}}},parse:function(e){if(XmlUtility.DOM_PARSER)return(newXmlUtility.DOM_PARSER).parseFromString(e,"application/xml");if("undefined"!=typeofdocument){if("undefined"!=typeofDOMParser)return(newDOMParser).parseFromString(e,"application/xml");if("undefined"!=typeofActiveXObject){vart=XmlUtility.newDocument();returnt.loadXML(e),t}varr="data:text/xml;charset=utf-8,"+encodeURIComponent(e),n=newXMLHttpRequest;returnn.open("GET",r,!1),n.send(null),n.responseXML}},load:function(e,t,r){returne.lastIndexOf(XmlUtility.FILE_EXT_XML_JS_WRAPPER)===e.length-XmlUtility.FILE_EXT_XML_JS_WRAPPER.length?XmlUtility.loadHelper.loadJsWrapper(e,t,r):(r||(r={disableInclude:!1}),r.disableInclude?XmlUtility.loadHelper.loadSimple(e,t,r.timeout):XmlUtility.loadHelper.loadAndHandleIncludeElement(e,t,r))},loadHelper:{loadSimple:function(e,t,r){varn=null!=t;if(null==r&&(r=XmlUtility.DEF_LOAD_TIMEOUT),document.implementation&&document.implementation.createDocument){vari=newXMLHttpRequest,a=null;r&&(a=setTimeout(function(){o(null,!1)},r));varo=function(e,r){a&&clearTimeout(a),t&&t(e,r)};n&&(i.onreadystatechange=function(){if(4==i.readyState){vare=i.responseXML;e&&e.documentElement?o(e,!0):o(null,!1)}});try{i.open("get",e,n),i.send(null)}catch(e){WebShow.reportError(e),o(null,!1)}vars=i.responseXML;returns&&s.documentElement?s:null}returnXmlUtility.loadHelper.loadSimpleViaDoc(e,t)},loadSimpleViaDoc:function(e,t){varr=null!=t,n=XmlUtility.newDocument("dummy_dummy_dummy_dummy");returnn.async=r,r&&(n.onreadystatechange=function(){4==n.readyState&&(n.documentElement&&"dummy_dummy_dummy_dummy"!=n.documentElement.tag?t(n,!0):t(n,!1))}),n.load(e),n},loadAndHandleIncludeElement:function(e,t,r){varn;if(n=r?r.timeout:null,null==t){vari=XmlUtility.loadHelper.loadSimple(e,null,n);returni&&i.documentElement?(XmlUtility.loadHelper.handleIncludedXmlInElement(i.documentElement,null,r),i):null}returnXmlUtility.loadHelper.loadSimple(e,function(e,n){n?XmlUtility.loadHelper.handleIncludedXmlInElement(e.documentElement,function(r){t(e,!0)},r):t(e,!1)},n)},loadJsWrapper:function(url,callback,options){options=options||{};varwrapperVarName=options.wrapperVarName||XmlUtility.DEF_SERIALIZE_TO_JSCODE_VARNAME,loadTimeout=options.timeout;null==loadTimeout&&(loadTimeout=XmlUtility.DEF_LOAD_TIMEOUT);varrunCallBack=function(e,t){callback&&callback(e,t)},wrapperCallback=function(src,isSuccess){if(isSuccess){varxmlContent=eval(wrapperVarName),doc=XmlUtility.parse(xmlContent);runCallBack(doc,!0)}elserunCallBack(null,!1)};options.timeout=loadTimeout,WebShow.ScriptLoader.load(url,wrapperCallback,options)},getIncludeElements:function(e,t){returnt||(t=XmlUtility.DEF_INCLUDE_TAG_NAME),e.getElementsByTagName(t)},handleIncludedXmlInElement:function(e,t,r){r||(r={});varn=r.includeTagName||XmlUtility.DEF_INCLUDE_TAG_NAME,i=r.srcAttribName||XmlUtility.DEF_INCLUDE_SRC_ATTRIB,a=null!=r.bypassRootElem?r.bypassRootElem:XmlUtility.DEF_BYPASS_ROOT_ELEM,o=null==t,s=XmlUtility.getXmlDocUrl(e.ownerDocument),l=XmlUtility.loadHelper.getIncludeElements(e,n);if(!i)varu=null;varp,c=null,f=0,d=l.length;if(d<=0)returnt&&t(0),null;for(varh=l.length-1;h>=0;--h)(u=(c=l[h]).getAttribute(i))&&(u=WebShow.URL.mergePath(u,s),o?(p=XmlUtility.loadHelper.loadSimple(u))&&XmlUtility.loadHelper.insertIncludedSection(p,c,a):XmlUtility.loadHelper.loadSimple(u,function(e,r,n){n&&r&&(p=r,XmlUtility.loadHelper.insertIncludedSection(p,e,a)),++f==d&&t(f)}.bind(this,c)));returne},insertIncludedSection:function(e,t,r){varn=[];if(r)for(vari=e.documentElement.firstChild;i;)i.nodeType==Node.ELEMENT_NODE&&n.push(i),i=i.nextSibling;elsen.push(e.documentElement);for(vara=t.ownerDocument,o=(a.documentElement,0),s=n.length;o<s;++o){varl=n[o];a.importNode&&(l=a.importNode(l,!0)),t.parentNode.insertBefore(l,t)}returnt.parentNode.removeChild(t),a}},serializeNode:function(e,t){if(t&&t.prettyPrint)returnXmlUtility.serializeNodePretty(e);if(XmlUtility.XML_SERIALIZER)return(newXmlUtility.XML_SERIALIZER).serializeToString(e);if("undefined"!=typeofXMLSerializer)return(newXMLSerializer).serializeToString(e);if(e.xml)returne.xml;throw"XML.serialize is not supported or can't serialize "+e},serializeNodePretty:function(e){try{returnXmlUtility.XML_SERIALIZER?(newXmlUtility.XML_SERIALIZER).serializeToString(e).toXMLString():(newXMLSerializer).serializeToString(e).toXMLString()}catch(t){returnXmlUtility.serializeNode(e)}},serializeNodeToJsCode:function(e,t,r){r||(r="'"),t||(t=XmlUtility.DEF_SERIALIZE_TO_JSCODE_VARNAME);varn=XmlUtility.serializeNode(e),i=newRegExp(r,"g");return"var "+t+" = "+r+(n=n.replace(i,"\\"+r))+r+";"},parseFromJsWrappedCode:function(code,jsVarName){eval(code);varxmlText=eval(jsVarName);returnXmlUtility.parse(xmlText)},getXmlDocUrl:function(e){returne.url||e.documentURI||e.URL||e.location}};DataType.JsonUtility=JsonUtility,DataType.XmlUtility=XmlUtility}(this),function(){vare=Class.create({CLASS_NAME:"ObjSerializer",serializeValue:function(e){returne},deserializeValue:function(e,t){returne},propNameToStorageName:function(e){returne},storageNameToPropName:function(e){returne},getObjCustomSaveMethod:function(e){returne.doSaveObj},getObjCustomLoadMethod:function(e){returne.doLoadObj},getObjCustomPropSaveMethod:function(e){returne.doSaveProp},getObjCustomPropLoadMethod:function(e){returne.doLoadProp},isUndefined:function(e){returnDataType.isUndefinedValue(e)},isNull:function(e){returnnull===e},isNaN:function(e){returne!=e},isFunction:function(e){returnDataType.isFunctionValue(e)},isArray:function(e){returnDataType.isArrayValue(e)},isDate:function(e){returnDataType.isDateValue(e)},isObject:function(e){returnDataType.isObjectValue(e)},isObjectEx:function(e){returnDataType.isObjectExValue(e)},isSimpleType:function(e){vart=typeofe;return"string"==t||"number"==t||"boolean"==t||"undefined"==t||this.isNull(e)},isComplexType:function(e){return!this.isSimpleType(e)},createChildStorageNode:function(e,t,r){},appendArrayItemStorageNode:function(e,t,r){},getNameForArrayItemStorageNode:function(e){returnthis.getDefaultArrayItemStorageName()},getChildStorageNode:function(e,t){},getAllArrayItemStorageNodes:function(e){},getAllStoredStorageNames:function(e){},setStorageNodeExplicitType:function(e,t){},getStorageNodeExplicitType:function(e){},getStorageNodeName:function(e){},isComplexStorageNode:function(e){},isComplexArrayItemStorageNode:function(e){},isSimpleStorageNode:function(e){},getValueExplicitType:function(e){returneinstanceofObjectEx?e.getClassName():this.isObject(e)?DataType.OBJECT:this.isArray(e)?DataType.ARRAY:this.isDate(e)?DataType.DATE:typeofe},getDefaultArrayItemStorageName:function(){return"item"},getDefaultDateStorageName:function(){return"date"},save:function(e,t,r){if("object"==typeofe){varn=this.getObjCustomSaveMethod(e);if(n)returnn(e,t,this)}vari=this.doSave(e,t,r||{});returni&&this.isFunction(e.saved)&&e.saved(),i},doSave:function(e,t,r){return"object"==typeofe&&(einstanceofObjectEx?this.doSaveObjectEx(e,t,r):this.isArray(e)?this.doSaveArray(e,t):this.isDate(e)?this.doSaveDate(e,t):this.doSaveSimpleObject(e,t)),this.setStorageNodeExplicitType(t,this.getValueExplicitType(e)),e},doSaveSimpleObject:function(e,t){for(varrine)if(e.hasOwnProperty(r)){varn,i=e[r];this.isComplexType(i)&&(n=this.getValueExplicitType(i)),this.doSaveFieldValue(e,r,i,t,n)}},doSaveArray:function(e,t){for(varr=0,n=e.length;r<n;++r){vari=e[r],a=this.getNameForArrayItemStorageNode(i);if(this.isComplexType(i)){varo=this.appendArrayItemStorageNode(t,this.propNameToStorageName(a),this.isArray(i));this.setStorageNodeExplicitType(o,this.getValueExplicitType(i)),this.save(i,o)}elsethis.doAppendArrayItemSimpleValue(this.serializeValue(i),typeofi,t)}},doSaveDate:function(e,t){varr=e.toUTCString();this.doSaveSimpleValue(e,this.propNameToStorageName(this.getDefaultDateStorageName()),this.serializeValue(r),DataType.DATE,t)},doSaveObjectEx:function(e,t,r){for(varn=e.getAllPropList(),i=r.propFilter,a=0,o=n.getLength();a<o;++a){vars=n.getPropInfoAt(a);if(!i||i(s,e)){varl=this.getObjCustomPropSaveMethod(e),u=!1;if(l&&(u=l(e,s,t,this)),!u)if(s.serializable)("function"==typeofs.serializable?s.serializable.apply(e):s.serializable)&&this.doSaveObjectExProp(e,s,t,r)}}},doSaveObjectExProp:function(e,t,r,n){vari,a=t.name,o=t.dataType,s=e.getPropValue(a);(n.saveDefaultValues||s!==t.defaultValue)&&(sinstanceofObjectEx?s.getClassName()!=o&&(i=s.getClassName()):this.isComplexType(s)&&(i=this.getValueExplicitType(s))==o&&(i=void0),this.doSaveFieldValue(e,a,s,r,i))},doSaveFieldValue:function(e,t,r,n,i){if("function"!=typeofr)if(this.isComplexType(r)){vara=this.createChildStorageNode(n,this.propNameToStorageName(t),this.isArray(r));i&&this.setStorageNodeExplicitType(a,i),this.save(r,a)}elsethis.doSaveSimpleValue(e,this.propNameToStorageName(t),this.serializeValue(r),this.getValueExplicitType(r),n)},doSaveSimpleValue:function(e,t,r,n,i){},doAppendArrayItemSimpleValue:function(e,t,r){},load:function(e,t){if(!e){varr=this.getStorageNodeExplicitType(t);if(!r)returnthis.doLoadUntypedNode?this.doLoadUntypedNode(t):null;e=DataType.createInstance(r)}if("object"==typeofe){varn=this.getObjCustomLoadMethod(e);if(n)returnn(e,t,this)}vari=this.doLoad(e,t);returni&&this.isFunction(e.loaded)&&e.loaded(),i},doLoad:function(e,t){this.getStorageNodeExplicitType(t);if("object"==typeofe)if(einstanceofObjectEx){e.beginUpdate();try{e=this.doLoadObjectEx(e,t)}finally{e.endUpdate()}}elsee=this.isArray(e)?this.doLoadArray(e,t):this.isDate(e)?this.doLoadDate(e,t):this.doLoadSimpleObject(e,t);returne},doLoadArray:function(e,t){for(varr=this.getAllArrayItemStorageNodes(t),n=0,i=r.length;n<i;++n){vara=r[n];if(this.isComplexArrayItemStorageNode(a)){varo,s=this.getStorageNodeExplicitType(a)||this.getStorageNodeName(a);s?(o=DataType.createInstance(s),this.load(o,a)):(o={},this.load(o,a)),e.push(o)}else{varl=this.deserializeValue(this.doGetArrayItemSimpleStorageValue(a));e.push(l)}}returne},doLoadDate:function(e,t){varr=this.propNameToStorageName(this.getDefaultDateStorageName()),n=this.doLoadSimpleValue(e,r,DataType.DATE,t);if(n){vari=newDate(n);returne.copyFrom(i),e}},doLoadSimpleObject:function(e,t){for(varr=this.getAllStoredStorageNames(t),n=0,i=r.length;n<i;++n){vara=r[n],o=this.storageNameToPropName(a),s=this.getChildStorageNode(t,a);if(s){varl,u=this.getStorageNodeExplicitType(s);l=u?DataType.createInstance(u):{},this.load(l,s),e[o]=l}else{varp=this.doLoadSimpleValue(e,a,null,t);e[o]=p}}returne},doLoadObjectEx:function(e,t){for(varr=e.getAllPropList(),n=0,i=r.getLength();n<i;++n){vara=r.getPropInfoAt(n);if(a.serializable){varo=this.getObjCustomPropLoadMethod(e),s=!1;o&&(s=o(e,a,t,this)),s||this.doLoadObjectExProp(e,a,t)}}returne},doLoadObjectExProp:function(e,t,r){varn=t.name,i=t.dataType,a=this.doLoadFieldValue(e,n,r,i);null!=a&&e.setPropValue(n,a,!0)},doLoadFieldValue:function(e,t,r,n){vari,a=!1;if(DataType.isComplexType(n)){varo=this.getChildStorageNode(r,this.propNameToStorageName(t));if(o){vars=this.getStorageNodeExplicitType(o);i=s&&s!=n?DataType.createInstance(s):DataType.createInstance(n),this.load(i,o),a=!0}}return!DataType.isSimpleType(n)&&a||(i=this.doLoadSimpleValue(e,this.propNameToStorageName(t),n,r)),i},doLoadSimpleValue:function(e,t,r,n){vari=this.doLoadSimpleStorageValue(t,n);returnthis.deserializeValue(i,r)},doLoadSimpleStorageValue:function(e,t){},doGetArrayItemSimpleStorageValue:function(e){}}),t=Class.create(e,{CLASS_NAME:"JsonObjSerializer",TYPE_TAG_NAME:"__type__",createChildStorageNode:function(e,t,r){varn=r?[]:{};returne[t]=n,n},appendArrayItemStorageNode:function(e,t,r){varn=r?[]:{};returne.push(n),n},getChildStorageNode:function(e,t){varr=e[t];returnthis.isSimpleType(r)&&(r=null),r},getAllArrayItemStorageNodes:function(e){returnArray.prototype.slice.call(e)},getAllStoredStorageNames:function(e){vart=[];for(varrine)e.hasOwnProperty(r)&&r!=this.TYPE_TAG_NAME&&t.push(r);returnt},isComplexStorageNode:function(e){returnthis.isComplexType(e)},isComplexArrayItemStorageNode:function(e){returnthis.isComplexStorageNode(e)},isSimpleStorageNode:function(e){returnthis.isSimpleType(e)},setStorageNodeExplicitType:function(e,t){this.isArray(e)||(e[this.TYPE_TAG_NAME]=t)},getStorageNodeExplicitType:function(e){vart=e[this.TYPE_TAG_NAME]||null;return!t&&this.isArray(e)?DataType.ARRAY:t},doSaveSimpleValue:function(e,t,r,n,i){i[t]=r},doAppendArrayItemSimpleValue:function(e,t,r){returnr.push(e)},doLoadSimpleStorageValue:function(e,t){returnt[e]},doLoadUntypedNode:function(e){returne},doGetArrayItemSimpleStorageValue:function(e){returne}}),r=Class.create(e,{CLASS_NAME:"XmlObjSerializer",TYPE_TAG_NAME:"dataType",UNSUIT_PROPNAME_PREFIX:"__.",getLocalName:function(e){returne.localName||e.baseName||e.nodeName},getElemTextValue:function(e){for(vart="",r=0,n=e.childNodes.length;r<n;++r)e.childNodes[r].nodeType==Node.TEXT_NODE&&(t+=e.childNodes[r].nodeValue);returnt},serializeValue:function(e){returnDataType.StringUtils.serializeValue(e)},deserializeValue:function(e,t){returnDataType.StringUtils.deserializeValue(e,t)},propNameToStorageName:function(e){vart=e.toString().charAt(0).toLowerCase();return"_"===t||t>="a"&&t<="z"?e:this.UNSUIT_PROPNAME_PREFIX+e},storageNameToPropName:function(e){return"string"!=typeofe?e:0===e.indexOf(this.UNSUIT_PROPNAME_PREFIX)?e.substr(this.UNSUIT_PROPNAME_PREFIX.length):e},createChildStorageNode:function(e,t,r){varn=e.ownerDocument.createElement(t);returne.appendChild(n),n},appendArrayItemStorageNode:function(e,t,r){returnthis.createChildStorageNode(e,t,r)},getAllArrayItemStorageNodes:function(e){for(vart=[],r=0,n=e.childNodes.length;r<n;++r){vari=e.childNodes[r];i.nodeType==Node.ELEMENT_NODE&&t.push(i)}returnt},getAllStoredStorageNames:function(e){for(vart=[],r=0,n=e.childNodes.length;r<n;++r){vari=e.childNodes[r];i.nodeType==Node.ELEMENT_NODE&&this.getLocalName(i)!=this.TYPE_TAG_NAME&&t.push(this.getLocalName(i))}for(r=0,n=e.attributes.length;r<n;++r){vara=e.attributes[r];this.getLocalName(a)!=this.TYPE_TAG_NAME&&t.push(this.getLocalName(a))}returnt},getChildStorageNode:function(e,t){for(varr=null,n=0,i=e.childNodes.length;n<i;++n){vara=e.childNodes[n];a.nodeType==Node.ELEMENT_NODE&&this.getLocalName(a)==t&&(r=a)}returnr},isComplexStorageNode:function(e){returne.nodeType==Node.ELEMENT_NODE},isComplexArrayItemStorageNode:function(e){returnthis.isComplexStorageNode(e)&&e.attributes.length&&!this.getElemTextValue(e).trim()},isSimpleStorageNode:function(e){returne.nodeType==Node.ATTRIBUTE_NODE},setStorageNodeExplicitType:function(e,t){e.setAttribute(this.TYPE_TAG_NAME,t)},getStorageNodeExplicitType:function(e){returne.getAttribute(this.TYPE_TAG_NAME)||null},getStorageNodeName:function(e){vart=e.tagName;returnt==this.getDefaultArrayItemStorageName()?null:t},doSaveSimpleObject:function($super,e,t){$super(e,t)},doSaveArray:function($super,e,t){$super(e,t)},doSaveSimpleValue:function(e,t,r,n,i){i.setAttribute(t,r)},doAppendArrayItemSimpleValue:function(e,t,r){varn=this.appendArrayItemStorageNode(r,this.propNameToStorageName(this.getDefaultArrayItemStorageName()),!1),i=n.ownerDocument.createTextNode(e);n.appendChild(i)},doLoadSimpleStorageValue:function(e,t){returnt.getAttribute(e)},doGetArrayItemSimpleStorageValue:function(e){returnthis.getElemTextValue(e)}}),n={_serializerClasses:{},_defaultName:null,registerSerializer:function(e,t,r){vari="string"==typeoft?ClassEx.findClass(t):t;n._serializerClasses[e]=i,r&&(n._defaultName=e)},getSerializer:function(e){vart=e||n._defaultName;if(t){varr=n._serializerClasses[t];returnr?newr:null}returnnull}};n.registerSerializer("json",t,!0),n.registerSerializer("xml",r),Class.ObjSerializerFactory=n,ClassEx.extend(ObjectEx,{saveObj:function(e,t,r){return(t?"string"==typeoft?n.getSerializer(t):t:n.getSerializer()).save(this,e,r)},loadObj:function(e,t){varr,i;r=t?"string"==typeoft?n.getSerializer(t):t:n.getSerializer(),this.beginUpdate();try{i=r.load(this,e)}finally{this.endUpdate()}returni}}),Object.extend(ClassEx,{saveObj:function(e,t,r,i){return(r?"string"==typeofr?n.getSerializer(r):r:n.getSerializer()).save(e,t,i)},loadObj:function(e,t,r){return(r?"string"==typeofr?n.getSerializer(r):r:n.getSerializer()).load(e,t)}}),Object.extend(DataType,{valueToJson:function(e,t){if(DataType.isSimpleValue(e))returnJSON.stringify(e);varr=DataType.isArrayValue(e)?[]:{};returnClassEx.saveObj(e,r,"json",t),JSON.stringify(r)},jsonToValue:function(e){vart=JSON.parse(e);return!t||DataType.isSimpleValue(t)?t:ClassEx.loadObj(null,t,"json")}})}();varKekule={LIBNAME:"Kekule.js",LIBNAME_CORE:"Kekule",VERSION:"0.9.5.20022800",LOADED:!1,_afterLoadSysProcedures:[],_afterLoadUserProcedures:[],PROP_AUTO_TITLE:!0,_loaded:function(){if(!Kekule.LOADED){Kekule.LOADED=!0;for(vare=Kekule._afterLoadSysProcedures;e.length;){(t=e.shift())&&t()}for(e=Kekule._afterLoadUserProcedures;e.length;){vart;(t=e.shift())&&t()}varr=Kekule.$jsRoot&&Kekule.$jsRoot.document;if(r&&r.createEvent&&r.body&&r.body.dispatchEvent){varn=r.createEvent("Event");n.initEvent("kekuleload",!0,!0),r.body.dispatchEvent(n)}}},_isLoaded:function(){returnKekule.LOADED},_registerAfterLoadSysProc:function(e){e&&(Kekule.LOADED?e():Kekule._afterLoadSysProcedures.push(e))},_ready:function(e){e&&(Kekule.LOADED?e():Kekule._afterLoadUserProcedures.push(e))}};Kekule._registerAfterLoadProc=Kekule._ready,Kekule.$jsRoot=this,"object"==typeofself?Kekule.$jsRoot=self:"object"==typeofwindow&&window&&window.document?Kekule.$jsRoot=window:"object"==typeofglobal&&(Kekule.$jsRoot=global),Kekule.$jsRoot.Kekule=Kekule,Kekule.$document=this&&this.document||null,Kekule.scriptSrcInfo||(Kekule.scriptSrcInfo=Kekule.$jsRoot.__$kekule_load_info__),Kekule.scriptSrcInfo&&Kekule.scriptSrcInfo.language&&(Kekule.language=Kekule.scriptSrcInfo.language),!Kekule.scriptSrcInfo&&Kekule.$jsRoot.document&&(Kekule.scriptSrcInfo=function(){for(vare=/^(.*\/?)kekule\..*\.js(\?.*)?$/,t=document.getElementsByTagName("script"),r=t.length-1;r>=0;--r){varn=t[r];if(n.src){vari=n.src.match(e);if(i){vara=i[2];returna&&(a=a.substr(1)),{src:n.src,path:i[1],paramStr:a,useMinFile:!0}}}}returnnull}()),Kekule.environment={isNode:!("object"!=typeofprocess||"object"!=typeofprocess.versions||void0===process.versions.node),isWeb:!("object"!=typeofwindow||!window.document)},Kekule.scriptSrcInfo&&(Kekule.environment.nodeModule=Kekule.scriptSrcInfo.nodeModule,Kekule.environment.nodeRequire=Kekule.scriptSrcInfo.nodeRequire),Kekule.$jsRoot.__$kekule_scriptfile_utils__&&(Kekule._ScriptFileUtils_=Kekule.$jsRoot.__$kekule_scriptfile_utils__,Kekule.ScriptFileUtils=Kekule._ScriptFileUtils_,Kekule.modules=function(e,t){varr=[];r="string"==typeofe?[e]:e;varn=Kekule.scriptSrcInfo;if(n){Kekule._ScriptFileUtils_.loadModuleScriptFiles(r,n.useMinFile,Kekule.scriptSrcInfo.path,n,function(e){t&&t(e)});returnthis}returnthis},Kekule.loadModules=Kekule.modules),Kekule.getScriptPath=function(){returnKekule.scriptSrcInfo.path},Kekule.getScriptSrc=function(){returnKekule.scriptSrcInfo.src},Kekule.getStyleSheetPath=function(){vare=Kekule.scriptSrcInfo;returne.useMinFile?e.path:e.path+"widgets/"},Kekule.getStyleSheetUrl=function(){returnKekule.getStyleSheetPath()+"themes/default/kekule.css"},Kekule.$jsRoot&&Kekule.$jsRoot.addEventListener&&Kekule.$jsRoot.postMessage&&Kekule.$jsRoot.addEventListener("message",function(e){"kekule-sys-info-query"===e.data&&Kekule.$jsRoot.postMessage({msg:"kekule-sys-info-result",libName:Kekule.LIBNAME,version:Kekule.VERSION},"*")},!1),Kekule.Dev={},Kekule.Class=Class,Kekule.ClassEx=ClassEx,Kekule.ObjectEx=ObjectEx,Kekule.DataType=DataType;