Вход Регистрация
Файл: framework/thirdparty/jstree/jquery.jstree.js
Строк: 6425
<?php
/*
 * jsTree (custom version for SilverStripe: 1.0-rc3 + minor bugfixes)
 * http://jstree.com/
 *
 * Copyright (c) 2010 Ivan Bozhanov (vakata.com)
 *
 * Licensed same as jquery - under the terms of either the MIT License or the GPL Version 2 License
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * $Date: 2011-02-09 01:17:14 +0200 (ср, 09 февр 2011) $
 * $Revision: 236 $
 */

/*jslint browser: true, onevar: true, undef: true, bitwise: true, strict: true */
/*global window : false, clearInterval: false, clearTimeout: false, document: false, setInterval: false, setTimeout: false, jQuery: false, navigator: false, XSLTProcessor: false, DOMParser: false, XMLSerializer: false*/

"use strict";

// top wrapper to prevent multiple inclusion (is this OK?)
(function () { if(jQuery && jQuery.jstree) { return; }
    var 
is_ie6 falseis_ie7 falseis_ff2 false;

/* 
 * jsTree core
 */
(function ($) {
    
// Common functions not related to jsTree 
    // decided to move them to a `vakata` "namespace"
    
$.vakata = {};
    
// CSS related functions
    
$.vakata.css = {
        
get_css : function(rule_namedelete_flagsheet) {
            
rule_name rule_name.toLowerCase();
            var 
css_rules sheet.cssRules || sheet.rules,
                
0;
            do {
                if(
css_rules.length && css_rules.length 5) { return false; }
                if(
css_rules[j].selectorText && css_rules[j].selectorText.toLowerCase() == rule_name) {
                    if(
delete_flag === true) {
                        if(
sheet.removeRule) { sheet.removeRule(j); }
                        if(
sheet.deleteRule) { sheet.deleteRule(j); }
                        return 
true;
                    }
                    else { return 
css_rules[j]; }
                }
            }
            while (
css_rules[++j]);
            return 
false;
        },
        
add_css : function(rule_namesheet) {
            if($.
jstree.css.get_css(rule_namefalsesheet)) { return false; }
            if(
sheet.insertRule) { sheet.insertRule(rule_name ' { }'0); } else { sheet.addRule(rule_namenull0); }
            return $.
vakata.css.get_css(rule_name);
        },
        
remove_css : function(rule_namesheet) { 
            return $.
vakata.css.get_css(rule_nametruesheet); 
        },
        
add_sheet : function(opts) {
          
// MODIFIED ischommer/SilverStripe: add_sheet significantly slows down rendering,
          // we're loading all required CSS directly rather than adding it inline
          
      // var tmp = false, is_new = true;
      // if(opts.str) {
      //  if(opts.title) { tmp = $("style[id='" + opts.title + "-stylesheet']")[0]; }
      //  if(tmp) { is_new = false; }
      //  else {
      //    tmp = document.createElement("style");
      //    tmp.setAttribute('type',"text/css");
      //    if(opts.title) { tmp.setAttribute("id", opts.title + "-stylesheet"); }
      //  }
      //  if(tmp.styleSheet) {
      //    if(is_new) { 
      //      document.getElementsByTagName("head")[0].appendChild(tmp); 
      //      tmp.styleSheet.cssText = opts.str; 
      //    }
      //    else {
      //      tmp.styleSheet.cssText = tmp.styleSheet.cssText + " " + opts.str; 
      //    }
      //  }
      //  else {
      //    tmp.appendChild(document.createTextNode(opts.str));
      //    document.getElementsByTagName("head")[0].appendChild(tmp);
      //  }
      //  return tmp.sheet || tmp.styleSheet;
      // }
      // if(opts.url) {
      //  if(document.createStyleSheet) {
      //    try { tmp = document.createStyleSheet(opts.url); } catch (e) { }
      //  }
      //  else {
      //    tmp     = document.createElement('link');
      //    tmp.rel   = 'stylesheet';
      //    tmp.type  = 'text/css';
      //    tmp.media = "all";
      //    tmp.href  = opts.url;
      //    document.getElementsByTagName("head")[0].appendChild(tmp);
      //    return tmp.styleSheet;
      //  }
      // }
        
}
    };

    
// private variables 
    
var instances = [],            // instance array (used by $.jstree.reference/create/focused)
        
focused_instance = -1,    // the index in the instance array of the currently focused instance
        
plugins = {},            // list of included plugins
        
prepared_move = {};        // for the move_node function

    // jQuery plugin wrapper (thanks to jquery UI widget function)
    
$.fn.jstree = function (settings) {
        var 
isMethodCall = (typeof settings == 'string'), // is this a method call like $().jstree("open_node")
            
args = Array.prototype.slice.call(arguments1), 
            
returnValue this;

        
// if a method call execute the method on all selected instances
        
if(isMethodCall) {
            if(
settings.substring(01) == '_') { return returnValue; }
            
this.each(function() {
                var 
instance instances[$.data(this"jstree_instance_id")],
                    
methodValue = (instance && $.isFunction(instance[settings])) ? instance[settings].apply(instanceargs) : instance;
                    if(
typeof methodValue !== "undefined" && (settings.indexOf("is_") === || (methodValue !== true && methodValue !== false))) { returnValue methodValue; return false; }
            });
        }
        else {
            
this.each(function() {
                
// extend settings and allow for multiple hashes and $.data
                
var instance_id = $.data(this"jstree_instance_id"),
                    
= [],
                    
settings ? $.extend({}, truesettings) : {},
                    
= $(this), 
                    
false
                    
= [];
                
a.concat(args);
                if(
c.data("jstree")) { a.push(c.data("jstree")); }
                
a.length ? $.extend.apply(null, [trueb].concat(a)) : b;

                
// if an instance already exists, destroy it first
                
if(typeof instance_id !== "undefined" && instances[instance_id]) { instances[instance_id].destroy(); }
                
// push a new empty object to the instances array
                
instance_id parseInt(instances.push({}),10) - 1;
                
// store the jstree instance id to the container element
                
$.data(this"jstree_instance_id"instance_id);
                
// clean up all plugins
                
b.plugins = $.isArray(b.plugins) ? b.plugins : $.jstree.defaults.plugins.slice();
                
b.plugins.unshift("core");
                
// only unique plugins
                
b.plugins b.plugins.sort().join(",,").replace(/(,|^)([^,]+)(,,2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(",");

                
// extend defaults with passed data
                
= $.extend(true, {}, $.jstree.defaultsb);
                
s.plugins b.plugins;
                $.
each(plugins, function (ival) { 
                    if($.
inArray(is.plugins) === -1) { s[i] = nulldelete s[i]; } 
                    else { 
t.push(i); }
                });
                
s.plugins t;

                
// push the new object to the instances array (at the same time set the default classes to the container) and init
                
instances[instance_id] = new $.jstree._instance(instance_id, $(this).addClass("jstree jstree-" instance_id), s); 
                
// init all activated plugins for this instance
                
$.each(instances[instance_id]._get_settings().plugins, function (ival) { instances[instance_id].data[val] = {}; });
                $.
each(instances[instance_id]._get_settings().plugins, function (ival) { if(plugins[val]) { plugins[val].__init.apply(instances[instance_id]); } });
                
// initialize the instance
                
setTimeout(function() { if(instances[instance_id]) { instances[instance_id].init(); } }, 0);
            });
        }
        
// return the jquery selection (or if it was a method call that returned a value - the returned value)
        
return returnValue;
    };
    
// object to store exposed functions and objects
    
$.jstree = {
        
defaults : {
            
plugins : []
        },
        
_focused : function () { return instances[focused_instance] || null; },
        
_reference : function (needle) { 
            
// get by instance id
            
if(instances[needle]) { return instances[needle]; }
            
// get by DOM (if still no luck - return null
            
var = $(needle); 
            if(!
o.length && typeof needle === "string") { = $("#" needle); }
            if(!
o.length) { return null; }
            return 
instances[o.closest(".jstree").data("jstree_instance_id")] || null
        },
        
_instance : function (indexcontainersettings) { 
            
// for plugins to store data in
            
this.data = { core : {} };
            
this.get_settings    = function () { return $.extend(true, {}, settings); };
            
this._get_settings    = function () { return settings; };
            
this.get_index        = function () { return index; };
            
this.get_container    = function () { return container; };
            
this.get_container_ul = function () { return container.children("ul:eq(0)"); };
            
this._set_settings    = function (s) { 
                
settings = $.extend(true, {}, settingss);
            };
        },
        
_fn : { },
        
plugin : function (pnamepdata) {
            
pdata = $.extend({}, {
                
__init        : $.noop
                
__destroy    : $.noop,
                
_fn            : {},
                
defaults    false
            
}, pdata);
            
plugins[pname] = pdata;

            $.
jstree.defaults[pname] = pdata.defaults;
            $.
each(pdata._fn, function (ival) {
                
val.plugin        pname;
                
val.old            = $.jstree._fn[i];
                $.
jstree._fn[i] = function () {
                    var 
rslt,
                        
func val,
                        
args = Array.prototype.slice.call(arguments),
                        
evnt = new $.Event("before.jstree"),
                        
rlbk false;

                    if(
this.data.core.locked === true && !== "unlock" && !== "is_locked") { return; }

                    
// Check if function belongs to the included plugins of this instance
                    
do {
                        if(
func && func.plugin && $.inArray(func.pluginthis._get_settings().plugins) !== -1) { break; }
                        
func func.old;
                    } while(
func);
                    if(!
func) { return; }

                    
// context and function to trigger events, then finally call the function
                    
if(i.indexOf("_") === 0) {
                        
rslt func.apply(thisargs);
                    }
                    else {
                        
rslt this.get_container().triggerHandler(evnt, { "func" i"inst" this"args" args"plugin" func.plugin });
                        if(
rslt === false) { return; }
                        if(
typeof rslt !== "undefined") { args rslt; }

                        
rslt func.apply(
                            $.
extend({}, this, { 
                                
__callback : function (data) { 
                                    
this.get_container().triggerHandler'.jstree', { "inst" this"args" args"rslt" data"rlbk" rlbk });
                                },
                                
__rollback : function () { 
                                    
rlbk this.get_rollback();
                                    return 
rlbk;
                                },
                                
__call_old : function (replace_arguments) {
                                    return 
func.old.apply(this, (replace_arguments ? Array.prototype.slice.call(arguments1) : args ) );
                                }
                            }), 
args);
                    }

                    
// return the result
                    
return rslt;
                };
                $.
jstree._fn[i].old val.old;
                $.
jstree._fn[i].plugin pname;
            });
        },
        
rollback : function (rb) {
            if(
rb) {
                if(!$.
isArray(rb)) { rb = [ rb ]; }
                $.
each(rb, function (ival) {
                    
instances[val.i].set_rollback(val.hval.d);
                });
            }
        }
    };
    
// set the prototype for all instances
    
$.jstree._fn = $.jstree._instance.prototype = {};

    
// load the css when DOM is ready
    
$(function() {
        
// code is copied from jQuery ($.browser is deprecated + there is a bug in IE)
        
var navigator.userAgent.toLowerCase(),
            
= (u.match( /.+?(?:rv|it|ra|ie)[/: ]([d.]+)/ ) || [0,'0'])[1],
            
css_string '' 
                
'.jstree ul, .jstree li { display:block; margin:0 0 0 0; padding:0 0 0 0; list-style-type:none; } ' 
                
'.jstree li { display:block; min-height:18px; line-height:18px; white-space:nowrap; margin-left:18px; min-width:18px; } ' 
                
'.jstree-rtl li { margin-left:0; margin-right:18px; } ' 
                
'.jstree > ul > li { margin-left:0px; } ' 
                
'.jstree-rtl > ul > li { margin-right:0px; } ' 
                
'.jstree ins { display:inline-block; text-decoration:none; width:18px; height:18px; margin:0 0 0 0; padding:0; } ' 
                
'.jstree a { display:inline-block; line-height:16px; height:16px; color:black; white-space:nowrap; text-decoration:none; padding:1px 2px; margin:0; } ' 
                
'.jstree a:focus { outline: none; } ' 
                
'.jstree a > ins { height:16px; width:16px; } ' 
                
'.jstree a > .jstree-icon { margin-right:3px; } ' 
                
'.jstree-rtl a > .jstree-icon { margin-left:3px; margin-right:0; } ' 
                
'li.jstree-open > ul { display:block; } ' 
                
'li.jstree-closed > ul { display:none; } ';
        
// Correct IE 6 (does not support the > CSS selector)
        
if(/msie/.test(u) && parseInt(v10) == 6) { 
            
is_ie6 true;

            
// fix image flicker and lack of caching
            
try {
                
document.execCommand("BackgroundImageCache"falsetrue);
            } catch (
err) { }

            
css_string += '' 
                
'.jstree li { height:18px; margin-left:0; margin-right:0; } ' 
                
'.jstree li li { margin-left:18px; } ' 
                
'.jstree-rtl li li { margin-left:0px; margin-right:18px; } ' 
                
'li.jstree-open ul { display:block; } ' 
                
'li.jstree-closed ul { display:none !important; } ' 
                
'.jstree li a { display:inline; border-width:0 !important; padding:0px 2px !important; } ' 
                
'.jstree li a ins { height:16px; width:16px; margin-right:3px; } ' 
                
'.jstree-rtl li a ins { margin-right:0px; margin-left:3px; } ';
        }
        
// Correct IE 7 (shifts anchor nodes onhover)
        
if(/msie/.test(u) && parseInt(v10) == 7) { 
            
is_ie7 true;
            
css_string += '.jstree li a { border-width:0 !important; padding:0px 2px !important; } ';
        }
        
// correct ff2 lack of display:inline-block
        
if(!/compatible/.test(u) && /mozilla/.test(u) && parseFloat(v10) < 1.9) {
            
is_ff2 true;
            
css_string += '' 
                
'.jstree ins { display:-moz-inline-box; } ' 
                
'.jstree li { line-height:12px; } ' // WHY??
                
'.jstree a { display:-moz-inline-box; } ' 
                
'.jstree .jstree-no-icons .jstree-checkbox { display:-moz-inline-stack !important; } ';
                
/* this shouldn't be here as it is theme specific */
        
}
        
// the default stylesheet
        
$.vakata.css.add_sheet({ str css_stringtitle "jstree" });
    });

    
// core functions (open, close, create, update, delete)
    
$.jstree.plugin("core", {
        
__init : function () {
            
this.data.core.locked false;
            
this.data.core.to_open this.get_settings().core.initially_open;
            
this.data.core.to_load this.get_settings().core.initially_load;
        },
        
defaults : { 
            
html_titles    false,
            
animation    500,
            
initially_open : [],
            
initially_load : [],
            
open_parents true,
            
notify_plugins true,
            
rtl            false,
            
load_open    false,
            
strings        : {
                
loading        "Loading ...",
                
new_node    "New node",
                
multiple_selection "Multiple selection"
            
}
        },
        
_fn : { 
            
init    : function () { 
                
this.set_focus(); 
                if(
this._get_settings().core.rtl) {
                    
this.get_container().addClass("jstree-rtl").css("direction""rtl");
                }
                
this.get_container().html("<ul><li class='jstree-last jstree-leaf'><ins>&#160;</ins><a class='jstree-loading' href='#'><ins class='jstree-icon'>&#160;</ins>" this._get_string("loading") + "</a></li></ul>");
                
this.data.core.li_height this.get_container_ul().find("li.jstree-closed, li.jstree-leaf").eq(0).height() || 18;

                
this.get_container()
                    .
delegate("li > ins""click.jstree", $.proxy(function (event) {
                            var 
trgt = $(event.target);
                            
// if(trgt.is("ins") && event.pageY - trgt.offset().top < this.data.core.li_height) { this.toggle_node(trgt); }
                            
this.toggle_node(trgt);
                        }, 
this))
                    .
bind("mousedown.jstree", $.proxy(function () { 
                            
this.set_focus(); // This used to be setTimeout(set_focus,0) - why?
                        
}, this))
                    .
bind("dblclick.jstree", function (event) { 
                        var 
sel;
                        if(
document.selection && document.selection.empty) { document.selection.empty(); }
                        else {
                            if(
window.getSelection) {
                                
sel window.getSelection();
                                try { 
                                    
sel.removeAllRanges();
                                    
sel.collapse();
                                } catch (
err) { }
                            }
                        }
                    });
                if(
this._get_settings().core.notify_plugins) {
                    
this.get_container()
                        .
bind("load_node.jstree", $.proxy(function (edata) { 
                                var 
this._get_node(data.rslt.obj),
                                    
this;
                                if(
=== -1) { this.get_container_ul(); }
                                if(!
o.length) { return; }
                                
o.find("li").each(function () {
                                    var 
th = $(this);
                                    if(
th.data("jstree")) {
                                        $.
each(th.data("jstree"), function (pluginvalues) {
                                            if(
t.data[plugin] && $.isFunction(t["_" plugin "_notify"])) {
                                                
t["_" plugin "_notify"].call(tthvalues);
                                            }
                                        });
                                    }
                                });
                            }, 
this));
                }
                if(
this._get_settings().core.load_open) {
                    
this.get_container()
                        .
bind("load_node.jstree", $.proxy(function (edata) { 
                                var 
this._get_node(data.rslt.obj),
                                    
this;
                                if(
=== -1) { this.get_container_ul(); }
                                if(!
o.length) { return; }
                                
o.find("li.jstree-open:not(:has(ul))").each(function () {
                                    
t.load_node(this, $.noop, $.noop);
                                });
                            }, 
this));
                }
                
this.__callback();
                
this.load_node(-1, function () { this.loaded(); this.reload_nodes(); });
            },
            
destroy    : function () { 
                var 
i,
                    
this.get_index(),
                    
this._get_settings(),
                    
_this this;

                $.
each(s.plugins, function (ival) {
                    try { 
plugins[val].__destroy.apply(_this); } catch(err) { }
                });
                
this.__callback();
                
// set focus to another instance if this one is focused
                
if(this.is_focused()) { 
                    for(
i in instances) { 
                        if(
instances.hasOwnProperty(i) && != n) { 
                            
instances[i].set_focus(); 
                            break; 
                        } 
                    }
                }
                
// if no other instance found
                
if(=== focused_instance) { focused_instance = -1; }
                
// remove all traces of jstree in the DOM (only the ones set using jstree*) and cleans all events
                
this.get_container()
                    .
unbind(".jstree")
                    .
undelegate(".jstree")
                    .
removeData("jstree_instance_id")
                    .
find("[class^='jstree']")
                        .
andSelf()
                        .
attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); });
                $(
document)
                    .
unbind(".jstree-" n)
                    .
undelegate(".jstree-" n);
                
// remove the actual data
                
instances[n] = null;
                
delete instances[n];
            },

            
_core_notify : function (ndata) {
                if(
data.opened) {
                    
this.open_node(nfalsetrue);
                }
            },

            
lock : function () {
                
this.data.core.locked true;
                
this.get_container().children("ul").addClass("jstree-locked").css("opacity","0.7");
                
this.__callback({});
            },
            
unlock : function () {
                
this.data.core.locked false;
                
this.get_container().children("ul").removeClass("jstree-locked").css("opacity","1");
                
this.__callback({});
            },
            
is_locked : function () { return this.data.core.locked; },
            
save_opened : function () {
                var 
_this this;
                
this.data.core.to_open = [];
                
this.get_container_ul().find("li.jstree-open").each(function () { 
                    if(
this.id) { _this.data.core.to_open.push("#" this.id.toString().replace(/^#/,"").replace(/\//g,"/").replace(///g,"\/").replace(/\./g,".").replace(/./g,"\.").replace(/:/g,"\:")); }
                
});
                
this.__callback(_this.data.core.to_open);
            },
            
save_loaded : function () { },
            
reload_nodes : function (is_callback) {
                var 
_this this,
                    
done true,
                    
current = [],
                    
remaining = [];
                if(!
is_callback) { 
                    
this.data.core.reopen false
                    
this.data.core.refreshing true
                    
this.data.core.to_open = $.map($.makeArray(this.data.core.to_open), function (n) { return "#" n.toString().replace(/^#/,"").replace(/\//g,"/").replace(///g,"\/").replace(/\./g,".").replace(/./g,"\.").replace(/:/g,"\:"); });
                    
this.data.core.to_load = $.map($.makeArray(this.data.core.to_load), function (n) { return "#" n.toString().replace(/^#/,"").replace(/\//g,"/").replace(///g,"\/").replace(/\./g,".").replace(/./g,"\.").replace(/:/g,"\:"); });
                    
if(this.data.core.to_open.length) {
                        
this.data.core.to_load this.data.core.to_load.concat(this.data.core.to_open);
                    }
                }
                if(
this.data.core.to_load.length) {
                    $.
each(this.data.core.to_load, function (ival) {
                        if(
val == "#") { return true; }
                        if($(
val).length) { current.push(val); }
                        else { 
remaining.push(val); }
                    });
                    if(
current.length) {
                        
this.data.core.to_load remaining;
                        $.
each(current, function (ival) { 
                            if(!
_this._is_loaded(val)) {
                                
_this.load_node(val, function () { _this.reload_nodes(true); }, function () { _this.reload_nodes(true); });
                                
done false;
                            }
                        });
                    }
                }
                if(
this.data.core.to_open.length) {
                    $.
each(this.data.core.to_open, function (ival) {
                        
_this.open_node(valfalsetrue); 
                    });
                }
                if(
done) { 
                    
// TODO: find a more elegant approach to syncronizing returning requests
                    
if(this.data.core.reopen) { clearTimeout(this.data.core.reopen); }
                    
this.data.core.reopen setTimeout(function () { _this.__callback({}, _this); }, 50);
                    
this.data.core.refreshing false;
                    
this.reopen();
                }
            },
            
reopen : function () {
                var 
_this this;
                if(
this.data.core.to_open.length) {
                    $.
each(this.data.core.to_open, function (ival) {
                        
_this.open_node(valfalsetrue); 
                    });
                }
                
this.__callback({});
            },
            
refresh : function (objs_calle_call) {
                var 
_this this;
                
this.save_opened();
                if(!
obj) { obj = -1; }
                
obj this._get_node(obj);
                if(!
obj) { obj = -1; }
                if(
obj !== -1) { obj.children("UL").remove(); }
                else { 
this.get_container_ul().empty(); }
                
this.load_node(
                    
obj
                    function () { 
                        
_this.__callback({ "obj" obj}); 
                        
_this.reload_nodes(); 
                        if(
s_calls_call.call(this); 
                    },
                    
e_call
                
);
            },
            
// Dummy function to fire after the first load (so that there is a jstree.loaded event)
            
loaded    : function () { 
                
this.__callback(); 
            },
            
// deal with focus
            
set_focus    : function () { 
                if(
this.is_focused()) { return; }
                var 
= $.jstree._focused();
                if(
f) { f.unset_focus(); }

                
this.get_container().addClass("jstree-focused"); 
                
focused_instance this.get_index(); 
                
this.__callback();
            },
            
is_focused    : function () { 
                return 
focused_instance == this.get_index(); 
            },
            
unset_focus    : function () {
                if(
this.is_focused()) {
                    
this.get_container().removeClass("jstree-focused"); 
                    
focused_instance = -1
                }
                
this.__callback();
            },

            
// traverse
            
_get_node        : function (obj) { 
                var 
$obj = $(objthis.get_container()); 
                if(
$obj.is(".jstree") || obj == -1) { return -1; } 
                
$obj $obj.closest("li"this.get_container()); 
                return 
$obj.length $obj false
            },
            
_get_next        : function (objstrict) {
                
obj this._get_node(obj);
                if(
obj === -1) { return this.get_container().find("> ul > li:first-child"); }
                if(!
obj.length) { return false; }
                if(
strict) { return (obj.nextAll("li").size() > 0) ? obj.nextAll("li:eq(0)") : false; }

                if(
obj.hasClass("jstree-open")) { return obj.find("li:eq(0)"); }
                else if(
obj.nextAll("li").size() > 0) { return obj.nextAll("li:eq(0)"); }
                else { return 
obj.parentsUntil(".jstree","li").next("li").eq(0); }
            },
            
_get_prev        : function (objstrict) {
                
obj this._get_node(obj);
                if(
obj === -1) { return this.get_container().find("> ul > li:last-child"); }
                if(!
obj.length) { return false; }
                if(
strict) { return (obj.prevAll("li").length 0) ? obj.prevAll("li:eq(0)") : false; }

                if(
obj.prev("li").length) {
                    
obj obj.prev("li").eq(0);
                    while(
obj.hasClass("jstree-open")) { obj obj.children("ul:eq(0)").children("li:last"); }
                    return 
obj;
                }
                else { var 
obj.parentsUntil(".jstree","li:eq(0)"); return o.length false; }
            },
            
_get_parent        : function (obj) {
                
obj this._get_node(obj);
                if(
obj == -|| !obj.length) { return false; }
                var 
obj.parentsUntil(".jstree""li:eq(0)");
                return 
o.length : -1;
            },
            
_get_children    : function (obj) {
                
obj this._get_node(obj);
                if(
obj === -1) { return this.get_container().children("ul:eq(0)").children("li"); }
                if(!
obj.length) { return false; }
                return 
obj.children("ul:eq(0)").children("li");
            },
            
get_path        : function (objid_mode) {
                var 
= [],
                    
_this this;
                
obj this._get_node(obj);
                if(
obj === -|| !obj || !obj.length) { return false; }
                
obj.parentsUntil(".jstree""li").each(function () {
                    
p.pushid_mode this.id _this.get_text(this) );
                });
                
p.reverse();
                
p.pushid_mode obj.attr("id") : this.get_text(obj) );
                return 
p;
            },

            
// string functions
            
_get_string : function (key) {
                return 
this._get_settings().core.strings[key] || key;
            },

            
is_open        : function (obj) { obj this._get_node(obj); return obj && obj !== -&& obj.hasClass("jstree-open"); },
            
is_closed    : function (obj) { obj this._get_node(obj); return obj && obj !== -&& obj.hasClass("jstree-closed"); },
            
is_leaf        : function (obj) { obj this._get_node(obj); return obj && obj !== -&& obj.hasClass("jstree-leaf"); },
            
correct_state    : function (obj) {
                
obj this._get_node(obj);
                if(!
obj || obj === -1) { return false; }
                
obj.removeClass("jstree-closed jstree-open").addClass("jstree-leaf").children("ul").remove();
                
this.__callback({ "obj" obj });
            },
            
// open/close
            
open_node    : function (objcallbackskip_animation) {
                
obj this._get_node(obj);
                if(!
obj.length) { return false; }
                if(!
obj.hasClass("jstree-closed")) { if(callback) { callback.call(); } return false; }
                var 
skip_animation || is_ie6 this._get_settings().core.animation,
                    
this;
                if(!
this._is_loaded(obj)) {
                    
obj.children("a").addClass("jstree-loading");
                    
this.load_node(obj, function () { t.open_node(objcallbackskip_animation); }, callback);
                }
                else {
                    if(
this._get_settings().core.open_parents) {
                        
obj.parentsUntil(".jstree",".jstree-closed").each(function () {
                            
t.open_node(thisfalsetrue);
                        });
                    }
                    if(
s) { obj.children("ul").css("display","none"); }
                    
obj.removeClass("jstree-closed").addClass("jstree-open").children("a").removeClass("jstree-loading");
                    if(
s) { obj.children("ul").stop(truetrue).slideDown(s, function () { this.style.display ""t.after_open(obj); }); }
                    else { 
t.after_open(obj); }
                    
this.__callback({ "obj" obj });
                    if(
callback) { callback.call(); }
                }
            },
            
after_open    : function (obj) { this.__callback({ "obj" obj }); },
            
close_node    : function (objskip_animation) {
                
obj this._get_node(obj);
                var 
skip_animation || is_ie6 this._get_settings().core.animation,
                    
this;
                if(!
obj.length || !obj.hasClass("jstree-open")) { return false; }
                if(
s) { obj.children("ul").attr("style","display:block !important"); }
                
obj.removeClass("jstree-open").addClass("jstree-closed");
                if(
s) { obj.children("ul").stop(truetrue).slideUp(s, function () { this.style.display ""t.after_close(obj); }); }
                else { 
t.after_close(obj); }
                
this.__callback({ "obj" obj });
            },
            
after_close    : function (obj) { this.__callback({ "obj" obj }); },
            
toggle_node    : function (obj) {
                
obj this._get_node(obj);
                if(
obj.hasClass("jstree-closed")) { return this.open_node(obj); }
                if(
obj.hasClass("jstree-open")) { return this.close_node(obj); }
            },
            
open_all    : function (objdo_animationoriginal_obj) {
                
obj obj this._get_node(obj) : -1;
                if(!
obj || obj === -1) { obj this.get_container_ul(); }
                if(
original_obj) { 
                    
obj obj.find("li.jstree-closed");
                }
                else {
                    
original_obj obj;
                    if(
obj.is(".jstree-closed")) { obj obj.find("li.jstree-closed").andSelf(); }
                    else { 
obj obj.find("li.jstree-closed"); }
                }
                var 
_this this;
                
obj.each(function () { 
                    var 
__this this
                    if(!
_this._is_loaded(this)) { _this.open_node(this, function() { _this.open_all(__thisdo_animationoriginal_obj); }, !do_animation); }
                    else { 
_this.open_node(thisfalse, !do_animation); }
                });
                
// so that callback is fired AFTER all nodes are open
                
if(original_obj.find('li.jstree-closed').length === 0) { this.__callback({ "obj" original_obj }); }
            },
            
close_all    : function (objdo_animation) {
                var 
_this this;
                
obj obj this._get_node(obj) : this.get_container();
                if(!
obj || obj === -1) { obj this.get_container_ul(); }
                
obj.find("li.jstree-open").andSelf().each(function () { _this.close_node(this, !do_animation); });
                
this.__callback({ "obj" obj });
            },
            
clean_node    : function (obj) {
                
obj obj && obj != -? $(obj) : this.get_container_ul();
                
obj obj.is("li") ? obj.find("li").andSelf() : obj.find("li");
                
obj.removeClass("jstree-last")
                    .
filter("li:last-child").addClass("jstree-last").end()
                    .
filter(":has(li)")
                        .
not(".jstree-open").removeClass("jstree-leaf").addClass("jstree-closed");
                
obj.not(".jstree-open, .jstree-closed").addClass("jstree-leaf").children("ul").remove();
                
this.__callback({ "obj" obj });
            },
            
// rollback
            
get_rollback : function () { 
                
this.__callback();
                return { 
this.get_index(), this.get_container().children("ul").clone(true), this.data }; 
            },
            
set_rollback : function (htmldata) {
                
this.get_container().empty().append(html);
                
this.data data;
                
this.__callback();
            },
            
// Dummy functions to be overwritten by any datastore plugin included
            
load_node    : function (objs_calle_call) { this.__callback({ "obj" obj }); },
            
_is_loaded    : function (obj) { return true; },

            
// Basic operations: create
            
create_node    : function (objpositionjscallbackis_loaded) {
                
obj this._get_node(obj);
                
position typeof position === "undefined" "last" position;
                var 
= $("<li />"),
                    
this._get_settings().core,
                    
tmp;

                if(
obj !== -&& !obj.length) { return false; }
                if(!
is_loaded && !this._is_loaded(obj)) { this.load_node(obj, function () { this.create_node(objpositionjscallbacktrue); }); return false; }

                
this.__rollback();

                if(
typeof js === "string") { js = { "data" js }; }
                if(!
js) { js = {}; }
                if(
js.attr) { d.attr(js.attr); }
                if(
js.metadata) { d.data(js.metadata); }
                if(
js.state) { d.addClass("jstree-" js.state); }
                if(!
js.data) { js.data this._get_string("new_node"); }
                if(!$.
isArray(js.data)) { tmp js.datajs.data = []; js.data.push(tmp); }
                $.
each(js.data, function (im) {
                    
tmp = $("<a />");
                    if($.
isFunction(m)) { m.call(thisjs); }
                    if(
typeof m == "string") { tmp.attr('href','#')[ s.html_titles "html" "text" ](m); }
                    else {
                        if(!
m.attr) { m.attr = {}; }
                        if(!
m.attr.href) { m.attr.href '#'; }
                        
tmp.attr(m.attr)[ s.html_titles "html" "text" ](m.title);
                        if(
m.language) { tmp.addClass(m.language); }
                    }
                    
tmp.prepend("<ins class='jstree-icon'>&#160;</ins>");
                    if(!
m.icon && js.icon) { m.icon js.icon; }
                    if(
m.icon) { 
                        if(
m.icon.indexOf("/") === -1) { tmp.children("ins").addClass(m.icon); }
                        else { 
tmp.children("ins").css("background","url('" m.icon "') center center no-repeat"); }
                    }
                    
d.append(tmp);
                });
                
d.prepend("<ins class='jstree-icon'>&#160;</ins>");
                if(
obj === -1) {
                    
obj this.get_container();
                    if(
position === "before") { position "first"; }
                    if(
position === "after") { position "last"; }
                }
                switch(
position) {
                    case 
"before"obj.before(d); tmp this._get_parent(obj); break;
                    case 
"after" obj.after(d);  tmp this._get_parent(obj); break;
                    case 
"inside":
                    case 
"first" :
                        if(!
obj.children("ul").length) { obj.append("<ul />"); }
                        
obj.children("ul").prepend(d);
                        
tmp obj;
                        break;
                    case 
"last":
                        if(!
obj.children("ul").length) { obj.append("<ul />"); }
                        
obj.children("ul").append(d);
                        
tmp obj;
                        break;
                    default:
                        if(!
obj.children("ul").length) { obj.append("<ul />"); }
                        if(!
position) { position 0; }
                        
tmp obj.children("ul").children("li").eq(position);
                        if(
tmp.length) { tmp.before(d); }
                        else { 
obj.children("ul").append(d); }
                        
tmp obj;
                        break;
                }
                if(
tmp === -|| tmp.get(0) === this.get_container().get(0)) { tmp = -1; }
                
this.clean_node(tmp);
                
this.__callback({ "obj" d"parent" tmp });
                if(
callback) { callback.call(thisd); }
                return 
d;
            },
            
// Basic operations: rename (deal with text)
            
get_text    : function (obj) {
                
obj this._get_node(obj);
                if(!
obj.length) { return false; }
                var 
this._get_settings().core.html_titles;
                
obj obj.children("a:eq(0)");
                if(
s) {
                    
obj obj.clone();
                    
obj.children("INS").remove();
                    return 
obj.html();
                }
                else {
                    
obj obj.contents().filter(function() { return this.nodeType == 3; })[0];
                    return 
obj obj.nodeValue '';
                }
            },
            
set_text    : function (objval) {
                
obj this._get_node(obj);
                if(!
obj.length) { return false; }
                
obj obj.children("a:eq(0)");
                if(
this._get_settings().core.html_titles) {
                    var 
tmp obj.children("INS").clone();
                    
obj.html(val).prepend(tmp);
                    
this.__callback({ "obj" obj"name" val });
                    return 
true;
                }
                else {
                    
obj obj.contents().filter(function() { return this.nodeType == 3; })[0];
                    
this.__callback({ "obj" obj"name" val });
                    return (
obj.nodeValue val);
                }
            },
            
rename_node : function (objval) {
                
obj this._get_node(obj);
                
this.__rollback();
                if(
obj && obj.length && this.set_text.apply(this, Array.prototype.slice.call(arguments))) { this.__callback({ "obj" obj"name" val }); }
            },
            
// Basic operations: deleting nodes
            
delete_node : function (obj) {
                
obj this._get_node(obj);
                if(!
obj.length) { return false; }
                
this.__rollback();
                var 
this._get_parent(obj), prev = $([]), this;
                
obj.each(function () {
                    
prev prev.add(t._get_prev(this));
                });
                
obj obj.detach();
                if(
!== -&& p.find("> ul > li").length === 0) {
                    
p.removeClass("jstree-open jstree-closed").addClass("jstree-leaf");
                }
                
this.clean_node(p);
                
this.__callback({ "obj" obj"prev" prev"parent" });
                return 
obj;
            },
            
prepare_move : function (orposcbis_cb) {
                var 
= {};

                
p.ot = $.jstree._reference(o) || this;
                
p.p.ot._get_node(o);
                
p.=== - ? -this._get_node(r);
                
p.= (typeof pos === "undefined" || pos === false) ? "last" pos// TODO: move to a setting
                
if(!is_cb && prepared_move.&& prepared_move.o[0] === p.o[0] && prepared_move.r[0] === p.r[0] && prepared_move.=== p.p) {
                    
this.__callback(prepared_move);
                    if(
cb) { cb.call(thisprepared_move); }
                    return;
                }
                
p.ot = $.jstree._reference(p.o) || this;
                
p.rt = $.jstree._reference(p.r) || this// r === -1 ? p.ot : $.jstree._reference(p.r) || this
                
if(p.=== -|| !p.r) {
                    
p.cr = -1;
                    switch(
p.p) {
                        case 
"first":
                        case 
"before":
                        case 
"inside":
                            
p.cp 0
                            break;
                        case 
"after":
                        case 
"last":
                            
p.cp p.rt.get_container().find(" > ul > li").length
                            break;
                        default:
                            
p.cp p.p;
                            break;
                    }
                }
                else {
                    if(!/^(
before|after)$/.test(p.p) && !this._is_loaded(p.r)) {
                        return 
this.load_node(p.r, function () { this.prepare_move(orposcbtrue); });
                    }
                    switch(
p.p) {
                        case 
"before":
                            
p.cp p.r.index();
                            
p.cr p.rt._get_parent(p.r);
                            break;
                        case 
"after":
                            
p.cp p.r.index() + 1;
                            
p.cr p.rt._get_parent(p.r);
                            break;
                        case 
"inside":
                        case 
"first":
                            
p.cp 0;
                            
p.cr p.r;
                            break;
                        case 
"last":
                            
p.cp p.r.find(" > ul > li").length
                            
p.cr p.r;
                            break;
                        default: 
                            
p.cp p.p;
                            
p.cr p.r;
                            break;
                    }
                }
                
p.np p.cr == -p.rt.get_container() : p.cr;
                
p.op p.ot._get_parent(p.o);
                
p.cop p.o.index();
                if(
p.op === -1) { p.op p.ot p.ot.get_container() : this.get_container(); }
                if(!/^(
before|after)$/.test(p.p) && p.op && p.np && p.op[0] === p.np[0] && p.o.index() < p.cp) { p.cp++; }
                
//if(p.p === "before" && p.op && p.np && p.op[0] === p.np[0] && p.o.index() < p.cp) { p.cp--; }
                
p.or = p.np.find(" > ul > li:nth-child(" + (p.cp 1) + ")");
                
prepared_move p;
                
this.__callback(prepared_move);
                if(
cb) { cb.call(thisprepared_move); }
            },
            
check_move : function () {
                var 
obj prepared_moveret trueobj.=== -this.get_container() : obj.r;
                if(!
obj || !obj.|| obj.or[0] === obj.o[0]) { return false; }
                if(!
obj.cy) {
                    if(
obj.op && obj.np && obj.op[0] === obj.np[0] && obj.cp === obj.o.index()) { return false; }
                    
obj.o.each(function () { 
                        if(
r.parentsUntil(".jstree""li").andSelf().index(this) !== -1) { ret false; return false; }
                    });
                }
                return 
ret;
            },
            
move_node : function (objrefpositionis_copyis_preparedskip_check) {
                if(!
is_prepared) { 
                    return 
this.prepare_move(objrefposition, function (p) {
                        
this.move_node(pfalsefalseis_copytrueskip_check);
                    });
                }
                if(
is_copy) { 
                    
prepared_move.cy true;
                }
                if(!
skip_check && !this.check_move()) { return false; }

                
this.__rollback();
                var 
false;
                if(
is_copy) {
                    
obj.o.clone(true);
                    
o.find("*[id]").andSelf().each(function () {
                        if(
this.id) { this.id "copy_" this.id; }
                    });
                }
                else { 
obj.o; }

                if(
obj.or.length) { obj.or.before(o); }
                else { 
                    if(!
obj.np.children("ul").length) { $("<ul />").appendTo(obj.np); }
                    
obj.np.children("ul:eq(0)").append(o); 
                }

                try { 
                    
obj.ot.clean_node(obj.op);
                    
obj.rt.clean_node(obj.np);
                    if(!
obj.op.find("> ul > li").length) {
                        
obj.op.removeClass("jstree-open jstree-closed").addClass("jstree-leaf").children("ul").remove();
                    }
                } catch (
e) { }

                if(
is_copy) { 
                    
prepared_move.cy true;
                    
prepared_move.oc o
                }
                
this.__callback(prepared_move);
                return 
prepared_move;
            },
            
_get_move : function () { return prepared_move; }
        }
    });
})(
jQuery);
//*/

/* 
 * jsTree ui plugin
 * This plugins handles selecting/deselecting/hovering/dehovering nodes
 */
(function ($) {
    var 
scrollbar_widthe1e2;
    $(function() {
        if (/
msie/.test(navigator.userAgent.toLowerCase())) {
            
e1 = $('<textarea cols="10" rows="2"></textarea>').css({ position'absolute'top: -1000left}).appendTo('body');
            
e2 = $('<textarea cols="10" rows="2" style="overflow: hidden;"></textarea>').css({ position'absolute'top: -1000left}).appendTo('body');
            
scrollbar_width e1.width() - e2.width();
            
e1.add(e2).remove();
        } 
        else {
            
e1 = $('<div />').css({ width100height100overflow'auto'position'absolute'top: -1000left})
                    .
prependTo('body').append('<div />').find('div').css({ width'100%'height200 });
            
scrollbar_width 100 e1.width();
            
e1.parent().remove();
        }
    });
    $.
jstree.plugin("ui", {
        
__init : function () { 
            
this.data.ui.selected = $(); 
            
this.data.ui.last_selected false
            
this.data.ui.hovered null;
            
this.data.ui.to_select this.get_settings().ui.initially_select;

            
this.get_container()
                .
delegate("a""click.jstree", $.proxy(function (event) {
                        
event.preventDefault();
                        
event.currentTarget.blur();
                        if(!$(
event.currentTarget).hasClass("jstree-loading")) {
                            
this.select_node(event.currentTargettrueevent);
                        }
                    }, 
this))
                .
delegate("a""mouseenter.jstree", $.proxy(function (event) {
                        if(!$(
event.currentTarget).hasClass("jstree-loading")) {
                            
this.hover_node(event.target);
                        }
                    }, 
this))
                .
delegate("a""mouseleave.jstree", $.proxy(function (event) {
                        if(!$(
event.currentTarget).hasClass("jstree-loading")) {
                            
this.dehover_node(event.target);
                        }
                    }, 
this))
                .
bind("reopen.jstree", $.proxy(function () { 
                        
this.reselect();
                    }, 
this))
                .
bind("get_rollback.jstree", $.proxy(function () { 
                        
this.dehover_node();
                        
this.save_selected();
                    }, 
this))
                .
bind("set_rollback.jstree", $.proxy(function () { 
                        
this.reselect();
                    }, 
this))
                .
bind("close_node.jstree", $.proxy(function (eventdata) { 
                        var 
this._get_settings().ui,
                            
obj this._get_node(data.rslt.obj),
                            
clk = (obj && obj.length) ? obj.children("ul").find("a.jstree-clicked") : $(),
                            
_this this;
                        if(
s.selected_parent_close === false || !clk.length) { return; }
                        
clk.each(function () { 
                            
_this.deselect_node(this);
                            if(
s.selected_parent_close === "select_parent") { _this.select_node(obj); }
                        });
                    }, 
this))
                .
bind("delete_node.jstree", $.proxy(function (eventdata) { 
                        var 
this._get_settings().ui.select_prev_on_delete,
                            
obj this._get_node(data.rslt.obj),
                            
clk = (obj && obj.length) ? obj.find("a.jstree-clicked") : [],
                            
_this this;
                        
clk.each(function () { _this.deselect_node(this); });
                        if(
&& clk.length) { 
                            
data.rslt.prev.each(function () { 
                                if(
this.parentNode) { _this.select_node(this); return false/* if return false is removed all prev nodes will be selected */}
                            });
                        }
                    }, 
this))
                .
bind("move_node.jstree", $.proxy(function (eventdata) { 
                        if(
data.rslt.cy) { 
                            
data.rslt.oc.find("a.jstree-clicked").removeClass("jstree-clicked");
                        }
                    }, 
this));
        },
        
defaults : {
            
select_limit : -1// 0, 1, 2 ... or -1 for unlimited
            
select_multiple_modifier "ctrl"// on, or ctrl, shift, alt
            
select_range_modifier "shift",
            
selected_parent_close "select_parent"// false, "deselect", "select_parent"
            
selected_parent_open true,
            
select_prev_on_delete true,
            
disable_selecting_children false,
            
initially_select : []
        },
        
_fn : { 
            
_get_node : function (objallow_multiple) {
                if(
typeof obj === "undefined" || obj === null) { return allow_multiple this.data.ui.selected this.data.ui.last_selected; }
                var 
$obj = $(objthis.get_container()); 
                if(
$obj.is(".jstree") || obj == -1) { return -1; } 
                
$obj $obj.closest("li"this.get_container()); 
                return 
$obj.length $obj false
            },
            
_ui_notify : function (ndata) {
                if(
data.selected) {
                    
this.select_node(nfalse);
                }
            },
            
save_selected : function () {
                var 
_this this;
                
this.data.ui.to_select = [];
                
this.data.ui.selected.each(function () { if(this.id) { _this.data.ui.to_select.push("#" this.id.toString().replace(/^#/,"").replace(/\//g,"/").replace(///g,"\/").replace(/\./g,".").replace(/./g,"\.").replace(/:/g,"\:")); } });
                
this.__callback(this.data.ui.to_select);
            },
            
reselect : function () {
                var 
_this this,
                    
this.data.ui.to_select;
                
= $.map($.makeArray(s), function (n) { return "#" n.toString().replace(/^#/,"").replace(/\//g,"/").replace(///g,"\/").replace(/\./g,".").replace(/./g,"\.").replace(/:/g,"\:"); });
                // this.deselect_all(); WHY deselect, breaks plugin state notifier?
                
$.each(s, function (ival) { if(val && val !== "#") { _this.select_node(val); } });
                
this.data.ui.selected this.data.ui.selected.filter(function () { return this.parentNode; });
                
this.__callback();
            },
            
refresh : function (obj) {
                
this.save_selected();
                return 
this.__call_old();
            },
            
hover_node : function (obj) {
                
obj this._get_node(obj);
                if(!
obj.length) { return false; }
                
//if(this.data.ui.hovered && obj.get(0) === this.data.ui.hovered.get(0)) { return; }
                
if(!obj.hasClass("jstree-hovered")) { this.dehover_node(); }
                
this.data.ui.hovered obj.children("a").addClass("jstree-hovered").parent();
                
this._fix_scroll(obj);
                
this.__callback({ "obj" obj });
            },
            
dehover_node : function () {
                var 
obj this.data.ui.hoveredp;
                if(!
obj || !obj.length) { return false; }
                
obj.children("a").removeClass("jstree-hovered").parent();
                if(
this.data.ui.hovered[0] === p[0]) { this.data.ui.hovered null; }
                
this.__callback({ "obj" obj });
            },
            
select_node : function (objchecke) {
                
obj this._get_node(obj);
                if(
obj == -|| !obj || !obj.length) { return false; }
                var 
this._get_settings().ui,
                    
is_multiple = (s.select_multiple_modifier == "on" || (s.select_multiple_modifier !== false && && e[s.select_multiple_modifier "Key"])),
                    
is_range = (s.select_range_modifier !== false && && e[s.select_range_modifier "Key"] && this.data.ui.last_selected && this.data.ui.last_selected[0] !== obj[0] && this.data.ui.last_selected.parent()[0] === obj.parent()[0]),
                    
is_selected this.is_selected(obj),
                    
proceed true,
                    
this;
                if(
check) {
                    if(
s.disable_selecting_children && is_multiple && 
                        (
                            (
obj.parentsUntil(".jstree","li").children("a.jstree-clicked").length) ||
                            (
obj.children("ul").find("a.jstree-clicked:eq(0)").length)
                        )
                    ) {
                        return 
false;
                    }
                    
proceed false;
                    switch(!
0) {
                        case (
is_range):
                            
this.data.ui.last_selected.addClass("jstree-last-selected");
                            
obj objobj.index() < this.data.ui.last_selected.index() ? "nextUntil" "prevUntil" ](".jstree-last-selected").andSelf();
                            if(
s.select_limit == -|| obj.length s.select_limit) {
                                
this.data.ui.last_selected.removeClass("jstree-last-selected");
                                
this.data.ui.selected.each(function () {
                                    if(
this !== t.data.ui.last_selected[0]) { t.deselect_node(this); }
                                });
                                
is_selected false;
                                
proceed true;
                            }
                            else {
                                
proceed false;
                            }
                            break;
                        case (
is_selected && !is_multiple): 
                            
this.deselect_all();
                            
is_selected false;
                            
proceed true;
                            break;
                        case (!
is_selected && !is_multiple): 
                            if(
s.select_limit == -|| s.select_limit 0) {
                                
this.deselect_all();
                                
proceed true;
                            }
                            break;
                        case (
is_selected && is_multiple): 
                            
this.deselect_node(obj);
                            break;
                        case (!
is_selected && is_multiple): 
                            if(
s.select_limit == -|| this.data.ui.selected.length <= s.select_limit) { 
                                
proceed true;
                            }
                            break;
                    }
                }
                if(
proceed && !is_selected) {
                    if(!
is_range) { this.data.ui.last_selected obj; }
                    
obj.children("a").addClass("jstree-clicked");
                    if(
s.selected_parent_open) {
                        
obj.parents(".jstree-closed").each(function () { t.open_node(thisfalsetrue); });
                    }
                    
this.data.ui.selected this.data.ui.selected.add(obj);
                    
this._fix_scroll(obj.eq(0));
                    
this.__callback({ "obj" obj"e" });
                }
            },
            
_fix_scroll : function (obj) {
                var 
this.get_container()[0], t;
                if(
c.scrollHeight c.offsetHeight) {
                    
obj this._get_node(obj);
                    if(!
obj || obj === -|| !obj.length || !obj.is(":visible")) { return; }
                    
obj.offset().top this.get_container().offset().top;
                    if(
0) { 
                        
c.scrollTop c.scrollTop 1
                    }
                    if(
this.data.core.li_height + (c.scrollWidth c.offsetWidth scrollbar_width 0) > c.offsetHeight) { 
                        
c.scrollTop c.scrollTop + (c.offsetHeight this.data.core.li_height + (c.scrollWidth c.offsetWidth scrollbar_width 0)); 
                    }
                }
            },
            
deselect_node : function (obj) {
                
obj this._get_node(obj);
                if(!
obj.length) { return false; }
                if(
this.is_selected(obj)) {
                    
obj.children("a").removeClass("jstree-clicked");
                    
this.data.ui.selected this.data.ui.selected.not(obj);
                    if(
this.data.ui.last_selected.get(0) === obj.get(0)) { this.data.ui.last_selected this.data.ui.selected.eq(0); }
                    
this.__callback({ "obj" obj });
                }
            },
            
toggle_select : function (obj) {
                
obj this._get_node(obj);
                if(!
obj.length) { return false; }
                if(
this.is_selected(obj)) { this.deselect_node(obj); }
                else { 
this.select_node(obj); }
            },
            
is_selected : function (obj) { return this.data.ui.selected.index(this._get_node(obj)) >= 0; },
            
get_selected : function (context) { 
                return 
context ? $(context).find("a.jstree-clicked").parent() : this.data.ui.selected
            },
            
deselect_all : function (context) {
                var 
ret context ? $(context).find("a.jstree-clicked").parent() : this.get_container().find("a.jstree-clicked").parent();
                
ret.children("a.jstree-clicked").removeClass("jstree-clicked");
                
this.data.ui.selected = $([]);
                
this.data.ui.last_selected false;
                
this.__callback({ "obj" ret });
            }
        }
    });
    
// include the selection plugin by default
    
$.jstree.defaults.plugins.push("ui");
})(
jQuery);
//*/

/* 
 * jsTree CRRM plugin
 * Handles creating/renaming/removing/moving nodes by user interaction.
 */
(function ($) {
    $.
jstree.plugin("crrm", { 
        
__init : function () {
            
this.get_container()
                .
bind("move_node.jstree", $.proxy(function (edata) {
                    if(
this._get_settings().crrm.move.open_onmove) {
                        var 
this;
                        
data.rslt.np.parentsUntil(".jstree").andSelf().filter(".jstree-closed").each(function () {
                            
t.open_node(thisfalsetrue);
                        });
                    }
                }, 
this));
        },
        
defaults : {
            
input_width_limit 200,
            
move : {
                
always_copy            false// false, true or "multitree"
                
open_onmove            true,
                
default_position    "last",
                
check_move            : function (m) { return true; }
            }
        },
        
_fn : {
            
_show_input : function (objcallback) {
                
obj this._get_node(obj);
                var 
rtl this._get_settings().core.rtl,
                    
this._get_settings().crrm.input_width_limit,
                    
w1 obj.children("ins").width(),
                    
w2 obj.find("> a:visible > ins").width() * obj.find("> a:visible > ins").length,
                    
this.get_text(obj),
                    
h1 = $("<div />", { css : { "position" "absolute""top" "-200px""left" : (rtl "0px" "-1000px"), "visibility" "hidden" } }).appendTo("body"),
                    
h2 obj.css("position","relative").append(
                    $(
"<input />", { 
                        
"value" t,
                        
"class" "jstree-rename-input",
                        
// "size" : t.length,
                        
"css" : {
                            
"padding" "0",
                            
"border" "1px solid silver",
                            
"position" "absolute",
                            
"left"  : (rtl "auto" : (w1 w2 4) + "px"),
                            
"right" : (rtl ? (w1 w2 4) + "px" "auto"),
                            
"top" "0px",
                            
"height" : (this.data.core.li_height 2) + "px",
                            
"lineHeight" : (this.data.core.li_height 2) + "px",
                            
"width" "150px" // will be set a bit further down
                        
},
                        
"blur" : $.proxy(function () {
                            var 
obj.children(".jstree-rename-input"),
                                
i.val();
                            if(
=== "") { t; }
                            
h1.remove();
                            
i.remove(); // rollback purposes
                            
this.set_text(obj,t); // rollback purposes
                            
this.rename_node(objv);
                            
callback.call(thisobjvt);
                            
obj.css("position","");
                        }, 
this),
                        
"keyup" : function (event) {
                            var 
key event.keyCode || event.which;
                            if(
key == 27) { this.value tthis.blur(); return; }
                            else if(
key == 13) { this.blur(); return; }
                            else {
                                
h2.width(Math.min(h1.text("pW" this.value).width(),w));
                            }
                        },
                        
"keypress" : function(event) {
                            var 
key event.keyCode || event.which;
                            if(
key == 13) { return false; }
                        }
                    })
                ).
children(".jstree-rename-input"); 
                
this.set_text(obj"");
                
h1.css({
                        
fontFamily        h2.css('fontFamily')        || '',
                        
fontSize        h2.css('fontSize')        || '',
                        
fontWeight        h2.css('fontWeight')        || '',
                        
fontStyle        h2.css('fontStyle')        || '',
                        
fontStretch        h2.css('fontStretch')        || '',
                        
fontVariant        h2.css('fontVariant')        || '',
                        
letterSpacing    h2.css('letterSpacing')    || '',
                        
wordSpacing        h2.css('wordSpacing')        || ''
                
});
                
h2.width(Math.min(h1.text("pW" h2[0].value).width(),w))[0].select();
            },
            
rename : function (obj) {
                
obj this._get_node(obj);
                
this.__rollback();
                var 
this.__callback;
                
this._show_input(obj, function (objnew_nameold_name) { 
                    
f.call(this, { "obj" obj"new_name" new_name"old_name" old_name });
                });
            },
            
create : function (objpositionjscallbackskip_rename) {
                var 
t_this this;
                
obj this._get_node(obj);
                if(!
obj) { obj = -1; }
                
this.__rollback();
                
this.create_node(objpositionjs, function (t) {
                    var 
this._get_parent(t),
                        
pos = $(t).index();
                    if(
callback) { callback.call(thist); }
                    if(
p.length && p.hasClass("jstree-closed")) { this.open_node(pfalsetrue); }
                    if(!
skip_rename) { 
                        
this._show_input(t, function (objnew_nameold_name) { 
                            
_this.__callback({ "obj" obj"name" new_name"parent" p"position" pos });
                        });
                    }
                    else { 
_this.__callback({ "obj" t"name" this.get_text(t), "parent" p"position" pos }); }
                });
                return 
t;
            },
            
remove : function (obj) {
                
obj this._get_node(objtrue);
                var 
this._get_parent(obj), prev this._get_prev(obj);
                
this.__rollback();
                
obj this.delete_node(obj);
                if(
obj !== false) { this.__callback({ "obj" obj"prev" prev"parent" }); }
            },
            
check_move : function () {
                if(!
this.__call_old()) { return false; }
                var 
this._get_settings().crrm.move;
                if(!
s.check_move.call(thisthis._get_move())) { return false; }
                return 
true;
            },
            
move_node : function (objrefpositionis_copyis_preparedskip_check) {
                var 
this._get_settings().crrm.move;
                if(!
is_prepared) { 
                    if(
typeof position === "undefined") { position s.default_position; }
                    if(
position === "inside" && !s.default_position.match(/^(before|after)$/)) { position s.default_position; }
                    return 
this.__call_old(trueobjrefpositionis_copyfalseskip_check);
                }
                
// if the move is already prepared
                
if(s.always_copy === true || (s.always_copy === "multitree" && obj.rt.get_index() !== obj.ot.get_index() )) {
                    
is_copy true;
                }
                
this.__call_old(trueobjrefpositionis_copytrueskip_check);
            },

            
cut : function (obj) {
                
obj this._get_node(objtrue);
                if(!
obj || !obj.length) { return false; }
                
this.data.crrm.cp_nodes false;
                
this.data.crrm.ct_nodes obj;
                
this.__callback({ "obj" obj });
            },
            
copy : function (obj) {
                
obj this._get_node(objtrue);
                if(!
obj || !obj.length) { return false; }
                
this.data.crrm.ct_nodes false;
                
this.data.crrm.cp_nodes obj;
                
this.__callback({ "obj" obj });
            },
            
paste : function (obj) { 
                
obj this._get_node(obj);
                if(!
obj || !obj.length) { return false; }
                var 
nodes this.data.crrm.ct_nodes this.data.crrm.ct_nodes this.data.crrm.cp_nodes;
                if(!
this.data.crrm.ct_nodes && !this.data.crrm.cp_nodes) { return false; }
                if(
this.data.crrm.ct_nodes) { this.move_node(this.data.crrm.ct_nodesobj); this.data.crrm.ct_nodes false; }
                if(
this.data.crrm.cp_nodes) { this.move_node(this.data.crrm.cp_nodesobjfalsetrue); }
                
this.__callback({ "obj" obj"nodes" nodes });
            }
        }
    });
    
// include the crr plugin by default
    // $.jstree.defaults.plugins.push("crrm");
})(jQuery);
//*/

/* 
 * jsTree themes plugin
 * Handles loading and setting themes, as well as detecting path to themes, etc.
 */
(function ($) {
    var 
themes_loaded = [];
    
// this variable stores the path to the themes folder - if left as false - it will be autodetected
    
$.jstree._themes false;
    $.
jstree.plugin("themes", {
        
__init : function () { 
            
this.get_container()
                .
bind("init.jstree", $.proxy(function () {
                        var 
this._get_settings().themes;
                        
this.data.themes.dots s.dots
                        
this.data.themes.icons s.icons
                        
this.set_theme(s.themes.url);
                    }, 
this))
                .
bind("loaded.jstree", $.proxy(function () {
                        
// bound here too, as simple HTML tree's won't honor dots & icons otherwise
                        
if(!this.data.themes.dots) { this.hide_dots(); }
                        else { 
this.show_dots(); }
                        if(!
this.data.themes.icons) { this.hide_icons(); }
                        else { 
this.show_icons(); }
                    }, 
this));
        },
        
defaults : { 
            
theme "default"
            
url false,
            
dots true,
            
icons true
        
},
        
_fn : {
            
set_theme : function (theme_nametheme_url) {
                if(!
theme_name) { return false; }
                if(!
theme_url) { theme_url = $.jstree._themes theme_name '/style.css'; }
                if($.
inArray(theme_urlthemes_loaded) == -1) {
                    $.
vakata.css.add_sheet({ "url" theme_url });
                    
themes_loaded.push(theme_url);
                }
                if(
this.data.themes.theme != theme_name) {
                    
this.get_container().removeClass('jstree-' this.data.themes.theme);
                    
this.data.themes.theme theme_name;
                }
                
this.get_container().addClass('jstree-' theme_name);
                if(!
this.data.themes.dots) { this.hide_dots(); }
                else { 
this.show_dots(); }
                if(!
this.data.themes.icons) { this.hide_icons(); }
                else { 
this.show_icons(); }
                
this.__callback();
            },
            
get_theme    : function () { return this.data.themes.theme; },

            
show_dots    : function () { this.data.themes.dots truethis.get_container().children("ul").removeClass("jstree-no-dots"); },
            
hide_dots    : function () { this.data.themes.dots falsethis.get_container().children("ul").addClass("jstree-no-dots"); },
            
toggle_dots    : function () { if(this.data.themes.dots) { this.hide_dots(); } else { this.show_dots(); } },

            
show_icons    : function () { this.data.themes.icons truethis.get_container().children("ul").removeClass("jstree-no-icons"); },
            
hide_icons    : function () { this.data.themes.icons falsethis.get_container().children("ul").addClass("jstree-no-icons"); },
            
toggle_icons: function () { if(this.data.themes.icons) { this.hide_icons(); } else { this.show_icons(); } }
        }
    });
    
// autodetect themes path
    
$(function () {
        if($.
jstree._themes === false) {
            $(
"script").each(function () { 
                if(
this.src.toString().match(/jquery.jstree[^/]*?.js(?.*)?$/)) { 
                    $.
jstree._themes this.src.toString().replace(/jquery.jstree[^/]*?.js(?.*)?$/, "") + 'themes/'
                    return 
false
                }
            });
        }
        if($.
jstree._themes === false) { $.jstree._themes "themes/"; }
    });
    
// include the themes plugin by default
    
$.jstree.defaults.plugins.push("themes");
})(
jQuery);
//*/

/*
 * jsTree hotkeys plugin
 * Enables keyboard navigation for all tree instances
 * Depends on the jstree ui & jquery hotkeys plugins
 */
(function ($) {
    var 
bound = [];
    function 
exec(ievent) {
        var 
= $.jstree._focused(), tmp;
        if(
&& f.data && f.data.hotkeys && f.data.hotkeys.enabled) { 
            
tmp f._get_settings().hotkeys[i];
            if(
tmp) { return tmp.call(fevent); }
        }
    }
    $.
jstree.plugin("hotkeys", {
        
__init : function () {
            if(
typeof $.hotkeys === "undefined") { throw "jsTree hotkeys: jQuery hotkeys plugin not included."; }
            if(!
this.data.ui) { throw "jsTree hotkeys: jsTree UI plugin not included."; }
            $.
each(this._get_settings().hotkeys, function (iv) {
                if(
!== false && $.inArray(ibound) == -1) {
                    $(
document).bind("keydown"i, function (event) { return exec(ievent); });
                    
bound.push(i);
                }
            });
            
this.get_container()
                .
bind("lock.jstree", $.proxy(function () {
                        if(
this.data.hotkeys.enabled) { this.data.hotkeys.enabled falsethis.data.hotkeys.revert true; }
                    }, 
this))
                .
bind("unlock.jstree", $.proxy(function () {
                        if(
this.data.hotkeys.revert) { this.data.hotkeys.enabled true; }
                    }, 
this));
            
this.enable_hotkeys();
        },
        
defaults : {
            
"up" : function () { 
                var 
this.data.ui.hovered || this.data.ui.last_selected || -1;
                
this.hover_node(this._get_prev(o));
                return 
false
            },
            
"ctrl+up" : function () { 
                var 
this.data.ui.hovered || this.data.ui.last_selected || -1;
                
this.hover_node(this._get_prev(o));
                return 
false
            },
            
"shift+up" : function () { 
                var 
this.data.ui.hovered || this.data.ui.last_selected || -1;
                
this.hover_node(this._get_prev(o));
                return 
false
            },
            
"down" : function () { 
                var 
this.data.ui.hovered || this.data.ui.last_selected || -1;
                
this.hover_node(this._get_next(o));
                return 
false;
            },
            
"ctrl+down" : function () { 
                var 
this.data.ui.hovered || this.data.ui.last_selected || -1;
                
this.hover_node(this._get_next(o));
                return 
false;
            },
            
"shift+down" : function () { 
                var 
this.data.ui.hovered || this.data.ui.last_selected || -1;
                
this.hover_node(this._get_next(o));
                return 
false;
            },
            
"left" : function () { 
                var 
this.data.ui.hovered || this.data.ui.last_selected;
                if(
o) {
                    if(
o.hasClass("jstree-open")) { this.close_node(o); }
                    else { 
this.hover_node(this._get_prev(o)); }
                }
                return 
false;
            },
            
"ctrl+left" : function () { 
                var 
this.data.ui.hovered || this.data.ui.last_selected;
                if(
o) {
                    if(
o.hasClass("jstree-open")) { this.close_node(o); }
                    else { 
this.hover_node(this._get_prev(o)); }
                }
                return 
false;
            },
            
"shift+left" : function () { 
                var 
this.data.ui.hovered || this.data.ui.last_selected;
                if(
o) {
                    if(
o.hasClass("jstree-open")) { this.close_node(o); }
                    else { 
this.hover_node(this._get_prev(o)); }
                }
                return 
false;
            },
            
"right" : function () { 
                var 
this.data.ui.hovered || this.data.ui.last_selected;
                if(
&& o.length) {
                    if(
o.hasClass("jstree-closed")) { this.open_node(o); }
                    else { 
this.hover_node(this._get_next(o)); }
                }
                return 
false;
            },
            
"ctrl+right" : function () { 
                var 
this.data.ui.hovered || this.data.ui.last_selected;
                if(
&& o.length) {
                    if(
o.hasClass("jstree-closed")) { this.open_node(o); }
                    else { 
this.hover_node(this._get_next(o)); }
                }
                return 
false;
            },
            
"shift+right" : function () { 
                var 
this.data.ui.hovered || this.data.ui.last_selected;
                if(
&& o.length) {
                    if(
o.hasClass("jstree-closed")) { this.open_node(o); }
                    else { 
this.hover_node(this._get_next(o)); }
                }
                return 
false;
            },
            
"space" : function () { 
                if(
this.data.ui.hovered) { this.data.ui.hovered.children("a:eq(0)").click(); } 
                return 
false
            },
            
"ctrl+space" : function (event) { 
                
event.type "click";
                if(
this.data.ui.hovered) { this.data.ui.hovered.children("a:eq(0)").trigger(event); } 
                return 
false
            },
            
"shift+space" : function (event) { 
                
event.type "click";
                if(
this.data.ui.hovered) { this.data.ui.hovered.children("a:eq(0)").trigger(event); } 
                return 
false
            },
            
"f2" : function () { this.rename(this.data.ui.hovered || this.data.ui.last_selected); },
            
"del" : function () { this.remove(this.data.ui.hovered || this._get_node(null)); }
        },
        
_fn : {
            
enable_hotkeys : function () {
                
this.data.hotkeys.enabled true;
            },
            
disable_hotkeys : function () {
                
this.data.hotkeys.enabled false;
            }
        }
    });
})(
jQuery);
//*/

/* 
 * jsTree JSON plugin
 * The JSON data store. Datastores are build by overriding the `load_node` and `_is_loaded` functions.
 */
(function ($) {
    $.
jstree.plugin("json_data", {
        
__init : function() {
            var 
this._get_settings().json_data;
            if(
s.progressive_unload) {
                
this.get_container().bind("after_close.jstree", function (edata) {
                    
data.rslt.obj.children("ul").remove();
                });
            }
        },
        
defaults : { 
            
// `data` can be a function:
            //  * accepts two arguments - node being loaded and a callback to pass the result to
            //  * will be executed in the current tree's scope & ajax won't be supported
            
data false
            
ajax false,
            
correct_state true,
            
progressive_render false,
            
progressive_unload false
        
},
        
_fn : {
            
load_node : function (objs_calle_call) { var _this thisthis.load_node_json(obj, function () { _this.__callback({ "obj" _this._get_node(obj) }); s_call.call(this); }, e_call); },
            
_is_loaded : function (obj) { 
                var 
this._get_settings().json_data;
                
obj this._get_node(obj); 
                return 
obj == -|| !obj || (!s.ajax && !s.progressive_render && !$.isFunction(s.data)) || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").length 0;
            },
            
refresh : function (obj) {
                
obj this._get_node(obj);
                var 
this._get_settings().json_data;
                if(
obj && obj !== -&& s.progressive_unload && ($.isFunction(s.data) || !!s.ajax)) {
                    
obj.removeData("jstree_children");
                }
                return 
this.__call_old();
            },
            
load_node_json : function (objs_calle_call) {
                var 
this.get_settings().json_datad,
                    
error_func = function () {},
                    
success_func = function () {};
                
obj this._get_node(obj);

                if(
obj && obj !== -&& (s.progressive_render || s.progressive_unload) && !obj.is(".jstree-open, .jstree-leaf") && obj.children("ul").children("li").length === && obj.data("jstree_children")) {
                    
this._parse_json(obj.data("jstree_children"), obj);
                    if(
d) {
                        
obj.append(d);
                        if(!
s.progressive_unload) { obj.removeData("jstree_children"); }
                    }
                    
this.clean_node(obj);
                    if(
s_call) { s_call.call(this); }
                    return;
                }

                if(
obj && obj !== -1) {
                    if(
obj.data("jstree_is_loading")) { return; }
                    else { 
obj.data("jstree_is_loading",true); }
                }
                switch(!
0) {
                    case (!
s.data && !s.ajax): throw "Neither data nor ajax settings supplied.";
                    
// function option added here for easier model integration (also supporting async - see callback)
                    
case ($.isFunction(s.data)):
                        
s.data.call(thisobj, $.proxy(function (d) {
                            
this._parse_json(dobj);
                            if(!
d) { 
                                if(
obj === -|| !obj) {
                                    if(
s.correct_state) { this.get_container().children("ul").empty(); }
                                }
                                else {
                                    
obj.children("a.jstree-loading").removeClass("jstree-loading");
                                    
obj.removeData("jstree_is_loading");
                                    if(
s.correct_state) { this.correct_state(obj); }
                                }
                                if(
e_call) { e_call.call(this); }
                            }
                            else {
                                if(
obj === -|| !obj) { this.get_container().children("ul").empty().append(d.children()); }
                                else { 
obj.append(d).children("a.jstree-loading").removeClass("jstree-loading"); obj.removeData("jstree_is_loading"); }
                                
this.clean_node(obj);
                                if(
s_call) { s_call.call(this); }
                            }
                        }, 
this));
                        break;
                    case (!!
s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)):
                        if(!
obj || obj == -1) {
                            
this._parse_json(s.dataobj);
                            if(
d) {
                                
this.get_container().children("ul").empty().append(d.children());
                                
this.clean_node();
                            }
                            else { 
                                if(
s.correct_state) { this.get_container().children("ul").empty(); }
                            }
                        }
                        if(
s_call) { s_call.call(this); }
                        break;
                    case (!
s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1):
                        
error_func = function (xte) {
                            var 
ef this.get_settings().json_data.ajax.error
                            if(
ef) { ef.call(thisxte); }
                            if(
obj != -&& obj.length) {
                                
obj.children("a.jstree-loading").removeClass("jstree-loading");
                                
obj.removeData("jstree_is_loading");
                                if(
=== "success" && s.correct_state) { this.correct_state(obj); }
                            }
                            else {
                                if(
=== "success" && s.correct_state) { this.get_container().children("ul").empty(); }
                            }
                            if(
e_call) { e_call.call(this); }
                        };
                        
success_func = function (dtx) {
                            var 
sf this.get_settings().json_data.ajax.success
                            if(
sf) { sf.call(this,d,t,x) || d; }
                            if(
=== "" || (&& d.toString && d.toString().replace(/^[sn]+$/,"") === "") || (!$.isArray(d) && !$.isPlainObject(d))) {
                                return 
error_func.call(thisxt"");
                            }
                            
this._parse_json(dobj);
                            if(
d) {
                                if(
obj === -|| !obj) { this.get_container().children("ul").empty().append(d.children()); }
                                else { 
obj.append(d).children("a.jstree-loading").removeClass("jstree-loading"); obj.removeData("jstree_is_loading"); }
                                
this.clean_node(obj);
                                if(
s_call) { s_call.call(this); }
                            }
                            else {
                                if(
obj === -|| !obj) {
                                    if(
s.correct_state) { 
                                        
this.get_container().children("ul").empty(); 
                                        if(
s_call) { s_call.call(this); }
                                    }
                                }
                                else {
                                    
obj.children("a.jstree-loading").removeClass("jstree-loading");
                                    
obj.removeData("jstree_is_loading");
                                    if(
s.correct_state) { 
                                        
this.correct_state(obj);
                                        if(
s_call) { s_call.call(this); } 
                                    }
                                }
                            }
                        };
                        
s.ajax.context this;
                        
s.ajax.error error_func;
                        
s.ajax.success success_func;
                        if(!
s.ajax.dataType) { s.ajax.dataType "json"; }
                        if($.
isFunction(s.ajax.url)) { s.ajax.url s.ajax.url.call(thisobj); }
                        if($.
isFunction(s.ajax.data)) { s.ajax.data s.ajax.data.call(thisobj); }
                        $.
ajax(s.ajax);
                        break;
                }
            },
            
_parse_json : function (jsobjis_callback) {
                var 
false
                    
this._get_settings(),
                    
p.json_data,
                    
p.core.html_titles,
                    
tmpijul1ul2;

                if(!
js) { return d; }
                if(
s.progressive_unload && obj && obj !== -1) { 
                    
obj.data("jstree_children"d);
                }
                if($.
isArray(js)) {
                    
= $();
                    if(!
js.length) { return false; }
                    for(
0js.lengthji++) {
                        
tmp this._parse_json(js[i], objtrue);
                        if(
tmp.length) { d.add(tmp); }
                    }
                }
                else {
                    if(
typeof js == "string") { js = { data js }; }
                    if(!
js.data && js.data !== "") { return d; }
                    
= $("<li />");
                    if(
js.attr) { d.attr(js.attr); }
                    if(
js.metadata) { d.data(js.metadata); }
                    if(
js.state) { d.addClass("jstree-" js.state); }
                    if(!$.
isArray(js.data)) { tmp js.datajs.data = []; js.data.push(tmp); }
                    $.
each(js.data, function (im) {
                        
tmp = $("<a />");
                        if($.
isFunction(m)) { m.call(thisjs); }
                        if(
typeof m == "string") { tmp.attr('href','#')[ "html" "text" ](m); }
                        else {
                            if(!
m.attr) { m.attr = {}; }
                            if(!
m.attr.href) { m.attr.href '#'; }
                            
tmp.attr(m.attr)[ "html" "text" ](m.title);
                            if(
m.language) { tmp.addClass(m.language); }
                        }
                        
tmp.prepend("<ins class='jstree-icon'>&#160;</ins>");
                        if(!
m.icon && js.icon) { m.icon js.icon; }
                        if(
m.icon) { 
                            if(
m.icon.indexOf("/") === -1) { tmp.children("ins").addClass(m.icon); }
                            else { 
tmp.children("ins").css("background","url('" m.icon "') center center no-repeat"); }
                        }
                        
d.append(tmp);
                    });
                    
d.prepend("<ins class='jstree-icon'>&#160;</ins>");
                    if(
js.children) { 
                        if(
s.progressive_render && js.state !== "open") {
                            
d.addClass("jstree-closed").data("jstree_children"js.children);
                        }
                        else {
                            if(
s.progressive_unload) { d.data("jstree_children"js.children); }
                            if($.
isArray(js.children) && js.children.length) {
                                
tmp this._parse_json(js.childrenobjtrue);
                                if(
tmp.length) {
                                    
ul2 = $("<ul />");
                                    
ul2.append(tmp);
                                    
d.append(ul2);
                                }
                            }
                        }
                    }
                }
                if(!
is_callback) {
                    
ul1 = $("<ul />");
                    
ul1.append(d);
                    
ul1;
                }
                return 
d;
            },
            
get_json : function (objli_attra_attris_callback) {
                var 
result = [], 
                    
this._get_settings(), 
                    
_this this,
                    
tmp1tmp2liatlang;
                
obj this._get_node(obj);
                if(!
obj || obj === -1) { obj this.get_container().find("> ul > li"); }
                
li_attr = $.isArray(li_attr) ? li_attr : [ "id""class" ];
                if(!
is_callback && this.data.types) { li_attr.push(s.types.type_attr); }
                
a_attr = $.isArray(a_attr) ? a_attr : [ ];

                
obj.each(function () {
                    
li = $(this);
                    
tmp1 = { data : [] };
                    if(
li_attr.length) { tmp1.attr = { }; }
                    $.
each(li_attr, function (iv) { 
                        
tmp2 li.attr(v); 
                        if(
tmp2 && tmp2.length && tmp2.replace(/jstree[^ ]*/ig,'').length) {
                            
tmp1.attr[v] = (" " tmp2).replace(/ jstree[^ ]*/ig,'').replace(/s+$/ig," ").replace(/^ /,"").replace(/ $/,""); 
                        }
                    });
                    if(
li.hasClass("jstree-open")) { tmp1.state "open"; }
                    if(
li.hasClass("jstree-closed")) { tmp1.state "closed"; }
                    if(
li.data()) { tmp1.metadata li.data(); }
                    
li.children("a");
                    
a.each(function () {
                        
= $(this);
                        if(
                            
a_attr.length || 
                            $.
inArray("languages"s.plugins) !== -|| 
                            
t.children("ins").get(0).style.backgroundImage.length || 
                            (
t.children("ins").get(0).className && t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').length)
                        ) { 
                            
lang false;
                            if($.
inArray("languages"s.plugins) !== -&& $.isArray(s.languages) && s.languages.length) {
                                $.
each(s.languages, function (llv) {
                                    if(
t.hasClass(lv)) {
                                        
lang lv;
                                        return 
false;
                                    }
                                });
                            }
                            
tmp2 = { attr : { }, title _this.get_text(tlang) }; 
                            $.
each(a_attr, function (kz) {
                                
tmp2.attr[z] = (" " + (t.attr(z) || "")).replace(/ jstree[^ ]*/ig,'').replace(/s+$/ig," ").replace(/^ /,"").replace(/ $/,"");
                            });
                            if($.
inArray("languages"s.plugins) !== -&& $.isArray(s.languages) && s.languages.length) {
                                $.
each(s.languages, function (kz) {
                                    if(
t.hasClass(z)) { tmp2.language z; return true; }
                                });
                            }
                            if(
t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/^s+$/ig,"").length) {
                                
tmp2.icon t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/s+$/ig," ").replace(/^ /,"").replace(/ $/,"");
                            }
                            if(
t.children("ins").get(0).style.backgroundImage.length) {
                                
tmp2.icon t.children("ins").get(0).style.backgroundImage.replace("url(","").replace(")","");
                            }
                        }
                        else {
                            
tmp2 _this.get_text(t);
                        }
                        if(
a.length 1) { tmp1.data.push(tmp2); }
                        else { 
tmp1.data tmp2; }
                    });
                    
li li.find("> ul > li");
                    if(
li.length) { tmp1.children _this.get_json(lili_attra_attrtrue); }
                    
result.push(tmp1);
                });
                return 
result;
            }
        }
    });
})(
jQuery);
//*/

/* 
 * jsTree languages plugin
 * Adds support for multiple language versions in one tree
 * This basically allows for many titles coexisting in one node, but only one of them being visible at any given time
 * This is useful for maintaining the same structure in many languages (hence the name of the plugin)
 */
(function ($) {
    var 
sh false;
    $.
jstree.plugin("languages", {
        
__init : function () { this._load_css();  },
        
defaults : [],
        
_fn : {
            
set_lang : function (i) { 
                var 
langs this._get_settings().languages,
                    
st false,
                    
selector ".jstree-" this.get_index() + ' a';
                if(!$.
isArray(langs) || langs.length === 0) { return false; }
                if($.
inArray(i,langs) == -1) {
                    if(!!
langs[i]) { langs[i]; }
                    else { return 
false; }
                }
                if(
== this.data.languages.current_language) { return true; }
                
st = $.vakata.css.get_css(selector "." this.data.languages.current_languagefalsesh);
                if(
st !== false) { st.style.display "none"; }
                
st = $.vakata.css.get_css(selector "." ifalsesh);
                if(
st !== false) { st.style.display ""; }
                
this.data.languages.current_language i;
                
this.__callback(i);
                return 
true;
            },
            
get_lang : function () {
                return 
this.data.languages.current_language;
            },
            
_get_string : function (keylang) {
                var 
langs this._get_settings().languages,
                    
this._get_settings().core.strings;
                if($.
isArray(langs) && langs.length) {
                    
lang = (lang && $.inArray(lang,langs) != -1) ? lang this.data.languages.current_language;
                }
                if(
s[lang] && s[lang][key]) { return s[lang][key]; }
                if(
s[key]) { return s[key]; }
                return 
key;
            },
            
get_text : function (objlang) {
                
obj this._get_node(obj) || this.data.ui.last_selected;
                if(!
obj.size()) { return false; }
                var 
langs this._get_settings().languages,
                    
this._get_settings().core.html_titles;
                if($.
isArray(langs) && langs.length) {
                    
lang = (lang && $.inArray(lang,langs) != -1) ? lang this.data.languages.current_language;
                    
obj obj.children("a." lang);
                }
                else { 
obj obj.children("a:eq(0)"); }
                if(
s) {
                    
obj obj.clone();
                    
obj.children("INS").remove();
                    return 
obj.html();
                }
                else {
                    
obj obj.contents().filter(function() { return this.nodeType == 3; })[0];
                    return 
obj.nodeValue;
                }
            },
            
set_text : function (objvallang) {
                
obj this._get_node(obj) || this.data.ui.last_selected;
                if(!
obj.size()) { return false; }
                var 
langs this._get_settings().languages,
                    
this._get_settings().core.html_titles,
                    
tmp;
                if($.
isArray(langs) && langs.length) {
                    
lang = (lang && $.inArray(lang,langs) != -1) ? lang this.data.languages.current_language;
                    
obj obj.children("a." lang);
                }
                else { 
obj obj.children("a:eq(0)"); }
                if(
s) {
                    
tmp obj.children("INS").clone();
                    
obj.html(val).prepend(tmp);
                    
this.__callback({ "obj" obj"name" val"lang" lang });
                    return 
true;
                }
                else {
                    
obj obj.contents().filter(function() { return this.nodeType == 3; })[0];
                    
this.__callback({ "obj" obj"name" val"lang" lang });
                    return (
obj.nodeValue val);
                }
            },
            
_load_css : function () {
                var 
langs this._get_settings().languages,
                    
str "/* languages css */",
                    
selector ".jstree-" this.get_index() + ' a',
                    
ln;
                if($.
isArray(langs) && langs.length) {
                    
this.data.languages.current_language langs[0];
                    for(
ln 0ln langs.lengthln++) {
                        
str += selector "." langs[ln] + " {";
                        if(
langs[ln] != this.data.languages.current_language) { str += " display:none; "; }
                        
str += " } ";
                    }
                    
sh = $.vakata.css.add_sheet({ 'str' str'title' "jstree-languages" });
                }
            },
            
create_node : function (objpositionjscallback) {
                var 
this.__call_old(trueobjpositionjs, function (t) {
                    var 
langs this._get_settings().languages,
                        
t.children("a"),
                        
ln;
                    if($.
isArray(langs) && langs.length) {
                        for(
ln 0ln langs.lengthln++) {
                            if(!
a.is("." langs[ln])) {
                                
t.append(a.eq(0).clone().removeClass(langs.join(" ")).addClass(langs[ln]));
                            }
                        }
                        
a.not("." langs.join(", .")).remove();
                    }
                    if(
callback) { callback.call(thist); }
                });
                return 
t;
            }
        }
    });
})(
jQuery);
//*/

/*
 * jsTree cookies plugin
 * Stores the currently opened/selected nodes in a cookie and then restores them
 * Depends on the jquery.cookie plugin
 */
(function ($) {
    $.
jstree.plugin("cookies", {
        
__init : function () {
            if(
typeof $.cookie === "undefined") { throw "jsTree cookie: jQuery cookie plugin not included."; }

            var 
this._get_settings().cookies,
                
tmp;
            if(!!
s.save_loaded) {
                
tmp = $.cookie(s.save_loaded);
                if(
tmp && tmp.length) { this.data.core.to_load tmp.split(","); }
            }
            if(!!
s.save_opened) {
                
tmp = $.cookie(s.save_opened);
                if(
tmp && tmp.length) { this.data.core.to_open tmp.split(","); }
            }
            if(!!
s.save_selected) {
                
tmp = $.cookie(s.save_selected);
                if(
tmp && tmp.length && this.data.ui) { this.data.ui.to_select tmp.split(","); }
            }
            
this.get_container()
                .
one( ( this.data.ui "reselect" "reopen" ) + ".jstree", $.proxy(function () {
                    
this.get_container()
                        .
bind("open_node.jstree close_node.jstree select_node.jstree deselect_node.jstree", $.proxy(function (e) { 
                                if(
this._get_settings().cookies.auto_save) { this.save_cookie((e.handleObj.namespace + e.handleObj.type).replace("jstree","")); }
                            }, 
this));
                }, 
this));
        },
        
defaults : {
            
save_loaded        "jstree_load",
            
save_opened        "jstree_open",
            
save_selected    "jstree_select",
            
auto_save        true,
            
cookie_options    : {}
        },
        
_fn : {
            
save_cookie : function (c) {
                if(
this.data.core.refreshing) { return; }
                var 
this._get_settings().cookies;
                if(!
c) { // if called manually and not by event
                    
if(s.save_loaded) {
                        
this.save_loaded();
                        $.
cookie(s.save_loadedthis.data.core.to_load.join(","), s.cookie_options);
                    }
                    if(
s.save_opened) {
                        
this.save_opened();
                        $.
cookie(s.save_openedthis.data.core.to_open.join(","), s.cookie_options);
                    }
                    if(
s.save_selected && this.data.ui) {
                        
this.save_selected();
                        $.
cookie(s.save_selectedthis.data.ui.to_select.join(","), s.cookie_options);
                    }
                    return;
                }
                switch(
c) {
                    case 
"open_node":
                    case 
"close_node":
                        if(!!
s.save_opened) { 
                            
this.save_opened(); 
                            $.
cookie(s.save_openedthis.data.core.to_open.join(","), s.cookie_options); 
                        }
                        if(!!
s.save_loaded) { 
                            
this.save_loaded(); 
                            $.
cookie(s.save_loadedthis.data.core.to_load.join(","), s.cookie_options); 
                        }
                        break;
                    case 
"select_node":
                    case 
"deselect_node":
                        if(!!
s.save_selected && this.data.ui) { 
                            
this.save_selected(); 
                            $.
cookie(s.save_selectedthis.data.ui.to_select.join(","), s.cookie_options); 
                        }
                        break;
                }
            }
        }
    });
    
// include cookies by default
    // $.jstree.defaults.plugins.push("cookies");
})(jQuery);
//*/

/*
 * jsTree sort plugin
 * Sorts items alphabetically (or using any other function)
 */
(function ($) {
    $.
jstree.plugin("sort", {
        
__init : function () {
            
this.get_container()
                .
bind("load_node.jstree", $.proxy(function (edata) {
                        var 
obj this._get_node(data.rslt.obj);
                        
obj obj === -this.get_container().children("ul") : obj.children("ul");
                        
this.sort(obj);
                    }, 
this))
                .
bind("rename_node.jstree create_node.jstree create.jstree", $.proxy(function (edata) {
                        
this.sort(data.rslt.obj.parent());
                    }, 
this))
                .
bind("move_node.jstree", $.proxy(function (edata) {
                        var 
data.rslt.np == -this.get_container() : data.rslt.np;
                        
this.sort(m.children("ul"));
                    }, 
this));
        },
        
defaults : function (ab) { return this.get_text(a) > this.get_text(b) ? : -1; },
        
_fn : {
            
sort : function (obj) {
                var 
this._get_settings().sort,
                    
this;
                
obj.append($.makeArray(obj.children("li")).sort($.proxy(st)));
                
obj.find("> li > ul").each(function() { t.sort($(this)); });
                
this.clean_node(obj);
            }
        }
    });
})(
jQuery);
//*/

/*
 * jsTree DND plugin
 * Drag and drop plugin for moving/copying nodes
 */
(function ($) {
    var 
false,
        
false,
        
false,
        
ml false,
        
sli false,
        
sti false,
        
dir1 false,
        
dir2 false,
        
last_pos false;
    $.
vakata.dnd = {
        
is_down false,
        
is_drag false,
        
helper false,
        
scroll_spd 10,
        
init_x 0,
        
init_y 0,
        
threshold 5,
        
helper_left 5,
        
helper_top 10,
        
user_data : {},

        
drag_start : function (edatahtml) { 
            if($.
vakata.dnd.is_drag) { $.vakata.drag_stop({}); }
            try {
                
e.currentTarget.unselectable "on";
                
e.currentTarget.onselectstart = function() { return false; };
                if(
e.currentTarget.style) { e.currentTarget.style.MozUserSelect "none"; }
            } catch(
err) { }
            $.
vakata.dnd.init_x e.pageX;
            $.
vakata.dnd.init_y e.pageY;
            $.
vakata.dnd.user_data data;
            $.
vakata.dnd.is_down true;
            $.
vakata.dnd.helper = $("<div id='vakata-dragged' />").html(html); //.fadeTo(10,0.25);
            
$(document).bind("mousemove", $.vakata.dnd.drag);
            $(
document).bind("mouseup", $.vakata.dnd.drag_stop);
            return 
false;
        },
        
drag : function (e) { 
            if(!$.
vakata.dnd.is_down) { return; }
            if(!$.
vakata.dnd.is_drag) {
                if(
Math.abs(e.pageX - $.vakata.dnd.init_x) > || Math.abs(e.pageY - $.vakata.dnd.init_y) > 5) { 
                    $.
vakata.dnd.helper.appendTo("body");
                    $.
vakata.dnd.is_drag true;
                    $(
document).triggerHandler("drag_start.vakata", { "event" e"data" : $.vakata.dnd.user_data });
                }
                else { return; }
            }

            
// maybe use a scrolling parent element instead of document?
            
if(e.type === "mousemove") { // thought of adding scroll in order to move the helper, but mouse poisition is n/a
                
var = $(document), d.scrollTop(), d.scrollLeft();
                if(
e.pageY 20) { 
                    if(
sti && dir1 === "down") { clearInterval(sti); sti false; }
                    if(!
sti) { dir1 "up"sti setInterval(function () { $(document).scrollTop($(document).scrollTop() - $.vakata.dnd.scroll_spd); }, 150); }
                }
                else { 
                    if(
sti && dir1 === "up") { clearInterval(sti); sti false; }
                }
                if($(
window).height() - (e.pageY t) < 20) {
                    if(
sti && dir1 === "up") { clearInterval(sti); sti false; }
                    if(!
sti) { dir1 "down"sti setInterval(function () { $(document).scrollTop($(document).scrollTop() + $.vakata.dnd.scroll_spd); }, 150); }
                }
                else { 
                    if(
sti && dir1 === "down") { clearInterval(sti); sti false; }
                }

                if(
e.pageX 20) {
                    if(
sli && dir2 === "right") { clearInterval(sli); sli false; }
                    if(!
sli) { dir2 "left"sli setInterval(function () { $(document).scrollLeft($(document).scrollLeft() - $.vakata.dnd.scroll_spd); }, 150); }
                }
                else { 
                    if(
sli && dir2 === "left") { clearInterval(sli); sli false; }
                }
                if($(
window).width() - (e.pageX l) < 20) {
                    if(
sli && dir2 === "left") { clearInterval(sli); sli false; }
                    if(!
sli) { dir2 "right"sli setInterval(function () { $(document).scrollLeft($(document).scrollLeft() + $.vakata.dnd.scroll_spd); }, 150); }
                }
                else { 
                    if(
sli && dir2 === "right") { clearInterval(sli); sli false; }
                }
            }

            $.
vakata.dnd.helper.css({ left : (e.pageX + $.vakata.dnd.helper_left) + "px"top : (e.pageY + $.vakata.dnd.helper_top) + "px" });
            $(
document).triggerHandler("drag.vakata", { "event" e"data" : $.vakata.dnd.user_data });
        },
        
drag_stop : function (e) {
            if(
sli) { clearInterval(sli); }
            if(
sti) { clearInterval(sti); }
            $(
document).unbind("mousemove", $.vakata.dnd.drag);
            $(
document).unbind("mouseup", $.vakata.dnd.drag_stop);
            $(
document).triggerHandler("drag_stop.vakata", { "event" e"data" : $.vakata.dnd.user_data });
            $.
vakata.dnd.helper.remove();
            $.
vakata.dnd.init_x 0;
            $.
vakata.dnd.init_y 0;
            $.
vakata.dnd.user_data = {};
            $.
vakata.dnd.is_down false;
            $.
vakata.dnd.is_drag false;
        }
    };
    $(function() {
        var 
css_string '#vakata-dragged { display:block; margin:0 0 0 0; padding:4px 4px 4px 24px; position:absolute; top:-2000px; line-height:16px; z-index:10000; } ';
        $.
vakata.css.add_sheet({ str css_stringtitle "vakata" });
    });

    $.
jstree.plugin("dnd", {
        
__init : function () {
            
this.data.dnd = {
                
active false,
                
after false,
                
inside false,
                
before false,
                
off false,
                
prepared false,
                
0,
                
to1 false,
                
to2 false,
                
cof false,
                
cw false,
                
ch false,
                
i1 false,
                
i2 false,
                
mto false
            
};
            
this.get_container()
                .
bind("mouseenter.jstree", $.proxy(function (e) {
                        if($.
vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
                            if(
this.data.themes) {
                                
m.attr("class""jstree-" this.data.themes.theme); 
                                if(
ml) { ml.attr("class""jstree-" this.data.themes.theme); }
                                $.
vakata.dnd.helper.attr("class""jstree-dnd-helper jstree-" this.data.themes.theme);
                            }
                            
//if($(e.currentTarget).find("> ul > li").length === 0) {
                            
if(e.currentTarget === e.target && $.vakata.dnd.user_data.obj && $($.vakata.dnd.user_data.obj).length && $($.vakata.dnd.user_data.obj).parents(".jstree:eq(0)")[0] !== e.target) { // node should not be from the same tree
                                
var tr = $.jstree._reference(e.target), dc;
                                if(
tr.data.dnd.foreign) {
                                    
dc tr._get_settings().dnd.drag_check.call(this, { "o" o"r" tr.get_container(), is_root true });
                                    if(
dc === true || dc.inside === true || dc.before === true || dc.after === true) {
                                        $.
vakata.dnd.helper.children("ins").attr("class","jstree-ok");
                                    }
                                }
                                else {
                                    
tr.prepare_move(otr.get_container(), "last");
                                    if(
tr.check_move()) {
                                        $.
vakata.dnd.helper.children("ins").attr("class","jstree-ok");
                                    }
                                }
                            }
                        }
                    }, 
this))
                .
bind("mouseup.jstree", $.proxy(function (e) {
                        
//if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && $(e.currentTarget).find("> ul > li").length === 0) {
                        
if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && e.currentTarget === e.target && $.vakata.dnd.user_data.obj && $($.vakata.dnd.user_data.obj).length && $($.vakata.dnd.user_data.obj).parents(".jstree:eq(0)")[0] !== e.target) { // node should not be from the same tree
                            
var tr = $.jstree._reference(e.currentTarget), dc;
                            if(
tr.data.dnd.foreign) {
                                
dc tr._get_settings().dnd.drag_check.call(this, { "o" o"r" tr.get_container(), is_root true });
                                if(
dc === true || dc.inside === true || dc.before === true || dc.after === true) {
                                    
tr._get_settings().dnd.drag_finish.call(this, { "o" o"r" tr.get_container(), is_root true });
                                }
                            }
                            else {
                                
tr.move_node(otr.get_container(), "last"e[tr._get_settings().dnd.copy_modifier "Key"]);
                            }
                        }
                    }, 
this))
                .
bind("mouseleave.jstree", $.proxy(function (e) {
                        if(
e.relatedTarget && e.relatedTarget.id && e.relatedTarget.id === "jstree-marker-line") {
                            return 
false
                        }
                        if($.
vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
                            if(
this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
                            if(
this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
                            if(
this.data.dnd.to1) { clearTimeout(this.data.dnd.to1); }
                            if(
this.data.dnd.to2) { clearTimeout(this.data.dnd.to2); }
                            if($.
vakata.dnd.helper.children("ins").hasClass("jstree-ok")) {
                                $.
vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
                            }
                        }
                    }, 
this))
                .
bind("mousemove.jstree", $.proxy(function (e) {
                        if($.
vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
                            var 
cnt this.get_container()[0];

                            
// Horizontal scroll
                            
if(e.pageX 24 this.data.dnd.cof.left this.data.dnd.cw) {
                                if(
this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
                                
this.data.dnd.i1 setInterval($.proxy(function () { this.scrollLeft += $.vakata.dnd.scroll_spd; }, cnt), 100);
                            }
                            else if(
e.pageX 24 this.data.dnd.cof.left) {
                                if(
this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
                                
this.data.dnd.i1 setInterval($.proxy(function () { this.scrollLeft -= $.vakata.dnd.scroll_spd; }, cnt), 100);
                            }
                            else {
                                if(
this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
                            }

                            
// Vertical scroll
                            
if(e.pageY 24 this.data.dnd.cof.top this.data.dnd.ch) {
                                if(
this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
                                
this.data.dnd.i2 setInterval($.proxy(function () { this.scrollTop += $.vakata.dnd.scroll_spd; }, cnt), 100);
                            }
                            else if(
e.pageY 24 this.data.dnd.cof.top) {
                                if(
this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
                                
this.data.dnd.i2 setInterval($.proxy(function () { this.scrollTop -= $.vakata.dnd.scroll_spd; }, cnt), 100);
                            }
                            else {
                                if(
this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
                            }

                        }
                    }, 
this))
                .
bind("scroll.jstree", $.proxy(function (e) { 
                        if($.
vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && && ml) {
                            
m.hide();
                            
ml.hide();
                        }
                    }, 
this))
                .
delegate("a""mousedown.jstree", $.proxy(function (e) { 
                        if(
e.which === 1) {
                            
this.start_drag(e.currentTargete);
                            return 
false;
                        }
                    }, 
this))
                .
delegate("a""mouseenter.jstree", $.proxy(function (e) { 
                        if($.
vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
                            
this.dnd_enter(e.currentTarget);
                        }
                    }, 
this))
                .
delegate("a""mousemove.jstree", $.proxy(function (e) { 
                        if($.
vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
                            if(!
|| !r.length || r.children("a")[0] !== e.currentTarget) {
                                
this.dnd_enter(e.currentTarget);
                            }
                            if(
typeof this.data.dnd.off.top === "undefined") { this.data.dnd.off = $(e.target).offset(); }
                            
this.data.dnd.= (e.pageY - (this.data.dnd.off.top || 0)) % this.data.core.li_height;
                            if(
this.data.dnd.0) { this.data.dnd.+= this.data.core.li_height; }
                            
this.dnd_show();
                        }
                    }, 
this))
                .
delegate("a""mouseleave.jstree", $.proxy(function (e) { 
                        if($.
vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
                            if(
e.relatedTarget && e.relatedTarget.id && e.relatedTarget.id === "jstree-marker-line") {
                                return 
false
                            }
                                if(
m) { m.hide(); }
                                if(
ml) { ml.hide(); }
                            
/*
                            var ec = $(e.currentTarget).closest("li"), 
                                er = $(e.relatedTarget).closest("li");
                            if(er[0] !== ec.prev()[0] && er[0] !== ec.next()[0]) {
                                if(m) { m.hide(); }
                                if(ml) { ml.hide(); }
                            }
                            */
                            
this.data.dnd.mto setTimeout
                                (function (
t) { return function () { t.dnd_leave(e); }; })(this),
                            
0);
                        }
                    }, 
this))
                .
delegate("a, #jstree-marker-line""mouseup.jstree", $.proxy(function (e) {
                        if($.
vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
                            
this.dnd_finish(e);
                        }
                    }, 
this));

            $(
document)
                .
bind("drag_stop.vakata", $.proxy(function () {
                        if(
this.data.dnd.to1) { clearTimeout(this.data.dnd.to1); }
                        if(
this.data.dnd.to2) { clearTimeout(this.data.dnd.to2); }
                        if(
this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
                        if(
this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
                        
this.data.dnd.after        false;
                        
this.data.dnd.before    false;
                        
this.data.dnd.inside    false;
                        
this.data.dnd.off        false;
                        
this.data.dnd.prepared    false;
                        
this.data.dnd.w            false;
                        
this.data.dnd.to1        false;
                        
this.data.dnd.to2        false;
                        
this.data.dnd.i1        false;
                        
this.data.dnd.i2        false;
                        
this.data.dnd.active    false;
                        
this.data.dnd.foreign    false;
                        if(
m) { m.css({ "top" "-2000px" }); }
                        if(
ml) { ml.css({ "top" "-2000px" }); }
                    }, 
this))
                .
bind("drag_start.vakata", $.proxy(function (edata) {
                        if(
data.data.jstree) { 
                            var 
et = $(data.event.target);
                            if(
et.closest(".jstree").hasClass("jstree-" this.get_index())) {
                                
this.dnd_enter(et);
                            }
                        }
                    }, 
this));
                
/*
                .bind("keydown.jstree-" + this.get_index() + " keyup.jstree-" + this.get_index(), $.proxy(function(e) {
                        if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && !this.data.dnd.foreign) {
                            var h = $.vakata.dnd.helper.children("ins");
                            if(e[this._get_settings().dnd.copy_modifier + "Key"] && h.hasClass("jstree-ok")) {
                                h.parent().html(h.parent().html().replace(/ (Copy)$/, "") + " (Copy)");
                            } 
                            else {
                                h.parent().html(h.parent().html().replace(/ (Copy)$/, ""));
                            }
                        }
                    }, this)); */



            
var this._get_settings().dnd;
            if(
s.drag_target) {
                $(
document)
                    .
delegate(s.drag_target"mousedown.jstree-" this.get_index(), $.proxy(function (e) {
                        
e.target;
                        $.
vakata.dnd.drag_start(e, { jstree trueobj e.target }, "<ins class='jstree-icon'></ins>" + $(e.target).text() );
                        if(
this.data.themes) { 
                            if(
m) { m.attr("class""jstree-" this.data.themes.theme); }
                            if(
ml) { ml.attr("class""jstree-" this.data.themes.theme); }
                            $.
vakata.dnd.helper.attr("class""jstree-dnd-helper jstree-" this.data.themes.theme); 
                        }
                        $.
vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
                        var 
cnt this.get_container();
                        
this.data.dnd.cof cnt.offset();
                        
this.data.dnd.cw parseInt(cnt.width(),10);
                        
this.data.dnd.ch parseInt(cnt.height(),10);
                        
this.data.dnd.foreign true;
                        
e.preventDefault();
                    }, 
this));
            }
            if(
s.drop_target) {
                $(
document)
                    .
delegate(s.drop_target"mouseenter.jstree-" this.get_index(), $.proxy(function (e) {
                            if(
this.data.dnd.active && this._get_settings().dnd.drop_check.call(this, { "o" o"r" : $(e.target), "e" })) {
                                $.
vakata.dnd.helper.children("ins").attr("class","jstree-ok");
                            }
                        }, 
this))
                    .
delegate(s.drop_target"mouseleave.jstree-" this.get_index(), $.proxy(function (e) {
                            if(
this.data.dnd.active) {
                                $.
vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
                            }
                        }, 
this))
                    .
delegate(s.drop_target ", #jstree-marker-line""mouseup.jstree-" this.get_index(), $.proxy(function (e) {
                            if(
this.data.dnd.active && $.vakata.dnd.helper.children("ins").hasClass("jstree-ok")) {
                                
this._get_settings().dnd.drop_finish.call(this, { "o" o"r" : $(e.target), "e" });
                            }
                        }, 
this));
            }
        },
        
defaults : {
            
copy_modifier    "ctrl",
            
check_timeout    100,
            
open_timeout    500,
            
drop_target        ".jstree-drop",
            
drop_check        : function (data) { return true; },
            
drop_finish        : $.noop,
            
drag_target        ".jstree-draggable",
            
drag_finish        : $.noop,
            
drag_check        : function (data) { return { after falsebefore falseinside true }; }
        },
        
__destroy : function () {
            
// unbind global event handlers when last instance is removed
            // (no access to private 'instances' variable from here)
            
if($('.jstree').length <= 1) {
                $(
document)
                    .
unbind("drag_start.vakata")
                    .
unbind("drag_stop.vakata");    
            }
            
false;
        },
        
_fn : {
            
dnd_prepare : function () {
                if(!
|| !r.length) { return; }
                
this.data.dnd.off r.offset();
                if(
this._get_settings().core.rtl) {
                    
this.data.dnd.off.right this.data.dnd.off.left r.width();
                }
                if(
this.data.dnd.foreign) {
                    var 
this._get_settings().dnd.drag_check.call(this, { "o" o"r" });
                    
this.data.dnd.after a.after;
                    
this.data.dnd.before a.before;
                    
this.data.dnd.inside a.inside;
                    
this.data.dnd.prepared true;
                    return 
this.dnd_show();
                }
                
this.prepare_move(or"before");
                
this.data.dnd.before this.check_move();
                
this.prepare_move(or"after");
                
this.data.dnd.after this.check_move();
                if(
this._is_loaded(r)) {
                    
this.prepare_move(or"inside");
                    
this.data.dnd.inside this.check_move();
                }
                else {
                    
this.data.dnd.inside false;
                }
                
this.data.dnd.prepared true;
                return 
this.dnd_show();
            },
            
dnd_show : function () {
                if(!
this.data.dnd.prepared) { return; }
                var 
= ["before","inside","after"],
                    
false,
                    
rtl this._get_settings().core.rtl,
                    
pos;
                if(
this.data.dnd.this.data.core.li_height/3) { = ["before","inside","after"]; }
                else if(
this.data.dnd.<= this.data.core.li_height*2/3) {
                    
this.data.dnd.this.data.core.li_height/? ["inside","before","after"] : ["inside","after","before"];
                }
                else { 
= ["after","inside","before"]; }
                $.
each(o, $.proxy(function (ival) { 
                    if(
this.data.dnd[val]) {
                        $.
vakata.dnd.helper.children("ins").attr("class","jstree-ok");
                        
val;
                        return 
false;
                    }
                }, 
this));
                if(
=== false) { $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid"); }
                
                
pos rtl ? (this.data.dnd.off.right 18) : (this.data.dnd.off.left 10);
                switch(
r) {
                    case 
"before":
                        
m.css({ "left" pos "px""top" : (this.data.dnd.off.top 6) + "px" }).show();
                        if(
ml) { ml.css({ "left" : (pos 8) + "px""top" : (this.data.dnd.off.top 1) + "px" }).show(); }
                        break;
                    case 
"after":
                        
m.css({ "left" pos "px""top" : (this.data.dnd.off.top this.data.core.li_height 6) + "px" }).show();
                        if(
ml) { ml.css({ "left" : (pos 8) + "px""top" : (this.data.dnd.off.top this.data.core.li_height 1) + "px" }).show(); }
                        break;
                    case 
"inside":
                        
m.css({ "left" pos + ( rtl ? -4) + "px""top" : (this.data.dnd.off.top this.data.core.li_height/5) + "px" }).show();
                        if(
ml) { ml.hide(); }
                        break;
                    default:
                        
m.hide();
                        if(
ml) { ml.hide(); }
                        break;
                }
                
last_pos r;
                return 
r;
            },
            
dnd_open : function () {
                
this.data.dnd.to2 false;
                
this.open_node(r, $.proxy(this.dnd_prepare,this), true);
            },
            
dnd_finish : function (e) {
                if(
this.data.dnd.foreign) {
                    if(
this.data.dnd.after || this.data.dnd.before || this.data.dnd.inside) {
                        
this._get_settings().dnd.drag_finish.call(this, { "o" o"r" r"p" last_pos });
                    }
                }
                else {
                    
this.dnd_prepare();
                    
this.move_node(orlast_pose[this._get_settings().dnd.copy_modifier "Key"]);
                }
                
false;
                
false;
                
m.hide();
                if(
ml) { ml.hide(); }
            },
            
dnd_enter : function (obj) {
                if(
this.data.dnd.mto) { 
                    
clearTimeout(this.data.dnd.mto);
                    
this.data.dnd.mto false;
                }
                var 
this._get_settings().dnd;
                
this.data.dnd.prepared false;
                
this._get_node(obj);
                if(
s.check_timeout) { 
                    
// do the calculations after a minimal timeout (users tend to drag quickly to the desired location)
                    
if(this.data.dnd.to1) { clearTimeout(this.data.dnd.to1); }
                    
this.data.dnd.to1 setTimeout($.proxy(this.dnd_preparethis), s.check_timeout); 
                }
                else { 
                    
this.dnd_prepare(); 
                }
                if(
s.open_timeout) { 
                    if(
this.data.dnd.to2) { clearTimeout(this.data.dnd.to2); }
                    if(
&& r.length && r.hasClass("jstree-closed")) { 
                        
// if the node is closed - open it, then recalculate
                        
this.data.dnd.to2 setTimeout($.proxy(this.dnd_openthis), s.open_timeout);
                    }
                }
                else {
                    if(
&& r.length && r.hasClass("jstree-closed")) { 
                        
this.dnd_open();
                    }
                }
            },
            
dnd_leave : function (e) {
                
this.data.dnd.after        false;
                
this.data.dnd.before    false;
                
this.data.dnd.inside    false;
                $.
vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
                
m.hide();
                if(
ml) { ml.hide(); }
                if(
&& r[0] === e.target.parentNode) {
                    if(
this.data.dnd.to1) {
                        
clearTimeout(this.data.dnd.to1);
                        
this.data.dnd.to1 false;
                    }
                    if(
this.data.dnd.to2) {
                        
clearTimeout(this.data.dnd.to2);
                        
this.data.dnd.to2 false;
                    }
                }
            },
            
start_drag : function (obje) {
                
this._get_node(obj);
                if(
this.data.ui && this.is_selected(o)) { this._get_node(nulltrue); }
                var 
dt o.length this._get_string("multiple_selection") : this.get_text(o),
                    
cnt this.get_container();
                if(!
this._get_settings().core.html_titles) { dt dt.replace(/</ig,"&lt;").replace(/>/ig,"&gt;"); }
                $.
vakata.dnd.drag_start(e, { jstree trueobj }, "<ins class='jstree-icon'></ins>" dt );
                if(
this.data.themes) { 
                    if(
m) { m.attr("class""jstree-" this.data.themes.theme); }
                    if(
ml) { ml.attr("class""jstree-" this.data.themes.theme); }
                    $.
vakata.dnd.helper.attr("class""jstree-dnd-helper jstree-" this.data.themes.theme); 
                }
                
this.data.dnd.cof cnt.offset();
                
this.data.dnd.cw parseInt(cnt.width(),10);
                
this.data.dnd.ch parseInt(cnt.height(),10);
                
this.data.dnd.active true;
            }
        }
    });
    $(function() {
        var 
css_string '' 
            
'#vakata-dragged ins { display:block; text-decoration:none; width:16px; height:16px; margin:0 0 0 0; padding:0; position:absolute; top:4px; left:4px; ' 
            
' -moz-border-radius:4px; border-radius:4px; -webkit-border-radius:4px; ' +
            
'} ' 
            
'#vakata-dragged .jstree-ok { background:green; } ' 
            
'#vakata-dragged .jstree-invalid { background:red; } ' 
            
'#jstree-marker { padding:0; margin:0; font-size:12px; overflow:hidden; height:12px; width:8px; position:absolute; top:-30px; z-index:10001; background-repeat:no-repeat; display:none; background-color:transparent; text-shadow:1px 1px 1px white; color:black; line-height:10px; } ' 
            
'#jstree-marker-line { padding:0; margin:0; line-height:0%; font-size:1px; overflow:hidden; height:1px; width:100px; position:absolute; top:-30px; z-index:10000; background-repeat:no-repeat; display:none; background-color:#456c43; ' 
            
' cursor:pointer; border:1px solid #eeeeee; border-left:0; -moz-box-shadow: 0px 0px 2px #666; -webkit-box-shadow: 0px 0px 2px #666; box-shadow: 0px 0px 2px #666; ' 
            
' -moz-border-radius:1px; border-radius:1px; -webkit-border-radius:1px; ' +
            
'}' 
            
'';
        $.
vakata.css.add_sheet({ str css_stringtitle "jstree" });
        
= $("<div />").attr({ id "jstree-marker" }).hide().html("&raquo;")
            .
bind("mouseleave mouseenter", function (e) { 
                
m.hide();
                
ml.hide();
                
e.preventDefault(); 
                
e.stopImmediatePropagation(); 
                return 
false
            })
            .
appendTo("body");
        
ml = $("<div />").attr({ id "jstree-marker-line" }).hide()
            .
bind("mouseup", function (e) { 
                if(
&& r.length) { 
                    
r.children("a").trigger(e); 
                    
e.preventDefault(); 
                    
e.stopImmediatePropagation(); 
                    return 
false
                } 
            })
            .
bind("mouseleave", function (e) { 
                var 
rt = $(e.relatedTarget);
                if(
rt.is(".jstree") || rt.closest(".jstree").length === 0) {
                    if(
&& r.length) { 
                        
r.children("a").trigger(e); 
                        
m.hide();
                        
ml.hide();
                        
e.preventDefault(); 
                        
e.stopImmediatePropagation(); 
                        return 
false
                    }
                }
            })
            .
appendTo("body");
        $(
document).bind("drag_start.vakata", function (edata) {
            if(
data.data.jstree) { m.show(); if(ml) { ml.show(); } }
        });
        $(
document).bind("drag_stop.vakata", function (edata) {
            if(
data.data.jstree) { m.hide(); if(ml) { ml.hide(); } }
        });
    });
})(
jQuery);
//*/

/*
 * jsTree checkbox plugin
 * Inserts checkboxes in front of every node
 * Depends on the ui plugin
 * DOES NOT WORK NICELY WITH MULTITREE DRAG'N'DROP
 */
(function ($) {
    $.
jstree.plugin("checkbox", {
        
__init : function () {
            
this.data.checkbox.noui this._get_settings().checkbox.override_ui;
            if(
this.data.ui && this.data.checkbox.noui) {
                
this.select_node this.deselect_node this.deselect_all = $.noop;
                
this.get_selected this.get_checked;
            }

            
this.get_container()
                .
bind("open_node.jstree create_node.jstree clean_node.jstree refresh.jstree", $.proxy(function (edata) { 
                        
this._prepare_checkboxes(data.rslt.obj);
                    }, 
this))
                .
bind("loaded.jstree", $.proxy(function (e) {
                        
this._prepare_checkboxes();
                    }, 
this))
                .
delegate( (this.data.ui && this.data.checkbox.noui "a" "ins.jstree-checkbox") , "click.jstree", $.proxy(function (e) {
                        
e.preventDefault();
                        if(
this._get_node(e.target).hasClass("jstree-checked")) { this.uncheck_node(e.target); }
                        else { 
this.check_node(e.target); }
                        if(
this.data.ui && this.data.checkbox.noui) {
                            
this.save_selected();
                            if(
this.data.cookies) { this.save_cookie("select_node"); }
                        }
                        else {
                            
e.stopImmediatePropagation();
                            return 
false;
                        }
                    }, 
this));
        },
        
defaults : {
            
override_ui false,
            
two_state false,
            
real_checkboxes false,
            
checked_parent_open true,
            
real_checkboxes_names : function (n) { return [ ("check_" + (n[0].id || Math.ceil(Math.random() * 10000))) , 1]; }
        },
        
__destroy : function () {
            
this.get_container()
                .
find("input.jstree-real-checkbox").removeClass("jstree-real-checkbox").end()
                .
find("ins.jstree-checkbox").remove();
        },
        
_fn : {
            
_checkbox_notify : function (ndata) {
                if(
data.checked) {
                    
this.check_node(nfalse);
                }
            },
            
_prepare_checkboxes : function (obj) {
                
obj = !obj || obj == -this.get_container().find("> ul > li") : this._get_node(obj);
                if(
obj === false) { return; } // added for removing root nodes
                
var c_this thistts this._get_settings().checkbox.two_staterc this._get_settings().checkbox.real_checkboxesrcn this._get_settings().checkbox.real_checkboxes_names;
                
obj.each(function () {
                    
= $(this);
                    
t.is("li") && (t.hasClass("jstree-checked") || (rc && t.children(":checked").length)) ? "jstree-checked" "jstree-unchecked";
                    
t.find("li").andSelf().each(function () {
                        var 
$t = $(this), nm;
                        
$t.children("a" + (_this.data.languages "" ":eq(0)") ).not(":has(.jstree-checkbox)").prepend("<ins class='jstree-checkbox'>&#160;</ins>").parent().not(".jstree-checked, .jstree-unchecked").addClassts "jstree-unchecked" );
                        if(
rc) {
                            if(!
$t.children(":checkbox").length) {
                                
nm rcn.call(_this$t);
                                
$t.prepend("<input type='checkbox' class='jstree-real-checkbox' id='" nm[0] + "' name='" nm[0] + "' value='" nm[1] + "' />");
                            }
                            else {
                                
$t.children(":checkbox").addClass("jstree-real-checkbox");
                            }
                        }
                        if(!
ts) {
                            if(
=== "jstree-checked" || $t.hasClass("jstree-checked") || $t.children(':checked').length) {
                                
$t.find("li").andSelf().addClass("jstree-checked").children(":checkbox").prop("checked"true);
                            }
                        }
                        else {
                            if(
$t.hasClass("jstree-checked") || $t.children(':checked').length) {
                                
$t.addClass("jstree-checked").children(":checkbox").prop("checked"true);
                            }
                        }
                    });
                });
                if(!
ts) {
                    
obj.find(".jstree-checked").parent().parent().each(function () { _this._repair_state(this); }); 
                }
            },
            
change_state : function (objstate) {
                
obj this._get_node(obj);
                var 
coll falserc this._get_settings().checkbox.real_checkboxes;
                if(!
obj || obj === -1) { return false; }
                
state = (state === false || state === true) ? state obj.hasClass("jstree-checked");
                if(
this._get_settings().checkbox.two_state) {
                    if(
state) { 
                        
obj.removeClass("jstree-checked").addClass("jstree-unchecked"); 
                        if(
rc) { obj.children(":checkbox").prop("checked"false); }
                    }
                    else { 
                        
obj.removeClass("jstree-unchecked").addClass("jstree-checked"); 
                        if(
rc) { obj.children(":checkbox").prop("checked"true); }
                    }
                }
                else {
                    if(
state) { 
                        
coll obj.find("li").andSelf();
                        if(!
coll.filter(".jstree-checked, .jstree-undetermined").length) { return false; }
                        
coll.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked"); 
                        if(
rc) { coll.children(":checkbox").prop("checked"false); }
                    }
                    else { 
                        
coll obj.find("li").andSelf();
                        if(!
coll.filter(".jstree-unchecked, .jstree-undetermined").length) { return false; }
                        
coll.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked"); 
                        if(
rc) { coll.children(":checkbox").prop("checked"true); }
                        if(
this.data.ui) { this.data.ui.last_selected obj; }
                        
this.data.checkbox.last_selected obj;
                    }
                    
obj.parentsUntil(".jstree""li").each(function () {
                        var 
$this = $(this);
                        if(
state) {
                            if(
$this.children("ul").children("li.jstree-checked, li.jstree-undetermined").length) {
                                
$this.parentsUntil(".jstree""li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
                                if(
rc) { $this.parentsUntil(".jstree""li").andSelf().children(":checkbox").prop("checked"false); }
                                return 
false;
                            }
                            else {
                                
$this.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked");
                                if(
rc) { $this.children(":checkbox").prop("checked"false); }
                            }
                        }
                        else {
                            if(
$this.children("ul").children("li.jstree-unchecked, li.jstree-undetermined").length) {
                                
$this.parentsUntil(".jstree""li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
                                if(
rc) { $this.parentsUntil(".jstree""li").andSelf().children(":checkbox").prop("checked"false); }
                                return 
false;
                            }
                            else {
                                
$this.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked");
                                if(
rc) { $this.children(":checkbox").prop("checked"true); }
                            }
                        }
                    });
                }
                if(
this.data.ui && this.data.checkbox.noui) { this.data.ui.selected this.get_checked(); }
                
this.__callback(obj);
                return 
true;
            },
            
check_node : function (obj) {
                if(
this.change_state(objfalse)) { 
                    
obj this._get_node(obj);
                    if(
this._get_settings().checkbox.checked_parent_open) {
                        var 
this;
                        
obj.parents(".jstree-closed").each(function () { t.open_node(thisfalsetrue); });
                    }
                    
this.__callback({ "obj" obj }); 
                }
            },
            
uncheck_node : function (obj) {
                if(
this.change_state(objtrue)) { this.__callback({ "obj" this._get_node(obj) }); }
            },
            
check_all : function () {
                var 
_this this
                    
coll this._get_settings().checkbox.two_state this.get_container_ul().find("li") : this.get_container_ul().children("li");
                
coll.each(function () {
                    
_this.change_state(thisfalse);
                });
                
this.__callback();
            },
            
uncheck_all : function () {
                var 
_this this,
                    
coll this._get_settings().checkbox.two_state this.get_container_ul().find("li") : this.get_container_ul().children("li");
                
coll.each(function () {
                    
_this.change_state(thistrue);
                });
                
this.__callback();
            },

            
is_checked : function(obj) {
                
obj this._get_node(obj);
                return 
obj.length obj.is(".jstree-checked") : false;
            },
            
get_checked : function (objget_all) {
                
obj = !obj || obj === -this.get_container() : this._get_node(obj);
                return 
get_all || this._get_settings().checkbox.two_state obj.find(".jstree-checked") : obj.find("> ul > .jstree-checked, .jstree-undetermined > ul > .jstree-checked");
            },
            
get_unchecked : function (objget_all) { 
                
obj = !obj || obj === -this.get_container() : this._get_node(obj);
                return 
get_all || this._get_settings().checkbox.two_state obj.find(".jstree-unchecked") : obj.find("> ul > .jstree-unchecked, .jstree-undetermined > ul > .jstree-unchecked");
            },

            
show_checkboxes : function () { this.get_container().children("ul").removeClass("jstree-no-checkboxes"); },
            
hide_checkboxes : function () { this.get_container().children("ul").addClass("jstree-no-checkboxes"); },

            
_repair_state : function (obj) {
                
obj this._get_node(obj);
                if(!
obj.length) { return; }
                if(
this._get_settings().checkbox.two_state) {
                    
obj.find('li').andSelf().not('.jstree-checked').removeClass('jstree-undetermined').addClass('jstree-unchecked').children(':checkbox').prop('checked'true);
                    return;
                }
                var 
rc this._get_settings().checkbox.real_checkboxes,
                    
obj.find("> ul > .jstree-checked").length,
                    
obj.find("> ul > .jstree-undetermined").length,
                    
obj.find("> ul > li").length;
                if(
=== 0) { if(obj.hasClass("jstree-undetermined")) { this.change_state(objfalse); } }
                else if(
=== && === 0) { this.change_state(objtrue); }
                else if(
=== c) { this.change_state(objfalse); }
                else { 
                    
obj.parentsUntil(".jstree","li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
                    if(
rc) { obj.parentsUntil(".jstree""li").andSelf().children(":checkbox").prop("checked"false); }
                }
            },
            
reselect : function () {
                if(
this.data.ui && this.data.checkbox.noui) { 
                    var 
_this this,
                        
this.data.ui.to_select;
                    
= $.map($.makeArray(s), function (n) { return "#" n.toString().replace(/^#/,"").replace(/\//g,"/").replace(///g,"\/").replace(/\./g,".").replace(/./g,"\.").replace(/:/g,"\:"); });
                    
this.deselect_all();
                    $.
each(s, function (ival) { _this.check_node(val); });
                    
this.__callback();
                }
                else { 
                    
this.__call_old(); 
                }
            },
            
save_loaded : function () {
                var 
_this this;
                
this.data.core.to_load = [];
                
this.get_container_ul().find("li.jstree-closed.jstree-undetermined").each(function () {
                    if(
this.id) { _this.data.core.to_load.push("#" this.id); }
                });
            }
        }
    });
    $(function() {
        var 
css_string '.jstree .jstree-real-checkbox { display:none; } ';
        $.
vakata.css.add_sheet({ str css_stringtitle "jstree" });
    });
})(
jQuery);
//*/

/* 
 * jsTree XML plugin
 * The XML data store. Datastores are build by overriding the `load_node` and `_is_loaded` functions.
 */
(function ($) {
    $.
vakata.xslt = function (xmlxslcallback) {
        var 
rs ""xmxsprocessorsupport;
        
// TODO: IE9 no XSLTProcessor, no document.recalc
        
if(document.recalc) {
            
xm document.createElement('xml');
            
xs document.createElement('xml');
            
xm.innerHTML xml;
            
xs.innerHTML xsl;
            $(
"body").append(xm).append(xs);
            
setTimeout( (function (xmxscallback) {
                return function () {
                    
callback.call(nullxm.transformNode(xs.XMLDocument));
                    
setTimeout( (function (xmxs) { return function () { $(xm).remove(); $(xs).remove(); }; })(xmxs), 200);
                };
            })(
xmxscallback), 100);
            return 
true;
        }
        if(
typeof window.DOMParser !== "undefined" && typeof window.XMLHttpRequest !== "undefined" && typeof window.XSLTProcessor === "undefined") {
            
xml = new DOMParser().parseFromString(xml"text/xml");
            
xsl = new DOMParser().parseFromString(xsl"text/xml");
            
// alert(xml.transformNode());
            // callback.call(null, new XMLSerializer().serializeToString(rs));
            
        
}
        if(
typeof window.DOMParser !== "undefined" && typeof window.XMLHttpRequest !== "undefined" && typeof window.XSLTProcessor !== "undefined") {
            
processor = new XSLTProcessor();
            
support = $.isFunction(processor.transformDocument) ? (typeof window.XMLSerializer !== "undefined") : true;
            if(!
support) { return false; }
            
xml = new DOMParser().parseFromString(xml"text/xml");
            
xsl = new DOMParser().parseFromString(xsl"text/xml");
            if($.
isFunction(processor.transformDocument)) {
                
rs document.implementation.createDocument(""""null);
                
processor.transformDocument(xmlxslrsnull);
                
callback.call(null, new XMLSerializer().serializeToString(rs));
                return 
true;
            }
            else {
                
processor.importStylesheet(xsl);
                
rs processor.transformToFragment(xmldocument);
                
callback.call(null, $("<div />").append(rs).html());
                return 
true;
            }
        }
        return 
false;
    };
    var 
xsl = {
        
'nest' '<' '?xml version="1.0" encoding="utf-8" ?>' 
            
'<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >' 
            
'<xsl:output method="html" encoding="utf-8" omit-xml-declaration="yes" standalone="no" indent="no" media-type="text/html" />' 
            
'<xsl:template match="/">' 
            
'    <xsl:call-template name="nodes">' 
            
'        <xsl:with-param name="node" select="/root" />' 
            
'    </xsl:call-template>' 
            
'</xsl:template>' 
            
'<xsl:template name="nodes">' 
            
'    <xsl:param name="node" />' 
            
'    <ul>' 
            
'    <xsl:for-each select="$node/item">' 
            
'        <xsl:variable name="children" select="count(./item) &gt; 0" />' 
            
'        <li>' 
            
'            <xsl:attribute name="class">' 
            
'                <xsl:if test="position() = last()">jstree-last </xsl:if>' 
            
'                <xsl:choose>' 
            
'                    <xsl:when test="@state = 'open'">jstree-open </xsl:when>' 
            
'                    <xsl:when test="$children or @hasChildren or @state = 'closed'">jstree-closed </xsl:when>' 
            
'                    <xsl:otherwise>jstree-leaf </xsl:otherwise>' 
            
'                </xsl:choose>' 
            
'                <xsl:value-of select="@class" />' 
            
'            </xsl:attribute>' 
            
'            <xsl:for-each select="@*">' 
            
'                <xsl:if test="name() != 'class' and name() != 'state' and name() != 'hasChildren'">' 
            
'                    <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>' 
            
'                </xsl:if>' 
            
'            </xsl:for-each>' 
            
'    <ins class="jstree-icon"><xsl:text>&#xa0;</xsl:text></ins>' 
            
'            <xsl:for-each select="content/name">' 
            
'                <a>' 
            
'                <xsl:attribute name="href">' 
            
'                    <xsl:choose>' 
            
'                    <xsl:when test="@href"><xsl:value-of select="@href" /></xsl:when>' 
            
'                    <xsl:otherwise>#</xsl:otherwise>' 
            
'                    </xsl:choose>' 
            
'                </xsl:attribute>' 
            
'                <xsl:attribute name="class"><xsl:value-of select="@lang" /> <xsl:value-of select="@class" /></xsl:attribute>' 
            
'                <xsl:attribute name="style"><xsl:value-of select="@style" /></xsl:attribute>' 
            
'                <xsl:for-each select="@*">' 
            
'                    <xsl:if test="name() != 'style' and name() != 'class' and name() != 'href'">' 
            
'                        <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>' 
            
'                    </xsl:if>' 
            
'                </xsl:for-each>' 
            
'                    <ins>' 
            
'                        <xsl:attribute name="class">jstree-icon ' 
            
'                            <xsl:if test="string-length(attribute::icon) > 0 and not(contains(@icon,'/'))"><xsl:value-of select="@icon" /></xsl:if>' 
            
'                        </xsl:attribute>' 
            
'                        <xsl:if test="string-length(attribute::icon) > 0 and contains(@icon,'/')"><xsl:attribute name="style">background:url(<xsl:value-of select="@icon" />) center center no-repeat;</xsl:attribute></xsl:if>' 
            
'                        <xsl:text>&#xa0;</xsl:text>' 
            
'                    </ins>' 
            
'                    <xsl:copy-of select="./child::node()" />' 
            
'                </a>' 
            
'            </xsl:for-each>' 
            
'            <xsl:if test="$children or @hasChildren"><xsl:call-template name="nodes"><xsl:with-param name="node" select="current()" /></xsl:call-template></xsl:if>' 
            
'        </li>' 
            
'    </xsl:for-each>' 
            
'    </ul>' 
            
'</xsl:template>' 
            
'</xsl:stylesheet>',

        
'flat' '<' '?xml version="1.0" encoding="utf-8" ?>' 
            
'<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >' 
            
'<xsl:output method="html" encoding="utf-8" omit-xml-declaration="yes" standalone="no" indent="no" media-type="text/xml" />' 
            
'<xsl:template match="/">' 
            
'    <ul>' 
            
'    <xsl:for-each select="//item[not(@parent_id) or @parent_id=0 or not(@parent_id = //item/@id)]">' /* the last `or` may be removed */
            
'        <xsl:call-template name="nodes">' 
            
'            <xsl:with-param name="node" select="." />' 
            
'            <xsl:with-param name="is_last" select="number(position() = last())" />' 
            
'        </xsl:call-template>' 
            
'    </xsl:for-each>' 
            
'    </ul>' 
            
'</xsl:template>' 
            
'<xsl:template name="nodes">' 
            
'    <xsl:param name="node" />' 
            
'    <xsl:param name="is_last" />' 
            
'    <xsl:variable name="children" select="count(//item[@parent_id=$node/attribute::id]) &gt; 0" />' 
            
'    <li>' 
            
'    <xsl:attribute name="class">' 
            
'        <xsl:if test="$is_last = true()">jstree-last </xsl:if>' 
            
'        <xsl:choose>' 
            
'            <xsl:when test="@state = 'open'">jstree-open </xsl:when>' 
            
'            <xsl:when test="$children or @hasChildren or @state = 'closed'">jstree-closed </xsl:when>' 
            
'            <xsl:otherwise>jstree-leaf </xsl:otherwise>' 
            
'        </xsl:choose>' 
            
'        <xsl:value-of select="@class" />' 
            
'    </xsl:attribute>' 
            
'    <xsl:for-each select="@*">' 
            
'        <xsl:if test="name() != 'parent_id' and name() != 'hasChildren' and name() != 'class' and name() != 'state'">' 
            
'        <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>' 
            
'        </xsl:if>' 
            
'    </xsl:for-each>' 
            
'    <ins class="jstree-icon"><xsl:text>&#xa0;</xsl:text></ins>' 
            
'    <xsl:for-each select="content/name">' 
            
'        <a>' 
            
'        <xsl:attribute name="href">' 
            
'            <xsl:choose>' 
            
'            <xsl:when test="@href"><xsl:value-of select="@href" /></xsl:when>' 
            
'            <xsl:otherwise>#</xsl:otherwise>' 
            
'            </xsl:choose>' 
            
'        </xsl:attribute>' 
            
'        <xsl:attribute name="class"><xsl:value-of select="@lang" /> <xsl:value-of select="@class" /></xsl:attribute>' 
            
'        <xsl:attribute name="style"><xsl:value-of select="@style" /></xsl:attribute>' 
            
'        <xsl:for-each select="@*">' 
            
'            <xsl:if test="name() != 'style' and name() != 'class' and name() != 'href'">' 
            
'                <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>' 
            
'            </xsl:if>' 
            
'        </xsl:for-each>' 
            
'            <ins>' 
            
'                <xsl:attribute name="class">jstree-icon ' 
            
'                    <xsl:if test="string-length(attribute::icon) > 0 and not(contains(@icon,'/'))"><xsl:value-of select="@icon" /></xsl:if>' 
            
'                </xsl:attribute>' 
            
'                <xsl:if test="string-length(attribute::icon) > 0 and contains(@icon,'/')"><xsl:attribute name="style">background:url(<xsl:value-of select="@icon" />) center center no-repeat;</xsl:attribute></xsl:if>' 
            
'                <xsl:text>&#xa0;</xsl:text>' 
            
'            </ins>' 
            
'            <xsl:copy-of select="./child::node()" />' 
            
'        </a>' 
            
'    </xsl:for-each>' 
            
'    <xsl:if test="$children">' 
            
'        <ul>' 
            
'        <xsl:for-each select="//item[@parent_id=$node/attribute::id]">' 
            
'            <xsl:call-template name="nodes">' 
            
'                <xsl:with-param name="node" select="." />' 
            
'                <xsl:with-param name="is_last" select="number(position() = last())" />' 
            
'            </xsl:call-template>' 
            
'        </xsl:for-each>' 
            
'        </ul>' 
            
'    </xsl:if>' 
            
'    </li>' 
            
'</xsl:template>' 
            
'</xsl:stylesheet>'
    
},
    
escape_xml = function(string) {
        return 
string
            
.toString()
            .
replace(/&/g'&amp;')
            .
replace(/</g'&lt;')
            .
replace(/>/g'&gt;')
            .
replace(/"/g, '&quot;')
            .replace(/'/g, '&apos;');
    };
    $.jstree.plugin("
xml_data", {
        defaults : { 
            data : false,
            ajax : false,
            xsl : "
flat",
            clean_node : false,
            correct_state : true,
            get_skip_empty : false,
            get_include_preamble : true
        },
        _fn : {
            load_node : function (obj, s_call, e_call) { var _this = this; this.load_node_xml(obj, function () { _this.__callback({ "
obj" : _this._get_node(obj) }); s_call.call(this); }, e_call); },
            _is_loaded : function (obj) { 
                var s = this._get_settings().xml_data;
                obj = this._get_node(obj);
                return obj == -1 || !obj || (!s.ajax && !$.isFunction(s.data)) || obj.is("
.jstree-open, .jstree-leaf") || obj.children("ul").children("li").size() > 0;
            },
            load_node_xml : function (obj, s_call, e_call) {
                var s = this.get_settings().xml_data,
                    error_func = function () {},
                    success_func = function () {};

                obj = this._get_node(obj);
                if(obj && obj !== -1) {
                    if(obj.data("
jstree_is_loading")) { return; }
                    else { obj.data("
jstree_is_loading",true); }
                }
                switch(!0) {
                    case (!s.data && !s.ajax): throw "
Neither data nor ajax settings supplied.";
                    case ($.isFunction(s.data)):
                        s.data.call(this, obj, $.proxy(function (d) {
                            this.parse_xml(d, $.proxy(function (d) {
                                if(d) {
                                    d = d.replace(/ ?xmlns="
[^"]*"/ig"");
                                    if(
d.length 10) {
                                        
= $(d);
                                        if(
obj === -|| !obj) { this.get_container().children("ul").empty().append(d.children()); }
                                        else { 
obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d); obj.removeData("jstree_is_loading"); }
                                        if(
s.clean_node) { this.clean_node(obj); }
                                        if(
s_call) { s_call.call(this); }
                                    }
                                    else {
                                        if(
obj && obj !== -1) { 
                                            
obj.children("a.jstree-loading").removeClass("jstree-loading");
                                            
obj.removeData("jstree_is_loading");
                                            if(
s.correct_state) { 
                                                
this.correct_state(obj);
                                                if(
s_call) { s_call.call(this); } 
                                            }
                                        }
                                        else {
                                            if(
s.correct_state) { 
                                                
this.get_container().children("ul").empty();
                                                if(
s_call) { s_call.call(this); } 
                                            }
                                        }
                                    }
                                }
                            }, 
this));
                        }, 
this));
                        break;
                    case (!!
s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)):
                        if(!
obj || obj == -1) {
                            
this.parse_xml(s.data, $.proxy(function (d) {
                                if(
d) {
                                    
d.replace(/ ?xmlns="[^"]*"/ig, "");
                                    if(d.length > 10) {
                                        d = $(d);
                                        this.get_container().children("
ul").empty().append(d.children());
                                        if(s.clean_node) { this.clean_node(obj); }
                                        if(s_call) { s_call.call(this); }
                                    }
                                }
                                else { 
                                    if(s.correct_state) { 
                                        this.get_container().children("
ul").empty(); 
                                        if(s_call) { s_call.call(this); }
                                    }
                                }
                            }, this));
                        }
                        break;
                    case (!s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1):
                        error_func = function (x, t, e) {
                            var ef = this.get_settings().xml_data.ajax.error; 
                            if(ef) { ef.call(this, x, t, e); }
                            if(obj !== -1 && obj.length) {
                                obj.children("
a.jstree-loading").removeClass("jstree-loading");
                                obj.removeData("
jstree_is_loading");
                                if(t === "
success" && s.correct_state) { this.correct_state(obj); }
                            }
                            else {
                                if(t === "
success" && s.correct_state) { this.get_container().children("ul").empty(); }
                            }
                            if(e_call) { e_call.call(this); }
                        };
                        success_func = function (d, t, x) {
                            d = x.responseText;
                            var sf = this.get_settings().xml_data.ajax.success; 
                            if(sf) { d = sf.call(this,d,t,x) || d; }
                            if(d === "" || (d && d.toString && d.toString().replace(/^[sn]+$/,"") === "")) {
                                return error_func.call(this, x, t, "");
                            }
                            this.parse_xml(d, $.proxy(function (d) {
                                if(d) {
                                    d = d.replace(/ ?xmlns="
[^"]*"/ig"");
                                    if(
d.length 10) {
                                        
= $(d);
                                        if(
obj === -|| !obj) { this.get_container().children("ul").empty().append(d.children()); }
                                        else { 
obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d); obj.removeData("jstree_is_loading"); }
                                        if(
s.clean_node) { this.clean_node(obj); }
                                        if(
s_call) { s_call.call(this); }
                                    }
                                    else {
                                        if(
obj && obj !== -1) { 
                                            
obj.children("a.jstree-loading").removeClass("jstree-loading");
                                            
obj.removeData("jstree_is_loading");
                                            if(
s.correct_state) { 
                                                
this.correct_state(obj);
                                                if(
s_call) { s_call.call(this); } 
                                            }
                                        }
                                        else {
                                            if(
s.correct_state) { 
                                                
this.get_container().children("ul").empty();
                                                if(
s_call) { s_call.call(this); } 
                                            }
                                        }
                                    }
                                }
                            }, 
this));
                        };
                        
s.ajax.context this;
                        
s.ajax.error error_func;
                        
s.ajax.success success_func;
                        if(!
s.ajax.dataType) { s.ajax.dataType "xml"; }
                        if($.
isFunction(s.ajax.url)) { s.ajax.url s.ajax.url.call(thisobj); }
                        if($.
isFunction(s.ajax.data)) { s.ajax.data s.ajax.data.call(thisobj); }
                        $.
ajax(s.ajax);
                        break;
                }
            },
            
parse_xml : function (xmlcallback) {
                var 
this._get_settings().xml_data;
                $.
vakata.xslt(xmlxsl[s.xsl], callback);
            },
            
get_xml : function (tpobjli_attra_attris_callback) {
                var 
result ""
                    
this._get_settings(), 
                    
_this this,
                    
tmp1tmp2lialang;
                if(!
tp) { tp "flat"; }
                if(!
is_callback) { is_callback 0; }
                
obj this._get_node(obj);
                if(!
obj || obj === -1) { obj this.get_container().find("> ul > li"); }
                
li_attr = $.isArray(li_attr) ? li_attr : [ "id""class" ];
                if(!
is_callback && this.data.types && $.inArray(s.types.type_attrli_attr) === -1) { li_attr.push(s.types.type_attr); }

                
a_attr = $.isArray(a_attr) ? a_attr : [ ];

                if(!
is_callback) { 
                    if(
s.xml_data.get_include_preamble) { 
                        
result += '<' '?xml version="1.0" encoding="UTF-8"?' '>'
                    }
                    
result += "<root>"
                }
                
obj.each(function () {
                    
result += "<item";
                    
li = $(this);
                    $.
each(li_attr, function (iv) { 
                        var 
li.attr(v);
                        if(!
s.xml_data.get_skip_empty || typeof t !== "undefined") {
                            
result += " " "="" + escape_xml((" " + (t || "")).replace(/ jstree[^ ]*/ig,'').replace(/s+$/ig," ").replace(/^ /,"").replace(/ $/,"")) + """
                        }
                    });
                    if(
li.hasClass("jstree-open")) { result += " state="open""; }
                    if(
li.hasClass("jstree-closed")) { result += " state="closed""; }
                    if(
tp === "flat") { result += " parent_id="" + escape_xml(is_callback) + """; }
                    
result += ">";
                    
result += "<content>";
                    
li.children("a");
                    
a.each(function () {
                        
tmp1 = $(this);
                        
lang false;
                        
result += "<name";
                        if($.
inArray("languages"s.plugins) !== -1) {
                            $.
each(s.languages, function (kz) {
                                if(
tmp1.hasClass(z)) { result += " lang="" + escape_xml(z) + """lang z; return false; }
                            });
                        }
                        if(
a_attr.length) { 
                            $.
each(a_attr, function (kz) {
                                var 
tmp1.attr(z);
                                if(!
s.xml_data.get_skip_empty || typeof t !== "undefined") {
                                    
result += " " "="" + escape_xml((" " + t || "").replace(/ jstree[^ ]*/ig,'').replace(/s+$/ig," ").replace(/^ /,"").replace(/ $/,"")) + """;
                                }
                            });
                        }
                        if(
tmp1.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/^s+$/ig,"").length) {
                            
result += ' icon="' escape_xml(tmp1.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/s+$/ig," ").replace(/^ /,"").replace(/ $/,"")) + '"';
                        }
                        if(
tmp1.children("ins").get(0).style.backgroundImage.length) {
                            
result += ' icon="' escape_xml(tmp1.children("ins").get(0).style.backgroundImage.replace("url(","").replace(")","").replace(/'/ig,"").replace(/"/ig,"")) + '"';
                        }
                        result += "
>";
                        result += "
<![CDATA[" + _this.get_text(tmp1, lang) + "]]>";
                        result += "
</name>";
                    });
                    result += "
</content>";
                    tmp2 = li[0].id || true;
                    li = li.find("
ul li");
                    if(li.length) { tmp2 = _this.get_xml(tp, li, li_attr, a_attr, tmp2); }
                    else { tmp2 = ""; }
                    if(tp == "
nest") { result += tmp2; }
                    result += "
</item>";
                    if(tp == "
flat") { result += tmp2; }
                });
                if(!is_callback) { result += "
</root>"; }
                return result;
            }
        }
    });
})(jQuery);
//*/

/*
 * jsTree search plugin
 * Enables both sync and async search on the tree
 * DOES NOT WORK WITH JSON PROGRESSIVE RENDER
 */
(function ($) {
    $.expr[':'].jstree_contains = function(a,i,m){
        return (a.textContent || a.innerText || "").toLowerCase().indexOf(m[3].toLowerCase())>=0;
    };
    $.expr[':'].jstree_title_contains = function(a,i,m) {
        return (a.getAttribute("
title") || "").toLowerCase().indexOf(m[3].toLowerCase())>=0;
    };
    $.jstree.plugin("
search", {
        __init : function () {
            this.data.search.str = "";
            this.data.search.result = $();
            if(this._get_settings().search.show_only_matches) {
                this.get_container()
                    .bind("
search.jstree", function (e, data) {
                        $(this).children("
ul").find("li").hide().removeClass("jstree-last");
                        data.rslt.nodes.parentsUntil("
.jstree").andSelf().show()
                            .filter("
ul").each(function () { $(this).children("li:visible").eq(-1).addClass("jstree-last"); });
                    })
                    .bind("
clear_search.jstree", function () {
                        $(this).children("
ul").find("li").css("display","").end().end().jstree("clean_node", -1);
                    });
            }
        },
        defaults : {
            ajax : false,
            search_method : "
jstree_contains", // for case insensitive - jstree_contains
            show_only_matches : false
        },
        _fn : {
            search : function (str, skip_async) {
                if($.trim(str) === "") { this.clear_search(); return; }
                var s = this.get_settings().search, 
                    t = this,
                    error_func = function () { },
                    success_func = function () { };
                this.data.search.str = str;

                if(!skip_async && s.ajax !== false && this.get_container_ul().find("
li.jstree-closed:not(:has(ul)):eq(0)").length > 0) {
                    this.search.supress_callback = true;
                    error_func = function () { };
                    success_func = function (d, t, x) {
                        var sf = this.get_settings().search.ajax.success; 
                        if(sf) { d = sf.call(this,d,t,x) || d; }
                        this.data.search.to_open = d;
                        this._search_open();
                    };
                    s.ajax.context = this;
                    s.ajax.error = error_func;
                    s.ajax.success = success_func;
                    if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, str); }
                    if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, str); }
                    if(!s.ajax.data) { s.ajax.data = { "
search_string" : str }; }
                    if(!s.ajax.dataType || /^json/.exec(s.ajax.dataType)) { s.ajax.dataType = "
json"; }
                    $.ajax(s.ajax);
                    return;
                }
                if(this.data.search.result.length) { this.clear_search(); }
                this.data.search.result = this.get_container().find("
a" + (this.data.languages ? "." + this.get_lang() : "" ) + ":" + (s.search_method) + "(" + this.data.search.str + ")");
                this.data.search.result.addClass("
jstree-search").parent().parents(".jstree-closed").each(function () {
                    t.open_node(this, false, true);
                });
                this.__callback({ nodes : this.data.search.result, str : str });
            },
            clear_search : function (str) {
                this.data.search.result.removeClass("
jstree-search");
                this.__callback(this.data.search.result);
                this.data.search.result = $();
            },
            _search_open : function (is_callback) {
                var _this = this,
                    done = true,
                    current = [],
                    remaining = [];
                if(this.data.search.to_open.length) {
                    $.each(this.data.search.to_open, function (i, val) {
                        if(val == "
#") { return true; }
                        
if($(val).length && $(val).is(".jstree-closed")) { current.push(val); }
                        else { 
remaining.push(val); }
                    });
                    if(
current.length) {
                        
this.data.search.to_open remaining;
                        $.
each(current, function (ival) { 
                            
_this.open_node(val, function () { _this._search_open(true); }); 
                        });
                        
done false;
                    }
                }
                if(
done) { this.search(this.data.search.strtrue); }
            }
        }
    });
})(
jQuery);
//*/

/* 
 * jsTree contextmenu plugin
 */
(function ($) {
    $.
vakata.context = {
        
hide_on_mouseleave false,

        
cnt        : $("<div id='vakata-contextmenu' />"),
        
vis        false,
        
tgt        false,
        
par        false,
        
func    false,
        
data    false,
        
rtl        false,
        
show    : function (stxydprtl) {
            $.
vakata.context.rtl = !!rtl;
            var 
html = $.vakata.context.parse(s), hw;
            if(!
html) { return; }
            $.
vakata.context.vis true;
            $.
vakata.context.tgt t;
            $.
vakata.context.par || || null;
            $.
vakata.context.data || null;
            $.
vakata.context.cnt
                
.html(html)
                .
css({ "visibility" "hidden""display" "block""left" 0"top" });

            if($.
vakata.context.hide_on_mouseleave) {
                $.
vakata.context.cnt
                    
.one("mouseleave", function(e) { $.vakata.context.hide(); });
            }

            
= $.vakata.context.cnt.height();
            
= $.vakata.context.cnt.width();
            if(
> $(document).width()) { 
                
= $(document).width() - (5); 
                $.
vakata.context.cnt.find("li > ul").addClass("right"); 
            }
            if(
> $(document).height()) { 
                
- (t[0].offsetHeight); 
                $.
vakata.context.cnt.find("li > ul").addClass("bottom"); 
            }

            $.
vakata.context.cnt
                
.css({ "left" x"top" })
                .
find("li:has(ul)")
                    .
bind("mouseenter", function (e) { 
                        var 
= $(document).width(),
                            
= $(document).height(),
                            
ul = $(this).children("ul").show(); 
                        if(
!== $(document).width()) { ul.toggleClass("right"); }
                        if(
!== $(document).height()) { ul.toggleClass("bottom"); }
                    })
                    .
bind("mouseleave", function (e) { 
                        $(
this).children("ul").hide(); 
                    })
                    .
end()
                .
css({ "visibility" "visible" })
                .
show();
            $(
document).triggerHandler("context_show.vakata");
        },
        
hide    : function () {
            $.
vakata.context.vis false;
            $.
vakata.context.cnt.attr("class","").css({ "visibility" "hidden" });
            $(
document).triggerHandler("context_hide.vakata");
        },
        
parse    : function (sis_callback) {
            if(!
s) { return false; }
            var 
str "",
                
tmp false,
                
was_sep true;
            if(!
is_callback) { $.vakata.context.func = {}; }
            
str += "<ul>";
            $.
each(s, function (ival) {
                if(!
val) { return true; }
                $.
vakata.context.func[i] = val.action;
                if(!
was_sep && val.separator_before) {
                    
str += "<li class='vakata-separator vakata-separator-before'></li>";
                }
                
was_sep false;
                
str += "<li class='" + (val._class || "") + (val._disabled " jstree-contextmenu-disabled " "") + "'><ins ";
                if(
val.icon && val.icon.indexOf("/") === -1) { str += " class='" val.icon "' "; }
                if(
val.icon && val.icon.indexOf("/") !== -1) { str += " style='background:url(" val.icon ") center center no-repeat;' "; }
                
str += ">&#160;</ins><a href='#' rel='" "'>";
                if(
val.submenu) {
                    
str += "<span style='float:" + ($.vakata.context.rtl "left" "right") + ";'>&raquo;</span>";
                }
                
str += val.label "</a>";
                if(
val.submenu) {
                    
tmp = $.vakata.context.parse(val.submenutrue);
                    if(
tmp) { str += tmp; }
                }
                
str += "</li>";
                if(
val.separator_after) {
                    
str += "<li class='vakata-separator vakata-separator-after'></li>";
                    
was_sep true;
                }
            });
            
str str.replace(/<li class='vakata-separator vakata-separator-after'></li>$/,"");
            
str += "</ul>";
            $(
document).triggerHandler("context_parse.vakata");
            return 
str.length 10 str false;
        },
        
exec    : function (i) {
            if($.
isFunction($.vakata.context.func[i])) {
                
// if is string - eval and call it!
                
$.vakata.context.func[i].call($.vakata.context.data, $.vakata.context.par);
                return 
true;
            }
            else { return 
false; }
        }
    };
    $(function () {
        var 
css_string '' 
            
'#vakata-contextmenu { display:block; visibility:hidden; left:0; top:-200px; position:absolute; margin:0; padding:0; min-width:180px; background:#ebebeb; border:1px solid silver; z-index:10000; *width:180px; } ' 
            
'#vakata-contextmenu ul { min-width:180px; *width:180px; } ' 
            
'#vakata-contextmenu ul, #vakata-contextmenu li { margin:0; padding:0; list-style-type:none; display:block; } ' 
            
'#vakata-contextmenu li { line-height:20px; min-height:20px; position:relative; padding:0px; } ' 
            
'#vakata-contextmenu li a { padding:1px 6px; line-height:17px; display:block; text-decoration:none; margin:1px 1px 0 1px; } ' 
            
'#vakata-contextmenu li ins { float:left; width:16px; height:16px; text-decoration:none; margin-right:2px; } ' 
            
'#vakata-contextmenu li a:hover, #vakata-contextmenu li.vakata-hover > a { background:gray; color:white; } ' 
            
'#vakata-contextmenu li ul { display:none; position:absolute; top:-2px; left:100%; background:#ebebeb; border:1px solid gray; } ' 
            
'#vakata-contextmenu .right { right:100%; left:auto; } ' 
            
'#vakata-contextmenu .bottom { bottom:-1px; top:auto; } ' 
            
'#vakata-contextmenu li.vakata-separator { min-height:0; height:1px; line-height:1px; font-size:1px; overflow:hidden; margin:0 2px; background:silver; /* border-top:1px solid #fefefe; */ padding:0; } ';
        $.
vakata.css.add_sheet({ str css_stringtitle "vakata" });
        $.
vakata.context.cnt
            
.delegate("a","click", function (e) { e.preventDefault(); })
            .
delegate("a","mouseup", function (e) {
                if(!$(
this).parent().hasClass("jstree-contextmenu-disabled") && $.vakata.context.exec($(this).attr("rel"))) {
                    $.
vakata.context.hide();
                }
                else { $(
this).blur(); }
            })
            .
delegate("a","mouseover", function () {
                $.
vakata.context.cnt.find(".vakata-hover").removeClass("vakata-hover");
            })
            .
appendTo("body");
        $(
document).bind("mousedown", function (e) { if($.vakata.context.vis && !$.contains($.vakata.context.cnt[0], e.target)) { $.vakata.context.hide(); } });
        if(
typeof $.hotkeys !== "undefined") {
            $(
document)
                .
bind("keydown""up", function (e) { 
                    if($.
vakata.context.vis) { 
                        var 
= $.vakata.context.cnt.find("ul:visible").last().children(".vakata-hover").removeClass("vakata-hover").prevAll("li:not(.vakata-separator)").first();
                        if(!
o.length) { = $.vakata.context.cnt.find("ul:visible").last().children("li:not(.vakata-separator)").last(); }
                        
o.addClass("vakata-hover");
                        
e.stopImmediatePropagation(); 
                        
e.preventDefault();
                    } 
                })
                .
bind("keydown""down", function (e) { 
                    if($.
vakata.context.vis) { 
                        var 
= $.vakata.context.cnt.find("ul:visible").last().children(".vakata-hover").removeClass("vakata-hover").nextAll("li:not(.vakata-separator)").first();
                        if(!
o.length) { = $.vakata.context.cnt.find("ul:visible").last().children("li:not(.vakata-separator)").first(); }
                        
o.addClass("vakata-hover");
                        
e.stopImmediatePropagation(); 
                        
e.preventDefault();
                    } 
                })
                .
bind("keydown""right", function (e) { 
                    if($.
vakata.context.vis) { 
                        $.
vakata.context.cnt.find(".vakata-hover").children("ul").show().children("li:not(.vakata-separator)").removeClass("vakata-hover").first().addClass("vakata-hover");
                        
e.stopImmediatePropagation(); 
                        
e.preventDefault();
                    } 
                })
                .
bind("keydown""left", function (e) { 
                    if($.
vakata.context.vis) { 
                        $.
vakata.context.cnt.find(".vakata-hover").children("ul").hide().children(".vakata-separator").removeClass("vakata-hover");
                        
e.stopImmediatePropagation(); 
                        
e.preventDefault();
                    } 
                })
                .
bind("keydown""esc", function (e) { 
                    $.
vakata.context.hide(); 
                    
e.preventDefault();
                })
                .
bind("keydown""space", function (e) { 
                    $.
vakata.context.cnt.find(".vakata-hover").last().children("a").click();
                    
e.preventDefault();
                });
        }
    });

    $.
jstree.plugin("contextmenu", {
        
__init : function () {
            
this.get_container()
                .
delegate("a""contextmenu.jstree", $.proxy(function (e) {
                        
e.preventDefault();
                        if(!$(
e.currentTarget).hasClass("jstree-loading")) {
                            
this.show_contextmenu(e.currentTargete.pageXe.pageY);
                        }
                    }, 
this))
                .
delegate("a""click.jstree", $.proxy(function (e) {
                        if(
this.data.contextmenu) {
                            $.
vakata.context.hide();
                        }
                    }, 
this))
                .
bind("destroy.jstree", $.proxy(function () {
                        
// TODO: move this to descruct method
                        
if(this.data.contextmenu) {
                            $.
vakata.context.hide();
                        }
                    }, 
this));
            $(
document).bind("context_hide.vakata", $.proxy(function () { this.data.contextmenu false; }, this));
        },
        
__destroy: function() {
            
// unbind global event handlers when last instance is removed
            // (no access to private 'instances' variable from here)
            
if($('.jstree').length <= 1) {
                $(
document).unbind("context_hide.vakata");    
            }
        },
        
defaults : { 
            
select_node false// requires UI plugin
            
show_at_node true,
            
items : { // Could be a function that should return an object like this one
                
"create" : {
                    
"separator_before"    false,
                    
"separator_after"    true,
                    
"label"                "Create",
                    
"action"            : function (obj) { this.create(obj); }
                },
                
"rename" : {
                    
"separator_before"    false,
                    
"separator_after"    false,
                    
"label"                "Rename",
                    
"action"            : function (obj) { this.rename(obj); }
                },
                
"remove" : {
                    
"separator_before"    false,
                    
"icon"                false,
                    
"separator_after"    false,
                    
"label"                "Delete",
                    
"action"            : function (obj) { if(this.is_selected(obj)) { this.remove(); } else { this.remove(obj); } }
                },
                
"ccp" : {
                    
"separator_before"    true,
                    
"icon"                false,
                    
"separator_after"    false,
                    
"label"                "Edit",
                    
"action"            false,
                    
"submenu" : { 
                        
"cut" : {
                            
"separator_before"    false,
                            
"separator_after"    false,
                            
"label"                "Cut",
                            
"action"            : function (obj) { this.cut(obj); }
                        },
                        
"copy" : {
                            
"separator_before"    false,
                            
"icon"                false,
                            
"separator_after"    false,
                            
"label"                "Copy",
                            
"action"            : function (obj) { this.copy(obj); }
                        },
                        
"paste" : {
                            
"separator_before"    false,
                            
"icon"                false,
                            
"separator_after"    false,
                            
"label"                "Paste",
                            
"action"            : function (obj) { this.paste(obj); }
                        }
                    }
                }
            }
        },
        
_fn : {
            
show_contextmenu : function (objxy) {
                
obj this._get_node(obj);
                var 
this.get_settings().contextmenu,
                    
obj.children("a:visible:eq(0)"),
                    
false,
                    
false;
                if(
s.select_node && this.data.ui && !this.is_selected(obj)) {
                    
this.deselect_all();
                    
this.select_node(objtrue);
                }
                if(
s.show_at_node || typeof x === "undefined" || typeof y === "undefined") {
                    
a.offset();
                    
o.left;
                    
o.top this.data.core.li_height;
                }
                
obj.data("jstree") && obj.data("jstree").contextmenu obj.data("jstree").contextmenu s.items;
                if($.
isFunction(i)) { i.call(thisobj); }
                
this.data.contextmenu true;
                $.
vakata.context.show(iaxythisobjthis._get_settings().core.rtl);
                if(
this.data.themes) { $.vakata.context.cnt.attr("class""jstree-" this.data.themes.theme "-context"); }
            }
        }
    });
})(
jQuery);
//*/

/* 
 * jsTree types plugin
 * Adds support types of nodes
 * You can set an attribute on each li node, that represents its type.
 * According to the type setting the node may get custom icon/validation rules
 */
(function ($) {
    $.
jstree.plugin("types", {
        
__init : function () {
            var 
this._get_settings().types;
            
this.data.types.attach_to = [];
            
this.get_container()
                .
bind("init.jstree", $.proxy(function () { 
                        var 
types s.types
                            
attr  s.type_attr
                            
icons_css ""
                            
_this this;

                        $.
each(types, function (itp) {
                            $.
each(tp, function (kv) { 
                                if(!/^(
max_depth|max_children|icon|valid_children)$/.test(k)) { _this.data.types.attach_to.push(k); }
                            });
                            if(!
tp.icon) { return true; }
                            if( 
tp.icon.image || tp.icon.position) {
                                if(
== "default")    { icons_css += '.jstree-' _this.get_index() + ' a > .jstree-icon { '; }
                                else                { 
icons_css += '.jstree-' _this.get_index() + ' li[' attr '="' '"] > a > .jstree-icon { '; }
                                if(
tp.icon.image)    { icons_css += ' background-image:url(' tp.icon.image '); '; }
                                if(
tp.icon.position){ icons_css += ' background-position:' tp.icon.position '; '; }
                                else                { 
icons_css += ' background-position:0 0; '; }
                                
icons_css += '} ';
                            }
                        });
                        if(
icons_css !== "") { $.vakata.css.add_sheet({ 'str' icons_csstitle "jstree-types" }); }
                    }, 
this))
                .
bind("before.jstree", $.proxy(function (edata) { 
                        var 
st
                            
this._get_settings().types.use_data this._get_node(data.args[0]) : false
                            
&& !== -&& o.length o.data("jstree") : false;
                        if(
&& d.types && d.types[data.func] === false) { e.stopImmediatePropagation(); return false; }
                        if($.
inArray(data.functhis.data.types.attach_to) !== -1) {
                            if(!
data.args[0] || (!data.args[0].tagName && !data.args[0].jquery)) { return; }
                            
this._get_settings().types.types;
                            
this._get_type(data.args[0]);
                            if(
                                ( 
                                    (
s[t] && typeof s[t][data.func] !== "undefined") || 
                                    (
s["default"] && typeof s["default"][data.func] !== "undefined"
                                ) && 
this._check(data.funcdata.args[0]) === false
                            
) {
                                
e.stopImmediatePropagation();
                                return 
false;
                            }
                        }
                    }, 
this));
            if(
is_ie6) {
                
this.get_container()
                    .
bind("load_node.jstree set_type.jstree", $.proxy(function (edata) {
                            var 
data && data.rslt && data.rslt.obj && data.rslt.obj !== -this._get_node(data.rslt.obj).parent() : this.get_container_ul(),
                                
false,
                                
this._get_settings().types;
                            $.
each(s.types, function (itp) {
                                if(
tp.icon && (tp.icon.image || tp.icon.position)) {
                                    
=== "default" r.find("li > a > .jstree-icon") : r.find("li[" s.type_attr "='" "'] > a > .jstree-icon");
                                    if(
tp.icon.image) { c.css("backgroundImage","url(" tp.icon.image ")"); }
                                    
c.css("backgroundPosition"tp.icon.position || "0 0");
                                }
                            });
                        }, 
this));
            }
        },
        
defaults : {
            
// defines maximum number of root nodes (-1 means unlimited, -2 means disable max_children checking)
            
max_children        : -1,
            
// defines the maximum depth of the tree (-1 means unlimited, -2 means disable max_depth checking)
            
max_depth            : -1,
            
// defines valid node types for the root nodes
            
valid_children        "all",

            
// whether to use $.data
            
use_data false
            
// where is the type stores (the rel attribute of the LI element)
            
type_attr "rel",
            
// a list of types
            
types : {
                
// the default type
                
"default" : {
                    
"max_children"    : -1,
                    
"max_depth"        : -1,
                    
"valid_children""all"

                    
// Bound functions - you can bind any other function here (using boolean or function)
                    //"select_node"    : true
                
}
            }
        },
        
_fn : {
            
_types_notify : function (ndata) {
                if(
data.type && this._get_settings().types.use_data) {
                    
this.set_type(data.typen);
                }
            },
            
_get_type : function (obj) {
                
obj this._get_node(obj);
                return (!
obj || !obj.length) ? false obj.attr(this._get_settings().types.type_attr) || "default";
            },
            
set_type : function (strobj) {
                
obj this._get_node(obj);
                var 
ret = (!obj.length || !str) ? false obj.attr(this._get_settings().types.type_attrstr);
                if(
ret) { this.__callback({ obj objtype str}); }
                return 
ret;
            },
            
_check : function (ruleobjopts) {
                
obj this._get_node(obj);
                var 
falsethis._get_type(obj), 0_this thisthis._get_settings().typesdata false;
                if(
obj === -1) { 
                    if(!!
s[rule]) { s[rule]; }
                    else { return; }
                }
                else {
                    if(
=== false) { return; }
                    
data s.use_data obj.data("jstree") : false;
                    if(
data && data.types && typeof data.types[rule] !== "undefined") { data.types[rule]; }
                    else if(!!
s.types[t] && typeof s.types[t][rule] !== "undefined") { s.types[t][rule]; }
                    else if(!!
s.types["default"] && typeof s.types["default"][rule] !== "undefined") { s.types["default"][rule]; }
                }
                if($.
isFunction(v)) { v.call(thisobj); }
                if(
rule === "max_depth" && obj !== -&& opts !== false && s.max_depth !== -&& !== 0) {
                    
// also include the node itself - otherwise if root node it is not checked
                    
obj.children("a:eq(0)").parentsUntil(".jstree","li").each(function (i) {
                        
// check if current depth already exceeds global tree depth
                        
if(s.max_depth !== -&& s.max_depth - (1) <= 0) { 0; return false; }
                        
= (=== 0) ? _this._check(rulethisfalse);
                        
// check if current node max depth is already matched or exceeded
                        
if(!== -&& - (1) <= 0) { 0; return false; }
                        
// otherwise - set the max depth to the current value minus current depth
                        
if(>= && (- (1) < || 0) ) { - (1); }
                        
// if the global tree depth exists and it minus the nodes calculated so far is less than `v` or `v` is unlimited
                        
if(s.max_depth >= && (s.max_depth - (1) < || 0) ) { s.max_depth - (1); }
                    });
                }
                return 
v;
            },
            
check_move : function () {
                if(!
this.__call_old()) { return false; }
                var 
m  this._get_move(),
                    
s  m.rt._get_settings().types,
                    
mc m.rt._check("max_children"m.cr),
                    
md m.rt._check("max_depth"m.cr),
                    
vc m.rt._check("valid_children"m.cr),
                    
ch 01t;

                if(
vc === "none") { return false; } 
                if($.
isArray(vc) && m.ot && m.ot._get_type) {
                    
m.o.each(function () {
                        if($.
inArray(m.ot._get_type(this), vc) === -1) { false; return false; }
                    });
                    if(
=== false) { return false; }
                }
                if(
s.max_children !== -&& mc !== -1) {
                    
ch m.cr === -this.get_container().find("> ul > li").not(m.o).length m.cr.find("> ul > li").not(m.o).length;
                    if(
ch m.o.length mc) { return false; }
                }
                if(
s.max_depth !== -&& md !== -1) {
                    
0;
                    if(
md === 0) { return false; }
                    if(
typeof m.o.=== "undefined") {
                        
// TODO: deal with progressive rendering and async when checking max_depth (how to know the depth of the moved node)
                        
m.o;
                        while(
t.length 0) {
                            
t.find("> ul > li");
                            
++;
                        }
                        
m.o.d;
                    }
                    if(
md m.o.0) { return false; }
                }
                return 
true;
            },
            
create_node : function (objpositionjscallbackis_loadedskip_check) {
                if(!
skip_check && (is_loaded || this._is_loaded(obj))) {
                    var 
p  = (typeof position == "string" && position.match(/^before|after$/i) && obj !== -1) ? this._get_parent(obj) : this._get_node(obj),
                        
s  this._get_settings().types,
                        
mc this._check("max_children"p),
                        
md this._check("max_depth"p),
                        
vc this._check("valid_children"p),
                        
ch;
                    if(
typeof js === "string") { js = { data js }; }
                    if(!
js) { js = {}; }
                    if(
vc === "none") { return false; } 
                    if($.
isArray(vc)) {
                        if(!
js.attr || !js.attr[s.type_attr]) { 
                            if(!
js.attr) { js.attr = {}; }
                            
js.attr[s.type_attr] = vc[0]; 
                        }
                        else {
                            if($.
inArray(js.attr[s.type_attr], vc) === -1) { return false; }
                        }
                    }
                    if(
s.max_children !== -&& mc !== -1) {
                        
ch === -this.get_container().find("> ul > li").length p.find("> ul > li").length;
                        if(
ch mc) { return false; }
                    }
                    if(
s.max_depth !== -&& md !== -&& (md 1) < 0) { return false; }
                }
                return 
this.__call_old(trueobjpositionjscallbackis_loadedskip_check);
            }
        }
    });
})(
jQuery);
//*/

/* 
 * jsTree HTML plugin
 * The HTML data store. Datastores are build by replacing the `load_node` and `_is_loaded` functions.
 */
(function ($) {
    $.
jstree.plugin("html_data", {
        
__init : function () { 
            
// this used to use html() and clean the whitespace, but this way any attached data was lost
            
this.data.html_data.original_container_html this.get_container().find(" > ul > li").clone(true);
            
// remove white space from LI node - otherwise nodes appear a bit to the right
            
this.data.html_data.original_container_html.find("li").andSelf().contents().filter(function() { return this.nodeType == 3; }).remove();
        },
        
defaults : { 
            
data false,
            
ajax false,
            
correct_state true
        
},
        
_fn : {
            
load_node : function (objs_calle_call) { var _this thisthis.load_node_html(obj, function () { _this.__callback({ "obj" _this._get_node(obj) }); s_call.call(this); }, e_call); },
            
_is_loaded : function (obj) { 
                
obj this._get_node(obj); 
                return 
obj == -|| !obj || (!this._get_settings().html_data.ajax && !$.isFunction(this._get_settings().html_data.data)) || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").size() > 0;
            },
            
load_node_html : function (objs_calle_call) {
                var 
d,
                    
this.get_settings().html_data,
                    
error_func = function () {},
                    
success_func = function () {};
                
obj this._get_node(obj);
                if(
obj && obj !== -1) {
                    if(
obj.data("jstree_is_loading")) { return; }
                    else { 
obj.data("jstree_is_loading",true); }
                }
                switch(!
0) {
                    case ($.
isFunction(s.data)):
                        
s.data.call(thisobj, $.proxy(function (d) {
                            if(
&& !== "" && d.toString && d.toString().replace(/^[sn]+$/,"") !== "") {
                                
= $(d);
                                if(!
d.is("ul")) { = $("<ul />").append(d); }
                                if(
obj == -|| !obj) { this.get_container().children("ul").empty().append(d.children()).find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); }
                                else { 
obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d).children("ul").find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); obj.removeData("jstree_is_loading"); }
                                
this.clean_node(obj);
                                if(
s_call) { s_call.call(this); }
                            }
                            else {
                                if(
obj && obj !== -1) {
                                    
obj.children("a.jstree-loading").removeClass("jstree-loading");
                                    
obj.removeData("jstree_is_loading");
                                    if(
s.correct_state) { 
                                        
this.correct_state(obj);
                                        if(
s_call) { s_call.call(this); } 
                                    }
                                }
                                else {
                                    if(
s.correct_state) { 
                                        
this.get_container().children("ul").empty();
                                        if(
s_call) { s_call.call(this); } 
                                    }
                                }
                            }
                        }, 
this));
                        break;
                    case (!
s.data && !s.ajax):
                        if(!
obj || obj == -1) {
                            
this.get_container()
                                .
children("ul").empty()
                                .
append(this.data.html_data.original_container_html)
                                .
find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end()
                                .
filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon");
                            
this.clean_node();
                        }
                        if(
s_call) { s_call.call(this); }
                        break;
                    case (!!
s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)):
                        if(!
obj || obj == -1) {
                            
= $(s.data);
                            if(!
d.is("ul")) { = $("<ul />").append(d); }
                            
this.get_container()
                                .
children("ul").empty().append(d.children())
                                .
find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end()
                                .
filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon");
                            
this.clean_node();
                        }
                        if(
s_call) { s_call.call(this); }
                        break;
                    case (!
s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1):
                        
obj this._get_node(obj);
                        
error_func = function (xte) {
                            var 
ef this.get_settings().html_data.ajax.error
                            if(
ef) { ef.call(thisxte); }
                            if(
obj != -&& obj.length) {
                                
obj.children("a.jstree-loading").removeClass("jstree-loading");
                                
obj.removeData("jstree_is_loading");
                                if(
=== "success" && s.correct_state) { this.correct_state(obj); }
                            }
                            else {
                                if(
=== "success" && s.correct_state) { this.get_container().children("ul").empty(); }
                            }
                            if(
e_call) { e_call.call(this); }
                        };
                        
success_func = function (dtx) {
                            var 
sf this.get_settings().html_data.ajax.success
                            if(
sf) { sf.call(this,d,t,x) || d; }
                            if(
=== "" || (&& d.toString && d.toString().replace(/^[sn]+$/,"") === "")) {
                                return 
error_func.call(thisxt"");
                            }
                            if(
d) {
                                
= $(d);
                                if(!
d.is("ul")) { = $("<ul />").append(d); }
                                if(
obj == -|| !obj) { this.get_container().children("ul").empty().append(d.children()).find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); }
                                else { 
obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d).children("ul").find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); obj.removeData("jstree_is_loading"); }
                                
this.clean_node(obj);
                                if(
s_call) { s_call.call(this); }
                            }
                            else {
                                if(
obj && obj !== -1) {
                                    
obj.children("a.jstree-loading").removeClass("jstree-loading");
                                    
obj.removeData("jstree_is_loading");
                                    if(
s.correct_state) { 
                                        
this.correct_state(obj);
                                        if(
s_call) { s_call.call(this); } 
                                    }
                                }
                                else {
                                    if(
s.correct_state) { 
                                        
this.get_container().children("ul").empty();
                                        if(
s_call) { s_call.call(this); } 
                                    }
                                }
                            }
                        };
                        
s.ajax.context this;
                        
s.ajax.error error_func;
                        
s.ajax.success success_func;
                        if(!
s.ajax.dataType) { s.ajax.dataType "html"; }
                        if($.
isFunction(s.ajax.url)) { s.ajax.url s.ajax.url.call(thisobj); }
                        if($.
isFunction(s.ajax.data)) { s.ajax.data s.ajax.data.call(thisobj); }
                        $.
ajax(s.ajax);
                        break;
                }
            }
        }
    });
    
// include the HTML data plugin by default
    
$.jstree.defaults.plugins.push("html_data");
})(
jQuery);
//*/

/* 
 * jsTree themeroller plugin
 * Adds support for jQuery UI themes. Include this at the end of your plugins list, also make sure "themes" is not included.
 */
(function ($) {
    $.
jstree.plugin("themeroller", {
        
__init : function () {
            var 
this._get_settings().themeroller;
            
this.get_container()
                .
addClass("ui-widget-content")
                .
addClass("jstree-themeroller")
                .
delegate("a","mouseenter.jstree", function (e) {
                    if(!$(
e.currentTarget).hasClass("jstree-loading")) {
                        $(
this).addClass(s.item_h);
                    }
                })
                .
delegate("a","mouseleave.jstree", function () {
                    $(
this).removeClass(s.item_h);
                })
                .
bind("init.jstree", $.proxy(function (edata) { 
                        
data.inst.get_container().find("> ul > li > .jstree-loading > ins").addClass("ui-icon-refresh");
                        
this._themeroller(data.inst.get_container().find("> ul > li"));
                    }, 
this))
                .
bind("open_node.jstree create_node.jstree", $.proxy(function (edata) { 
                        
this._themeroller(data.rslt.obj);
                    }, 
this))
                .
bind("loaded.jstree refresh.jstree", $.proxy(function (e) {
                        
this._themeroller();
                    }, 
this))
                .
bind("close_node.jstree", $.proxy(function (edata) {
                        
this._themeroller(data.rslt.obj);
                    }, 
this))
                .
bind("delete_node.jstree", $.proxy(function (edata) {
                        
this._themeroller(data.rslt.parent);
                    }, 
this))
                .
bind("correct_state.jstree", $.proxy(function (edata) {
                        
data.rslt.obj
                            
.children("ins.jstree-icon").removeClass(s.opened " " s.closed " ui-icon").end()
                            .
find("> a > ins.ui-icon")
                                .
filter(function() { 
                                    return 
this.className.toString()
                                        .
replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"")
                                        .
indexOf("ui-icon-") === -1
                                }).
removeClass(s.item_open " " s.item_clsd).addClass(s.item_leaf || "jstree-no-icon");
                    }, 
this))
                .
bind("select_node.jstree", $.proxy(function (edata) {
                        
data.rslt.obj.children("a").addClass(s.item_a);
                    }, 
this))
                .
bind("deselect_node.jstree deselect_all.jstree", $.proxy(function (edata) {
                        
this.get_container()
                            .
find("a." s.item_a).removeClass(s.item_a).end()
                            .
find("a.jstree-clicked").addClass(s.item_a);
                    }, 
this))
                .
bind("dehover_node.jstree", $.proxy(function (edata) {
                        
data.rslt.obj.children("a").removeClass(s.item_h);
                    }, 
this))
                .
bind("hover_node.jstree", $.proxy(function (edata) {
                        
this.get_container()
                            .
find("a." s.item_h).not(data.rslt.obj).removeClass(s.item_h);
                        
data.rslt.obj.children("a").addClass(s.item_h);
                    }, 
this))
                .
bind("move_node.jstree", $.proxy(function (edata) {
                        
this._themeroller(data.rslt.o);
                        
this._themeroller(data.rslt.op);
                    }, 
this));
        },
        
__destroy : function () {
            var 
this._get_settings().themeroller,
                
= [ "ui-icon" ];
            $.
each(s, function (iv) {
                
v.split(" ");
                if(
v.length) { c.concat(v); }
            });
            
this.get_container()
                .
removeClass("ui-widget-content")
                .
find("." c.join(", .")).removeClass(c.join(" "));
        },
        
_fn : {
            
_themeroller : function (obj) {
                var 
this._get_settings().themeroller;
                
obj = (!obj || obj == -1) ? this.get_container_ul() : this._get_node(obj);
                
obj = (!obj || obj == -1) ? this.get_container_ul() : obj.parent();
                
obj
                    
.find("li.jstree-closed")
                        .
children("ins.jstree-icon").removeClass(s.opened).addClass("ui-icon " s.closed).end()
                        .
children("a").addClass(s.item)
                            .
children("ins.jstree-icon").addClass("ui-icon")
                                .
filter(function() { 
                                    return 
this.className.toString()
                                        .
replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"")
                                        .
indexOf("ui-icon-") === -1
                                }).
removeClass(s.item_leaf " " s.item_open).addClass(s.item_clsd || "jstree-no-icon")
                                .
end()
                            .
end()
                        .
end()
                    .
end()
                    .
find("li.jstree-open")
                        .
children("ins.jstree-icon").removeClass(s.closed).addClass("ui-icon " s.opened).end()
                        .
children("a").addClass(s.item)
                            .
children("ins.jstree-icon").addClass("ui-icon")
                                .
filter(function() { 
                                    return 
this.className.toString()
                                        .
replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"")
                                        .
indexOf("ui-icon-") === -1
                                }).
removeClass(s.item_leaf " " s.item_clsd).addClass(s.item_open || "jstree-no-icon")
                                .
end()
                            .
end()
                        .
end()
                    .
end()
                    .
find("li.jstree-leaf")
                        .
children("ins.jstree-icon").removeClass(s.closed " ui-icon " s.opened).end()
                        .
children("a").addClass(s.item)
                            .
children("ins.jstree-icon").addClass("ui-icon")
                                .
filter(function() { 
                                    return 
this.className.toString()
                                        .
replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"")
                                        .
indexOf("ui-icon-") === -1
                                }).
removeClass(s.item_clsd " " s.item_open).addClass(s.item_leaf || "jstree-no-icon");
            }
        },
        
defaults : {
            
"opened"    "ui-icon-triangle-1-se",
            
"closed"    "ui-icon-triangle-1-e",
            
"item"        "ui-state-default",
            
"item_h"    "ui-state-hover",
            
"item_a"    "ui-state-active",
            
"item_open"    "ui-icon-folder-open",
            
"item_clsd"    "ui-icon-folder-collapsed",
            
"item_leaf"    "ui-icon-document"
        
}
    });
    $(function() {
        var 
css_string '' 
            
'.jstree-themeroller .ui-icon { overflow:visible; } ' 
            
'.jstree-themeroller a { padding:0 2px; } ' 
            
'.jstree-themeroller .jstree-no-icon { display:none; }';
        $.
vakata.css.add_sheet({ str css_stringtitle "jstree" });
    });
})(
jQuery);
//*/

/* 
 * jsTree unique plugin
 * Forces different names amongst siblings (still a bit experimental)
 * NOTE: does not check language versions (it will not be possible to have nodes with the same title, even in different languages)
 */
(function ($) {
    $.
jstree.plugin("unique", {
        
__init : function () {
            
this.get_container()
                .
bind("before.jstree", $.proxy(function (edata) { 
                        var 
nms = [], res truept;
                        if(
data.func == "move_node") {
                            
// obj, ref, position, is_copy, is_prepared, skip_check
                            
if(data.args[4] === true) {
                                if(
data.args[0].&& data.args[0].o.length) {
                                    
data.args[0].o.children("a").each(function () { nms.push($(this).text().replace(/^s+/g,"")); });
                                    
res this._check_unique(nmsdata.args[0].np.find("> ul > li").not(data.args[0].o), "move_node");
                                }
                            }
                        }
                        if(
data.func == "create_node") {
                            
// obj, position, js, callback, is_loaded
                            
if(data.args[4] || this._is_loaded(data.args[0])) {
                                
this._get_node(data.args[0]);
                                if(
data.args[1] && (data.args[1] === "before" || data.args[1] === "after")) {
                                    
this._get_parent(data.args[0]);
                                    if(!
|| === -1) { this.get_container(); }
                                }
                                if(
typeof data.args[2] === "string") { nms.push(data.args[2]); }
                                else if(!
data.args[2] || !data.args[2].data) { nms.push(this._get_string("new_node")); }
                                else { 
nms.push(data.args[2].data); }
                                
res this._check_unique(nmsp.find("> ul > li"), "create_node");
                            }
                        }
                        if(
data.func == "rename_node") {
                            
// obj, val
                            
nms.push(data.args[1]);
                            
this._get_node(data.args[0]);
                            
this._get_parent(t);
                            if(!
|| === -1) { this.get_container(); }
                            
res this._check_unique(nmsp.find("> ul > li").not(t), "rename_node");
                        }
                        if(!
res) {
                            
e.stopPropagation();
                            return 
false;
                        }
                    }, 
this));
        },
        
defaults : { 
            
error_callback : $.noop
        
},
        
_fn : { 
            
_check_unique : function (nmspfunc) {
                var 
cnms = [], ok true;
                
p.children("a").each(function () { cnms.push($(this).text().replace(/^s+/g,"")); });
                if(!
cnms.length || !nms.length) { return true; }
                $.
each(nms, function (iv) {
                    if($.
inArray(vcnms) !== -1) {
                        
ok false;
                        return 
false;
                    }
                });
                if(!
ok) {
                    
this._get_settings().unique.error_callback.call(nullnmspfunc);
                }
                return 
ok;
            },
            
check_move : function () {
                if(!
this.__call_old()) { return false; }
                var 
this._get_move(), nms = [];
                if(
p.&& p.o.length) {
                    
p.o.children("a").each(function () { nms.push($(this).text().replace(/^s+/g,"")); });
                    return 
this._check_unique(nmsp.np.find("> ul > li").not(p.o), "check_move");
                }
                return 
true;
            }
        }
    });
})(
jQuery);
//*/

/*
 * jsTree wholerow plugin
 * Makes select and hover work on the entire width of the node
 * MAY BE HEAVY IN LARGE DOM
 */
(function ($) {
    $.
jstree.plugin("wholerow", {
        
__init : function () {
            if(!
this.data.ui) { throw "jsTree wholerow: jsTree UI plugin not included."; }
            
this.data.wholerow.html false;
            
this.data.wholerow.to false;
            
this.get_container()
                .
bind("init.jstree", $.proxy(function (edata) { 
                        
this._get_settings().core.animation 0;
                    }, 
this))
                .
bind("open_node.jstree create_node.jstree clean_node.jstree loaded.jstree", $.proxy(function (edata) { 
                        
this._prepare_wholerow_spandata && data.rslt && data.rslt.obj data.rslt.obj : -);
                    }, 
this))
                .
bind("search.jstree clear_search.jstree reopen.jstree after_open.jstree after_close.jstree create_node.jstree delete_node.jstree clean_node.jstree", $.proxy(function (edata) { 
                        if(
this.data.to) { clearTimeout(this.data.to); }
                        
this.data.to setTimeout( (function (to) { return function() { t._prepare_wholerow_ul(o); }; })(this,  data && data.rslt && data.rslt.obj data.rslt.obj : -1), 0);
                    }, 
this))
                .
bind("deselect_all.jstree", $.proxy(function (edata) { 
                        
this.get_container().find(" > .jstree-wholerow .jstree-clicked").removeClass("jstree-clicked " + (this.data.themeroller this._get_settings().themeroller.item_a "" ));
                    }, 
this))
                .
bind("select_node.jstree deselect_node.jstree ", $.proxy(function (edata) { 
                        
data.rslt.obj.each(function () { 
                            var 
ref data.inst.get_container().find(" > .jstree-wholerow li:visible:eq(" + ( parseInt((($(this).offset().top data.inst.get_container().offset().top data.inst.get_container()[0].scrollTop) / data.inst.data.core.li_height),10)) + ")");
                            
// ref.children("a")[e.type === "select_node" ? "addClass" : "removeClass"]("jstree-clicked");
                            
ref.children("a").attr("class",data.rslt.obj.children("a").attr("class"));
                        });
                    }, 
this))
                .
bind("hover_node.jstree dehover_node.jstree", $.proxy(function (edata) { 
                        
this.get_container().find(" > .jstree-wholerow .jstree-hovered").removeClass("jstree-hovered " + (this.data.themeroller this._get_settings().themeroller.item_h "" ));
                        if(
e.type === "hover_node") {
                            var 
ref this.get_container().find(" > .jstree-wholerow li:visible:eq(" + ( parseInt(((data.rslt.obj.offset().top this.get_container().offset().top this.get_container()[0].scrollTop) / this.data.core.li_height),10)) + ")");
                            
// ref.children("a").addClass("jstree-hovered");
                            
ref.children("a").attr("class",data.rslt.obj.children(".jstree-hovered").attr("class"));
                        }
                    }, 
this))
                .
delegate(".jstree-wholerow-span, ins.jstree-icon, li""click.jstree", function (e) {
                        var 
= $(e.currentTarget);
                        if(
e.target.tagName === "A" || (e.target.tagName === "INS" && n.closest("li").is(".jstree-open, .jstree-closed"))) { return; }
                        
n.closest("li").children("a:visible:eq(0)").click();
                        
e.stopImmediatePropagation();
                    })
                .
delegate("li""mouseover.jstree", $.proxy(function (e) {
                        
e.stopImmediatePropagation();
                        if($(
e.currentTarget).children(".jstree-hovered, .jstree-clicked").length) { return false; }
                        
this.hover_node(e.currentTarget);
                        return 
false;
                    }, 
this))
                .
delegate("li""mouseleave.jstree", $.proxy(function (e) {
                        if($(
e.currentTarget).children("a").hasClass("jstree-hovered").length) { return; }
                        
this.dehover_node(e.currentTarget);
                    }, 
this));
            if(
is_ie7 || is_ie6) {
                $.
vakata.css.add_sheet({ str ".jstree-" this.get_index() + " { position:relative; } "title "jstree" });
            }
        },
        
defaults : {
        },
        
__destroy : function () {
            
this.get_container().children(".jstree-wholerow").remove();
            
this.get_container().find(".jstree-wholerow-span").remove();
        },
        
_fn : {
            
_prepare_wholerow_span : function (obj) {
                
obj = !obj || obj == -this.get_container().find("> ul > li") : this._get_node(obj);
                if(
obj === false) { return; } // added for removing root nodes
                
obj.each(function () {
                    $(
this).find("li").andSelf().each(function () {
                        var 
$t = $(this);
                        if(
$t.children(".jstree-wholerow-span").length) { return true; }
                        
$t.prepend("<span class='jstree-wholerow-span' style='width:" + ($t.parentsUntil(".jstree","li").length 18) + "px;'>&#160;</span>");
                    });
                });
            },
            
_prepare_wholerow_ul : function () {
                var 
this.get_container().children("ul").eq(0), o.html();
                
o.addClass("jstree-wholerow-real");
                if(
this.data.wholerow.last_html !== h) {
                    
this.data.wholerow.last_html h;
                    
this.get_container().children(".jstree-wholerow").remove();
                    
this.get_container().append(
                        
o.clone().removeClass("jstree-wholerow-real")
                            .
wrapAll("<div class='jstree-wholerow' />").parent()
                            .
width(o.parent()[0].scrollWidth)
                            .
css("top", (o.height() + ( is_ie7 0)) * -)
                            .
find("li[id]").each(function () { this.removeAttribute("id"); }).end()
                    );
                }
            }
        }
    });
    $(function() {
        var 
css_string '' 
            
'.jstree .jstree-wholerow-real { position:relative; z-index:1; } ' 
            
'.jstree .jstree-wholerow-real li { cursor:pointer; } ' 
            
'.jstree .jstree-wholerow-real a { border-left-color:transparent !important; border-right-color:transparent !important; } ' 
            
'.jstree .jstree-wholerow { position:relative; z-index:0; height:0; } ' 
            
'.jstree .jstree-wholerow ul, .jstree .jstree-wholerow li { width:100%; } ' 
            
'.jstree .jstree-wholerow, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow li, .jstree .jstree-wholerow a { margin:0 !important; padding:0 !important; } ' 
            
'.jstree .jstree-wholerow, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow li { background:transparent !important; }' 
            
'.jstree .jstree-wholerow ins, .jstree .jstree-wholerow span, .jstree .jstree-wholerow input { display:none !important; }' 
            
'.jstree .jstree-wholerow a, .jstree .jstree-wholerow a:hover { text-indent:-9999px; !important; width:100%; padding:0 !important; border-right-width:0px !important; border-left-width:0px !important; } ' 
            
'.jstree .jstree-wholerow-span { position:absolute; left:0; margin:0px; padding:0; height:18px; border-width:0; padding:0; z-index:0; }';
        if(
is_ff2) {
            
css_string += '' 
                
'.jstree .jstree-wholerow a { display:block; height:18px; margin:0; padding:0; border:0; } ' 
                
'.jstree .jstree-wholerow-real a { border-color:transparent !important; } ';
        }
        if(
is_ie7 || is_ie6) {
            
css_string += '' 
                
'.jstree .jstree-wholerow, .jstree .jstree-wholerow li, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow a { margin:0; padding:0; line-height:18px; } ' 
                
'.jstree .jstree-wholerow a { display:block; height:18px; line-height:18px; overflow:hidden; } ';
        }
        $.
vakata.css.add_sheet({ str css_stringtitle "jstree" });
    });
})(
jQuery);
//*/

/*
* jsTree model plugin
* This plugin gets jstree to use a class model to retrieve data, creating great dynamism
*/
(function ($) {
    var 
nodeInterface = ["getChildren","getChildrenCount","getAttr","getName","getProps"],
        
validateInterface = function(objinter) {
            var 
valid true;
            
obj obj || {};
            
inter = [].concat(inter);
            $.
each(inter, function (iv) {
                if(!$.
isFunction(obj[v])) { valid false; return false; }
            });
            return 
valid;
        };
    $.
jstree.plugin("model", {
        
__init : function () {
            if(!
this.data.json_data) { throw "jsTree model: jsTree json_data plugin not included."; }
            
this._get_settings().json_data.data = function (nb) {
                var 
obj = (== -1) ? this._get_settings().model.object n.data("jstree_model");
                if(!
validateInterface(objnodeInterface)) { return b.call(nullfalse); }
                if(
this._get_settings().model.async) {
                    
obj.getChildren($.proxy(function (data) {
                        
this.model_done(datab);
                    }, 
this));
                }
                else {
                    
this.model_done(obj.getChildren(), b);
                }
            };
        },
        
defaults : {
            
object false,
            
id_prefix false,
            
async false
        
},
        
_fn : {
            
model_done : function (datacallback) {
                var 
ret = [], 
                    
this._get_settings(),
                    
_this this;

                if(!$.
isArray(data)) { data = [data]; }
                $.
each(data, function (ind) {
                    var 
nd.getProps() || {};
                    
r.attr nd.getAttr() || {};
                    if(
nd.getChildrenCount()) { r.state "closed"; }
                    
r.data nd.getName();
                    if(!$.
isArray(r.data)) { r.data = [r.data]; }
                    if(
_this.data.types && $.isFunction(nd.getType)) {
                        
r.attr[s.types.type_attr] = nd.getType();
                    }
                    if(
r.attr.id && s.model.id_prefix) { r.attr.id s.model.id_prefix r.attr.id; }
                    if(!
r.metadata) { r.metadata = { }; }
                    
r.metadata.jstree_model nd;
                    
ret.push(r);
                });
                
callback.call(nullret);
            }
        }
    });
})(
jQuery);
//*/

})();
?>
Онлайн: 1
Реклама