{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-markus/src/external/jstree/jstree.js"],"names":["jQuery","factory","define","amd","module","exports","require","$","undefined","jstree","instance_counter","ccp_node","ccp_mode","ccp_inst","themes_loaded","src","attr","document","window","setImmediate","Promise","cb","arg","resolve","then","version","defaults","plugins","path","indexOf","replace","idregex","root","create","el","options","tmp","core","opt","extend","each","i","k","plugin","data","init","destroy","off","id","_id","_cnt","_wrk","_data","themes","name","dots","icons","ellipsis","selected","last_error","working","worker_queue","focused","reference","needle","obj","tagName","nodeType","length","ignore","closest","inst","_model","fn","is_method","args","Array","prototype","slice","call","arguments","result","instance","method","apply","isPlainObject","expr","pseudos","createPseudo","search","a","hasClass","strings","check_callback","error","noop","animation","multiple","url","dir","stripes","variant","responsive","expand_selected_onload","worker","force_text","dblclick_toggle","loaded_state","restore_focus","compute_elements_positions","keyboard","e","type","currentTarget","trigger","preventDefault","is_open","close_node","o","get_parent","get_node","children","focus","get_prev_dom","is_closed","open_node","_firstChild","get_next_dom","open_all","get_container_ul","filter","element","find","last","edit","deco","opts","Child","changed","force_full_redraw","redraw_timeout","default_state","loaded","opened","disabled","parent","parents","children_d","state","addClass","settings","ready","rtl","css","bind","original_container_html","clone","addBack","contents","nodeValue","test","remove","html","get_string","li_height","first","outerHeight","node","_create_prototype_node","load_node","keep_html","URL","revokeObjectURL","empty","teardown","_node","createElement","_temp1","_temp2","setAttribute","className","appendChild","_kbevent_to_func","keys","parts","ctrlKey","push","altKey","shiftKey","which","sort","join","toLowerCase","kb","hasOwnProperty","split","unbind","removeClass","removeData","word","tout","was_click","on","target","selection","getSelection","sel","removeAllRanges","collapse","proxy","Date","toggle_node","activeElement","activate_node","f","r","status","setTimeout","j","concat","vakata","array_unique","clearTimeout","chr","String","fromCharCode","col","ind","index","end","v","text","RegExp","charAt","s","set_theme","set_theme_variant","not","act","hover_node","dehover_node","ev","triggerHandler","get_container","key","isFunction","dom","firstChild","nextSibling","_nextSibling","_previousSibling","previousSibling","as_dom","ex","get_path","glue","ids","p","get_text","reverse","strict","offsetHeight","parentsUntil","nextAll","lastChild","parentNode","get_children_dom","is_parent","is_loaded","is_loading","loading","is_leaf","callback","l","c","isArray","_load_nodes","array_filter","inArray","failed","_load_node","m","has_children","hidden","nodes","is_callback","force_reload","done","load_all","to_load","t","notTextOrCommentNode","_append_html_data","d","parseHTML","ajax","x","getResponseHeader","_append_json_data","JSON","stringify","fail","_node_changed","dat","is","par","chd","dpc","_parse_model_from_html","redraw","force_processing","parse","w","func","add","df","t_id","t_cnt","rslt","parse_flat","ps","unshift","tid","toString","icon","li_attr","a_attr","href","original","parse_nest","postMessage","cnt","mod","Blob","Worker","createObjectURL","onmessage","terminate","shift","attributes","trim","_parse_model_from_flat_json","_parse_model_from_json","_redraw","fe","redraw_node","append","full","draw_children","deep","force_render","old","last_sibling","querySelector","getElementById","substr","cloneNode","childNodes","style","backgroundImage","backgroundPosition","backgroundSize","createTextNode","innerHTML","insertBefore","scrollTop","scrollLeft","t1","t2","ok","stop","slideDown","display","_open_to","slideUp","original_obj","_this","close_all","get","is_disabled","enable_node","disable_node","is_hidden","hide_node","skip_redraw","show_node","hide_all","show_all","last_clicked","metaKey","is_selected","deselect_node","deselect_all","select_node","supress_event","prevent_open","th","array_remove_item","select_all","get_selected","map","get_top_selected","get_bottom_selected","get_state","open","set_state","initial_selection","res","n","scroll","left","top","isEmptyObject","refresh","skip_loading","forget_state","refresh_node","set_id","set_text","val","get_json","flat","get_icon","no_data","no_state","no_li_attr","no_a_attr","no_id","no_children","create_node","pos","match","check","rename_node","delete_node","lft","array_remove","chk","more","chc","is_multi","functions","move_node","origin","old_par","old_pos","new_par","old_ins","copy_node","cut","copy","get_buffer","can_paste","paste","clear_buffer","default_text","h1","h2","cancel","width","appendTo","body","stopImmediatePropagation","nv","replaceWith","value","blur","Math","min","fontFamily","fontSize","fontWeight","fontStyle","fontStretch","fontVariant","letterSpacing","wordSpacing","select","one","theme_name","theme_url","get_theme","variant_name","get_theme_variant","show_stripes","hide_stripes","toggle_stripes","show_dots","hide_dots","toggle_dots","show_icons","hide_icons","toggle_icons","show_ellipsis","hide_ellipsis","toggle_ellipsis","set_icon","removeAttr","hide_icon","show_icon","with_values","array","from","splice","item","b","deselected","_i","checkbox","visible","three_state","whole_node","keep_selected_style","cascade","tie_selection","cascade_to_disabled","cascade_to_hidden","uto","_undetermined","checked","self","cur","selectedIds","_cascade_new_checked_state","temp","undetermined","stillSelectedIds","allIds","old_parent","get_undetermined","tt","tmp2","checkbox_disabled","show_checkboxes","checkboxes","hide_checkboxes","toggle_checkboxes","is_undetermined","disable_checkbox","enable_checkbox","is_checked","uncheck_node","check_node","checkedState","selectedNodeIds","selectedChildrenIds","selectedChildIds","childId","get_checked_descendants","check_all","uncheck_all","get_checked","get_top_checked","get_bottom_checked","conditionalselect","contextmenu","show_at_node","items","new_node","last_ts","cto","ey","show_contextmenu","pageX","pageY","context","hide","originalEvent","changedTouches","clientX","clientY","abs","y","offset","_show_contextmenu","cls","show","right_to_left","vakata_context","position_x","position_y","is_visible","hide_onmouseleave","_trigger","event_name","_execute","_disabled","action","_parse","str","sep","separator_before","_class","shortcut","title","label","shortcut_label","submenu","separator_after","_show_submenu","xl","outerWidth","h","height","dw","dh","position","cond","detach","to","contains","relatedTarget","siblings","prevAll","click","dnd","open_timeout","is_draggable","check_while_dragging","always_copy","inside_pos","drag_selection","touch","large_drop_target","large_drag_target","use_html5","drg","elm","mlt","txt","escape","start","lastmv","laster","lastev","opento","marker","isDifferentNode","event","ins","ref","rel","op","pr","ip","tm","is_copy","pn","helper","dataTransfer","dropEffect","z","_get","_clean","div","strip","vakata_dnd","is_down","is_drag","helper_w","init_x","init_y","scroll_l","scroll_t","scroll_e","scroll_i","is_touch","scroll_speed","scroll_proximity","helper_left","helper_top","threshold","threshold_touch","clearInterval","drag","_scroll","init_only","setInterval","elementFromPoint","pageXOffset","pageYOffset","unselectable","onselectstart","touchAction","msTouchAction","MozUserSelect","wh","ww","dt","dl","ht","hl","scrollHeight","scrollWidth","offsetWidth","parseInt","massload","toLoad","fuzzy","case_sensitive","show_only_matches","show_only_matches_children","close_opened_onclear","search_leaves_only","search_callback","opn","som","smc","hdn","skip_async","inside","clear_search","lastRequest","abort","caseSensitive","ii","isMatch","querySelectorAll","pattern","MATCH_LOCATION","location","MATCH_DISTANCE","distance","MATCH_THRESHOLD","patternLen","matchmask","pattern_alphabet","match_bitapScore","mask","accuracy","proximity","score","textLen","scoreThreshold","bestLoc","binMin","binMid","binMax","lastRd","finish","rd","charMatch","locations","lastIndexOf","floor","max","events","ttl","preserve_loaded","save_state","restore_state","st","storage","set","sec","clear_state","del","localStorage","setItem","getItem","removeItem","types","_delete_ids","get_rules","max_children","valid_children","max_depth","get_type","rules","set_type","old_type","old_icon","unique","trim_whitespace","duplicate","counter","wholerow","Event","customElements","Object","proto","HTMLElement","createdCallback","getAttribute"],"mappings":"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","file":"jstree.js","sourcesContent":["/*globals jQuery, define, module, exports, require, window, document, postMessage */\nimport jQuery from 'src/external/jquery.js';\n(function (factory) {\n\t\"use strict\";\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['jquery'], factory);\n\t}\n\telse if(typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = factory(require('jquery'));\n\t}\n\telse {\n\t\tfactory(jQuery);\n\t}\n}(function ($, undefined) {\n\t\"use strict\";\n/*!\n * jsTree 3.3.11\n * http://jstree.com/\n *\n * Copyright (c) 2014 Ivan Bozhanov (http://vakata.com)\n *\n * Licensed same as jquery - under the terms of the MIT License\n *   http://www.opensource.org/licenses/mit-license.php\n */\n/*!\n * if using jslint please allow for the jQuery global and use following options:\n * jslint: loopfunc: true, browser: true, ass: true, bitwise: true, continue: true, nomen: true, plusplus: true, regexp: true, unparam: true, todo: true, white: true\n */\n/*jshint -W083 */\n\n\t// prevent another load? maybe there is a better way?\n\tif($.jstree) {\n\t\treturn;\n\t}\n\n\t/**\n\t * ### jsTree core functionality\n\t */\n\n\t// internal variables\n\tvar instance_counter = 0,\n\t\tccp_node = false,\n\t\tccp_mode = false,\n\t\tccp_inst = false,\n\t\tthemes_loaded = [],\n\t\tsrc = $('script:last').attr('src'),\n\t\tdocument = window.document; // local variable is always faster to access then a global\n\n\tvar setImmediate = window.setImmediate;\n\tvar Promise = window.Promise;\n\tif (!setImmediate && Promise) {\n\t\t// Good enough approximation of setImmediate\n\t\tsetImmediate = function (cb, arg) {\n\t\t\tPromise.resolve(arg).then(cb);\n\t\t};\n\t}\n\n\t/**\n\t * holds all jstree related functions and variables, including the actual class and methods to create, access and manipulate instances.\n\t * @name $.jstree\n\t */\n\t$.jstree = {\n\t\t/**\n\t\t * specifies the jstree version in use\n\t\t * @name $.jstree.version\n\t\t */\n\t\tversion : '3.3.11',\n\t\t/**\n\t\t * holds all the default options used when creating new instances\n\t\t * @name $.jstree.defaults\n\t\t */\n\t\tdefaults : {\n\t\t\t/**\n\t\t\t * configure which plugins will be active on an instance. Should be an array of strings, where each element is a plugin name. The default is `[]`\n\t\t\t * @name $.jstree.defaults.plugins\n\t\t\t */\n\t\t\tplugins : []\n\t\t},\n\t\t/**\n\t\t * stores all loaded jstree plugins (used internally)\n\t\t * @name $.jstree.plugins\n\t\t */\n\t\tplugins : {},\n\t\tpath : src && src.indexOf('/') !== -1 ? src.replace(/\\/[^\\/]+$/,'') : '',\n\t\tidregex : /[\\\\:&!^|()\\[\\]<>@*'+~#\";.,=\\- \\/${}%?`]/g,\n\t\troot : '#'\n\t};\n\t\n\t/**\n\t * creates a jstree instance\n\t * @name $.jstree.create(el [, options])\n\t * @param {DOMElement|jQuery|String} el the element to create the instance on, can be jQuery extended or a selector\n\t * @param {Object} options options for this instance (extends `$.jstree.defaults`)\n\t * @return {jsTree} the new instance\n\t */\n\t$.jstree.create = function (el, options) {\n\t\tvar tmp = new $.jstree.core(++instance_counter),\n\t\t\topt = options;\n\t\toptions = $.extend(true, {}, $.jstree.defaults, options);\n\t\tif(opt && opt.plugins) {\n\t\t\toptions.plugins = opt.plugins;\n\t\t}\n\t\t$.each(options.plugins, function (i, k) {\n\t\t\tif(i !== 'core') {\n\t\t\t\ttmp = tmp.plugin(k, options[k]);\n\t\t\t}\n\t\t});\n\t\t$(el).data('jstree', tmp);\n\t\ttmp.init(el, options);\n\t\treturn tmp;\n\t};\n\t/**\n\t * remove all traces of jstree from the DOM and destroy all instances\n\t * @name $.jstree.destroy()\n\t */\n\t$.jstree.destroy = function () {\n\t\t$('.jstree:jstree').jstree('destroy');\n\t\t$(document).off('.jstree');\n\t};\n\t/**\n\t * the jstree class constructor, used only internally\n\t * @private\n\t * @name $.jstree.core(id)\n\t * @param {Number} id this instance's index\n\t */\n\t$.jstree.core = function (id) {\n\t\tthis._id = id;\n\t\tthis._cnt = 0;\n\t\tthis._wrk = null;\n\t\tthis._data = {\n\t\t\tcore : {\n\t\t\t\tthemes : {\n\t\t\t\t\tname : false,\n\t\t\t\t\tdots : false,\n\t\t\t\t\ticons : false,\n\t\t\t\t\tellipsis : false\n\t\t\t\t},\n\t\t\t\tselected : [],\n\t\t\t\tlast_error : {},\n\t\t\t\tworking : false,\n\t\t\t\tworker_queue : [],\n\t\t\t\tfocused : null\n\t\t\t}\n\t\t};\n\t};\n\t/**\n\t * get a reference to an existing instance\n\t *\n\t * __Examples__\n\t *\n\t *\t// provided a container with an ID of \"tree\", and a nested node with an ID of \"branch\"\n\t *\t// all of there will return the same instance\n\t *\t$.jstree.reference('tree');\n\t *\t$.jstree.reference('#tree');\n\t *\t$.jstree.reference($('#tree'));\n\t *\t$.jstree.reference(document.getElementByID('tree'));\n\t *\t$.jstree.reference('branch');\n\t *\t$.jstree.reference('#branch');\n\t *\t$.jstree.reference($('#branch'));\n\t *\t$.jstree.reference(document.getElementByID('branch'));\n\t *\n\t * @name $.jstree.reference(needle)\n\t * @param {DOMElement|jQuery|String} needle\n\t * @return {jsTree|null} the instance or `null` if not found\n\t */\n\t$.jstree.reference = function (needle) {\n\t\tvar tmp = null,\n\t\t\tobj = null;\n\t\tif(needle && needle.id && (!needle.tagName || !needle.nodeType)) { needle = needle.id; }\n\n\t\tif(!obj || !obj.length) {\n\t\t\ttry { obj = $(needle); } catch (ignore) { }\n\t\t}\n\t\tif(!obj || !obj.length) {\n\t\t\ttry { obj = $('#' + needle.replace($.jstree.idregex,'\\\\$&')); } catch (ignore) { }\n\t\t}\n\t\tif(obj && obj.length && (obj = obj.closest('.jstree')).length && (obj = obj.data('jstree'))) {\n\t\t\ttmp = obj;\n\t\t}\n\t\telse {\n\t\t\t$('.jstree').each(function () {\n\t\t\t\tvar inst = $(this).data('jstree');\n\t\t\t\tif(inst && inst._model.data[needle]) {\n\t\t\t\t\ttmp = inst;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn tmp;\n\t};\n\t/**\n\t * Create an instance, get an instance or invoke a command on a instance.\n\t *\n\t * If there is no instance associated with the current node a new one is created and `arg` is used to extend `$.jstree.defaults` for this new instance. There would be no return value (chaining is not broken).\n\t *\n\t * If there is an existing instance and `arg` is a string the command specified by `arg` is executed on the instance, with any additional arguments passed to the function. If the function returns a value it will be returned (chaining could break depending on function).\n\t *\n\t * If there is an existing instance and `arg` is not a string the instance itself is returned (similar to `$.jstree.reference`).\n\t *\n\t * In any other case - nothing is returned and chaining is not broken.\n\t *\n\t * __Examples__\n\t *\n\t *\t$('#tree1').jstree(); // creates an instance\n\t *\t$('#tree2').jstree({ plugins : [] }); // create an instance with some options\n\t *\t$('#tree1').jstree('open_node', '#branch_1'); // call a method on an existing instance, passing additional arguments\n\t *\t$('#tree2').jstree(); // get an existing instance (or create an instance)\n\t *\t$('#tree2').jstree(true); // get an existing instance (will not create new instance)\n\t *\t$('#branch_1').jstree().select_node('#branch_1'); // get an instance (using a nested element and call a method)\n\t *\n\t * @name $().jstree([arg])\n\t * @param {String|Object} arg\n\t * @return {Mixed}\n\t */\n\t$.fn.jstree = function (arg) {\n\t\t// check for string argument\n\t\tvar is_method\t= (typeof arg === 'string'),\n\t\t\targs\t\t= Array.prototype.slice.call(arguments, 1),\n\t\t\tresult\t\t= null;\n\t\tif(arg === true && !this.length) { return false; }\n\t\tthis.each(function () {\n\t\t\t// get the instance (if there is one) and method (if it exists)\n\t\t\tvar instance = $.jstree.reference(this),\n\t\t\t\tmethod = is_method && instance ? instance[arg] : null;\n\t\t\t// if calling a method, and method is available - execute on the instance\n\t\t\tresult = is_method && method ?\n\t\t\t\tmethod.apply(instance, args) :\n\t\t\t\tnull;\n\t\t\t// if there is no instance and no method is being called - create one\n\t\t\tif(!instance && !is_method && (arg === undefined || $.isPlainObject(arg))) {\n\t\t\t\t$.jstree.create(this, arg);\n\t\t\t}\n\t\t\t// if there is an instance and no method is called - return the instance\n\t\t\tif( (instance && !is_method) || arg === true ) {\n\t\t\t\tresult = instance || false;\n\t\t\t}\n\t\t\t// if there was a method call which returned a result - break and return the value\n\t\t\tif(result !== null && result !== undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\t// if there was a method call with a valid return value - return that, otherwise continue the chain\n\t\treturn result !== null && result !== undefined ?\n\t\t\tresult : this;\n\t};\n\t/**\n\t * used to find elements containing an instance\n\t *\n\t * __Examples__\n\t *\n\t *\t$('div:jstree').each(function () {\n\t *\t\t$(this).jstree('destroy');\n\t *\t});\n\t *\n\t * @name $(':jstree')\n\t * @return {jQuery}\n\t */\n\t$.expr.pseudos.jstree = $.expr.createPseudo(function(search) {\n\t\treturn function(a) {\n\t\t\treturn $(a).hasClass('jstree') &&\n\t\t\t\t$(a).data('jstree') !== undefined;\n\t\t};\n\t});\n\n\t/**\n\t * stores all defaults for the core\n\t * @name $.jstree.defaults.core\n\t */\n\t$.jstree.defaults.core = {\n\t\t/**\n\t\t * data configuration\n\t\t *\n\t\t * If left as `false` the HTML inside the jstree container element is used to populate the tree (that should be an unordered list with list items).\n\t\t *\n\t\t * You can also pass in a HTML string or a JSON array here.\n\t\t *\n\t\t * It is possible to pass in a standard jQuery-like AJAX config and jstree will automatically determine if the response is JSON or HTML and use that to populate the tree.\n\t\t * In addition to the standard jQuery ajax options here you can suppy functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node is being loaded, the return value of those functions will be used.\n\t\t *\n\t\t * The last option is to specify a function, that function will receive the node being loaded as argument and a second param which is a function which should be called with the result.\n\t\t *\n\t\t * __Examples__\n\t\t *\n\t\t *\t// AJAX\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'data' : {\n\t\t *\t\t\t\t'url' : '/get/children/',\n\t\t *\t\t\t\t'data' : function (node) {\n\t\t *\t\t\t\t\treturn { 'id' : node.id };\n\t\t *\t\t\t\t}\n\t\t *\t\t\t}\n\t\t *\t\t});\n\t\t *\n\t\t *\t// direct data\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'data' : [\n\t\t *\t\t\t\t'Simple root node',\n\t\t *\t\t\t\t{\n\t\t *\t\t\t\t\t'id' : 'node_2',\n\t\t *\t\t\t\t\t'text' : 'Root node with options',\n\t\t *\t\t\t\t\t'state' : { 'opened' : true, 'selected' : true },\n\t\t *\t\t\t\t\t'children' : [ { 'text' : 'Child 1' }, 'Child 2']\n\t\t *\t\t\t\t}\n\t\t *\t\t\t]\n\t\t *\t\t}\n\t\t *\t});\n\t\t *\n\t\t *\t// function\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'data' : function (obj, callback) {\n\t\t *\t\t\t\tcallback.call(this, ['Root 1', 'Root 2']);\n\t\t *\t\t\t}\n\t\t *\t\t});\n\t\t *\n\t\t * @name $.jstree.defaults.core.data\n\t\t */\n\t\tdata\t\t\t: false,\n\t\t/**\n\t\t * configure the various strings used throughout the tree\n\t\t *\n\t\t * You can use an object where the key is the string you need to replace and the value is your replacement.\n\t\t * Another option is to specify a function which will be called with an argument of the needed string and should return the replacement.\n\t\t * If left as `false` no replacement is made.\n\t\t *\n\t\t * __Examples__\n\t\t *\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'strings' : {\n\t\t *\t\t\t\t'Loading ...' : 'Please wait ...'\n\t\t *\t\t\t}\n\t\t *\t\t}\n\t\t *\t});\n\t\t *\n\t\t * @name $.jstree.defaults.core.strings\n\t\t */\n\t\tstrings\t\t\t: false,\n\t\t/**\n\t\t * determines what happens when a user tries to modify the structure of the tree\n\t\t * If left as `false` all operations like create, rename, delete, move or copy are prevented.\n\t\t * You can set this to `true` to allow all interactions or use a function to have better control.\n\t\t *\n\t\t * __Examples__\n\t\t *\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'check_callback' : function (operation, node, node_parent, node_position, more) {\n\t\t *\t\t\t\t// operation can be 'create_node', 'rename_node', 'delete_node', 'move_node', 'copy_node' or 'edit'\n\t\t *\t\t\t\t// in case of 'rename_node' node_position is filled with the new node name\n\t\t *\t\t\t\treturn operation === 'rename_node' ? true : false;\n\t\t *\t\t\t}\n\t\t *\t\t}\n\t\t *\t});\n\t\t *\n\t\t * @name $.jstree.defaults.core.check_callback\n\t\t */\n\t\tcheck_callback\t: false,\n\t\t/**\n\t\t * a callback called with a single object parameter in the instance's scope when something goes wrong (operation prevented, ajax failed, etc)\n\t\t * @name $.jstree.defaults.core.error\n\t\t */\n\t\terror\t\t\t: $.noop,\n\t\t/**\n\t\t * the open / close animation duration in milliseconds - set this to `false` to disable the animation (default is `200`)\n\t\t * @name $.jstree.defaults.core.animation\n\t\t */\n\t\tanimation\t\t: 200,\n\t\t/**\n\t\t * a boolean indicating if multiple nodes can be selected\n\t\t * @name $.jstree.defaults.core.multiple\n\t\t */\n\t\tmultiple\t\t: true,\n\t\t/**\n\t\t * theme configuration object\n\t\t * @name $.jstree.defaults.core.themes\n\t\t */\n\t\tthemes\t\t\t: {\n\t\t\t/**\n\t\t\t * the name of the theme to use (if left as `false` the default theme is used)\n\t\t\t * @name $.jstree.defaults.core.themes.name\n\t\t\t */\n\t\t\tname\t\t\t: false,\n\t\t\t/**\n\t\t\t * the URL of the theme's CSS file, leave this as `false` if you have manually included the theme CSS (recommended). You can set this to `true` too which will try to autoload the theme.\n\t\t\t * @name $.jstree.defaults.core.themes.url\n\t\t\t */\n\t\t\turl\t\t\t\t: false,\n\t\t\t/**\n\t\t\t * the location of all jstree themes - only used if `url` is set to `true`\n\t\t\t * @name $.jstree.defaults.core.themes.dir\n\t\t\t */\n\t\t\tdir\t\t\t\t: false,\n\t\t\t/**\n\t\t\t * a boolean indicating if connecting dots are shown\n\t\t\t * @name $.jstree.defaults.core.themes.dots\n\t\t\t */\n\t\t\tdots\t\t\t: true,\n\t\t\t/**\n\t\t\t * a boolean indicating if node icons are shown\n\t\t\t * @name $.jstree.defaults.core.themes.icons\n\t\t\t */\n\t\t\ticons\t\t\t: true,\n\t\t\t/**\n\t\t\t * a boolean indicating if node ellipsis should be shown - this only works with a fixed with on the container\n\t\t\t * @name $.jstree.defaults.core.themes.ellipsis\n\t\t\t */\n\t\t\tellipsis\t\t: false,\n\t\t\t/**\n\t\t\t * a boolean indicating if the tree background is striped\n\t\t\t * @name $.jstree.defaults.core.themes.stripes\n\t\t\t */\n\t\t\tstripes\t\t\t: false,\n\t\t\t/**\n\t\t\t * a string (or boolean `false`) specifying the theme variant to use (if the theme supports variants)\n\t\t\t * @name $.jstree.defaults.core.themes.variant\n\t\t\t */\n\t\t\tvariant\t\t\t: false,\n\t\t\t/**\n\t\t\t * a boolean specifying if a reponsive version of the theme should kick in on smaller screens (if the theme supports it). Defaults to `false`.\n\t\t\t * @name $.jstree.defaults.core.themes.responsive\n\t\t\t */\n\t\t\tresponsive\t\t: false\n\t\t},\n\t\t/**\n\t\t * if left as `true` all parents of all selected nodes will be opened once the tree loads (so that all selected nodes are visible to the user)\n\t\t * @name $.jstree.defaults.core.expand_selected_onload\n\t\t */\n\t\texpand_selected_onload : true,\n\t\t/**\n\t\t * if left as `true` web workers will be used to parse incoming JSON data where possible, so that the UI will not be blocked by large requests. Workers are however about 30% slower. Defaults to `true`\n\t\t * @name $.jstree.defaults.core.worker\n\t\t */\n\t\tworker : true,\n\t\t/**\n\t\t * Force node text to plain text (and escape HTML). Defaults to `false`\n\t\t * @name $.jstree.defaults.core.force_text\n\t\t */\n\t\tforce_text : false,\n\t\t/**\n\t\t * Should the node be toggled if the text is double clicked. Defaults to `true`\n\t\t * @name $.jstree.defaults.core.dblclick_toggle\n\t\t */\n\t\tdblclick_toggle : true,\n\t\t/**\n\t\t * Should the loaded nodes be part of the state. Defaults to `false`\n\t\t * @name $.jstree.defaults.core.loaded_state\n\t\t */\n\t\tloaded_state : false,\n\t\t/**\n\t\t * Should the last active node be focused when the tree container is blurred and the focused again. This helps working with screen readers. Defaults to `true`\n\t\t * @name $.jstree.defaults.core.restore_focus\n\t\t */\n\t\trestore_focus : true,\n\t\t/**\n\t\t * Force to compute and set \"aria-setsize\" and \"aria-posinset\" explicitly for each treeitem. \n\t\t * Some browsers may compute incorrect elements position and produce wrong announcements for screen readers. Defaults to `false`\n\t\t * @name $.jstree.defaults.core.compute_elements_positions\n\t\t */\n\t\tcompute_elements_positions : false,\n\t\t/**\n\t\t * Default keyboard shortcuts (an object where each key is the button name or combo - like 'enter', 'ctrl-space', 'p', etc and the value is the function to execute in the instance's scope)\n\t\t * @name $.jstree.defaults.core.keyboard\n\t\t */\n\t\tkeyboard : {\n\t\t\t'ctrl-space': function (e) {\n\t\t\t\t// aria defines space only with Ctrl\n\t\t\t\te.type = \"click\";\n\t\t\t\t$(e.currentTarget).trigger(e);\n\t\t\t},\n\t\t\t'enter': function (e) {\n\t\t\t\t// enter\n\t\t\t\te.type = \"click\";\n\t\t\t\t$(e.currentTarget).trigger(e);\n\t\t\t},\n\t\t\t'left': function (e) {\n\t\t\t\t// left\n\t\t\t\te.preventDefault();\n\t\t\t\tif(this.is_open(e.currentTarget)) {\n\t\t\t\t\tthis.close_node(e.currentTarget);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar o = this.get_parent(e.currentTarget);\n\t\t\t\t\tif(o && o.id !== $.jstree.root) { this.get_node(o, true).children('.jstree-anchor').focus(); }\n\t\t\t\t}\n\t\t\t},\n\t\t\t'up': function (e) {\n\t\t\t\t// up\n\t\t\t\te.preventDefault();\n\t\t\t\tvar o = this.get_prev_dom(e.currentTarget);\n\t\t\t\tif(o && o.length) { o.children('.jstree-anchor').focus(); }\n\t\t\t},\n\t\t\t'right': function (e) {\n\t\t\t\t// right\n\t\t\t\te.preventDefault();\n\t\t\t\tif(this.is_closed(e.currentTarget)) {\n\t\t\t\t\tthis.open_node(e.currentTarget, function (o) { this.get_node(o, true).children('.jstree-anchor').focus(); });\n\t\t\t\t}\n\t\t\t\telse if (this.is_open(e.currentTarget)) {\n\t\t\t\t\tvar o = this.get_node(e.currentTarget, true).children('.jstree-children')[0];\n\t\t\t\t\tif(o) { $(this._firstChild(o)).children('.jstree-anchor').focus(); }\n\t\t\t\t}\n\t\t\t},\n\t\t\t'down': function (e) {\n\t\t\t\t// down\n\t\t\t\te.preventDefault();\n\t\t\t\tvar o = this.get_next_dom(e.currentTarget);\n\t\t\t\tif(o && o.length) { o.children('.jstree-anchor').focus(); }\n\t\t\t},\n\t\t\t'*': function (e) {\n\t\t\t\t// aria defines * on numpad as open_all - not very common\n\t\t\t\tthis.open_all();\n\t\t\t},\n\t\t\t'home': function (e) {\n\t\t\t\t// home\n\t\t\t\te.preventDefault();\n\t\t\t\tvar o = this._firstChild(this.get_container_ul()[0]);\n\t\t\t\tif(o) { $(o).children('.jstree-anchor').filter(':visible').focus(); }\n\t\t\t},\n\t\t\t'end': function (e) {\n\t\t\t\t// end\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.element.find('.jstree-anchor').filter(':visible').last().focus();\n\t\t\t},\n\t\t\t'f2': function (e) {\n\t\t\t\t// f2 - safe to include - if check_callback is false it will fail\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.edit(e.currentTarget);\n\t\t\t}\n\t\t}\n\t};\n\t$.jstree.core.prototype = {\n\t\t/**\n\t\t * used to decorate an instance with a plugin. Used internally.\n\t\t * @private\n\t\t * @name plugin(deco [, opts])\n\t\t * @param  {String} deco the plugin to decorate with\n\t\t * @param  {Object} opts options for the plugin\n\t\t * @return {jsTree}\n\t\t */\n\t\tplugin : function (deco, opts) {\n\t\t\tvar Child = $.jstree.plugins[deco];\n\t\t\tif(Child) {\n\t\t\t\tthis._data[deco] = {};\n\t\t\t\tChild.prototype = this;\n\t\t\t\treturn new Child(opts, this);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\t/**\n\t\t * initialize the instance. Used internally.\n\t\t * @private\n\t\t * @name init(el, optons)\n\t\t * @param {DOMElement|jQuery|String} el the element we are transforming\n\t\t * @param {Object} options options for this instance\n\t\t * @trigger init.jstree, loading.jstree, loaded.jstree, ready.jstree, changed.jstree\n\t\t */\n\t\tinit : function (el, options) {\n\t\t\tthis._model = {\n\t\t\t\tdata : {},\n\t\t\t\tchanged : [],\n\t\t\t\tforce_full_redraw : false,\n\t\t\t\tredraw_timeout : false,\n\t\t\t\tdefault_state : {\n\t\t\t\t\tloaded : true,\n\t\t\t\t\topened : false,\n\t\t\t\t\tselected : false,\n\t\t\t\t\tdisabled : false\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._model.data[$.jstree.root] = {\n\t\t\t\tid : $.jstree.root,\n\t\t\t\tparent : null,\n\t\t\t\tparents : [],\n\t\t\t\tchildren : [],\n\t\t\t\tchildren_d : [],\n\t\t\t\tstate : { loaded : false }\n\t\t\t};\n\n\t\t\tthis.element = $(el).addClass('jstree jstree-' + this._id);\n\t\t\tthis.settings = options;\n\n\t\t\tthis._data.core.ready = false;\n\t\t\tthis._data.core.loaded = false;\n\t\t\tthis._data.core.rtl = (this.element.css(\"direction\") === \"rtl\");\n\t\t\tthis.element[this._data.core.rtl ? 'addClass' : 'removeClass'](\"jstree-rtl\");\n\t\t\tthis.element.attr('role','tree');\n\t\t\tif(this.settings.core.multiple) {\n\t\t\t\tthis.element.attr('aria-multiselectable', true);\n\t\t\t}\n\t\t\tif(!this.element.attr('tabindex')) {\n\t\t\t\tthis.element.attr('tabindex','0');\n\t\t\t}\n\n\t\t\tthis.bind();\n\t\t\t/**\n\t\t\t * triggered after all events are bound\n\t\t\t * @event\n\t\t\t * @name init.jstree\n\t\t\t */\n\t\t\tthis.trigger(\"init\");\n\n\t\t\tthis._data.core.original_container_html = this.element.find(\" > ul > li\").clone(true);\n\t\t\tthis._data.core.original_container_html\n\t\t\t\t.find(\"li\").addBack()\n\t\t\t\t.contents().filter(function() {\n\t\t\t\t\treturn this.nodeType === 3 && (!this.nodeValue || /^\\s+$/.test(this.nodeValue));\n\t\t\t\t})\n\t\t\t\t.remove();\n\t\t\tthis.element.html(\"<\"+\"ul class='jstree-container-ul jstree-children' role='group'><\"+\"li id='j\"+this._id+\"_loading' class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='none'><i class='jstree-icon jstree-ocl'></i><\"+\"a class='jstree-anchor' role='treeitem' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>\" + this.get_string(\"Loading ...\") + \"</a></li></ul>\");\n\t\t\tthis.element.attr('aria-activedescendant','j' + this._id + '_loading');\n\t\t\tthis._data.core.li_height = this.get_container_ul().children(\"li\").first().outerHeight() || 24;\n\t\t\tthis._data.core.node = this._create_prototype_node();\n\t\t\t/**\n\t\t\t * triggered after the loading text is shown and before loading starts\n\t\t\t * @event\n\t\t\t * @name loading.jstree\n\t\t\t */\n\t\t\tthis.trigger(\"loading\");\n\t\t\tthis.load_node($.jstree.root);\n\t\t},\n\t\t/**\n\t\t * destroy an instance\n\t\t * @name destroy()\n\t\t * @param  {Boolean} keep_html if not set to `true` the container will be emptied, otherwise the current DOM elements will be kept intact\n\t\t */\n\t\tdestroy : function (keep_html) {\n\t\t\t/**\n\t\t\t * triggered before the tree is destroyed\n\t\t\t * @event\n\t\t\t * @name destroy.jstree\n\t\t\t */\n\t\t\tthis.trigger(\"destroy\");\n\t\t\tif(this._wrk) {\n\t\t\t\ttry {\n\t\t\t\t\twindow.URL.revokeObjectURL(this._wrk);\n\t\t\t\t\tthis._wrk = null;\n\t\t\t\t}\n\t\t\t\tcatch (ignore) { }\n\t\t\t}\n\t\t\tif(!keep_html) { this.element.empty(); }\n\t\t\tthis.teardown();\n\t\t},\n\t\t/**\n\t\t * Create a prototype node\n\t\t * @name _create_prototype_node()\n\t\t * @return {DOMElement}\n\t\t */\n\t\t_create_prototype_node : function () {\n\t\t\tvar _node = document.createElement('LI'), _temp1, _temp2;\n\t\t\t_node.setAttribute('role', 'none');\n\t\t\t_temp1 = document.createElement('I');\n\t\t\t_temp1.className = 'jstree-icon jstree-ocl';\n\t\t\t_temp1.setAttribute('role', 'presentation');\n\t\t\t_node.appendChild(_temp1);\n\t\t\t_temp1 = document.createElement('A');\n\t\t\t_temp1.className = 'jstree-anchor';\n\t\t\t_temp1.setAttribute('href','#');\n\t\t\t_temp1.setAttribute('tabindex','-1');\n\t\t\t_temp1.setAttribute('role', 'treeitem');\n\t\t\t_temp2 = document.createElement('I');\n\t\t\t_temp2.className = 'jstree-icon jstree-themeicon';\n\t\t\t_temp2.setAttribute('role', 'presentation');\n\t\t\t_temp1.appendChild(_temp2);\n\t\t\t_node.appendChild(_temp1);\n\t\t\t_temp1 = _temp2 = null;\n\n\t\t\treturn _node;\n\t\t},\n\t\t_kbevent_to_func : function (e) {\n\t\t\tvar keys = {\n\t\t\t\t8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 19: \"Pause\", 27: \"Esc\",\n\t\t\t\t32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\", 36: \"Home\",\n\t\t\t\t37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"Print\", 45: \"Insert\",\n\t\t\t\t46: \"Delete\", 96: \"Numpad0\", 97: \"Numpad1\", 98: \"Numpad2\", 99 : \"Numpad3\",\n\t\t\t\t100: \"Numpad4\", 101: \"Numpad5\", 102: \"Numpad6\", 103: \"Numpad7\",\n\t\t\t\t104: \"Numpad8\", 105: \"Numpad9\", '-13': \"NumpadEnter\", 112: \"F1\",\n\t\t\t\t113: \"F2\", 114: \"F3\", 115: \"F4\", 116: \"F5\", 117: \"F6\", 118: \"F7\",\n\t\t\t\t119: \"F8\", 120: \"F9\", 121: \"F10\", 122: \"F11\", 123: \"F12\", 144: \"Numlock\",\n\t\t\t\t145: \"Scrolllock\", 16: 'Shift', 17: 'Ctrl', 18: 'Alt',\n\t\t\t\t48: '0',  49: '1',  50: '2',  51: '3',  52: '4', 53:  '5',\n\t\t\t\t54: '6',  55: '7',  56: '8',  57: '9',  59: ';',  61: '=', 65:  'a',\n\t\t\t\t66: 'b',  67: 'c',  68: 'd',  69: 'e',  70: 'f',  71: 'g', 72:  'h',\n\t\t\t\t73: 'i',  74: 'j',  75: 'k',  76: 'l',  77: 'm',  78: 'n', 79:  'o',\n\t\t\t\t80: 'p',  81: 'q',  82: 'r',  83: 's',  84: 't',  85: 'u', 86:  'v',\n\t\t\t\t87: 'w',  88: 'x',  89: 'y',  90: 'z', 107: '+', 109: '-', 110: '.',\n\t\t\t\t186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n\t\t\t\t219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*', 173: '-'\n\t\t\t};\n\t\t\tvar parts = [];\n\t\t\tif (e.ctrlKey) { parts.push('ctrl'); }\n\t\t\tif (e.altKey) { parts.push('alt'); }\n            if (e.shiftKey) { parts.push('shift'); }\n\t\t\tparts.push(keys[e.which] || e.which);\n            parts = parts.sort().join('-').toLowerCase();\n            if (parts === 'shift-shift' || parts === 'ctrl-ctrl' || parts === 'alt-alt') {\n                return null;\n            }\n\n\t\t\tvar kb = this.settings.core.keyboard, i, tmp;\n\t\t\tfor (i in kb) {\n\t\t\t\tif (kb.hasOwnProperty(i)) {\n\t\t\t\t\ttmp = i;\n\t\t\t\t\tif (tmp !== '-' && tmp !== '+') {\n\t\t\t\t\t\ttmp = tmp.replace('--', '-MINUS').replace('+-', '-MINUS').replace('++', '-PLUS').replace('-+', '-PLUS');\n\t\t\t\t\t\ttmp = tmp.split(/-|\\+/).sort().join('-').replace('MINUS', '-').replace('PLUS', '+').toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\tif (tmp === parts) {\n\t\t\t\t\t\treturn kb[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t/**\n\t\t * part of the destroying of an instance. Used internally.\n\t\t * @private\n\t\t * @name teardown()\n\t\t */\n\t\tteardown : function () {\n\t\t\tthis.unbind();\n\t\t\tthis.element\n\t\t\t\t.removeClass('jstree')\n\t\t\t\t.removeData('jstree')\n\t\t\t\t.find(\"[class^='jstree']\")\n\t\t\t\t\t.addBack()\n\t\t\t\t\t.attr(\"class\", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); });\n\t\t\tthis.element = null;\n\t\t},\n\t\t/**\n\t\t * bind all events. Used internally.\n\t\t * @private\n\t\t * @name bind()\n\t\t */\n\t\tbind : function () {\n\t\t\tvar word = '',\n\t\t\t\ttout = null,\n\t\t\t\twas_click = 0;\n\t\t\tthis.element\n\t\t\t\t.on(\"dblclick.jstree\", function (e) {\n\t\t\t\t\t\tif(e.target.tagName && e.target.tagName.toLowerCase() === \"input\") { return true; }\n\t\t\t\t\t\tif(document.selection && document.selection.empty) {\n\t\t\t\t\t\t\tdocument.selection.empty();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif(window.getSelection) {\n\t\t\t\t\t\t\t\tvar sel = window.getSelection();\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tsel.removeAllRanges();\n\t\t\t\t\t\t\t\t\tsel.collapse();\n\t\t\t\t\t\t\t\t} catch (ignore) { }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t.on(\"mousedown.jstree\", $.proxy(function (e) {\n\t\t\t\t\t\tif(e.target === this.element[0]) {\n\t\t\t\t\t\t\te.preventDefault(); // prevent losing focus when clicking scroll arrows (FF, Chrome)\n\t\t\t\t\t\t\twas_click = +(new Date()); // ie does not allow to prevent losing focus\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"mousedown.jstree\", \".jstree-ocl\", function (e) {\n\t\t\t\t\t\te.preventDefault(); // prevent any node inside from losing focus when clicking the open/close icon\n\t\t\t\t\t})\n\t\t\t\t.on(\"click.jstree\", \".jstree-ocl\", $.proxy(function (e) {\n\t\t\t\t\t\tthis.toggle_node(e.target);\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"dblclick.jstree\", \".jstree-anchor\", $.proxy(function (e) {\n\t\t\t\t\t\tif(e.target.tagName && e.target.tagName.toLowerCase() === \"input\") { return true; }\n\t\t\t\t\t\tif(this.settings.core.dblclick_toggle) {\n\t\t\t\t\t\t\tthis.toggle_node(e.target);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"click.jstree\", \".jstree-anchor\", $.proxy(function (e) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tif(e.currentTarget !== document.activeElement) { $(e.currentTarget).focus(); }\n\t\t\t\t\t\tthis.activate_node(e.currentTarget, e);\n\t\t\t\t\t}, this))\n\t\t\t\t.on('keydown.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tif(e.target.tagName && e.target.tagName.toLowerCase() === \"input\") { return true; }\n\t\t\t\t\t\tif(this._data.core.rtl) {\n\t\t\t\t\t\t\tif(e.which === 37) { e.which = 39; }\n\t\t\t\t\t\t\telse if(e.which === 39) { e.which = 37; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar f = this._kbevent_to_func(e);\n\t\t\t\t\t\tif (f) {\n\t\t\t\t\t\t\tvar r = f.call(this, e);\n\t\t\t\t\t\t\tif (r === false || r === true) {\n\t\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"load_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tif(data.status) {\n\t\t\t\t\t\t\tif(data.node.id === $.jstree.root && !this._data.core.loaded) {\n\t\t\t\t\t\t\t\tthis._data.core.loaded = true;\n\t\t\t\t\t\t\t\tif(this._firstChild(this.get_container_ul()[0])) {\n\t\t\t\t\t\t\t\t\tthis.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t * triggered after the root node is loaded for the first time\n\t\t\t\t\t\t\t\t * @event\n\t\t\t\t\t\t\t\t * @name loaded.jstree\n\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\tthis.trigger(\"loaded\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!this._data.core.ready) {\n\t\t\t\t\t\t\t\tsetTimeout($.proxy(function() {\n\t\t\t\t\t\t\t\t\tif(this.element && !this.get_container_ul().find('.jstree-loading').length) {\n\t\t\t\t\t\t\t\t\t\tthis._data.core.ready = true;\n\t\t\t\t\t\t\t\t\t\tif(this._data.core.selected.length) {\n\t\t\t\t\t\t\t\t\t\t\tif(this.settings.core.expand_selected_onload) {\n\t\t\t\t\t\t\t\t\t\t\t\tvar tmp = [], i, j;\n\t\t\t\t\t\t\t\t\t\t\t\tfor(i = 0, j = this._data.core.selected.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttmp = tmp.concat(this._model.data[this._data.core.selected[i]].parents);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\ttmp = $.vakata.array_unique(tmp);\n\t\t\t\t\t\t\t\t\t\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.open_node(tmp[i], false, 0);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tthis.trigger('changed', { 'action' : 'ready', 'selected' : this._data.core.selected });\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t\t * triggered after all nodes are finished loading\n\t\t\t\t\t\t\t\t\t\t * @event\n\t\t\t\t\t\t\t\t\t\t * @name ready.jstree\n\t\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t\tthis.trigger(\"ready\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}, this), 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t// quick searching when the tree is focused\n\t\t\t\t.on('keypress.jstree', $.proxy(function (e) {\n\t\t\t\t\t\tif(e.target.tagName && e.target.tagName.toLowerCase() === \"input\") { return true; }\n\t\t\t\t\t\tif(tout) { clearTimeout(tout); }\n\t\t\t\t\t\ttout = setTimeout(function () {\n\t\t\t\t\t\t\tword = '';\n\t\t\t\t\t\t}, 500);\n\n\t\t\t\t\t\tvar chr = String.fromCharCode(e.which).toLowerCase(),\n\t\t\t\t\t\t\tcol = this.element.find('.jstree-anchor').filter(':visible'),\n\t\t\t\t\t\t\tind = col.index(document.activeElement) || 0,\n\t\t\t\t\t\t\tend = false;\n\t\t\t\t\t\tword += chr;\n\n\t\t\t\t\t\t// match for whole word from current node down (including the current node)\n\t\t\t\t\t\tif(word.length > 1) {\n\t\t\t\t\t\t\tcol.slice(ind).each($.proxy(function (i, v) {\n\t\t\t\t\t\t\t\tif($(v).text().toLowerCase().indexOf(word) === 0) {\n\t\t\t\t\t\t\t\t\t$(v).focus();\n\t\t\t\t\t\t\t\t\tend = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\tif(end) { return; }\n\n\t\t\t\t\t\t\t// match for whole word from the beginning of the tree\n\t\t\t\t\t\t\tcol.slice(0, ind).each($.proxy(function (i, v) {\n\t\t\t\t\t\t\t\tif($(v).text().toLowerCase().indexOf(word) === 0) {\n\t\t\t\t\t\t\t\t\t$(v).focus();\n\t\t\t\t\t\t\t\t\tend = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\tif(end) { return; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// list nodes that start with that letter (only if word consists of a single char)\n\t\t\t\t\t\tif(new RegExp('^' + chr.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') + '+$').test(word)) {\n\t\t\t\t\t\t\t// search for the next node starting with that letter\n\t\t\t\t\t\t\tcol.slice(ind + 1).each($.proxy(function (i, v) {\n\t\t\t\t\t\t\t\tif($(v).text().toLowerCase().charAt(0) === chr) {\n\t\t\t\t\t\t\t\t\t$(v).focus();\n\t\t\t\t\t\t\t\t\tend = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\tif(end) { return; }\n\n\t\t\t\t\t\t\t// search from the beginning\n\t\t\t\t\t\t\tcol.slice(0, ind + 1).each($.proxy(function (i, v) {\n\t\t\t\t\t\t\t\tif($(v).text().toLowerCase().charAt(0) === chr) {\n\t\t\t\t\t\t\t\t\t$(v).focus();\n\t\t\t\t\t\t\t\t\tend = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\tif(end) { return; }\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t// THEME RELATED\n\t\t\t\t.on(\"init.jstree\", $.proxy(function () {\n\t\t\t\t\t\tvar s = this.settings.core.themes;\n\t\t\t\t\t\tthis._data.core.themes.dots\t\t\t= s.dots;\n\t\t\t\t\t\tthis._data.core.themes.stripes\t\t= s.stripes;\n\t\t\t\t\t\tthis._data.core.themes.icons\t\t= s.icons;\n\t\t\t\t\t\tthis._data.core.themes.ellipsis\t\t= s.ellipsis;\n\t\t\t\t\t\tthis.set_theme(s.name || \"default\", s.url);\n\t\t\t\t\t\tthis.set_theme_variant(s.variant);\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"loading.jstree\", $.proxy(function () {\n\t\t\t\t\t\tthis[ this._data.core.themes.dots ? \"show_dots\" : \"hide_dots\" ]();\n\t\t\t\t\t\tthis[ this._data.core.themes.icons ? \"show_icons\" : \"hide_icons\" ]();\n\t\t\t\t\t\tthis[ this._data.core.themes.stripes ? \"show_stripes\" : \"hide_stripes\" ]();\n\t\t\t\t\t\tthis[ this._data.core.themes.ellipsis ? \"show_ellipsis\" : \"hide_ellipsis\" ]();\n\t\t\t\t\t}, this))\n\t\t\t\t.on('blur.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tthis._data.core.focused = null;\n\t\t\t\t\t\t$(e.currentTarget).filter('.jstree-hovered').trigger('mouseleave');\n\t\t\t\t\t\tthis.element.attr('tabindex', '0');\n\t\t\t\t\t}, this))\n\t\t\t\t.on('focus.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tvar tmp = this.get_node(e.currentTarget);\n\t\t\t\t\t\tif(tmp && tmp.id) {\n\t\t\t\t\t\t\tthis._data.core.focused = tmp.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.element.find('.jstree-hovered').not(e.currentTarget).trigger('mouseleave');\n\t\t\t\t\t\t$(e.currentTarget).trigger('mouseenter');\n\t\t\t\t\t\tthis.element.attr('tabindex', '-1');\n\t\t\t\t\t}, this))\n\t\t\t\t.on('focus.jstree', $.proxy(function () {\n\t\t\t\t\t\tif(+(new Date()) - was_click > 500 && !this._data.core.focused && this.settings.core.restore_focus) {\n\t\t\t\t\t\t\twas_click = 0;\n\t\t\t\t\t\t\tvar act = this.get_node(this.element.attr('aria-activedescendant'), true);\n\t\t\t\t\t\t\tif(act) {\n\t\t\t\t\t\t\t\tact.find('> .jstree-anchor').focus();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on('mouseenter.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tthis.hover_node(e.currentTarget);\n\t\t\t\t\t}, this))\n\t\t\t\t.on('mouseleave.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tthis.dehover_node(e.currentTarget);\n\t\t\t\t\t}, this));\n\t\t},\n\t\t/**\n\t\t * part of the destroying of an instance. Used internally.\n\t\t * @private\n\t\t * @name unbind()\n\t\t */\n\t\tunbind : function () {\n\t\t\tthis.element.off('.jstree');\n\t\t\t$(document).off('.jstree-' + this._id);\n\t\t},\n\t\t/**\n\t\t * trigger an event. Used internally.\n\t\t * @private\n\t\t * @name trigger(ev [, data])\n\t\t * @param  {String} ev the name of the event to trigger\n\t\t * @param  {Object} data additional data to pass with the event\n\t\t */\n\t\ttrigger : function (ev, data) {\n\t\t\tif(!data) {\n\t\t\t\tdata = {};\n\t\t\t}\n\t\t\tdata.instance = this;\n\t\t\tthis.element.triggerHandler(ev.replace('.jstree','') + '.jstree', data);\n\t\t},\n\t\t/**\n\t\t * returns the jQuery extended instance container\n\t\t * @name get_container()\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_container : function () {\n\t\t\treturn this.element;\n\t\t},\n\t\t/**\n\t\t * returns the jQuery extended main UL node inside the instance container. Used internally.\n\t\t * @private\n\t\t * @name get_container_ul()\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_container_ul : function () {\n\t\t\treturn this.element.children(\".jstree-children\").first();\n\t\t},\n\t\t/**\n\t\t * gets string replacements (localization). Used internally.\n\t\t * @private\n\t\t * @name get_string(key)\n\t\t * @param  {String} key\n\t\t * @return {String}\n\t\t */\n\t\tget_string : function (key) {\n\t\t\tvar a = this.settings.core.strings;\n\t\t\tif($.isFunction(a)) { return a.call(this, key); }\n\t\t\tif(a && a[key]) { return a[key]; }\n\t\t\treturn key;\n\t\t},\n\t\t/**\n\t\t * gets the first child of a DOM node. Used internally.\n\t\t * @private\n\t\t * @name _firstChild(dom)\n\t\t * @param  {DOMElement} dom\n\t\t * @return {DOMElement}\n\t\t */\n\t\t_firstChild : function (dom) {\n\t\t\tdom = dom ? dom.firstChild : null;\n\t\t\twhile(dom !== null && dom.nodeType !== 1) {\n\t\t\t\tdom = dom.nextSibling;\n\t\t\t}\n\t\t\treturn dom;\n\t\t},\n\t\t/**\n\t\t * gets the next sibling of a DOM node. Used internally.\n\t\t * @private\n\t\t * @name _nextSibling(dom)\n\t\t * @param  {DOMElement} dom\n\t\t * @return {DOMElement}\n\t\t */\n\t\t_nextSibling : function (dom) {\n\t\t\tdom = dom ? dom.nextSibling : null;\n\t\t\twhile(dom !== null && dom.nodeType !== 1) {\n\t\t\t\tdom = dom.nextSibling;\n\t\t\t}\n\t\t\treturn dom;\n\t\t},\n\t\t/**\n\t\t * gets the previous sibling of a DOM node. Used internally.\n\t\t * @private\n\t\t * @name _previousSibling(dom)\n\t\t * @param  {DOMElement} dom\n\t\t * @return {DOMElement}\n\t\t */\n\t\t_previousSibling : function (dom) {\n\t\t\tdom = dom ? dom.previousSibling : null;\n\t\t\twhile(dom !== null && dom.nodeType !== 1) {\n\t\t\t\tdom = dom.previousSibling;\n\t\t\t}\n\t\t\treturn dom;\n\t\t},\n\t\t/**\n\t\t * get the JSON representation of a node (or the actual jQuery extended DOM node) by using any input (child DOM element, ID string, selector, etc)\n\t\t * @name get_node(obj [, as_dom])\n\t\t * @param  {mixed} obj\n\t\t * @param  {Boolean} as_dom\n\t\t * @return {Object|jQuery}\n\t\t */\n\t\tget_node : function (obj, as_dom) {\n\t\t\tif(obj && obj.id) {\n\t\t\t\tobj = obj.id;\n\t\t\t}\n\t\t\tif (obj instanceof $ && obj.length && obj[0].id) {\n\t\t\t\tobj = obj[0].id;\n\t\t\t}\n\t\t\tvar dom;\n\t\t\ttry {\n\t\t\t\tif(this._model.data[obj]) {\n\t\t\t\t\tobj = this._model.data[obj];\n\t\t\t\t}\n\t\t\t\telse if(typeof obj === \"string\" && this._model.data[obj.replace(/^#/, '')]) {\n\t\t\t\t\tobj = this._model.data[obj.replace(/^#/, '')];\n\t\t\t\t}\n\t\t\t\telse if(typeof obj === \"string\" && (dom = $('#' + obj.replace($.jstree.idregex,'\\\\$&'), this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {\n\t\t\t\t\tobj = this._model.data[dom.closest('.jstree-node').attr('id')];\n\t\t\t\t}\n\t\t\t\telse if((dom = this.element.find(obj)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {\n\t\t\t\t\tobj = this._model.data[dom.closest('.jstree-node').attr('id')];\n\t\t\t\t}\n\t\t\t\telse if((dom = this.element.find(obj)).length && dom.hasClass('jstree')) {\n\t\t\t\t\tobj = this._model.data[$.jstree.root];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif(as_dom) {\n\t\t\t\t\tobj = obj.id === $.jstree.root ? this.element : $('#' + obj.id.replace($.jstree.idregex,'\\\\$&'), this.element);\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t} catch (ex) { return false; }\n\t\t},\n\t\t/**\n\t\t * get the path to a node, either consisting of node texts, or of node IDs, optionally glued together (otherwise an array)\n\t\t * @name get_path(obj [, glue, ids])\n\t\t * @param  {mixed} obj the node\n\t\t * @param  {String} glue if you want the path as a string - pass the glue here (for example '/'), if a falsy value is supplied here, an array is returned\n\t\t * @param  {Boolean} ids if set to true build the path using ID, otherwise node text is used\n\t\t * @return {mixed}\n\t\t */\n\t\tget_path : function (obj, glue, ids) {\n\t\t\tobj = obj.parents ? obj : this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root || !obj.parents) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar i, j, p = [];\n\t\t\tp.push(ids ? obj.id : obj.text);\n\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\tp.push(ids ? obj.parents[i] : this.get_text(obj.parents[i]));\n\t\t\t}\n\t\t\tp = p.reverse().slice(1);\n\t\t\treturn glue ? p.join(glue) : p;\n\t\t},\n\t\t/**\n\t\t * get the next visible node that is below the `obj` node. If `strict` is set to `true` only sibling nodes are returned.\n\t\t * @name get_next_dom(obj [, strict])\n\t\t * @param  {mixed} obj\n\t\t * @param  {Boolean} strict\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_next_dom : function (obj, strict) {\n\t\t\tvar tmp;\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(obj[0] === this.element[0]) {\n\t\t\t\ttmp = this._firstChild(this.get_container_ul()[0]);\n\t\t\t\twhile (tmp && tmp.offsetHeight === 0) {\n\t\t\t\t\ttmp = this._nextSibling(tmp);\n\t\t\t\t}\n\t\t\t\treturn tmp ? $(tmp) : false;\n\t\t\t}\n\t\t\tif(!obj || !obj.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(strict) {\n\t\t\t\ttmp = obj[0];\n\t\t\t\tdo {\n\t\t\t\t\ttmp = this._nextSibling(tmp);\n\t\t\t\t} while (tmp && tmp.offsetHeight === 0);\n\t\t\t\treturn tmp ? $(tmp) : false;\n\t\t\t}\n\t\t\tif(obj.hasClass(\"jstree-open\")) {\n\t\t\t\ttmp = this._firstChild(obj.children('.jstree-children')[0]);\n\t\t\t\twhile (tmp && tmp.offsetHeight === 0) {\n\t\t\t\t\ttmp = this._nextSibling(tmp);\n\t\t\t\t}\n\t\t\t\tif(tmp !== null) {\n\t\t\t\t\treturn $(tmp);\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = obj[0];\n\t\t\tdo {\n\t\t\t\ttmp = this._nextSibling(tmp);\n\t\t\t} while (tmp && tmp.offsetHeight === 0);\n\t\t\tif(tmp !== null) {\n\t\t\t\treturn $(tmp);\n\t\t\t}\n\t\t\treturn obj.parentsUntil(\".jstree\",\".jstree-node\").nextAll(\".jstree-node:visible\").first();\n\t\t},\n\t\t/**\n\t\t * get the previous visible node that is above the `obj` node. If `strict` is set to `true` only sibling nodes are returned.\n\t\t * @name get_prev_dom(obj [, strict])\n\t\t * @param  {mixed} obj\n\t\t * @param  {Boolean} strict\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_prev_dom : function (obj, strict) {\n\t\t\tvar tmp;\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(obj[0] === this.element[0]) {\n\t\t\t\ttmp = this.get_container_ul()[0].lastChild;\n\t\t\t\twhile (tmp && tmp.offsetHeight === 0) {\n\t\t\t\t\ttmp = this._previousSibling(tmp);\n\t\t\t\t}\n\t\t\t\treturn tmp ? $(tmp) : false;\n\t\t\t}\n\t\t\tif(!obj || !obj.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(strict) {\n\t\t\t\ttmp = obj[0];\n\t\t\t\tdo {\n\t\t\t\t\ttmp = this._previousSibling(tmp);\n\t\t\t\t} while (tmp && tmp.offsetHeight === 0);\n\t\t\t\treturn tmp ? $(tmp) : false;\n\t\t\t}\n\t\t\ttmp = obj[0];\n\t\t\tdo {\n\t\t\t\ttmp = this._previousSibling(tmp);\n\t\t\t} while (tmp && tmp.offsetHeight === 0);\n\t\t\tif(tmp !== null) {\n\t\t\t\tobj = $(tmp);\n\t\t\t\twhile(obj.hasClass(\"jstree-open\")) {\n\t\t\t\t\tobj = obj.children(\".jstree-children\").first().children(\".jstree-node:visible:last\");\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t\ttmp = obj[0].parentNode.parentNode;\n\t\t\treturn tmp && tmp.className && tmp.className.indexOf('jstree-node') !== -1 ? $(tmp) : false;\n\t\t},\n\t\t/**\n\t\t * get the parent ID of a node\n\t\t * @name get_parent(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {String}\n\t\t */\n\t\tget_parent : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn obj.parent;\n\t\t},\n\t\t/**\n\t\t * get a jQuery collection of all the children of a node (node must be rendered), returns false on error\n\t\t * @name get_children_dom(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_children_dom : function (obj) {\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(obj[0] === this.element[0]) {\n\t\t\t\treturn this.get_container_ul().children(\".jstree-node\");\n\t\t\t}\n\t\t\tif(!obj || !obj.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn obj.children(\".jstree-children\").children(\".jstree-node\");\n\t\t},\n\t\t/**\n\t\t * checks if a node has children\n\t\t * @name is_parent(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_parent : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && (obj.state.loaded === false || obj.children.length > 0);\n\t\t},\n\t\t/**\n\t\t * checks if a node is loaded (its children are available)\n\t\t * @name is_loaded(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_loaded : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && obj.state.loaded;\n\t\t},\n\t\t/**\n\t\t * check if a node is currently loading (fetching children)\n\t\t * @name is_loading(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_loading : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && obj.state && obj.state.loading;\n\t\t},\n\t\t/**\n\t\t * check if a node is opened\n\t\t * @name is_open(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_open : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && obj.state.opened;\n\t\t},\n\t\t/**\n\t\t * check if a node is in a closed state\n\t\t * @name is_closed(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_closed : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && this.is_parent(obj) && !obj.state.opened;\n\t\t},\n\t\t/**\n\t\t * check if a node has no children\n\t\t * @name is_leaf(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_leaf : function (obj) {\n\t\t\treturn !this.is_parent(obj);\n\t\t},\n\t\t/**\n\t\t * loads a node (fetches its children using the `core.data` setting). Multiple nodes can be passed to by using an array.\n\t\t * @name load_node(obj [, callback])\n\t\t * @param  {mixed} obj\n\t\t * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives two arguments - the node and a boolean status\n\t\t * @return {Boolean}\n\t\t * @trigger load_node.jstree\n\t\t */\n\t\tload_node : function (obj, callback) {\n\t\t\tvar k, l, i, j, c;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tthis._load_nodes(obj.slice(), callback);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) {\n\t\t\t\tif(callback) { callback.call(this, obj, false); }\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// if(obj.state.loading) { } // the node is already loading - just wait for it to load and invoke callback? but if called implicitly it should be loaded again?\n\t\t\tif(obj.state.loaded) {\n\t\t\t\tobj.state.loaded = false;\n\t\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\t\tthis._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {\n\t\t\t\t\t\treturn $.inArray(v, obj.children_d) === -1;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor(k = 0, l = obj.children_d.length; k < l; k++) {\n\t\t\t\t\tif(this._model.data[obj.children_d[k]].state.selected) {\n\t\t\t\t\t\tc = true;\n\t\t\t\t\t}\n\t\t\t\t\tdelete this._model.data[obj.children_d[k]];\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\tthis._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {\n\t\t\t\t\t\treturn $.inArray(v, obj.children_d) === -1;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tobj.children = [];\n\t\t\t\tobj.children_d = [];\n\t\t\t\tif(c) {\n\t\t\t\t\tthis.trigger('changed', { 'action' : 'load_node', 'node' : obj, 'selected' : this._data.core.selected });\n\t\t\t\t}\n\t\t\t}\n\t\t\tobj.state.failed = false;\n\t\t\tobj.state.loading = true;\n\t\t\tthis.get_node(obj, true).addClass(\"jstree-loading\").attr('aria-busy',true);\n\t\t\tthis._load_node(obj, $.proxy(function (status) {\n\t\t\t\tobj = this._model.data[obj.id];\n\t\t\t\tobj.state.loading = false;\n\t\t\t\tobj.state.loaded = status;\n\t\t\t\tobj.state.failed = !obj.state.loaded;\n\t\t\t\tvar dom = this.get_node(obj, true), i = 0, j = 0, m = this._model.data, has_children = false;\n\t\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\t\tif(m[obj.children[i]] && !m[obj.children[i]].state.hidden) {\n\t\t\t\t\t\thas_children = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(obj.state.loaded && dom && dom.length) {\n\t\t\t\t\tdom.removeClass('jstree-closed jstree-open jstree-leaf');\n\t\t\t\t\tif (!has_children) {\n\t\t\t\t\t\tdom.addClass('jstree-leaf');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (obj.id !== '#') {\n\t\t\t\t\t\t\tdom.addClass(obj.state.opened ? 'jstree-open' : 'jstree-closed');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdom.removeClass(\"jstree-loading\").attr('aria-busy',false);\n\t\t\t\t/**\n\t\t\t\t * triggered after a node is loaded\n\t\t\t\t * @event\n\t\t\t\t * @name load_node.jstree\n\t\t\t\t * @param {Object} node the node that was loading\n\t\t\t\t * @param {Boolean} status was the node loaded successfully\n\t\t\t\t */\n\t\t\t\tthis.trigger('load_node', { \"node\" : obj, \"status\" : status });\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback.call(this, obj, status);\n\t\t\t\t}\n\t\t\t}, this));\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * load an array of nodes (will also load unavailable nodes as soon as they appear in the structure). Used internally.\n\t\t * @private\n\t\t * @name _load_nodes(nodes [, callback])\n\t\t * @param  {array} nodes\n\t\t * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - the array passed to _load_nodes\n\t\t */\n\t\t_load_nodes : function (nodes, callback, is_callback, force_reload) {\n\t\t\tvar r = true,\n\t\t\t\tc = function () { this._load_nodes(nodes, callback, true); },\n\t\t\t\tm = this._model.data, i, j, tmp = [];\n\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\tif(m[nodes[i]] && ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || (!is_callback && force_reload) )) {\n\t\t\t\t\tif(!this.is_loading(nodes[i])) {\n\t\t\t\t\t\tthis.load_node(nodes[i], c);\n\t\t\t\t\t}\n\t\t\t\t\tr = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(r) {\n\t\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\t\tif(m[nodes[i]] && m[nodes[i]].state.loaded) {\n\t\t\t\t\t\ttmp.push(nodes[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(callback && !callback.done) {\n\t\t\t\t\tcallback.call(this, tmp);\n\t\t\t\t\tcallback.done = true;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * loads all unloaded nodes\n\t\t * @name load_all([obj, callback])\n\t\t * @param {mixed} obj the node to load recursively, omit to load all nodes in the tree\n\t\t * @param {function} callback a function to be executed once loading all the nodes is complete,\n\t\t * @trigger load_all.jstree\n\t\t */\n\t\tload_all : function (obj, callback) {\n\t\t\tif(!obj) { obj = $.jstree.root; }\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tvar to_load = [],\n\t\t\t\tm = this._model.data,\n\t\t\t\tc = m[obj.id].children_d,\n\t\t\t\ti, j;\n\t\t\tif(obj.state && !obj.state.loaded) {\n\t\t\t\tto_load.push(obj.id);\n\t\t\t}\n\t\t\tfor(i = 0, j = c.length; i < j; i++) {\n\t\t\t\tif(m[c[i]] && m[c[i]].state && !m[c[i]].state.loaded) {\n\t\t\t\t\tto_load.push(c[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(to_load.length) {\n\t\t\t\tthis._load_nodes(to_load, function () {\n\t\t\t\t\tthis.load_all(obj, callback);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t/**\n\t\t\t\t * triggered after a load_all call completes\n\t\t\t\t * @event\n\t\t\t\t * @name load_all.jstree\n\t\t\t\t * @param {Object} node the recursively loaded node\n\t\t\t\t */\n\t\t\t\tif(callback) { callback.call(this, obj); }\n\t\t\t\tthis.trigger('load_all', { \"node\" : obj });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * handles the actual loading of a node. Used only internally.\n\t\t * @private\n\t\t * @name _load_node(obj [, callback])\n\t\t * @param  {mixed} obj\n\t\t * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - a boolean status\n\t\t * @return {Boolean}\n\t\t */\n\t\t_load_node : function (obj, callback) {\n\t\t\tvar s = this.settings.core.data, t;\n\t\t\tvar notTextOrCommentNode = function notTextOrCommentNode () {\n\t\t\t\treturn this.nodeType !== 3 && this.nodeType !== 8;\n\t\t\t};\n\t\t\t// use original HTML\n\t\t\tif(!s) {\n\t\t\t\tif(obj.id === $.jstree.root) {\n\t\t\t\t\treturn this._append_html_data(obj, this._data.core.original_container_html.clone(true), function (status) {\n\t\t\t\t\t\tcallback.call(this, status);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn callback.call(this, false);\n\t\t\t\t}\n\t\t\t\t// return callback.call(this, obj.id === $.jstree.root ? this._append_html_data(obj, this._data.core.original_container_html.clone(true)) : false);\n\t\t\t}\n\t\t\tif($.isFunction(s)) {\n\t\t\t\treturn s.call(this, obj, $.proxy(function (d) {\n\t\t\t\t\tif(d === false) {\n\t\t\t\t\t\tcallback.call(this, false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $($.parseHTML(d)).filter(notTextOrCommentNode) : d, function (status) {\n\t\t\t\t\t\t\tcallback.call(this, status);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t// return d === false ? callback.call(this, false) : callback.call(this, this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $(d) : d));\n\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif(typeof s === 'object') {\n\t\t\t\tif(s.url) {\n\t\t\t\t\ts = $.extend(true, {}, s);\n\t\t\t\t\tif($.isFunction(s.url)) {\n\t\t\t\t\t\ts.url = s.url.call(this, obj);\n\t\t\t\t\t}\n\t\t\t\t\tif($.isFunction(s.data)) {\n\t\t\t\t\t\ts.data = s.data.call(this, obj);\n\t\t\t\t\t}\n\t\t\t\t\treturn $.ajax(s)\n\t\t\t\t\t\t.done($.proxy(function (d,t,x) {\n\t\t\t\t\t\t\t\tvar type = x.getResponseHeader('Content-Type');\n\t\t\t\t\t\t\t\tif((type && type.indexOf('json') !== -1) || typeof d === \"object\") {\n\t\t\t\t\t\t\t\t\treturn this._append_json_data(obj, d, function (status) { callback.call(this, status); });\n\t\t\t\t\t\t\t\t\t//return callback.call(this, this._append_json_data(obj, d));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif((type && type.indexOf('html') !== -1) || typeof d === \"string\") {\n\t\t\t\t\t\t\t\t\treturn this._append_html_data(obj, $($.parseHTML(d)).filter(notTextOrCommentNode), function (status) { callback.call(this, status); });\n\t\t\t\t\t\t\t\t\t// return callback.call(this, this._append_html_data(obj, $(d)));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : x }) };\n\t\t\t\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\t\t\t\treturn callback.call(this, false);\n\t\t\t\t\t\t\t}, this))\n\t\t\t\t\t\t.fail($.proxy(function (f) {\n\t\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : f }) };\n\t\t\t\t\t\t\t\tcallback.call(this, false);\n\t\t\t\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t}\n\t\t\t\tif ($.isArray(s)) {\n\t\t\t\t\tt = $.extend(true, [], s);\n\t\t\t\t} else if ($.isPlainObject(s)) {\n\t\t\t\t\tt = $.extend(true, {}, s);\n\t\t\t\t} else {\n\t\t\t\t\tt = s;\n\t\t\t\t}\n\t\t\t\tif(obj.id === $.jstree.root) {\n\t\t\t\t\treturn this._append_json_data(obj, t, function (status) {\n\t\t\t\t\t\tcallback.call(this, status);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_05', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };\n\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\treturn callback.call(this, false);\n\t\t\t\t}\n\t\t\t\t//return callback.call(this, (obj.id === $.jstree.root ? this._append_json_data(obj, t) : false) );\n\t\t\t}\n\t\t\tif(typeof s === 'string') {\n\t\t\t\tif(obj.id === $.jstree.root) {\n\t\t\t\t\treturn this._append_html_data(obj, $($.parseHTML(s)).filter(notTextOrCommentNode), function (status) {\n\t\t\t\t\t\tcallback.call(this, status);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_06', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };\n\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\treturn callback.call(this, false);\n\t\t\t\t}\n\t\t\t\t//return callback.call(this, (obj.id === $.jstree.root ? this._append_html_data(obj, $(s)) : false) );\n\t\t\t}\n\t\t\treturn callback.call(this, false);\n\t\t},\n\t\t/**\n\t\t * adds a node to the list of nodes to redraw. Used only internally.\n\t\t * @private\n\t\t * @name _node_changed(obj [, callback])\n\t\t * @param  {mixed} obj\n\t\t */\n\t\t_node_changed : function (obj) {\n\t\t\tobj = this.get_node(obj);\n      if (obj && $.inArray(obj.id, this._model.changed) === -1) {\n\t\t\t\tthis._model.changed.push(obj.id);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * appends HTML content to the tree. Used internally.\n\t\t * @private\n\t\t * @name _append_html_data(obj, data)\n\t\t * @param  {mixed} obj the node to append to\n\t\t * @param  {String} data the HTML string to parse and append\n\t\t * @trigger model.jstree, changed.jstree\n\t\t */\n\t\t_append_html_data : function (dom, data, cb) {\n\t\t\tdom = this.get_node(dom);\n\t\t\tdom.children = [];\n\t\t\tdom.children_d = [];\n\t\t\tvar dat = data.is('ul') ? data.children() : data,\n\t\t\t\tpar = dom.id,\n\t\t\t\tchd = [],\n\t\t\t\tdpc = [],\n\t\t\t\tm = this._model.data,\n\t\t\t\tp = m[par],\n\t\t\t\ts = this._data.core.selected.length,\n\t\t\t\ttmp, i, j;\n\t\t\tdat.each($.proxy(function (i, v) {\n\t\t\t\ttmp = this._parse_model_from_html($(v), par, p.parents.concat());\n\t\t\t\tif(tmp) {\n\t\t\t\t\tchd.push(tmp);\n\t\t\t\t\tdpc.push(tmp);\n\t\t\t\t\tif(m[tmp].children_d.length) {\n\t\t\t\t\t\tdpc = dpc.concat(m[tmp].children_d);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this));\n\t\t\tp.children = chd;\n\t\t\tp.children_d = dpc;\n\t\t\tfor(i = 0, j = p.parents.length; i < j; i++) {\n\t\t\t\tm[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when new data is inserted to the tree model\n\t\t\t * @event\n\t\t\t * @name model.jstree\n\t\t\t * @param {Array} nodes an array of node IDs\n\t\t\t * @param {String} parent the parent ID of the nodes\n\t\t\t */\n\t\t\tthis.trigger('model', { \"nodes\" : dpc, 'parent' : par });\n\t\t\tif(par !== $.jstree.root) {\n\t\t\t\tthis._node_changed(par);\n\t\t\t\tthis.redraw();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.get_container_ul().children('.jstree-initial-node').remove();\n\t\t\t\tthis.redraw(true);\n\t\t\t}\n\t\t\tif(this._data.core.selected.length !== s) {\n\t\t\t\tthis.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });\n\t\t\t}\n\t\t\tcb.call(this, true);\n\t\t},\n\t\t/**\n\t\t * appends JSON content to the tree. Used internally.\n\t\t * @private\n\t\t * @name _append_json_data(obj, data)\n\t\t * @param  {mixed} obj the node to append to\n\t\t * @param  {String} data the JSON object to parse and append\n\t\t * @param  {Boolean} force_processing internal param - do not set\n\t\t * @trigger model.jstree, changed.jstree\n\t\t */\n\t\t_append_json_data : function (dom, data, cb, force_processing) {\n\t\t\tif(this.element === null) { return; }\n\t\t\tdom = this.get_node(dom);\n\t\t\tdom.children = [];\n\t\t\tdom.children_d = [];\n\t\t\t// *%$@!!!\n\t\t\tif(data.d) {\n\t\t\t\tdata = data.d;\n\t\t\t\tif(typeof data === \"string\") {\n\t\t\t\t\tdata = JSON.parse(data);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!$.isArray(data)) { data = [data]; }\n\t\t\tvar w = null,\n\t\t\t\targs = {\n\t\t\t\t\t'df'\t: this._model.default_state,\n\t\t\t\t\t'dat'\t: data,\n\t\t\t\t\t'par'\t: dom.id,\n\t\t\t\t\t'm'\t\t: this._model.data,\n\t\t\t\t\t't_id'\t: this._id,\n\t\t\t\t\t't_cnt'\t: this._cnt,\n\t\t\t\t\t'sel'\t: this._data.core.selected\n\t\t\t\t},\n\t\t\t\tinst = this,\n\t\t\t\tfunc = function (data, undefined) {\n\t\t\t\t\tif(data.data) { data = data.data; }\n\t\t\t\t\tvar dat = data.dat,\n\t\t\t\t\t\tpar = data.par,\n\t\t\t\t\t\tchd = [],\n\t\t\t\t\t\tdpc = [],\n\t\t\t\t\t\tadd = [],\n\t\t\t\t\t\tdf = data.df,\n\t\t\t\t\t\tt_id = data.t_id,\n\t\t\t\t\t\tt_cnt = data.t_cnt,\n\t\t\t\t\t\tm = data.m,\n\t\t\t\t\t\tp = m[par],\n\t\t\t\t\t\tsel = data.sel,\n\t\t\t\t\t\ttmp, i, j, rslt,\n\t\t\t\t\t\tparse_flat = function (d, p, ps) {\n\t\t\t\t\t\t\tif(!ps) { ps = []; }\n\t\t\t\t\t\t\telse { ps = ps.concat(); }\n\t\t\t\t\t\t\tif(p) { ps.unshift(p); }\n\t\t\t\t\t\t\tvar tid = d.id.toString(),\n\t\t\t\t\t\t\t\ti, j, c, e,\n\t\t\t\t\t\t\t\ttmp = {\n\t\t\t\t\t\t\t\t\tid\t\t\t: tid,\n\t\t\t\t\t\t\t\t\ttext\t\t: d.text || '',\n\t\t\t\t\t\t\t\t\ticon\t\t: d.icon !== undefined ? d.icon : true,\n\t\t\t\t\t\t\t\t\tparent\t\t: p,\n\t\t\t\t\t\t\t\t\tparents\t\t: ps,\n\t\t\t\t\t\t\t\t\tchildren\t: d.children || [],\n\t\t\t\t\t\t\t\t\tchildren_d\t: d.children_d || [],\n\t\t\t\t\t\t\t\t\tdata\t\t: d.data,\n\t\t\t\t\t\t\t\t\tstate\t\t: { },\n\t\t\t\t\t\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\t\t\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\t\t\t\t\t\toriginal\t: false\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor(i in df) {\n\t\t\t\t\t\t\t\tif(df.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\ttmp.state[i] = df[i];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.data && d.data.jstree && d.data.jstree.icon) {\n\t\t\t\t\t\t\t\ttmp.icon = d.data.jstree.icon;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(tmp.icon === undefined || tmp.icon === null || tmp.icon === \"\") {\n\t\t\t\t\t\t\t\ttmp.icon = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.data) {\n\t\t\t\t\t\t\t\ttmp.data = d.data;\n\t\t\t\t\t\t\t\tif(d.data.jstree) {\n\t\t\t\t\t\t\t\t\tfor(i in d.data.jstree) {\n\t\t\t\t\t\t\t\t\t\tif(d.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.state[i] = d.data.jstree[i];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.state === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.state) {\n\t\t\t\t\t\t\t\t\tif(d.state.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.state[i] = d.state[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.li_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.li_attr) {\n\t\t\t\t\t\t\t\t\tif(d.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.li_attr[i] = d.li_attr[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!tmp.li_attr.id) {\n\t\t\t\t\t\t\t\ttmp.li_attr.id = tid;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.a_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.a_attr) {\n\t\t\t\t\t\t\t\t\tif(d.a_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.a_attr[i] = d.a_attr[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.children && d.children === true) {\n\t\t\t\t\t\t\t\ttmp.state.loaded = false;\n\t\t\t\t\t\t\t\ttmp.children = [];\n\t\t\t\t\t\t\t\ttmp.children_d = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tm[tmp.id] = tmp;\n\t\t\t\t\t\t\tfor(i = 0, j = tmp.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\tc = parse_flat(m[tmp.children[i]], tmp.id, ps);\n\t\t\t\t\t\t\t\te = m[c];\n\t\t\t\t\t\t\t\ttmp.children_d.push(c);\n\t\t\t\t\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\t\t\t\t\ttmp.children_d = tmp.children_d.concat(e.children_d);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete d.data;\n\t\t\t\t\t\t\tdelete d.children;\n\t\t\t\t\t\t\tm[tmp.id].original = d;\n\t\t\t\t\t\t\tif(tmp.state.selected) {\n\t\t\t\t\t\t\t\tadd.push(tmp.id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn tmp.id;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tparse_nest = function (d, p, ps) {\n\t\t\t\t\t\t\tif(!ps) { ps = []; }\n\t\t\t\t\t\t\telse { ps = ps.concat(); }\n\t\t\t\t\t\t\tif(p) { ps.unshift(p); }\n\t\t\t\t\t\t\tvar tid = false, i, j, c, e, tmp;\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\ttid = 'j' + t_id + '_' + (++t_cnt);\n\t\t\t\t\t\t\t} while(m[tid]);\n\n\t\t\t\t\t\t\ttmp = {\n\t\t\t\t\t\t\t\tid\t\t\t: false,\n\t\t\t\t\t\t\t\ttext\t\t: typeof d === 'string' ? d : '',\n\t\t\t\t\t\t\t\ticon\t\t: typeof d === 'object' && d.icon !== undefined ? d.icon : true,\n\t\t\t\t\t\t\t\tparent\t\t: p,\n\t\t\t\t\t\t\t\tparents\t\t: ps,\n\t\t\t\t\t\t\t\tchildren\t: [],\n\t\t\t\t\t\t\t\tchildren_d\t: [],\n\t\t\t\t\t\t\t\tdata\t\t: null,\n\t\t\t\t\t\t\t\tstate\t\t: { },\n\t\t\t\t\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\t\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\t\t\t\t\toriginal\t: false\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor(i in df) {\n\t\t\t\t\t\t\t\tif(df.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\ttmp.state[i] = df[i];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.id) { tmp.id = d.id.toString(); }\n\t\t\t\t\t\t\tif(d && d.text) { tmp.text = d.text; }\n\t\t\t\t\t\t\tif(d && d.data && d.data.jstree && d.data.jstree.icon) {\n\t\t\t\t\t\t\t\ttmp.icon = d.data.jstree.icon;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(tmp.icon === undefined || tmp.icon === null || tmp.icon === \"\") {\n\t\t\t\t\t\t\t\ttmp.icon = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.data) {\n\t\t\t\t\t\t\t\ttmp.data = d.data;\n\t\t\t\t\t\t\t\tif(d.data.jstree) {\n\t\t\t\t\t\t\t\t\tfor(i in d.data.jstree) {\n\t\t\t\t\t\t\t\t\t\tif(d.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.state[i] = d.data.jstree[i];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.state === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.state) {\n\t\t\t\t\t\t\t\t\tif(d.state.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.state[i] = d.state[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.li_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.li_attr) {\n\t\t\t\t\t\t\t\t\tif(d.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.li_attr[i] = d.li_attr[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(tmp.li_attr.id && !tmp.id) {\n\t\t\t\t\t\t\t\ttmp.id = tmp.li_attr.id.toString();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!tmp.id) {\n\t\t\t\t\t\t\t\ttmp.id = tid;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!tmp.li_attr.id) {\n\t\t\t\t\t\t\t\ttmp.li_attr.id = tmp.id;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.a_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.a_attr) {\n\t\t\t\t\t\t\t\t\tif(d.a_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.a_attr[i] = d.a_attr[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.children && d.children.length) {\n\t\t\t\t\t\t\t\tfor(i = 0, j = d.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\tc = parse_nest(d.children[i], tmp.id, ps);\n\t\t\t\t\t\t\t\t\te = m[c];\n\t\t\t\t\t\t\t\t\ttmp.children.push(c);\n\t\t\t\t\t\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\t\t\t\t\t\ttmp.children_d = tmp.children_d.concat(e.children_d);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttmp.children_d = tmp.children_d.concat(tmp.children);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.children && d.children === true) {\n\t\t\t\t\t\t\t\ttmp.state.loaded = false;\n\t\t\t\t\t\t\t\ttmp.children = [];\n\t\t\t\t\t\t\t\ttmp.children_d = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete d.data;\n\t\t\t\t\t\t\tdelete d.children;\n\t\t\t\t\t\t\ttmp.original = d;\n\t\t\t\t\t\t\tm[tmp.id] = tmp;\n\t\t\t\t\t\t\tif(tmp.state.selected) {\n\t\t\t\t\t\t\t\tadd.push(tmp.id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn tmp.id;\n\t\t\t\t\t\t};\n\n\t\t\t\t\tif(dat.length && dat[0].id !== undefined && dat[0].parent !== undefined) {\n\t\t\t\t\t\t// Flat JSON support (for easy import from DB):\n\t\t\t\t\t\t// 1) convert to object (foreach)\n\t\t\t\t\t\tfor(i = 0, j = dat.length; i < j; i++) {\n\t\t\t\t\t\t\tif(!dat[i].children) {\n\t\t\t\t\t\t\t\tdat[i].children = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!dat[i].state) {\n\t\t\t\t\t\t\t\tdat[i].state = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tm[dat[i].id.toString()] = dat[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// 2) populate children (foreach)\n\t\t\t\t\t\tfor(i = 0, j = dat.length; i < j; i++) {\n\t\t\t\t\t\t\tif (!m[dat[i].parent.toString()]) {\n\t\t\t\t\t\t\t\tif (typeof inst !== \"undefined\") {\n\t\t\t\t\t\t\t\t\tinst._data.core.last_error = { 'error' : 'parse', 'plugin' : 'core', 'id' : 'core_07', 'reason' : 'Node with invalid parent', 'data' : JSON.stringify({ 'id' : dat[i].id.toString(), 'parent' : dat[i].parent.toString() }) };\n\t\t\t\t\t\t\t\t\tinst.settings.core.error.call(inst, inst._data.core.last_error);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tm[dat[i].parent.toString()].children.push(dat[i].id.toString());\n\t\t\t\t\t\t\t// populate parent.children_d\n\t\t\t\t\t\t\tp.children_d.push(dat[i].id.toString());\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// 3) normalize && populate parents and children_d with recursion\n\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\ttmp = parse_flat(m[p.children[i]], par, p.parents.concat());\n\t\t\t\t\t\t\tdpc.push(tmp);\n\t\t\t\t\t\t\tif(m[tmp].children_d.length) {\n\t\t\t\t\t\t\t\tdpc = dpc.concat(m[tmp].children_d);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor(i = 0, j = p.parents.length; i < j; i++) {\n\t\t\t\t\t\t\tm[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// ?) three_state selection - p.state.selected && t - (if three_state foreach(dat => ch) -> foreach(parents) if(parent.selected) child.selected = true;\n\t\t\t\t\t\trslt = {\n\t\t\t\t\t\t\t'cnt' : t_cnt,\n\t\t\t\t\t\t\t'mod' : m,\n\t\t\t\t\t\t\t'sel' : sel,\n\t\t\t\t\t\t\t'par' : par,\n\t\t\t\t\t\t\t'dpc' : dpc,\n\t\t\t\t\t\t\t'add' : add\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor(i = 0, j = dat.length; i < j; i++) {\n\t\t\t\t\t\t\ttmp = parse_nest(dat[i], par, p.parents.concat());\n\t\t\t\t\t\t\tif(tmp) {\n\t\t\t\t\t\t\t\tchd.push(tmp);\n\t\t\t\t\t\t\t\tdpc.push(tmp);\n\t\t\t\t\t\t\t\tif(m[tmp].children_d.length) {\n\t\t\t\t\t\t\t\t\tdpc = dpc.concat(m[tmp].children_d);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tp.children = chd;\n\t\t\t\t\t\tp.children_d = dpc;\n\t\t\t\t\t\tfor(i = 0, j = p.parents.length; i < j; i++) {\n\t\t\t\t\t\t\tm[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\trslt = {\n\t\t\t\t\t\t\t'cnt' : t_cnt,\n\t\t\t\t\t\t\t'mod' : m,\n\t\t\t\t\t\t\t'sel' : sel,\n\t\t\t\t\t\t\t'par' : par,\n\t\t\t\t\t\t\t'dpc' : dpc,\n\t\t\t\t\t\t\t'add' : add\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof window === 'undefined' || typeof window.document === 'undefined') {\n\t\t\t\t\t\tpostMessage(rslt);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn rslt;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\trslt = function (rslt, worker) {\n\t\t\t\t\tif(this.element === null) { return; }\n\t\t\t\t\tthis._cnt = rslt.cnt;\n\t\t\t\t\tvar i, m = this._model.data;\n\t\t\t\t\tfor (i in m) {\n\t\t\t\t\t\tif (m.hasOwnProperty(i) && m[i].state && m[i].state.loading && rslt.mod[i]) {\n\t\t\t\t\t\t\trslt.mod[i].state.loading = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._model.data = rslt.mod; // breaks the reference in load_node - careful\n\n\t\t\t\t\tif(worker) {\n\t\t\t\t\t\tvar j, a = rslt.add, r = rslt.sel, s = this._data.core.selected.slice();\n\t\t\t\t\t\tm = this._model.data;\n\t\t\t\t\t\t// if selection was changed while calculating in worker\n\t\t\t\t\t\tif(r.length !== s.length || $.vakata.array_unique(r.concat(s)).length !== r.length) {\n\t\t\t\t\t\t\t// deselect nodes that are no longer selected\n\t\t\t\t\t\t\tfor(i = 0, j = r.length; i < j; i++) {\n\t\t\t\t\t\t\t\tif($.inArray(r[i], a) === -1 && $.inArray(r[i], s) === -1) {\n\t\t\t\t\t\t\t\t\tm[r[i]].state.selected = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// select nodes that were selected in the mean time\n\t\t\t\t\t\t\tfor(i = 0, j = s.length; i < j; i++) {\n\t\t\t\t\t\t\t\tif($.inArray(s[i], r) === -1) {\n\t\t\t\t\t\t\t\t\tm[s[i]].state.selected = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(rslt.add.length) {\n\t\t\t\t\t\tthis._data.core.selected = this._data.core.selected.concat(rslt.add);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.trigger('model', { \"nodes\" : rslt.dpc, 'parent' : rslt.par });\n\n\t\t\t\t\tif(rslt.par !== $.jstree.root) {\n\t\t\t\t\t\tthis._node_changed(rslt.par);\n\t\t\t\t\t\tthis.redraw();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// this.get_container_ul().children('.jstree-initial-node').remove();\n\t\t\t\t\t\tthis.redraw(true);\n\t\t\t\t\t}\n\t\t\t\t\tif(rslt.add.length) {\n\t\t\t\t\t\tthis.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });\n\t\t\t\t\t}\n\n\t\t\t\t\t// If no worker, try to mimic worker behavioour, by invoking cb asynchronously\n\t\t\t\t\tif (!worker && setImmediate) {\n\t\t\t\t\t\tsetImmediate(function(){\n\t\t\t\t\t\t\tcb.call(inst, true);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcb.call(inst, true);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\tif(this.settings.core.worker && window.Blob && window.URL && window.Worker) {\n\t\t\t\ttry {\n\t\t\t\t\tif(this._wrk === null) {\n\t\t\t\t\t\tthis._wrk = window.URL.createObjectURL(\n\t\t\t\t\t\t\tnew window.Blob(\n\t\t\t\t\t\t\t\t['self.onmessage = ' + func.toString()],\n\t\t\t\t\t\t\t\t{type:\"text/javascript\"}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif(!this._data.core.working || force_processing) {\n\t\t\t\t\t\tthis._data.core.working = true;\n\t\t\t\t\t\tw = new window.Worker(this._wrk);\n\t\t\t\t\t\tw.onmessage = $.proxy(function (e) {\n\t\t\t\t\t\t\trslt.call(this, e.data, true);\n\t\t\t\t\t\t\ttry { w.terminate(); w = null; } catch(ignore) { }\n\t\t\t\t\t\t\tif(this._data.core.worker_queue.length) {\n\t\t\t\t\t\t\t\tthis._append_json_data.apply(this, this._data.core.worker_queue.shift());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthis._data.core.working = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this);\n\t\t\t\t\t\tif(!args.par) {\n\t\t\t\t\t\t\tif(this._data.core.worker_queue.length) {\n\t\t\t\t\t\t\t\tthis._append_json_data.apply(this, this._data.core.worker_queue.shift());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthis._data.core.working = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tw.postMessage(args);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._data.core.worker_queue.push([dom, data, cb, true]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch(e) {\n\t\t\t\t\trslt.call(this, func(args), false);\n\t\t\t\t\tif(this._data.core.worker_queue.length) {\n\t\t\t\t\t\tthis._append_json_data.apply(this, this._data.core.worker_queue.shift());\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._data.core.working = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\trslt.call(this, func(args), false);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * parses a node from a jQuery object and appends them to the in memory tree model. Used internally.\n\t\t * @private\n\t\t * @name _parse_model_from_html(d [, p, ps])\n\t\t * @param  {jQuery} d the jQuery object to parse\n\t\t * @param  {String} p the parent ID\n\t\t * @param  {Array} ps list of all parents\n\t\t * @return {String} the ID of the object added to the model\n\t\t */\n\t\t_parse_model_from_html : function (d, p, ps) {\n\t\t\tif(!ps) { ps = []; }\n\t\t\telse { ps = [].concat(ps); }\n\t\t\tif(p) { ps.unshift(p); }\n\t\t\tvar c, e, m = this._model.data,\n\t\t\t\tdata = {\n\t\t\t\t\tid\t\t\t: false,\n\t\t\t\t\ttext\t\t: false,\n\t\t\t\t\ticon\t\t: true,\n\t\t\t\t\tparent\t\t: p,\n\t\t\t\t\tparents\t\t: ps,\n\t\t\t\t\tchildren\t: [],\n\t\t\t\t\tchildren_d\t: [],\n\t\t\t\t\tdata\t\t: null,\n\t\t\t\t\tstate\t\t: { },\n\t\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\t\toriginal\t: false\n\t\t\t\t}, i, tmp, tid;\n\t\t\tfor(i in this._model.default_state) {\n\t\t\t\tif(this._model.default_state.hasOwnProperty(i)) {\n\t\t\t\t\tdata.state[i] = this._model.default_state[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = $.vakata.attributes(d, true);\n\t\t\t$.each(tmp, function (i, v) {\n\t\t\t\tv = $.vakata.trim(v);\n\t\t\t\tif(!v.length) { return true; }\n\t\t\t\tdata.li_attr[i] = v;\n\t\t\t\tif(i === 'id') {\n\t\t\t\t\tdata.id = v.toString();\n\t\t\t\t}\n\t\t\t});\n\t\t\ttmp = d.children('a').first();\n\t\t\tif(tmp.length) {\n\t\t\t\ttmp = $.vakata.attributes(tmp, true);\n\t\t\t\t$.each(tmp, function (i, v) {\n\t\t\t\t\tv = $.vakata.trim(v);\n\t\t\t\t\tif(v.length) {\n\t\t\t\t\t\tdata.a_attr[i] = v;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\ttmp = d.children(\"a\").first().length ? d.children(\"a\").first().clone() : d.clone();\n\t\t\ttmp.children(\"ins, i, ul\").remove();\n\t\t\ttmp = tmp.html();\n\t\t\ttmp = $('<div></div>').html(tmp);\n\t\t\tdata.text = this.settings.core.force_text ? tmp.text() : tmp.html();\n\t\t\ttmp = d.data();\n\t\t\tdata.data = tmp ? $.extend(true, {}, tmp) : null;\n\t\t\tdata.state.opened = d.hasClass('jstree-open');\n\t\t\tdata.state.selected = d.children('a').hasClass('jstree-clicked');\n\t\t\tdata.state.disabled = d.children('a').hasClass('jstree-disabled');\n\t\t\tif(data.data && data.data.jstree) {\n\t\t\t\tfor(i in data.data.jstree) {\n\t\t\t\t\tif(data.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\tdata.state[i] = data.data.jstree[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = d.children(\"a\").children(\".jstree-themeicon\");\n\t\t\tif(tmp.length) {\n\t\t\t\tdata.icon = tmp.hasClass('jstree-themeicon-hidden') ? false : tmp.attr('rel');\n\t\t\t}\n\t\t\tif(data.state.icon !== undefined) {\n\t\t\t\tdata.icon = data.state.icon;\n\t\t\t}\n\t\t\tif(data.icon === undefined || data.icon === null || data.icon === \"\") {\n\t\t\t\tdata.icon = true;\n\t\t\t}\n\t\t\ttmp = d.children(\"ul\").children(\"li\");\n\t\t\tdo {\n\t\t\t\ttid = 'j' + this._id + '_' + (++this._cnt);\n\t\t\t} while(m[tid]);\n\t\t\tdata.id = data.li_attr.id ? data.li_attr.id.toString() : tid;\n\t\t\tif(tmp.length) {\n\t\t\t\ttmp.each($.proxy(function (i, v) {\n\t\t\t\t\tc = this._parse_model_from_html($(v), data.id, ps);\n\t\t\t\t\te = this._model.data[c];\n\t\t\t\t\tdata.children.push(c);\n\t\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\t\tdata.children_d = data.children_d.concat(e.children_d);\n\t\t\t\t\t}\n\t\t\t\t}, this));\n\t\t\t\tdata.children_d = data.children_d.concat(data.children);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(d.hasClass('jstree-closed')) {\n\t\t\t\t\tdata.state.loaded = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(data.li_attr['class']) {\n\t\t\t\tdata.li_attr['class'] = data.li_attr['class'].replace('jstree-closed','').replace('jstree-open','');\n\t\t\t}\n\t\t\tif(data.a_attr['class']) {\n\t\t\t\tdata.a_attr['class'] = data.a_attr['class'].replace('jstree-clicked','').replace('jstree-disabled','');\n\t\t\t}\n\t\t\tm[data.id] = data;\n\t\t\tif(data.state.selected) {\n\t\t\t\tthis._data.core.selected.push(data.id);\n\t\t\t}\n\t\t\treturn data.id;\n\t\t},\n\t\t/**\n\t\t * parses a node from a JSON object (used when dealing with flat data, which has no nesting of children, but has id and parent properties) and appends it to the in memory tree model. Used internally.\n\t\t * @private\n\t\t * @name _parse_model_from_flat_json(d [, p, ps])\n\t\t * @param  {Object} d the JSON object to parse\n\t\t * @param  {String} p the parent ID\n\t\t * @param  {Array} ps list of all parents\n\t\t * @return {String} the ID of the object added to the model\n\t\t */\n\t\t_parse_model_from_flat_json : function (d, p, ps) {\n\t\t\tif(!ps) { ps = []; }\n\t\t\telse { ps = ps.concat(); }\n\t\t\tif(p) { ps.unshift(p); }\n\t\t\tvar tid = d.id.toString(),\n\t\t\t\tm = this._model.data,\n\t\t\t\tdf = this._model.default_state,\n\t\t\t\ti, j, c, e,\n\t\t\t\ttmp = {\n\t\t\t\t\tid\t\t\t: tid,\n\t\t\t\t\ttext\t\t: d.text || '',\n\t\t\t\t\ticon\t\t: d.icon !== undefined ? d.icon : true,\n\t\t\t\t\tparent\t\t: p,\n\t\t\t\t\tparents\t\t: ps,\n\t\t\t\t\tchildren\t: d.children || [],\n\t\t\t\t\tchildren_d\t: d.children_d || [],\n\t\t\t\t\tdata\t\t: d.data,\n\t\t\t\t\tstate\t\t: { },\n\t\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\t\toriginal\t: false\n\t\t\t\t};\n\t\t\tfor(i in df) {\n\t\t\t\tif(df.hasOwnProperty(i)) {\n\t\t\t\t\ttmp.state[i] = df[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && d.data && d.data.jstree && d.data.jstree.icon) {\n\t\t\t\ttmp.icon = d.data.jstree.icon;\n\t\t\t}\n\t\t\tif(tmp.icon === undefined || tmp.icon === null || tmp.icon === \"\") {\n\t\t\t\ttmp.icon = true;\n\t\t\t}\n\t\t\tif(d && d.data) {\n\t\t\t\ttmp.data = d.data;\n\t\t\t\tif(d.data.jstree) {\n\t\t\t\t\tfor(i in d.data.jstree) {\n\t\t\t\t\t\tif(d.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\t\ttmp.state[i] = d.data.jstree[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && typeof d.state === 'object') {\n\t\t\t\tfor (i in d.state) {\n\t\t\t\t\tif(d.state.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.state[i] = d.state[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && typeof d.li_attr === 'object') {\n\t\t\t\tfor (i in d.li_attr) {\n\t\t\t\t\tif(d.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.li_attr[i] = d.li_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!tmp.li_attr.id) {\n\t\t\t\ttmp.li_attr.id = tid;\n\t\t\t}\n\t\t\tif(d && typeof d.a_attr === 'object') {\n\t\t\t\tfor (i in d.a_attr) {\n\t\t\t\t\tif(d.a_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.a_attr[i] = d.a_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && d.children && d.children === true) {\n\t\t\t\ttmp.state.loaded = false;\n\t\t\t\ttmp.children = [];\n\t\t\t\ttmp.children_d = [];\n\t\t\t}\n\t\t\tm[tmp.id] = tmp;\n\t\t\tfor(i = 0, j = tmp.children.length; i < j; i++) {\n\t\t\t\tc = this._parse_model_from_flat_json(m[tmp.children[i]], tmp.id, ps);\n\t\t\t\te = m[c];\n\t\t\t\ttmp.children_d.push(c);\n\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\ttmp.children_d = tmp.children_d.concat(e.children_d);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete d.data;\n\t\t\tdelete d.children;\n\t\t\tm[tmp.id].original = d;\n\t\t\tif(tmp.state.selected) {\n\t\t\t\tthis._data.core.selected.push(tmp.id);\n\t\t\t}\n\t\t\treturn tmp.id;\n\t\t},\n\t\t/**\n\t\t * parses a node from a JSON object and appends it to the in memory tree model. Used internally.\n\t\t * @private\n\t\t * @name _parse_model_from_json(d [, p, ps])\n\t\t * @param  {Object} d the JSON object to parse\n\t\t * @param  {String} p the parent ID\n\t\t * @param  {Array} ps list of all parents\n\t\t * @return {String} the ID of the object added to the model\n\t\t */\n\t\t_parse_model_from_json : function (d, p, ps) {\n\t\t\tif(!ps) { ps = []; }\n\t\t\telse { ps = ps.concat(); }\n\t\t\tif(p) { ps.unshift(p); }\n\t\t\tvar tid = false, i, j, c, e, m = this._model.data, df = this._model.default_state, tmp;\n\t\t\tdo {\n\t\t\t\ttid = 'j' + this._id + '_' + (++this._cnt);\n\t\t\t} while(m[tid]);\n\n\t\t\ttmp = {\n\t\t\t\tid\t\t\t: false,\n\t\t\t\ttext\t\t: typeof d === 'string' ? d : '',\n\t\t\t\ticon\t\t: typeof d === 'object' && d.icon !== undefined ? d.icon : true,\n\t\t\t\tparent\t\t: p,\n\t\t\t\tparents\t\t: ps,\n\t\t\t\tchildren\t: [],\n\t\t\t\tchildren_d\t: [],\n\t\t\t\tdata\t\t: null,\n\t\t\t\tstate\t\t: { },\n\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\toriginal\t: false\n\t\t\t};\n\t\t\tfor(i in df) {\n\t\t\t\tif(df.hasOwnProperty(i)) {\n\t\t\t\t\ttmp.state[i] = df[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && d.id) { tmp.id = d.id.toString(); }\n\t\t\tif(d && d.text) { tmp.text = d.text; }\n\t\t\tif(d && d.data && d.data.jstree && d.data.jstree.icon) {\n\t\t\t\ttmp.icon = d.data.jstree.icon;\n\t\t\t}\n\t\t\tif(tmp.icon === undefined || tmp.icon === null || tmp.icon === \"\") {\n\t\t\t\ttmp.icon = true;\n\t\t\t}\n\t\t\tif(d && d.data) {\n\t\t\t\ttmp.data = d.data;\n\t\t\t\tif(d.data.jstree) {\n\t\t\t\t\tfor(i in d.data.jstree) {\n\t\t\t\t\t\tif(d.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\t\ttmp.state[i] = d.data.jstree[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && typeof d.state === 'object') {\n\t\t\t\tfor (i in d.state) {\n\t\t\t\t\tif(d.state.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.state[i] = d.state[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && typeof d.li_attr === 'object') {\n\t\t\t\tfor (i in d.li_attr) {\n\t\t\t\t\tif(d.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.li_attr[i] = d.li_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(tmp.li_attr.id && !tmp.id) {\n\t\t\t\ttmp.id = tmp.li_attr.id.toString();\n\t\t\t}\n\t\t\tif(!tmp.id) {\n\t\t\t\ttmp.id = tid;\n\t\t\t}\n\t\t\tif(!tmp.li_attr.id) {\n\t\t\t\ttmp.li_attr.id = tmp.id;\n\t\t\t}\n\t\t\tif(d && typeof d.a_attr === 'object') {\n\t\t\t\tfor (i in d.a_attr) {\n\t\t\t\t\tif(d.a_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.a_attr[i] = d.a_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && d.children && d.children.length) {\n\t\t\t\tfor(i = 0, j = d.children.length; i < j; i++) {\n\t\t\t\t\tc = this._parse_model_from_json(d.children[i], tmp.id, ps);\n\t\t\t\t\te = m[c];\n\t\t\t\t\ttmp.children.push(c);\n\t\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\t\ttmp.children_d = tmp.children_d.concat(e.children_d);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttmp.children_d = tmp.children.concat(tmp.children_d);\n\t\t\t}\n\t\t\tif(d && d.children && d.children === true) {\n\t\t\t\ttmp.state.loaded = false;\n\t\t\t\ttmp.children = [];\n\t\t\t\ttmp.children_d = [];\n\t\t\t}\n\t\t\tdelete d.data;\n\t\t\tdelete d.children;\n\t\t\ttmp.original = d;\n\t\t\tm[tmp.id] = tmp;\n\t\t\tif(tmp.state.selected) {\n\t\t\t\tthis._data.core.selected.push(tmp.id);\n\t\t\t}\n\t\t\treturn tmp.id;\n\t\t},\n\t\t/**\n\t\t * redraws all nodes that need to be redrawn. Used internally.\n\t\t * @private\n\t\t * @name _redraw()\n\t\t * @trigger redraw.jstree\n\t\t */\n\t\t_redraw : function () {\n\t\t\tvar nodes = this._model.force_full_redraw ? this._model.data[$.jstree.root].children.concat([]) : this._model.changed.concat([]),\n\t\t\t\tf = document.createElement('UL'), tmp, i, j, fe = this._data.core.focused;\n\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\ttmp = this.redraw_node(nodes[i], true, this._model.force_full_redraw);\n\t\t\t\tif(tmp && this._model.force_full_redraw) {\n\t\t\t\t\tf.appendChild(tmp);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(this._model.force_full_redraw) {\n\t\t\t\tf.className = this.get_container_ul()[0].className;\n\t\t\t\tf.setAttribute('role','group');\n\t\t\t\tthis.element.empty().append(f);\n\t\t\t\t//this.get_container_ul()[0].appendChild(f);\n\t\t\t}\n\t\t\tif(fe !== null && this.settings.core.restore_focus) {\n\t\t\t\ttmp = this.get_node(fe, true);\n\t\t\t\tif(tmp && tmp.length && tmp.children('.jstree-anchor')[0] !== document.activeElement) {\n\t\t\t\t\ttmp.children('.jstree-anchor').focus();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._data.core.focused = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._model.force_full_redraw = false;\n\t\t\tthis._model.changed = [];\n\t\t\t/**\n\t\t\t * triggered after nodes are redrawn\n\t\t\t * @event\n\t\t\t * @name redraw.jstree\n\t\t\t * @param {array} nodes the redrawn nodes\n\t\t\t */\n\t\t\tthis.trigger('redraw', { \"nodes\" : nodes });\n\t\t},\n\t\t/**\n\t\t * redraws all nodes that need to be redrawn or optionally - the whole tree\n\t\t * @name redraw([full])\n\t\t * @param {Boolean} full if set to `true` all nodes are redrawn.\n\t\t */\n\t\tredraw : function (full) {\n\t\t\tif(full) {\n\t\t\t\tthis._model.force_full_redraw = true;\n\t\t\t}\n\t\t\t//if(this._model.redraw_timeout) {\n\t\t\t//\tclearTimeout(this._model.redraw_timeout);\n\t\t\t//}\n\t\t\t//this._model.redraw_timeout = setTimeout($.proxy(this._redraw, this),0);\n\t\t\tthis._redraw();\n\t\t},\n\t\t/**\n\t\t * redraws a single node's children. Used internally.\n\t\t * @private\n\t\t * @name draw_children(node)\n\t\t * @param {mixed} node the node whose children will be redrawn\n\t\t */\n\t\tdraw_children : function (node) {\n\t\t\tvar obj = this.get_node(node),\n\t\t\t\ti = false,\n\t\t\t\tj = false,\n\t\t\t\tk = false,\n\t\t\t\td = document;\n\t\t\tif(!obj) { return false; }\n\t\t\tif(obj.id === $.jstree.root) { return this.redraw(true); }\n\t\t\tnode = this.get_node(node, true);\n\t\t\tif(!node || !node.length) { return false; } // TODO: quick toggle\n\n\t\t\tnode.children('.jstree-children').remove();\n\t\t\tnode = node[0];\n\t\t\tif(obj.children.length && obj.state.loaded) {\n\t\t\t\tk = d.createElement('UL');\n\t\t\t\tk.setAttribute('role', 'group');\n\t\t\t\tk.className = 'jstree-children';\n\t\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\t\tk.appendChild(this.redraw_node(obj.children[i], true, true));\n\t\t\t\t}\n\t\t\t\tnode.appendChild(k);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * redraws a single node. Used internally.\n\t\t * @private\n\t\t * @name redraw_node(node, deep, is_callback, force_render)\n\t\t * @param {mixed} node the node to redraw\n\t\t * @param {Boolean} deep should child nodes be redrawn too\n\t\t * @param {Boolean} is_callback is this a recursion call\n\t\t * @param {Boolean} force_render should children of closed parents be drawn anyway\n\t\t */\n\t\tredraw_node : function (node, deep, is_callback, force_render) {\n\t\t\tvar obj = this.get_node(node),\n\t\t\t\tpar = false,\n\t\t\t\tind = false,\n\t\t\t\told = false,\n\t\t\t\ti = false,\n\t\t\t\tj = false,\n\t\t\t\tk = false,\n\t\t\t\tc = '',\n\t\t\t\td = document,\n\t\t\t\tm = this._model.data,\n\t\t\t\tf = false,\n\t\t\t\ts = false,\n\t\t\t\ttmp = null,\n\t\t\t\tt = 0,\n\t\t\t\tl = 0,\n\t\t\t\thas_children = false,\n\t\t\t\tlast_sibling = false;\n\t\t\tif(!obj) { return false; }\n\t\t\tif(obj.id === $.jstree.root) {  return this.redraw(true); }\n\t\t\tdeep = deep || obj.children.length === 0;\n\t\t\tnode = !document.querySelector ? document.getElementById(obj.id) : this.element[0].querySelector('#' + (\"0123456789\".indexOf(obj.id[0]) !== -1 ? '\\\\3' + obj.id[0] + ' ' + obj.id.substr(1).replace($.jstree.idregex,'\\\\$&') : obj.id.replace($.jstree.idregex,'\\\\$&')) ); //, this.element);\n\t\t\tif(!node) {\n\t\t\t\tdeep = true;\n\t\t\t\t//node = d.createElement('LI');\n\t\t\t\tif(!is_callback) {\n\t\t\t\t\tpar = obj.parent !== $.jstree.root ? $('#' + obj.parent.replace($.jstree.idregex,'\\\\$&'), this.element)[0] : null;\n\t\t\t\t\tif(par !== null && (!par || !m[obj.parent].state.opened)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tind = $.inArray(obj.id, par === null ? m[$.jstree.root].children : m[obj.parent].children);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnode = $(node);\n\t\t\t\tif(!is_callback) {\n\t\t\t\t\tpar = node.parent().parent()[0];\n\t\t\t\t\tif(par === this.element[0]) {\n\t\t\t\t\t\tpar = null;\n\t\t\t\t\t}\n\t\t\t\t\tind = node.index();\n\t\t\t\t}\n\t\t\t\t// m[obj.id].data = node.data(); // use only node's data, no need to touch jquery storage\n\t\t\t\tif(!deep && obj.children.length && !node.children('.jstree-children').length) {\n\t\t\t\t\tdeep = true;\n\t\t\t\t}\n\t\t\t\tif(!deep) {\n\t\t\t\t\told = node.children('.jstree-children')[0];\n\t\t\t\t}\n\t\t\t\tf = node.children('.jstree-anchor')[0] === document.activeElement;\n\t\t\t\tnode.remove();\n\t\t\t\t//node = d.createElement('LI');\n\t\t\t\t//node = node[0];\n\t\t\t}\n\t\t\tnode = this._data.core.node.cloneNode(true);\n\t\t\t// node is DOM, deep is boolean\n\n\t\t\tc = 'jstree-node ';\n\t\t\tfor(i in obj.li_attr) {\n\t\t\t\tif(obj.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\tif(i === 'id') { continue; }\n\t\t\t\t\tif(i !== 'class') {\n\t\t\t\t\t\tnode.setAttribute(i, obj.li_attr[i]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tc += obj.li_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!obj.a_attr.id) {\n\t\t\t\tobj.a_attr.id = obj.id + '_anchor';\n\t\t\t}\n\t\t\tnode.childNodes[1].setAttribute('aria-selected', !!obj.state.selected);\n\t\t\tnode.childNodes[1].setAttribute('aria-level', obj.parents.length);\n\t\t\tif(this.settings.core.compute_elements_positions) {\n\t\t\t\tnode.childNodes[1].setAttribute('aria-setsize', m[obj.parent].children.length);\n\t\t\t\tnode.childNodes[1].setAttribute('aria-posinset', m[obj.parent].children.indexOf(obj.id) + 1);\n\t\t\t}\n\t\t\tif(obj.state.disabled) {\n\t\t\t\tnode.childNodes[1].setAttribute('aria-disabled', true);\n\t\t\t}\n\n\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\tif(!m[obj.children[i]].state.hidden) {\n\t\t\t\t\thas_children = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(obj.parent !== null && m[obj.parent] && !obj.state.hidden) {\n\t\t\t\ti = $.inArray(obj.id, m[obj.parent].children);\n\t\t\t\tlast_sibling = obj.id;\n\t\t\t\tif(i !== -1) {\n\t\t\t\t\ti++;\n\t\t\t\t\tfor(j = m[obj.parent].children.length; i < j; i++) {\n\t\t\t\t\t\tif(!m[m[obj.parent].children[i]].state.hidden) {\n\t\t\t\t\t\t\tlast_sibling = m[obj.parent].children[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(last_sibling !== obj.id) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(obj.state.hidden) {\n\t\t\t\tc += ' jstree-hidden';\n\t\t\t}\n\t\t\tif (obj.state.loading) {\n\t\t\t\tc += ' jstree-loading';\n\t\t\t}\n\t\t\tif(obj.state.loaded && !has_children) {\n\t\t\t\tc += ' jstree-leaf';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tc += obj.state.opened && obj.state.loaded ? ' jstree-open' : ' jstree-closed';\n\t\t\t\tnode.childNodes[1].setAttribute('aria-expanded', (obj.state.opened && obj.state.loaded) );\n\t\t\t}\n\t\t\tif(last_sibling === obj.id) {\n\t\t\t\tc += ' jstree-last';\n\t\t\t}\n\t\t\tnode.id = obj.id;\n\t\t\tnode.className = c;\n\t\t\tc = ( obj.state.selected ? ' jstree-clicked' : '') + ( obj.state.disabled ? ' jstree-disabled' : '');\n\t\t\tfor(j in obj.a_attr) {\n\t\t\t\tif(obj.a_attr.hasOwnProperty(j)) {\n\t\t\t\t\tif(j === 'href' && obj.a_attr[j] === '#') { continue; }\n\t\t\t\t\tif(j !== 'class') {\n\t\t\t\t\t\tnode.childNodes[1].setAttribute(j, obj.a_attr[j]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tc += ' ' + obj.a_attr[j];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(c.length) {\n\t\t\t\tnode.childNodes[1].className = 'jstree-anchor ' + c;\n\t\t\t}\n\t\t\tif((obj.icon && obj.icon !== true) || obj.icon === false) {\n\t\t\t\tif(obj.icon === false) {\n\t\t\t\t\tnode.childNodes[1].childNodes[0].className += ' jstree-themeicon-hidden';\n\t\t\t\t}\n\t\t\t\telse if(obj.icon.indexOf('/') === -1 && obj.icon.indexOf('.') === -1) {\n\t\t\t\t\tnode.childNodes[1].childNodes[0].className += ' ' + obj.icon + ' jstree-themeicon-custom';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnode.childNodes[1].childNodes[0].style.backgroundImage = 'url(\"'+obj.icon+'\")';\n\t\t\t\t\tnode.childNodes[1].childNodes[0].style.backgroundPosition = 'center center';\n\t\t\t\t\tnode.childNodes[1].childNodes[0].style.backgroundSize = 'auto';\n\t\t\t\t\tnode.childNodes[1].childNodes[0].className += ' jstree-themeicon-custom';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.settings.core.force_text) {\n\t\t\t\tnode.childNodes[1].appendChild(d.createTextNode(obj.text));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnode.childNodes[1].innerHTML += obj.text;\n\t\t\t}\n\n\n\t\t\tif(deep && obj.children.length && (obj.state.opened || force_render) && obj.state.loaded) {\n\t\t\t\tk = d.createElement('UL');\n\t\t\t\tk.setAttribute('role', 'group');\n\t\t\t\tk.className = 'jstree-children';\n\t\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\t\tk.appendChild(this.redraw_node(obj.children[i], deep, true));\n\t\t\t\t}\n\t\t\t\tnode.appendChild(k);\n\t\t\t}\n\t\t\tif(old) {\n\t\t\t\tnode.appendChild(old);\n\t\t\t}\n\t\t\tif(!is_callback) {\n\t\t\t\t// append back using par / ind\n\t\t\t\tif(!par) {\n\t\t\t\t\tpar = this.element[0];\n\t\t\t\t}\n\t\t\t\tfor(i = 0, j = par.childNodes.length; i < j; i++) {\n\t\t\t\t\tif(par.childNodes[i] && par.childNodes[i].className && par.childNodes[i].className.indexOf('jstree-children') !== -1) {\n\t\t\t\t\t\ttmp = par.childNodes[i];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!tmp) {\n\t\t\t\t\ttmp = d.createElement('UL');\n\t\t\t\t\ttmp.setAttribute('role', 'group');\n\t\t\t\t\ttmp.className = 'jstree-children';\n\t\t\t\t\tpar.appendChild(tmp);\n\t\t\t\t}\n\t\t\t\tpar = tmp;\n\n\t\t\t\tif(ind < par.childNodes.length) {\n\t\t\t\t\tpar.insertBefore(node, par.childNodes[ind]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tpar.appendChild(node);\n\t\t\t\t}\n\t\t\t\tif(f) {\n\t\t\t\t\tt = this.element[0].scrollTop;\n\t\t\t\t\tl = this.element[0].scrollLeft;\n\t\t\t\t\tnode.childNodes[1].focus();\n\t\t\t\t\tthis.element[0].scrollTop = t;\n\t\t\t\t\tthis.element[0].scrollLeft = l;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(obj.state.opened && !obj.state.loaded) {\n\t\t\t\tobj.state.opened = false;\n\t\t\t\tsetTimeout($.proxy(function () {\n\t\t\t\t\tthis.open_node(obj.id, false, 0);\n\t\t\t\t}, this), 0);\n\t\t\t}\n\t\t\treturn node;\n\t\t},\n\t\t/**\n\t\t * opens a node, revealing its children. If the node is not loaded it will be loaded and opened once ready.\n\t\t * @name open_node(obj [, callback, animation])\n\t\t * @param {mixed} obj the node to open\n\t\t * @param {Function} callback a function to execute once the node is opened\n\t\t * @param {Number} animation the animation duration in milliseconds when opening the node (overrides the `core.animation` setting). Use `false` for no animation.\n\t\t * @trigger open_node.jstree, after_open.jstree, before_open.jstree\n\t\t */\n\t\topen_node : function (obj, callback, animation) {\n\t\t\tvar t1, t2, d, t;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.open_node(obj[t1], callback, animation);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tanimation = animation === undefined ? this.settings.core.animation : animation;\n\t\t\tif(!this.is_closed(obj)) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback.call(this, obj, false);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!this.is_loaded(obj)) {\n\t\t\t\tif(this.is_loading(obj)) {\n\t\t\t\t\treturn setTimeout($.proxy(function () {\n\t\t\t\t\t\tthis.open_node(obj, callback, animation);\n\t\t\t\t\t}, this), 500);\n\t\t\t\t}\n\t\t\t\tthis.load_node(obj, function (o, ok) {\n\t\t\t\t\treturn ok ? this.open_node(o, callback, animation) : (callback ? callback.call(this, o, false) : false);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\td = this.get_node(obj, true);\n\t\t\t\tt = this;\n\t\t\t\tif(d.length) {\n\t\t\t\t\tif(animation && d.children(\".jstree-children\").length) {\n\t\t\t\t\t\td.children(\".jstree-children\").stop(true, true);\n\t\t\t\t\t}\n\t\t\t\t\tif(obj.children.length && !this._firstChild(d.children('.jstree-children')[0])) {\n\t\t\t\t\t\tthis.draw_children(obj);\n\t\t\t\t\t\t//d = this.get_node(obj, true);\n\t\t\t\t\t}\n\t\t\t\t\tif(!animation) {\n\t\t\t\t\t\tthis.trigger('before_open', { \"node\" : obj });\n\t\t\t\t\t\td[0].className = d[0].className.replace('jstree-closed', 'jstree-open');\n\t\t\t\t\t\td[0].childNodes[1].setAttribute(\"aria-expanded\", true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.trigger('before_open', { \"node\" : obj });\n\t\t\t\t\t\td\n\t\t\t\t\t\t\t.children(\".jstree-children\").css(\"display\",\"none\").end()\n\t\t\t\t\t\t\t.removeClass(\"jstree-closed\").addClass(\"jstree-open\")\n\t\t\t\t\t\t\t\t.children('.jstree-anchor').attr(\"aria-expanded\", true).end()\n\t\t\t\t\t\t\t.children(\".jstree-children\").stop(true, true)\n\t\t\t\t\t\t\t\t.slideDown(animation, function () {\n\t\t\t\t\t\t\t\t\tthis.style.display = \"\";\n\t\t\t\t\t\t\t\t\tif (t.element) {\n\t\t\t\t\t\t\t\t\t\tt.trigger(\"after_open\", { \"node\" : obj });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tobj.state.opened = true;\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback.call(this, obj, true);\n\t\t\t\t}\n\t\t\t\tif(!d.length) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered when a node is about to be opened (if the node is supposed to be in the DOM, it will be, but it won't be visible yet)\n\t\t\t\t\t * @event\n\t\t\t\t\t * @name before_open.jstree\n\t\t\t\t\t * @param {Object} node the opened node\n\t\t\t\t\t */\n\t\t\t\t\tthis.trigger('before_open', { \"node\" : obj });\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when a node is opened (if there is an animation it will not be completed yet)\n\t\t\t\t * @event\n\t\t\t\t * @name open_node.jstree\n\t\t\t\t * @param {Object} node the opened node\n\t\t\t\t */\n\t\t\t\tthis.trigger('open_node', { \"node\" : obj });\n\t\t\t\tif(!animation || !d.length) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered when a node is opened and the animation is complete\n\t\t\t\t\t * @event\n\t\t\t\t\t * @name after_open.jstree\n\t\t\t\t\t * @param {Object} node the opened node\n\t\t\t\t\t */\n\t\t\t\t\tthis.trigger(\"after_open\", { \"node\" : obj });\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * opens every parent of a node (node should be loaded)\n\t\t * @name _open_to(obj)\n\t\t * @param {mixed} obj the node to reveal\n\t\t * @private\n\t\t */\n\t\t_open_to : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar i, j, p = obj.parents;\n\t\t\tfor(i = 0, j = p.length; i < j; i+=1) {\n\t\t\t\tif(i !== $.jstree.root) {\n\t\t\t\t\tthis.open_node(p[i], false, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $('#' + obj.id.replace($.jstree.idregex,'\\\\$&'), this.element);\n\t\t},\n\t\t/**\n\t\t * closes a node, hiding its children\n\t\t * @name close_node(obj [, animation])\n\t\t * @param {mixed} obj the node to close\n\t\t * @param {Number} animation the animation duration in milliseconds when closing the node (overrides the `core.animation` setting). Use `false` for no animation.\n\t\t * @trigger close_node.jstree, after_close.jstree\n\t\t */\n\t\tclose_node : function (obj, animation) {\n\t\t\tvar t1, t2, t, d;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.close_node(obj[t1], animation);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(this.is_closed(obj)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tanimation = animation === undefined ? this.settings.core.animation : animation;\n\t\t\tt = this;\n\t\t\td = this.get_node(obj, true);\n\n\t\t\tobj.state.opened = false;\n\t\t\t/**\n\t\t\t * triggered when a node is closed (if there is an animation it will not be complete yet)\n\t\t\t * @event\n\t\t\t * @name close_node.jstree\n\t\t\t * @param {Object} node the closed node\n\t\t\t */\n\t\t\tthis.trigger('close_node',{ \"node\" : obj });\n\t\t\tif(!d.length) {\n\t\t\t\t/**\n\t\t\t\t * triggered when a node is closed and the animation is complete\n\t\t\t\t * @event\n\t\t\t\t * @name after_close.jstree\n\t\t\t\t * @param {Object} node the closed node\n\t\t\t\t */\n\t\t\t\tthis.trigger(\"after_close\", { \"node\" : obj });\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(!animation) {\n\t\t\t\t\td[0].className = d[0].className.replace('jstree-open', 'jstree-closed');\n\t\t\t\t\td.children('.jstree-anchor').attr(\"aria-expanded\", false);\n\t\t\t\t\td.children('.jstree-children').remove();\n\t\t\t\t\tthis.trigger(\"after_close\", { \"node\" : obj });\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\td\n\t\t\t\t\t\t.children(\".jstree-children\").attr(\"style\",\"display:block !important\").end()\n\t\t\t\t\t\t.removeClass(\"jstree-open\").addClass(\"jstree-closed\")\n\t\t\t\t\t\t\t.children('.jstree-anchor').attr(\"aria-expanded\", false).end()\n\t\t\t\t\t\t.children(\".jstree-children\").stop(true, true).slideUp(animation, function () {\n\t\t\t\t\t\t\tthis.style.display = \"\";\n\t\t\t\t\t\t\td.children('.jstree-children').remove();\n\t\t\t\t\t\t\tif (t.element) {\n\t\t\t\t\t\t\t\tt.trigger(\"after_close\", { \"node\" : obj });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * toggles a node - closing it if it is open, opening it if it is closed\n\t\t * @name toggle_node(obj)\n\t\t * @param {mixed} obj the node to toggle\n\t\t */\n\t\ttoggle_node : function (obj) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.toggle_node(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.is_closed(obj)) {\n\t\t\t\treturn this.open_node(obj);\n\t\t\t}\n\t\t\tif(this.is_open(obj)) {\n\t\t\t\treturn this.close_node(obj);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * opens all nodes within a node (or the tree), revealing their children. If the node is not loaded it will be loaded and opened once ready.\n\t\t * @name open_all([obj, animation, original_obj])\n\t\t * @param {mixed} obj the node to open recursively, omit to open all nodes in the tree\n\t\t * @param {Number} animation the animation duration in milliseconds when opening the nodes, the default is no animation\n\t\t * @param {jQuery} reference to the node that started the process (internal use)\n\t\t * @trigger open_all.jstree\n\t\t */\n\t\topen_all : function (obj, animation, original_obj) {\n\t\t\tif(!obj) { obj = $.jstree.root; }\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tvar dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true), i, j, _this;\n\t\t\tif(!dom.length) {\n\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\tif(this.is_closed(this._model.data[obj.children_d[i]])) {\n\t\t\t\t\t\tthis._model.data[obj.children_d[i]].state.opened = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this.trigger('open_all', { \"node\" : obj });\n\t\t\t}\n\t\t\toriginal_obj = original_obj || dom;\n\t\t\t_this = this;\n\t\t\tdom = this.is_closed(obj) ? dom.find('.jstree-closed').addBack() : dom.find('.jstree-closed');\n\t\t\tdom.each(function () {\n\t\t\t\t_this.open_node(\n\t\t\t\t\tthis,\n\t\t\t\t\tfunction(node, status) { if(status && this.is_parent(node)) { this.open_all(node, animation, original_obj); } },\n\t\t\t\t\tanimation || 0\n\t\t\t\t);\n\t\t\t});\n\t\t\tif(original_obj.find('.jstree-closed').length === 0) {\n\t\t\t\t/**\n\t\t\t\t * triggered when an `open_all` call completes\n\t\t\t\t * @event\n\t\t\t\t * @name open_all.jstree\n\t\t\t\t * @param {Object} node the opened node\n\t\t\t\t */\n\t\t\t\tthis.trigger('open_all', { \"node\" : this.get_node(original_obj) });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * closes all nodes within a node (or the tree), revealing their children\n\t\t * @name close_all([obj, animation])\n\t\t * @param {mixed} obj the node to close recursively, omit to close all nodes in the tree\n\t\t * @param {Number} animation the animation duration in milliseconds when closing the nodes, the default is no animation\n\t\t * @trigger close_all.jstree\n\t\t */\n\t\tclose_all : function (obj, animation) {\n\t\t\tif(!obj) { obj = $.jstree.root; }\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tvar dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true),\n\t\t\t\t_this = this, i, j;\n\t\t\tif(dom.length) {\n\t\t\t\tdom = this.is_open(obj) ? dom.find('.jstree-open').addBack() : dom.find('.jstree-open');\n\t\t\t\t$(dom.get().reverse()).each(function () { _this.close_node(this, animation || 0); });\n\t\t\t}\n\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\tthis._model.data[obj.children_d[i]].state.opened = false;\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when an `close_all` call completes\n\t\t\t * @event\n\t\t\t * @name close_all.jstree\n\t\t\t * @param {Object} node the closed node\n\t\t\t */\n\t\t\tthis.trigger('close_all', { \"node\" : obj });\n\t\t},\n\t\t/**\n\t\t * checks if a node is disabled (not selectable)\n\t\t * @name is_disabled(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_disabled : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && obj.state && obj.state.disabled;\n\t\t},\n\t\t/**\n\t\t * enables a node - so that it can be selected\n\t\t * @name enable_node(obj)\n\t\t * @param {mixed} obj the node to enable\n\t\t * @trigger enable_node.jstree\n\t\t */\n\t\tenable_node : function (obj) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.enable_node(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tobj.state.disabled = false;\n\t\t\tthis.get_node(obj,true).children('.jstree-anchor').removeClass('jstree-disabled').attr('aria-disabled', false);\n\t\t\t/**\n\t\t\t * triggered when an node is enabled\n\t\t\t * @event\n\t\t\t * @name enable_node.jstree\n\t\t\t * @param {Object} node the enabled node\n\t\t\t */\n\t\t\tthis.trigger('enable_node', { 'node' : obj });\n\t\t},\n\t\t/**\n\t\t * disables a node - so that it can not be selected\n\t\t * @name disable_node(obj)\n\t\t * @param {mixed} obj the node to disable\n\t\t * @trigger disable_node.jstree\n\t\t */\n\t\tdisable_node : function (obj) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.disable_node(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tobj.state.disabled = true;\n\t\t\tthis.get_node(obj,true).children('.jstree-anchor').addClass('jstree-disabled').attr('aria-disabled', true);\n\t\t\t/**\n\t\t\t * triggered when an node is disabled\n\t\t\t * @event\n\t\t\t * @name disable_node.jstree\n\t\t\t * @param {Object} node the disabled node\n\t\t\t */\n\t\t\tthis.trigger('disable_node', { 'node' : obj });\n\t\t},\n\t\t/**\n\t\t * determines if a node is hidden\n\t\t * @name is_hidden(obj)\n\t\t * @param {mixed} obj the node\n\t\t */\n\t\tis_hidden : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj.state.hidden === true;\n\t\t},\n\t\t/**\n\t\t * hides a node - it is still in the structure but will not be visible\n\t\t * @name hide_node(obj)\n\t\t * @param {mixed} obj the node to hide\n\t\t * @param {Boolean} skip_redraw internal parameter controlling if redraw is called\n\t\t * @trigger hide_node.jstree\n\t\t */\n\t\thide_node : function (obj, skip_redraw) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.hide_node(obj[t1], true);\n\t\t\t\t}\n\t\t\t\tif (!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!obj.state.hidden) {\n\t\t\t\tobj.state.hidden = true;\n\t\t\t\tthis._node_changed(obj.parent);\n\t\t\t\tif(!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is hidden\n\t\t\t\t * @event\n\t\t\t\t * @name hide_node.jstree\n\t\t\t\t * @param {Object} node the hidden node\n\t\t\t\t */\n\t\t\t\tthis.trigger('hide_node', { 'node' : obj });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * shows a node\n\t\t * @name show_node(obj)\n\t\t * @param {mixed} obj the node to show\n\t\t * @param {Boolean} skip_redraw internal parameter controlling if redraw is called\n\t\t * @trigger show_node.jstree\n\t\t */\n\t\tshow_node : function (obj, skip_redraw) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.show_node(obj[t1], true);\n\t\t\t\t}\n\t\t\t\tif (!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(obj.state.hidden) {\n\t\t\t\tobj.state.hidden = false;\n\t\t\t\tthis._node_changed(obj.parent);\n\t\t\t\tif(!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is shown\n\t\t\t\t * @event\n\t\t\t\t * @name show_node.jstree\n\t\t\t\t * @param {Object} node the shown node\n\t\t\t\t */\n\t\t\t\tthis.trigger('show_node', { 'node' : obj });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * hides all nodes\n\t\t * @name hide_all()\n\t\t * @trigger hide_all.jstree\n\t\t */\n\t\thide_all : function (skip_redraw) {\n\t\t\tvar i, m = this._model.data, ids = [];\n\t\t\tfor(i in m) {\n\t\t\t\tif(m.hasOwnProperty(i) && i !== $.jstree.root && !m[i].state.hidden) {\n\t\t\t\t\tm[i].state.hidden = true;\n\t\t\t\t\tids.push(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._model.force_full_redraw = true;\n\t\t\tif(!skip_redraw) {\n\t\t\t\tthis.redraw();\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when all nodes are hidden\n\t\t\t * @event\n\t\t\t * @name hide_all.jstree\n\t\t\t * @param {Array} nodes the IDs of all hidden nodes\n\t\t\t */\n\t\t\tthis.trigger('hide_all', { 'nodes' : ids });\n\t\t\treturn ids;\n\t\t},\n\t\t/**\n\t\t * shows all nodes\n\t\t * @name show_all()\n\t\t * @trigger show_all.jstree\n\t\t */\n\t\tshow_all : function (skip_redraw) {\n\t\t\tvar i, m = this._model.data, ids = [];\n\t\t\tfor(i in m) {\n\t\t\t\tif(m.hasOwnProperty(i) && i !== $.jstree.root && m[i].state.hidden) {\n\t\t\t\t\tm[i].state.hidden = false;\n\t\t\t\t\tids.push(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._model.force_full_redraw = true;\n\t\t\tif(!skip_redraw) {\n\t\t\t\tthis.redraw();\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when all nodes are shown\n\t\t\t * @event\n\t\t\t * @name show_all.jstree\n\t\t\t * @param {Array} nodes the IDs of all shown nodes\n\t\t\t */\n\t\t\tthis.trigger('show_all', { 'nodes' : ids });\n\t\t\treturn ids;\n\t\t},\n\t\t/**\n\t\t * called when a node is selected by the user. Used internally.\n\t\t * @private\n\t\t * @name activate_node(obj, e)\n\t\t * @param {mixed} obj the node\n\t\t * @param {Object} e the related event\n\t\t * @trigger activate_node.jstree, changed.jstree\n\t\t */\n\t\tactivate_node : function (obj, e) {\n\t\t\tif(this.is_disabled(obj)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!e || typeof e !== 'object') {\n\t\t\t\te = {};\n\t\t\t}\n\n\t\t\t// ensure last_clicked is still in the DOM, make it fresh (maybe it was moved?) and make sure it is still selected, if not - make last_clicked the last selected node\n\t\t\tthis._data.core.last_clicked = this._data.core.last_clicked && this._data.core.last_clicked.id !== undefined ? this.get_node(this._data.core.last_clicked.id) : null;\n\t\t\tif(this._data.core.last_clicked && !this._data.core.last_clicked.state.selected) { this._data.core.last_clicked = null; }\n\t\t\tif(!this._data.core.last_clicked && this._data.core.selected.length) { this._data.core.last_clicked = this.get_node(this._data.core.selected[this._data.core.selected.length - 1]); }\n\n\t\t\tif(!this.settings.core.multiple || (!e.metaKey && !e.ctrlKey && !e.shiftKey) || (e.shiftKey && (!this._data.core.last_clicked || !this.get_parent(obj) || this.get_parent(obj) !== this._data.core.last_clicked.parent ) )) {\n\t\t\t\tif(!this.settings.core.multiple && (e.metaKey || e.ctrlKey || e.shiftKey) && this.is_selected(obj)) {\n\t\t\t\t\tthis.deselect_node(obj, false, e);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.deselect_all(true);\n\t\t\t\t\tthis.select_node(obj, false, false, e);\n\t\t\t\t\tthis._data.core.last_clicked = this.get_node(obj);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(e.shiftKey) {\n\t\t\t\t\tvar o = this.get_node(obj).id,\n\t\t\t\t\t\tl = this._data.core.last_clicked.id,\n\t\t\t\t\t\tp = this.get_node(this._data.core.last_clicked.parent).children,\n\t\t\t\t\t\tc = false,\n\t\t\t\t\t\ti, j;\n\t\t\t\t\tfor(i = 0, j = p.length; i < j; i += 1) {\n\t\t\t\t\t\t// separate IFs work whem o and l are the same\n\t\t\t\t\t\tif(p[i] === o) {\n\t\t\t\t\t\t\tc = !c;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(p[i] === l) {\n\t\t\t\t\t\t\tc = !c;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!this.is_disabled(p[i]) && (c || p[i] === o || p[i] === l)) {\n\t\t\t\t\t\t\tif (!this.is_hidden(p[i])) {\n\t\t\t\t\t\t\t\tthis.select_node(p[i], true, false, e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.deselect_node(p[i], true, e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.trigger('changed', { 'action' : 'select_node', 'node' : this.get_node(obj), 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif(!this.is_selected(obj)) {\n\t\t\t\t\t\tthis.select_node(obj, false, false, e);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.deselect_node(obj, false, e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when an node is clicked or intercated with by the user\n\t\t\t * @event\n\t\t\t * @name activate_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {Object} event the ooriginal event (if any) which triggered the call (may be an empty object)\n\t\t\t */\n\t\t\tthis.trigger('activate_node', { 'node' : this.get_node(obj), 'event' : e });\n\t\t},\n\t\t/**\n\t\t * applies the hover state on a node, called when a node is hovered by the user. Used internally.\n\t\t * @private\n\t\t * @name hover_node(obj)\n\t\t * @param {mixed} obj\n\t\t * @trigger hover_node.jstree\n\t\t */\n\t\thover_node : function (obj) {\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(!obj || !obj.length || obj.children('.jstree-hovered').length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar o = this.element.find('.jstree-hovered'), t = this.element;\n\t\t\tif(o && o.length) { this.dehover_node(o); }\n\n\t\t\tobj.children('.jstree-anchor').addClass('jstree-hovered');\n\t\t\t/**\n\t\t\t * triggered when an node is hovered\n\t\t\t * @event\n\t\t\t * @name hover_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t */\n\t\t\tthis.trigger('hover_node', { 'node' : this.get_node(obj) });\n\t\t\tsetTimeout(function () { t.attr('aria-activedescendant', obj[0].id); }, 0);\n\t\t},\n\t\t/**\n\t\t * removes the hover state from a nodecalled when a node is no longer hovered by the user. Used internally.\n\t\t * @private\n\t\t * @name dehover_node(obj)\n\t\t * @param {mixed} obj\n\t\t * @trigger dehover_node.jstree\n\t\t */\n\t\tdehover_node : function (obj) {\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(!obj || !obj.length || !obj.children('.jstree-hovered').length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tobj.children('.jstree-anchor').removeClass('jstree-hovered');\n\t\t\t/**\n\t\t\t * triggered when an node is no longer hovered\n\t\t\t * @event\n\t\t\t * @name dehover_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t */\n\t\t\tthis.trigger('dehover_node', { 'node' : this.get_node(obj) });\n\t\t},\n\t\t/**\n\t\t * select a node\n\t\t * @name select_node(obj [, supress_event, prevent_open])\n\t\t * @param {mixed} obj an array can be used to select multiple nodes\n\t\t * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered\n\t\t * @param {Boolean} prevent_open if set to `true` parents of the selected node won't be opened\n\t\t * @trigger select_node.jstree, changed.jstree\n\t\t */\n\t\tselect_node : function (obj, supress_event, prevent_open, e) {\n\t\t\tvar dom, t1, t2, th;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.select_node(obj[t1], supress_event, prevent_open, e);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(!obj.state.selected) {\n\t\t\t\tobj.state.selected = true;\n\t\t\t\tthis._data.core.selected.push(obj.id);\n\t\t\t\tif(!prevent_open) {\n\t\t\t\t\tdom = this._open_to(obj);\n\t\t\t\t}\n\t\t\t\tif(dom && dom.length) {\n\t\t\t\t\tdom.children('.jstree-anchor').addClass('jstree-clicked').attr('aria-selected', true);\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is selected\n\t\t\t\t * @event\n\t\t\t\t * @name select_node.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t * @param {Object} event the event (if any) that triggered this select_node\n\t\t\t\t */\n\t\t\t\tthis.trigger('select_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\tif(!supress_event) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered when selection changes\n\t\t\t\t\t * @event\n\t\t\t\t\t * @name changed.jstree\n\t\t\t\t\t * @param {Object} node\n\t\t\t\t\t * @param {Object} action the action that caused the selection to change\n\t\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t\t * @param {Object} event the event (if any) that triggered this changed event\n\t\t\t\t\t */\n\t\t\t\t\tthis.trigger('changed', { 'action' : 'select_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * deselect a node\n\t\t * @name deselect_node(obj [, supress_event])\n\t\t * @param {mixed} obj an array can be used to deselect multiple nodes\n\t\t * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered\n\t\t * @trigger deselect_node.jstree, changed.jstree\n\t\t */\n\t\tdeselect_node : function (obj, supress_event, e) {\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.deselect_node(obj[t1], supress_event, e);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(obj.state.selected) {\n\t\t\t\tobj.state.selected = false;\n\t\t\t\tthis._data.core.selected = $.vakata.array_remove_item(this._data.core.selected, obj.id);\n\t\t\t\tif(dom.length) {\n\t\t\t\t\tdom.children('.jstree-anchor').removeClass('jstree-clicked').attr('aria-selected', false);\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is deselected\n\t\t\t\t * @event\n\t\t\t\t * @name deselect_node.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t * @param {Object} event the event (if any) that triggered this deselect_node\n\t\t\t\t */\n\t\t\t\tthis.trigger('deselect_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\tif(!supress_event) {\n\t\t\t\t\tthis.trigger('changed', { 'action' : 'deselect_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * select all nodes in the tree\n\t\t * @name select_all([supress_event])\n\t\t * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered\n\t\t * @trigger select_all.jstree, changed.jstree\n\t\t */\n\t\tselect_all : function (supress_event) {\n\t\t\tvar tmp = this._data.core.selected.concat([]), i, j;\n\t\t\tthis._data.core.selected = this._model.data[$.jstree.root].children_d.concat();\n\t\t\tfor(i = 0, j = this._data.core.selected.length; i < j; i++) {\n\t\t\t\tif(this._model.data[this._data.core.selected[i]]) {\n\t\t\t\t\tthis._model.data[this._data.core.selected[i]].state.selected = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.redraw(true);\n\t\t\t/**\n\t\t\t * triggered when all nodes are selected\n\t\t\t * @event\n\t\t\t * @name select_all.jstree\n\t\t\t * @param {Array} selected the current selection\n\t\t\t */\n\t\t\tthis.trigger('select_all', { 'selected' : this._data.core.selected });\n\t\t\tif(!supress_event) {\n\t\t\t\tthis.trigger('changed', { 'action' : 'select_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * deselect all selected nodes\n\t\t * @name deselect_all([supress_event])\n\t\t * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered\n\t\t * @trigger deselect_all.jstree, changed.jstree\n\t\t */\n\t\tdeselect_all : function (supress_event) {\n\t\t\tvar tmp = this._data.core.selected.concat([]), i, j;\n\t\t\tfor(i = 0, j = this._data.core.selected.length; i < j; i++) {\n\t\t\t\tif(this._model.data[this._data.core.selected[i]]) {\n\t\t\t\t\tthis._model.data[this._data.core.selected[i]].state.selected = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._data.core.selected = [];\n\t\t\tthis.element.find('.jstree-clicked').removeClass('jstree-clicked').attr('aria-selected', false);\n\t\t\t/**\n\t\t\t * triggered when all nodes are deselected\n\t\t\t * @event\n\t\t\t * @name deselect_all.jstree\n\t\t\t * @param {Object} node the previous selection\n\t\t\t * @param {Array} selected the current selection\n\t\t\t */\n\t\t\tthis.trigger('deselect_all', { 'selected' : this._data.core.selected, 'node' : tmp });\n\t\t\tif(!supress_event) {\n\t\t\t\tthis.trigger('changed', { 'action' : 'deselect_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * checks if a node is selected\n\t\t * @name is_selected(obj)\n\t\t * @param  {mixed}  obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_selected : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn obj.state.selected;\n\t\t},\n\t\t/**\n\t\t * get an array of all selected nodes\n\t\t * @name get_selected([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t */\n\t\tget_selected : function (full) {\n\t\t\treturn full ? $.map(this._data.core.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.core.selected.slice();\n\t\t},\n\t\t/**\n\t\t * get an array of all top level selected nodes (ignoring children of selected nodes)\n\t\t * @name get_top_selected([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t */\n\t\tget_top_selected : function (full) {\n\t\t\tvar tmp = this.get_selected(true),\n\t\t\t\tobj = {}, i, j, k, l;\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tobj[tmp[i].id] = tmp[i];\n\t\t\t}\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tfor(k = 0, l = tmp[i].children_d.length; k < l; k++) {\n\t\t\t\t\tif(obj[tmp[i].children_d[k]]) {\n\t\t\t\t\t\tdelete obj[tmp[i].children_d[k]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = [];\n\t\t\tfor(i in obj) {\n\t\t\t\tif(obj.hasOwnProperty(i)) {\n\t\t\t\t\ttmp.push(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;\n\t\t},\n\t\t/**\n\t\t * get an array of all bottom level selected nodes (ignoring selected parents)\n\t\t * @name get_bottom_selected([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t */\n\t\tget_bottom_selected : function (full) {\n\t\t\tvar tmp = this.get_selected(true),\n\t\t\t\tobj = [], i, j;\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tif(!tmp[i].children.length) {\n\t\t\t\t\tobj.push(tmp[i].id);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;\n\t\t},\n\t\t/**\n\t\t * gets the current state of the tree so that it can be restored later with `set_state(state)`. Used internally.\n\t\t * @name get_state()\n\t\t * @private\n\t\t * @return {Object}\n\t\t */\n\t\tget_state : function () {\n\t\t\tvar state\t= {\n\t\t\t\t'core' : {\n\t\t\t\t\t'open' : [],\n\t\t\t\t\t'loaded' : [],\n\t\t\t\t\t'scroll' : {\n\t\t\t\t\t\t'left' : this.element.scrollLeft(),\n\t\t\t\t\t\t'top' : this.element.scrollTop()\n\t\t\t\t\t},\n\t\t\t\t\t/*!\n\t\t\t\t\t'themes' : {\n\t\t\t\t\t\t'name' : this.get_theme(),\n\t\t\t\t\t\t'icons' : this._data.core.themes.icons,\n\t\t\t\t\t\t'dots' : this._data.core.themes.dots\n\t\t\t\t\t},\n\t\t\t\t\t*/\n\t\t\t\t\t'selected' : []\n\t\t\t\t}\n\t\t\t}, i;\n\t\t\tfor(i in this._model.data) {\n\t\t\t\tif(this._model.data.hasOwnProperty(i)) {\n\t\t\t\t\tif(i !== $.jstree.root) {\n\t\t\t\t\t\tif(this._model.data[i].state.loaded && this.settings.core.loaded_state) {\n\t\t\t\t\t\t\tstate.core.loaded.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(this._model.data[i].state.opened) {\n\t\t\t\t\t\t\tstate.core.open.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(this._model.data[i].state.selected) {\n\t\t\t\t\t\t\tstate.core.selected.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn state;\n\t\t},\n\t\t/**\n\t\t * sets the state of the tree. Used internally.\n\t\t * @name set_state(state [, callback])\n\t\t * @private\n\t\t * @param {Object} state the state to restore. Keep in mind this object is passed by reference and jstree will modify it.\n\t\t * @param {Function} callback an optional function to execute once the state is restored.\n\t\t * @trigger set_state.jstree\n\t\t */\n\t\tset_state : function (state, callback) {\n\t\t\tif(state) {\n\t\t\t\tif(state.core && state.core.selected && state.core.initial_selection === undefined) {\n\t\t\t\t\tstate.core.initial_selection = this._data.core.selected.concat([]).sort().join(',');\n\t\t\t\t}\n\t\t\t\tif(state.core) {\n\t\t\t\t\tvar res, n, t, _this, i;\n\t\t\t\t\tif(state.core.loaded) {\n\t\t\t\t\t\tif(!this.settings.core.loaded_state || !$.isArray(state.core.loaded) || !state.core.loaded.length) {\n\t\t\t\t\t\t\tdelete state.core.loaded;\n\t\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._load_nodes(state.core.loaded, function (nodes) {\n\t\t\t\t\t\t\t\tdelete state.core.loaded;\n\t\t\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif(state.core.open) {\n\t\t\t\t\t\tif(!$.isArray(state.core.open) || !state.core.open.length) {\n\t\t\t\t\t\t\tdelete state.core.open;\n\t\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._load_nodes(state.core.open, function (nodes) {\n\t\t\t\t\t\t\t\tthis.open_node(nodes, false, 0);\n\t\t\t\t\t\t\t\tdelete state.core.open;\n\t\t\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif(state.core.scroll) {\n\t\t\t\t\t\tif(state.core.scroll && state.core.scroll.left !== undefined) {\n\t\t\t\t\t\t\tthis.element.scrollLeft(state.core.scroll.left);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(state.core.scroll && state.core.scroll.top !== undefined) {\n\t\t\t\t\t\t\tthis.element.scrollTop(state.core.scroll.top);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete state.core.scroll;\n\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif(state.core.selected) {\n\t\t\t\t\t\t_this = this;\n\t\t\t\t\t\tif (state.core.initial_selection === undefined ||\n\t\t\t\t\t\t\tstate.core.initial_selection === this._data.core.selected.concat([]).sort().join(',')\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthis.deselect_all();\n\t\t\t\t\t\t\t$.each(state.core.selected, function (i, v) {\n\t\t\t\t\t\t\t\t_this.select_node(v, false, true);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete state.core.initial_selection;\n\t\t\t\t\t\tdelete state.core.selected;\n\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tfor(i in state) {\n\t\t\t\t\t\tif(state.hasOwnProperty(i) && i !== \"core\" && $.inArray(i, this.settings.plugins) === -1) {\n\t\t\t\t\t\t\tdelete state[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif($.isEmptyObject(state.core)) {\n\t\t\t\t\t\tdelete state.core;\n\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif($.isEmptyObject(state)) {\n\t\t\t\t\tstate = null;\n\t\t\t\t\tif(callback) { callback.call(this); }\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered when a `set_state` call completes\n\t\t\t\t\t * @event\n\t\t\t\t\t * @name set_state.jstree\n\t\t\t\t\t */\n\t\t\t\t\tthis.trigger('set_state');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t/**\n\t\t * refreshes the tree - all nodes are reloaded with calls to `load_node`.\n\t\t * @name refresh()\n\t\t * @param {Boolean} skip_loading an option to skip showing the loading indicator\n\t\t * @param {Mixed} forget_state if set to `true` state will not be reapplied, if set to a function (receiving the current state as argument) the result of that function will be used as state\n\t\t * @trigger refresh.jstree\n\t\t */\n\t\trefresh : function (skip_loading, forget_state) {\n\t\t\tthis._data.core.state = forget_state === true ? {} : this.get_state();\n\t\t\tif(forget_state && $.isFunction(forget_state)) { this._data.core.state = forget_state.call(this, this._data.core.state); }\n\t\t\tthis._cnt = 0;\n\t\t\tthis._model.data = {};\n\t\t\tthis._model.data[$.jstree.root] = {\n\t\t\t\tid : $.jstree.root,\n\t\t\t\tparent : null,\n\t\t\t\tparents : [],\n\t\t\t\tchildren : [],\n\t\t\t\tchildren_d : [],\n\t\t\t\tstate : { loaded : false }\n\t\t\t};\n\t\t\tthis._data.core.selected = [];\n\t\t\tthis._data.core.last_clicked = null;\n\t\t\tthis._data.core.focused = null;\n\n\t\t\tvar c = this.get_container_ul()[0].className;\n\t\t\tif(!skip_loading) {\n\t\t\t\tthis.element.html(\"<\"+\"ul class='\"+c+\"' role='group'><\"+\"li class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='none' id='j\"+this._id+\"_loading'><i class='jstree-icon jstree-ocl'></i><\"+\"a class='jstree-anchor' role='treeitem' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>\" + this.get_string(\"Loading ...\") + \"</a></li></ul>\");\n\t\t\t\tthis.element.attr('aria-activedescendant','j'+this._id+'_loading');\n\t\t\t}\n\t\t\tthis.load_node($.jstree.root, function (o, s) {\n\t\t\t\tif(s) {\n\t\t\t\t\tthis.get_container_ul()[0].className = c;\n\t\t\t\t\tif(this._firstChild(this.get_container_ul()[0])) {\n\t\t\t\t\t\tthis.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);\n\t\t\t\t\t}\n\t\t\t\t\tthis.set_state($.extend(true, {}, this._data.core.state), function () {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * triggered when a `refresh` call completes\n\t\t\t\t\t\t * @event\n\t\t\t\t\t\t * @name refresh.jstree\n\t\t\t\t\t\t */\n\t\t\t\t\t\tthis.trigger('refresh');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis._data.core.state = null;\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t * refreshes a node in the tree (reload its children) all opened nodes inside that node are reloaded with calls to `load_node`.\n\t\t * @name refresh_node(obj)\n\t\t * @param  {mixed} obj the node\n\t\t * @trigger refresh_node.jstree\n\t\t */\n\t\trefresh_node : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tvar opened = [], to_load = [], s = this._data.core.selected.concat([]);\n\t\t\tto_load.push(obj.id);\n\t\t\tif(obj.state.opened === true) { opened.push(obj.id); }\n\t\t\tthis.get_node(obj, true).find('.jstree-open').each(function() { to_load.push(this.id); opened.push(this.id); });\n\t\t\tthis._load_nodes(to_load, $.proxy(function (nodes) {\n\t\t\t\tthis.open_node(opened, false, 0);\n\t\t\t\tthis.select_node(s);\n\t\t\t\t/**\n\t\t\t\t * triggered when a node is refreshed\n\t\t\t\t * @event\n\t\t\t\t * @name refresh_node.jstree\n\t\t\t\t * @param {Object} node - the refreshed node\n\t\t\t\t * @param {Array} nodes - an array of the IDs of the nodes that were reloaded\n\t\t\t\t */\n\t\t\t\tthis.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes });\n\t\t\t}, this), false, true);\n\t\t},\n\t\t/**\n\t\t * set (change) the ID of a node\n\t\t * @name set_id(obj, id)\n\t\t * @param  {mixed} obj the node\n\t\t * @param  {String} id the new ID\n\t\t * @return {Boolean}\n\t\t * @trigger set_id.jstree\n\t\t */\n\t\tset_id : function (obj, id) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tvar i, j, m = this._model.data, old = obj.id;\n\t\t\tid = id.toString();\n\t\t\t// update parents (replace current ID with new one in children and children_d)\n\t\t\tm[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id;\n\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\tm[obj.parents[i]].children_d[$.inArray(obj.id, m[obj.parents[i]].children_d)] = id;\n\t\t\t}\n\t\t\t// update children (replace current ID with new one in parent and parents)\n\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\tm[obj.children[i]].parent = id;\n\t\t\t}\n\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\tm[obj.children_d[i]].parents[$.inArray(obj.id, m[obj.children_d[i]].parents)] = id;\n\t\t\t}\n\t\t\ti = $.inArray(obj.id, this._data.core.selected);\n\t\t\tif(i !== -1) { this._data.core.selected[i] = id; }\n\t\t\t// update model and obj itself (obj.id, this._model.data[KEY])\n\t\t\ti = this.get_node(obj.id, true);\n\t\t\tif(i) {\n\t\t\t\ti.attr('id', id); //.children('.jstree-anchor').attr('id', id + '_anchor').end().attr('aria-labelledby', id + '_anchor');\n\t\t\t\tif(this.element.attr('aria-activedescendant') === obj.id) {\n\t\t\t\t\tthis.element.attr('aria-activedescendant', id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete m[obj.id];\n\t\t\tobj.id = id;\n\t\t\tobj.li_attr.id = id;\n\t\t\tm[id] = obj;\n\t\t\t/**\n\t\t\t * triggered when a node id value is changed\n\t\t\t * @event\n\t\t\t * @name set_id.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} old the old id\n\t\t\t */\n\t\t\tthis.trigger('set_id',{ \"node\" : obj, \"new\" : obj.id, \"old\" : old });\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * get the text value of a node\n\t\t * @name get_text(obj)\n\t\t * @param  {mixed} obj the node\n\t\t * @return {String}\n\t\t */\n\t\tget_text : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn (!obj || obj.id === $.jstree.root) ? false : obj.text;\n\t\t},\n\t\t/**\n\t\t * set the text value of a node. Used internally, please use `rename_node(obj, val)`.\n\t\t * @private\n\t\t * @name set_text(obj, val)\n\t\t * @param  {mixed} obj the node, you can pass an array to set the text on multiple nodes\n\t\t * @param  {String} val the new text value\n\t\t * @return {Boolean}\n\t\t * @trigger set_text.jstree\n\t\t */\n\t\tset_text : function (obj, val) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.set_text(obj[t1], val);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tobj.text = val;\n\t\t\tif(this.get_node(obj, true).length) {\n\t\t\t\tthis.redraw_node(obj.id);\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when a node text value is changed\n\t\t\t * @event\n\t\t\t * @name set_text.jstree\n\t\t\t * @param {Object} obj\n\t\t\t * @param {String} text the new value\n\t\t\t */\n\t\t\tthis.trigger('set_text',{ \"obj\" : obj, \"text\" : val });\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * gets a JSON representation of a node (or the whole tree)\n\t\t * @name get_json([obj, options])\n\t\t * @param  {mixed} obj\n\t\t * @param  {Object} options\n\t\t * @param  {Boolean} options.no_state do not return state information\n\t\t * @param  {Boolean} options.no_id do not return ID\n\t\t * @param  {Boolean} options.no_children do not include children\n\t\t * @param  {Boolean} options.no_data do not include node data\n\t\t * @param  {Boolean} options.no_li_attr do not include LI attributes\n\t\t * @param  {Boolean} options.no_a_attr do not include A attributes\n\t\t * @param  {Boolean} options.flat return flat JSON instead of nested\n\t\t * @return {Object}\n\t\t */\n\t\tget_json : function (obj, options, flat) {\n\t\t\tobj = this.get_node(obj || $.jstree.root);\n\t\t\tif(!obj) { return false; }\n\t\t\tif(options && options.flat && !flat) { flat = []; }\n\t\t\tvar tmp = {\n\t\t\t\t'id' : obj.id,\n\t\t\t\t'text' : obj.text,\n\t\t\t\t'icon' : this.get_icon(obj),\n\t\t\t\t'li_attr' : $.extend(true, {}, obj.li_attr),\n\t\t\t\t'a_attr' : $.extend(true, {}, obj.a_attr),\n\t\t\t\t'state' : {},\n\t\t\t\t'data' : options && options.no_data ? false : $.extend(true, $.isArray(obj.data)?[]:{}, obj.data)\n\t\t\t\t//( this.get_node(obj, true).length ? this.get_node(obj, true).data() : obj.data ),\n\t\t\t}, i, j;\n\t\t\tif(options && options.flat) {\n\t\t\t\ttmp.parent = obj.parent;\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttmp.children = [];\n\t\t\t}\n\t\t\tif(!options || !options.no_state) {\n\t\t\t\tfor(i in obj.state) {\n\t\t\t\t\tif(obj.state.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.state[i] = obj.state[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdelete tmp.state;\n\t\t\t}\n\t\t\tif(options && options.no_li_attr) {\n\t\t\t\tdelete tmp.li_attr;\n\t\t\t}\n\t\t\tif(options && options.no_a_attr) {\n\t\t\t\tdelete tmp.a_attr;\n\t\t\t}\n\t\t\tif(options && options.no_id) {\n\t\t\t\tdelete tmp.id;\n\t\t\t\tif(tmp.li_attr && tmp.li_attr.id) {\n\t\t\t\t\tdelete tmp.li_attr.id;\n\t\t\t\t}\n\t\t\t\tif(tmp.a_attr && tmp.a_attr.id) {\n\t\t\t\t\tdelete tmp.a_attr.id;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(options && options.flat && obj.id !== $.jstree.root) {\n\t\t\t\tflat.push(tmp);\n\t\t\t}\n\t\t\tif(!options || !options.no_children) {\n\t\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\t\tif(options && options.flat) {\n\t\t\t\t\t\tthis.get_json(obj.children[i], options, flat);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttmp.children.push(this.get_json(obj.children[i], options));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn options && options.flat ? flat : (obj.id === $.jstree.root ? tmp.children : tmp);\n\t\t},\n\t\t/**\n\t\t * create a new node (do not confuse with load_node)\n\t\t * @name create_node([par, node, pos, callback, is_loaded])\n\t\t * @param  {mixed}   par       the parent node (to create a root node use either \"#\" (string) or `null`)\n\t\t * @param  {mixed}   node      the data for the new node (a valid JSON object, or a simple string with the name)\n\t\t * @param  {mixed}   pos       the index at which to insert the node, \"first\" and \"last\" are also supported, default is \"last\"\n\t\t * @param  {Function} callback a function to be called once the node is created\n\t\t * @param  {Boolean} is_loaded internal argument indicating if the parent node was succesfully loaded\n\t\t * @return {String}            the ID of the newly create node\n\t\t * @trigger model.jstree, create_node.jstree\n\t\t */\n\t\tcreate_node : function (par, node, pos, callback, is_loaded) {\n\t\t\tif(par === null) { par = $.jstree.root; }\n\t\t\tpar = this.get_node(par);\n\t\t\tif(!par) { return false; }\n\t\t\tpos = pos === undefined ? \"last\" : pos;\n\t\t\tif(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {\n\t\t\t\treturn this.load_node(par, function () { this.create_node(par, node, pos, callback, true); });\n\t\t\t}\n\t\t\tif(!node) { node = { \"text\" : this.get_string('New node') }; }\n\t\t\tif(typeof node === \"string\") {\n\t\t\t\tnode = { \"text\" : node };\n\t\t\t} else {\n\t\t\t\tnode = $.extend(true, {}, node);\n\t\t\t}\n\t\t\tif(node.text === undefined) { node.text = this.get_string('New node'); }\n\t\t\tvar tmp, dpc, i, j;\n\n\t\t\tif(par.id === $.jstree.root) {\n\t\t\t\tif(pos === \"before\") { pos = \"first\"; }\n\t\t\t\tif(pos === \"after\") { pos = \"last\"; }\n\t\t\t}\n\t\t\tswitch(pos) {\n\t\t\t\tcase \"before\":\n\t\t\t\t\ttmp = this.get_node(par.parent);\n\t\t\t\t\tpos = $.inArray(par.id, tmp.children);\n\t\t\t\t\tpar = tmp;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"after\" :\n\t\t\t\t\ttmp = this.get_node(par.parent);\n\t\t\t\t\tpos = $.inArray(par.id, tmp.children) + 1;\n\t\t\t\t\tpar = tmp;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"inside\":\n\t\t\t\tcase \"first\":\n\t\t\t\t\tpos = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"last\":\n\t\t\t\t\tpos = par.children.length;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif(!pos) { pos = 0; }\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(pos > par.children.length) { pos = par.children.length; }\n\t\t\tif(!node.id) { node.id = true; }\n\t\t\tif(!this.check(\"create_node\", node, par, pos)) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(node.id === true) { delete node.id; }\n\t\t\tnode = this._parse_model_from_json(node, par.id, par.parents.concat());\n\t\t\tif(!node) { return false; }\n\t\t\ttmp = this.get_node(node);\n\t\t\tdpc = [];\n\t\t\tdpc.push(node);\n\t\t\tdpc = dpc.concat(tmp.children_d);\n\t\t\tthis.trigger('model', { \"nodes\" : dpc, \"parent\" : par.id });\n\n\t\t\tpar.children_d = par.children_d.concat(dpc);\n\t\t\tfor(i = 0, j = par.parents.length; i < j; i++) {\n\t\t\t\tthis._model.data[par.parents[i]].children_d = this._model.data[par.parents[i]].children_d.concat(dpc);\n\t\t\t}\n\t\t\tnode = tmp;\n\t\t\ttmp = [];\n\t\t\tfor(i = 0, j = par.children.length; i < j; i++) {\n\t\t\t\ttmp[i >= pos ? i+1 : i] = par.children[i];\n\t\t\t}\n\t\t\ttmp[pos] = node.id;\n\t\t\tpar.children = tmp;\n\n\t\t\tthis.redraw_node(par, true);\n\t\t\t/**\n\t\t\t * triggered when a node is created\n\t\t\t * @event\n\t\t\t * @name create_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} parent the parent's ID\n\t\t\t * @param {Number} position the position of the new node among the parent's children\n\t\t\t */\n\t\t\tthis.trigger('create_node', { \"node\" : this.get_node(node), \"parent\" : par.id, \"position\" : pos });\n\t\t\tif(callback) { callback.call(this, this.get_node(node)); }\n\t\t\treturn node.id;\n\t\t},\n\t\t/**\n\t\t * set the text value of a node\n\t\t * @name rename_node(obj, val)\n\t\t * @param  {mixed} obj the node, you can pass an array to rename multiple nodes to the same name\n\t\t * @param  {String} val the new text value\n\t\t * @return {Boolean}\n\t\t * @trigger rename_node.jstree\n\t\t */\n\t\trename_node : function (obj, val) {\n\t\t\tvar t1, t2, old;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.rename_node(obj[t1], val);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\told = obj.text;\n\t\t\tif(!this.check(\"rename_node\", obj, this.get_parent(obj), val)) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.set_text(obj, val); // .apply(this, Array.prototype.slice.call(arguments))\n\t\t\t/**\n\t\t\t * triggered when a node is renamed\n\t\t\t * @event\n\t\t\t * @name rename_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} text the new value\n\t\t\t * @param {String} old the old value\n\t\t\t */\n\t\t\tthis.trigger('rename_node', { \"node\" : obj, \"text\" : val, \"old\" : old });\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * remove a node\n\t\t * @name delete_node(obj)\n\t\t * @param  {mixed} obj the node, you can pass an array to delete multiple nodes\n\t\t * @return {Boolean}\n\t\t * @trigger delete_node.jstree, changed.jstree\n\t\t */\n\t\tdelete_node : function (obj) {\n\t\t\tvar t1, t2, par, pos, tmp, i, j, k, l, c, top, lft;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.delete_node(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tpar = this.get_node(obj.parent);\n\t\t\tpos = $.inArray(obj.id, par.children);\n\t\t\tc = false;\n\t\t\tif(!this.check(\"delete_node\", obj, par, pos)) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(pos !== -1) {\n\t\t\t\tpar.children = $.vakata.array_remove(par.children, pos);\n\t\t\t}\n\t\t\ttmp = obj.children_d.concat([]);\n\t\t\ttmp.push(obj.id);\n\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\tthis._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {\n\t\t\t\t\treturn $.inArray(v, tmp) === -1;\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor(k = 0, l = tmp.length; k < l; k++) {\n\t\t\t\tif(this._model.data[tmp[k]].state.selected) {\n\t\t\t\t\tc = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (c) {\n\t\t\t\tthis._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {\n\t\t\t\t\treturn $.inArray(v, tmp) === -1;\n\t\t\t\t});\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when a node is deleted\n\t\t\t * @event\n\t\t\t * @name delete_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} parent the parent's ID\n\t\t\t */\n\t\t\tthis.trigger('delete_node', { \"node\" : obj, \"parent\" : par.id });\n\t\t\tif(c) {\n\t\t\t\tthis.trigger('changed', { 'action' : 'delete_node', 'node' : obj, 'selected' : this._data.core.selected, 'parent' : par.id });\n\t\t\t}\n\t\t\tfor(k = 0, l = tmp.length; k < l; k++) {\n\t\t\t\tdelete this._model.data[tmp[k]];\n\t\t\t}\n\t\t\tif($.inArray(this._data.core.focused, tmp) !== -1) {\n\t\t\t\tthis._data.core.focused = null;\n\t\t\t\ttop = this.element[0].scrollTop;\n\t\t\t\tlft = this.element[0].scrollLeft;\n\t\t\t\tif(par.id === $.jstree.root) {\n\t\t\t\t\tif (this._model.data[$.jstree.root].children[0]) {\n\t\t\t\t\t\tthis.get_node(this._model.data[$.jstree.root].children[0], true).children('.jstree-anchor').focus();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.get_node(par, true).children('.jstree-anchor').focus();\n\t\t\t\t}\n\t\t\t\tthis.element[0].scrollTop  = top;\n\t\t\t\tthis.element[0].scrollLeft = lft;\n\t\t\t}\n\t\t\tthis.redraw_node(par, true);\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * check if an operation is premitted on the tree. Used internally.\n\t\t * @private\n\t\t * @name check(chk, obj, par, pos)\n\t\t * @param  {String} chk the operation to check, can be \"create_node\", \"rename_node\", \"delete_node\", \"copy_node\" or \"move_node\"\n\t\t * @param  {mixed} obj the node\n\t\t * @param  {mixed} par the parent\n\t\t * @param  {mixed} pos the position to insert at, or if \"rename_node\" - the new name\n\t\t * @param  {mixed} more some various additional information, for example if a \"move_node\" operations is triggered by DND this will be the hovered node\n\t\t * @return {Boolean}\n\t\t */\n\t\tcheck : function (chk, obj, par, pos, more) {\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\t\t\tpar = par && par.id ? par : this.get_node(par);\n\t\t\tvar tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj,\n\t\t\t\tchc = this.settings.core.check_callback;\n\t\t\tif(chk === \"move_node\" || chk === \"copy_node\") {\n\t\t\t\tif((!more || !more.is_multi) && (chk === \"move_node\" && $.inArray(obj.id, par.children) === pos)) {\n\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_08', 'reason' : 'Moving node to its current position', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif((!more || !more.is_multi) && (obj.id === par.id || (chk === \"move_node\" && $.inArray(obj.id, par.children) === pos) || $.inArray(par.id, obj.children_d) !== -1)) {\n\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_01', 'reason' : 'Moving parent inside child', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(tmp && tmp.data) { tmp = tmp.data; }\n\t\t\tif(tmp && tmp.functions && (tmp.functions[chk] === false || tmp.functions[chk] === true)) {\n\t\t\t\tif(tmp.functions[chk] === false) {\n\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_02', 'reason' : 'Node data prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t}\n\t\t\t\treturn tmp.functions[chk];\n\t\t\t}\n\t\t\tif(chc === false || ($.isFunction(chc) && chc.call(this, chk, obj, par, pos, more) === false) || (chc && chc[chk] === false)) {\n\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_03', 'reason' : 'User config for core.check_callback prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * get the last error\n\t\t * @name last_error()\n\t\t * @return {Object}\n\t\t */\n\t\tlast_error : function () {\n\t\t\treturn this._data.core.last_error;\n\t\t},\n\t\t/**\n\t\t * move a node to a new parent\n\t\t * @name move_node(obj, par [, pos, callback, is_loaded])\n\t\t * @param  {mixed} obj the node to move, pass an array to move multiple nodes\n\t\t * @param  {mixed} par the new parent\n\t\t * @param  {mixed} pos the position to insert at (besides integer values, \"first\" and \"last\" are supported, as well as \"before\" and \"after\"), defaults to integer `0`\n\t\t * @param  {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position\n\t\t * @param  {Boolean} is_loaded internal parameter indicating if the parent node has been loaded\n\t\t * @param  {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn\n\t\t * @param  {Boolean} instance internal parameter indicating if the node comes from another instance\n\t\t * @trigger move_node.jstree\n\t\t */\n\t\tmove_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) {\n\t\t\tvar t1, t2, old_par, old_pos, new_par, old_ins, is_multi, dpc, tmp, i, j, k, l, p;\n\n\t\t\tpar = this.get_node(par);\n\t\t\tpos = pos === undefined ? 0 : pos;\n\t\t\tif(!par) { return false; }\n\t\t\tif(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {\n\t\t\t\treturn this.load_node(par, function () { this.move_node(obj, par, pos, callback, true, false, origin); });\n\t\t\t}\n\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tif(obj.length === 1) {\n\t\t\t\t\tobj = obj[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t//obj = obj.slice();\n\t\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\t\tif((tmp = this.move_node(obj[t1], par, pos, callback, is_loaded, false, origin))) {\n\t\t\t\t\t\t\tpar = tmp;\n\t\t\t\t\t\t\tpos = \"after\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.redraw();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\n\t\t\told_par = (obj.parent || $.jstree.root).toString();\n\t\t\tnew_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent);\n\t\t\told_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));\n\t\t\tis_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);\n\t\t\told_pos = old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1;\n\t\t\tif(old_ins && old_ins._id) {\n\t\t\t\tobj = old_ins._model.data[obj.id];\n\t\t\t}\n\n\t\t\tif(is_multi) {\n\t\t\t\tif((tmp = this.copy_node(obj, par, pos, callback, is_loaded, false, origin))) {\n\t\t\t\t\tif(old_ins) { old_ins.delete_node(obj); }\n\t\t\t\t\treturn tmp;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t//var m = this._model.data;\n\t\t\tif(par.id === $.jstree.root) {\n\t\t\t\tif(pos === \"before\") { pos = \"first\"; }\n\t\t\t\tif(pos === \"after\") { pos = \"last\"; }\n\t\t\t}\n\t\t\tswitch(pos) {\n\t\t\t\tcase \"before\":\n\t\t\t\t\tpos = $.inArray(par.id, new_par.children);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"after\" :\n\t\t\t\t\tpos = $.inArray(par.id, new_par.children) + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"inside\":\n\t\t\t\tcase \"first\":\n\t\t\t\t\tpos = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"last\":\n\t\t\t\t\tpos = new_par.children.length;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif(!pos) { pos = 0; }\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(pos > new_par.children.length) { pos = new_par.children.length; }\n\t\t\tif(!this.check(\"move_node\", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(obj.parent === new_par.id) {\n\t\t\t\tdpc = new_par.children.concat();\n\t\t\t\ttmp = $.inArray(obj.id, dpc);\n\t\t\t\tif(tmp !== -1) {\n\t\t\t\t\tdpc = $.vakata.array_remove(dpc, tmp);\n\t\t\t\t\tif(pos > tmp) { pos--; }\n\t\t\t\t}\n\t\t\t\ttmp = [];\n\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\ttmp[i >= pos ? i+1 : i] = dpc[i];\n\t\t\t\t}\n\t\t\t\ttmp[pos] = obj.id;\n\t\t\t\tnew_par.children = tmp;\n\t\t\t\tthis._node_changed(new_par.id);\n\t\t\t\tthis.redraw(new_par.id === $.jstree.root);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// clean old parent and up\n\t\t\t\ttmp = obj.children_d.concat();\n\t\t\t\ttmp.push(obj.id);\n\t\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\t\tdpc = [];\n\t\t\t\t\tp = old_ins._model.data[obj.parents[i]].children_d;\n\t\t\t\t\tfor(k = 0, l = p.length; k < l; k++) {\n\t\t\t\t\t\tif($.inArray(p[k], tmp) === -1) {\n\t\t\t\t\t\t\tdpc.push(p[k]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\told_ins._model.data[obj.parents[i]].children_d = dpc;\n\t\t\t\t}\n\t\t\t\told_ins._model.data[old_par].children = $.vakata.array_remove_item(old_ins._model.data[old_par].children, obj.id);\n\n\t\t\t\t// insert into new parent and up\n\t\t\t\tfor(i = 0, j = new_par.parents.length; i < j; i++) {\n\t\t\t\t\tthis._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(tmp);\n\t\t\t\t}\n\t\t\t\tdpc = [];\n\t\t\t\tfor(i = 0, j = new_par.children.length; i < j; i++) {\n\t\t\t\t\tdpc[i >= pos ? i+1 : i] = new_par.children[i];\n\t\t\t\t}\n\t\t\t\tdpc[pos] = obj.id;\n\t\t\t\tnew_par.children = dpc;\n\t\t\t\tnew_par.children_d.push(obj.id);\n\t\t\t\tnew_par.children_d = new_par.children_d.concat(obj.children_d);\n\n\t\t\t\t// update object\n\t\t\t\tobj.parent = new_par.id;\n\t\t\t\ttmp = new_par.parents.concat();\n\t\t\t\ttmp.unshift(new_par.id);\n\t\t\t\tp = obj.parents.length;\n\t\t\t\tobj.parents = tmp;\n\n\t\t\t\t// update object children\n\t\t\t\ttmp = tmp.concat();\n\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\tthis._model.data[obj.children_d[i]].parents = this._model.data[obj.children_d[i]].parents.slice(0,p*-1);\n\t\t\t\t\tArray.prototype.push.apply(this._model.data[obj.children_d[i]].parents, tmp);\n\t\t\t\t}\n\n\t\t\t\tif(old_par === $.jstree.root || new_par.id === $.jstree.root) {\n\t\t\t\t\tthis._model.force_full_redraw = true;\n\t\t\t\t}\n\t\t\t\tif(!this._model.force_full_redraw) {\n\t\t\t\t\tthis._node_changed(old_par);\n\t\t\t\t\tthis._node_changed(new_par.id);\n\t\t\t\t}\n\t\t\t\tif(!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(callback) { callback.call(this, obj, new_par, pos); }\n\t\t\t/**\n\t\t\t * triggered when a node is moved\n\t\t\t * @event\n\t\t\t * @name move_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} parent the parent's ID\n\t\t\t * @param {Number} position the position of the node among the parent's children\n\t\t\t * @param {String} old_parent the old parent of the node\n\t\t\t * @param {Number} old_position the old position of the node\n\t\t\t * @param {Boolean} is_multi do the node and new parent belong to different instances\n\t\t\t * @param {jsTree} old_instance the instance the node came from\n\t\t\t * @param {jsTree} new_instance the instance of the new parent\n\t\t\t */\n\t\t\tthis.trigger('move_node', { \"node\" : obj, \"parent\" : new_par.id, \"position\" : pos, \"old_parent\" : old_par, \"old_position\" : old_pos, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });\n\t\t\treturn obj.id;\n\t\t},\n\t\t/**\n\t\t * copy a node to a new parent\n\t\t * @name copy_node(obj, par [, pos, callback, is_loaded])\n\t\t * @param  {mixed} obj the node to copy, pass an array to copy multiple nodes\n\t\t * @param  {mixed} par the new parent\n\t\t * @param  {mixed} pos the position to insert at (besides integer values, \"first\" and \"last\" are supported, as well as \"before\" and \"after\"), defaults to integer `0`\n\t\t * @param  {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position\n\t\t * @param  {Boolean} is_loaded internal parameter indicating if the parent node has been loaded\n\t\t * @param  {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn\n\t\t * @param  {Boolean} instance internal parameter indicating if the node comes from another instance\n\t\t * @trigger model.jstree copy_node.jstree\n\t\t */\n\t\tcopy_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) {\n\t\t\tvar t1, t2, dpc, tmp, i, j, node, old_par, new_par, old_ins, is_multi;\n\n\t\t\tpar = this.get_node(par);\n\t\t\tpos = pos === undefined ? 0 : pos;\n\t\t\tif(!par) { return false; }\n\t\t\tif(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {\n\t\t\t\treturn this.load_node(par, function () { this.copy_node(obj, par, pos, callback, true, false, origin); });\n\t\t\t}\n\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tif(obj.length === 1) {\n\t\t\t\t\tobj = obj[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t//obj = obj.slice();\n\t\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\t\tif((tmp = this.copy_node(obj[t1], par, pos, callback, is_loaded, true, origin))) {\n\t\t\t\t\t\t\tpar = tmp;\n\t\t\t\t\t\t\tpos = \"after\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.redraw();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\n\t\t\told_par = (obj.parent || $.jstree.root).toString();\n\t\t\tnew_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent);\n\t\t\told_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));\n\t\t\tis_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);\n\n\t\t\tif(old_ins && old_ins._id) {\n\t\t\t\tobj = old_ins._model.data[obj.id];\n\t\t\t}\n\n\t\t\tif(par.id === $.jstree.root) {\n\t\t\t\tif(pos === \"before\") { pos = \"first\"; }\n\t\t\t\tif(pos === \"after\") { pos = \"last\"; }\n\t\t\t}\n\t\t\tswitch(pos) {\n\t\t\t\tcase \"before\":\n\t\t\t\t\tpos = $.inArray(par.id, new_par.children);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"after\" :\n\t\t\t\t\tpos = $.inArray(par.id, new_par.children) + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"inside\":\n\t\t\t\tcase \"first\":\n\t\t\t\t\tpos = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"last\":\n\t\t\t\t\tpos = new_par.children.length;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif(!pos) { pos = 0; }\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(pos > new_par.children.length) { pos = new_par.children.length; }\n\t\t\tif(!this.check(\"copy_node\", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tnode = old_ins ? old_ins.get_json(obj, { no_id : true, no_data : true, no_state : true }) : obj;\n\t\t\tif(!node) { return false; }\n\t\t\tif(node.id === true) { delete node.id; }\n\t\t\tnode = this._parse_model_from_json(node, new_par.id, new_par.parents.concat());\n\t\t\tif(!node) { return false; }\n\t\t\ttmp = this.get_node(node);\n\t\t\tif(obj && obj.state && obj.state.loaded === false) { tmp.state.loaded = false; }\n\t\t\tdpc = [];\n\t\t\tdpc.push(node);\n\t\t\tdpc = dpc.concat(tmp.children_d);\n\t\t\tthis.trigger('model', { \"nodes\" : dpc, \"parent\" : new_par.id });\n\n\t\t\t// insert into new parent and up\n\t\t\tfor(i = 0, j = new_par.parents.length; i < j; i++) {\n\t\t\t\tthis._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(dpc);\n\t\t\t}\n\t\t\tdpc = [];\n\t\t\tfor(i = 0, j = new_par.children.length; i < j; i++) {\n\t\t\t\tdpc[i >= pos ? i+1 : i] = new_par.children[i];\n\t\t\t}\n\t\t\tdpc[pos] = tmp.id;\n\t\t\tnew_par.children = dpc;\n\t\t\tnew_par.children_d.push(tmp.id);\n\t\t\tnew_par.children_d = new_par.children_d.concat(tmp.children_d);\n\n\t\t\tif(new_par.id === $.jstree.root) {\n\t\t\t\tthis._model.force_full_redraw = true;\n\t\t\t}\n\t\t\tif(!this._model.force_full_redraw) {\n\t\t\t\tthis._node_changed(new_par.id);\n\t\t\t}\n\t\t\tif(!skip_redraw) {\n\t\t\t\tthis.redraw(new_par.id === $.jstree.root);\n\t\t\t}\n\t\t\tif(callback) { callback.call(this, tmp, new_par, pos); }\n\t\t\t/**\n\t\t\t * triggered when a node is copied\n\t\t\t * @event\n\t\t\t * @name copy_node.jstree\n\t\t\t * @param {Object} node the copied node\n\t\t\t * @param {Object} original the original node\n\t\t\t * @param {String} parent the parent's ID\n\t\t\t * @param {Number} position the position of the node among the parent's children\n\t\t\t * @param {String} old_parent the old parent of the node\n\t\t\t * @param {Number} old_position the position of the original node\n\t\t\t * @param {Boolean} is_multi do the node and new parent belong to different instances\n\t\t\t * @param {jsTree} old_instance the instance the node came from\n\t\t\t * @param {jsTree} new_instance the instance of the new parent\n\t\t\t */\n\t\t\tthis.trigger('copy_node', { \"node\" : tmp, \"original\" : obj, \"parent\" : new_par.id, \"position\" : pos, \"old_parent\" : old_par, \"old_position\" : old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1,'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });\n\t\t\treturn tmp.id;\n\t\t},\n\t\t/**\n\t\t * cut a node (a later call to `paste(obj)` would move the node)\n\t\t * @name cut(obj)\n\t\t * @param  {mixed} obj multiple objects can be passed using an array\n\t\t * @trigger cut.jstree\n\t\t */\n\t\tcut : function (obj) {\n\t\t\tif(!obj) { obj = this._data.core.selected.concat(); }\n\t\t\tif(!$.isArray(obj)) { obj = [obj]; }\n\t\t\tif(!obj.length) { return false; }\n\t\t\tvar tmp = [], o, t1, t2;\n\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\to = this.get_node(obj[t1]);\n\t\t\t\tif(o && o.id && o.id !== $.jstree.root) { tmp.push(o); }\n\t\t\t}\n\t\t\tif(!tmp.length) { return false; }\n\t\t\tccp_node = tmp;\n\t\t\tccp_inst = this;\n\t\t\tccp_mode = 'move_node';\n\t\t\t/**\n\t\t\t * triggered when nodes are added to the buffer for moving\n\t\t\t * @event\n\t\t\t * @name cut.jstree\n\t\t\t * @param {Array} node\n\t\t\t */\n\t\t\tthis.trigger('cut', { \"node\" : obj });\n\t\t},\n\t\t/**\n\t\t * copy a node (a later call to `paste(obj)` would copy the node)\n\t\t * @name copy(obj)\n\t\t * @param  {mixed} obj multiple objects can be passed using an array\n\t\t * @trigger copy.jstree\n\t\t */\n\t\tcopy : function (obj) {\n\t\t\tif(!obj) { obj = this._data.core.selected.concat(); }\n\t\t\tif(!$.isArray(obj)) { obj = [obj]; }\n\t\t\tif(!obj.length) { return false; }\n\t\t\tvar tmp = [], o, t1, t2;\n\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\to = this.get_node(obj[t1]);\n\t\t\t\tif(o && o.id && o.id !== $.jstree.root) { tmp.push(o); }\n\t\t\t}\n\t\t\tif(!tmp.length) { return false; }\n\t\t\tccp_node = tmp;\n\t\t\tccp_inst = this;\n\t\t\tccp_mode = 'copy_node';\n\t\t\t/**\n\t\t\t * triggered when nodes are added to the buffer for copying\n\t\t\t * @event\n\t\t\t * @name copy.jstree\n\t\t\t * @param {Array} node\n\t\t\t */\n\t\t\tthis.trigger('copy', { \"node\" : obj });\n\t\t},\n\t\t/**\n\t\t * get the current buffer (any nodes that are waiting for a paste operation)\n\t\t * @name get_buffer()\n\t\t * @return {Object} an object consisting of `mode` (\"copy_node\" or \"move_node\"), `node` (an array of objects) and `inst` (the instance)\n\t\t */\n\t\tget_buffer : function () {\n\t\t\treturn { 'mode' : ccp_mode, 'node' : ccp_node, 'inst' : ccp_inst };\n\t\t},\n\t\t/**\n\t\t * check if there is something in the buffer to paste\n\t\t * @name can_paste()\n\t\t * @return {Boolean}\n\t\t */\n\t\tcan_paste : function () {\n\t\t\treturn ccp_mode !== false && ccp_node !== false; // && ccp_inst._model.data[ccp_node];\n\t\t},\n\t\t/**\n\t\t * copy or move the previously cut or copied nodes to a new parent\n\t\t * @name paste(obj [, pos])\n\t\t * @param  {mixed} obj the new parent\n\t\t * @param  {mixed} pos the position to insert at (besides integer, \"first\" and \"last\" are supported), defaults to integer `0`\n\t\t * @trigger paste.jstree\n\t\t */\n\t\tpaste : function (obj, pos) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; }\n\t\t\tif(this[ccp_mode](ccp_node, obj, pos, false, false, false, ccp_inst)) {\n\t\t\t\t/**\n\t\t\t\t * triggered when paste is invoked\n\t\t\t\t * @event\n\t\t\t\t * @name paste.jstree\n\t\t\t\t * @param {String} parent the ID of the receiving node\n\t\t\t\t * @param {Array} node the nodes in the buffer\n\t\t\t\t * @param {String} mode the performed operation - \"copy_node\" or \"move_node\"\n\t\t\t\t */\n\t\t\t\tthis.trigger('paste', { \"parent\" : obj.id, \"node\" : ccp_node, \"mode\" : ccp_mode });\n\t\t\t}\n\t\t\tccp_node = false;\n\t\t\tccp_mode = false;\n\t\t\tccp_inst = false;\n\t\t},\n\t\t/**\n\t\t * clear the buffer of previously copied or cut nodes\n\t\t * @name clear_buffer()\n\t\t * @trigger clear_buffer.jstree\n\t\t */\n\t\tclear_buffer : function () {\n\t\t\tccp_node = false;\n\t\t\tccp_mode = false;\n\t\t\tccp_inst = false;\n\t\t\t/**\n\t\t\t * triggered when the copy / cut buffer is cleared\n\t\t\t * @event\n\t\t\t * @name clear_buffer.jstree\n\t\t\t */\n\t\t\tthis.trigger('clear_buffer');\n\t\t},\n\t\t/**\n\t\t * put a node in edit mode (input field to rename the node)\n\t\t * @name edit(obj [, default_text, callback])\n\t\t * @param  {mixed} obj\n\t\t * @param  {String} default_text the text to populate the input with (if omitted or set to a non-string value the node's text value is used)\n\t\t * @param  {Function} callback a function to be called once the text box is blurred, it is called in the instance's scope and receives the node, a status parameter (true if the rename is successful, false otherwise), a boolean indicating if the user cancelled the edit and the original unescaped value provided by the user. You can also access the node's title using .text\n\t\t */\n\t\tedit : function (obj, default_text, callback) {\n\t\t\tvar rtl, w, a, s, t, h1, h2, fn, tmp, cancel = false;\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tif(!this.check(\"edit\", obj, this.get_parent(obj))) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ttmp = obj;\n\t\t\tdefault_text = typeof default_text === 'string' ? default_text : obj.text;\n\t\t\tthis.set_text(obj, \"\");\n\t\t\tobj = this._open_to(obj);\n\t\t\ttmp.text = default_text;\n\n\t\t\trtl = this._data.core.rtl;\n\t\t\tw  = this.element.width();\n\t\t\tthis._data.core.focused = tmp.id;\n\t\t\ta  = obj.children('.jstree-anchor').focus();\n\t\t\ts  = $('<span></span>');\n\t\t\t/*!\n\t\t\toi = obj.children(\"i:visible\"),\n\t\t\tai = a.children(\"i:visible\"),\n\t\t\tw1 = oi.width() * oi.length,\n\t\t\tw2 = ai.width() * ai.length,\n\t\t\t*/\n\t\t\tt  = default_text;\n\t\t\th1 = $(\"<\"+\"div></div>\", { css : { \"position\" : \"absolute\", \"top\" : \"-200px\", \"left\" : (rtl ? \"0px\" : \"-1000px\"), \"visibility\" : \"hidden\" } }).appendTo(document.body);\n\t\t\th2 = $(\"<\"+\"input />\", {\n\t\t\t\t\t\t\"value\" : t,\n\t\t\t\t\t\t\"class\" : \"jstree-rename-input\",\n\t\t\t\t\t\t// \"size\" : t.length,\n\t\t\t\t\t\t\"css\" : {\n\t\t\t\t\t\t\t\"padding\" : \"0\",\n\t\t\t\t\t\t\t\"border\" : \"1px solid silver\",\n\t\t\t\t\t\t\t\"box-sizing\" : \"border-box\",\n\t\t\t\t\t\t\t\"display\" : \"inline-block\",\n\t\t\t\t\t\t\t\"height\" : (this._data.core.li_height) + \"px\",\n\t\t\t\t\t\t\t\"lineHeight\" : (this._data.core.li_height) + \"px\",\n\t\t\t\t\t\t\t\"width\" : \"150px\" // will be set a bit further down\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"blur\" : $.proxy(function (e) {\n\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tvar i = s.children(\".jstree-rename-input\"),\n\t\t\t\t\t\t\t\tv = i.val(),\n\t\t\t\t\t\t\t\tf = this.settings.core.force_text,\n\t\t\t\t\t\t\t\tnv;\n\t\t\t\t\t\t\tif(v === \"\") { v = t; }\n\t\t\t\t\t\t\th1.remove();\n\t\t\t\t\t\t\ts.replaceWith(a);\n\t\t\t\t\t\t\ts.remove();\n\t\t\t\t\t\t\tt = f ? t : $('<div></div>').append($.parseHTML(t)).html();\n\t\t\t\t\t\t\tobj = this.get_node(obj);\n\t\t\t\t\t\t\tthis.set_text(obj, t);\n\t\t\t\t\t\t\tnv = !!this.rename_node(obj, f ? $('<div></div>').text(v).text() : $('<div></div>').append($.parseHTML(v)).html());\n\t\t\t\t\t\t\tif(!nv) {\n\t\t\t\t\t\t\t\tthis.set_text(obj, t); // move this up? and fix #483\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._data.core.focused = tmp.id;\n\t\t\t\t\t\t\tsetTimeout($.proxy(function () {\n\t\t\t\t\t\t\t\tvar node = this.get_node(tmp.id, true);\n\t\t\t\t\t\t\t\tif(node.length) {\n\t\t\t\t\t\t\t\t\tthis._data.core.focused = tmp.id;\n\t\t\t\t\t\t\t\t\tnode.children('.jstree-anchor').focus();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this), 0);\n\t\t\t\t\t\t\tif(callback) {\n\t\t\t\t\t\t\t\tcallback.call(this, tmp, nv, cancel, v);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\th2 = null;\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t\"keydown\" : function (e) {\n\t\t\t\t\t\t\tvar key = e.which;\n\t\t\t\t\t\t\tif(key === 27) {\n\t\t\t\t\t\t\t\tcancel = true;\n\t\t\t\t\t\t\t\tthis.value = t;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) {\n\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(key === 27 || key === 13) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tthis.blur();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"click\" : function (e) { e.stopImmediatePropagation(); },\n\t\t\t\t\t\t\"mousedown\" : function (e) { e.stopImmediatePropagation(); },\n\t\t\t\t\t\t\"keyup\" : function (e) {\n\t\t\t\t\t\t\th2.width(Math.min(h1.text(\"pW\" + this.value).width(),w));\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"keypress\" : function(e) {\n\t\t\t\t\t\t\tif(e.which === 13) { return false; }\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\tfn = {\n\t\t\t\t\t\tfontFamily\t\t: a.css('fontFamily')\t\t|| '',\n\t\t\t\t\t\tfontSize\t\t: a.css('fontSize')\t\t\t|| '',\n\t\t\t\t\t\tfontWeight\t\t: a.css('fontWeight')\t\t|| '',\n\t\t\t\t\t\tfontStyle\t\t: a.css('fontStyle')\t\t|| '',\n\t\t\t\t\t\tfontStretch\t\t: a.css('fontStretch')\t\t|| '',\n\t\t\t\t\t\tfontVariant\t\t: a.css('fontVariant')\t\t|| '',\n\t\t\t\t\t\tletterSpacing\t: a.css('letterSpacing')\t|| '',\n\t\t\t\t\t\twordSpacing\t\t: a.css('wordSpacing')\t\t|| ''\n\t\t\t\t};\n\t\t\ts.attr('class', a.attr('class')).append(a.contents().clone()).append(h2);\n\t\t\ta.replaceWith(s);\n\t\t\th1.css(fn);\n\t\t\th2.css(fn).width(Math.min(h1.text(\"pW\" + h2[0].value).width(),w))[0].select();\n\t\t\t$(document).one('mousedown.jstree touchstart.jstree dnd_start.vakata', function (e) {\n\t\t\t\tif (h2 && e.target !== h2) {\n\t\t\t\t\t$(h2).blur();\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\n\t\t/**\n\t\t * changes the theme\n\t\t * @name set_theme(theme_name [, theme_url])\n\t\t * @param {String} theme_name the name of the new theme to apply\n\t\t * @param {mixed} theme_url  the location of the CSS file for this theme. Omit or set to `false` if you manually included the file. Set to `true` to autoload from the `core.themes.dir` directory.\n\t\t * @trigger set_theme.jstree\n\t\t */\n\t\tset_theme : function (theme_name, theme_url) {\n\t\t\tif(!theme_name) { return false; }\n\t\t\tif(theme_url === true) {\n\t\t\t\tvar dir = this.settings.core.themes.dir;\n\t\t\t\tif(!dir) { dir = $.jstree.path + '/themes'; }\n\t\t\t\ttheme_url = dir + '/' + theme_name + '/style.css';\n\t\t\t}\n\t\t\tif(theme_url && $.inArray(theme_url, themes_loaded) === -1) {\n\t\t\t\t$('head').append('<'+'link rel=\"stylesheet\" href=\"' + theme_url + '\" type=\"text/css\" />');\n\t\t\t\tthemes_loaded.push(theme_url);\n\t\t\t}\n\t\t\tif(this._data.core.themes.name) {\n\t\t\t\tthis.element.removeClass('jstree-' + this._data.core.themes.name);\n\t\t\t}\n\t\t\tthis._data.core.themes.name = theme_name;\n\t\t\tthis.element.addClass('jstree-' + theme_name);\n\t\t\tthis.element[this.settings.core.themes.responsive ? 'addClass' : 'removeClass' ]('jstree-' + theme_name + '-responsive');\n\t\t\t/**\n\t\t\t * triggered when a theme is set\n\t\t\t * @event\n\t\t\t * @name set_theme.jstree\n\t\t\t * @param {String} theme the new theme\n\t\t\t */\n\t\t\tthis.trigger('set_theme', { 'theme' : theme_name });\n\t\t},\n\t\t/**\n\t\t * gets the name of the currently applied theme name\n\t\t * @name get_theme()\n\t\t * @return {String}\n\t\t */\n\t\tget_theme : function () { return this._data.core.themes.name; },\n\t\t/**\n\t\t * changes the theme variant (if the theme has variants)\n\t\t * @name set_theme_variant(variant_name)\n\t\t * @param {String|Boolean} variant_name the variant to apply (if `false` is used the current variant is removed)\n\t\t */\n\t\tset_theme_variant : function (variant_name) {\n\t\t\tif(this._data.core.themes.variant) {\n\t\t\t\tthis.element.removeClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);\n\t\t\t}\n\t\t\tthis._data.core.themes.variant = variant_name;\n\t\t\tif(variant_name) {\n\t\t\t\tthis.element.addClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * gets the name of the currently applied theme variant\n\t\t * @name get_theme()\n\t\t * @return {String}\n\t\t */\n\t\tget_theme_variant : function () { return this._data.core.themes.variant; },\n\t\t/**\n\t\t * shows a striped background on the container (if the theme supports it)\n\t\t * @name show_stripes()\n\t\t */\n\t\tshow_stripes : function () {\n\t\t\tthis._data.core.themes.stripes = true;\n\t\t\tthis.get_container_ul().addClass(\"jstree-striped\");\n\t\t\t/**\n\t\t\t * triggered when stripes are shown\n\t\t\t * @event\n\t\t\t * @name show_stripes.jstree\n\t\t\t */\n\t\t\tthis.trigger('show_stripes');\n\t\t},\n\t\t/**\n\t\t * hides the striped background on the container\n\t\t * @name hide_stripes()\n\t\t */\n\t\thide_stripes : function () {\n\t\t\tthis._data.core.themes.stripes = false;\n\t\t\tthis.get_container_ul().removeClass(\"jstree-striped\");\n\t\t\t/**\n\t\t\t * triggered when stripes are hidden\n\t\t\t * @event\n\t\t\t * @name hide_stripes.jstree\n\t\t\t */\n\t\t\tthis.trigger('hide_stripes');\n\t\t},\n\t\t/**\n\t\t * toggles the striped background on the container\n\t\t * @name toggle_stripes()\n\t\t */\n\t\ttoggle_stripes : function () { if(this._data.core.themes.stripes) { this.hide_stripes(); } else { this.show_stripes(); } },\n\t\t/**\n\t\t * shows the connecting dots (if the theme supports it)\n\t\t * @name show_dots()\n\t\t */\n\t\tshow_dots : function () {\n\t\t\tthis._data.core.themes.dots = true;\n\t\t\tthis.get_container_ul().removeClass(\"jstree-no-dots\");\n\t\t\t/**\n\t\t\t * triggered when dots are shown\n\t\t\t * @event\n\t\t\t * @name show_dots.jstree\n\t\t\t */\n\t\t\tthis.trigger('show_dots');\n\t\t},\n\t\t/**\n\t\t * hides the connecting dots\n\t\t * @name hide_dots()\n\t\t */\n\t\thide_dots : function () {\n\t\t\tthis._data.core.themes.dots = false;\n\t\t\tthis.get_container_ul().addClass(\"jstree-no-dots\");\n\t\t\t/**\n\t\t\t * triggered when dots are hidden\n\t\t\t * @event\n\t\t\t * @name hide_dots.jstree\n\t\t\t */\n\t\t\tthis.trigger('hide_dots');\n\t\t},\n\t\t/**\n\t\t * toggles the connecting dots\n\t\t * @name toggle_dots()\n\t\t */\n\t\ttoggle_dots : function () { if(this._data.core.themes.dots) { this.hide_dots(); } else { this.show_dots(); } },\n\t\t/**\n\t\t * show the node icons\n\t\t * @name show_icons()\n\t\t */\n\t\tshow_icons : function () {\n\t\t\tthis._data.core.themes.icons = true;\n\t\t\tthis.get_container_ul().removeClass(\"jstree-no-icons\");\n\t\t\t/**\n\t\t\t * triggered when icons are shown\n\t\t\t * @event\n\t\t\t * @name show_icons.jstree\n\t\t\t */\n\t\t\tthis.trigger('show_icons');\n\t\t},\n\t\t/**\n\t\t * hide the node icons\n\t\t * @name hide_icons()\n\t\t */\n\t\thide_icons : function () {\n\t\t\tthis._data.core.themes.icons = false;\n\t\t\tthis.get_container_ul().addClass(\"jstree-no-icons\");\n\t\t\t/**\n\t\t\t * triggered when icons are hidden\n\t\t\t * @event\n\t\t\t * @name hide_icons.jstree\n\t\t\t */\n\t\t\tthis.trigger('hide_icons');\n\t\t},\n\t\t/**\n\t\t * toggle the node icons\n\t\t * @name toggle_icons()\n\t\t */\n\t\ttoggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } },\n\t\t/**\n\t\t * show the node ellipsis\n\t\t * @name show_icons()\n\t\t */\n\t\tshow_ellipsis : function () {\n\t\t\tthis._data.core.themes.ellipsis = true;\n\t\t\tthis.get_container_ul().addClass(\"jstree-ellipsis\");\n\t\t\t/**\n\t\t\t * triggered when ellisis is shown\n\t\t\t * @event\n\t\t\t * @name show_ellipsis.jstree\n\t\t\t */\n\t\t\tthis.trigger('show_ellipsis');\n\t\t},\n\t\t/**\n\t\t * hide the node ellipsis\n\t\t * @name hide_ellipsis()\n\t\t */\n\t\thide_ellipsis : function () {\n\t\t\tthis._data.core.themes.ellipsis = false;\n\t\t\tthis.get_container_ul().removeClass(\"jstree-ellipsis\");\n\t\t\t/**\n\t\t\t * triggered when ellisis is hidden\n\t\t\t * @event\n\t\t\t * @name hide_ellipsis.jstree\n\t\t\t */\n\t\t\tthis.trigger('hide_ellipsis');\n\t\t},\n\t\t/**\n\t\t * toggle the node ellipsis\n\t\t * @name toggle_icons()\n\t\t */\n\t\ttoggle_ellipsis : function () { if(this._data.core.themes.ellipsis) { this.hide_ellipsis(); } else { this.show_ellipsis(); } },\n\t\t/**\n\t\t * set the node icon for a node\n\t\t * @name set_icon(obj, icon)\n\t\t * @param {mixed} obj\n\t\t * @param {String} icon the new icon - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class\n\t\t */\n\t\tset_icon : function (obj, icon) {\n\t\t\tvar t1, t2, dom, old;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.set_icon(obj[t1], icon);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\told = obj.icon;\n\t\t\tobj.icon = icon === true || icon === null || icon === undefined || icon === '' ? true : icon;\n\t\t\tdom = this.get_node(obj, true).children(\".jstree-anchor\").children(\".jstree-themeicon\");\n\t\t\tif(icon === false) {\n\t\t\t\tdom.removeClass('jstree-themeicon-custom ' + old).css(\"background\",\"\").removeAttr(\"rel\");\n\t\t\t\tthis.hide_icon(obj);\n\t\t\t}\n\t\t\telse if(icon === true || icon === null || icon === undefined || icon === '') {\n\t\t\t\tdom.removeClass('jstree-themeicon-custom ' + old).css(\"background\",\"\").removeAttr(\"rel\");\n\t\t\t\tif(old === false) { this.show_icon(obj); }\n\t\t\t}\n\t\t\telse if(icon.indexOf(\"/\") === -1 && icon.indexOf(\".\") === -1) {\n\t\t\t\tdom.removeClass(old).css(\"background\",\"\");\n\t\t\t\tdom.addClass(icon + ' jstree-themeicon-custom').attr(\"rel\",icon);\n\t\t\t\tif(old === false) { this.show_icon(obj); }\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdom.removeClass(old).css(\"background\",\"\");\n\t\t\t\tdom.addClass('jstree-themeicon-custom').css(\"background\", \"url('\" + icon + \"') center center no-repeat\").attr(\"rel\",icon);\n\t\t\t\tif(old === false) { this.show_icon(obj); }\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * get the node icon for a node\n\t\t * @name get_icon(obj)\n\t\t * @param {mixed} obj\n\t\t * @return {String}\n\t\t */\n\t\tget_icon : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn (!obj || obj.id === $.jstree.root) ? false : obj.icon;\n\t\t},\n\t\t/**\n\t\t * hide the icon on an individual node\n\t\t * @name hide_icon(obj)\n\t\t * @param {mixed} obj\n\t\t */\n\t\thide_icon : function (obj) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.hide_icon(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj === $.jstree.root) { return false; }\n\t\t\tobj.icon = false;\n\t\t\tthis.get_node(obj, true).children(\".jstree-anchor\").children(\".jstree-themeicon\").addClass('jstree-themeicon-hidden');\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * show the icon on an individual node\n\t\t * @name show_icon(obj)\n\t\t * @param {mixed} obj\n\t\t */\n\t\tshow_icon : function (obj) {\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.show_icon(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj === $.jstree.root) { return false; }\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tobj.icon = dom.length ? dom.children(\".jstree-anchor\").children(\".jstree-themeicon\").attr('rel') : true;\n\t\t\tif(!obj.icon) { obj.icon = true; }\n\t\t\tdom.children(\".jstree-anchor\").children(\".jstree-themeicon\").removeClass('jstree-themeicon-hidden');\n\t\t\treturn true;\n\t\t}\n\t};\n\n\t// helpers\n\t$.vakata = {};\n\t// collect attributes\n\t$.vakata.attributes = function(node, with_values) {\n\t\tnode = $(node)[0];\n\t\tvar attr = with_values ? {} : [];\n\t\tif(node && node.attributes) {\n\t\t\t$.each(node.attributes, function (i, v) {\n\t\t\t\tif($.inArray(v.name.toLowerCase(),['style','contenteditable','hasfocus','tabindex']) !== -1) { return; }\n\t\t\t\tif(v.value !== null && $.vakata.trim(v.value) !== '') {\n\t\t\t\t\tif(with_values) { attr[v.name] = v.value; }\n\t\t\t\t\telse { attr.push(v.name); }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn attr;\n\t};\n\t$.vakata.array_unique = function(array) {\n\t\tvar a = [], i, j, l, o = {};\n\t\tfor(i = 0, l = array.length; i < l; i++) {\n\t\t\tif(o[array[i]] === undefined) {\n\t\t\t\ta.push(array[i]);\n\t\t\t\to[array[i]] = true;\n\t\t\t}\n\t\t}\n\t\treturn a;\n\t};\n\t// remove item from array\n\t$.vakata.array_remove = function(array, from) {\n\t\tarray.splice(from, 1);\n\t\treturn array;\n\t\t//var rest = array.slice((to || from) + 1 || array.length);\n\t\t//array.length = from < 0 ? array.length + from : from;\n\t\t//array.push.apply(array, rest);\n\t\t//return array;\n\t};\n\t// remove item from array\n\t$.vakata.array_remove_item = function(array, item) {\n\t\tvar tmp = $.inArray(item, array);\n\t\treturn tmp !== -1 ? $.vakata.array_remove(array, tmp) : array;\n\t};\n\t$.vakata.array_filter = function(c,a,b,d,e) {\n\t\tif (c.filter) {\n\t\t\treturn c.filter(a, b);\n\t\t}\n\t\td=[];\n\t\tfor (e in c) {\n\t\t\tif (~~e+''===e+'' && e>=0 && a.call(b,c[e],+e,c)) {\n\t\t\t\td.push(c[e]);\n\t\t\t}\n\t\t}\n\t\treturn d;\n\t};\n\t$.vakata.trim = function (text) {\n\t\treturn String.prototype.trim ? \n\t\t\tString.prototype.trim.call(text.toString()) :\n\t\t\ttext.toString().replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t};\n\n\n/**\n * ### Changed plugin\n *\n * This plugin adds more information to the `changed.jstree` event. The new data is contained in the `changed` event data property, and contains a lists of `selected` and `deselected` nodes.\n */\n\n\t$.jstree.plugins.changed = function (options, parent) {\n\t\tvar last = [];\n\t\tthis.trigger = function (ev, data) {\n\t\t\tvar i, j;\n\t\t\tif(!data) {\n\t\t\t\tdata = {};\n\t\t\t}\n\t\t\tif(ev.replace('.jstree','') === 'changed') {\n\t\t\t\tdata.changed = { selected : [], deselected : [] };\n\t\t\t\tvar tmp = {};\n\t\t\t\tfor(i = 0, j = last.length; i < j; i++) {\n\t\t\t\t\ttmp[last[i]] = 1;\n\t\t\t\t}\n\t\t\t\tfor(i = 0, j = data.selected.length; i < j; i++) {\n\t\t\t\t\tif(!tmp[data.selected[i]]) {\n\t\t\t\t\t\tdata.changed.selected.push(data.selected[i]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttmp[data.selected[i]] = 2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor(i = 0, j = last.length; i < j; i++) {\n\t\t\t\t\tif(tmp[last[i]] === 1) {\n\t\t\t\t\t\tdata.changed.deselected.push(last[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlast = data.selected.slice();\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when selection changes (the \"changed\" plugin enhances the original event with more data)\n\t\t\t * @event\n\t\t\t * @name changed.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {Object} action the action that caused the selection to change\n\t\t\t * @param {Array} selected the current selection\n\t\t\t * @param {Object} changed an object containing two properties `selected` and `deselected` - both arrays of node IDs, which were selected or deselected since the last changed event\n\t\t\t * @param {Object} event the event (if any) that triggered this changed event\n\t\t\t * @plugin changed\n\t\t\t */\n\t\t\tparent.trigger.call(this, ev, data);\n\t\t};\n\t\tthis.refresh = function (skip_loading, forget_state) {\n\t\t\tlast = [];\n\t\t\treturn parent.refresh.apply(this, arguments);\n\t\t};\n\t};\n\n/**\n * ### Checkbox plugin\n *\n * This plugin renders checkbox icons in front of each node, making multiple selection much easier.\n * It also supports tri-state behavior, meaning that if a node has a few of its children checked it will be rendered as undetermined, and state will be propagated up.\n */\n\n\tvar _i = document.createElement('I');\n\t_i.className = 'jstree-icon jstree-checkbox';\n\t_i.setAttribute('role', 'presentation');\n\t/**\n\t * stores all defaults for the checkbox plugin\n\t * @name $.jstree.defaults.checkbox\n\t * @plugin checkbox\n\t */\n\t$.jstree.defaults.checkbox = {\n\t\t/**\n\t\t * a boolean indicating if checkboxes should be visible (can be changed at a later time using `show_checkboxes()` and `hide_checkboxes`). Defaults to `true`.\n\t\t * @name $.jstree.defaults.checkbox.visible\n\t\t * @plugin checkbox\n\t\t */\n\t\tvisible\t\t\t\t: true,\n\t\t/**\n\t\t * a boolean indicating if checkboxes should cascade down and have an undetermined state. Defaults to `true`.\n\t\t * @name $.jstree.defaults.checkbox.three_state\n\t\t * @plugin checkbox\n\t\t */\n\t\tthree_state\t\t\t: true,\n\t\t/**\n\t\t * a boolean indicating if clicking anywhere on the node should act as clicking on the checkbox. Defaults to `true`.\n\t\t * @name $.jstree.defaults.checkbox.whole_node\n\t\t * @plugin checkbox\n\t\t */\n\t\twhole_node\t\t\t: true,\n\t\t/**\n\t\t * a boolean indicating if the selected style of a node should be kept, or removed. Defaults to `true`.\n\t\t * @name $.jstree.defaults.checkbox.keep_selected_style\n\t\t * @plugin checkbox\n\t\t */\n\t\tkeep_selected_style\t: true,\n\t\t/**\n\t\t * This setting controls how cascading and undetermined nodes are applied.\n\t\t * If 'up' is in the string - cascading up is enabled, if 'down' is in the string - cascading down is enabled, if 'undetermined' is in the string - undetermined nodes will be used.\n\t\t * If `three_state` is set to `true` this setting is automatically set to 'up+down+undetermined'. Defaults to ''.\n\t\t * @name $.jstree.defaults.checkbox.cascade\n\t\t * @plugin checkbox\n\t\t */\n\t\tcascade\t\t\t\t: '',\n\t\t/**\n\t\t * This setting controls if checkbox are bound to the general tree selection or to an internal array maintained by the checkbox plugin. Defaults to `true`, only set to `false` if you know exactly what you are doing.\n\t\t * @name $.jstree.defaults.checkbox.tie_selection\n\t\t * @plugin checkbox\n\t\t */\n\t\ttie_selection\t\t: true,\n\n\t\t/**\n\t\t * This setting controls if cascading down affects disabled checkboxes\n\t\t * @name $.jstree.defaults.checkbox.cascade_to_disabled\n\t\t * @plugin checkbox\n\t\t */\n\t\tcascade_to_disabled : true,\n\n\t\t/**\n\t\t * This setting controls if cascading down affects hidden checkboxes\n\t\t * @name $.jstree.defaults.checkbox.cascade_to_hidden\n\t\t * @plugin checkbox\n\t\t */\n\t\tcascade_to_hidden : true\n\t};\n\t$.jstree.plugins.checkbox = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\t\t\tthis._data.checkbox.uto = false;\n\t\t\tthis._data.checkbox.selected = [];\n\t\t\tif(this.settings.checkbox.three_state) {\n\t\t\t\tthis.settings.checkbox.cascade = 'up+down+undetermined';\n\t\t\t}\n\t\t\tthis.element\n\t\t\t\t.on(\"init.jstree\", $.proxy(function () {\n\t\t\t\t\t\tthis._data.checkbox.visible = this.settings.checkbox.visible;\n\t\t\t\t\t\tif(!this.settings.checkbox.keep_selected_style) {\n\t\t\t\t\t\t\tthis.element.addClass('jstree-checkbox-no-clicked');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(this.settings.checkbox.tie_selection) {\n\t\t\t\t\t\t\tthis.element.addClass('jstree-checkbox-selection');\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"loading.jstree\", $.proxy(function () {\n\t\t\t\t\t\tthis[ this._data.checkbox.visible ? 'show_checkboxes' : 'hide_checkboxes' ]();\n\t\t\t\t\t}, this));\n\t\t\tif(this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {\n\t\t\t\tthis.element\n\t\t\t\t\t.on('changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree', $.proxy(function () {\n\t\t\t\t\t\t\t// only if undetermined is in setting\n\t\t\t\t\t\t\tif(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }\n\t\t\t\t\t\t\tthis._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);\n\t\t\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif(!this.settings.checkbox.tie_selection) {\n\t\t\t\tthis.element\n\t\t\t\t\t.on('model.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\tvar m = this._model.data,\n\t\t\t\t\t\t\tp = m[data.parent],\n\t\t\t\t\t\t\tdpc = data.nodes,\n\t\t\t\t\t\t\ti, j;\n\t\t\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\t\t\tm[dpc[i]].state.checked = m[dpc[i]].state.checked || (m[dpc[i]].original && m[dpc[i]].original.state && m[dpc[i]].original.state.checked);\n\t\t\t\t\t\t\tif(m[dpc[i]].state.checked) {\n\t\t\t\t\t\t\t\tthis._data.checkbox.selected.push(dpc[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif(this.settings.checkbox.cascade.indexOf('up') !== -1 || this.settings.checkbox.cascade.indexOf('down') !== -1) {\n\t\t\t\tthis.element\n\t\t\t\t\t.on('model.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\tvar m = this._model.data,\n\t\t\t\t\t\t\t\tp = m[data.parent],\n\t\t\t\t\t\t\t\tdpc = data.nodes,\n\t\t\t\t\t\t\t\tchd = [],\n\t\t\t\t\t\t\t\tc, i, j, k, l, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection;\n\n\t\t\t\t\t\t\tif(s.indexOf('down') !== -1) {\n\t\t\t\t\t\t\t\t// apply down\n\t\t\t\t\t\t\t\tif(p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\tm[dpc[i]].state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(dpc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\tif(m[dpc[i]].state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\t\t\tfor(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) {\n\t\t\t\t\t\t\t\t\t\t\t\tm[m[dpc[i]].children_d[k]].state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(m[dpc[i]].children_d);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(s.indexOf('up') !== -1) {\n\t\t\t\t\t\t\t\t// apply up\n\t\t\t\t\t\t\t\tfor(i = 0, j = p.children_d.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\tif(!m[p.children_d[i]].children.length) {\n\t\t\t\t\t\t\t\t\t\tchd.push(m[p.children_d[i]].parent);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchd = $.vakata.array_unique(chd);\n\t\t\t\t\t\t\t\tfor(k = 0, l = chd.length; k < l; k++) {\n\t\t\t\t\t\t\t\t\tp = m[chd[k]];\n\t\t\t\t\t\t\t\t\twhile(p && p.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\t\tc += m[p.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif(c === j) {\n\t\t\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);\n\t\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass( t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tp = this.get_node(p.parent);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected);\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t.on(this.settings.checkbox.tie_selection ? 'select_node.jstree' : 'check_node.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\tvar self = this,\n\t\t\t\t\t\t\t\tobj = data.node,\n\t\t\t\t\t\t\t\tm = this._model.data,\n\t\t\t\t\t\t\t\tpar = this.get_node(obj.parent),\n\t\t\t\t\t\t\t\ti, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,\n\t\t\t\t\t\t\t\tsel = {}, cur = this._data[ t ? 'core' : 'checkbox' ].selected;\n\n\t\t\t\t\t\t\tfor (i = 0, j = cur.length; i < j; i++) {\n\t\t\t\t\t\t\t\tsel[cur[i]] = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// apply down\n\t\t\t\t\t\t\tif(s.indexOf('down') !== -1) {\n\t\t\t\t\t\t\t\t//this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d));\n\t\t\t\t\t\t\t\tvar selectedIds = this._cascade_new_checked_state(obj.id, true);\n\t\t\t\t\t\t\t\tvar temp = obj.children_d.concat(obj.id);\n\t\t\t\t\t\t\t\tfor (i = 0, j = temp.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\tif (selectedIds.indexOf(temp[i]) > -1) {\n\t\t\t\t\t\t\t\t\t\tsel[temp[i]] = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tdelete sel[temp[i]];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// apply up\n\t\t\t\t\t\t\tif(s.indexOf('up') !== -1) {\n\t\t\t\t\t\t\t\twhile(par && par.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\t\tfor(i = 0, j = par.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\tc += m[par.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif(c === j) {\n\t\t\t\t\t\t\t\t\t\tpar.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\tsel[par.id] = true;\n\t\t\t\t\t\t\t\t\t\t//this._data[ t ? 'core' : 'checkbox' ].selected.push(par.id);\n\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(par, true);\n\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tpar = this.get_node(par.parent);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcur = [];\n\t\t\t\t\t\t\tfor (i in sel) {\n\t\t\t\t\t\t\t\tif (sel.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\tcur.push(i);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = cur;\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t.on(this.settings.checkbox.tie_selection ? 'deselect_all.jstree' : 'uncheck_all.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\tvar obj = this.get_node($.jstree.root),\n\t\t\t\t\t\t\t\tm = this._model.data,\n\t\t\t\t\t\t\t\ti, j, tmp;\n\t\t\t\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\t\t\t\ttmp = m[obj.children_d[i]];\n\t\t\t\t\t\t\t\tif(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {\n\t\t\t\t\t\t\t\t\ttmp.original.state.undetermined = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t.on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\tvar self = this,\n\t\t\t\t\t\t\t\tobj = data.node,\n\t\t\t\t\t\t\t\tdom = this.get_node(obj, true),\n\t\t\t\t\t\t\t\ti, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,\n\t\t\t\t\t\t\t\tcur = this._data[ t ? 'core' : 'checkbox' ].selected, sel = {},\n\t\t\t\t\t\t\t\tstillSelectedIds = [],\n\t\t\t\t\t\t\t\tallIds = obj.children_d.concat(obj.id);\n\n\t\t\t\t\t\t\t// apply down\n\t\t\t\t\t\t\tif(s.indexOf('down') !== -1) {\n\t\t\t\t\t\t\t\tvar selectedIds = this._cascade_new_checked_state(obj.id, false);\n\n\t\t\t\t\t\t\t\tcur = $.vakata.array_filter(cur, function(id) {\n\t\t\t\t\t\t\t\t\treturn allIds.indexOf(id) === -1 || selectedIds.indexOf(id) > -1;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// only apply up if cascade up is enabled and if this node is not selected\n\t\t\t\t\t\t\t// (if all child nodes are disabled and cascade_to_disabled === false then this node will till be selected).\n\t\t\t\t\t\t\tif(s.indexOf('up') !== -1 && cur.indexOf(obj.id) === -1) {\n\t\t\t\t\t\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\ttmp = this._model.data[obj.parents[i]];\n\t\t\t\t\t\t\t\t\ttmp.state[ t ? 'selected' : 'checked' ] = false;\n\t\t\t\t\t\t\t\t\tif(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {\n\t\t\t\t\t\t\t\t\t\ttmp.original.state.undetermined = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttmp = this.get_node(obj.parents[i], true);\n\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tcur = $.vakata.array_filter(cur, function(id) {\n\t\t\t\t\t\t\t\t\treturn obj.parents.indexOf(id) === -1;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = cur;\n\t\t\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif(this.settings.checkbox.cascade.indexOf('up') !== -1) {\n\t\t\t\tthis.element\n\t\t\t\t\t.on('delete_node.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\t// apply up (whole handler)\n\t\t\t\t\t\t\tvar p = this.get_node(data.parent),\n\t\t\t\t\t\t\t\tm = this._model.data,\n\t\t\t\t\t\t\t\ti, j, c, tmp, t = this.settings.checkbox.tie_selection;\n\t\t\t\t\t\t\twhile(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\tc += m[p.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(j > 0 && c === j) {\n\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);\n\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tp = this.get_node(p.parent);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t.on('move_node.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\t// apply up (whole handler)\n\t\t\t\t\t\t\tvar is_multi = data.is_multi,\n\t\t\t\t\t\t\t\told_par = data.old_parent,\n\t\t\t\t\t\t\t\tnew_par = this.get_node(data.parent),\n\t\t\t\t\t\t\t\tm = this._model.data,\n\t\t\t\t\t\t\t\tp, c, i, j, tmp, t = this.settings.checkbox.tie_selection;\n\t\t\t\t\t\t\tif(!is_multi) {\n\t\t\t\t\t\t\t\tp = this.get_node(old_par);\n\t\t\t\t\t\t\t\twhile(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\tc += m[p.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif(j > 0 && c === j) {\n\t\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);\n\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tp = this.get_node(p.parent);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tp = new_par;\n\t\t\t\t\t\t\twhile(p && p.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\tc += m[p.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(c === j) {\n\t\t\t\t\t\t\t\t\tif(!p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);\n\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif(p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = false;\n\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_remove_item(this._data[ t ? 'core' : 'checkbox' ].selected, p.id);\n\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tp = this.get_node(p.parent);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this));\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * get an array of all nodes whose state is \"undetermined\"\n\t\t * @name get_undetermined([full])\n\t\t * @param  {boolean} full: if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.get_undetermined = function (full) {\n\t\t\tif (this.settings.checkbox.cascade.indexOf('undetermined') === -1) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tvar i, j, k, l, o = {}, m = this._model.data, t = this.settings.checkbox.tie_selection, s = this._data[ t ? 'core' : 'checkbox' ].selected, p = [], tt = this, r = [];\n\t\t\tfor(i = 0, j = s.length; i < j; i++) {\n\t\t\t\tif(m[s[i]] && m[s[i]].parents) {\n\t\t\t\t\tfor(k = 0, l = m[s[i]].parents.length; k < l; k++) {\n\t\t\t\t\t\tif(o[m[s[i]].parents[k]] !== undefined) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(m[s[i]].parents[k] !== $.jstree.root) {\n\t\t\t\t\t\t\to[m[s[i]].parents[k]] = true;\n\t\t\t\t\t\t\tp.push(m[s[i]].parents[k]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// attempt for server side undetermined state\n\t\t\tthis.element.find('.jstree-closed').not(':has(.jstree-children)')\n\t\t\t\t.each(function () {\n\t\t\t\t\tvar tmp = tt.get_node(this), tmp2;\n\t\t\t\t\t\n\t\t\t\t\tif(!tmp) { return; }\n\t\t\t\t\t\n\t\t\t\t\tif(!tmp.state.loaded) {\n\t\t\t\t\t\tif(tmp.original && tmp.original.state && tmp.original.state.undetermined && tmp.original.state.undetermined === true) {\n\t\t\t\t\t\t\tif(o[tmp.id] === undefined && tmp.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\to[tmp.id] = true;\n\t\t\t\t\t\t\t\tp.push(tmp.id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor(k = 0, l = tmp.parents.length; k < l; k++) {\n\t\t\t\t\t\t\t\tif(o[tmp.parents[k]] === undefined && tmp.parents[k] !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\to[tmp.parents[k]] = true;\n\t\t\t\t\t\t\t\t\tp.push(tmp.parents[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor(i = 0, j = tmp.children_d.length; i < j; i++) {\n\t\t\t\t\t\t\ttmp2 = m[tmp.children_d[i]];\n\t\t\t\t\t\t\tif(!tmp2.state.loaded && tmp2.original && tmp2.original.state && tmp2.original.state.undetermined && tmp2.original.state.undetermined === true) {\n\t\t\t\t\t\t\t\tif(o[tmp2.id] === undefined && tmp2.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\to[tmp2.id] = true;\n\t\t\t\t\t\t\t\t\tp.push(tmp2.id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfor(k = 0, l = tmp2.parents.length; k < l; k++) {\n\t\t\t\t\t\t\t\t\tif(o[tmp2.parents[k]] === undefined && tmp2.parents[k] !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\t\to[tmp2.parents[k]] = true;\n\t\t\t\t\t\t\t\t\t\tp.push(tmp2.parents[k]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\tfor (i = 0, j = p.length; i < j; i++) {\n\t\t\t\tif(!m[p[i]].state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\tr.push(full ? m[p[i]] : p[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn r;\n\t\t};\n\t\t/**\n\t\t * set the undetermined state where and if necessary. Used internally.\n\t\t * @private\n\t\t * @name _undetermined()\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis._undetermined = function () {\n\t\t\tif(this.element === null) { return; }\n\t\t\tvar p = this.get_undetermined(false), i, j, s;\n\n\t\t\tthis.element.find('.jstree-undetermined').removeClass('jstree-undetermined');\n\t\t\tfor (i = 0, j = p.length; i < j; i++) {\n\t\t\t\ts = this.get_node(p[i], true);\n\t\t\t\tif(s && s.length) {\n\t\t\t\t\ts.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined');\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tthis.redraw_node = function(obj, deep, is_callback, force_render) {\n\t\t\tobj = parent.redraw_node.apply(this, arguments);\n\t\t\tif(obj) {\n\t\t\t\tvar i, j, tmp = null, icon = null;\n\t\t\t\tfor(i = 0, j = obj.childNodes.length; i < j; i++) {\n\t\t\t\t\tif(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf(\"jstree-anchor\") !== -1) {\n\t\t\t\t\t\ttmp = obj.childNodes[i];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(tmp) {\n\t\t\t\t\tif(!this.settings.checkbox.tie_selection && this._model.data[obj.id].state.checked) { tmp.className += ' jstree-checked'; }\n\t\t\t\t\ticon = _i.cloneNode(false);\n\t\t\t\t\tif(this._model.data[obj.id].state.checkbox_disabled) { icon.className += ' jstree-checkbox-disabled'; }\n\t\t\t\t\ttmp.insertBefore(icon, tmp.childNodes[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!is_callback && this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {\n\t\t\t\tif(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }\n\t\t\t\tthis._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);\n\t\t\t}\n\t\t\treturn obj;\n\t\t};\n\t\t/**\n\t\t * show the node checkbox icons\n\t\t * @name show_checkboxes()\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.show_checkboxes = function () { this._data.core.themes.checkboxes = true; this.get_container_ul().removeClass(\"jstree-no-checkboxes\"); };\n\t\t/**\n\t\t * hide the node checkbox icons\n\t\t * @name hide_checkboxes()\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.hide_checkboxes = function () { this._data.core.themes.checkboxes = false; this.get_container_ul().addClass(\"jstree-no-checkboxes\"); };\n\t\t/**\n\t\t * toggle the node icons\n\t\t * @name toggle_checkboxes()\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.toggle_checkboxes = function () { if(this._data.core.themes.checkboxes) { this.hide_checkboxes(); } else { this.show_checkboxes(); } };\n\t\t/**\n\t\t * checks if a node is in an undetermined state\n\t\t * @name is_undetermined(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tthis.is_undetermined = function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tvar s = this.settings.checkbox.cascade, i, j, t = this.settings.checkbox.tie_selection, d = this._data[ t ? 'core' : 'checkbox' ].selected, m = this._model.data;\n\t\t\tif(!obj || obj.state[ t ? 'selected' : 'checked' ] === true || s.indexOf('undetermined') === -1 || (s.indexOf('down') === -1 && s.indexOf('up') === -1)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!obj.state.loaded && obj.original.state.undetermined === true) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\tif($.inArray(obj.children_d[i], d) !== -1 || (!m[obj.children_d[i]].state.loaded && m[obj.children_d[i]].original.state.undetermined)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\t/**\n\t\t * disable a node's checkbox\n\t\t * @name disable_checkbox(obj)\n\t\t * @param {mixed} obj an array can be used too\n\t\t * @trigger disable_checkbox.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.disable_checkbox = function (obj) {\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.disable_checkbox(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(!obj.state.checkbox_disabled) {\n\t\t\t\tobj.state.checkbox_disabled = true;\n\t\t\t\tif(dom && dom.length) {\n\t\t\t\t\tdom.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-checkbox-disabled');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node's checkbox is disabled\n\t\t\t\t * @event\n\t\t\t\t * @name disable_checkbox.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @plugin checkbox\n\t\t\t\t */\n\t\t\t\tthis.trigger('disable_checkbox', { 'node' : obj });\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * enable a node's checkbox\n\t\t * @name enable_checkbox(obj)\n\t\t * @param {mixed} obj an array can be used too\n\t\t * @trigger enable_checkbox.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.enable_checkbox = function (obj) {\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.enable_checkbox(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(obj.state.checkbox_disabled) {\n\t\t\t\tobj.state.checkbox_disabled = false;\n\t\t\t\tif(dom && dom.length) {\n\t\t\t\t\tdom.children('.jstree-anchor').children('.jstree-checkbox').removeClass('jstree-checkbox-disabled');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node's checkbox is enabled\n\t\t\t\t * @event\n\t\t\t\t * @name enable_checkbox.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @plugin checkbox\n\t\t\t\t */\n\t\t\t\tthis.trigger('enable_checkbox', { 'node' : obj });\n\t\t\t}\n\t\t};\n\n\t\tthis.activate_node = function (obj, e) {\n\t\t\tif($(e.target).hasClass('jstree-checkbox-disabled')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(this.settings.checkbox.tie_selection && (this.settings.checkbox.whole_node || $(e.target).hasClass('jstree-checkbox'))) {\n\t\t\t\te.ctrlKey = true;\n\t\t\t}\n\t\t\tif(this.settings.checkbox.tie_selection || (!this.settings.checkbox.whole_node && !$(e.target).hasClass('jstree-checkbox'))) {\n\t\t\t\treturn parent.activate_node.call(this, obj, e);\n\t\t\t}\n\t\t\tif(this.is_disabled(obj)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(this.is_checked(obj)) {\n\t\t\t\tthis.uncheck_node(obj, e);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.check_node(obj, e);\n\t\t\t}\n\t\t\tthis.trigger('activate_node', { 'node' : this.get_node(obj) });\n\t\t};\n\n\t\t/**\n\t\t * Cascades checked state to a node and all its descendants. This function does NOT affect hidden and disabled nodes (or their descendants).\n\t\t * However if these unaffected nodes are already selected their ids will be included in the returned array.\n\t\t * @private\n\t\t * @param {string} id the node ID\n\t\t * @param {bool} checkedState should the nodes be checked or not\n\t\t * @returns {Array} Array of all node id's (in this tree branch) that are checked.\n\t\t */\n\t\tthis._cascade_new_checked_state = function (id, checkedState) {\n\t\t\tvar self = this;\n\t\t\tvar t = this.settings.checkbox.tie_selection;\n\t\t\tvar node = this._model.data[id];\n\t\t\tvar selectedNodeIds = [];\n\t\t\tvar selectedChildrenIds = [], i, j, selectedChildIds;\n\n\t\t\tif (\n\t\t\t\t(this.settings.checkbox.cascade_to_disabled || !node.state.disabled) &&\n\t\t\t\t(this.settings.checkbox.cascade_to_hidden || !node.state.hidden)\n\t\t\t) {\n\t\t\t\t//First try and check/uncheck the children\n\t\t\t\tif (node.children) {\n\t\t\t\t\tfor (i = 0, j = node.children.length; i < j; i++) {\n\t\t\t\t\t\tvar childId = node.children[i];\n\t\t\t\t\t\tselectedChildIds = self._cascade_new_checked_state(childId, checkedState);\n\t\t\t\t\t\tselectedNodeIds = selectedNodeIds.concat(selectedChildIds);\n\t\t\t\t\t\tif (selectedChildIds.indexOf(childId) > -1) {\n\t\t\t\t\t\t\tselectedChildrenIds.push(childId);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar dom = self.get_node(node, true);\n\n\t\t\t\t//A node's state is undetermined if some but not all of it's children are checked/selected .\n\t\t\t\tvar undetermined = selectedChildrenIds.length > 0 && selectedChildrenIds.length < node.children.length;\n\n\t\t\t\tif(node.original && node.original.state && node.original.state.undetermined) {\n\t\t\t\t\tnode.original.state.undetermined = undetermined;\n\t\t\t\t}\n\n\t\t\t\t//If a node is undetermined then remove selected class\n\t\t\t\tif (undetermined) {\n\t\t\t\t\tnode.state[ t ? 'selected' : 'checked' ] = false;\n\t\t\t\t\tdom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t}\n\t\t\t\t//Otherwise, if the checkedState === true (i.e. the node is being checked now) and all of the node's children are checked (if it has any children),\n\t\t\t\t//check the node and style it correctly.\n\t\t\t\telse if (checkedState && selectedChildrenIds.length === node.children.length) {\n\t\t\t\t\tnode.state[ t ? 'selected' : 'checked' ] = checkedState;\n\t\t\t\t\tselectedNodeIds.push(node.id);\n\n\t\t\t\t\tdom.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnode.state[ t ? 'selected' : 'checked' ] = false;\n\t\t\t\t\tdom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tselectedChildIds = this.get_checked_descendants(id);\n\n\t\t\t\tif (node.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\tselectedChildIds.push(node.id);\n\t\t\t\t}\n\n\t\t\t\tselectedNodeIds = selectedNodeIds.concat(selectedChildIds);\n\t\t\t}\n\n\t\t\treturn selectedNodeIds;\n\t\t};\n\n\t\t/**\n\t\t * Gets ids of nodes selected in branch (of tree) specified by id (does not include the node specified by id)\n\t\t * @name get_checked_descendants(obj)\n\t\t * @param {string} id the node ID\n\t\t * @return {Array} array of IDs\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.get_checked_descendants = function (id) {\n\t\t\tvar self = this;\n\t\t\tvar t = self.settings.checkbox.tie_selection;\n\t\t\tvar node = self._model.data[id];\n\n\t\t\treturn $.vakata.array_filter(node.children_d, function(_id) {\n\t\t\t\treturn self._model.data[_id].state[ t ? 'selected' : 'checked' ];\n\t\t\t});\n\t\t};\n\n\t\t/**\n\t\t * check a node (only if tie_selection in checkbox settings is false, otherwise select_node will be called internally)\n\t\t * @name check_node(obj)\n\t\t * @param {mixed} obj an array can be used to check multiple nodes\n\t\t * @trigger check_node.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.check_node = function (obj, e) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.select_node(obj, false, true, e); }\n\t\t\tvar dom, t1, t2, th;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.check_node(obj[t1], e);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(!obj.state.checked) {\n\t\t\t\tobj.state.checked = true;\n\t\t\t\tthis._data.checkbox.selected.push(obj.id);\n\t\t\t\tif(dom && dom.length) {\n\t\t\t\t\tdom.children('.jstree-anchor').addClass('jstree-checked');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is checked (only if tie_selection in checkbox settings is false)\n\t\t\t\t * @event\n\t\t\t\t * @name check_node.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t * @param {Object} event the event (if any) that triggered this check_node\n\t\t\t\t * @plugin checkbox\n\t\t\t\t */\n\t\t\t\tthis.trigger('check_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * uncheck a node (only if tie_selection in checkbox settings is false, otherwise deselect_node will be called internally)\n\t\t * @name uncheck_node(obj)\n\t\t * @param {mixed} obj an array can be used to uncheck multiple nodes\n\t\t * @trigger uncheck_node.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.uncheck_node = function (obj, e) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.deselect_node(obj, false, e); }\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.uncheck_node(obj[t1], e);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(obj.state.checked) {\n\t\t\t\tobj.state.checked = false;\n\t\t\t\tthis._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, obj.id);\n\t\t\t\tif(dom.length) {\n\t\t\t\t\tdom.children('.jstree-anchor').removeClass('jstree-checked');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is unchecked (only if tie_selection in checkbox settings is false)\n\t\t\t\t * @event\n\t\t\t\t * @name uncheck_node.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t * @param {Object} event the event (if any) that triggered this uncheck_node\n\t\t\t\t * @plugin checkbox\n\t\t\t\t */\n\t\t\t\tthis.trigger('uncheck_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });\n\t\t\t}\n\t\t};\n\t\t\n\t\t/**\n\t\t * checks all nodes in the tree (only if tie_selection in checkbox settings is false, otherwise select_all will be called internally)\n\t\t * @name check_all()\n\t\t * @trigger check_all.jstree, changed.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.check_all = function () {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.select_all(); }\n\t\t\tvar tmp = this._data.checkbox.selected.concat([]), i, j;\n\t\t\tthis._data.checkbox.selected = this._model.data[$.jstree.root].children_d.concat();\n\t\t\tfor(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {\n\t\t\t\tif(this._model.data[this._data.checkbox.selected[i]]) {\n\t\t\t\t\tthis._model.data[this._data.checkbox.selected[i]].state.checked = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.redraw(true);\n\t\t\t/**\n\t\t\t * triggered when all nodes are checked (only if tie_selection in checkbox settings is false)\n\t\t\t * @event\n\t\t\t * @name check_all.jstree\n\t\t\t * @param {Array} selected the current selection\n\t\t\t * @plugin checkbox\n\t\t\t */\n\t\t\tthis.trigger('check_all', { 'selected' : this._data.checkbox.selected });\n\t\t};\n\t\t/**\n\t\t * uncheck all checked nodes (only if tie_selection in checkbox settings is false, otherwise deselect_all will be called internally)\n\t\t * @name uncheck_all()\n\t\t * @trigger uncheck_all.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.uncheck_all = function () {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.deselect_all(); }\n\t\t\tvar tmp = this._data.checkbox.selected.concat([]), i, j;\n\t\t\tfor(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {\n\t\t\t\tif(this._model.data[this._data.checkbox.selected[i]]) {\n\t\t\t\t\tthis._model.data[this._data.checkbox.selected[i]].state.checked = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._data.checkbox.selected = [];\n\t\t\tthis.element.find('.jstree-checked').removeClass('jstree-checked');\n\t\t\t/**\n\t\t\t * triggered when all nodes are unchecked (only if tie_selection in checkbox settings is false)\n\t\t\t * @event\n\t\t\t * @name uncheck_all.jstree\n\t\t\t * @param {Object} node the previous selection\n\t\t\t * @param {Array} selected the current selection\n\t\t\t * @plugin checkbox\n\t\t\t */\n\t\t\tthis.trigger('uncheck_all', { 'selected' : this._data.checkbox.selected, 'node' : tmp });\n\t\t};\n\t\t/**\n\t\t * checks if a node is checked (if tie_selection is on in the settings this function will return the same as is_selected)\n\t\t * @name is_checked(obj)\n\t\t * @param  {mixed}  obj\n\t\t * @return {Boolean}\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.is_checked = function (obj) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.is_selected(obj); }\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\treturn obj.state.checked;\n\t\t};\n\t\t/**\n\t\t * get an array of all checked nodes (if tie_selection is on in the settings this function will return the same as get_selected)\n\t\t * @name get_checked([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.get_checked = function (full) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.get_selected(full); }\n\t\t\treturn full ? $.map(this._data.checkbox.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.checkbox.selected.slice();\n\t\t};\n\t\t/**\n\t\t * get an array of all top level checked nodes (ignoring children of checked nodes) (if tie_selection is on in the settings this function will return the same as get_top_selected)\n\t\t * @name get_top_checked([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.get_top_checked = function (full) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.get_top_selected(full); }\n\t\t\tvar tmp = this.get_checked(true),\n\t\t\t\tobj = {}, i, j, k, l;\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tobj[tmp[i].id] = tmp[i];\n\t\t\t}\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tfor(k = 0, l = tmp[i].children_d.length; k < l; k++) {\n\t\t\t\t\tif(obj[tmp[i].children_d[k]]) {\n\t\t\t\t\t\tdelete obj[tmp[i].children_d[k]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = [];\n\t\t\tfor(i in obj) {\n\t\t\t\tif(obj.hasOwnProperty(i)) {\n\t\t\t\t\ttmp.push(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;\n\t\t};\n\t\t/**\n\t\t * get an array of all bottom level checked nodes (ignoring selected parents) (if tie_selection is on in the settings this function will return the same as get_bottom_selected)\n\t\t * @name get_bottom_checked([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.get_bottom_checked = function (full) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.get_bottom_selected(full); }\n\t\t\tvar tmp = this.get_checked(true),\n\t\t\t\tobj = [], i, j;\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tif(!tmp[i].children.length) {\n\t\t\t\t\tobj.push(tmp[i].id);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;\n\t\t};\n\t\tthis.load_node = function (obj, callback) {\n\t\t\tvar k, l, i, j, c, tmp;\n\t\t\tif(!$.isArray(obj) && !this.settings.checkbox.tie_selection) {\n\t\t\t\ttmp = this.get_node(obj);\n\t\t\t\tif(tmp && tmp.state.loaded) {\n\t\t\t\t\tfor(k = 0, l = tmp.children_d.length; k < l; k++) {\n\t\t\t\t\t\tif(this._model.data[tmp.children_d[k]].state.checked) {\n\t\t\t\t\t\t\tc = true;\n\t\t\t\t\t\t\tthis._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, tmp.children_d[k]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn parent.load_node.apply(this, arguments);\n\t\t};\n\t\tthis.get_state = function () {\n\t\t\tvar state = parent.get_state.apply(this, arguments);\n\t\t\tif(this.settings.checkbox.tie_selection) { return state; }\n\t\t\tstate.checkbox = this._data.checkbox.selected.slice();\n\t\t\treturn state;\n\t\t};\n\t\tthis.set_state = function (state, callback) {\n\t\t\tvar res = parent.set_state.apply(this, arguments);\n\t\t\tif(res && state.checkbox) {\n\t\t\t\tif(!this.settings.checkbox.tie_selection) {\n\t\t\t\t\tthis.uncheck_all();\n\t\t\t\t\tvar _this = this;\n\t\t\t\t\t$.each(state.checkbox, function (i, v) {\n\t\t\t\t\t\t_this.check_node(v);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tdelete state.checkbox;\n\t\t\t\tthis.set_state(state, callback);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn res;\n\t\t};\n\t\tthis.refresh = function (skip_loading, forget_state) {\n\t\t\tif(this.settings.checkbox.tie_selection) {\n\t\t\t\tthis._data.checkbox.selected = [];\n\t\t\t}\n\t\t\treturn parent.refresh.apply(this, arguments);\n\t\t};\n\t};\n\n\t// include the checkbox plugin by default\n\t// $.jstree.defaults.plugins.push(\"checkbox\");\n\n\n/**\n * ### Conditionalselect plugin\n *\n * This plugin allows defining a callback to allow or deny node selection by user input (activate node method).\n */\n\n\t/**\n\t * a callback (function) which is invoked in the instance's scope and receives two arguments - the node and the event that triggered the `activate_node` call. Returning false prevents working with the node, returning true allows invoking activate_node. Defaults to returning `true`.\n\t * @name $.jstree.defaults.checkbox.visible\n\t * @plugin checkbox\n\t */\n\t$.jstree.defaults.conditionalselect = function () { return true; };\n\t$.jstree.plugins.conditionalselect = function (options, parent) {\n\t\t// own function\n\t\tthis.activate_node = function (obj, e) {\n\t\t\tif(this.settings.conditionalselect.call(this, this.get_node(obj), e)) {\n\t\t\t\treturn parent.activate_node.call(this, obj, e);\n\t\t\t}\n\t\t};\n\t};\n\n\n/**\n * ### Contextmenu plugin\n *\n * Shows a context menu when a node is right-clicked.\n */\n\n\t/**\n\t * stores all defaults for the contextmenu plugin\n\t * @name $.jstree.defaults.contextmenu\n\t * @plugin contextmenu\n\t */\n\t$.jstree.defaults.contextmenu = {\n\t\t/**\n\t\t * a boolean indicating if the node should be selected when the context menu is invoked on it. Defaults to `true`.\n\t\t * @name $.jstree.defaults.contextmenu.select_node\n\t\t * @plugin contextmenu\n\t\t */\n\t\tselect_node : true,\n\t\t/**\n\t\t * a boolean indicating if the menu should be shown aligned with the node. Defaults to `true`, otherwise the mouse coordinates are used.\n\t\t * @name $.jstree.defaults.contextmenu.show_at_node\n\t\t * @plugin contextmenu\n\t\t */\n\t\tshow_at_node : true,\n\t\t/**\n\t\t * an object of actions, or a function that accepts a node and a callback function and calls the callback function with an object of actions available for that node (you can also return the items too).\n\t\t *\n\t\t * Each action consists of a key (a unique name) and a value which is an object with the following properties (only label and action are required). Once a menu item is activated the `action` function will be invoked with an object containing the following keys: item - the contextmenu item definition as seen below, reference - the DOM node that was used (the tree node), element - the contextmenu DOM element, position - an object with x/y properties indicating the position of the menu.\n\t\t *\n\t\t * * `separator_before` - a boolean indicating if there should be a separator before this item\n\t\t * * `separator_after` - a boolean indicating if there should be a separator after this item\n\t\t * * `_disabled` - a boolean indicating if this action should be disabled\n\t\t * * `label` - a string - the name of the action (could be a function returning a string)\n\t\t * * `title` - a string - an optional tooltip for the item\n\t\t * * `action` - a function to be executed if this item is chosen, the function will receive \n\t\t * * `icon` - a string, can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class\n\t\t * * `shortcut` - keyCode which will trigger the action if the menu is open (for example `113` for rename, which equals F2)\n\t\t * * `shortcut_label` - shortcut label (like for example `F2` for rename)\n\t\t * * `submenu` - an object with the same structure as $.jstree.defaults.contextmenu.items which can be used to create a submenu - each key will be rendered as a separate option in a submenu that will appear once the current item is hovered\n\t\t *\n\t\t * @name $.jstree.defaults.contextmenu.items\n\t\t * @plugin contextmenu\n\t\t */\n\t\titems : function (o, cb) { // Could be an object directly\n\t\t\treturn {\n\t\t\t\t\"create\" : {\n\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\"separator_after\"\t: true,\n\t\t\t\t\t\"_disabled\"\t\t\t: false, //(this.check(\"create_node\", data.reference, {}, \"last\")),\n\t\t\t\t\t\"label\"\t\t\t\t: \"Create\",\n\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\tinst.create_node(obj, {}, \"last\", function (new_node) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tinst.edit(new_node);\n\t\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\t\tsetTimeout(function () { inst.edit(new_node); },0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"rename\" : {\n\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\"_disabled\"\t\t\t: false, //(this.check(\"rename_node\", data.reference, this.get_parent(data.reference), \"\")),\n\t\t\t\t\t\"label\"\t\t\t\t: \"Rename\",\n\t\t\t\t\t/*!\n\t\t\t\t\t\"shortcut\"\t\t\t: 113,\n\t\t\t\t\t\"shortcut_label\"\t: 'F2',\n\t\t\t\t\t\"icon\"\t\t\t\t: \"glyphicon glyphicon-leaf\",\n\t\t\t\t\t*/\n\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\tinst.edit(obj);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"remove\" : {\n\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\"icon\"\t\t\t\t: false,\n\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\"_disabled\"\t\t\t: false, //(this.check(\"delete_node\", data.reference, this.get_parent(data.reference), \"\")),\n\t\t\t\t\t\"label\"\t\t\t\t: \"Delete\",\n\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\tif(inst.is_selected(obj)) {\n\t\t\t\t\t\t\tinst.delete_node(inst.get_selected());\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tinst.delete_node(obj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"ccp\" : {\n\t\t\t\t\t\"separator_before\"\t: true,\n\t\t\t\t\t\"icon\"\t\t\t\t: false,\n\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\"label\"\t\t\t\t: \"Edit\",\n\t\t\t\t\t\"action\"\t\t\t: false,\n\t\t\t\t\t\"submenu\" : {\n\t\t\t\t\t\t\"cut\" : {\n\t\t\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\t\t\"label\"\t\t\t\t: \"Cut\",\n\t\t\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\t\t\tif(inst.is_selected(obj)) {\n\t\t\t\t\t\t\t\t\tinst.cut(inst.get_top_selected());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinst.cut(obj);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"copy\" : {\n\t\t\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\t\t\"icon\"\t\t\t\t: false,\n\t\t\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\t\t\"label\"\t\t\t\t: \"Copy\",\n\t\t\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\t\t\tif(inst.is_selected(obj)) {\n\t\t\t\t\t\t\t\t\tinst.copy(inst.get_top_selected());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinst.copy(obj);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"paste\" : {\n\t\t\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\t\t\"icon\"\t\t\t\t: false,\n\t\t\t\t\t\t\t\"_disabled\"\t\t\t: function (data) {\n\t\t\t\t\t\t\t\treturn !$.jstree.reference(data.reference).can_paste();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\t\t\"label\"\t\t\t\t: \"Paste\",\n\t\t\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\t\t\tinst.paste(obj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n\n\t$.jstree.plugins.contextmenu = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\n\t\t\tvar last_ts = 0, cto = null, ex, ey;\n\t\t\tthis.element\n\t\t\t\t.on(\"init.jstree loading.jstree ready.jstree\", $.proxy(function () {\n\t\t\t\t\t\tthis.get_container_ul().addClass('jstree-contextmenu');\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"contextmenu.jstree\", \".jstree-anchor\", $.proxy(function (e, data) {\n\t\t\t\t\t\tif (e.target.tagName.toLowerCase() === 'input') {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tlast_ts = e.ctrlKey ? +new Date() : 0;\n\t\t\t\t\t\tif(data || cto) {\n\t\t\t\t\t\t\tlast_ts = (+new Date()) + 10000;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(cto) {\n\t\t\t\t\t\t\tclearTimeout(cto);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!this.is_loading(e.currentTarget)) {\n\t\t\t\t\t\t\tthis.show_contextmenu(e.currentTarget, e.pageX, e.pageY, e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"click.jstree\", \".jstree-anchor\", $.proxy(function (e) {\n\t\t\t\t\t\tif(this._data.contextmenu.visible && (!last_ts || (+new Date()) - last_ts > 250)) { // work around safari & macOS ctrl+click\n\t\t\t\t\t\t\t$.vakata.context.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlast_ts = 0;\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"touchstart.jstree\", \".jstree-anchor\", function (e) {\n\t\t\t\t\t\tif(!e.originalEvent || !e.originalEvent.changedTouches || !e.originalEvent.changedTouches[0]) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tex = e.originalEvent.changedTouches[0].clientX;\n\t\t\t\t\t\tey = e.originalEvent.changedTouches[0].clientY;\n\t\t\t\t\t\tcto = setTimeout(function () {\n\t\t\t\t\t\t\t$(e.currentTarget).trigger('contextmenu', true);\n\t\t\t\t\t\t}, 750);\n\t\t\t\t\t})\n\t\t\t\t.on('touchmove.vakata.jstree', function (e) {\n\t\t\t\t\t\tif(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.originalEvent.changedTouches[0].clientX) > 10 || Math.abs(ey - e.originalEvent.changedTouches[0].clientY) > 10)) {\n\t\t\t\t\t\t\tclearTimeout(cto);\n\t\t\t\t\t\t\t$.vakata.context.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t.on('touchend.vakata.jstree', function (e) {\n\t\t\t\t\t\tif(cto) {\n\t\t\t\t\t\t\tclearTimeout(cto);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t/*!\n\t\t\tif(!('oncontextmenu' in document.body) && ('ontouchstart' in document.body)) {\n\t\t\t\tvar el = null, tm = null;\n\t\t\t\tthis.element\n\t\t\t\t\t.on(\"touchstart\", \".jstree-anchor\", function (e) {\n\t\t\t\t\t\tel = e.currentTarget;\n\t\t\t\t\t\ttm = +new Date();\n\t\t\t\t\t\t$(document).one(\"touchend\", function (e) {\n\t\t\t\t\t\t\te.target = document.elementFromPoint(e.originalEvent.targetTouches[0].pageX - window.pageXOffset, e.originalEvent.targetTouches[0].pageY - window.pageYOffset);\n\t\t\t\t\t\t\te.currentTarget = e.target;\n\t\t\t\t\t\t\ttm = ((+(new Date())) - tm);\n\t\t\t\t\t\t\tif(e.target === el && tm > 600 && tm < 1000) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t$(el).trigger('contextmenu', e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tel = null;\n\t\t\t\t\t\t\ttm = null;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t}\n\t\t\t*/\n\t\t\t$(document).on(\"context_hide.vakata.jstree\", $.proxy(function (e, data) {\n\t\t\t\tthis._data.contextmenu.visible = false;\n\t\t\t\t$(data.reference).removeClass('jstree-context');\n\t\t\t}, this));\n\t\t};\n\t\tthis.teardown = function () {\n\t\t\tif(this._data.contextmenu.visible) {\n\t\t\t\t$.vakata.context.hide();\n\t\t\t}\n\t\t\tparent.teardown.call(this);\n\t\t};\n\n\t\t/**\n\t\t * prepare and show the context menu for a node\n\t\t * @name show_contextmenu(obj [, x, y])\n\t\t * @param {mixed} obj the node\n\t\t * @param {Number} x the x-coordinate relative to the document to show the menu at\n\t\t * @param {Number} y the y-coordinate relative to the document to show the menu at\n\t\t * @param {Object} e the event if available that triggered the contextmenu\n\t\t * @plugin contextmenu\n\t\t * @trigger show_contextmenu.jstree\n\t\t */\n\t\tthis.show_contextmenu = function (obj, x, y, e) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tvar s = this.settings.contextmenu,\n\t\t\t\td = this.get_node(obj, true),\n\t\t\t\ta = d.children(\".jstree-anchor\"),\n\t\t\t\to = false,\n\t\t\t\ti = false;\n\t\t\tif(s.show_at_node || x === undefined || y === undefined) {\n\t\t\t\to = a.offset();\n\t\t\t\tx = o.left;\n\t\t\t\ty = o.top + this._data.core.li_height;\n\t\t\t}\n\t\t\tif(this.settings.contextmenu.select_node && !this.is_selected(obj)) {\n\t\t\t\tthis.activate_node(obj, e);\n\t\t\t}\n\n\t\t\ti = s.items;\n\t\t\tif($.isFunction(i)) {\n\t\t\t\ti = i.call(this, obj, $.proxy(function (i) {\n\t\t\t\t\tthis._show_contextmenu(obj, x, y, i);\n\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif($.isPlainObject(i)) {\n\t\t\t\tthis._show_contextmenu(obj, x, y, i);\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * show the prepared context menu for a node\n\t\t * @name _show_contextmenu(obj, x, y, i)\n\t\t * @param {mixed} obj the node\n\t\t * @param {Number} x the x-coordinate relative to the document to show the menu at\n\t\t * @param {Number} y the y-coordinate relative to the document to show the menu at\n\t\t * @param {Number} i the object of items to show\n\t\t * @plugin contextmenu\n\t\t * @trigger show_contextmenu.jstree\n\t\t * @private\n\t\t */\n\t\tthis._show_contextmenu = function (obj, x, y, i) {\n\t\t\tvar d = this.get_node(obj, true),\n\t\t\t\ta = d.children(\".jstree-anchor\");\n\t\t\t$(document).one(\"context_show.vakata.jstree\", $.proxy(function (e, data) {\n\t\t\t\tvar cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu';\n\t\t\t\t$(data.element).addClass(cls);\n\t\t\t\ta.addClass('jstree-context');\n\t\t\t}, this));\n\t\t\tthis._data.contextmenu.visible = true;\n\t\t\t$.vakata.context.show(a, { 'x' : x, 'y' : y }, i);\n\t\t\t/**\n\t\t\t * triggered when the contextmenu is shown for a node\n\t\t\t * @event\n\t\t\t * @name show_contextmenu.jstree\n\t\t\t * @param {Object} node the node\n\t\t\t * @param {Number} x the x-coordinate of the menu relative to the document\n\t\t\t * @param {Number} y the y-coordinate of the menu relative to the document\n\t\t\t * @plugin contextmenu\n\t\t\t */\n\t\t\tthis.trigger('show_contextmenu', { \"node\" : obj, \"x\" : x, \"y\" : y });\n\t\t};\n\t};\n\n\t// contextmenu helper\n\t(function ($) {\n\t\tvar right_to_left = false,\n\t\t\tvakata_context = {\n\t\t\t\telement\t\t: false,\n\t\t\t\treference\t: false,\n\t\t\t\tposition_x\t: 0,\n\t\t\t\tposition_y\t: 0,\n\t\t\t\titems\t\t: [],\n\t\t\t\thtml\t\t: \"\",\n\t\t\t\tis_visible\t: false\n\t\t\t};\n\n\t\t$.vakata.context = {\n\t\t\tsettings : {\n\t\t\t\thide_onmouseleave\t: 0,\n\t\t\t\ticons\t\t\t\t: true\n\t\t\t},\n\t\t\t_trigger : function (event_name) {\n\t\t\t\t$(document).triggerHandler(\"context_\" + event_name + \".vakata\", {\n\t\t\t\t\t\"reference\"\t: vakata_context.reference,\n\t\t\t\t\t\"element\"\t: vakata_context.element,\n\t\t\t\t\t\"position\"\t: {\n\t\t\t\t\t\t\"x\" : vakata_context.position_x,\n\t\t\t\t\t\t\"y\" : vakata_context.position_y\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t_execute : function (i) {\n\t\t\t\ti = vakata_context.items[i];\n\t\t\t\treturn i && (!i._disabled || ($.isFunction(i._disabled) && !i._disabled({ \"item\" : i, \"reference\" : vakata_context.reference, \"element\" : vakata_context.element }))) && i.action ? i.action.call(null, {\n\t\t\t\t\t\t\t\"item\"\t\t: i,\n\t\t\t\t\t\t\t\"reference\"\t: vakata_context.reference,\n\t\t\t\t\t\t\t\"element\"\t: vakata_context.element,\n\t\t\t\t\t\t\t\"position\"\t: {\n\t\t\t\t\t\t\t\t\"x\" : vakata_context.position_x,\n\t\t\t\t\t\t\t\t\"y\" : vakata_context.position_y\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) : false;\n\t\t\t},\n\t\t\t_parse : function (o, is_callback) {\n\t\t\t\tif(!o) { return false; }\n\t\t\t\tif(!is_callback) {\n\t\t\t\t\tvakata_context.html\t\t= \"\";\n\t\t\t\t\tvakata_context.items\t= [];\n\t\t\t\t}\n\t\t\t\tvar str = \"\",\n\t\t\t\t\tsep = false,\n\t\t\t\t\ttmp;\n\n\t\t\t\tif(is_callback) { str += \"<\"+\"ul>\"; }\n\t\t\t\t$.each(o, function (i, val) {\n\t\t\t\t\tif(!val) { return true; }\n\t\t\t\t\tvakata_context.items.push(val);\n\t\t\t\t\tif(!sep && val.separator_before) {\n\t\t\t\t\t\tstr += \"<\"+\"li class='vakata-context-separator'><\"+\"a href='#' \" + ($.vakata.context.settings.icons ? '' : 'style=\"margin-left:0px;\"') + \">&#160;<\"+\"/a><\"+\"/li>\";\n\t\t\t\t\t}\n\t\t\t\t\tsep = false;\n\t\t\t\t\tstr += \"<\"+\"li class='\" + (val._class || \"\") + (val._disabled === true || ($.isFunction(val._disabled) && val._disabled({ \"item\" : val, \"reference\" : vakata_context.reference, \"element\" : vakata_context.element })) ? \" vakata-contextmenu-disabled \" : \"\") + \"' \"+(val.shortcut?\" data-shortcut='\"+val.shortcut+\"' \":'')+\">\";\n\t\t\t\t\tstr += \"<\"+\"a href='#' rel='\" + (vakata_context.items.length - 1) + \"' \" + (val.title ? \"title='\" + val.title + \"'\" : \"\") + \">\";\n\t\t\t\t\tif($.vakata.context.settings.icons) {\n\t\t\t\t\t\tstr += \"<\"+\"i \";\n\t\t\t\t\t\tif(val.icon) {\n\t\t\t\t\t\t\tif(val.icon.indexOf(\"/\") !== -1 || val.icon.indexOf(\".\") !== -1) { str += \" style='background:url(\\\"\" + val.icon + \"\\\") center center no-repeat' \"; }\n\t\t\t\t\t\t\telse { str += \" class='\" + val.icon + \"' \"; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstr += \"><\"+\"/i><\"+\"span class='vakata-contextmenu-sep'>&#160;<\"+\"/span>\";\n\t\t\t\t\t}\n\t\t\t\t\tstr += ($.isFunction(val.label) ? val.label({ \"item\" : i, \"reference\" : vakata_context.reference, \"element\" : vakata_context.element }) : val.label) + (val.shortcut?' <span class=\"vakata-contextmenu-shortcut vakata-contextmenu-shortcut-'+val.shortcut+'\">'+ (val.shortcut_label || '') +'</span>':'') + \"<\"+\"/a>\";\n\t\t\t\t\tif(val.submenu) {\n\t\t\t\t\t\ttmp = $.vakata.context._parse(val.submenu, true);\n\t\t\t\t\t\tif(tmp) { str += tmp; }\n\t\t\t\t\t}\n\t\t\t\t\tstr += \"<\"+\"/li>\";\n\t\t\t\t\tif(val.separator_after) {\n\t\t\t\t\t\tstr += \"<\"+\"li class='vakata-context-separator'><\"+\"a href='#' \" + ($.vakata.context.settings.icons ? '' : 'style=\"margin-left:0px;\"') + \">&#160;<\"+\"/a><\"+\"/li>\";\n\t\t\t\t\t\tsep = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tstr  = str.replace(/<li class\\='vakata-context-separator'\\><\\/li\\>$/,\"\");\n\t\t\t\tif(is_callback) { str += \"</ul>\"; }\n\t\t\t\t/**\n\t\t\t\t * triggered on the document when the contextmenu is parsed (HTML is built)\n\t\t\t\t * @event\n\t\t\t\t * @plugin contextmenu\n\t\t\t\t * @name context_parse.vakata\n\t\t\t\t * @param {jQuery} reference the element that was right clicked\n\t\t\t\t * @param {jQuery} element the DOM element of the menu itself\n\t\t\t\t * @param {Object} position the x & y coordinates of the menu\n\t\t\t\t */\n\t\t\t\tif(!is_callback) { vakata_context.html = str; $.vakata.context._trigger(\"parse\"); }\n\t\t\t\treturn str.length > 10 ? str : false;\n\t\t\t},\n\t\t\t_show_submenu : function (o) {\n\t\t\t\to = $(o);\n\t\t\t\tif(!o.length || !o.children(\"ul\").length) { return; }\n\t\t\t\tvar e = o.children(\"ul\"),\n\t\t\t\t\txl = o.offset().left,\n\t\t\t\t\tx = xl + o.outerWidth(),\n\t\t\t\t\ty = o.offset().top,\n\t\t\t\t\tw = e.width(),\n\t\t\t\t\th = e.height(),\n\t\t\t\t\tdw = $(window).width() + $(window).scrollLeft(),\n\t\t\t\t\tdh = $(window).height() + $(window).scrollTop();\n\t\t\t\t// може да се спести е една проверка - дали няма някой от класовете вече нагоре\n\t\t\t\tif(right_to_left) {\n\t\t\t\t\to[x - (w + 10 + o.outerWidth()) < 0 ? \"addClass\" : \"removeClass\"](\"vakata-context-left\");\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to[x + w > dw  && xl > dw - x ? \"addClass\" : \"removeClass\"](\"vakata-context-right\");\n\t\t\t\t}\n\t\t\t\tif(y + h + 10 > dh) {\n\t\t\t\t\te.css(\"bottom\",\"-1px\");\n\t\t\t\t}\n\n\t\t\t\t//if does not fit - stick it to the side\n\t\t\t\tif (o.hasClass('vakata-context-right')) {\n\t\t\t\t\tif (xl < w) {\n\t\t\t\t\t\te.css(\"margin-right\", xl - w);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (dw - x < w) {\n\t\t\t\t\t\te.css(\"margin-left\", dw - x - w);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\te.show();\n\t\t\t},\n\t\t\tshow : function (reference, position, data) {\n\t\t\t\tvar o, e, x, y, w, h, dw, dh, cond = true;\n\t\t\t\tif(vakata_context.element && vakata_context.element.length) {\n\t\t\t\t\tvakata_context.element.width('');\n\t\t\t\t}\n\t\t\t\tswitch(cond) {\n\t\t\t\t\tcase (!position && !reference):\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tcase (!!position && !!reference):\n\t\t\t\t\t\tvakata_context.reference\t= reference;\n\t\t\t\t\t\tvakata_context.position_x\t= position.x;\n\t\t\t\t\t\tvakata_context.position_y\t= position.y;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase (!position && !!reference):\n\t\t\t\t\t\tvakata_context.reference\t= reference;\n\t\t\t\t\t\to = reference.offset();\n\t\t\t\t\t\tvakata_context.position_x\t= o.left + reference.outerHeight();\n\t\t\t\t\t\tvakata_context.position_y\t= o.top;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase (!!position && !reference):\n\t\t\t\t\t\tvakata_context.position_x\t= position.x;\n\t\t\t\t\t\tvakata_context.position_y\t= position.y;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(!!reference && !data && $(reference).data('vakata_contextmenu')) {\n\t\t\t\t\tdata = $(reference).data('vakata_contextmenu');\n\t\t\t\t}\n\t\t\t\tif($.vakata.context._parse(data)) {\n\t\t\t\t\tvakata_context.element.html(vakata_context.html);\n\t\t\t\t}\n\t\t\t\tif(vakata_context.items.length) {\n\t\t\t\t\tvakata_context.element.appendTo(document.body);\n\t\t\t\t\te = vakata_context.element;\n\t\t\t\t\tx = vakata_context.position_x;\n\t\t\t\t\ty = vakata_context.position_y;\n\t\t\t\t\tw = e.width();\n\t\t\t\t\th = e.height();\n\t\t\t\t\tdw = $(window).width() + $(window).scrollLeft();\n\t\t\t\t\tdh = $(window).height() + $(window).scrollTop();\n\t\t\t\t\tif(right_to_left) {\n\t\t\t\t\t\tx -= (e.outerWidth() - $(reference).outerWidth());\n\t\t\t\t\t\tif(x < $(window).scrollLeft() + 20) {\n\t\t\t\t\t\t\tx = $(window).scrollLeft() + 20;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(x + w + 20 > dw) {\n\t\t\t\t\t\tx = dw - (w + 20);\n\t\t\t\t\t}\n\t\t\t\t\tif(y + h + 20 > dh) {\n\t\t\t\t\t\ty = dh - (h + 20);\n\t\t\t\t\t}\n\n\t\t\t\t\tvakata_context.element\n\t\t\t\t\t\t.css({ \"left\" : x, \"top\" : y })\n\t\t\t\t\t\t.show()\n\t\t\t\t\t\t.find('a').first().focus().parent().addClass(\"vakata-context-hover\");\n\t\t\t\t\tvakata_context.is_visible = true;\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered on the document when the contextmenu is shown\n\t\t\t\t\t * @event\n\t\t\t\t\t * @plugin contextmenu\n\t\t\t\t\t * @name context_show.vakata\n\t\t\t\t\t * @param {jQuery} reference the element that was right clicked\n\t\t\t\t\t * @param {jQuery} element the DOM element of the menu itself\n\t\t\t\t\t * @param {Object} position the x & y coordinates of the menu\n\t\t\t\t\t */\n\t\t\t\t\t$.vakata.context._trigger(\"show\");\n\t\t\t\t}\n\t\t\t},\n\t\t\thide : function () {\n\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\tvakata_context.element.hide().find(\"ul\").hide().end().find(':focus').blur().end().detach();\n\t\t\t\t\tvakata_context.is_visible = false;\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered on the document when the contextmenu is hidden\n\t\t\t\t\t * @event\n\t\t\t\t\t * @plugin contextmenu\n\t\t\t\t\t * @name context_hide.vakata\n\t\t\t\t\t * @param {jQuery} reference the element that was right clicked\n\t\t\t\t\t * @param {jQuery} element the DOM element of the menu itself\n\t\t\t\t\t * @param {Object} position the x & y coordinates of the menu\n\t\t\t\t\t */\n\t\t\t\t\t$.vakata.context._trigger(\"hide\");\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t$(function () {\n\t\t\tright_to_left = $(document.body).css(\"direction\") === \"rtl\";\n\t\t\tvar to = false;\n\n\t\t\tvakata_context.element = $(\"<ul class='vakata-context'></ul>\");\n\t\t\tvakata_context.element\n\t\t\t\t.on(\"mouseenter\", \"li\", function (e) {\n\t\t\t\t\te.stopImmediatePropagation();\n\n\t\t\t\t\tif($.contains(this, e.relatedTarget)) {\n\t\t\t\t\t\t// премахнато заради delegate mouseleave по-долу\n\t\t\t\t\t\t// $(this).find(\".vakata-context-hover\").removeClass(\"vakata-context-hover\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(to) { clearTimeout(to); }\n\t\t\t\t\tvakata_context.element.find(\".vakata-context-hover\").removeClass(\"vakata-context-hover\").end();\n\n\t\t\t\t\t$(this)\n\t\t\t\t\t\t.siblings().find(\"ul\").hide().end().end()\n\t\t\t\t\t\t.parentsUntil(\".vakata-context\", \"li\").addBack().addClass(\"vakata-context-hover\");\n\t\t\t\t\t$.vakata.context._show_submenu(this);\n\t\t\t\t})\n\t\t\t\t// тестово - дали не натоварва?\n\t\t\t\t.on(\"mouseleave\", \"li\", function (e) {\n\t\t\t\t\tif($.contains(this, e.relatedTarget)) { return; }\n\t\t\t\t\t$(this).find(\".vakata-context-hover\").addBack().removeClass(\"vakata-context-hover\");\n\t\t\t\t})\n\t\t\t\t.on(\"mouseleave\", function (e) {\n\t\t\t\t\t$(this).find(\".vakata-context-hover\").removeClass(\"vakata-context-hover\");\n\t\t\t\t\tif($.vakata.context.settings.hide_onmouseleave) {\n\t\t\t\t\t\tto = setTimeout(\n\t\t\t\t\t\t\t(function (t) {\n\t\t\t\t\t\t\t\treturn function () { $.vakata.context.hide(); };\n\t\t\t\t\t\t\t}(this)), $.vakata.context.settings.hide_onmouseleave);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on(\"click\", \"a\", function (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t//})\n\t\t\t\t//.on(\"mouseup\", \"a\", function (e) {\n\t\t\t\t\tif(!$(this).blur().parent().hasClass(\"vakata-context-disabled\") && $.vakata.context._execute($(this).attr(\"rel\")) !== false) {\n\t\t\t\t\t\t$.vakata.context.hide();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keydown', 'a', function (e) {\n\t\t\t\t\t\tvar o = null;\n\t\t\t\t\t\tswitch(e.which) {\n\t\t\t\t\t\t\tcase 13:\n\t\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\t\te.type = \"click\";\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t$(e.currentTarget).trigger(e);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 37:\n\t\t\t\t\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\t\t\t\t\tvakata_context.element.find(\".vakata-context-hover\").last().closest(\"li\").first().find(\"ul\").hide().find(\".vakata-context-hover\").removeClass(\"vakata-context-hover\").end().end().children('a').focus();\n\t\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 38:\n\t\t\t\t\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\t\t\t\t\to = vakata_context.element.find(\"ul:visible\").addBack().last().children(\".vakata-context-hover\").removeClass(\"vakata-context-hover\").prevAll(\"li:not(.vakata-context-separator)\").first();\n\t\t\t\t\t\t\t\t\tif(!o.length) { o = vakata_context.element.find(\"ul:visible\").addBack().last().children(\"li:not(.vakata-context-separator)\").last(); }\n\t\t\t\t\t\t\t\t\to.addClass(\"vakata-context-hover\").children('a').focus();\n\t\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 39:\n\t\t\t\t\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\t\t\t\t\tvakata_context.element.find(\".vakata-context-hover\").last().children(\"ul\").show().children(\"li:not(.vakata-context-separator)\").removeClass(\"vakata-context-hover\").first().addClass(\"vakata-context-hover\").children('a').focus();\n\t\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 40:\n\t\t\t\t\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\t\t\t\t\to = vakata_context.element.find(\"ul:visible\").addBack().last().children(\".vakata-context-hover\").removeClass(\"vakata-context-hover\").nextAll(\"li:not(.vakata-context-separator)\").first();\n\t\t\t\t\t\t\t\t\tif(!o.length) { o = vakata_context.element.find(\"ul:visible\").addBack().last().children(\"li:not(.vakata-context-separator)\").first(); }\n\t\t\t\t\t\t\t\t\to.addClass(\"vakata-context-hover\").children('a').focus();\n\t\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 27:\n\t\t\t\t\t\t\t\t$.vakata.context.hide();\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t//console.log(e.which);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t.on('keydown', function (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tvar a = vakata_context.element.find('.vakata-contextmenu-shortcut-' + e.which).parent();\n\t\t\t\t\tif(a.parent().not('.vakata-context-disabled')) {\n\t\t\t\t\t\ta.click();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t$(document)\n\t\t\t\t.on(\"mousedown.vakata.jstree\", function (e) {\n\t\t\t\t\tif(vakata_context.is_visible && vakata_context.element[0] !== e.target  && !$.contains(vakata_context.element[0], e.target)) {\n\t\t\t\t\t\t$.vakata.context.hide();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on(\"context_show.vakata.jstree\", function (e, data) {\n\t\t\t\t\tvakata_context.element.find(\"li:has(ul)\").children(\"a\").addClass(\"vakata-context-parent\");\n\t\t\t\t\tif(right_to_left) {\n\t\t\t\t\t\tvakata_context.element.addClass(\"vakata-context-rtl\").css(\"direction\", \"rtl\");\n\t\t\t\t\t}\n\t\t\t\t\t// also apply a RTL class?\n\t\t\t\t\tvakata_context.element.find(\"ul\").hide().end();\n\t\t\t\t});\n\t\t});\n\t}($));\n\t// $.jstree.defaults.plugins.push(\"contextmenu\");\n\n\n/**\n * ### Drag'n'drop plugin\n *\n * Enables dragging and dropping of nodes in the tree, resulting in a move or copy operations.\n */\n\n\t/**\n\t * stores all defaults for the drag'n'drop plugin\n\t * @name $.jstree.defaults.dnd\n\t * @plugin dnd\n\t */\n\t$.jstree.defaults.dnd = {\n\t\t/**\n\t\t * a boolean indicating if a copy should be possible while dragging (by pressint the meta key or Ctrl). Defaults to `true`.\n\t\t * @name $.jstree.defaults.dnd.copy\n\t\t * @plugin dnd\n\t\t */\n\t\tcopy : true,\n\t\t/**\n\t\t * a number indicating how long a node should remain hovered while dragging to be opened. Defaults to `500`.\n\t\t * @name $.jstree.defaults.dnd.open_timeout\n\t\t * @plugin dnd\n\t\t */\n\t\topen_timeout : 500,\n\t\t/**\n\t\t * a function invoked each time a node is about to be dragged, invoked in the tree's scope and receives the nodes about to be dragged as an argument (array) and the event that started the drag - return `false` to prevent dragging\n\t\t * @name $.jstree.defaults.dnd.is_draggable\n\t\t * @plugin dnd\n\t\t */\n\t\tis_draggable : true,\n\t\t/**\n\t\t * a boolean indicating if checks should constantly be made while the user is dragging the node (as opposed to checking only on drop), default is `true`\n\t\t * @name $.jstree.defaults.dnd.check_while_dragging\n\t\t * @plugin dnd\n\t\t */\n\t\tcheck_while_dragging : true,\n\t\t/**\n\t\t * a boolean indicating if nodes from this tree should only be copied with dnd (as opposed to moved), default is `false`\n\t\t * @name $.jstree.defaults.dnd.always_copy\n\t\t * @plugin dnd\n\t\t */\n\t\talways_copy : false,\n\t\t/**\n\t\t * when dropping a node \"inside\", this setting indicates the position the node should go to - it can be an integer or a string: \"first\" (same as 0) or \"last\", default is `0`\n\t\t * @name $.jstree.defaults.dnd.inside_pos\n\t\t * @plugin dnd\n\t\t */\n\t\tinside_pos : 0,\n\t\t/**\n\t\t * when starting the drag on a node that is selected this setting controls if all selected nodes are dragged or only the single node, default is `true`, which means all selected nodes are dragged when the drag is started on a selected node\n\t\t * @name $.jstree.defaults.dnd.drag_selection\n\t\t * @plugin dnd\n\t\t */\n\t\tdrag_selection : true,\n\t\t/**\n\t\t * controls whether dnd works on touch devices. If left as boolean true dnd will work the same as in desktop browsers, which in some cases may impair scrolling. If set to boolean false dnd will not work on touch devices. There is a special third option - string \"selected\" which means only selected nodes can be dragged on touch devices.\n\t\t * @name $.jstree.defaults.dnd.touch\n\t\t * @plugin dnd\n\t\t */\n\t\ttouch : true,\n\t\t/**\n\t\t * controls whether items can be dropped anywhere on the node, not just on the anchor, by default only the node anchor is a valid drop target. Works best with the wholerow plugin. If enabled on mobile depending on the interface it might be hard for the user to cancel the drop, since the whole tree container will be a valid drop target.\n\t\t * @name $.jstree.defaults.dnd.large_drop_target\n\t\t * @plugin dnd\n\t\t */\n\t\tlarge_drop_target : false,\n\t\t/**\n\t\t * controls whether a drag can be initiated from any part of the node and not just the text/icon part, works best with the wholerow plugin. Keep in mind it can cause problems with tree scrolling on mobile depending on the interface - in that case set the touch option to \"selected\".\n\t\t * @name $.jstree.defaults.dnd.large_drag_target\n\t\t * @plugin dnd\n\t\t */\n\t\tlarge_drag_target : false,\n\t\t/**\n\t\t * controls whether use HTML5 dnd api instead of classical. That will allow better integration of dnd events with other HTML5 controls.\n\t\t * @reference http://caniuse.com/#feat=dragndrop\n\t\t * @name $.jstree.defaults.dnd.use_html5\n\t\t * @plugin dnd\n\t\t */\n\t\tuse_html5: false\n\t};\n\tvar drg, elm;\n\t// TODO: now check works by checking for each node individually, how about max_children, unique, etc?\n\t$.jstree.plugins.dnd = function (options, parent) {\n\t\tthis.init = function (el, options) {\n\t\t\tparent.init.call(this, el, options);\n\t\t\tthis.settings.dnd.use_html5 = this.settings.dnd.use_html5 && ('draggable' in document.createElement('span'));\n\t\t};\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\n\t\t\tthis.element\n\t\t\t\t.on(this.settings.dnd.use_html5 ? 'dragstart.jstree' : 'mousedown.jstree touchstart.jstree', this.settings.dnd.large_drag_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tif(this.settings.dnd.large_drag_target && $(e.target).closest('.jstree-node')[0] !== e.currentTarget) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(e.type === \"touchstart\" && (!this.settings.dnd.touch || (this.settings.dnd.touch === 'selected' && !$(e.currentTarget).closest('.jstree-node').children('.jstree-anchor').hasClass('jstree-clicked')))) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar obj = this.get_node(e.target),\n\t\t\t\t\t\t\tmlt = this.is_selected(obj) && this.settings.dnd.drag_selection ? this.get_top_selected().length : 1,\n\t\t\t\t\t\t\ttxt = (mlt > 1 ? mlt + ' ' + this.get_string('nodes') : this.get_text(e.currentTarget));\n\t\t\t\t\t\tif(this.settings.core.force_text) {\n\t\t\t\t\t\t\ttxt = $.vakata.html.escape(txt);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(obj && obj.id && obj.id !== $.jstree.root && (e.which === 1 || e.type === \"touchstart\" || e.type === \"dragstart\") &&\n\t\t\t\t\t\t\t(this.settings.dnd.is_draggable === true || ($.isFunction(this.settings.dnd.is_draggable) && this.settings.dnd.is_draggable.call(this, (mlt > 1 ? this.get_top_selected(true) : [obj]), e)))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tdrg = { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_top_selected() : [obj.id] };\n\t\t\t\t\t\t\telm = e.currentTarget;\n\t\t\t\t\t\t\tif (this.settings.dnd.use_html5) {\n\t\t\t\t\t\t\t\t$.vakata.dnd._trigger('start', e, { 'helper': $(), 'element': elm, 'data': drg });\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.element.trigger('mousedown.jstree');\n\t\t\t\t\t\t\t\treturn $.vakata.dnd.start(e, drg, '<div id=\"jstree-dnd\" class=\"jstree-' + this.get_theme() + ' jstree-' + this.get_theme() + '-' + this.get_theme_variant() + ' ' + ( this.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ) + '\"><i class=\"jstree-icon jstree-er\"></i>' + txt + '<ins class=\"jstree-copy\" style=\"display:none;\">+</ins></div>');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this));\n\t\t\tif (this.settings.dnd.use_html5) {\n\t\t\t\tthis.element\n\t\t\t\t\t.on('dragover.jstree', function (e) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t$.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t})\n\t\t\t\t\t//.on('dragenter.jstree', this.settings.dnd.large_drop_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t//\t\te.preventDefault();\n\t\t\t\t\t//\t\t$.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });\n\t\t\t\t\t//\t\treturn false;\n\t\t\t\t\t//\t}, this))\n\t\t\t\t\t.on('drop.jstree', $.proxy(function (e) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t$.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg });\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}, this));\n\t\t\t}\n\t\t};\n\t\tthis.redraw_node = function(obj, deep, callback, force_render) {\n\t\t\tobj = parent.redraw_node.apply(this, arguments);\n\t\t\tif (obj && this.settings.dnd.use_html5) {\n\t\t\t\tif (this.settings.dnd.large_drag_target) {\n\t\t\t\t\tobj.setAttribute('draggable', true);\n\t\t\t\t} else {\n\t\t\t\t\tvar i, j, tmp = null;\n\t\t\t\t\tfor(i = 0, j = obj.childNodes.length; i < j; i++) {\n\t\t\t\t\t\tif(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf(\"jstree-anchor\") !== -1) {\n\t\t\t\t\t\t\ttmp = obj.childNodes[i];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(tmp) {\n\t\t\t\t\t\ttmp.setAttribute('draggable', true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t};\n\t};\n\n\t$(function() {\n\t\t// bind only once for all instances\n\t\tvar lastmv = false,\n\t\t\tlaster = false,\n\t\t\tlastev = false,\n\t\t\topento = false,\n\t\t\tmarker = $('<div id=\"jstree-marker\">&#160;</div>').hide(); //.appendTo('body');\n\n\t\t$(document)\n\t\t\t.on('dragover.vakata.jstree', function (e) {\n\t\t\t\tif (elm) {\n\t\t\t\t\t$.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('drop.vakata.jstree', function (e) {\n\t\t\t\tif (elm) {\n\t\t\t\t\t$.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg });\n\t\t\t\t\telm = null;\n\t\t\t\t\tdrg = null;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('dnd_start.vakata.jstree', function (e, data) {\n\t\t\t\tlastmv = false;\n\t\t\t\tlastev = false;\n\t\t\t\tif(!data || !data.data || !data.data.jstree) { return; }\n\t\t\t\tmarker.appendTo(document.body); //.show();\n\t\t\t})\n\t\t\t.on('dnd_move.vakata.jstree', function (e, data) {\n\t\t\t\tvar isDifferentNode = data.event.target !== lastev.target;\n\t\t\t\tif(opento) {\n\t\t\t\t\tif (!data.event || data.event.type !== 'dragover' || isDifferentNode) {\n\t\t\t\t\t\tclearTimeout(opento);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!data || !data.data || !data.data.jstree) { return; }\n\n\t\t\t\t// if we are hovering the marker image do nothing (can happen on \"inside\" drags)\n\t\t\t\tif(data.event.target.id && data.event.target.id === 'jstree-marker') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlastev = data.event;\n\n\t\t\t\tvar ins = $.jstree.reference(data.event.target),\n\t\t\t\t\tref = false,\n\t\t\t\t\toff = false,\n\t\t\t\t\trel = false,\n\t\t\t\t\ttmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm, is_copy, pn, c;\n\t\t\t\t// if we are over an instance\n\t\t\t\tif(ins && ins._data && ins._data.dnd) {\n\t\t\t\t\tmarker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ));\n\t\t\t\t\tis_copy = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)));\n\t\t\t\t\tdata.helper\n\t\t\t\t\t\t.children().attr('class', 'jstree-' + ins.get_theme() + ' jstree-' + ins.get_theme() + '-' + ins.get_theme_variant() + ' ' + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ))\n\t\t\t\t\t\t.find('.jstree-copy').first()[ is_copy ? 'show' : 'hide' ]();\n\n\t\t\t\t\t// if are hovering the container itself add a new root node\n\t\t\t\t\t//console.log(data.event);\n\t\t\t\t\tif( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) {\n\t\t\t\t\t\tok = true;\n\t\t\t\t\t\tfor(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {\n\t\t\t\t\t\t\tok = ok && ins.check( (data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)) ) ? \"copy_node\" : \"move_node\"), (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), $.jstree.root, 'last', { 'dnd' : true, 'ref' : ins.get_node($.jstree.root), 'pos' : 'i', 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) });\n\t\t\t\t\t\t\tif(!ok) { break; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ok) {\n\t\t\t\t\t\t\tlastmv = { 'ins' : ins, 'par' : $.jstree.root, 'pos' : 'last' };\n\t\t\t\t\t\t\tmarker.hide();\n\t\t\t\t\t\t\tdata.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');\n\t\t\t\t\t\t\tif (data.event.originalEvent && data.event.originalEvent.dataTransfer) {\n\t\t\t\t\t\t\t\tdata.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// if we are hovering a tree node\n\t\t\t\t\t\tref = ins.settings.dnd.large_drop_target ? $(data.event.target).closest('.jstree-node').children('.jstree-anchor') : $(data.event.target).closest('.jstree-anchor');\n\t\t\t\t\t\tif(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) {\n\t\t\t\t\t\t\toff = ref.offset();\n\t\t\t\t\t\t\trel = (data.event.pageY !== undefined ? data.event.pageY : data.event.originalEvent.pageY) - off.top;\n\t\t\t\t\t\t\th = ref.outerHeight();\n\t\t\t\t\t\t\tif(rel < h / 3) {\n\t\t\t\t\t\t\t\to = ['b', 'i', 'a'];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if(rel > h - h / 3) {\n\t\t\t\t\t\t\t\to = ['a', 'i', 'b'];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\to = rel > h / 2 ? ['i', 'a', 'b'] : ['i', 'b', 'a'];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$.each(o, function (j, v) {\n\t\t\t\t\t\t\t\tswitch(v) {\n\t\t\t\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\t\t\t\tl = off.left - 6;\n\t\t\t\t\t\t\t\t\t\tt = off.top;\n\t\t\t\t\t\t\t\t\t\tp = ins.get_parent(ref);\n\t\t\t\t\t\t\t\t\t\ti = ref.parent().index();\n\t\t\t\t\t\t\t\t\t\tc = 'jstree-below';\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'i':\n\t\t\t\t\t\t\t\t\t\tip = ins.settings.dnd.inside_pos;\n\t\t\t\t\t\t\t\t\t\ttm = ins.get_node(ref.parent());\n\t\t\t\t\t\t\t\t\t\tl = off.left - 2;\n\t\t\t\t\t\t\t\t\t\tt = off.top + h / 2 + 1;\n\t\t\t\t\t\t\t\t\t\tp = tm.id;\n\t\t\t\t\t\t\t\t\t\ti = ip === 'first' ? 0 : (ip === 'last' ? tm.children.length : Math.min(ip, tm.children.length));\n\t\t\t\t\t\t\t\t\t\tc = 'jstree-inside';\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t\t\t\tl = off.left - 6;\n\t\t\t\t\t\t\t\t\t\tt = off.top + h;\n\t\t\t\t\t\t\t\t\t\tp = ins.get_parent(ref);\n\t\t\t\t\t\t\t\t\t\ti = ref.parent().index() + 1;\n\t\t\t\t\t\t\t\t\t\tc = 'jstree-above';\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tok = true;\n\t\t\t\t\t\t\t\tfor(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {\n\t\t\t\t\t\t\t\t\top = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? \"copy_node\" : \"move_node\";\n\t\t\t\t\t\t\t\t\tps = i;\n\t\t\t\t\t\t\t\t\tif(op === \"move_node\" && v === 'a' && (data.data.origin && data.data.origin === ins) && p === ins.get_parent(data.data.nodes[t1])) {\n\t\t\t\t\t\t\t\t\t\tpr = ins.get_node(p);\n\t\t\t\t\t\t\t\t\t\tif(ps > $.inArray(data.data.nodes[t1], pr.children)) {\n\t\t\t\t\t\t\t\t\t\t\tps -= 1;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tok = ok && ( (ins && ins.settings && ins.settings.dnd && ins.settings.dnd.check_while_dragging === false) || ins.check(op, (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), p, ps, { 'dnd' : true, 'ref' : ins.get_node(ref.parent()), 'pos' : v, 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }) );\n\t\t\t\t\t\t\t\t\tif(!ok) {\n\t\t\t\t\t\t\t\t\t\tif(ins && ins.last_error) { laster = ins.last_error(); }\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(v === 'i' && ref.parent().is('.jstree-closed') && ins.settings.dnd.open_timeout) {\n\t\t\t\t\t\t\t\t\tif (!data.event || data.event.type !== 'dragover' || isDifferentNode) {\n\t\t\t\t\t\t\t\t\t\tif (opento) { clearTimeout(opento); }\n\t\t\t\t\t\t\t\t\t\topento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(ok) {\n\t\t\t\t\t\t\t\t\tpn = ins.get_node(p, true);\n\t\t\t\t\t\t\t\t\tif (!pn.hasClass('.jstree-dnd-parent')) {\n\t\t\t\t\t\t\t\t\t\t$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');\n\t\t\t\t\t\t\t\t\t\tpn.addClass('jstree-dnd-parent');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i };\n\t\t\t\t\t\t\t\t\tmarker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show();\n\t\t\t\t\t\t\t\t\tmarker.removeClass('jstree-above jstree-inside jstree-below').addClass(c);\n\t\t\t\t\t\t\t\t\tdata.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');\n\t\t\t\t\t\t\t\t\tif (data.event.originalEvent && data.event.originalEvent.dataTransfer) {\n\t\t\t\t\t\t\t\t\t\tdata.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlaster = {};\n\t\t\t\t\t\t\t\t\to = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif(o === true) { return; }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');\n\t\t\t\tlastmv = false;\n\t\t\t\tdata.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er');\n\t\t\t\tif (data.event.originalEvent && data.event.originalEvent.dataTransfer) {\n\t\t\t\t\t//data.event.originalEvent.dataTransfer.dropEffect = 'none';\n\t\t\t\t}\n\t\t\t\tmarker.hide();\n\t\t\t})\n\t\t\t.on('dnd_scroll.vakata.jstree', function (e, data) {\n\t\t\t\tif(!data || !data.data || !data.data.jstree) { return; }\n\t\t\t\tmarker.hide();\n\t\t\t\tlastmv = false;\n\t\t\t\tlastev = false;\n\t\t\t\tdata.helper.find('.jstree-icon').first().removeClass('jstree-ok').addClass('jstree-er');\n\t\t\t})\n\t\t\t.on('dnd_stop.vakata.jstree', function (e, data) {\n\t\t\t\t$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');\n\t\t\t\tif(opento) { clearTimeout(opento); }\n\t\t\t\tif(!data || !data.data || !data.data.jstree) { return; }\n\t\t\t\tmarker.hide().detach();\n\t\t\t\tvar i, j, nodes = [];\n\t\t\t\tif(lastmv) {\n\t\t\t\t\tfor(i = 0, j = data.data.nodes.length; i < j; i++) {\n\t\t\t\t\t\tnodes[i] = data.data.origin ? data.data.origin.get_node(data.data.nodes[i]) : data.data.nodes[i];\n\t\t\t\t\t}\n\t\t\t\t\tlastmv.ins[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'copy_node' : 'move_node' ](nodes, lastmv.par, lastmv.pos, false, false, false, data.data.origin);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ti = $(data.event.target).closest('.jstree');\n\t\t\t\t\tif(i.length && laster && laster.error && laster.error === 'check') {\n\t\t\t\t\t\ti = i.jstree(true);\n\t\t\t\t\t\tif(i) {\n\t\t\t\t\t\t\ti.settings.core.error.call(this, laster);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastev = false;\n\t\t\t\tlastmv = false;\n\t\t\t})\n\t\t\t.on('keyup.jstree keydown.jstree', function (e, data) {\n\t\t\t\tdata = $.vakata.dnd._get();\n\t\t\t\tif(data && data.data && data.data.jstree) {\n\t\t\t\t\tif (e.type === \"keyup\" && e.which === 27) {\n\t\t\t\t\t\tif (opento) { clearTimeout(opento); }\n\t\t\t\t\t\tlastmv = false;\n\t\t\t\t\t\tlaster = false;\n\t\t\t\t\t\tlastev = false;\n\t\t\t\t\t\topento = false;\n\t\t\t\t\t\tmarker.hide().detach();\n\t\t\t\t\t\t$.vakata.dnd._clean();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata.helper.find('.jstree-copy').first()[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (e.metaKey || e.ctrlKey))) ? 'show' : 'hide' ]();\n\t\t\t\t\t\tif(lastev) {\n\t\t\t\t\t\t\tlastev.metaKey = e.metaKey;\n\t\t\t\t\t\t\tlastev.ctrlKey = e.ctrlKey;\n\t\t\t\t\t\t\t$.vakata.dnd._trigger('move', lastev);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t});\n\n\t// helpers\n\t(function ($) {\n\t\t$.vakata.html = {\n\t\t\tdiv : $('<div></div>'),\n\t\t\tescape : function (str) {\n\t\t\t\treturn $.vakata.html.div.text(str).html();\n\t\t\t},\n\t\t\tstrip : function (str) {\n\t\t\t\treturn $.vakata.html.div.empty().append($.parseHTML(str)).text();\n\t\t\t}\n\t\t};\n\t\t// private variable\n\t\tvar vakata_dnd = {\n\t\t\telement\t: false,\n\t\t\ttarget\t: false,\n\t\t\tis_down\t: false,\n\t\t\tis_drag\t: false,\n\t\t\thelper\t: false,\n\t\t\thelper_w: 0,\n\t\t\tdata\t: false,\n\t\t\tinit_x\t: 0,\n\t\t\tinit_y\t: 0,\n\t\t\tscroll_l: 0,\n\t\t\tscroll_t: 0,\n\t\t\tscroll_e: false,\n\t\t\tscroll_i: false,\n\t\t\tis_touch: false\n\t\t};\n\t\t$.vakata.dnd = {\n\t\t\tsettings : {\n\t\t\t\tscroll_speed\t\t: 10,\n\t\t\t\tscroll_proximity\t: 20,\n\t\t\t\thelper_left\t\t\t: 5,\n\t\t\t\thelper_top\t\t\t: 10,\n\t\t\t\tthreshold\t\t\t: 5,\n\t\t\t\tthreshold_touch\t\t: 10\n\t\t\t},\n\t\t\t_trigger : function (event_name, e, data) {\n\t\t\t\tif (data === undefined) {\n\t\t\t\t\tdata = $.vakata.dnd._get();\n\t\t\t\t}\n\t\t\t\tdata.event = e;\n\t\t\t\t$(document).triggerHandler(\"dnd_\" + event_name + \".vakata\", data);\n\t\t\t},\n\t\t\t_get : function () {\n\t\t\t\treturn {\n\t\t\t\t\t\"data\"\t\t: vakata_dnd.data,\n\t\t\t\t\t\"element\"\t: vakata_dnd.element,\n\t\t\t\t\t\"helper\"\t: vakata_dnd.helper\n\t\t\t\t};\n\t\t\t},\n\t\t\t_clean : function () {\n\t\t\t\tif(vakata_dnd.helper) { vakata_dnd.helper.remove(); }\n\t\t\t\tif(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }\n\t\t\t\tvakata_dnd = {\n\t\t\t\t\telement\t: false,\n\t\t\t\t\ttarget\t: false,\n\t\t\t\t\tis_down\t: false,\n\t\t\t\t\tis_drag\t: false,\n\t\t\t\t\thelper\t: false,\n\t\t\t\t\thelper_w: 0,\n\t\t\t\t\tdata\t: false,\n\t\t\t\t\tinit_x\t: 0,\n\t\t\t\t\tinit_y\t: 0,\n\t\t\t\t\tscroll_l: 0,\n\t\t\t\t\tscroll_t: 0,\n\t\t\t\t\tscroll_e: false,\n\t\t\t\t\tscroll_i: false,\n\t\t\t\t\tis_touch: false\n\t\t\t\t};\n\t\t\t\telm = null;\n\t\t\t\t$(document).off(\"mousemove.vakata.jstree touchmove.vakata.jstree\", $.vakata.dnd.drag);\n\t\t\t\t$(document).off(\"mouseup.vakata.jstree touchend.vakata.jstree\", $.vakata.dnd.stop);\n\t\t\t},\n\t\t\t_scroll : function (init_only) {\n\t\t\t\tif(!vakata_dnd.scroll_e || (!vakata_dnd.scroll_l && !vakata_dnd.scroll_t)) {\n\t\t\t\t\tif(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif(!vakata_dnd.scroll_i) {\n\t\t\t\t\tvakata_dnd.scroll_i = setInterval($.vakata.dnd._scroll, 100);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif(init_only === true) { return false; }\n\n\t\t\t\tvar i = vakata_dnd.scroll_e.scrollTop(),\n\t\t\t\t\tj = vakata_dnd.scroll_e.scrollLeft();\n\t\t\t\tvakata_dnd.scroll_e.scrollTop(i + vakata_dnd.scroll_t * $.vakata.dnd.settings.scroll_speed);\n\t\t\t\tvakata_dnd.scroll_e.scrollLeft(j + vakata_dnd.scroll_l * $.vakata.dnd.settings.scroll_speed);\n\t\t\t\tif(i !== vakata_dnd.scroll_e.scrollTop() || j !== vakata_dnd.scroll_e.scrollLeft()) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered on the document when a drag causes an element to scroll\n\t\t\t\t\t * @event\n\t\t\t\t\t * @plugin dnd\n\t\t\t\t\t * @name dnd_scroll.vakata\n\t\t\t\t\t * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start\n\t\t\t\t\t * @param {DOM} element the DOM element being dragged\n\t\t\t\t\t * @param {jQuery} helper the helper shown next to the mouse\n\t\t\t\t\t * @param {jQuery} event the element that is scrolling\n\t\t\t\t\t */\n\t\t\t\t\t$.vakata.dnd._trigger(\"scroll\", vakata_dnd.scroll_e);\n\t\t\t\t}\n\t\t\t},\n\t\t\tstart : function (e, data, html) {\n\t\t\t\tif(e.type === \"touchstart\" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {\n\t\t\t\t\te.pageX = e.originalEvent.changedTouches[0].pageX;\n\t\t\t\t\te.pageY = e.originalEvent.changedTouches[0].pageY;\n\t\t\t\t\te.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);\n\t\t\t\t}\n\t\t\t\tif(vakata_dnd.is_drag) { $.vakata.dnd.stop({}); }\n\t\t\t\ttry {\n\t\t\t\t\te.currentTarget.unselectable = \"on\";\n\t\t\t\t\te.currentTarget.onselectstart = function() { return false; };\n\t\t\t\t\tif(e.currentTarget.style) {\n\t\t\t\t\t\te.currentTarget.style.touchAction = \"none\";\n\t\t\t\t\t\te.currentTarget.style.msTouchAction = \"none\";\n\t\t\t\t\t\te.currentTarget.style.MozUserSelect = \"none\";\n\t\t\t\t\t}\n\t\t\t\t} catch(ignore) { }\n\t\t\t\tvakata_dnd.init_x\t= e.pageX;\n\t\t\t\tvakata_dnd.init_y\t= e.pageY;\n\t\t\t\tvakata_dnd.data\t\t= data;\n\t\t\t\tvakata_dnd.is_down\t= true;\n\t\t\t\tvakata_dnd.element\t= e.currentTarget;\n\t\t\t\tvakata_dnd.target\t= e.target;\n\t\t\t\tvakata_dnd.is_touch\t= e.type === \"touchstart\";\n\t\t\t\tif(html !== false) {\n\t\t\t\t\tvakata_dnd.helper = $(\"<div id='vakata-dnd'></div>\").html(html).css({\n\t\t\t\t\t\t\"display\"\t\t: \"block\",\n\t\t\t\t\t\t\"margin\"\t\t: \"0\",\n\t\t\t\t\t\t\"padding\"\t\t: \"0\",\n\t\t\t\t\t\t\"position\"\t\t: \"absolute\",\n\t\t\t\t\t\t\"top\"\t\t\t: \"-2000px\",\n\t\t\t\t\t\t\"lineHeight\"\t: \"16px\",\n\t\t\t\t\t\t\"zIndex\"\t\t: \"10000\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t$(document).on(\"mousemove.vakata.jstree touchmove.vakata.jstree\", $.vakata.dnd.drag);\n\t\t\t\t$(document).on(\"mouseup.vakata.jstree touchend.vakata.jstree\", $.vakata.dnd.stop);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tdrag : function (e) {\n\t\t\t\tif(e.type === \"touchmove\" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {\n\t\t\t\t\te.pageX = e.originalEvent.changedTouches[0].pageX;\n\t\t\t\t\te.pageY = e.originalEvent.changedTouches[0].pageY;\n\t\t\t\t\te.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);\n\t\t\t\t}\n\t\t\t\tif(!vakata_dnd.is_down) { return; }\n\t\t\t\tif(!vakata_dnd.is_drag) {\n\t\t\t\t\tif(\n\t\t\t\t\t\tMath.abs(e.pageX - vakata_dnd.init_x) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) ||\n\t\t\t\t\t\tMath.abs(e.pageY - vakata_dnd.init_y) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif(vakata_dnd.helper) {\n\t\t\t\t\t\t\tvakata_dnd.helper.appendTo(document.body);\n\t\t\t\t\t\t\tvakata_dnd.helper_w = vakata_dnd.helper.outerWidth();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvakata_dnd.is_drag = true;\n\t\t\t\t\t\t$(vakata_dnd.target).one('click.vakata', false);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * triggered on the document when a drag starts\n\t\t\t\t\t\t * @event\n\t\t\t\t\t\t * @plugin dnd\n\t\t\t\t\t\t * @name dnd_start.vakata\n\t\t\t\t\t\t * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start\n\t\t\t\t\t\t * @param {DOM} element the DOM element being dragged\n\t\t\t\t\t\t * @param {jQuery} helper the helper shown next to the mouse\n\t\t\t\t\t\t * @param {Object} event the event that caused the start (probably mousemove)\n\t\t\t\t\t\t */\n\t\t\t\t\t\t$.vakata.dnd._trigger(\"start\", e);\n\t\t\t\t\t}\n\t\t\t\t\telse { return; }\n\t\t\t\t}\n\n\t\t\t\tvar d  = false, w  = false,\n\t\t\t\t\tdh = false, wh = false,\n\t\t\t\t\tdw = false, ww = false,\n\t\t\t\t\tdt = false, dl = false,\n\t\t\t\t\tht = false, hl = false;\n\n\t\t\t\tvakata_dnd.scroll_t = 0;\n\t\t\t\tvakata_dnd.scroll_l = 0;\n\t\t\t\tvakata_dnd.scroll_e = false;\n\t\t\t\t$($(e.target).parentsUntil(\"body\").addBack().get().reverse())\n\t\t\t\t\t.filter(function () {\n\t\t\t\t\t\treturn\t(/^auto|scroll$/).test($(this).css(\"overflow\")) &&\n\t\t\t\t\t\t\t\t(this.scrollHeight > this.offsetHeight || this.scrollWidth > this.offsetWidth);\n\t\t\t\t\t})\n\t\t\t\t\t.each(function () {\n\t\t\t\t\t\tvar t = $(this), o = t.offset();\n\t\t\t\t\t\tif(this.scrollHeight > this.offsetHeight) {\n\t\t\t\t\t\t\tif(o.top + t.height() - e.pageY < $.vakata.dnd.settings.scroll_proximity)\t{ vakata_dnd.scroll_t = 1; }\n\t\t\t\t\t\t\tif(e.pageY - o.top < $.vakata.dnd.settings.scroll_proximity)\t\t\t\t{ vakata_dnd.scroll_t = -1; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(this.scrollWidth > this.offsetWidth) {\n\t\t\t\t\t\t\tif(o.left + t.width() - e.pageX < $.vakata.dnd.settings.scroll_proximity)\t{ vakata_dnd.scroll_l = 1; }\n\t\t\t\t\t\t\tif(e.pageX - o.left < $.vakata.dnd.settings.scroll_proximity)\t\t\t\t{ vakata_dnd.scroll_l = -1; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {\n\t\t\t\t\t\t\tvakata_dnd.scroll_e = $(this);\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tif(!vakata_dnd.scroll_e) {\n\t\t\t\t\td  = $(document); w = $(window);\n\t\t\t\t\tdh = d.height(); wh = w.height();\n\t\t\t\t\tdw = d.width(); ww = w.width();\n\t\t\t\t\tdt = d.scrollTop(); dl = d.scrollLeft();\n\t\t\t\t\tif(dh > wh && e.pageY - dt < $.vakata.dnd.settings.scroll_proximity)\t\t{ vakata_dnd.scroll_t = -1;  }\n\t\t\t\t\tif(dh > wh && wh - (e.pageY - dt) < $.vakata.dnd.settings.scroll_proximity)\t{ vakata_dnd.scroll_t = 1; }\n\t\t\t\t\tif(dw > ww && e.pageX - dl < $.vakata.dnd.settings.scroll_proximity)\t\t{ vakata_dnd.scroll_l = -1; }\n\t\t\t\t\tif(dw > ww && ww - (e.pageX - dl) < $.vakata.dnd.settings.scroll_proximity)\t{ vakata_dnd.scroll_l = 1; }\n\t\t\t\t\tif(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {\n\t\t\t\t\t\tvakata_dnd.scroll_e = d;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(vakata_dnd.scroll_e) { $.vakata.dnd._scroll(true); }\n\n\t\t\t\tif(vakata_dnd.helper) {\n\t\t\t\t\tht = parseInt(e.pageY + $.vakata.dnd.settings.helper_top, 10);\n\t\t\t\t\thl = parseInt(e.pageX + $.vakata.dnd.settings.helper_left, 10);\n\t\t\t\t\tif(dh && ht + 25 > dh) { ht = dh - 50; }\n\t\t\t\t\tif(dw && hl + vakata_dnd.helper_w > dw) { hl = dw - (vakata_dnd.helper_w + 2); }\n\t\t\t\t\tvakata_dnd.helper.css({\n\t\t\t\t\t\tleft\t: hl + \"px\",\n\t\t\t\t\t\ttop\t\t: ht + \"px\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered on the document when a drag is in progress\n\t\t\t\t * @event\n\t\t\t\t * @plugin dnd\n\t\t\t\t * @name dnd_move.vakata\n\t\t\t\t * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start\n\t\t\t\t * @param {DOM} element the DOM element being dragged\n\t\t\t\t * @param {jQuery} helper the helper shown next to the mouse\n\t\t\t\t * @param {Object} event the event that caused this to trigger (most likely mousemove)\n\t\t\t\t */\n\t\t\t\t$.vakata.dnd._trigger(\"move\", e);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tstop : function (e) {\n\t\t\t\tif(e.type === \"touchend\" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {\n\t\t\t\t\te.pageX = e.originalEvent.changedTouches[0].pageX;\n\t\t\t\t\te.pageY = e.originalEvent.changedTouches[0].pageY;\n\t\t\t\t\te.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);\n\t\t\t\t}\n\t\t\t\tif(vakata_dnd.is_drag) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered on the document when a drag stops (the dragged element is dropped)\n\t\t\t\t\t * @event\n\t\t\t\t\t * @plugin dnd\n\t\t\t\t\t * @name dnd_stop.vakata\n\t\t\t\t\t * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start\n\t\t\t\t\t * @param {DOM} element the DOM element being dragged\n\t\t\t\t\t * @param {jQuery} helper the helper shown next to the mouse\n\t\t\t\t\t * @param {Object} event the event that caused the stop\n\t\t\t\t\t */\n\t\t\t\t\tif (e.target !== vakata_dnd.target) {\n\t\t\t\t\t\t$(vakata_dnd.target).off('click.vakata');\n\t\t\t\t\t}\n\t\t\t\t\t$.vakata.dnd._trigger(\"stop\", e);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif(e.type === \"touchend\" && e.target === vakata_dnd.target) {\n\t\t\t\t\t\tvar to = setTimeout(function () { $(e.target).click(); }, 100);\n\t\t\t\t\t\t$(e.target).one('click', function() { if(to) { clearTimeout(to); } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$.vakata.dnd._clean();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\t}($));\n\n\t// include the dnd plugin by default\n\t// $.jstree.defaults.plugins.push(\"dnd\");\n\n\n/**\n * ### Massload plugin\n *\n * Adds massload functionality to jsTree, so that multiple nodes can be loaded in a single request (only useful with lazy loading).\n */\n\n\t/**\n\t * massload configuration\n\t *\n\t * It is possible to set this to a standard jQuery-like AJAX config.\n\t * In addition to the standard jQuery ajax options here you can supply functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node IDs need to be loaded, the return value of those functions will be used.\n\t *\n\t * You can also set this to a function, that function will receive the node IDs being loaded as argument and a second param which is a function (callback) which should be called with the result.\n\t *\n\t * Both the AJAX and the function approach rely on the same return value - an object where the keys are the node IDs, and the value is the children of that node as an array.\n\t *\n\t *\t{\n\t *\t\t\"id1\" : [{ \"text\" : \"Child of ID1\", \"id\" : \"c1\" }, { \"text\" : \"Another child of ID1\", \"id\" : \"c2\" }],\n\t *\t\t\"id2\" : [{ \"text\" : \"Child of ID2\", \"id\" : \"c3\" }]\n\t *\t}\n\t * \n\t * @name $.jstree.defaults.massload\n\t * @plugin massload\n\t */\n\t$.jstree.defaults.massload = null;\n\t$.jstree.plugins.massload = function (options, parent) {\n\t\tthis.init = function (el, options) {\n\t\t\tthis._data.massload = {};\n\t\t\tparent.init.call(this, el, options);\n\t\t};\n\t\tthis._load_nodes = function (nodes, callback, is_callback, force_reload) {\n\t\t\tvar s = this.settings.massload,\t\t\t\t\n\t\t\t\ttoLoad = [],\n\t\t\t\tm = this._model.data,\n\t\t\t\ti, j, dom;\n\t\t\tif (!is_callback) {\n\t\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\t\tif(!m[nodes[i]] || ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || force_reload) ) {\n\t\t\t\t\t\ttoLoad.push(nodes[i]);\n\t\t\t\t\t\tdom = this.get_node(nodes[i], true);\n\t\t\t\t\t\tif (dom && dom.length) {\n\t\t\t\t\t\t\tdom.addClass(\"jstree-loading\").attr('aria-busy',true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._data.massload = {};\n\t\t\t\tif (toLoad.length) {\n\t\t\t\t\tif($.isFunction(s)) {\n\t\t\t\t\t\treturn s.call(this, toLoad, $.proxy(function (data) {\n\t\t\t\t\t\t\tvar i, j;\n\t\t\t\t\t\t\tif(data) {\n\t\t\t\t\t\t\t\tfor(i in data) {\n\t\t\t\t\t\t\t\t\tif(data.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\tthis._data.massload[i] = data[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\t\t\t\t\tdom = this.get_node(nodes[i], true);\n\t\t\t\t\t\t\t\tif (dom && dom.length) {\n\t\t\t\t\t\t\t\t\tdom.removeClass(\"jstree-loading\").attr('aria-busy',false);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tparent._load_nodes.call(this, nodes, callback, is_callback, force_reload);\n\t\t\t\t\t\t}, this));\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof s === 'object' && s && s.url) {\n\t\t\t\t\t\ts = $.extend(true, {}, s);\n\t\t\t\t\t\tif($.isFunction(s.url)) {\n\t\t\t\t\t\t\ts.url = s.url.call(this, toLoad);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif($.isFunction(s.data)) {\n\t\t\t\t\t\t\ts.data = s.data.call(this, toLoad);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn $.ajax(s)\n\t\t\t\t\t\t\t.done($.proxy(function (data,t,x) {\n\t\t\t\t\t\t\t\t\tvar i, j;\n\t\t\t\t\t\t\t\t\tif(data) {\n\t\t\t\t\t\t\t\t\t\tfor(i in data) {\n\t\t\t\t\t\t\t\t\t\t\tif(data.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\t\t\tthis._data.massload[i] = data[i];\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\tdom = this.get_node(nodes[i], true);\n\t\t\t\t\t\t\t\t\t\tif (dom && dom.length) {\n\t\t\t\t\t\t\t\t\t\t\tdom.removeClass(\"jstree-loading\").attr('aria-busy',false);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tparent._load_nodes.call(this, nodes, callback, is_callback, force_reload);\n\t\t\t\t\t\t\t\t}, this))\n\t\t\t\t\t\t\t.fail($.proxy(function (f) {\n\t\t\t\t\t\t\t\t\tparent._load_nodes.call(this, nodes, callback, is_callback, force_reload);\n\t\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);\n\t\t};\n\t\tthis._load_node = function (obj, callback) {\n\t\t\tvar data = this._data.massload[obj.id],\n\t\t\t\trslt = null, dom;\n\t\t\tif(data) {\n\t\t\t\trslt = this[typeof data === 'string' ? '_append_html_data' : '_append_json_data'](\n\t\t\t\t\tobj,\n\t\t\t\t\ttypeof data === 'string' ? $($.parseHTML(data)).filter(function () { return this.nodeType !== 3; }) : data,\n\t\t\t\t\tfunction (status) { callback.call(this, status); }\n\t\t\t\t);\n\t\t\t\tdom = this.get_node(obj.id, true);\n\t\t\t\tif (dom && dom.length) {\n\t\t\t\t\tdom.removeClass(\"jstree-loading\").attr('aria-busy',false);\n\t\t\t\t}\n\t\t\t\tdelete this._data.massload[obj.id];\n\t\t\t\treturn rslt;\n\t\t\t}\n\t\t\treturn parent._load_node.call(this, obj, callback);\n\t\t};\n\t};\n\n\n/**\n * ### Search plugin\n *\n * Adds search functionality to jsTree.\n */\n\n\t/**\n\t * stores all defaults for the search plugin\n\t * @name $.jstree.defaults.search\n\t * @plugin search\n\t */\n\t$.jstree.defaults.search = {\n\t\t/**\n\t\t * a jQuery-like AJAX config, which jstree uses if a server should be queried for results.\n\t\t *\n\t\t * A `str` (which is the search string) parameter will be added with the request, an optional `inside` parameter will be added if the search is limited to a node id. The expected result is a JSON array with nodes that need to be opened so that matching nodes will be revealed.\n\t\t * Leave this setting as `false` to not query the server. You can also set this to a function, which will be invoked in the instance's scope and receive 3 parameters - the search string, the callback to call with the array of nodes to load, and the optional node ID to limit the search to\n\t\t * @name $.jstree.defaults.search.ajax\n\t\t * @plugin search\n\t\t */\n\t\tajax : false,\n\t\t/**\n\t\t * Indicates if the search should be fuzzy or not (should `chnd3` match `child node 3`). Default is `false`.\n\t\t * @name $.jstree.defaults.search.fuzzy\n\t\t * @plugin search\n\t\t */\n\t\tfuzzy : false,\n\t\t/**\n\t\t * Indicates if the search should be case sensitive. Default is `false`.\n\t\t * @name $.jstree.defaults.search.case_sensitive\n\t\t * @plugin search\n\t\t */\n\t\tcase_sensitive : false,\n\t\t/**\n\t\t * Indicates if the tree should be filtered (by default) to show only matching nodes (keep in mind this can be a heavy on large trees in old browsers).\n\t\t * This setting can be changed at runtime when calling the search method. Default is `false`.\n\t\t * @name $.jstree.defaults.search.show_only_matches\n\t\t * @plugin search\n\t\t */\n\t\tshow_only_matches : false,\n\t\t/**\n\t\t * Indicates if the children of matched element are shown (when show_only_matches is true)\n\t\t * This setting can be changed at runtime when calling the search method. Default is `false`.\n\t\t * @name $.jstree.defaults.search.show_only_matches_children\n\t\t * @plugin search\n\t\t */\n\t\tshow_only_matches_children : false,\n\t\t/**\n\t\t * Indicates if all nodes opened to reveal the search result, should be closed when the search is cleared or a new search is performed. Default is `true`.\n\t\t * @name $.jstree.defaults.search.close_opened_onclear\n\t\t * @plugin search\n\t\t */\n\t\tclose_opened_onclear : true,\n\t\t/**\n\t\t * Indicates if only leaf nodes should be included in search results. Default is `false`.\n\t\t * @name $.jstree.defaults.search.search_leaves_only\n\t\t * @plugin search\n\t\t */\n\t\tsearch_leaves_only : false,\n\t\t/**\n\t\t * If set to a function it wil be called in the instance's scope with two arguments - search string and node (where node will be every node in the structure, so use with caution).\n\t\t * If the function returns a truthy value the node will be considered a match (it might not be displayed if search_only_leaves is set to true and the node is not a leaf). Default is `false`.\n\t\t * @name $.jstree.defaults.search.search_callback\n\t\t * @plugin search\n\t\t */\n\t\tsearch_callback : false\n\t};\n\n\t$.jstree.plugins.search = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\n\t\t\tthis._data.search.str = \"\";\n\t\t\tthis._data.search.dom = $();\n\t\t\tthis._data.search.res = [];\n\t\t\tthis._data.search.opn = [];\n\t\t\tthis._data.search.som = false;\n\t\t\tthis._data.search.smc = false;\n\t\t\tthis._data.search.hdn = [];\n\n\t\t\tthis.element\n\t\t\t\t.on(\"search.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tif(this._data.search.som && data.res.length) {\n\t\t\t\t\t\t\tvar m = this._model.data, i, j, p = [], k, l;\n\t\t\t\t\t\t\tfor(i = 0, j = data.res.length; i < j; i++) {\n\t\t\t\t\t\t\t\tif(m[data.res[i]] && !m[data.res[i]].state.hidden) {\n\t\t\t\t\t\t\t\t\tp.push(data.res[i]);\n\t\t\t\t\t\t\t\t\tp = p.concat(m[data.res[i]].parents);\n\t\t\t\t\t\t\t\t\tif(this._data.search.smc) {\n\t\t\t\t\t\t\t\t\t\tfor (k = 0, l = m[data.res[i]].children_d.length; k < l; k++) {\n\t\t\t\t\t\t\t\t\t\t\tif (m[m[data.res[i]].children_d[k]] && !m[m[data.res[i]].children_d[k]].state.hidden) {\n\t\t\t\t\t\t\t\t\t\t\t\tp.push(m[data.res[i]].children_d[k]);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tp = $.vakata.array_remove_item($.vakata.array_unique(p), $.jstree.root);\n\t\t\t\t\t\t\tthis._data.search.hdn = this.hide_all(true);\n\t\t\t\t\t\t\tthis.show_node(p, true);\n\t\t\t\t\t\t\tthis.redraw(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"clear_search.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tif(this._data.search.som && data.res.length) {\n\t\t\t\t\t\t\tthis.show_node(this._data.search.hdn, true);\n\t\t\t\t\t\t\tthis.redraw(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this));\n\t\t};\n\t\t/**\n\t\t * used to search the tree nodes for a given string\n\t\t * @name search(str [, skip_async])\n\t\t * @param {String} str the search string\n\t\t * @param {Boolean} skip_async if set to true server will not be queried even if configured\n\t\t * @param {Boolean} show_only_matches if set to true only matching nodes will be shown (keep in mind this can be very slow on large trees or old browsers)\n\t\t * @param {mixed} inside an optional node to whose children to limit the search\n\t\t * @param {Boolean} append if set to true the results of this search are appended to the previous search\n\t\t * @plugin search\n\t\t * @trigger search.jstree\n\t\t */\n\t\tthis.search = function (str, skip_async, show_only_matches, inside, append, show_only_matches_children) {\n\t\t\tif(str === false || $.vakata.trim(str.toString()) === \"\") {\n\t\t\t\treturn this.clear_search();\n\t\t\t}\n\t\t\tinside = this.get_node(inside);\n\t\t\tinside = inside && inside.id ? inside.id : null;\n\t\t\tstr = str.toString();\n\t\t\tvar s = this.settings.search,\n\t\t\t\ta = s.ajax ? s.ajax : false,\n\t\t\t\tm = this._model.data,\n\t\t\t\tf = null,\n\t\t\t\tr = [],\n\t\t\t\tp = [], i, j;\n\t\t\tif(this._data.search.res.length && !append) {\n\t\t\t\tthis.clear_search();\n\t\t\t}\n\t\t\tif(show_only_matches === undefined) {\n\t\t\t\tshow_only_matches = s.show_only_matches;\n\t\t\t}\n\t\t\tif(show_only_matches_children === undefined) {\n\t\t\t\tshow_only_matches_children = s.show_only_matches_children;\n\t\t\t}\n\t\t\tif(!skip_async && a !== false) {\n\t\t\t\tif($.isFunction(a)) {\n\t\t\t\t\treturn a.call(this, str, $.proxy(function (d) {\n\t\t\t\t\t\t\tif(d && d.d) { d = d.d; }\n\t\t\t\t\t\t\tthis._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {\n\t\t\t\t\t\t\t\tthis.search(str, true, show_only_matches, inside, append, show_only_matches_children);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, this), inside);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ta = $.extend({}, a);\n\t\t\t\t\tif(!a.data) { a.data = {}; }\n\t\t\t\t\ta.data.str = str;\n\t\t\t\t\tif(inside) {\n\t\t\t\t\t\ta.data.inside = inside;\n\t\t\t\t\t}\n\t\t\t\t\tif (this._data.search.lastRequest) {\n\t\t\t\t\t\tthis._data.search.lastRequest.abort();\n\t\t\t\t\t}\n\t\t\t\t\tthis._data.search.lastRequest = $.ajax(a)\n\t\t\t\t\t\t.fail($.proxy(function () {\n\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) };\n\t\t\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t\t.done($.proxy(function (d) {\n\t\t\t\t\t\t\tif(d && d.d) { d = d.d; }\n\t\t\t\t\t\t\tthis._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {\n\t\t\t\t\t\t\t\tthis.search(str, true, show_only_matches, inside, append, show_only_matches_children);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, this));\n\t\t\t\t\treturn this._data.search.lastRequest;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!append) {\n\t\t\t\tthis._data.search.str = str;\n\t\t\t\tthis._data.search.dom = $();\n\t\t\t\tthis._data.search.res = [];\n\t\t\t\tthis._data.search.opn = [];\n\t\t\t\tthis._data.search.som = show_only_matches;\n\t\t\t\tthis._data.search.smc = show_only_matches_children;\n\t\t\t}\n\n\t\t\tf = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy });\n\t\t\t$.each(m[inside ? inside : $.jstree.root].children_d, function (ii, i) {\n\t\t\t\tvar v = m[i];\n\t\t\t\tif(v.text && !v.state.hidden && (!s.search_leaves_only || (v.state.loaded && v.children.length === 0)) && ( (s.search_callback && s.search_callback.call(this, str, v)) || (!s.search_callback && f.search(v.text).isMatch) ) ) {\n\t\t\t\t\tr.push(i);\n\t\t\t\t\tp = p.concat(v.parents);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(r.length) {\n\t\t\t\tp = $.vakata.array_unique(p);\n\t\t\t\tfor(i = 0, j = p.length; i < j; i++) {\n\t\t\t\t\tif(p[i] !== $.jstree.root && m[p[i]] && this.open_node(p[i], null, 0) === true) {\n\t\t\t\t\t\tthis._data.search.opn.push(p[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!append) {\n\t\t\t\t\tthis._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return \"0123456789\".indexOf(v[0]) !== -1 ? '\\\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\\\$&') : v.replace($.jstree.idregex,'\\\\$&'); }).join(', #')));\n\t\t\t\t\tthis._data.search.res = r;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._data.search.dom = this._data.search.dom.add($(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return \"0123456789\".indexOf(v[0]) !== -1 ? '\\\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\\\$&') : v.replace($.jstree.idregex,'\\\\$&'); }).join(', #'))));\n\t\t\t\t\tthis._data.search.res = $.vakata.array_unique(this._data.search.res.concat(r));\n\t\t\t\t}\n\t\t\t\tthis._data.search.dom.children(\".jstree-anchor\").addClass('jstree-search');\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered after search is complete\n\t\t\t * @event\n\t\t\t * @name search.jstree\n\t\t\t * @param {jQuery} nodes a jQuery collection of matching nodes\n\t\t\t * @param {String} str the search string\n\t\t\t * @param {Array} res a collection of objects represeing the matching nodes\n\t\t\t * @plugin search\n\t\t\t */\n\t\t\tthis.trigger('search', { nodes : this._data.search.dom, str : str, res : this._data.search.res, show_only_matches : show_only_matches });\n\t\t};\n\t\t/**\n\t\t * used to clear the last search (removes classes and shows all nodes if filtering is on)\n\t\t * @name clear_search()\n\t\t * @plugin search\n\t\t * @trigger clear_search.jstree\n\t\t */\n\t\tthis.clear_search = function () {\n\t\t\tif(this.settings.search.close_opened_onclear) {\n\t\t\t\tthis.close_node(this._data.search.opn, 0);\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered after search is complete\n\t\t\t * @event\n\t\t\t * @name clear_search.jstree\n\t\t\t * @param {jQuery} nodes a jQuery collection of matching nodes (the result from the last search)\n\t\t\t * @param {String} str the search string (the last search string)\n\t\t\t * @param {Array} res a collection of objects represeing the matching nodes (the result from the last search)\n\t\t\t * @plugin search\n\t\t\t */\n\t\t\tthis.trigger('clear_search', { 'nodes' : this._data.search.dom, str : this._data.search.str, res : this._data.search.res });\n\t\t\tif(this._data.search.res.length) {\n\t\t\t\tthis._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(this._data.search.res, function (v) {\n\t\t\t\t\treturn \"0123456789\".indexOf(v[0]) !== -1 ? '\\\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\\\$&') : v.replace($.jstree.idregex,'\\\\$&');\n\t\t\t\t}).join(', #')));\n\t\t\t\tthis._data.search.dom.children(\".jstree-anchor\").removeClass(\"jstree-search\");\n\t\t\t}\n\t\t\tthis._data.search.str = \"\";\n\t\t\tthis._data.search.res = [];\n\t\t\tthis._data.search.opn = [];\n\t\t\tthis._data.search.dom = $();\n\t\t};\n\n\t\tthis.redraw_node = function(obj, deep, callback, force_render) {\n\t\t\tobj = parent.redraw_node.apply(this, arguments);\n\t\t\tif(obj) {\n\t\t\t\tif($.inArray(obj.id, this._data.search.res) !== -1) {\n\t\t\t\t\tvar i, j, tmp = null;\n\t\t\t\t\tfor(i = 0, j = obj.childNodes.length; i < j; i++) {\n\t\t\t\t\t\tif(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf(\"jstree-anchor\") !== -1) {\n\t\t\t\t\t\t\ttmp = obj.childNodes[i];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(tmp) {\n\t\t\t\t\t\ttmp.className += ' jstree-search';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t};\n\t};\n\n\t// helpers\n\t(function ($) {\n\t\t// from http://kiro.me/projects/fuse.html\n\t\t$.vakata.search = function(pattern, txt, options) {\n\t\t\toptions = options || {};\n\t\t\toptions = $.extend({}, $.vakata.search.defaults, options);\n\t\t\tif(options.fuzzy !== false) {\n\t\t\t\toptions.fuzzy = true;\n\t\t\t}\n\t\t\tpattern = options.caseSensitive ? pattern : pattern.toLowerCase();\n\t\t\tvar MATCH_LOCATION\t= options.location,\n\t\t\t\tMATCH_DISTANCE\t= options.distance,\n\t\t\t\tMATCH_THRESHOLD\t= options.threshold,\n\t\t\t\tpatternLen = pattern.length,\n\t\t\t\tmatchmask, pattern_alphabet, match_bitapScore, search;\n\t\t\tif(patternLen > 32) {\n\t\t\t\toptions.fuzzy = false;\n\t\t\t}\n\t\t\tif(options.fuzzy) {\n\t\t\t\tmatchmask = 1 << (patternLen - 1);\n\t\t\t\tpattern_alphabet = (function () {\n\t\t\t\t\tvar mask = {},\n\t\t\t\t\t\ti = 0;\n\t\t\t\t\tfor (i = 0; i < patternLen; i++) {\n\t\t\t\t\t\tmask[pattern.charAt(i)] = 0;\n\t\t\t\t\t}\n\t\t\t\t\tfor (i = 0; i < patternLen; i++) {\n\t\t\t\t\t\tmask[pattern.charAt(i)] |= 1 << (patternLen - i - 1);\n\t\t\t\t\t}\n\t\t\t\t\treturn mask;\n\t\t\t\t}());\n\t\t\t\tmatch_bitapScore = function (e, x) {\n\t\t\t\t\tvar accuracy = e / patternLen,\n\t\t\t\t\t\tproximity = Math.abs(MATCH_LOCATION - x);\n\t\t\t\t\tif(!MATCH_DISTANCE) {\n\t\t\t\t\t\treturn proximity ? 1.0 : accuracy;\n\t\t\t\t\t}\n\t\t\t\t\treturn accuracy + (proximity / MATCH_DISTANCE);\n\t\t\t\t};\n\t\t\t}\n\t\t\tsearch = function (text) {\n\t\t\t\ttext = options.caseSensitive ? text : text.toLowerCase();\n\t\t\t\tif(pattern === text || text.indexOf(pattern) !== -1) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tisMatch: true,\n\t\t\t\t\t\tscore: 0\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif(!options.fuzzy) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tisMatch: false,\n\t\t\t\t\t\tscore: 1\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tvar i, j,\n\t\t\t\t\ttextLen = text.length,\n\t\t\t\t\tscoreThreshold = MATCH_THRESHOLD,\n\t\t\t\t\tbestLoc = text.indexOf(pattern, MATCH_LOCATION),\n\t\t\t\t\tbinMin, binMid,\n\t\t\t\t\tbinMax = patternLen + textLen,\n\t\t\t\t\tlastRd, start, finish, rd, charMatch,\n\t\t\t\t\tscore = 1,\n\t\t\t\t\tlocations = [];\n\t\t\t\tif (bestLoc !== -1) {\n\t\t\t\t\tscoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);\n\t\t\t\t\tbestLoc = text.lastIndexOf(pattern, MATCH_LOCATION + patternLen);\n\t\t\t\t\tif (bestLoc !== -1) {\n\t\t\t\t\t\tscoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbestLoc = -1;\n\t\t\t\tfor (i = 0; i < patternLen; i++) {\n\t\t\t\t\tbinMin = 0;\n\t\t\t\t\tbinMid = binMax;\n\t\t\t\t\twhile (binMin < binMid) {\n\t\t\t\t\t\tif (match_bitapScore(i, MATCH_LOCATION + binMid) <= scoreThreshold) {\n\t\t\t\t\t\t\tbinMin = binMid;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbinMax = binMid;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbinMid = Math.floor((binMax - binMin) / 2 + binMin);\n\t\t\t\t\t}\n\t\t\t\t\tbinMax = binMid;\n\t\t\t\t\tstart = Math.max(1, MATCH_LOCATION - binMid + 1);\n\t\t\t\t\tfinish = Math.min(MATCH_LOCATION + binMid, textLen) + patternLen;\n\t\t\t\t\trd = new Array(finish + 2);\n\t\t\t\t\trd[finish + 1] = (1 << i) - 1;\n\t\t\t\t\tfor (j = finish; j >= start; j--) {\n\t\t\t\t\t\tcharMatch = pattern_alphabet[text.charAt(j - 1)];\n\t\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\t\trd[j] = ((rd[j + 1] << 1) | 1) & charMatch;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trd[j] = ((rd[j + 1] << 1) | 1) & charMatch | (((lastRd[j + 1] | lastRd[j]) << 1) | 1) | lastRd[j + 1];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (rd[j] & matchmask) {\n\t\t\t\t\t\t\tscore = match_bitapScore(i, j - 1);\n\t\t\t\t\t\t\tif (score <= scoreThreshold) {\n\t\t\t\t\t\t\t\tscoreThreshold = score;\n\t\t\t\t\t\t\t\tbestLoc = j - 1;\n\t\t\t\t\t\t\t\tlocations.push(bestLoc);\n\t\t\t\t\t\t\t\tif (bestLoc > MATCH_LOCATION) {\n\t\t\t\t\t\t\t\t\tstart = Math.max(1, 2 * MATCH_LOCATION - bestLoc);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (match_bitapScore(i + 1, MATCH_LOCATION) > scoreThreshold) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tlastRd = rd;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tisMatch: bestLoc >= 0,\n\t\t\t\t\tscore: score\n\t\t\t\t};\n\t\t\t};\n\t\t\treturn txt === true ? { 'search' : search } : search(txt);\n\t\t};\n\t\t$.vakata.search.defaults = {\n\t\t\tlocation : 0,\n\t\t\tdistance : 100,\n\t\t\tthreshold : 0.6,\n\t\t\tfuzzy : false,\n\t\t\tcaseSensitive : false\n\t\t};\n\t}($));\n\n\t// include the search plugin by default\n\t// $.jstree.defaults.plugins.push(\"search\");\n\n\n/**\n * ### Sort plugin\n *\n * Automatically sorts all siblings in the tree according to a sorting function.\n */\n\n\t/**\n\t * the settings function used to sort the nodes.\n\t * It is executed in the tree's context, accepts two nodes as arguments and should return `1` or `-1`.\n\t * @name $.jstree.defaults.sort\n\t * @plugin sort\n\t */\n\t$.jstree.defaults.sort = function (a, b) {\n\t\t//return this.get_type(a) === this.get_type(b) ? (this.get_text(a) > this.get_text(b) ? 1 : -1) : this.get_type(a) >= this.get_type(b);\n\t\treturn this.get_text(a) > this.get_text(b) ? 1 : -1;\n\t};\n\t$.jstree.plugins.sort = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\t\t\tthis.element\n\t\t\t\t.on(\"model.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.sort(data.parent, true);\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"rename_node.jstree create_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.sort(data.parent || data.node.parent, false);\n\t\t\t\t\t\tthis.redraw_node(data.parent || data.node.parent, true);\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"move_node.jstree copy_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.sort(data.parent, false);\n\t\t\t\t\t\tthis.redraw_node(data.parent, true);\n\t\t\t\t\t}, this));\n\t\t};\n\t\t/**\n\t\t * used to sort a node's children\n\t\t * @private\n\t\t * @name sort(obj [, deep])\n\t\t * @param  {mixed} obj the node\n\t\t * @param {Boolean} deep if set to `true` nodes are sorted recursively.\n\t\t * @plugin sort\n\t\t * @trigger search.jstree\n\t\t */\n\t\tthis.sort = function (obj, deep) {\n\t\t\tvar i, j;\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(obj && obj.children && obj.children.length) {\n\t\t\t\tobj.children.sort($.proxy(this.settings.sort, this));\n\t\t\t\tif(deep) {\n\t\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\t\tthis.sort(obj.children_d[i], false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t};\n\n\t// include the sort plugin by default\n\t// $.jstree.defaults.plugins.push(\"sort\");\n\n/**\n * ### State plugin\n *\n * Saves the state of the tree (selected nodes, opened nodes) on the user's computer using available options (localStorage, cookies, etc)\n */\n\n\tvar to = false;\n\t/**\n\t * stores all defaults for the state plugin\n\t * @name $.jstree.defaults.state\n\t * @plugin state\n\t */\n\t$.jstree.defaults.state = {\n\t\t/**\n\t\t * A string for the key to use when saving the current tree (change if using multiple trees in your project). Defaults to `jstree`.\n\t\t * @name $.jstree.defaults.state.key\n\t\t * @plugin state\n\t\t */\n\t\tkey\t\t: 'jstree',\n\t\t/**\n\t\t * A space separated list of events that trigger a state save. Defaults to `changed.jstree open_node.jstree close_node.jstree`.\n\t\t * @name $.jstree.defaults.state.events\n\t\t * @plugin state\n\t\t */\n\t\tevents\t: 'changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree',\n\t\t/**\n\t\t * Time in milliseconds after which the state will expire. Defaults to 'false' meaning - no expire.\n\t\t * @name $.jstree.defaults.state.ttl\n\t\t * @plugin state\n\t\t */\n\t\tttl\t\t: false,\n\t\t/**\n\t\t * A function that will be executed prior to restoring state with one argument - the state object. Can be used to clear unwanted parts of the state.\n\t\t * @name $.jstree.defaults.state.filter\n\t\t * @plugin state\n\t\t */\n\t\tfilter\t: false,\n\t\t/**\n\t\t * Should loaded nodes be restored (setting this to true means that it is possible that the whole tree will be loaded for some users - use with caution). Defaults to `false`\n\t\t * @name $.jstree.defaults.state.preserve_loaded\n\t\t * @plugin state\n\t\t */\n\t\tpreserve_loaded : false\n\t};\n\t$.jstree.plugins.state = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\t\t\tvar bind = $.proxy(function () {\n\t\t\t\tthis.element.on(this.settings.state.events, $.proxy(function () {\n\t\t\t\t\tif(to) { clearTimeout(to); }\n\t\t\t\t\tto = setTimeout($.proxy(function () { this.save_state(); }, this), 100);\n\t\t\t\t}, this));\n\t\t\t\t/**\n\t\t\t\t * triggered when the state plugin is finished restoring the state (and immediately after ready if there is no state to restore).\n\t\t\t\t * @event\n\t\t\t\t * @name state_ready.jstree\n\t\t\t\t * @plugin state\n\t\t\t\t */\n\t\t\t\tthis.trigger('state_ready');\n\t\t\t}, this);\n\t\t\tthis.element\n\t\t\t\t.on(\"ready.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.element.one(\"restore_state.jstree\", bind);\n\t\t\t\t\t\tif(!this.restore_state()) { bind(); }\n\t\t\t\t\t}, this));\n\t\t};\n\t\t/**\n\t\t * save the state\n\t\t * @name save_state()\n\t\t * @plugin state\n\t\t */\n\t\tthis.save_state = function () {\n\t\t\tvar tm = this.get_state();\n\t\t\tif (!this.settings.state.preserve_loaded) {\n\t\t\t\tdelete tm.core.loaded;\n\t\t\t}\n\t\t\tvar st = { 'state' : tm, 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) };\n\t\t\t$.vakata.storage.set(this.settings.state.key, JSON.stringify(st));\n\t\t};\n\t\t/**\n\t\t * restore the state from the user's computer\n\t\t * @name restore_state()\n\t\t * @plugin state\n\t\t */\n\t\tthis.restore_state = function () {\n\t\t\tvar k = $.vakata.storage.get(this.settings.state.key);\n\t\t\tif(!!k) { try { k = JSON.parse(k); } catch(ex) { return false; } }\n\t\t\tif(!!k && k.ttl && k.sec && +(new Date()) - k.sec > k.ttl) { return false; }\n\t\t\tif(!!k && k.state) { k = k.state; }\n\t\t\tif(!!k && $.isFunction(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); }\n\t\t\tif(!!k) {\n\t\t\t\tif (!this.settings.state.preserve_loaded) {\n\t\t\t\t\tdelete k.core.loaded;\n\t\t\t\t}\n\t\t\t\tthis.element.one(\"set_state.jstree\", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); });\n\t\t\t\tthis.set_state(k);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\t/**\n\t\t * clear the state on the user's computer\n\t\t * @name clear_state()\n\t\t * @plugin state\n\t\t */\n\t\tthis.clear_state = function () {\n\t\t\treturn $.vakata.storage.del(this.settings.state.key);\n\t\t};\n\t};\n\n\t(function ($, undefined) {\n\t\t$.vakata.storage = {\n\t\t\t// simply specifying the functions in FF throws an error\n\t\t\tset : function (key, val) { return window.localStorage.setItem(key, val); },\n\t\t\tget : function (key) { return window.localStorage.getItem(key); },\n\t\t\tdel : function (key) { return window.localStorage.removeItem(key); }\n\t\t};\n\t}($));\n\n\t// include the state plugin by default\n\t// $.jstree.defaults.plugins.push(\"state\");\n\n/**\n * ### Types plugin\n *\n * Makes it possible to add predefined types for groups of nodes, which make it possible to easily control nesting rules and icon for each group.\n */\n\n\t/**\n\t * An object storing all types as key value pairs, where the key is the type name and the value is an object that could contain following keys (all optional).\n\t *\n\t * * `max_children` the maximum number of immediate children this node type can have. Do not specify or set to `-1` for unlimited.\n\t * * `max_depth` the maximum number of nesting this node type can have. A value of `1` would mean that the node can have children, but no grandchildren. Do not specify or set to `-1` for unlimited.\n\t * * `valid_children` an array of node type strings, that nodes of this type can have as children. Do not specify or set to `-1` for no limits.\n\t * * `icon` a string - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class. Omit to use the default icon from your theme.\n\t * * `li_attr` an object of values which will be used to add HTML attributes on the resulting LI DOM node (merged with the node's own data)\n\t * * `a_attr` an object of values which will be used to add HTML attributes on the resulting A DOM node (merged with the node's own data)\n\t *\n\t * There are two predefined types:\n\t *\n\t * * `#` represents the root of the tree, for example `max_children` would control the maximum number of root nodes.\n\t * * `default` represents the default node - any settings here will be applied to all nodes that do not have a type specified.\n\t *\n\t * @name $.jstree.defaults.types\n\t * @plugin types\n\t */\n\t$.jstree.defaults.types = {\n\t\t'default' : {}\n\t};\n\t$.jstree.defaults.types[$.jstree.root] = {};\n\n\t$.jstree.plugins.types = function (options, parent) {\n\t\tthis.init = function (el, options) {\n\t\t\tvar i, j;\n\t\t\tif(options && options.types && options.types['default']) {\n\t\t\t\tfor(i in options.types) {\n\t\t\t\t\tif(i !== \"default\" && i !== $.jstree.root && options.types.hasOwnProperty(i)) {\n\t\t\t\t\t\tfor(j in options.types['default']) {\n\t\t\t\t\t\t\tif(options.types['default'].hasOwnProperty(j) && options.types[i][j] === undefined) {\n\t\t\t\t\t\t\t\toptions.types[i][j] = options.types['default'][j];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tparent.init.call(this, el, options);\n\t\t\tthis._model.data[$.jstree.root].type = $.jstree.root;\n\t\t};\n\t\tthis.refresh = function (skip_loading, forget_state) {\n\t\t\tparent.refresh.call(this, skip_loading, forget_state);\n\t\t\tthis._model.data[$.jstree.root].type = $.jstree.root;\n\t\t};\n\t\tthis.bind = function () {\n\t\t\tthis.element\n\t\t\t\t.on('model.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\tvar m = this._model.data,\n\t\t\t\t\t\t\tdpc = data.nodes,\n\t\t\t\t\t\t\tt = this.settings.types,\n\t\t\t\t\t\t\ti, j, c = 'default', k;\n\t\t\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\t\t\tc = 'default';\n\t\t\t\t\t\t\tif(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) {\n\t\t\t\t\t\t\t\tc = m[dpc[i]].original.type;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(m[dpc[i]].data && m[dpc[i]].data.jstree && m[dpc[i]].data.jstree.type && t[m[dpc[i]].data.jstree.type]) {\n\t\t\t\t\t\t\t\tc = m[dpc[i]].data.jstree.type;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tm[dpc[i]].type = c;\n\t\t\t\t\t\t\tif(m[dpc[i]].icon === true && t[c].icon !== undefined) {\n\t\t\t\t\t\t\t\tm[dpc[i]].icon = t[c].icon;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(t[c].li_attr !== undefined && typeof t[c].li_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (k in t[c].li_attr) {\n\t\t\t\t\t\t\t\t\tif (t[c].li_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (m[dpc[i]].li_attr[k] === undefined) {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].li_attr[k] = t[c].li_attr[k];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].li_attr['class'] = t[c].li_attr['class'] + ' ' + m[dpc[i]].li_attr['class'];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(t[c].a_attr !== undefined && typeof t[c].a_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (k in t[c].a_attr) {\n\t\t\t\t\t\t\t\t\tif (t[c].a_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (m[dpc[i]].a_attr[k] === undefined) {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].a_attr[k] = t[c].a_attr[k];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (k === 'href' && m[dpc[i]].a_attr[k] === '#') {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].a_attr['href'] = t[c].a_attr['href'];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].a_attr['class'] = t[c].a_attr['class'] + ' ' + m[dpc[i]].a_attr['class'];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tm[$.jstree.root].type = $.jstree.root;\n\t\t\t\t\t}, this));\n\t\t\tparent.bind.call(this);\n\t\t};\n\t\tthis.get_json = function (obj, options, flat) {\n\t\t\tvar i, j,\n\t\t\t\tm = this._model.data,\n\t\t\t\topt = options ? $.extend(true, {}, options, {no_id:false}) : {},\n\t\t\t\ttmp = parent.get_json.call(this, obj, opt, flat);\n\t\t\tif(tmp === false) { return false; }\n\t\t\tif($.isArray(tmp)) {\n\t\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\t\ttmp[i].type = tmp[i].id && m[tmp[i].id] && m[tmp[i].id].type ? m[tmp[i].id].type : \"default\";\n\t\t\t\t\tif(options && options.no_id) {\n\t\t\t\t\t\tdelete tmp[i].id;\n\t\t\t\t\t\tif(tmp[i].li_attr && tmp[i].li_attr.id) {\n\t\t\t\t\t\t\tdelete tmp[i].li_attr.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(tmp[i].a_attr && tmp[i].a_attr.id) {\n\t\t\t\t\t\t\tdelete tmp[i].a_attr.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttmp.type = tmp.id && m[tmp.id] && m[tmp.id].type ? m[tmp.id].type : \"default\";\n\t\t\t\tif(options && options.no_id) {\n\t\t\t\t\ttmp = this._delete_ids(tmp);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn tmp;\n\t\t};\n\t\tthis._delete_ids = function (tmp) {\n\t\t\tif($.isArray(tmp)) {\n\t\t\t\tfor(var i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\t\ttmp[i] = this._delete_ids(tmp[i]);\n\t\t\t\t}\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\tdelete tmp.id;\n\t\t\tif(tmp.li_attr && tmp.li_attr.id) {\n\t\t\t\tdelete tmp.li_attr.id;\n\t\t\t}\n\t\t\tif(tmp.a_attr && tmp.a_attr.id) {\n\t\t\t\tdelete tmp.a_attr.id;\n\t\t\t}\n\t\t\tif(tmp.children && $.isArray(tmp.children)) {\n\t\t\t\ttmp.children = this._delete_ids(tmp.children);\n\t\t\t}\n\t\t\treturn tmp;\n\t\t};\n\t\tthis.check = function (chk, obj, par, pos, more) {\n\t\t\tif(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\t\t\tpar = par && par.id ? par : this.get_node(par);\n\t\t\tvar m = obj && obj.id ? (more && more.origin ? more.origin : $.jstree.reference(obj.id)) : null, tmp, d, i, j;\n\t\t\tm = m && m._model && m._model.data ? m._model.data : null;\n\t\t\tswitch(chk) {\n\t\t\t\tcase \"create_node\":\n\t\t\t\tcase \"move_node\":\n\t\t\t\tcase \"copy_node\":\n\t\t\t\t\tif(chk !== 'move_node' || $.inArray(obj.id, par.children) === -1) {\n\t\t\t\t\t\ttmp = this.get_rules(par);\n\t\t\t\t\t\tif(tmp.max_children !== undefined && tmp.max_children !== -1 && tmp.max_children === par.children.length) {\n\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_01', 'reason' : 'max_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(tmp.valid_children !== undefined && tmp.valid_children !== -1 && $.inArray((obj.type || 'default'), tmp.valid_children) === -1) {\n\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_02', 'reason' : 'valid_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(m && obj.children_d && obj.parents) {\n\t\t\t\t\t\t\td = 0;\n\t\t\t\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\t\t\t\td = Math.max(d, m[obj.children_d[i]].parents.length);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\td = d - obj.parents.length + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(d <= 0 || d === undefined) { d = 1; }\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif(tmp.max_depth !== undefined && tmp.max_depth !== -1 && tmp.max_depth < d) {\n\t\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_03', 'reason' : 'max_depth prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpar = this.get_node(par.parent);\n\t\t\t\t\t\t\ttmp = this.get_rules(par);\n\t\t\t\t\t\t\td++;\n\t\t\t\t\t\t} while(par);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\t/**\n\t\t * used to retrieve the type settings object for a node\n\t\t * @name get_rules(obj)\n\t\t * @param {mixed} obj the node to find the rules for\n\t\t * @return {Object}\n\t\t * @plugin types\n\t\t */\n\t\tthis.get_rules = function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tvar tmp = this.get_type(obj, true);\n\t\t\tif(tmp.max_depth === undefined) { tmp.max_depth = -1; }\n\t\t\tif(tmp.max_children === undefined) { tmp.max_children = -1; }\n\t\t\tif(tmp.valid_children === undefined) { tmp.valid_children = -1; }\n\t\t\treturn tmp;\n\t\t};\n\t\t/**\n\t\t * used to retrieve the type string or settings object for a node\n\t\t * @name get_type(obj [, rules])\n\t\t * @param {mixed} obj the node to find the rules for\n\t\t * @param {Boolean} rules if set to `true` instead of a string the settings object will be returned\n\t\t * @return {String|Object}\n\t\t * @plugin types\n\t\t */\n\t\tthis.get_type = function (obj, rules) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn (!obj) ? false : ( rules ? $.extend({ 'type' : obj.type }, this.settings.types[obj.type]) : obj.type);\n\t\t};\n\t\t/**\n\t\t * used to change a node's type\n\t\t * @name set_type(obj, type)\n\t\t * @param {mixed} obj the node to change\n\t\t * @param {String} type the new type\n\t\t * @plugin types\n\t\t */\n\t\tthis.set_type = function (obj, type) {\n\t\t\tvar m = this._model.data, t, t1, t2, old_type, old_icon, k, d, a;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.set_type(obj[t1], type);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tt = this.settings.types;\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!t[type] || !obj) { return false; }\n\t\t\td = this.get_node(obj, true);\n\t\t\tif (d && d.length) {\n\t\t\t\ta = d.children('.jstree-anchor');\n\t\t\t}\n\t\t\told_type = obj.type;\n\t\t\told_icon = this.get_icon(obj);\n\t\t\tobj.type = type;\n\t\t\tif(old_icon === true || !t[old_type] || (t[old_type].icon !== undefined && old_icon === t[old_type].icon)) {\n\t\t\t\tthis.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true);\n\t\t\t}\n\n\t\t\t// remove old type props\n\t\t\tif(t[old_type] && t[old_type].li_attr !== undefined && typeof t[old_type].li_attr === 'object') {\n\t\t\t\tfor (k in t[old_type].li_attr) {\n\t\t\t\t\tif (t[old_type].li_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\tm[obj.id].li_attr['class'] = (m[obj.id].li_attr['class'] || '').replace(t[old_type].li_attr[k], '');\n\t\t\t\t\t\t\tif (d) { d.removeClass(t[old_type].li_attr[k]); }\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (m[obj.id].li_attr[k] === t[old_type].li_attr[k]) {\n\t\t\t\t\t\t\tm[obj.id].li_attr[k] = null;\n\t\t\t\t\t\t\tif (d) { d.removeAttr(k); }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(t[old_type] && t[old_type].a_attr !== undefined && typeof t[old_type].a_attr === 'object') {\n\t\t\t\tfor (k in t[old_type].a_attr) {\n\t\t\t\t\tif (t[old_type].a_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\tm[obj.id].a_attr['class'] = (m[obj.id].a_attr['class'] || '').replace(t[old_type].a_attr[k], '');\n\t\t\t\t\t\t\tif (a) { a.removeClass(t[old_type].a_attr[k]); }\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (m[obj.id].a_attr[k] === t[old_type].a_attr[k]) {\n\t\t\t\t\t\t\tif (k === 'href') {\n\t\t\t\t\t\t\t\tm[obj.id].a_attr[k] = '#';\n\t\t\t\t\t\t\t\tif (a) { a.attr('href', '#'); }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tdelete m[obj.id].a_attr[k];\n\t\t\t\t\t\t\t\tif (a) { a.removeAttr(k); }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// add new props\n\t\t\tif(t[type].li_attr !== undefined && typeof t[type].li_attr === 'object') {\n\t\t\t\tfor (k in t[type].li_attr) {\n\t\t\t\t\tif (t[type].li_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (m[obj.id].li_attr[k] === undefined) {\n\t\t\t\t\t\t\tm[obj.id].li_attr[k] = t[type].li_attr[k];\n\t\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t\tif (k === 'class') {\n\t\t\t\t\t\t\t\t\td.addClass(t[type].li_attr[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\td.attr(k, t[type].li_attr[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\tm[obj.id].li_attr['class'] = t[type].li_attr[k] + ' ' + m[obj.id].li_attr['class'];\n\t\t\t\t\t\t\tif (d) { d.addClass(t[type].li_attr[k]); }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(t[type].a_attr !== undefined && typeof t[type].a_attr === 'object') {\n\t\t\t\tfor (k in t[type].a_attr) {\n\t\t\t\t\tif (t[type].a_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (m[obj.id].a_attr[k] === undefined) {\n\t\t\t\t\t\t\tm[obj.id].a_attr[k] = t[type].a_attr[k];\n\t\t\t\t\t\t\tif (a) {\n\t\t\t\t\t\t\t\tif (k === 'class') {\n\t\t\t\t\t\t\t\t\ta.addClass(t[type].a_attr[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\ta.attr(k, t[type].a_attr[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'href' && m[obj.id].a_attr[k] === '#') {\n\t\t\t\t\t\t\tm[obj.id].a_attr['href'] = t[type].a_attr['href'];\n\t\t\t\t\t\t\tif (a) { a.attr('href', t[type].a_attr['href']); }\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\tm[obj.id].a_attr['class'] = t[type].a_attr['class'] + ' ' + m[obj.id].a_attr['class'];\n\t\t\t\t\t\t\tif (a) { a.addClass(t[type].a_attr[k]); }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\t};\n\t// include the types plugin by default\n\t// $.jstree.defaults.plugins.push(\"types\");\n\n\n/**\n * ### Unique plugin\n *\n * Enforces that no nodes with the same name can coexist as siblings.\n */\n\n\t/**\n\t * stores all defaults for the unique plugin\n\t * @name $.jstree.defaults.unique\n\t * @plugin unique\n\t */\n\t$.jstree.defaults.unique = {\n\t\t/**\n\t\t * Indicates if the comparison should be case sensitive. Default is `false`.\n\t\t * @name $.jstree.defaults.unique.case_sensitive\n\t\t * @plugin unique\n\t\t */\n\t\tcase_sensitive : false,\n\t\t/**\n\t\t * Indicates if white space should be trimmed before the comparison. Default is `false`.\n\t\t * @name $.jstree.defaults.unique.trim_whitespace\n\t\t * @plugin unique\n\t\t */\n\t\ttrim_whitespace : false,\n\t\t/**\n\t\t * A callback executed in the instance's scope when a new node is created and the name is already taken, the two arguments are the conflicting name and the counter. The default will produce results like `New node (2)`.\n\t\t * @name $.jstree.defaults.unique.duplicate\n\t\t * @plugin unique\n\t\t */\n\t\tduplicate : function (name, counter) {\n\t\t\treturn name + ' (' + counter + ')';\n\t\t}\n\t};\n\n\t$.jstree.plugins.unique = function (options, parent) {\n\t\tthis.check = function (chk, obj, par, pos, more) {\n\t\t\tif(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\t\t\tpar = par && par.id ? par : this.get_node(par);\n\t\t\tif(!par || !par.children) { return true; }\n\t\t\tvar n = chk === \"rename_node\" ? pos : obj.text,\n\t\t\t\tc = [],\n\t\t\t\ts = this.settings.unique.case_sensitive,\n\t\t\t\tw = this.settings.unique.trim_whitespace,\n\t\t\t\tm = this._model.data, i, j, t;\n\t\t\tfor(i = 0, j = par.children.length; i < j; i++) {\n\t\t\t\tt = m[par.children[i]].text;\n\t\t\t\tif (!s) {\n\t\t\t\t\tt = t.toLowerCase();\n\t\t\t\t}\n\t\t\t\tif (w) {\n\t\t\t\t\tt = t.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t\t\t\t}\n\t\t\t\tc.push(t);\n\t\t\t}\n\t\t\tif(!s) { n = n.toLowerCase(); }\n\t\t\tif (w) { n = n.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, ''); }\n\t\t\tswitch(chk) {\n\t\t\t\tcase \"delete_node\":\n\t\t\t\t\treturn true;\n\t\t\t\tcase \"rename_node\":\n\t\t\t\t\tt = obj.text || '';\n\t\t\t\t\tif (!s) {\n\t\t\t\t\t\tt = t.toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\tif (w) {\n\t\t\t\t\t\tt = t.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t\t\t\t\t}\n\t\t\t\t\ti = ($.inArray(n, c) === -1 || (obj.text && t === n));\n\t\t\t\t\tif(!i) {\n\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_01', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t}\n\t\t\t\t\treturn i;\n\t\t\t\tcase \"create_node\":\n\t\t\t\t\ti = ($.inArray(n, c) === -1);\n\t\t\t\t\tif(!i) {\n\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_04', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t}\n\t\t\t\t\treturn i;\n\t\t\t\tcase \"copy_node\":\n\t\t\t\t\ti = ($.inArray(n, c) === -1);\n\t\t\t\t\tif(!i) {\n\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_02', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t}\n\t\t\t\t\treturn i;\n\t\t\t\tcase \"move_node\":\n\t\t\t\t\ti = ( (obj.parent === par.id && (!more || !more.is_multi)) || $.inArray(n, c) === -1);\n\t\t\t\t\tif(!i) {\n\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_03', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t}\n\t\t\t\t\treturn i;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\tthis.create_node = function (par, node, pos, callback, is_loaded) {\n\t\t\tif(!node || node.text === undefined) {\n\t\t\t\tif(par === null) {\n\t\t\t\t\tpar = $.jstree.root;\n\t\t\t\t}\n\t\t\t\tpar = this.get_node(par);\n\t\t\t\tif(!par) {\n\t\t\t\t\treturn parent.create_node.call(this, par, node, pos, callback, is_loaded);\n\t\t\t\t}\n\t\t\t\tpos = pos === undefined ? \"last\" : pos;\n\t\t\t\tif(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {\n\t\t\t\t\treturn parent.create_node.call(this, par, node, pos, callback, is_loaded);\n\t\t\t\t}\n\t\t\t\tif(!node) { node = {}; }\n\t\t\t\tvar tmp, n, dpc, i, j, m = this._model.data, s = this.settings.unique.case_sensitive, w = this.settings.unique.trim_whitespace, cb = this.settings.unique.duplicate, t;\n\t\t\t\tn = tmp = this.get_string('New node');\n\t\t\t\tdpc = [];\n\t\t\t\tfor(i = 0, j = par.children.length; i < j; i++) {\n\t\t\t\t\tt = m[par.children[i]].text;\n\t\t\t\t\tif (!s) {\n\t\t\t\t\t\tt = t.toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\tif (w) {\n\t\t\t\t\t\tt = t.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t\t\t\t\t}\n\t\t\t\t\tdpc.push(t);\n\t\t\t\t}\n\t\t\t\ti = 1;\n\t\t\t\tt = n;\n\t\t\t\tif (!s) {\n\t\t\t\t\tt = t.toLowerCase();\n\t\t\t\t}\n\t\t\t\tif (w) {\n\t\t\t\t\tt = t.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t\t\t\t}\n\t\t\t\twhile($.inArray(t, dpc) !== -1) {\n\t\t\t\t\tn = cb.call(this, tmp, (++i)).toString();\n\t\t\t\t\tt = n;\n\t\t\t\t\tif (!s) {\n\t\t\t\t\t\tt = t.toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\tif (w) {\n\t\t\t\t\t\tt = t.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnode.text = n;\n\t\t\t}\n\t\t\treturn parent.create_node.call(this, par, node, pos, callback, is_loaded);\n\t\t};\n\t};\n\n\t// include the unique plugin by default\n\t// $.jstree.defaults.plugins.push(\"unique\");\n\n\n/**\n * ### Wholerow plugin\n *\n * Makes each node appear block level. Making selection easier. May cause slow down for large trees in old browsers.\n */\n\n\tvar div = document.createElement('DIV');\n\tdiv.setAttribute('unselectable','on');\n\tdiv.setAttribute('role','presentation');\n\tdiv.className = 'jstree-wholerow';\n\tdiv.innerHTML = '&#160;';\n\t$.jstree.plugins.wholerow = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\n\t\t\tthis.element\n\t\t\t\t.on('ready.jstree set_state.jstree', $.proxy(function () {\n\t\t\t\t\t\tthis.hide_dots();\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"init.jstree loading.jstree ready.jstree\", $.proxy(function () {\n\t\t\t\t\t\t//div.style.height = this._data.core.li_height + 'px';\n\t\t\t\t\t\tthis.get_container_ul().addClass('jstree-wholerow-ul');\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"deselect_all.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"changed.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');\n\t\t\t\t\t\tvar tmp = false, i, j;\n\t\t\t\t\t\tfor(i = 0, j = data.selected.length; i < j; i++) {\n\t\t\t\t\t\t\ttmp = this.get_node(data.selected[i], true);\n\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\ttmp.children('.jstree-wholerow').addClass('jstree-wholerow-clicked');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"open_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.get_node(data.node, true).find('.jstree-clicked').parent().children('.jstree-wholerow').addClass('jstree-wholerow-clicked');\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"hover_node.jstree dehover_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tif(e.type === \"hover_node\" && this.is_disabled(data.node)) { return; }\n\t\t\t\t\t\tthis.get_node(data.node, true).children('.jstree-wholerow')[e.type === \"hover_node\"?\"addClass\":\"removeClass\"]('jstree-wholerow-hovered');\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"contextmenu.jstree\", \".jstree-wholerow\", $.proxy(function (e) {\n\t\t\t\t\t\tif (this._data.contextmenu) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tvar tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY });\n\t\t\t\t\t\t\t$(e.currentTarget).closest(\".jstree-node\").children(\".jstree-anchor\").first().trigger(tmp);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t/*!\n\t\t\t\t.on(\"mousedown.jstree touchstart.jstree\", \".jstree-wholerow\", function (e) {\n\t\t\t\t\t\tif(e.target === e.currentTarget) {\n\t\t\t\t\t\t\tvar a = $(e.currentTarget).closest(\".jstree-node\").children(\".jstree-anchor\");\n\t\t\t\t\t\t\te.target = a[0];\n\t\t\t\t\t\t\ta.trigger(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t*/\n\t\t\t\t.on(\"click.jstree\", \".jstree-wholerow\", function (e) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\tvar tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });\n\t\t\t\t\t\t$(e.currentTarget).closest(\".jstree-node\").children(\".jstree-anchor\").first().trigger(tmp).focus();\n\t\t\t\t\t})\n\t\t\t\t.on(\"dblclick.jstree\", \".jstree-wholerow\", function (e) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\tvar tmp = $.Event('dblclick', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });\n\t\t\t\t\t\t$(e.currentTarget).closest(\".jstree-node\").children(\".jstree-anchor\").first().trigger(tmp).focus();\n\t\t\t\t\t})\n\t\t\t\t.on(\"click.jstree\", \".jstree-leaf > .jstree-ocl\", $.proxy(function (e) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\tvar tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });\n\t\t\t\t\t\t$(e.currentTarget).closest(\".jstree-node\").children(\".jstree-anchor\").first().trigger(tmp).focus();\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"mouseover.jstree\", \".jstree-wholerow, .jstree-icon\", $.proxy(function (e) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\tif(!this.is_disabled(e.currentTarget)) {\n\t\t\t\t\t\t\tthis.hover_node(e.currentTarget);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"mouseleave.jstree\", \".jstree-node\", $.proxy(function (e) {\n\t\t\t\t\t\tthis.dehover_node(e.currentTarget);\n\t\t\t\t\t}, this));\n\t\t};\n\t\tthis.teardown = function () {\n\t\t\tif(this.settings.wholerow) {\n\t\t\t\tthis.element.find(\".jstree-wholerow\").remove();\n\t\t\t}\n\t\t\tparent.teardown.call(this);\n\t\t};\n\t\tthis.redraw_node = function(obj, deep, callback, force_render) {\n\t\t\tobj = parent.redraw_node.apply(this, arguments);\n\t\t\tif(obj) {\n\t\t\t\tvar tmp = div.cloneNode(true);\n\t\t\t\t//tmp.style.height = this._data.core.li_height + 'px';\n\t\t\t\tif($.inArray(obj.id, this._data.core.selected) !== -1) { tmp.className += ' jstree-wholerow-clicked'; }\n\t\t\t\tif(this._data.core.focused && this._data.core.focused === obj.id) { tmp.className += ' jstree-wholerow-hovered'; }\n\t\t\t\tobj.insertBefore(tmp, obj.childNodes[0]);\n\t\t\t}\n\t\t\treturn obj;\n\t\t};\n\t};\n\t// include the wholerow plugin by default\n\t// $.jstree.defaults.plugins.push(\"wholerow\");\n\tif(window.customElements && Object && Object.create) {\n\t\tvar proto = Object.create(HTMLElement.prototype);\n\t\tproto.createdCallback = function () {\n\t\t\tvar c = { core : {}, plugins : [] }, i;\n\t\t\tfor(i in $.jstree.plugins) {\n\t\t\t\tif($.jstree.plugins.hasOwnProperty(i) && this.attributes[i]) {\n\t\t\t\t\tc.plugins.push(i);\n\t\t\t\t\tif(this.getAttribute(i) && JSON.parse(this.getAttribute(i))) {\n\t\t\t\t\t\tc[i] = JSON.parse(this.getAttribute(i));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor(i in $.jstree.defaults.core) {\n\t\t\t\tif($.jstree.defaults.core.hasOwnProperty(i) && this.attributes[i]) {\n\t\t\t\t\tc.core[i] = JSON.parse(this.getAttribute(i)) || this.getAttribute(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$(this).jstree(c);\n\t\t};\n\t\t// proto.attributeChangedCallback = function (name, previous, value) { };\n\t\ttry {\n\t\t\twindow.customElements.define(\"vakata-jstree\", function() {}, { prototype: proto });\n\t\t} catch (ignore) { }\n\t}\n\n}));"]}