Current File : /home/aventura/www/site/wp-content/plugins/wp-smushit/assets/js/admin.min.js.map |
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./_src/js/app.js","webpack:///./_src/js/modules/admin.js","webpack:///./_src/js/modules/bulk-smush.js","webpack:///./_src/js/modules/modals.js","webpack:///./_src/js/modules/directory-smush.js","webpack:///./node_modules/jquery.fancytree/dist/modules/jquery.fancytree.js","webpack:///./node_modules/jquery.fancytree/dist/modules/jquery.fancytree.ui-deps.js","webpack:///./_src/js/modules/directory-scanner.js","webpack:///./_src/js/modules/notice.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_AMD_DEFINE_RESULT__","global","factory","document","w","Error","window","this","noGlobal","arr","getProto","getPrototypeOf","slice","concat","push","indexOf","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","isWindow","preservedScriptAttributes","type","src","noModule","DOMEval","code","doc","node","script","createElement","text","head","appendChild","parentNode","removeChild","toType","jQuery","selector","context","fn","init","rtrim","isArrayLike","length","jquery","constructor","toArray","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","options","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","trim","makeArray","results","inArray","second","grep","invert","matches","callbackExpect","arg","guid","iterator","split","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","pop","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","disabledAncestor","addCombinator","disabled","dir","next","childNodes","e","els","seed","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","nodeName","getAttribute","setAttribute","toSelector","join","testContext","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","escape","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","rneedsContext","rsingleTag","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","targets","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isHiddenWithinTree","style","display","css","swap","old","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","values","hide","toggle","rcheckableType","rtagName","rscriptType","wrapMap","option","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","optgroup","tbody","tfoot","colgroup","caption","th","rhtml","buildFragment","scripts","selection","ignored","wrap","fragment","createDocumentFragment","nodes","htmlPrefilter","createTextNode","div","checkClone","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","on","types","one","origFn","event","off","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","preventDefault","stopPropagation","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","Event","originalEvent","writable","load","noBubble","trigger","blur","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","stopImmediatePropagation","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rxhtmlTag","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","finalPropName","cssProps","capName","vendorPropName","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","Tween","easing","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","origName","isCustomProp","setProperty","isFinite","getClientRects","getBoundingClientRect","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","height","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","*","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","parseInt","for","class","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","isTrigger","parentWindow","simulate","triggerHandler","attaches","nonce","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","text script","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","hover","fnOver","fnOut","unbind","delegate","undelegate","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","_jQuery","_$","$","noConflict","WP_Smush","wp_smush_msgs","progress_bar","cur_ele","txt","progress_button","all_done","membership_validity","member_validity_notice","show_warning","remove_element","update_image_stats","new_size","attachmentSize","sizeStrongEl","size","WDP","showOverlay","title","quick_setup_title","smushAddParams","errors","wp_smushit_data","geturlparam","$sURLVariables","search","substring","$sParameterName","Smush","$button","smush_type","skip_resmush","_typeof","is_bulk","ajaxurl","$log","ids","resmush","unsmushed","itm","is_bulk_resmush","$status","single_ajax_suffix","bulk_ajax_suffix","action","$id","$send_url","$getnxt","attachment_id","get_next","_nonce","bulk_start","single_start","show_loader","enable_button","smushing","hide_loader","single_done","request","stats_div","error_msg","stats","sync_stats","message_holder","progress_message","count_images","count_smushed","count_total","count_resize","count_supersmushed","savings_bytes","savings_conversion","savings_resize","size_before","size_after","update_stats","bulk_done","is_resolved","free_exceeded","bulk_resume","update_remaining_count","update_progress","_res","update_localized_stats","_update_progress","_update_progress_status","$progress_bar","smushed","total","progress_status","continue","continue_smush","increment_errors","call_ajax","nonce_value","current_id","update_smush_ids","nonce_field","res","error_class","error_message","ajax_error_message","error_count","image_count","bind_deferred_events","error_in_bulk","cancel_ajax","u_index","bulk_stop","process_smush_action","current_button","smush_action","c_element","disable_links","post","enable_links","formatBytes","abs","units","u","toFixed","precise_round","decimals","sign","pow","run_re_check","process_settings","scan_type","get_ui","wp_smush_options_nonce","resmush_ids","count_image","bytes","smush_percent","notices","unsmushed_count","smushed_count","update_progress_bar_resmush","notice","super_smush","enable_lossy","super_smush_stats","resmush_complete","resmush_check","image_stats","is_lossy","super_savings","is_nextgen","formatted_size","getFormatFromString","getSizeFromString","savings_percent","smush_conversion_savings","conversion_savings","smush_resize_savings","savings_value","resize_savings","resize_message","savings","orig_diff","pro_savings","set_pro_savings","smush_pro_savings","pro_savings_percent","pro_savings_bytes","goToByScroll","slide_symbol","$el","setting_type","setting_input","strip_exif","smush_original","resize_images","smush_pngjpg","update_button_txt","checking","savings_dir_smush","orig_size","image_size","scroll_and_enable_resize","scroll_and_enable_lossy","setting_hash","keypress","wrapper_div","width_only","height_only","resize_checkbox","width_input","width_error_note","height_input","height_error_note","width_error","height_error","resize_sizes","validate_resize_settings","settings_wrap","notice_wrap","membership_valid","membership_invalid","wp_smush_run_re_check","dir_smush","ajax_error","stats_human","stats_percent","human","combined_stats","c_stats","total_count","update_cummulative_stats","keyup","modal","wpsmush","element","SUI","dialogs","reload","form","_jquery","directory","tree","progress_dialog","scanner","Scanner","totalSteps","currentScanStep","showSmushDialog","initFileTree","selectedFolders","getSelectedNodes","abs_path","paths","forEach","folder","smush_path","image_list_nonce","showProgressDialog","scan","cancel","directory_url","resume","getDirectoryList","list_nonce","add_dir","smushButton","createTree","autoCollapse","clickFolderMode","debugLevel","selectMode","lazyLoad","loadChildren","fixSelection3AfterClick","items","progress_smushed","updateProgressBar","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","ui","fancytree","FT","TEST_IMG","REX_HTML","REX_TOOLTIP","ENTITY_MAP","&","<","\"","'","/","IGNORE_KEYCODES","16","17","18","SPECIAL_KEYCODES","8","9","10","13","19","20","27","32","33","34","35","36","37","38","39","40","45","46","59","61","96","97","98","99","100","101","102","103","104","105","106","107","109","110","111","112","113","114","115","116","117","118","119","120","121","122","123","144","145","173","186","187","188","189","190","191","192","219","220","221","222","MOUSE_BUTTONS","1","2","3","CLASS_ATTRS","CLASS_ATTR_MAP","TREE_ATTRS","NODE_ATTRS","NODE_ATTR_MAP","NODE_ATTR_LOWERCASE_MAP","NONE_NODE_DATA_MAP","_assert","getTime","FancytreeNode","_findDirectChild","ptr","cl","_setChildren","addChildren","firstNode","origFirstChild","getFirstChild","origLastChild","getLastChild","nodeList","render","renderStatus","ul","fixSelection3FromEndNodes","triggerModifyChild","addNode","getParent","getNextSibling","addPagingNode","strings","moreData","statusNodeType","icon","partload","appendSibling","applyPatch","patch","_getResolvedPromise","IGNORE_MAP","removeChildren","isVisible","renderTitle","setExpanded","collapseSiblings","_callHook","copyTo","toDict","countChildren","debug","consoleApply","discard","resetLazy","discardMarkup","includeSelf","findAll","_makeNodeTitleMatcher","visit","findFirst","_changeSelectStatusAttrs","changed","unselectable","evalOption","unselectableStatus","partsel","callOpts","isSelected","_walk","child","allSelected","someSelected","unselState","visitParents","fromDict","dict","getChildren","hasChildren","getIndex","getIndexHier","separator","digits","getParentList","substr","getKeyPath","excludeSelf","path","sep","keyPathSeparator","getLevel","level","dtn","ac","includeRoot","getPrevSibling","stopOnParents","lazy","isStatusNode","focusNode","info","isActive","activeNode","isBelowOf","otherNode","isChildOf","isDescendantOf","isExpanded","isFirstSibling","isFolder","isLastSibling","isLazy","isLoaded","isLoading","_isLoading","isRoot","isRootNode","isPartsel","isPartload","rootNode","isPagingNode","isTopLevel","isUndefined","forceReload","wasExpanded","_triggerNodeEvent","makeVisible","deferreds","dfd","effects","noAnimation","scroll","scrollIntoView","moveTo","targetNode","prevParent","targetParent","navigate","where","activate","KC","sib","_goto","span","setFocus","setActive","BACKSPACE","HOME","END","LEFT","RIGHT","UP","DOWN","childNode","force","scheduleAction","ms","x","_isNode","topNode","topNodeY","nodeY","containerOffsetTop","scrollOfs","scrollParent","$container","nodeHeight","topOfs","bottomOfs","bottom","containerHeight","$animateTarget","isParentWindow","newScrollTop","innerHeight","clientHeight","setSelected","setStatus","details","setTitle","triggerModify","sortChildren","cmp","y","recursive","wasAdded","statusElem","statusClassPropName","curClasses","extraClasses","toggleExpanded","toggleSelected","operation","modifyChild","visitAndLoad","_recursion","loaders","visitSiblings","Fancytree","_makeHookContext","ctx","widget","typeInfo","contextObject","_extraArgs","_setExpiringValue","_tempCache","expire","_getExpiringValue","entry","_requireExtension","required","thisName","_local","extList","extensions","isBefore","isMissing","ext","badOrder","activateKey","getNodeByKey","patchList","p2","patchCount","deferredList","_makeResolveFunc","clear","enableUpdate","_enableUpdate","findNextNode","startNode","visibleOnly","reMatch","_makeNodeTitleStartMatcher","stopNode","parentChildren","matchingNode","walkVisible","grandParent","siblingCount","generateFormElements","selectedName","_id","activeName","$result","_appender","getActiveNode","getFocusNode","searchRoot","idPrefix","ftnode","getRootNode","_hasFocus","loadKeyPath","keyPathList","optsOrCallback","pathSegList","matchKey","charAt","_loadKeyPathImpl","remainMap","tmpParent","segList","subDfd","__findChild","__lazyload","errMsg","nodeKey","remain","reactivate","noFocus","selectAll","_trigger","_triggerTreeEvent","visitRows","_visitRowsUp","siblingOfs","skipFirstNode","includeHidden","nodeClick","targetType","focusOnSelect","nodeSetFocus","nodeCollapseSiblings","nodeDblclick","nodeKeydown","matchNode","stamp","whichChar","clean","$target","handled","autoActivate","quicksearch","lastQuicksearchTime","lastQuicksearchTerm","eventToString","nodeSetExpanded","nodeToggleSelected","nodeSetActive","nodeLoadChildren","requestId","_requestId","debugDelay","textStatus","errorObj","postProcess","enableAspx","errorThrown","reason","nodeSetStatus","ctxErr","metaData","nodeLoadKeyPath","nodeRemoveChild","subCtx","nodeRemoveChildren","nodeRemoveMarkup","nodeRemoveChildMarkup","li","nodeRenderStatus","nodeRender","collapsed","_recursive","childLI","childNode1","childNode2","aria","firstTime","successorLi","generateIds","nodeRenderTitle","createNode","renderNode","$div","nodeTitle","role","tooltip","iconTooltip","ares","minExpandLevel","radiogroup","iconClass","_escapeTooltip","imagePath","escapeHtml","titlesTabbable","escapeTitles","enhanceTitle","$title","$ariaElem","isLastSib","cn","_classNames","cnList","focused","Boolean","lastsib","loading","_error","statusNodePrefix","combinedExpanderPrefix","combinedIconPrefix","noEvents","_getRejectedPromise","activeVisible","_afterLoad","prevAC","autoScroll","effect","toggleEffect","animating","ctx2","isInput","calledByNode","uniqueId","nodeSetSelected","_lastSelectIntent","lastSelectedNode","_setStatusNode","_clearStatusNode","loadError","noData","nodeToggleExpanded","treeClear","treeCreate","treeDestroy","$source","treeInit","rtl","treeLoad","$ul","rootCtx","parseHtml","_getElementDataAsDict","treeRegisterNode","treeSetFocus","_lastMousedownNode","treeSetOption","callDefault","callCreate","callRender","_super","Widget","_setOption","keyboard","_create","extension","extName","_extensions","_simpleDeepMerge","_subclassObject","icons","tabbable","_init","_bind","destroy","_unbind","_ns","getNode","prevPhase","phase","et","getEventTarget","getTree","version","buildType","_nextId","_nextNodeKey","_FancytreeClass","_FancytreeNodeClass","jquerySupports","positionMyOfs","dottedVersion","major","minor","verParts","testParts","isVersionAtLeast","cond","debounce","invokeAsap","fixPositionOptions","my","at","myParts","atParts","dx","dy","tcn","getEventTargetType","optionName","nodeObject","treeOptions","treeOpt","nodeOpt","setSpanIcon","baseClass","$span","keyEventToString","overrideMethod","instance","methodName","prevSuper","iPos","tmp2","allData","lowerCaseAttr","$li","$liSpan","$liA","registerExtension","definition","unescapeHtml","_makeVirtualFunction","prevFunc","baseFunc","_superApply","prevLocal","prevSuperApply","attrName","argArray","uiFancytree","unselectableIgnore","hideCheckbox","defaultKey","lazyload","loaderror","removeNode","columns","systemFocusElement","ariaPropName","nodeContainerAttrName","fakeParent","widgetUuid","widgetSlice","existingConstructor","basePrototype","proxiedPrototype","fullName","_createWidget","_proto","_childConstructors","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","childPrototype","bridge","inputIndex","inputLength","isMethodCall","methodValue","defaultElement","uuid","eventNamespace","bindings","hoverable","focusable","classesElementLookup","_on","_getCreateOptions","_setOptionDisabled","_getCreateEventData","_destroy","_removeClass","curOption","_setOptions","_setOptionClasses","classKey","currentElements","_classes","_toggleClass","enable","full","processClassString","checkOption","_untrackClassesElement","_addClass","suppressDisabledCheck","delegateElement","handlerProxy","eventName","_off","_delay","_hoverable","_focusable","focusout","defaultEffect","hasOptions","effectName","cachedScrollbarWidth","rhorizontal","rvertical","roffset","rposition","rpercent","_position","getOffsets","offsets","parseCss","scrollbarWidth","w1","w2","innerDiv","clientWidth","getScrollInfo","within","isDocument","hasOverflowX","scrollWidth","hasOverflowY","scrollHeight","getWithinInfo","withinElement","hasOffset","outerWidth","outerHeight","of","atOffset","targetWidth","targetHeight","targetOffset","basePosition","dimensions","scrollInfo","collision","getDimensions","horizontalOffset","verticalOffset","collisionPosition","elemWidth","elemHeight","marginTop","collisionWidth","collisionHeight","myOffset","feedback","horizontal","vertical","important","fit","newOverRight","withinOffset","collisionPosLeft","overLeft","overRight","newOverBottom","collisionPosTop","overTop","overBottom","flip","newOverLeft","offsetLeft","newOverTop","offsetTop","flipfit","COMMA","DELETE","ENTER","ESCAPE","PAGE_DOWN","PAGE_UP","PERIOD","SPACE","TAB","excludeStaticParent","overflowRegex","removeUniqueId","currentStep","cancelling","remainingSteps","getProgress","min","onFinishStep","onFinish","limitReached","dialog","el_notice","btn_act","btn_dismiss","remove_notice","notify_wordpress","send_dismiss_request","ev"],"mappings":"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","file":"admin.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 5);\n","/*!\n * jQuery JavaScript Library v3.3.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML <object> elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, doc, node ) {\n\t\tdoc = doc || document;\n\n\t\tvar i,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\t\t\t\tif ( node[ i ] ) {\n\t\t\t\t\tscript[ i ] = node[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.3.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n if ( nodeName( elem, \"iframe\" ) ) {\n return elem.contentDocument;\n }\n\n // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n // Treat the template element as a regular one in browsers that\n // don't support it.\n if ( nodeName( elem, \"template\" ) ) {\n elem = elem.content || elem;\n }\n\n return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc, node );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = div.offsetWidth === 36 || \"absolute\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\t\t) );\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\t\tval = curCSS( elem, dimension, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox;\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = valueIsBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ dimension ] );\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\tif ( val === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) {\n\n\t\tval = elem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];\n\n\t\t// offsetWidth/offsetHeight provide border-box values\n\t\tvalueIsBorderBox = true;\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\t\t\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra && boxModelAdjustment(\n\t\t\t\t\telem,\n\t\t\t\t\tdimension,\n\t\t\t\t\textra,\n\t\t\t\t\tisBorderBox,\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && support.scrollboxSize() === styles.position ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/**\n * Admin modules\n */\nrequire( './modules/admin' );\nrequire( './modules/bulk-smush' );\nrequire( './modules/modals' );\nrequire( './modules/directory-smush' );\n\n/**\n * Notice scripts.\n *\n * Notices are used in the following functions:\n *\n * @used-by WpSmushitAdmin::smush_updated()\n * @used-by WpSmushS3::3_support_required_notice()\n * @used-by WpSmushBulkUi::installation_notice()\n *\n * TODO: should this be moved out in a separate file like common.scss?\n */\nrequire( './modules/notice' );","/**\n * Processes bulk smushing\n *\n * @author Umesh Kumar <umeshsingla05@gmail.com>\n *\n * TODO: Use Element tag for all the class selectors\n */\nlet WP_Smush = WP_Smush || {};\nwindow.WP_Smush = WP_Smush;\n\n/**\n * Smush translation strings.\n *\n * @var {array} wp_smush_msgs\n */\nif ( wp_smush_msgs ) {\n\tconst wp_smush_msgs = wp_smush_msgs;\n}\n\n/**\n * Show/hide the progress bar for Smushing/Restore/SuperSmush\n *\n * @param cur_ele\n * @param txt Message to be displayed\n * @param {string} state show/hide\n */\nlet progress_bar = function ( cur_ele, txt, state ) {\n\t//Update Progress bar text and show it\n\tlet progress_button = cur_ele.parents().eq( 1 ).find( '.wp-smush-progress' );\n\n\tif ( 'show' === state ) {\n\t\tprogress_button.html( txt );\n\t} else {\n\t\t/** @var {string} wp_smush_msgs.all_done */\n\t\tprogress_button.html( wp_smush_msgs.all_done );\n\t}\n\n\tprogress_button.toggleClass( 'visible' );\n};\n\n/**\n * Check membership validity\n *\n * @param {int} data.show_warning\n */\nlet membership_validity = function ( data ) {\n\tconst member_validity_notice = jQuery( '#wp-smush-invalid-member' );\n\n\t//Check for Membership warning\n\n\tif ( 'undefined' !== typeof ( data ) && 'undefined' !== typeof ( data.show_warning ) && member_validity_notice.length > 0 ) {\n\t\tif ( data.show_warning ) {\n\t\t\tmember_validity_notice.show();\n\t\t} else {\n\t\t\tmember_validity_notice.hide();\n\t\t}\n\t}\n};\n\nlet remove_element = function ( el, timeout ) {\n\tif ( typeof timeout === 'undefined' ) {\n\t\ttimeout = 100;\n\t}\n\tel.fadeTo( timeout, 0, function () {\n\t\tel.slideUp( timeout, function () {\n\t\t\tel.remove();\n\t\t} );\n\t} );\n};\n\njQuery( function ( $ ) {\n\t'use strict';\n\n\t/**\n\t * Remove the quick setup dialog\n\t */\n\tfunction remove_dialog() {\n\t\t$( 'dialog#smush-quick-setup' ).remove();\n\t}\n\n\t/**\n\t * Update image size in attachment info panel.\n\t *\n\t * @since 2.8\n\t *\n\t * @param new_size\n\t */\n\tfunction update_image_stats( new_size ) {\n\t\tif ( 0 === new_size ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet attachmentSize = $( '.attachment-info .file-size' );\n\t\tconst currentSize = attachmentSize.contents().filter( function () {\n\t\t\treturn this.nodeType === 3;\n\t\t} ).text();\n\n\t\t// There is a space before the size.\n\t\tif ( currentSize !== ( ' ' + new_size ) ) {\n\t\t\tconst sizeStrongEl = attachmentSize.contents().filter( function () {\n\t\t\t\treturn this.nodeType === 1;\n\t\t\t} ).text();\n\t\t\tattachmentSize.html( '<strong>' + sizeStrongEl + '</strong> ' + new_size );\n\t\t}\n\t}\n\n\t// Show the Quick Setup dialog.\n\tif ( $( '#smush-quick-setup' ).size() > 0 ) {\n\t\t/** @var {string} wp_smush_msgs.quick_setup_title */\n\t\tWDP.showOverlay( \"#smush-quick-setup\", {\n\t\t\ttitle: wp_smush_msgs.quick_setup_title,\n\t\t\tclass: 'no-close wp-smush-overlay wp-smush-quick-setup'\n\t\t} );\n\t\tremove_dialog();\n\t}\n\n\tlet smushAddParams = function ( url, data ) {\n\t\tif ( !$.isEmptyObject( data ) ) {\n\t\t\turl += ( url.indexOf( '?' ) >= 0 ? '&' : '?' ) + $.param( data );\n\t\t}\n\n\t\treturn url;\n\t};\n\n\t// url for smushing\n\tWP_Smush.errors = [];\n\n\t/** @var {array} wp_smushit_data */\n\tWP_Smush.timeout = wp_smushit_data.timeout;\n\n\t/**\n\t * Checks for the specified param in URL\n\t * @param arg\n\t * @returns {*}\n\t */\n\tWP_Smush.geturlparam = function ( arg ) {\n\t\tvar $sPageURL = window.location.search.substring( 1 );\n\t\tvar $sURLVariables = $sPageURL.split( '&' );\n\n\t\tfor ( var i = 0; i < $sURLVariables.length; i++ ) {\n\t\t\tvar $sParameterName = $sURLVariables[i].split( '=' );\n\t\t\tif ( $sParameterName[0] == arg ) {\n\t\t\t\treturn $sParameterName[1];\n\t\t\t}\n\t\t}\n\t};\n\n\tWP_Smush.Smush = function ( $button, bulk, smush_type ) {\n\t\tvar self = this;\n\t\tvar skip_resmush = $button.data( 'smush' );\n\t\t//If smush attribute is not defined, Need not skip resmush ids\n\t\tskip_resmush = ( ( typeof skip_resmush == typeof undefined ) || skip_resmush == false ) ? false : true;\n\n\t\tthis.init = function () {\n\t\t\tthis.$button = $( $button[0] );\n\t\t\tthis.is_bulk = typeof bulk ? bulk : false;\n\t\t\tthis.url = ajaxurl;\n\t\t\tthis.$log = $( \".smush-final-log\" );\n\t\t\tthis.deferred = jQuery.Deferred();\n\t\t\tthis.deferred.errors = [];\n\n\t\t\tvar ids = wp_smushit_data.resmush.length > 0 && !skip_resmush ? ( wp_smushit_data.unsmushed.length > 0 ? wp_smushit_data.resmush.concat( wp_smushit_data.unsmushed ) : wp_smushit_data.resmush ) : wp_smushit_data.unsmushed;\n\t\t\tif ( 'object' == typeof ids ) {\n\t\t\t\t//If button has resmush class, and we do have ids that needs to resmushed, put them in the list\n\t\t\t\tthis.ids = ids.filter( function ( itm, i, a ) {\n\t\t\t\t\treturn i == a.indexOf( itm );\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tthis.ids = ids;\n\t\t\t}\n\n\t\t\tthis.is_bulk_resmush = wp_smushit_data.resmush.length > 0 && !skip_resmush ? true : false;\n\n\t\t\tthis.$status = this.$button.parent().find( '.smush-status' );\n\n\t\t\t//Added for NextGen support\n\t\t\tthis.smush_type = 'undefined' != typeof smush_type ? smush_type : 'media';\n\t\t\tthis.single_ajax_suffix = 'nextgen' == this.smush_type ? 'smush_manual_nextgen' : 'wp_smushit_manual';\n\t\t\tthis.bulk_ajax_suffix = 'nextgen' == this.smush_type ? 'wp_smushit_nextgen_bulk' : 'wp_smushit_bulk';\n\t\t\tthis.url = this.is_bulk ? smushAddParams( this.url, {action: this.bulk_ajax_suffix} ) : smushAddParams( this.url, {action: this.single_ajax_suffix} );\n\t\t};\n\n\t\t/** Send Ajax request for smushing the image **/\n\t\tWP_Smush.ajax = function ( is_bulk_resmush, $id, $send_url, $getnxt, nonce ) {\n\t\t\t\"use strict\";\n\t\t\tvar param = {\n\t\t\t\tis_bulk_resmush: is_bulk_resmush,\n\t\t\t\tattachment_id: $id,\n\t\t\t\tget_next: $getnxt,\n\t\t\t\t_nonce: nonce\n\t\t\t};\n\t\t\tparam = jQuery.param( param );\n\t\t\treturn $.ajax( {\n\t\t\t\ttype: \"GET\",\n\t\t\t\tdata: param,\n\t\t\t\turl: $send_url,\n\t\t\t\ttimeout: WP_Smush.timeout,\n\t\t\t\tdataType: 'json'\n\t\t\t} );\n\t\t};\n\n\t\t//Show loader in button for single and bulk smush\n\t\tthis.start = function () {\n\t\t\tthis.$button.attr( 'disabled', 'disabled' );\n\t\t\tthis.$button.addClass( 'wp-smush-started' );\n\n\t\t\tthis.bulk_start();\n\t\t\tthis.single_start();\n\t\t};\n\n\t\tthis.bulk_start = function () {\n\t\t\tif ( !this.is_bulk ) return;\n\n\t\t\t//Hide the Bulk Div\n\t\t\t$( '.wp-smush-bulk-wrapper' ).hide();\n\n\t\t\t//Show the Progress Bar\n\t\t\t$( '.bulk-smush-wrapper .wp-smush-bulk-progress-bar-wrapper' ).show();\n\n\t\t\t//Remove any Global Notices if there\n\t\t\t$( '.sui-notice-top' ).remove();\n\n\t\t\t//Hide the Bulk Limit message\n\t\t\t$( 'p.smush-error-message.limit_exceeded' ).remove();\n\t\t\t//Hide parent wrapper, if there are no other messages\n\t\t\tif ( $( 'div.smush-final-log p' ).length <= 0 ) {\n\t\t\t\t$( 'div.smush-final-log' ).hide();\n\t\t\t}\n\t\t};\n\n\t\tthis.single_start = function () {\n\t\t\tif ( this.is_bulk ) return;\n\t\t\tthis.show_loader();\n\t\t\tthis.$status.removeClass( \"error\" );\n\t\t};\n\n\t\tthis.enable_button = function () {\n\t\t\tthis.$button.prop( \"disabled\", false );\n\t\t\t//For Bulk process, Enable other buttons\n\t\t\t$( 'button.wp-smush-all' ).removeAttr( 'disabled' );\n\t\t\t$( 'button.wp-smush-scan, a.wp-smush-lossy-enable, button.wp-smush-resize-enable, input#wp-smush-save-settings' ).removeAttr( 'disabled' );\n\t\t};\n\n\t\tthis.show_loader = function () {\n\t\t\tprogress_bar( this.$button, wp_smush_msgs.smushing, 'show' );\n\t\t};\n\n\t\tthis.hide_loader = function () {\n\t\t\tprogress_bar( this.$button, wp_smush_msgs.smushing, 'hide' );\n\t\t};\n\n\t\tthis.single_done = function () {\n\t\t\tif ( this.is_bulk ) return;\n\n\t\t\tthis.hide_loader();\n\n\t\t\tthis.request.done( function ( response ) {\n\t\t\t\tif ( typeof response.data != 'undefined' ) {\n\n\t\t\t\t\t// Check if stats div exists.\n\t\t\t\t\tvar parent = self.$status.parent();\n\t\t\t\t\tvar stats_div = parent.find( '.smush-stats-wrapper' );\n\n\t\t\t\t\t// If we've updated status, replace the content.\n\t\t\t\t\tif ( response.data.status ) {\n\t\t\t\t\t\t//remove Links\n\t\t\t\t\t\tparent.find( '.smush-status-links' ).remove();\n\t\t\t\t\t\tself.$status.replaceWith( response.data.status );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check whether to show membership validity notice or not.\n\t\t\t\t\tmembership_validity( response.data );\n\n\t\t\t\t\tif ( response.success && response.data !== \"Not processed\" ) {\n\t\t\t\t\t\tself.$status.removeClass( 'sui-hidden' );\n\t\t\t\t\t\tself.$button.parent().removeClass( 'unsmushed' ).addClass( 'smushed' );\n\t\t\t\t\t\tself.$button.remove();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.$status.addClass( \"error\" );\n\t\t\t\t\t\tself.$status.html( response.data.error_msg );\n\t\t\t\t\t\tself.$status.show();\n\t\t\t\t\t}\n\t\t\t\t\tif ( 'undefined' != stats_div && stats_div.length ) {\n\t\t\t\t\t\tstats_div.replaceWith( response.data.stats );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparent.append( response.data.stats );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update image size in attachment info panel.\n\t\t\t\t\tupdate_image_stats( response.data.new_size );\n\t\t\t\t}\n\t\t\t\tself.enable_button();\n\t\t\t} ).error( function ( response ) {\n\t\t\t\tself.$status.html( response.data );\n\t\t\t\tself.$status.addClass( \"error\" );\n\t\t\t\tself.enable_button();\n\t\t\t} );\n\n\t\t};\n\n\t\tthis.sync_stats = function () {\n\t\t\tvar message_holder = $( 'div.wp-smush-bulk-progress-bar-wrapper div.wp-smush-count.tc' );\n\t\t\t//Store the existing content in a variable\n\t\t\tvar progress_message = message_holder.html();\n\t\t\tmessage_holder.html( wp_smush_msgs.sync_stats );\n\n\t\t\t//Send ajax\n\t\t\t$.ajax( {\n\t\t\t\ttype: \"GET\",\n\t\t\t\turl: ajaxurl,\n\t\t\t\tdata: {\n\t\t\t\t\t'action': 'get_stats'\n\t\t\t\t},\n\t\t\t\tsuccess: function ( response ) {\n\t\t\t\t\tif ( response && 'undefined' != typeof response ) {\n\t\t\t\t\t\tresponse = response.data;\n\t\t\t\t\t\t$.extend( wp_smushit_data, {\n\t\t\t\t\t\t\tcount_images: response.count_images,\n\t\t\t\t\t\t\tcount_smushed: response.count_smushed,\n\t\t\t\t\t\t\tcount_total: response.count_total,\n\t\t\t\t\t\t\tcount_resize: response.count_resize,\n\t\t\t\t\t\t\tcount_supersmushed: response.count_supersmushed,\n\t\t\t\t\t\t\tsavings_bytes: response.savings_bytes,\n\t\t\t\t\t\t\tsavings_conversion: response.savings_conversion,\n\t\t\t\t\t\t\tsavings_resize: response.savings_resize,\n\t\t\t\t\t\t\tsize_before: response.size_before,\n\t\t\t\t\t\t\tsize_after: response.size_after\n\t\t\t\t\t\t} );\n\t\t\t\t\t\t//Got the stats, Update it\n\t\t\t\t\t\tupdate_stats( this.smush_type );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ).always( function () {\n\t\t\t\t\tmessage_holder.html( progress_message );\n\t\t\t\t}\n\t\t\t);\n\t\t};\n\n\t\t/** After the Bulk Smushing has been Finished **/\n\t\tthis.bulk_done = function () {\n\t\t\tif ( !this.is_bulk ) return;\n\n\t\t\t//Enable the button\n\t\t\tthis.enable_button();\n\n\t\t\t//Show Notice\n\t\t\tif ( self.ids.length == 0 ) {\n\t\t\t\t$( '.bulk-smush-wrapper .wp-smush-all-done, .wp-smush-pagespeed-recommendation' ).show();\n\t\t\t\t$( '.wp-smush-bulk-wrapper' ).hide();\n\t\t\t\t// Hide the progress bar if scan is finished.\n\t\t\t\t$( '.wp-smush-bulk-progress-bar-wrapper' ).hide();\n\t\t\t} else {\n\t\t\t\tif ( $( '.bulk-smush-wrapper .wp-smush-resmush-notice' ).length > 0 ) {\n\t\t\t\t\t$( '.bulk-smush-wrapper .wp-smush-resmush-notice' ).show();\n\t\t\t\t} else {\n\t\t\t\t\t$( '.bulk-smush-wrapper .wp-smush-remaining' ).show();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Enable Resmush and scan button\n\t\t\t$( '.wp-resmush.wp-smush-action, .wp-smush-scan' ).removeAttr( 'disabled' );\n\n\t\t\t// Show loader.\n\t\t\tif ( self.ids.length == 0 ) {\n\t\t\t\t$( '.sui-summary-smush .smush-stats-icon' ).addClass( 'sui-hidden' );\n\t\t\t} else {\n\t\t\t\t$( '.sui-summary-smush .smush-stats-icon' ).removeClass( 'sui-icon-loader sui-loading sui-hidden' ).addClass( 'sui-icon-info sui-warning' );\n\t\t\t}\n\t\t};\n\n\t\tthis.is_resolved = function () {\n\t\t\t\"use strict\";\n\t\t\treturn this.deferred.state() === \"resolved\";\n\t\t};\n\n\t\tthis.free_exceeded = function () {\n\t\t\tif ( self.ids.length > 0 ) {\n\t\t\t\tlet progress = jQuery( '.wp-smush-bulk-progress-bar-wrapper' );\n\t\t\t\tprogress.addClass( 'wp-smush-exceed-limit' )\n\t\t\t\t\t.find( '.sui-progress-close' )\n\t\t\t\t\t.attr( 'data-tooltip', wp_smush_msgs.bulk_resume )\n\t\t\t\t\t.removeClass( 'wp-smush-cancel-bulk' )\n\t\t\t\t\t.addClass( 'wp-smush-all' );\n\n\t\t\t\tprogress.find( '.sui-box-body.sui-hidden' ).removeClass( 'sui-hidden' );\n\t\t\t} else {\n\t\t\t\t$( '.wp-smush-notice.wp-smush-all-done, .wp-smush-pagespeed-recommendation' ).show();\n\t\t\t}\n\t\t};\n\n\t\tthis.update_remaining_count = function () {\n\t\t\tif ( this.is_bulk_resmush ) {\n\t\t\t\t//ReSmush Notice\n\t\t\t\tif ( $( '.wp-smush-resmush-notice .wp-smush-remaining-count' ).length && 'undefined' != typeof self.ids ) {\n\t\t\t\t\t$( '.wp-smush-resmush-notice .wp-smush-remaining-count' ).html( self.ids.length );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t//Smush Notice\n\t\t\t\tif ( $( '.bulk-smush-wrapper .wp-smush-remaining-count' ).length && 'undefined' != typeof self.ids ) {\n\t\t\t\t\t$( '.bulk-smush-wrapper .wp-smush-remaining-count' ).html( self.ids.length );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Update sidebar count.\n\t\t\tif ( $( '.smush-sidenav .wp-smush-remaining-count' ).length && 'undefined' != typeof self.ids ) {\n\t\t\t\tif ( self.ids.length > 0 ) {\n\t\t\t\t\t$( '.smush-sidenav .wp-smush-remaining-count' ).html( self.ids.length );\n\t\t\t\t} else {\n\t\t\t\t\t$( '.sui-summary-smush .smush-stats-icon' ).addClass( 'sui-hidden' );\n\t\t\t\t\t$( '.smush-sidenav .wp-smush-remaining-count' ).removeClass( 'sui-tag sui-tag-warning' ).html( '' );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.update_progress = function ( _res ) {\n\t\t\t//If not bulk\n\t\t\tif ( !this.is_bulk_resmush && !this.is_bulk ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar progress = '';\n\n\t\t\t//Update localized stats\n\t\t\tif ( _res && ( 'undefined' != typeof _res.data || 'undefined' != typeof _res.data.stats ) ) {\n\t\t\t\tupdate_localized_stats( _res.data.stats, this.smush_type );\n\t\t\t}\n\n\t\t\tif ( !this.is_bulk_resmush ) {\n\t\t\t\t//handle progress for normal bulk smush\n\t\t\t\tprogress = ( wp_smushit_data.count_smushed / wp_smushit_data.count_total ) * 100;\n\t\t\t} else {\n\t\t\t\t//If the Request was successful, Update the progress bar\n\t\t\t\tif ( _res.success ) {\n\t\t\t\t\t//Handle progress for Super smush progress bar\n\t\t\t\t\tif ( wp_smushit_data.resmush.length > 0 ) {\n\t\t\t\t\t\t//Update the Count\n\t\t\t\t\t\t$( '.wp-smush-images-remaining' ).html( wp_smushit_data.resmush.length );\n\t\t\t\t\t} else if ( wp_smushit_data.resmush.length == 0 && this.ids.length == 0 ) {\n\t\t\t\t\t\t//If all images are resmushed, show the All Smushed message\n\n\t\t\t\t\t\t//Show All Smushed\n\t\t\t\t\t\t$( '.bulk-resmush-wrapper .wp-smush-all-done, .wp-smush-pagespeed-recommendation' ).removeClass( 'sui-hidden' );\n\n\t\t\t\t\t\t//Hide Everything else\n\t\t\t\t\t\t$( '.wp-smush-resmush-wrap, .wp-smush-bulk-progress-bar-wrapper' ).hide();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//handle progress for normal bulk smush\n\t\t\t\t//Set Progress Bar width\n\t\t\t\tif ( 'undefined' !== typeof self.ids && 'undefined' !== typeof wp_smushit_data.count_total && wp_smushit_data.count_total > 0 ) {\n\t\t\t\t\tprogress = ( wp_smushit_data.count_smushed / wp_smushit_data.count_total ) * 100;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Show Bulk Wrapper and Smush Notice\n\t\t\tif ( self.ids.length == 0 ) {\n\t\t\t\t//Sync stats for Bulk smush media Library ( Skip for Nextgen )\n\t\t\t\tif ( 'nextgen' != this.smush_type ) {\n\t\t\t\t\tthis.sync_stats();\n\t\t\t\t}\n\t\t\t\t$( '.bulk-smush-wrapper .wp-smush-all-done, .wp-smush-pagespeed-recommendation' ).show();\n\t\t\t\t$( '.wp-smush-bulk-wrapper' ).hide();\n\t\t\t}\n\n\t\t\t//Update remaining count\n\t\t\tself.update_remaining_count();\n\n\t\t\t//if we have received the progress data, update the stats else skip\n\t\t\tif ( 'undefined' !== typeof _res.data.stats ) {\n\t\t\t\t// increase the progress bar\n\t\t\t\tthis._update_progress( wp_smushit_data.count_smushed, progress );\n\t\t\t\t// update the counter\n\t\t\t\tthis._update_progress_status( wp_smushit_data.count_smushed, wp_smushit_data.count_total);\n\t\t\t}\n\t\t\t// Update stats and counts.\n\t\t\tupdate_stats( this.smush_type );\n\t\t};\n\n\t\tthis._update_progress = function ( count, width ) {\n\t\t\t\"use strict\";\n\t\t\tif ( !this.is_bulk && !this.is_bulk_resmush ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t//Update the Progress Bar Width\n\t\t\t// get the progress bar\n\t\t\tvar $progress_bar = jQuery( '.bulk-smush-wrapper .wp-smush-progress-inner' );\n\t\t\tif ( $progress_bar.length < 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// increase progress\n\t\t\t$progress_bar.css( 'width', width + '%' );\n\n\t\t};\n\n\t\tthis._update_progress_status = function ( smushed, total ) {\n\t\t\tlet progress_status = jQuery( '.bulk-smush-wrapper .sui-progress-state-text' );\n\n\t\t\tif ( 1 > progress_status.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tprogress_status.find( 'span' ).html( smushed + '/' + total );\n\t\t};\n\n\t\t//Whether to send the ajax requests further or not\n\t\tthis.continue = function () {\n\t\t\tvar continue_smush = self.$button.attr( 'continue_smush' );\n\n\t\t\tif ( typeof continue_smush == typeof undefined ) {\n\t\t\t\tcontinue_smush = true;\n\t\t\t}\n\n\t\t\tif ( 'false' == continue_smush || !continue_smush ) {\n\t\t\t\tcontinue_smush = false;\n\t\t\t}\n\n\t\t\treturn continue_smush && this.ids.length > 0 && this.is_bulk;\n\t\t};\n\n\t\tthis.increment_errors = function ( id ) {\n\t\t\tWP_Smush.errors.push( id );\n\t\t};\n\n\t\t// Send ajax request for smushing single and bulk, call update_progress on ajax response.\n\t\tthis.call_ajax = function () {\n\t\t\tlet nonce_value = '';\n\t\t\tthis.current_id = this.is_bulk ? this.ids.shift() : this.$button.data( \"id\" ); //remove from array while processing so we can continue where left off\n\n\t\t\t//Remove the id from respective variable as well\n\t\t\tthis.update_smush_ids( this.current_id );\n\n\t\t\tlet nonce_field = this.$button.parent().find( '#_wp_smush_nonce' );\n\t\t\tif ( nonce_field ) {\n\t\t\t\tnonce_value = nonce_field.val();\n\t\t\t}\n\n\t\t\tthis.request = WP_Smush.ajax( this.is_bulk_resmush, this.current_id, this.url, 0, nonce_value )\n\t\t\t\t.error( function () {\n\t\t\t\t\tself.increment_errors( self.current_id );\n\t\t\t\t} ).done( function ( res ) {\n\t\t\t\t\t//Increase the error count except if bulk request limit excceded\n\t\t\t\t\tif ( typeof res.success === \"undefined\" || ( typeof res.success !== \"undefined\" && typeof res.success.data !== \"undefined\" && res.success === false && res.data.error !== 'bulk_request_image_limit_exceeded' ) ) {\n\t\t\t\t\t\tself.increment_errors( self.current_id );\n\t\t\t\t\t}\n\t\t\t\t\t//If no response or success is false, do not process further\n\t\t\t\t\tif ( !res || !res.success ) {\n\t\t\t\t\t\t//@todo: Handle Bulk Smush limit error message\n\t\t\t\t\t\tif ( 'undefined' !== typeof res && 'undefined' !== typeof res.data && typeof res.data.error !== 'undefined' ) {\n\t\t\t\t\t\t\tvar error_class = 'undefined' != typeof res.data.error_class ? 'smush-error-message ' + res.data.error_class : 'smush-error-message';\n\t\t\t\t\t\t\tvar error_msg = '<p class=\"' + error_class + '\">' + res.data.error_message + '</p>';\n\t\t\t\t\t\t\tif ( 'undefined' != typeof res.data.error && 'bulk_request_image_limit_exceeded' == res.data.error ) {\n\t\t\t\t\t\t\t\tvar ajax_error_message = $( '.wp-smush-ajax-error' );\n\t\t\t\t\t\t\t\t//If we have ajax error message div, append after it\n\t\t\t\t\t\t\t\tif ( ajax_error_message.length > 0 ) {\n\t\t\t\t\t\t\t\t\tajax_error_message.after( error_msg );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t//Otherwise prepend\n\t\t\t\t\t\t\t\t\tself.$log.prepend( error_msg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( 'undefined' != typeof res.data.error_class && \"\" != res.data.error_class && $( 'div.smush-final-log .' + res.data.error_class ).length > 0 ) {\n\t\t\t\t\t\t\t\tvar error_count = $( 'p.smush-error-message.' + res.data.error_class + ' .image-error-count' );\n\t\t\t\t\t\t\t\t//Get the error count, increase and append\n\t\t\t\t\t\t\t\tvar image_count = error_count.html();\n\t\t\t\t\t\t\t\timage_count = parseInt( image_count ) + 1;\n\t\t\t\t\t\t\t\t//Append the updated image count\n\t\t\t\t\t\t\t\terror_count.html( image_count );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t//Print the error on screen\n\t\t\t\t\t\t\t\tself.$log.append( error_msg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tself.$log.show();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//Check whether to show the warning notice or not\n\t\t\t\t\tmembership_validity( res.data );\n\n\t\t\t\t\t//Bulk Smush Limit Exceeded: Stop ajax requests, remove progress bar, append the last image id back to smush variable, and reset variables to allow the user to continue bulk smush\n\t\t\t\t\tif ( typeof res.data !== \"undefined\" && res.data.error == 'bulk_request_image_limit_exceeded' && !self.is_resolved() ) {\n\t\t\t\t\t\t//Add a data attribute to the smush button, to stop sending ajax\n\t\t\t\t\t\tself.$button.attr( 'continue_smush', false );\n\n\t\t\t\t\t\tself.free_exceeded();\n\n\t\t\t\t\t\t//Reinsert the current id\n\t\t\t\t\t\twp_smushit_data.unsmushed.unshift( self.current_id );\n\n\t\t\t\t\t\t//Update the remaining count to length of remaining ids + 1 (Current id)\n\t\t\t\t\t\tself.update_remaining_count();\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( self.is_bulk && res.success ) {\n\t\t\t\t\t\t\tself.update_progress( res );\n\t\t\t\t\t\t} else if ( self.ids.length == 0 ) {\n\t\t\t\t\t\t\t//Sync stats anyway\n\t\t\t\t\t\t\tself.sync_stats();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself.single_done();\n\t\t\t\t} ).complete( function () {\n\t\t\t\t\tif ( !self.continue() || !self.is_bulk ) {\n\t\t\t\t\t\t//Calls deferred.done()\n\t\t\t\t\t\tself.deferred.resolve();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.call_ajax();\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\tself.deferred.errors = WP_Smush.errors;\n\t\t\treturn self.deferred;\n\t\t};\n\n\t\tthis.init( arguments );\n\n\t\t//Send ajax request for single and bulk smushing\n\t\tthis.run = function () {\n\n\t\t\t// if we have a definite number of ids\n\t\t\tif ( this.is_bulk && this.ids.length > 0 ) {\n\t\t\t\tthis.call_ajax();\n\t\t\t}\n\n\t\t\tif ( !this.is_bulk )\n\t\t\t\tthis.call_ajax();\n\n\t\t};\n\n\t\t//Show bulk smush errors, and disable bulk smush button on completion\n\t\tthis.bind_deferred_events = function () {\n\n\t\t\tthis.deferred.done( function () {\n\n\t\t\t\tself.$button.removeAttr( 'continue_smush' );\n\n\t\t\t\tif ( WP_Smush.errors.length ) {\n\t\t\t\t\tvar error_message = '<div class=\"wp-smush-ajax-error\">' + wp_smush_msgs.error_in_bulk.replace( \"{{errors}}\", WP_Smush.errors.length ) + '</div>';\n\t\t\t\t\t//Remove any existing notice\n\t\t\t\t\t$( '.wp-smush-ajax-error' ).remove();\n\t\t\t\t\tself.$log.prepend( error_message );\n\t\t\t\t}\n\n\t\t\t\tself.bulk_done();\n\n\t\t\t\t//Re enable the buttons\n\t\t\t\t$( '.wp-smush-button:not(.wp-smush-finished), .wp-smush-scan' ).removeAttr( 'disabled' );\n\t\t\t} );\n\n\t\t};\n\t\t/**\n\t\t * Handles the Cancel button Click\n\t\t * Update the UI, and enables the bulk smush button\n\t\t **/\n\t\tthis.cancel_ajax = function () {\n\t\t\t$( '.wp-smush-cancel-bulk' ).on( 'click', function () {\n\t\t\t\t//Add a data attribute to the smush button, to stop sending ajax\n\t\t\t\tself.$button.attr( 'continue_smush', false );\n\t\t\t\t//Sync and update stats\n\t\t\t\tself.sync_stats();\n\t\t\t\tupdate_stats( this.smush_type );\n\n\t\t\t\tself.request.abort();\n\t\t\t\tself.enable_button();\n\t\t\t\tself.$button.removeClass( 'wp-smush-started' );\n\t\t\t\twp_smushit_data.unsmushed.unshift( self.current_id );\n\t\t\t\t$( '.wp-smush-bulk-wrapper' ).show();\n\n\t\t\t\t//Hide the Progress Bar\n\t\t\t\t$( '.wp-smush-bulk-progress-bar-wrapper' ).hide();\n\t\t\t} );\n\t\t};\n\t\t/**\n\t\t * Remove the current id from unsmushed/resmush variable\n\t\t * @param current_id\n\t\t */\n\t\tthis.update_smush_ids = function ( current_id ) {\n\t\t\tif ( 'undefined' !== typeof wp_smushit_data.unsmushed && wp_smushit_data.unsmushed.length > 0 ) {\n\t\t\t\tvar u_index = wp_smushit_data.unsmushed.indexOf( current_id );\n\t\t\t\tif ( u_index > -1 ) {\n\t\t\t\t\twp_smushit_data.unsmushed.splice( u_index, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t\t//remove from the resmush list\n\t\t\tif ( 'undefined' !== typeof wp_smushit_data.resmush && wp_smushit_data.resmush.length > 0 ) {\n\t\t\t\tvar index = wp_smushit_data.resmush.indexOf( current_id );\n\t\t\t\tif ( index > -1 ) {\n\t\t\t\t\twp_smushit_data.resmush.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.start();\n\t\tthis.run();\n\t\tthis.bind_deferred_events();\n\n\t\t//Handle Cancel Ajax\n\t\tthis.cancel_ajax();\n\n\t\treturn this.deferred;\n\t};\n\n\t/**\n\t * Handle the Bulk Smush/ Bulk Resmush button click\n\t */\n\t$( 'body' ).on( 'click', 'button.wp-smush-all', function ( e ) {\n\t\t// prevent the default action\n\t\te.preventDefault();\n\n\t\t$( '.sui-notice-top.sui-notice-success' ).remove();\n\n\t\t// Remove limit exceeded styles.\n\t\tlet progress = $( '.wp-smush-bulk-progress-bar-wrapper' );\n\t\tprogress.removeClass( 'wp-smush-exceed-limit' )\n\t\t\t.find( '.sui-progress-close' ).attr( 'data-tooltip', wp_smush_msgs.bulk_stop );\n\t\t// Hide Resume button\n\t\tprogress.find( '.sui-box-body' ).addClass( 'sui-hidden' );\n\n\t\t//Disable Resmush and scan button\n\t\t$( '.wp-resmush.wp-smush-action, .wp-smush-scan, .wp-smush-button, a.wp-smush-lossy-enable, button.wp-smush-resize-enable, input#wp-smush-save-settings' ).attr( 'disabled', 'disabled' );\n\n\t\t//Check for ids, if there is none (Unsmushed or lossless), don't call smush function\n\t\tif ( typeof wp_smushit_data == 'undefined' ||\n\t\t\t( wp_smushit_data.unsmushed.length == 0 && wp_smushit_data.resmush.length == 0 )\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\t$( \".wp-smush-remaining\" ).hide();\n\n\t\t// Show loader.\n\t\t$( '.sui-summary-smush .smush-stats-icon' ).removeClass( 'sui-icon-info sui-warning' ).addClass( 'sui-icon-loader sui-loading' );\n\n\t\tnew WP_Smush.Smush( $( this ), true );\n\t} );\n\n\t/** Disable the action links **/\n\tvar disable_links = function ( c_element ) {\n\n\t\tvar parent = c_element.parent();\n\t\t//reduce parent opacity\n\t\tparent.css( {'opacity': '0.5'} );\n\t\t//Disable Links\n\t\tparent.find( 'a' ).attr( 'disabled', 'disabled' );\n\t};\n\n\t/** Enable the Action Links **/\n\tvar enable_links = function ( c_element ) {\n\n\t\tvar parent = c_element.parent();\n\n\t\t//reduce parent opacity\n\t\tparent.css( {'opacity': '1'} );\n\t\t//Disable Links\n\t\tparent.find( 'a' ).removeAttr( 'disabled' );\n\t};\n\t/**\n\t * Restore image request with a specified action for Media Library / NextGen Gallery\n\t * @param e\n\t * @param current_button\n\t * @param smush_action\n\t * @returns {boolean}\n\t */\n\tvar process_smush_action = function ( e, current_button, smush_action, action ) {\n\n\t\t//If disabled\n\t\tif ( 'disabled' == current_button.attr( 'disabled' ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\te.preventDefault();\n\n\t\t//Remove Error\n\t\t$( '.wp-smush-error' ).remove();\n\n\t\t//Hide stats\n\t\t$( '.smush-stats-wrapper' ).hide();\n\n\t\tvar mode = 'grid';\n\t\tif ( 'smush_restore_image' == smush_action ) {\n\t\t\tif ( $( document ).find( 'div.media-modal.wp-core-ui' ).length > 0 ) {\n\t\t\t\tmode = 'grid';\n\t\t\t} else {\n\t\t\t\tmode = window.location.search.indexOf( 'item' ) > -1 ? 'grid' : 'list';\n\t\t\t}\n\t\t}\n\n\t\t//Get the image ID and nonce\n\t\tvar params = {\n\t\t\taction: smush_action,\n\t\t\tattachment_id: current_button.data( 'id' ),\n\t\t\tmode: mode,\n\t\t\t_nonce: current_button.data( 'nonce' )\n\t\t};\n\n\t\t//Reduce the opacity of stats and disable the click\n\t\tdisable_links( current_button );\n\n\t\tprogress_bar( current_button, wp_smush_msgs[action], 'show' );\n\n\t\t//Restore the image\n\t\t$.post( ajaxurl, params, function ( r ) {\n\n\t\t\tprogress_bar( current_button, wp_smush_msgs[action], 'hide' );\n\n\t\t\t//reset all functionality\n\t\t\tenable_links( current_button );\n\n\t\t\tif ( r.success && 'undefined' != typeof(r.data.button) ) {\n\t\t\t\t//Replace in immediate parent for nextgen\n\t\t\t\tif ( 'undefined' != typeof (this.data) && this.data.indexOf( 'nextgen' ) > -1 ) {\n\t\t\t\t\t//Show the smush button, and remove stats and restore option\n\t\t\t\t\tcurrent_button.parent().html( r.data.button );\n\t\t\t\t} else {\n\t\t\t\t\t//Show the smush button, and remove stats and restore option\n\t\t\t\t\tcurrent_button.parents().eq( 1 ).html( r.data.button );\n\t\t\t\t}\n\n\t\t\t\tif ( 'undefined' != typeof (r.data) && 'restore' === action ) {\n\t\t\t\t\tupdate_image_stats( r.data.new_size );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( r.data.message ) {\n\t\t\t\t\t//show error\n\t\t\t\t\tcurrent_button.parent().append( r.data.message );\n\t\t\t\t}\n\t\t\t}\n\t\t} )\n\t};\n\n\t/**\n\t * Validates the Resize Width and Height against the Largest Thumbnail Width and Height\n\t *\n\t * @param wrapper_div jQuery object for the whole setting row wrapper div\n\t * @param width_only Whether to validate only width\n\t * @param height_only Validate only Height\n\t * @returns {boolean} All Good or not\n\t *\n\t */\n\tvar validate_resize_settings = function ( wrapper_div, width_only, height_only ) {\n\t\tvar resize_checkbox = wrapper_div.find( '#wp-smush-resize, #wp-smush-resize-quick-setup' );\n\n\t\tif ( !height_only ) {\n\t\t\tvar width_input = wrapper_div.find( '#wp-smush-resize_width, #quick-setup-resize_width' );\n\t\t\tvar width_error_note = wrapper_div.find( '.sui-notice-info.wp-smush-update-width' );\n\t\t}\n\t\tif ( !width_only ) {\n\t\t\tvar height_input = wrapper_div.find( '#wp-smush-resize_height, #quick-setup-resize_height' );\n\t\t\tvar height_error_note = wrapper_div.find( '.sui-notice-info.wp-smush-update-height' );\n\t\t}\n\n\t\tvar width_error = false;\n\t\tvar height_error = false;\n\n\t\t//If resize settings is not enabled, return true\n\t\tif ( !resize_checkbox.is( ':checked' ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t//Check if we have localised width and height\n\t\tif ( 'undefined' == typeof (wp_smushit_data.resize_sizes) || 'undefined' == typeof (wp_smushit_data.resize_sizes.width) ) {\n\t\t\t//Rely on server validation\n\t\t\treturn true;\n\t\t}\n\n\t\t//Check for width\n\t\tif ( !height_only && 'undefined' != typeof width_input && parseInt( wp_smushit_data.resize_sizes.width ) > parseInt( width_input.val() ) ) {\n\t\t\twidth_input.parent().addClass( 'sui-form-field-error' );\n\t\t\twidth_error_note.show( 'slow' );\n\t\t\twidth_error = true;\n\t\t} else {\n\t\t\t//Remove error class\n\t\t\twidth_input.parent().removeClass( 'sui-form-field-error' );\n\t\t\twidth_error_note.hide();\n\t\t\tif ( height_input.hasClass( 'error' ) ) {\n\t\t\t\theight_error_note.show( 'slow' );\n\t\t\t}\n\t\t}\n\n\t\t//Check for height\n\t\tif ( !width_only && 'undefined' != typeof height_input && parseInt( wp_smushit_data.resize_sizes.height ) > parseInt( height_input.val() ) ) {\n\t\t\theight_input.parent().addClass( 'sui-form-field-error' );\n\t\t\t//If we are not showing the width error already\n\t\t\tif ( !width_error ) {\n\t\t\t\theight_error_note.show( 'slow' );\n\t\t\t}\n\t\t\theight_error = true;\n\t\t} else {\n\t\t\t//Remove error class\n\t\t\theight_input.parent().removeClass( 'sui-form-field-error' );\n\t\t\theight_error_note.hide();\n\t\t\tif ( width_input.hasClass( 'error' ) ) {\n\t\t\t\twidth_error_note.show( 'slow' );\n\t\t\t}\n\t\t}\n\n\t\tif ( width_error || height_error ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\n\t};\n\n\t/**\n\t * Convert bytes to human readable form\n\t * @param a, Bytes\n\t * @param b, Number of digits\n\t * @returns {*} Formatted Bytes\n\t */\n\tvar formatBytes = function ( a, b ) {\n\t\tvar thresh = 1024;\n\t\tif ( Math.abs( a ) < thresh ) {\n\t\t\treturn a + ' B';\n\t\t}\n\t\tvar units = ['KB', 'MB', 'GB', 'TB', 'PB'];\n\t\tvar u = -1;\n\t\tdo {\n\t\t\ta /= thresh;\n\t\t\t++u;\n\t\t} while ( Math.abs( a ) >= thresh && u < units.length - 1 );\n\t\treturn a.toFixed( b ) + ' ' + units[u];\n\t};\n\n\t/**\n\t * Convert bytes to human readable form\n\t * @param a, Bytes\n\t * @param b, Number of digits\n\t * @returns {*} Formatted Bytes\n\t */\n\tvar getSizeFromString = function ( formatted_size ) {\n\t\treturn formatted_size.replace( /[a-zA-Z]/g, '' ).trim();\n\t};\n\n\t/**\n\t * Convert bytes to human readable form\n\t * @param a, Bytes\n\t * @param b, Number of digits\n\t * @returns {*} Formatted Bytes\n\t */\n\tvar getFormatFromString = function ( formatted_size ) {\n\t\treturn formatted_size.replace( /[0-9.]/g, '' ).trim();\n\t};\n\n\t//Stackoverflow: http://stackoverflow.com/questions/1726630/formatting-a-number-with-exactly-two-decimals-in-javascript\n\tvar precise_round = function ( num, decimals ) {\n\t\tvar sign = num >= 0 ? 1 : -1;\n\t\t//Keep the percentage below 100\n\t\tnum = num > 100 ? 100 : num;\n\t\treturn (Math.round( (num * Math.pow( 10, decimals )) + (sign * 0.001) ) / Math.pow( 10, decimals ));\n\t};\n\n\t/**\n\t * Update the progress bar width if we have images that needs to be resmushed\n\t * @param unsmushed_count\n\t * @returns {boolean}\n\t */\n\tvar update_progress_bar_resmush = function ( unsmushed_count ) {\n\n\t\tif ( 'undefined' == typeof unsmushed_count ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar smushed_count = wp_smushit_data.count_total - unsmushed_count;\n\n\t\t//Update the Progress Bar Width\n\t\t// get the progress bar\n\t\tvar $progress_bar = jQuery( '.bulk-smush-wrapper .wp-smush-progress-inner' );\n\t\tif ( $progress_bar.length < 1 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar width = ( smushed_count / wp_smushit_data.count_total ) * 100;\n\n\t\t// increase progress\n\t\t$progress_bar.css( 'width', width + '%' );\n\t};\n\n\tvar run_re_check = function ( button, process_settings ) {\n\n\t\t// Empty the button text and add loader class.\n\t\tbutton.text( '' ).addClass( 'sui-button-onload sui-icon-loader sui-loading' ).blur();\n\n\t\t//Check if type is set in data attributes\n\t\tvar scan_type = button.data( 'type' );\n\t\tscan_type = 'undefined' == typeof scan_type ? 'media' : scan_type;\n\n\t\t//Remove the Skip resmush attribute from button\n\t\t$( 'button.wp-smush-all' ).removeAttr( 'data-smush' );\n\n\t\t//remove notices\n\t\tvar el = $( '.sui-notice-top.sui-notice-success' );\n\t\tel.slideUp( 100, function () {\n\t\t\tel.remove();\n\t\t} );\n\n\t\t//Disable Bulk smush button and itself\n\t\t$( '.wp-smush-button' ).attr( 'disabled', 'disabled' );\n\n\t\t//Hide Settings changed Notice\n\t\t$( '.wp-smush-settings-changed' ).hide();\n\n\t\t//Ajax Params\n\t\tvar params = {\n\t\t\taction: 'scan_for_resmush',\n\t\t\ttype: scan_type,\n\t\t\tget_ui: true,\n\t\t\tprocess_settings: process_settings,\n\t\t\twp_smush_options_nonce: jQuery( '#wp_smush_options_nonce' ).val()\n\t\t};\n\n\t\t//Send ajax request and get ids if any\n\t\t$.get( ajaxurl, params, function ( r ) {\n\t\t\t//Check if we have the ids, initialize the local variable\n\t\t\tif ( 'undefined' != typeof r.data ) {\n\t\t\t\t//Update Resmush id list\n\t\t\t\tif ( 'undefined' != typeof r.data.resmush_ids ) {\n\t\t\t\t\twp_smushit_data.resmush = r.data.resmush_ids;\n\n\t\t\t\t\t//Update wp_smushit_data ( Smushed count, Smushed Percent, Image count, Super smush count, resize savings, conversion savings )\n\t\t\t\t\tif ( 'undefinied' != typeof wp_smushit_data ) {\n\t\t\t\t\t\twp_smushit_data.count_smushed = 'undefined' != typeof r.data.count_smushed ? r.data.count_smushed : wp_smushit_data.count_smushed;\n\t\t\t\t\t\twp_smushit_data.count_supersmushed = 'undefined' != typeof r.data.count_supersmushed ? r.data.count_supersmushed : wp_smushit_data.count_supersmushed;\n\t\t\t\t\t\twp_smushit_data.count_images = 'undefined' != typeof r.data.count_image ? r.data.count_image : wp_smushit_data.count_images;\n\t\t\t\t\t\twp_smushit_data.size_before = 'undefined' != typeof r.data.size_before ? r.data.size_before : wp_smushit_data.size_before;\n\t\t\t\t\t\twp_smushit_data.size_after = 'undefined' != typeof r.data.size_after ? r.data.size_after : wp_smushit_data.size_after;\n\t\t\t\t\t\twp_smushit_data.savings_resize = 'undefined' != typeof r.data.savings_resize ? r.data.savings_resize : wp_smushit_data.savings_resize;\n\t\t\t\t\t\twp_smushit_data.savings_conversion = 'undefined' != typeof r.data.savings_conversion ? r.data.savings_conversion : wp_smushit_data.savings_conversion;\n\t\t\t\t\t\twp_smushit_data.count_resize = 'undefined' != typeof r.data.count_resize ? r.data.count_resize : wp_smushit_data.count_resize;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'nextgen' == scan_type ) {\n\t\t\t\t\t\twp_smushit_data.bytes = parseInt( wp_smushit_data.size_before ) - parseInt( wp_smushit_data.size_after )\n\t\t\t\t\t}\n\n\t\t\t\t\tvar smush_percent = ( wp_smushit_data.count_smushed / wp_smushit_data.count_total ) * 100;\n\t\t\t\t\tsmush_percent = precise_round( smush_percent, 1 );\n\n\t\t\t\t\t//Update it in stats bar\n\t\t\t\t\t$( '.wp-smush-images-percent' ).html( smush_percent );\n\n\t\t\t\t\t//Hide the Existing wrapper\n\t\t\t\t\tvar notices = $( '.bulk-smush-wrapper .sui-notice' );\n\t\t\t\t\tif ( notices.length > 0 ) {\n\t\t\t\t\t\tnotices.hide();\n\t\t\t\t\t\t$( '.wp-smush-pagespeed-recommendation' ).hide();\n\t\t\t\t\t}\n\t\t\t\t\t//remove existing Re-Smush notices\n\t\t\t\t\t$( '.wp-smush-resmush-notice' ).remove();\n\n\t\t\t\t\t//Show Bulk wrapper\n\t\t\t\t\t$( '.wp-smush-bulk-wrapper' ).show();\n\n\t\t\t\t\tif ( 'undefined' !== typeof r.data.count ) {\n\t\t\t\t\t\t//Update progress bar\n\t\t\t\t\t\tupdate_progress_bar_resmush( r.data.count );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//If content is received, Prepend it\n\t\t\t\tif ( 'undefined' != typeof r.data.content ) {\n\t\t\t\t\t$( '.bulk-smush-wrapper .sui-box-body' ).prepend( r.data.content );\n\t\t\t\t}\n\t\t\t\t//If we have any notice to show\n\t\t\t\tif ( 'undefined' != typeof r.data.notice ) {\n\t\t\t\t\t$( '.wp-smush-page-header' ).after( r.data.notice );\n\t\t\t\t}\n\t\t\t\t//Hide errors\n\t\t\t\t$( 'div.smush-final-log' ).hide();\n\n\t\t\t\t//Hide Super Smush notice if it's enabled in media settings\n\t\t\t\tif ( 'undefined' != typeof r.data.super_smush && r.data.super_smush ) {\n\t\t\t\t\tvar enable_lossy = jQuery( '.wp-smush-enable-lossy' );\n\t\t\t\t\tif ( enable_lossy.length > 0 ) {\n\t\t\t\t\t\tenable_lossy.remove();\n\t\t\t\t\t}\n\t\t\t\t\tif ( 'undefined' !== r.data.super_smush_stats ) {\n\t\t\t\t\t\t$( '.super-smush-attachments .wp-smush-stats' ).html( r.data.super_smush_stats );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tupdate_stats( scan_type );\n\t\t\t}\n\n\t\t} ).always( function () {\n\n\t\t\t//Hide the progress bar\n\t\t\tjQuery( '.bulk-smush-wrapper .wp-smush-bulk-progress-bar-wrapper' ).hide();\n\n\t\t\t// Add check complete status to button.\n\t\t\tbutton.text( wp_smush_msgs.resmush_complete )\n\t\t\t\t.removeClass( 'sui-button-onload sui-icon-loader sui-loading' )\n\t\t\t\t.addClass( 'smush-button-check-success' );\n\n\t\t\t// Remove success message from button.\n\t\t\tsetTimeout( function () {\n\t\t\t\tbutton.removeClass( 'smush-button-check-success' )\n\t\t\t\t\t.text( wp_smush_msgs.resmush_check );\n\t\t\t}, 2000 );\n\n\t\t\t$( '.wp-smush-button' ).removeAttr( 'disabled' );\n\n\t\t\t//If wp-smush-re-check-message is there, remove it\n\t\t\tif ( $( '.wp-smush-re-check-message' ).length ) {\n\t\t\t\tremove_element( $( '.wp-smush-re-check-message' ) );\n\t\t\t}\n\t\t} );\n\t};\n\n\t/**\n\t * Set pro savings stats if not premium user.\n\t *\n\t * For non-premium users, show expected avarage savings based\n\t * on the free version savings.\n\t */\n\tvar set_pro_savings = function () {\n\n\t\t// Default values.\n\t\tvar savings = wp_smushit_data.savings_percent > 0 ? wp_smushit_data.savings_percent : 0;\n\t\tvar savings_bytes = wp_smushit_data.savings_bytes > 0 ? wp_smushit_data.savings_bytes : 0;\n\t\tvar orig_diff = 2.22058824;\n\t\tif ( savings > 49 ) {\n\t\t\tvar orig_diff = 1.22054412;\n\t\t}\n\t\t//Calculate Pro savings\n\t\tif ( savings > 0 ) {\n\t\t\tsavings = orig_diff * savings;\n\t\t\tsavings_bytes = orig_diff * savings_bytes;\n\t\t}\n\n\t\twp_smushit_data.pro_savings = {\n\t\t\t'percent': precise_round( savings, 1 ),\n\t\t\t'savings_bytes': formatBytes( savings_bytes, 1 )\n\n\t\t}\n\t};\n\n\t/**\n\t * Adds the stats for the current image to existing stats\n\t *\n\t * @param image_stats\n\t *\n\t */\n\tvar update_localized_stats = function ( image_stats, type ) {\n\t\t//Increase the smush count\n\t\tif ( 'undefined' == typeof wp_smushit_data ) {\n\t\t\treturn;\n\t\t}\n\n\t\t//No need to increase attachment count, resize, conversion savings for directory smush\n\t\tif ( 'media' == type ) {\n\t\t\twp_smushit_data.count_smushed = parseInt( wp_smushit_data.count_smushed ) + 1;\n\n\t\t\t//Increase smushed image count\n\t\t\twp_smushit_data.count_images = parseInt( wp_smushit_data.count_images ) + parseInt( image_stats.count );\n\n\t\t\t//Increase super smush count, if applicable\n\t\t\tif ( image_stats.is_lossy ) {\n\t\t\t\twp_smushit_data.count_supersmushed = parseInt( wp_smushit_data.count_supersmushed ) + 1;\n\t\t\t}\n\n\t\t\t//Add to Resize Savings\n\t\t\twp_smushit_data.savings_resize = 'undefined' != typeof image_stats.savings_resize.bytes ? parseInt( wp_smushit_data.savings_resize ) + parseInt( image_stats.savings_resize.bytes ) : parseInt( wp_smushit_data.savings_resize );\n\n\t\t\t//Update Resize count\n\t\t\twp_smushit_data.count_resize = 'undefined' != typeof image_stats.savings_resize.bytes ? parseInt( wp_smushit_data.count_resize ) + 1 : wp_smushit_data.count_resize;\n\n\t\t\t//Add to Conversion Savings\n\t\t\twp_smushit_data.savings_conversion = 'undefined' != typeof image_stats.savings_conversion && 'undefined' != typeof image_stats.savings_conversion.bytes ? parseInt( wp_smushit_data.savings_conversion ) + parseInt( image_stats.savings_conversion.bytes ) : parseInt( wp_smushit_data.savings_conversion );\n\t\t} else if ( 'directory_smush' == type ) {\n\t\t\t//Increase smushed image count\n\t\t\twp_smushit_data.count_images = parseInt( wp_smushit_data.count_images ) + 1;\n\t\t} else if ( 'nextgen' == type ) {\n\t\t\twp_smushit_data.count_smushed = parseInt( wp_smushit_data.count_smushed ) + 1;\n\t\t\twp_smushit_data.count_supersmushed = parseInt( wp_smushit_data.count_supersmushed ) + 1;\n\n\t\t\t//Increase smushed image count\n\t\t\twp_smushit_data.count_images = parseInt( wp_smushit_data.count_images ) + parseInt( image_stats.count );\n\t\t}\n\n\t\t//If we have savings\n\t\tif ( image_stats.size_before > image_stats.size_after ) {\n\t\t\t//Update savings\n\t\t\twp_smushit_data.size_before = 'undefined' != typeof image_stats.size_before ? parseInt( wp_smushit_data.size_before ) + parseInt( image_stats.size_before ) : parseInt( wp_smushit_data.size_before );\n\t\t\twp_smushit_data.size_after = 'undefined' != typeof image_stats.size_after ? parseInt( wp_smushit_data.size_after ) + parseInt( image_stats.size_after ) : parseInt( wp_smushit_data.size_after );\n\t\t}\n\t\t//Add stats for resizing\n\t\tif ( 'undefined' != typeof image_stats.savings_resize ) {\n\t\t\t//Update savings\n\t\t\twp_smushit_data.size_before = 'undefined' != typeof image_stats.savings_resize.size_before ? parseInt( wp_smushit_data.size_before ) + parseInt( image_stats.savings_resize.size_before ) : parseInt( wp_smushit_data.size_before );\n\t\t\twp_smushit_data.size_after = 'undefined' != typeof image_stats.savings_resize.size_after ? parseInt( wp_smushit_data.size_after ) + parseInt( image_stats.savings_resize.size_after ) : parseInt( wp_smushit_data.size_after );\n\t\t}\n\t\t//Add stats for Conversion\n\t\tif ( 'undefined' != typeof image_stats.savings_conversion ) {\n\t\t\t//Update savings\n\t\t\twp_smushit_data.size_before = 'undefined' != typeof image_stats.savings_conversion.size_before ? parseInt( wp_smushit_data.size_before ) + parseInt( image_stats.savings_conversion.size_before ) : parseInt( wp_smushit_data.size_before );\n\t\t\twp_smushit_data.size_after = 'undefined' != typeof image_stats.savings_conversion.size_after ? parseInt( wp_smushit_data.size_after ) + parseInt( image_stats.savings_conversion.size_after ) : parseInt( wp_smushit_data.size_after );\n\t\t}\n\t};\n\n\t/**\n\t * Update all stats sections based on the response.\n\t *\n\t * @param scan_type Current scan type.\n\t */\n\tvar update_stats = function ( scan_type ) {\n\n\t\tvar super_savings = 0,\n\t\t\tsmushed_count = 0;\n\t\tvar is_nextgen = 'undefined' != typeof scan_type && 'nextgen' == scan_type;\n\n\t\t//Calculate updated savings in bytes\n\t\twp_smushit_data.savings_bytes = parseInt( wp_smushit_data.size_before ) - parseInt( wp_smushit_data.size_after );\n\n\t\tvar formatted_size = formatBytes( wp_smushit_data.savings_bytes, 1 );\n\n\t\tif ( is_nextgen ) {\n\t\t\t$( '.wp-smush-savings .wp-smush-stats-human' ).html( formatted_size );\n\t\t} else {\n\t\t\t$( '.wp-smush-savings .wp-smush-stats-human' ).html( getFormatFromString( formatted_size ) );\n\t\t\t$( '.sui-summary-large.wp-smush-stats-human' ).html( getSizeFromString( formatted_size ) );\n\t\t}\n\n\t\t//Update the savings percent\n\t\twp_smushit_data.savings_percent = precise_round( ( parseInt( wp_smushit_data.savings_bytes ) / parseInt( wp_smushit_data.size_before ) ) * 100, 1 );\n\t\tif ( !isNaN( wp_smushit_data.savings_percent ) ) {\n\t\t\t$( '.wp-smush-savings .wp-smush-stats-percent' ).html( wp_smushit_data.savings_percent );\n\t\t}\n\n\t\t//Update Savings in share message\n\t\t//$( 'span.smush-share-savings' ).html( formatBytes( wp_smushit_data.savings_bytes, 1 ) );\n\n\t\t//Update Smush percent\n\t\twp_smushit_data.smush_percent = precise_round( ( parseInt( wp_smushit_data.count_smushed ) / parseInt( wp_smushit_data.count_total ) ) * 100, 1 );\n\t\t$( 'span.wp-smush-images-percent' ).html( wp_smushit_data.smush_percent );\n\n\t\t//Super-Smush Savings\n\t\tif ( 'undefined' != typeof wp_smushit_data.savings_bytes && 'undefined' != typeof wp_smushit_data.savings_resize ) {\n\t\t\tsuper_savings = parseInt( wp_smushit_data.savings_bytes ) - parseInt( wp_smushit_data.savings_resize );\n\t\t\tif ( super_savings > 0 ) {\n\t\t\t\t$( 'li.super-smush-attachments span.smushed-savings' ).html( formatBytes( super_savings, 1 ) );\n\t\t\t}\n\t\t}\n\n\t\t//Update Image count\n\t\tif ( is_nextgen ) {\n\t\t\t$( '.sui-summary-details span.wp-smush-total-optimised' ).html( wp_smushit_data.count_images );\n\t\t} else {\n\t\t\t$( 'span.smushed-items-count span.wp-smush-count-total span.wp-smush-total-optimised' ).html( wp_smushit_data.count_images );\n\t\t}\n\n\t\t//Update image count in share message\n\t\t//$( 'span.smush-share-image-count' ).html( wp_smushit_data.count_images );\n\n\t\t//Update Resize image count\n\t\t$( 'span.smushed-items-count span.wp-smush-count-resize-total span.wp-smush-total-optimised' ).html( wp_smushit_data.count_resize );\n\n\t\t//Update Attachment image count\n\t\t//$( 'div.wp-smush-count-attachment-total span.wp-smush-total-optimised' ).html( wp_smushit_data.count_smushed );\n\n\t\t//Update image count in share message\n\n\t\t//Update supersmushed image count\n\t\tif ( $( 'li.super-smush-attachments .smushed-count' ).length && 'undefined' != typeof wp_smushit_data.count_supersmushed ) {\n\t\t\t$( 'li.super-smush-attachments .smushed-count' ).html( wp_smushit_data.count_supersmushed );\n\t\t}\n\n\t\t//Update Conversion Savings\n\t\tvar smush_conversion_savings = $( '.smush-conversion-savings' );\n\t\tif ( smush_conversion_savings.length > 0 && 'undefined' != typeof ( wp_smushit_data.savings_conversion ) && wp_smushit_data.savings_conversion != '' ) {\n\t\t\tvar conversion_savings = smush_conversion_savings.find( '.wp-smush-stats' );\n\t\t\tif ( conversion_savings.length > 0 ) {\n\t\t\t\tconversion_savings.html( formatBytes( wp_smushit_data.savings_conversion, 1 ) );\n\t\t\t}\n\t\t}\n\n\t\t//Update Resize Savings\n\t\tvar smush_resize_savings = $( '.smush-resize-savings' );\n\t\tif ( smush_resize_savings.length > 0 && 'undefined' != typeof ( wp_smushit_data.savings_resize ) && wp_smushit_data.savings_resize != '' ) {\n\t\t\t// Get the resize savings in number.\n\t\t\tvar savings_value = parseInt( wp_smushit_data.savings_resize );\n\t\t\tvar resize_savings = smush_resize_savings.find( '.wp-smush-stats' );\n\t\t\tvar resize_message = smush_resize_savings.find( '.wp-smush-stats-label-message' );\n\t\t\t// Replace only if value is grater than 0.\n\t\t\tif ( savings_value > 0 && resize_savings.length > 0 ) {\n\t\t\t\t// Hide message.\n\t\t\t\tif ( resize_message.length > 0 ) {\n\t\t\t\t\tresize_message.hide();\n\t\t\t\t}\n\t\t\t\tresize_savings.html( formatBytes( wp_smushit_data.savings_resize, 1 ) );\n\t\t\t}\n\t\t}\n\n\t\t//Update pro Savings\n\t\tset_pro_savings();\n\n\t\t// Updating pro savings stats.\n\t\tif ( 'undefined' != typeof (wp_smushit_data.pro_savings) ) {\n\t\t\t// Pro stats section.\n\t\t\tvar smush_pro_savings = $( '.smush-avg-pro-savings' );\n\t\t\tif ( smush_pro_savings.length > 0 ) {\n\t\t\t\tvar pro_savings_percent = smush_pro_savings.find( '.wp-smush-stats-percent' );\n\t\t\t\tvar pro_savings_bytes = smush_pro_savings.find( '.wp-smush-stats-human' );\n\t\t\t\tif ( pro_savings_percent.length > 0 && 'undefined' != typeof (wp_smushit_data.pro_savings.percent) && wp_smushit_data.pro_savings.percent != '' ) {\n\t\t\t\t\tpro_savings_percent.html( wp_smushit_data.pro_savings.percent );\n\t\t\t\t}\n\t\t\t\tif ( pro_savings_bytes.length > 0 && 'undefined' != typeof (wp_smushit_data.pro_savings.savings_bytes) && wp_smushit_data.pro_savings.savings_bytes != '' ) {\n\t\t\t\t\tpro_savings_bytes.html( wp_smushit_data.pro_savings.savings_bytes );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t//Finds y value of given object\n\tfunction findPos( obj ) {\n\t\tvar curtop = 0;\n\t\tif ( obj.offsetParent ) {\n\t\t\tdo {\n\t\t\t\tcurtop += obj.offsetTop;\n\t\t\t} while ( obj = obj.offsetParent );\n\t\t\treturn [curtop];\n\t\t}\n\t}\n\n\t// Scroll the element to top of the page.\n\tvar goToByScroll = function ( selector ) {\n\t\t// Scroll if element found.\n\t\tif ( $( selector ).length > 0 ) {\n\t\t\t$( 'html, body' ).animate( {\n\t\t\t\t\tscrollTop: $( selector ).offset().top - 100\n\t\t\t\t}, 'slow'\n\t\t\t);\n\t\t}\n\t};\n\n\tvar disable_buttons = function ( self ) {\n\t\tself.attr( 'disabled', 'disabled' );\n\t\t$( '.wp-smush-browse' ).attr( 'disabled', 'disabled' );\n\t};\n\n\tvar update_cummulative_stats = function ( stats ) {\n\t\t//Update Directory Smush Stats\n\t\tif ( 'undefined' != typeof ( stats.dir_smush ) ) {\n\t\t\tvar stats_human = $( 'li.smush-dir-savings span.wp-smush-stats span.wp-smush-stats-human' );\n\t\t\tvar stats_percent = $( 'li.smush-dir-savings span.wp-smush-stats span.wp-smush-stats-percent' );\n\n\t\t\t// Do not replace if 0 savings.\n\t\t\tif ( stats.dir_smush.bytes > 0 ) {\n\t\t\t\t// Hide selector.\n\t\t\t\t$( 'li.smush-dir-savings .wp-smush-stats-label-message' ).hide();\n\t\t\t\t//Update Savings in bytes\n\t\t\t\tif ( stats_human.length > 0 ) {\n\t\t\t\t\tstats_human.html( stats.dir_smush.human );\n\t\t\t\t} else {\n\t\t\t\t\tvar span = '<span class=\"wp-smush-stats-human\">' + stats.dir_smush.bytes + '</span>';\n\t\t\t\t}\n\n\t\t\t\t//Percentage section\n\t\t\t\tif ( stats.dir_smush.percent > 0 ) {\n\t\t\t\t\t// Show size and percentage separator.\n\t\t\t\t\t$( 'li.smush-dir-savings span.wp-smush-stats span.wp-smush-stats-sep' ).removeClass( 'sui-hidden' );\n\t\t\t\t\t//Update Optimisation percentage\n\t\t\t\t\tif ( stats_percent.length > 0 ) {\n\t\t\t\t\t\tstats_percent.html( stats.dir_smush.percent + '%' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar span = '<span class=\"wp-smush-stats-percent\">' + stats.dir_smush.percent + '%' + '</span>';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//Update Combined stats\n\t\tif ( 'undefined' != typeof ( stats.combined_stats ) && stats.combined_stats.length > 0 ) {\n\t\t\tvar c_stats = stats.combined_stats;\n\n\t\t\tvar smush_percent = ( c_stats.smushed / c_stats.total_count ) * 100;\n\t\t\tsmush_percent = precise_round( smush_percent, 1 );\n\n\t\t\t//Smushed Percent\n\t\t\tif ( smush_percent ) {\n\t\t\t\t$( 'div.wp-smush-count-total span.wp-smush-images-percent' ).html( smush_percent );\n\t\t\t}\n\t\t\t//Update Total Attachment Count\n\t\t\tif ( c_stats.total_count ) {\n\t\t\t\t$( 'span.wp-smush-count-total span.wp-smush-total-optimised' ).html( c_stats.total_count );\n\t\t\t}\n\t\t\t//Update Savings and Percent\n\t\t\tif ( c_stats.savings ) {\n\t\t\t\t$( 'span.wp-smush-savings span.wp-smush-stats-human' ).html( c_stats.savings );\n\t\t\t}\n\t\t\tif ( c_stats.percent ) {\n\t\t\t\t$( 'span.wp-smush-savings span.wp-smush-stats-percent' ).html( c_stats.percent );\n\t\t\t}\n\t\t}\n\t};\n\n\t//Remove span tag from URL\n\tfunction removeSpan( url ) {\n\t\tvar url = url.slice( url.indexOf( '?' ) + 1 ).split( '&' );\n\t\tfor ( var i = 0; i < url.length; i++ ) {\n\t\t\tvar urlparam = decodeURI( url[i] ).split( /=(.+)/ )[1];\n\t\t\treturn urlparam.replace( /<(?:.|\\n)*?>/gm, '' );\n\t\t}\n\t}\n\n\t/**\n\t * Handle the Smush Stats link click\n\t */\n\t$( 'body' ).on( 'click', 'a.smush-stats-details', function ( e ) {\n\n\t\t//If disabled\n\t\tif ( 'disabled' == $( this ).attr( 'disabled' ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// prevent the default action\n\t\te.preventDefault();\n\t\t//Replace the `+` with a `-`\n\t\tvar slide_symbol = $( this ).find( '.stats-toggle' );\n\t\t$( this ).parents().eq( 1 ).find( '.smush-stats-wrapper' ).slideToggle();\n\t\tslide_symbol.text( slide_symbol.text() == '+' ? '-' : '+' );\n\n\n\t} );\n\n\t/** Handle smush button click **/\n\t$( 'body' ).on( 'click', '.wp-smush-send:not(.wp-smush-resmush)', function ( e ) {\n\t\t// prevent the default action\n\t\te.preventDefault();\n\t\tnew WP_Smush.Smush( $( this ), false );\n\t} );\n\n\t/** Handle NextGen Gallery smush button click **/\n\t$( 'body' ).on( 'click', '.wp-smush-nextgen-send', function ( e ) {\n\t\t// prevent the default action\n\t\te.preventDefault();\n\t\tnew WP_Smush.Smush( $( this ), false, 'nextgen' );\n\t} );\n\n\t/** Handle NextGen Gallery Bulk smush button click **/\n\t$( 'body' ).on( 'click', '.wp-smush-nextgen-bulk', function ( e ) {\n\t\t// prevent the default action\n\t\te.preventDefault();\n\n\t\t//Check for ids, if there is none (Unsmushed or lossless), don't call smush function\n\t\tif ( typeof wp_smushit_data == 'undefined' ||\n\t\t\t( wp_smushit_data.unsmushed.length == 0 && wp_smushit_data.resmush.length == 0 )\n\t\t) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tjQuery( '.wp-smush-button, .wp-smush-scan' ).attr( 'disabled', 'disabled' );\n\t\t$( \".wp-smush-notice.wp-smush-remaining\" ).hide();\n\t\tnew WP_Smush.Smush( $( this ), true, 'nextgen' );\n\n\t} );\n\n\t/** Restore: Media Library **/\n\t$( 'body' ).on( 'click', '.wp-smush-action.wp-smush-restore', function ( e ) {\n\t\tvar current_button = $( this );\n\t\tvar smush_action = 'smush_restore_image';\n\t\tprocess_smush_action( e, current_button, smush_action, 'restore' );\n\t\t//Change the class oa parent div ( Level 2 )\n\t\tvar parent = current_button.parents().eq( 1 );\n\t\tif ( parent.hasClass( 'smushed' ) ) {\n\t\t\tparent.removeClass( 'smushed' ).addClass( 'unsmushed' );\n\t\t}\n\t} );\n\n\t/** Resmush: Media Library **/\n\t$( 'body' ).on( 'click', '.wp-smush-action.wp-smush-resmush', function ( e ) {\n\t\tvar current_button = $( this );\n\t\tvar smush_action = 'smush_resmush_image';\n\t\tprocess_smush_action( e, current_button, smush_action, 'smushing' );\n\t} );\n\n\t/** Restore: NextGen Gallery **/\n\t$( 'body' ).on( 'click', '.wp-smush-action.wp-smush-nextgen-restore', function ( e ) {\n\t\tvar current_button = $( this );\n\t\tvar smush_action = 'smush_restore_nextgen_image';\n\t\tprocess_smush_action( e, current_button, smush_action, 'restore' );\n\t} );\n\n\t/** Resmush: NextGen Gallery **/\n\t$( 'body' ).on( 'click', '.wp-smush-action.wp-smush-nextgen-resmush', function ( e ) {\n\t\tvar current_button = $( this );\n\t\tvar smush_action = 'smush_resmush_nextgen_image';\n\t\tprocess_smush_action( e, current_button, smush_action, 'smushing' );\n\t} );\n\n\t//Scan For resmushing images\n\t$( 'body' ).on( 'click', '.wp-smush-scan', function ( e ) {\n\n\t\te.preventDefault();\n\n\t\t//Run the Re-check\n\t\trun_re_check( $( this ), false );\n\t} );\n\n\t//Dismiss Welcome notice\n\t//@todo: Use it for popup\n\t$( '#wp-smush-welcome-box .smush-dismiss-welcome' ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\t\tvar $el = $( this ).parents().eq( 1 );\n\t\tremove_element( $el );\n\n\t\t//Send a ajax request to save the dismissed notice option\n\t\tvar param = {\n\t\t\taction: 'dismiss_welcome_notice'\n\t\t};\n\t\t$.post( ajaxurl, param );\n\t} );\n\n\t//Remove Notice\n\t$( 'body' ).on( 'click', '.wp-smush-notice .icon-fi-close', function ( e ) {\n\t\te.preventDefault();\n\t\tvar $el = $( this ).parent();\n\t\tremove_element( $el );\n\t} );\n\n\t//On Click Update Settings. Check for change in settings\n\t$( 'input#wp-smush-save-settings' ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\n\t\tvar setting_type = '';\n\t\tvar setting_input = $( 'input[name=\"setting-type\"]' );\n\t\t//Check if setting type is set in the form\n\t\tif ( setting_input.length > 0 ) {\n\t\t\tsetting_type = setting_input.val();\n\t\t}\n\n\t\t//Show the spinner\n\t\tvar self = $( this );\n\t\tself.parent().find( 'span.sui-icon-loader.sui-loading' ).removeClass( 'sui-hidden' );\n\n\t\t//Save settings if in network admin\n\t\tif ( '' != setting_type && 'network' == setting_type ) {\n\t\t\t//Ajax param\n\t\t\tvar param = {\n\t\t\t\taction: 'save_settings',\n\t\t\t\tnonce: $( '#wp_smush_options_nonce' ).val()\n\t\t\t};\n\n\t\t\tparam = jQuery.param( param ) + '&' + jQuery( 'form#wp-smush-settings-form' ).serialize();\n\n\t\t\t//Send ajax, Update Settings, And Check For resmush\n\t\t\tjQuery.post( ajaxurl, param ).done( function () {\n\t\t\t\tjQuery( 'form#wp-smush-settings-form' ).submit();\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t} else {\n\t\t\t//Check for all the settings, and scan for resmush\n\t\t\tvar wrapper_div = self.parents().eq( 1 );\n\n\t\t\t//Get all the main settings\n\t\t\tvar strip_exif = document.getElementById( \"wp-smush-strip_exif\" );\n\t\t\tvar super_smush = document.getElementById( \"wp-smush-lossy\" );\n\t\t\tvar smush_original = document.getElementById( \"wp-smush-original\" );\n\t\t\tvar resize_images = document.getElementById( \"wp-smush-resize\" );\n\t\t\tvar smush_pngjpg = document.getElementById( \"wp-smush-png_to_jpg\" );\n\n\t\t\tvar update_button_txt = true;\n\n\t\t\t$( '.wp-smush-hex-notice' ).hide();\n\n\t\t\t//If Preserve Exif is Checked, and all other settings are off, just save the settings\n\t\t\tif ( ( strip_exif === null || !strip_exif.checked )\n\t\t\t\t&& ( super_smush === null || !super_smush.checked )\n\t\t\t\t&& ( smush_original === null || !smush_original.checked )\n\t\t\t\t&& ( resize_images === null || !resize_images.checked )\n\t\t\t\t&& ( smush_pngjpg === null || !smush_pngjpg.checked )\n\t\t\t) {\n\t\t\t\tupdate_button_txt = false;\n\t\t\t}\n\n\t\t\t//Update text\n\t\t\tself.attr( 'disabled', 'disabled' ).addClass( 'button-grey' );\n\n\t\t\tif ( update_button_txt ) {\n\t\t\t\tself.val( wp_smush_msgs.checking )\n\t\t\t}\n\n\t\t\t//Check if type is set in data attributes\n\t\t\tvar scan_type = self.data( 'type' );\n\t\t\tscan_type = 'undefined' == typeof scan_type ? 'media' : scan_type;\n\n\t\t\t//Ajax param\n\t\t\tvar param = {\n\t\t\t\taction: 'scan_for_resmush',\n\t\t\t\twp_smush_options_nonce: jQuery( '#wp_smush_options_nonce' ).val(),\n\t\t\t\tscan_type: scan_type\n\t\t\t};\n\n\t\t\tparam = jQuery.param( param ) + '&' + jQuery( 'form#wp-smush-settings-form' ).serialize();\n\n\t\t\t//Send ajax, Update Settings, And Check For resmush\n\t\t\tjQuery.post( ajaxurl, param ).done( function () {\n\t\t\t\tjQuery( 'form#wp-smush-settings-form' ).submit();\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t}\n\t} );\n\n\t// On Resmush click.\n\t$( 'body' ).on( 'click', '.wp-smush-skip-resmush', function ( e ) {\n\t\te.preventDefault();\n\t\tvar self = jQuery( this );\n\t\tvar container = self.parents().eq( 1 );\n\n\t\t// Remove Parent div.\n\t\tvar $el = self.parent();\n\t\tremove_element( $el );\n\n\t\t// Remove Settings Notice.\n\t\t$( '.sui-notice-top.sui-notice-success' ).remove();\n\n\t\t// Set button attribute to skip re-smush ids.\n\t\tcontainer.find( '.wp-smush-all' ).attr( 'data-smush', 'skip_resmush' );\n\n\t\t// Update Smushed count.\n\t\twp_smushit_data.count_smushed = parseInt( wp_smushit_data.count_smushed ) + wp_smushit_data.resmush.length;\n\t\twp_smushit_data.count_supersmushed = parseInt( wp_smushit_data.count_supersmushed ) + wp_smushit_data.resmush.length;\n\n\t\t// Update Stats.\n\t\tif ( wp_smushit_data.count_smushed == wp_smushit_data.count_total ) {\n\n\t\t\t// Show all done notice.\n\t\t\t$( '.wp-smush-notice.wp-smush-all-done, .wp-smush-pagespeed-recommendation' ).show();\n\n\t\t\t// Hide Smush button.\n\t\t\t$( '.wp-smush-bulk-wrapper ' ).hide()\n\n\t\t}\n\t\t//Remove Re-Smush Notice\n\t\t$( '.wp-smush-resmush-notice' ).remove();\n\n\t\tvar type = $( '.wp-smush-scan' ).data( 'type' );\n\t\ttype = 'undefined' == typeof type ? 'media' : type;\n\n\t\tvar smushed_count = 'undefined' != typeof wp_smushit_data.count_smushed ? wp_smushit_data.count_smushed : 0;\n\n\t\tvar smush_percent = ( smushed_count / wp_smushit_data.count_total ) * 100;\n\t\tsmush_percent = precise_round( smush_percent, 1 );\n\n\t\t$( '.wp-smush-images-percent' ).html( smush_percent );\n\n\t\t//Update the Progress Bar Width\n\t\t// get the progress bar\n\t\tvar $progress_bar = jQuery( '.bulk-smush-wrapper .wp-smush-progress-inner' );\n\t\tif ( $progress_bar.length < 1 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// increase progress\n\t\t$progress_bar.css( 'width', smush_percent + '%' );\n\n\t\t//Show the default bulk smush notice\n\t\t$( '.wp-smush-bulk-wrapper' ).show();\n\t\t$( '.wp-smush-bulk-wrapper .sui-notice' ).show();\n\n\t\tvar params = {\n\t\t\taction: 'delete_resmush_list',\n\t\t\ttype: type\n\t\t};\n\t\t//Delete resmush list, @todo: update stats from the ajax response\n\t\t$.post( ajaxurl, params, function ( res ) {\n\t\t\t//Remove the whole li element on success\n\t\t\tif ( res.success && 'undefined' != typeof res.data.stats ) {\n\t\t\t\tvar stats = res.data.stats;\n\t\t\t\t//Update wp_smushit_data ( Smushed count, Smushed Percent, Image count, Super smush count, resize savings, conversion savings )\n\t\t\t\tif ( 'undefinied' != typeof wp_smushit_data ) {\n\t\t\t\t\twp_smushit_data.count_images = 'undefined' != typeof stats.count_images ? parseInt( wp_smushit_data.count_images ) + stats.count_images : wp_smushit_data.count_images;\n\t\t\t\t\twp_smushit_data.size_before = 'undefined' != typeof stats.size_before ? parseInt( wp_smushit_data.size_before ) + stats.size_before : wp_smushit_data.size_before;\n\t\t\t\t\twp_smushit_data.size_after = 'undefined' != typeof stats.size_after ? parseInt( wp_smushit_data.size_after ) + stats.size_after : wp_smushit_data.size_after;\n\t\t\t\t\twp_smushit_data.savings_resize = 'undefined' != typeof stats.savings_resize ? parseInt( wp_smushit_data.savings_resize ) + stats.savings_resize : wp_smushit_data.savings_resize;\n\t\t\t\t\twp_smushit_data.savings_conversion = 'undefined' != typeof stats.savings_conversion ? parseInt( wp_smushit_data.savings_conversion ) + stats.savings_conversion : wp_smushit_data.savings_conversion;\n\t\t\t\t\t//Add directory smush stats\n\t\t\t\t\tif ( 'undefined' != typeof ( wp_smushit_data.savings_dir_smush ) && 'undefined' != typeof ( wp_smushit_data.savings_dir_smush.orig_size ) ) {\n\t\t\t\t\t\twp_smushit_data.size_before = 'undefined' != typeof wp_smushit_data.savings_dir_smush ? parseInt( wp_smushit_data.size_before ) + parseInt( wp_smushit_data.savings_dir_smush.orig_size ) : wp_smushit_data.size_before;\n\t\t\t\t\t\twp_smushit_data.size_after = 'undefined' != typeof wp_smushit_data.savings_dir_smush ? parseInt( wp_smushit_data.size_after ) + parseInt( wp_smushit_data.savings_dir_smush.image_size ) : wp_smushit_data.size_after;\n\t\t\t\t\t}\n\n\t\t\t\t\twp_smushit_data.count_resize = 'undefined' != typeof stats.count_resize ? parseInt( wp_smushit_data.count_resize ) + stats.count_resize : wp_smushit_data.count_resize;\n\t\t\t\t}\n\t\t\t\t//Smush Notice\n\t\t\t\tif ( $( '.bulk-smush-wrapper .wp-smush-remaining-count' ).length && 'undefined' != typeof wp_smushit_data.unsmushed ) {\n\t\t\t\t\t$( '.bulk-smush-wrapper .wp-smush-remaining-count' ).html( wp_smushit_data.unsmushed.length );\n\t\t\t\t}\n\t\t\t\tupdate_stats();\n\t\t\t}\n\t\t} );\n\n\t} );\n\n\t/**\n\t * Enable resize in settings and scroll.\n\t */\n\tvar scroll_and_enable_resize = function () {\n\t\t// Enable resize, show resize settings.\n\t\t$( '#wp-smush-resize' ).prop( 'checked', true ).focus();\n\t\t$( 'div.wp-smush-resize-settings-wrap' ).show();\n\n\t\t// Scroll down to settings area.\n\t\tgoToByScroll( \"#column-wp-smush-resize\" );\n\t}\n\n\t/**\n\t * Enable super smush in settings and scroll.\n\t */\n\tvar scroll_and_enable_lossy = function () {\n\t\t// Enable super smush.\n\t\t$( '#wp-smush-lossy' ).prop( 'checked', true ).focus();\n\n\t\t// Scroll down to settings area.\n\t\tgoToByScroll( \"#column-wp-smush-lossy\" );\n\t}\n\n\t// Enable super smush on clicking link from stats area.\n\t$( 'a.wp-smush-lossy-enable' ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\n\t\tscroll_and_enable_lossy();\n\t} );\n\n\t// Enable resize on clicking link from stats area.\n\t$( '.wp-smush-resize-enable' ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\n\t\tscroll_and_enable_resize();\n\t} );\n\n\t// If settings string is found in url, enable and scroll.\n\tif ( window.location.hash ) {\n\t\tvar setting_hash = window.location.hash.substring( 1 );\n\t\t// Enable and scroll to resize settings.\n\t\tif ( 'enable-resize' === setting_hash ) {\n\t\t\tscroll_and_enable_resize();\n\t\t} else if ( 'enable-lossy' === setting_hash ) {\n\t\t\t// Enable and scroll to lossy settings.\n\t\t\tscroll_and_enable_lossy();\n\t\t}\n\t}\n\n\t//Trigger Bulk\n\t$( 'body' ).on( 'click', '.wp-smush-trigger-bulk', function ( e ) {\n\t\te.preventDefault();\n\t\t//Induce Setting button save click\n\t\t$( 'button.wp-smush-all' ).click();\n\t\t$( 'span.sui-notice-dismiss' ).click();\n\t} );\n\n\t//Allow the checkboxes to be Keyboard Accessible\n\t$( '.wp-smush-setting-row .toggle-checkbox' ).focus( function () {\n\t\t//If Space is pressed\n\t\t$( this ).keypress( function ( e ) {\n\t\t\tif ( e.keyCode == 32 ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t$( this ).find( '.toggle-checkbox' ).click();\n\t\t\t}\n\t\t} );\n\t} );\n\n\t// Re-Validate Resize Width And Height.\n\t$( 'body' ).on( 'blur', '.wp-smush-resize-input', function () {\n\n\t\tvar self = $( this );\n\n\t\tvar wrapper_div = self.parents().eq( 4 );\n\n\t\t// Initiate the check.\n\t\tvalidate_resize_settings( wrapper_div, false, false ); // run the validation.\n\t} );\n\n\t// Handle Resize Checkbox toggle, to show/hide width, height settings.\n\t$( 'body' ).on( 'click', '#wp-smush-resize, #wp-smush-resize-quick-setup', function () {\n\t\tvar self = $( this );\n\t\tvar settings_wrap = $( '.wp-smush-resize-settings-wrap' );\n\n\t\tif ( self.is( ':checked' ) ) {\n\t\t\tsettings_wrap.show();\n\t\t} else {\n\t\t\tsettings_wrap.hide();\n\t\t}\n\t} );\n\n\t// Handle Automatic Smush Checkbox toggle, to show/hide image size settings.\n\t$( 'body' ).on( 'click', '#wp-smush-auto', function () {\n\t\tvar self = $( this );\n\t\tvar settings_wrap = $( '.wp-smush-image-size-list' );\n\n\t\tif ( self.is( ':checked' ) ) {\n\t\t\tsettings_wrap.show();\n\t\t} else {\n\t\t\tsettings_wrap.hide();\n\t\t}\n\t} );\n\n\t// Handle auto detect checkbox toggle, to show/hide highlighting notice.\n\t$( 'body' ).on( 'click', '#wp-smush-detection', function () {\n\t\tvar self = $( this );\n\t\tvar notice_wrap = $( '.smush-highlighting-notice' );\n\n\t\tif ( self.is( ':checked' ) ) {\n\t\t\tnotice_wrap.show();\n\t\t} else {\n\t\t\tnotice_wrap.hide();\n\t\t}\n\t} );\n\n\t// Handle PNG to JPG Checkbox toggle, to show/hide Transparent image conversion settings.\n\t$( '#wp-smush-png_to_jpg' ).click( function () {\n\t\tvar self = $( this );\n\t\tvar settings_wrap = $( '.wp-smush-png_to_jpg-wrap' );\n\n\t\tif ( self.is( ':checked' ) ) {\n\t\t\tsettings_wrap.show();\n\t\t} else {\n\t\t\tsettings_wrap.hide();\n\t\t}\n\t} );\n\n\t//Handle, Change event in Enable Networkwide settings\n\t$( '#wp-smush-networkwide' ).on( 'click', function ( e ) {\n\t\tif ( $( this ).is( ':checked' ) ) {\n\t\t\t$( '.network-settings-wrapper' ).show();\n\t\t\t$( '.sui-vertical-tabs li' ).not( '.smush-bulk' ).each( function ( n ) {\n\t\t\t\t$( this ).removeClass( 'sui-hidden' );\n\t\t\t} );\n\t\t} else {\n\t\t\t$( '.network-settings-wrapper' ).hide();\n\t\t\t$( '.sui-vertical-tabs li' ).not( '.smush-bulk' ).each( function ( n ) {\n\t\t\t\t$( this ).addClass( 'sui-hidden' );\n\t\t\t} );\n\t\t}\n\t} );\n\n\t//Handle Re-check button functionality\n\t$( \"#wp-smush-revalidate-member\" ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\t\t//Ajax Params\n\t\tvar params = {\n\t\t\taction: 'smush_show_warning',\n\t\t};\n\t\tvar link = $( this );\n\t\tvar parent = link.parents().eq( 1 );\n\t\tparent.addClass( 'loading-notice' );\n\t\t$.get( ajaxurl, params, function ( r ) {\n\t\t\t//remove the warning\n\t\t\tparent.removeClass( 'loading-notice' ).addClass( \"loaded-notice\" );\n\t\t\tif ( 0 == r ) {\n\t\t\t\tparent.attr( 'data-message', wp_smush_msgs.membership_valid );\n\t\t\t\tremove_element( parent, 1000 );\n\t\t\t} else {\n\t\t\t\tparent.attr( 'data-message', wp_smush_msgs.membership_invalid );\n\t\t\t\tsetTimeout( function remove_loader() {\n\t\t\t\t\tparent.removeClass( 'loaded-notice' );\n\t\t\t\t}, 1000 )\n\t\t\t}\n\t\t} );\n\t} );\n\n\t//Initiate Re-check if the variable is set\n\tif ( 'undefined' != typeof (wp_smush_run_re_check) && 1 == wp_smush_run_re_check && $( '.wp-smush-scan' ).length > 0 ) {\n\t\t//Run the Re-check\n\t\trun_re_check( $( '.wp-smush-scan' ), false );\n\t}\n\n\tif ( $( 'li.smush-dir-savings' ).length > 0 ) {\n\t\t//Update Directory Smush, as soon as the page loads\n\t\tvar stats_param = {\n\t\t\taction: 'get_dir_smush_stats'\n\t\t};\n\t\t$.get( ajaxurl, stats_param, function ( r ) {\n\n\t\t\t//Hide the spinner\n\t\t\t$( 'li.smush-dir-savings .sui-icon-loader' ).hide();\n\n\t\t\t//If there are no errors, and we have a message to display\n\t\t\tif ( !r.success && 'undefined' != typeof ( r.data.message ) ) {\n\t\t\t\t$( 'div.wp-smush-scan-result div.content' ).prepend( r.data.message );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//If there is no value in r\n\t\t\tif ( 'undefined' == typeof ( r.data) || 'undefined' == typeof ( r.data.dir_smush ) ) {\n\t\t\t\t//Append the text\n\t\t\t\t$( 'li.smush-dir-savings span.wp-smush-stats' ).append( wp_smush_msgs.ajax_error );\n\t\t\t\t$( 'li.smush-dir-savings span.wp-smush-stats span' ).hide();\n\n\t\t\t} else {\n\t\t\t\t//Update the stats\n\t\t\t\tupdate_cummulative_stats( r.data );\n\t\t\t}\n\n\t\t} );\n\t}\n\t//Close Directory smush modal, if pressed esc\n\t$( document ).keyup( function ( e ) {\n\t\tif ( e.keyCode === 27 ) {\n\t\t\tvar modal = $( 'div.dev-overlay.wp-smush-list-dialog, div.dev-overlay.wp-smush-get-pro' );\n\t\t\t//If the Directory dialog is not visible\n\t\t\tif ( !modal.is( ':visible' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmodal.find( 'div.close' ).click();\n\n\t\t}\n\t} );\n\n\t//Dismiss Smush recommendation\n\t$( 'span.dismiss-recommendation' ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\t\tvar parent = $( this ).parent();\n\t\t//remove div and save preference in db\n\t\tparent.hide( 'slow', function () {\n\t\t\tparent.remove();\n\t\t} );\n\t\t$.ajax( {\n\t\t\ttype: 'POST',\n\t\t\turl: ajaxurl,\n\t\t\tdata: {\n\t\t\t\t'action': 'hide_pagespeed_suggestion'\n\t\t\t}\n\t\t} );\n\t} )\n\n\t//Remove API message\n\t$( 'div.wp-smush-api-message i.icon-fi-close' ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\t\tvar parent = $( this ).parent();\n\t\t//remove div and save preference in db\n\t\tparent.hide( 'slow', function () {\n\t\t\tparent.remove();\n\t\t} );\n\t\t$.ajax( {\n\t\t\ttype: 'POST',\n\t\t\turl: ajaxurl,\n\t\t\tdata: {\n\t\t\t\t'action': 'hide_api_message'\n\t\t\t}\n\t\t} );\n\t} );\n\n} );\n(function ( $ ) {\n\tvar Smush = function ( element, options ) {\n\t\tvar elem = $( element );\n\n\t\tvar defaults = {\n\t\t\tisSingle: false,\n\t\t\tajaxurl: '',\n\t\t\tmsgs: {},\n\t\t\tmsgClass: 'wp-smush-msg',\n\t\t\tids: []\n\t\t};\n\t};\n\t$.fn.wpsmush = function ( options ) {\n\t\treturn this.each( function () {\n\t\t\tvar element = $( this );\n\n\t\t\t// Return early if this element already has a plugin instance\n\t\t\tif ( element.data( 'wpsmush' ) )\n\t\t\t\treturn;\n\n\t\t\t// pass options to plugin constructor and create a new instance\n\t\t\tvar wpsmush = new Smush( this, options );\n\n\t\t\t// Store plugin object in this element's data\n\t\t\telement.data( 'wpsmush', wpsmush );\n\t\t} );\n\t};\n\n})( jQuery );","jQuery( function ( $ ) {\n\t'use strict';\n\n\t// Remove dismissable notices.\n\t$( '.sui-wrap' ).on( 'click', '.sui-notice-dismiss', function ( e ) {\n\t\te.preventDefault();\n\n\t\t$( this ).parent().stop().slideUp( 'slow' );\n\t} );\n\n\t$( window ).on( 'load', function () {\n\t\t// If quick setup box is found, show.\n\t\tif ( $( '#smush-quick-setup-dialog' ).length > 0 ) {\n\t\t\t// Show the modal.\n\t\t\twindow.SUI.dialogs['smush-quick-setup-dialog'].show();\n\t\t}\n\t} );\n\n} );","/**\n * Modals JavaScript code.\n */\n\n( function ( $ ) {\n\t'use strict';\n\n\t/**\n\t * Quick Setup - Form Submit\n\t */\n\t$( '#smush-quick-setup-submit' ).on( 'click', function () {\n\t\tconst self = $( this );\n\n\t\t$.ajax( {\n\t\t\ttype: 'POST',\n\t\t\turl: ajaxurl,\n\t\t\tdata: $( '#smush-quick-setup-form' ).serialize(),\n\t\t\tbeforeSend: function () {\n\t\t\t\t// Disable the button.\n\t\t\t\tself.attr( 'disabled', 'disabled' );\n\n\t\t\t\t// Show loader.\n\t\t\t\t$( '<span class=\"sui-icon-loader sui-loading\"></span>' ).insertAfter( self );\n\t\t\t},\n\t\t\tsuccess: function ( data ) {\n\t\t\t\t// Enable the button.\n\t\t\t\tself.removeAttr( 'disabled' );\n\t\t\t\t// Remove the loader.\n\t\t\t\tself.parent().find( 'span.spinner' ).remove();\n\n\t\t\t\t// Reload the Page.\n\t\t\t\tlocation.reload();\n\t\t\t}\n\t\t} );\n\t} );\n\n\t/**\n\t * Quick Setup - Skip button\n\t */\n\t$( '.smush-skip-setup' ).on( 'click', function () {\n\t\tconst form = $( 'form#smush-quick-setup-form' );\n\n\t\t$.ajax( {\n\t\t\ttype: 'POST',\n\t\t\turl: ajaxurl,\n\t\t\tdata: form.serialize(),\n\t\t\tbeforeSend: function () {\n\t\t\t\tform.find( '.button' ).attr( 'disabled', 'disabled' );\n\t\t\t}\n\t\t} );\n\t} );\n\n}( jQuery ));","/**\n * Directory Smush module JavaScript code.\n *\n * @since 2.8.1 Separated from admin.js into dedicated file.\n */\n\nimport { createTree } from 'jquery.fancytree';\nimport Scanner from './directory-scanner';\n\n( function( $ ) {\n\t'use strict';\n\n\tWP_Smush.directory = {\n\t\tselected: [],\n\t\ttree: [],\n\t\twp_smush_msgs: [],\n\n\t\tinit: function () {\n\t\t\tconst self = this;\n\n\t\t\tlet progress_dialog = $( '#wp-smush-progress-dialog');\n\n\t\t\t// Init image scanner.\n\t\t\tthis.scanner = new Scanner( wp_smushit_data.dir_smush.totalSteps, wp_smushit_data.dir_smush.currentScanStep );\n\n\t\t\t/**\n\t\t\t * Smush translation strings.\n\t\t\t *\n\t\t\t * @var {array} wp_smush_msgs\n\t\t\t */\n\t\t\tif ( wp_smush_msgs ) {\n\t\t\t\tthis.wp_smush_msgs = wp_smush_msgs;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Folder select: Choose Folder in Directory Smush tab clicked.\n\t\t\t */\n\t\t\t$( 'div.sui-wrap' ).on( 'click', 'button.wp-smush-browse', function ( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\t// Hide all the notices.\n\t\t\t\t$( 'div.wp-smush-scan-result div.wp-smush-notice' ).hide();\n\n\t\t\t\t// If disabled, do not process.\n\t\t\t\tif ( $( this ).attr( 'disabled' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Disable buttons.\n\t\t\t\t$( this ).attr( 'disabled', 'disabled' );\n\n\t\t\t\t// Remove notice.\n\t\t\t\t$( 'div.wp-smush-info' ).remove();\n\n\t\t\t\tself.showSmushDialog();\n\n\t\t\t\t// Display file tree for directory Smush.\n\t\t\t\tself.initFileTree();\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * Stats section: Directory Link\n\t\t\t */\n\t\t\t$( 'body' ).on( 'click', 'a.wp-smush-dir-link', function ( e ) {\n\t\t\t\tif ( $( 'div.sui-wrap button.wp-smush-browse' ).length > 0 ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tSUI.dialogs[\"wp-smush-list-dialog\"].show();\n\t\t\t\t\t//Display File tree for Directory Smush\n\t\t\t\t\tself.initFileTree();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * Smush images: Smush in Choose Directory modal clicked\n\t\t\t */\n\t\t\t$( '.wp-smush-select-dir' ).on( 'click', function ( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\t// If disabled, do not process\n\t\t\t\tif ( $( this ).attr( 'disabled' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst button = $( this );\n\n\t\t\t\t$( 'div.wp-smush-list-dialog div.sui-box-body' ).css( { 'opacity': '0.8' } );\n\t\t\t\t$( 'div.wp-smush-list-dialog div.sui-box-body a' ).unbind( 'click' );\n\n\t\t\t\t// Disable button\n\t\t\t\tbutton.attr( 'disabled', 'disabled' );\n\n\t\t\t\tlet spinner = button.parent().find( '.add-dir-loader' );\n\t\t\t\t// Display the spinner\n\t\t\t\tspinner.addClass( 'sui-icon-loader sui-loading' );\n\n\t\t\t\tconst selectedFolders = self.tree.getSelectedNodes(),\n\t\t\t\t abs_path = $( 'input[name=\"wp-smush-base-path\"]' ).val(); // Absolute path.\n\n\t\t\t\tlet paths = [];\n\t\t\t\tselectedFolders.forEach( function ( folder ) {\n\t\t\t\t\tpaths.push( abs_path + '/' + folder.key );\n\t\t\t\t});\n\n\t\t\t\t// Send a ajax request to get a list of all the image files\n\t\t\t\tconst param = {\n\t\t\t\t\taction: 'image_list',\n\t\t\t\t\tsmush_path: paths,\n\t\t\t\t\timage_list_nonce: $( 'input[name=\"image_list_nonce\"]' ).val()\n\t\t\t\t};\n\n\t\t\t\t$.get( ajaxurl, param, function ( response ) {\n\t\t\t\t\t// Close the dialog.\n\t\t\t\t\tSUI.dialogs['wp-smush-list-dialog'].hide();\n\n\t\t\t\t\t// TODO: check for errors.\n\t\t\t\t\tself.scanner = new Scanner( response.data, 0 );\n\t\t\t\t\tself.showProgressDialog( response.data );\n\t\t\t\t\tself.scanner.scan();\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * On dialog close make browse button active.\n\t\t\t */\n\t\t\t$( '#wp-smush-list-dialog' ).on( 'click', '.sui-dialog-close', function () {\n\t\t\t\t$( '.wp-smush-browse' ).removeAttr( 'disabled' );\n\n\t\t\t\t// Close the dialog.\n\t\t\t\tSUI.dialogs['wp-smush-list-dialog'].hide();\n\n\t\t\t\t$( '.wp-smush-select-dir, button.wp-smush-browse, a.wp-smush-dir-link' ).removeAttr( 'disabled' );\n\n\t\t\t\t// Reset the opacity for content and scan button\n\t\t\t\t$( '.wp-smush-select-dir, .wp-smush-list-dialog .sui-box-body' ).css( {'opacity': '1'} );\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * Cancel scan.\n\t\t\t */\n\t\t\tprogress_dialog.on( 'click', '.sui-icon-close, .sui-dialog-close, .wp-smush-cancel-dir', function ( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t// Display the spinner\n\t\t\t\t$( this ).parent().find( '.add-dir-loader' ).addClass( 'sui-icon-loader sui-loading' );\n\t\t\t\tself.scanner.cancel().done( () => window.location.href = self.wp_smush_msgs.directory_url );\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * Continue scan.\n\t\t\t */\n\t\t\tprogress_dialog.on( 'click', '.sui-icon-play, .wp-smush-resume-scan', function ( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tself.scanner.resume();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Get directory list using Ajax.\n\t\t *\n\t\t * @param {string} node Node for which to get the directory list.\n\t\t *\n\t\t * @returns {string}\n\t\t */\n\t\tgetDirectoryList: function ( node = '' ) {\n\t\t\tlet res = '';\n\n\t\t\t$.ajax( {\n\t\t\t\ttype: \"GET\",\n\t\t\t\turl: ajaxurl,\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'smush_get_directory_list',\n\t\t\t\t\tlist_nonce: jQuery( 'input[name=\"list_nonce\"]' ).val(),\n\t\t\t\t\tdir: node\n\t\t\t\t},\n\t\t\t\tsuccess: function ( response ) {\n\t\t\t\t\tres = response.data;\n\t\t\t\t},\n\t\t\t\tasync: false\n\t\t\t} );\n\n\t\t\t// Update the button text.\n\t\t\t$( 'button.wp-smush-select-dir' ).html( self.wp_smush_msgs.add_dir );\n\n\t\t\treturn res;\n\t\t},\n\n\t\t/**\n\t\t * Init fileTree.\n\t\t */\n\t\tinitFileTree: function () {\n\t\t\tconst self = this;\n\n\t\t\tlet smushButton = $( 'button.wp-smush-select-dir' );\n\n\t\t\tself.tree = createTree('.wp-smush-list-dialog .content', {\n\t\t\t\tautoCollapse: true, // Automatically collapse all siblings, when a node is expanded\n\t\t\t\tclickFolderMode: 3, // 1:activate, 2:expand, 3:activate and expand, 4:activate (dblclick expands)\n\t\t\t\tcheckbox: true, // Show checkboxes\n\t\t\t\tdebugLevel: 0, // 0:quiet, 1:errors, 2:warnings, 3:infos, 4:debug\n\t\t\t\tselectMode: 3, // 1:single, 2:multi, 3:multi-hier\n\t\t\t\ttabindex: '0', // Whole tree behaves as one single control\n\t\t\t\tsource: self.getDirectoryList,\n\t\t\t\tlazyLoad: ( event, data ) => data.result = self.getDirectoryList( data.node.key ),\n\t\t\t\tloadChildren: ( event, data ) => data.node.fixSelection3AfterClick(), // Apply parent's state to new child nodes:\n\t\t\t\tselect: () => smushButton.attr( 'disabled', !+self.tree.getSelectedNodes().length ),\n\t\t\t\tinit: () => smushButton.attr( 'disabled', true ),\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Show directory list popup and focus on close button.\n\t\t */\n\t\tshowSmushDialog: function () {\n\t\t\t// Shows the available directories.\n\t\t\tSUI.dialogs['wp-smush-list-dialog'].show();\n\t\t\t$( '.wp-smush-list-dialog div.close' ).focus();\n\t\t},\n\n\t\t/**\n\t\t * Show progress dialog.\n\t\t *\n\t\t * @param {int} items Number of items in the scan.\n\t\t */\n\t\tshowProgressDialog: function ( items ) {\n\t\t\t// Update items status and show the progress dialog..\n\t\t\t$( '.wp-smush-progress-dialog .sui-progress-state-text' ).html( '0/' + items + ' ' + self.wp_smush_msgs.progress_smushed );\n\t\t\tSUI.dialogs['wp-smush-progress-dialog'].show();\n\t\t\t$( '.wp-smush-progress-dialog div.close' ).focus();\n\t\t},\n\n\t\t/**\n\t\t * Update progress bar during directory smush.\n\t\t *\n\t\t * @param {int} progress Current progress in percent.\n\t\t * @param {boolean} cancel Cancel status.\n\t\t */\n\t\tupdateProgressBar: function ( progress, cancel = false ) {\n\t\t\tif ( progress > 100 ) {\n\t\t\t\tprogress = 100;\n\t\t\t}\n\n\t\t\t// Update progress bar\n\t\t\t$( '.sui-progress-block .sui-progress-text span' ).text( progress + '%' );\n\t\t\t$( '.sui-progress-block .sui-progress-bar span' ).width( progress + '%' );\n\n\t\t\tif ( progress >= 90 ) {\n\t\t\t\t$( '.sui-progress-state .sui-progress-state-text' ).text( 'Finalizing...' );\n\t\t\t}\n\n\t\t\tif ( cancel ) {\n\t\t\t\t$( '.sui-progress-state .sui-progress-state-text' ).text( 'Cancelling...' );\n\t\t\t}\n\t\t},\n\n\t};\n\n\tWP_Smush.directory.init();\n\n}( jQuery ));\n","/*!\n * jquery.fancytree.js\n * Tree view control with support for lazy loading and much more.\n * https://github.com/mar10/fancytree/\n *\n * Copyright (c) 2008-2018, Martin Wendt (http://wwWendt.de)\n * Released under the MIT license\n * https://github.com/mar10/fancytree/wiki/LicenseInfo\n *\n * @version 2.29.1\n * @date 2018-06-27T18:51:43Z\n */\n\n/** Core Fancytree module.\n */\n\n// UMD wrapper for the Fancytree core module\n;(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./jquery.fancytree.ui-deps\" ], factory );\n\t} else if ( typeof module === \"object\" && module.exports ) {\n\t\t// Node/CommonJS\n\t\trequire(\"./jquery.fancytree.ui-deps\");\n\t\tmodule.exports = factory(require(\"jquery\"));\n\t} else {\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n\n}( function( $ ) {\n\n\"use strict\";\n\n// prevent duplicate loading\nif ( $.ui && $.ui.fancytree ) {\n\t$.ui.fancytree.warn(\"Fancytree: ignored duplicate include\");\n\treturn;\n}\n\n\n/* *****************************************************************************\n * Private functions and variables\n */\n\nvar i, attr,\n\tFT = null, // initialized below\n\tTEST_IMG = new RegExp(/\\.|\\//), // strings are considered image urls if they contain '.' or '/'\n\tREX_HTML = /[&<>\"'\\/]/g, // Escape those characters\n\tREX_TOOLTIP = /[<>\"'\\/]/g, // Don't escape `&` in tooltips\n\tRECURSIVE_REQUEST_ERROR = \"$recursive_request\",\n\tENTITY_MAP = {\"&\": \"&\", \"<\": \"<\", \">\": \">\", \"\\\"\": \""\", \"'\": \"'\", \"/\": \"/\"},\n\tIGNORE_KEYCODES = { 16: true, 17: true, 18: true },\n\tSPECIAL_KEYCODES = {\n\t\t8: \"backspace\", 9: \"tab\", 10: \"return\", 13: \"return\",\n\t\t// 16: null, 17: null, 18: null, // ignore shift, ctrl, alt\n\t\t19: \"pause\", 20: \"capslock\", 27: \"esc\", 32: \"space\", 33: \"pageup\",\n\t\t34: \"pagedown\", 35: \"end\", 36: \"home\", 37: \"left\", 38: \"up\",\n\t\t39: \"right\", 40: \"down\", 45: \"insert\", 46: \"del\", 59: \";\", 61: \"=\",\n\t\t96: \"0\", 97: \"1\", 98: \"2\", 99: \"3\", 100: \"4\", 101: \"5\", 102: \"6\",\n\t\t103: \"7\", 104: \"8\", 105: \"9\", 106: \"*\", 107: \"+\", 109: \"-\", 110: \".\",\n\t\t111: \"/\", 112: \"f1\", 113: \"f2\", 114: \"f3\", 115: \"f4\", 116: \"f5\",\n\t\t117: \"f6\", 118: \"f7\", 119: \"f8\", 120: \"f9\", 121: \"f10\", 122: \"f11\",\n\t\t123: \"f12\", 144: \"numlock\", 145: \"scroll\", 173: \"-\", 186: \";\", 187: \"=\",\n\t\t188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n\t\t221: \"]\", 222: \"'\"},\n\tMOUSE_BUTTONS = { 0: \"\", 1: \"left\", 2: \"middle\", 3: \"right\" },\n\t// Boolean attributes that can be set with equivalent class names in the LI tags\n\t// Note: v2.23: checkbox and hideCheckbox are *not* in this list\n\tCLASS_ATTRS = \"active expanded focus folder lazy radiogroup selected unselectable unselectableIgnore\".split(\" \"),\n\tCLASS_ATTR_MAP = {},\n\t// Top-level Fancytree attributes, that can be set by dict\n\tTREE_ATTRS = \"columns types\".split(\" \"),\n\t// TREE_ATTR_MAP = {},\n\t// Top-level FancytreeNode attributes, that can be set by dict\n\tNODE_ATTRS = \"checkbox expanded extraClasses folder icon iconTooltip key lazy partsel radiogroup refKey selected statusNodeType title tooltip type unselectable unselectableIgnore unselectableStatus\".split(\" \"),\n\tNODE_ATTR_MAP = {},\n\t// Mapping of lowercase -> real name (because HTML5 data-... attribute only supports lowercase)\n\tNODE_ATTR_LOWERCASE_MAP = {},\n\t// Attribute names that should NOT be added to node.data\n\tNONE_NODE_DATA_MAP = {\"active\": true, \"children\": true, \"data\": true, \"focus\": true};\n\nfor(i=0; i<CLASS_ATTRS.length; i++){ CLASS_ATTR_MAP[CLASS_ATTRS[i]] = true; }\nfor(i=0; i<NODE_ATTRS.length; i++) {\n\tattr = NODE_ATTRS[i];\n\tNODE_ATTR_MAP[attr] = true;\n\tif( attr !== attr.toLowerCase() ) {\n\t\tNODE_ATTR_LOWERCASE_MAP[attr.toLowerCase()] = attr;\n\t}\n}\n// for(i=0; i<TREE_ATTRS.length; i++) {\n// \tTREE_ATTR_MAP[TREE_ATTRS[i]] = true;\n// }\n\n\nfunction _assert(cond, msg){\n\t// TODO: see qunit.js extractStacktrace()\n\tif(!cond){\n\t\tmsg = msg ? \": \" + msg : \"\";\n\t\t// consoleApply(\"assert\", [!!cond, msg]);\n\t\t$.error(\"Fancytree assertion failed\" + msg);\n\t}\n}\n\n_assert($.ui, \"Fancytree requires jQuery UI (http://jqueryui.com)\");\n\nfunction consoleApply(method, args){\n\tvar i, s,\n\t\tfn = window.console ? window.console[method] : null;\n\n\tif(fn){\n\t\ttry{\n\t\t\tfn.apply(window.console, args);\n\t\t} catch(e) {\n\t\t\t// IE 8?\n\t\t\ts = \"\";\n\t\t\tfor( i=0; i<args.length; i++ ) {\n\t\t\t\ts += args[i];\n\t\t\t}\n\t\t\tfn(s);\n\t\t}\n\t}\n}\n\n/* support: IE8 Polyfil for Date.now() */\nif( !Date.now ) {\n\tDate.now = function now() { return new Date().getTime(); };\n}\n\n/*Return true if x is a FancytreeNode.*/\nfunction _isNode(x){\n\treturn !!(x.tree && x.statusNodeType !== undefined);\n}\n\n/** Return true if dotted version string is equal or higher than requested version.\n *\n * See http://jsfiddle.net/mar10/FjSAN/\n */\nfunction isVersionAtLeast(dottedVersion, major, minor, patch){\n\tvar i, v, t,\n\t\tverParts = $.map($.trim(dottedVersion).split(\".\"), function(e){ return parseInt(e, 10); }),\n\t\ttestParts = $.map(Array.prototype.slice.call(arguments, 1), function(e){ return parseInt(e, 10); });\n\n\tfor( i = 0; i < testParts.length; i++ ){\n\t\tv = verParts[i] || 0;\n\t\tt = testParts[i] || 0;\n\t\tif( v !== t ){\n\t\t\treturn ( v > t );\n\t\t}\n\t}\n\treturn true;\n}\n\n\n/**\n * Deep-merge a list of objects (but replace array-type options).\n *\n * jQuery's $.extend(true, ...) method does a deep merge, that also merges Arrays.\n * This variant is used to merge extension defaults with user options, and should\n * merge objects, but override arrays (for example the `triggerStart: [...]` option\n * of ext-edit). Also `null` values are copied over and not skipped.\n *\n * See issue #876\n *\n * Example:\n * _simpleDeepMerge({}, o1, o2);\n */\n function _simpleDeepMerge() {\n\tvar options, name, src, copy, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length;\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !$.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\tif ( i === length ) {\n\t\tthrow \"need at least two args\";\n\t}\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Recurse if we're merging plain objects\n\t\t\t\t// (NOTE: unlike $.extend, we don't merge arrays, but relace them)\n\t\t\t\tif ( copy && jQuery.isPlainObject( copy ) ) {\n\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = _simpleDeepMerge( clone, copy );\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Return the modified object\n\treturn target;\n}\n\n\n/** Return a wrapper that calls sub.methodName() and exposes\n * this : tree\n * this._local : tree.ext.EXTNAME\n * this._super : base.methodName.call()\n * this._superApply : base.methodName.apply()\n */\nfunction _makeVirtualFunction(methodName, tree, base, extension, extName){\n\t// $.ui.fancytree.debug(\"_makeVirtualFunction\", methodName, tree, base, extension, extName);\n\t// if(rexTestSuper && !rexTestSuper.test(func)){\n\t// // extension.methodName() doesn't call _super(), so no wrapper required\n\t// return func;\n\t// }\n\t// Use an immediate function as closure\n\tvar proxy = (function(){\n\t\tvar prevFunc = tree[methodName], // org. tree method or prev. proxy\n\t\t\tbaseFunc = extension[methodName], //\n\t\t\t_local = tree.ext[extName],\n\t\t\t_super = function(){\n\t\t\t\treturn prevFunc.apply(tree, arguments);\n\t\t\t},\n\t\t\t_superApply = function(args){\n\t\t\t\treturn prevFunc.apply(tree, args);\n\t\t\t};\n\n\t\t// Return the wrapper function\n\t\treturn function(){\n\t\t\tvar prevLocal = tree._local,\n\t\t\t\tprevSuper = tree._super,\n\t\t\t\tprevSuperApply = tree._superApply;\n\n\t\t\ttry{\n\t\t\t\ttree._local = _local;\n\t\t\t\ttree._super = _super;\n\t\t\t\ttree._superApply = _superApply;\n\t\t\t\treturn baseFunc.apply(tree, arguments);\n\t\t\t}finally{\n\t\t\t\ttree._local = prevLocal;\n\t\t\t\ttree._super = prevSuper;\n\t\t\t\ttree._superApply = prevSuperApply;\n\t\t\t}\n\t\t};\n\t})(); // end of Immediate Function\n\treturn proxy;\n}\n\n/**\n * Subclass `base` by creating proxy functions\n */\nfunction _subclassObject(tree, base, extension, extName){\n\t// $.ui.fancytree.debug(\"_subclassObject\", tree, base, extension, extName);\n\tfor(var attrName in extension){\n\t\tif(typeof extension[attrName] === \"function\"){\n\t\t\tif(typeof tree[attrName] === \"function\"){\n\t\t\t\t// override existing method\n\t\t\t\ttree[attrName] = _makeVirtualFunction(attrName, tree, base, extension, extName);\n\t\t\t}else if(attrName.charAt(0) === \"_\"){\n\t\t\t\t// Create private methods in tree.ext.EXTENSION namespace\n\t\t\t\ttree.ext[extName][attrName] = _makeVirtualFunction(attrName, tree, base, extension, extName);\n\t\t\t}else{\n\t\t\t\t$.error(\"Could not override tree.\" + attrName + \". Use prefix '_' to create tree.\" + extName + \"._\" + attrName);\n\t\t\t}\n\t\t}else{\n\t\t\t// Create member variables in tree.ext.EXTENSION namespace\n\t\t\tif(attrName !== \"options\"){\n\t\t\t\ttree.ext[extName][attrName] = extension[attrName];\n\t\t\t}\n\t\t}\n\t}\n}\n\n\nfunction _getResolvedPromise(context, argArray){\n\tif(context === undefined){\n\t\treturn $.Deferred(function(){this.resolve();}).promise();\n\t}else{\n\t\treturn $.Deferred(function(){this.resolveWith(context, argArray);}).promise();\n\t}\n}\n\n\nfunction _getRejectedPromise(context, argArray){\n\tif(context === undefined){\n\t\treturn $.Deferred(function(){this.reject();}).promise();\n\t}else{\n\t\treturn $.Deferred(function(){this.rejectWith(context, argArray);}).promise();\n\t}\n}\n\n\nfunction _makeResolveFunc(deferred, context){\n\treturn function(){\n\t\tdeferred.resolveWith(context);\n\t};\n}\n\n\nfunction _getElementDataAsDict($el){\n\t// Evaluate 'data-NAME' attributes with special treatment for 'data-json'.\n\tvar d = $.extend({}, $el.data()),\n\t\tjson = d.json;\n\n\tdelete d.fancytree; // added to container by widget factory (old jQuery UI)\n\tdelete d.uiFancytree; // added to container by widget factory\n\n\tif( json ) {\n\t\tdelete d.json;\n\t\t// <li data-json='...'> is already returned as object (http://api.jquery.com/data/#data-html5)\n\t\td = $.extend(d, json);\n\t}\n\treturn d;\n}\n\n\nfunction _escapeTooltip(s){\n\treturn (\"\" + s).replace(REX_TOOLTIP, function(s) {\n\t\treturn ENTITY_MAP[s];\n\t});\n}\n\n\n// TODO: use currying\nfunction _makeNodeTitleMatcher(s){\n\ts = s.toLowerCase();\n\treturn function(node){\n\t\treturn node.title.toLowerCase().indexOf(s) >= 0;\n\t};\n}\n\n\nfunction _makeNodeTitleStartMatcher(s){\n\tvar reMatch = new RegExp(\"^\" + s, \"i\");\n\treturn function(node){\n\t\treturn reMatch.test(node.title);\n\t};\n}\n\n\n/* *****************************************************************************\n * FancytreeNode\n */\n\n\n/**\n * Creates a new FancytreeNode\n *\n * @class FancytreeNode\n * @classdesc A FancytreeNode represents the hierarchical data model and operations.\n *\n * @param {FancytreeNode} parent\n * @param {NodeData} obj\n *\n * @property {Fancytree} tree The tree instance\n * @property {FancytreeNode} parent The parent node\n * @property {string} key Node id (must be unique inside the tree)\n * @property {string} title Display name (may contain HTML)\n * @property {object} data Contains all extra data that was passed on node creation\n * @property {FancytreeNode[] | null | undefined} children Array of child nodes.<br>\n * For lazy nodes, null or undefined means 'not yet loaded'. Use an empty array\n * to define a node that has no children.\n * @property {boolean} expanded Use isExpanded(), setExpanded() to access this property.\n * @property {string} extraClasses Additional CSS classes, added to the node's `<span>`.<br>\n * Note: use `node.add/remove/toggleClass()` to modify.\n * @property {boolean} folder Folder nodes have different default icons and click behavior.<br>\n * Note: Also non-folders may have children.\n * @property {string} statusNodeType null for standard nodes. Otherwise type of special system node: 'error', 'loading', 'nodata', or 'paging'.\n * @property {boolean} lazy True if this node is loaded on demand, i.e. on first expansion.\n * @property {boolean} selected Use isSelected(), setSelected() to access this property.\n * @property {string} tooltip Alternative description used as hover popup\n * @property {string} iconTooltip Description used as hover popup for icon. @since 2.27\n * @property {string} type Node type, used with tree.types map. @since 2.27\n */\nfunction FancytreeNode(parent, obj){\n\tvar i, l, name, cl;\n\n\tthis.parent = parent;\n\tthis.tree = parent.tree;\n\tthis.ul = null;\n\tthis.li = null; // <li id='key' ftnode=this> tag\n\tthis.statusNodeType = null; // if this is a temp. node to display the status of its parent\n\tthis._isLoading = false; // if this node itself is loading\n\tthis._error = null; // {message: '...'} if a load error occurred\n\tthis.data = {};\n\n\t// TODO: merge this code with node.toDict()\n\t// copy attributes from obj object\n\tfor(i=0, l=NODE_ATTRS.length; i<l; i++){\n\t\tname = NODE_ATTRS[i];\n\t\tthis[name] = obj[name];\n\t}\n\t// unselectableIgnore and unselectableStatus imply unselectable\n\tif( this.unselectableIgnore != null || this.unselectableStatus != null ) {\n\t\tthis.unselectable = true;\n\t}\n\tif( obj.hideCheckbox ) {\n\t\t$.error(\"'hideCheckbox' node option was removed in v2.23.0: use 'checkbox: false'\");\n\t}\n\t// node.data += obj.data\n\tif(obj.data){\n\t\t$.extend(this.data, obj.data);\n\t}\n\t// Copy all other attributes to this.data.NAME\n\tfor(name in obj){\n\t\tif(!NODE_ATTR_MAP[name] && !$.isFunction(obj[name]) && !NONE_NODE_DATA_MAP[name]){\n\t\t\t// node.data.NAME = obj.NAME\n\t\t\tthis.data[name] = obj[name];\n\t\t}\n\t}\n\n\t// Fix missing key\n\tif( this.key == null ){ // test for null OR undefined\n\t\tif( this.tree.options.defaultKey ) {\n\t\t\tthis.key = this.tree.options.defaultKey(this);\n\t\t\t_assert(this.key, \"defaultKey() must return a unique key\");\n\t\t} else {\n\t\t\tthis.key = \"_\" + (FT._nextNodeKey++);\n\t\t}\n\t} else {\n\t\tthis.key = \"\" + this.key; // Convert to string (#217)\n\t}\n\n\t// Fix tree.activeNode\n\t// TODO: not elegant: we use obj.active as marker to set tree.activeNode\n\t// when loading from a dictionary.\n\tif(obj.active){\n\t\t_assert(this.tree.activeNode === null, \"only one active node allowed\");\n\t\tthis.tree.activeNode = this;\n\t}\n\tif( obj.selected ){ // #186\n\t\tthis.tree.lastSelectedNode = this;\n\t}\n\t// TODO: handle obj.focus = true\n\n\t// Create child nodes\n\tcl = obj.children;\n\tif( cl ){\n\t\tif( cl.length ){\n\t\t\tthis._setChildren(cl);\n\t\t} else {\n\t\t\t// if an empty array was passed for a lazy node, keep it, in order to mark it 'loaded'\n\t\t\tthis.children = this.lazy ? [] : null;\n\t\t}\n\t} else {\n\t\tthis.children = null;\n\t}\n\t// Add to key/ref map (except for root node)\n//\tif( parent ) {\n\tthis.tree._callHook(\"treeRegisterNode\", this.tree, true, this);\n//\t}\n}\n\n\nFancytreeNode.prototype = /** @lends FancytreeNode# */{\n\t/* Return the direct child FancytreeNode with a given key, index. */\n\t_findDirectChild: function(ptr){\n\t\tvar i, l,\n\t\t\tcl = this.children;\n\n\t\tif(cl){\n\t\t\tif(typeof ptr === \"string\"){\n\t\t\t\tfor(i=0, l=cl.length; i<l; i++){\n\t\t\t\t\tif(cl[i].key === ptr){\n\t\t\t\t\t\treturn cl[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else if(typeof ptr === \"number\"){\n\t\t\t\treturn this.children[ptr];\n\t\t\t}else if(ptr.parent === this){\n\t\t\t\treturn ptr;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t},\n\t// TODO: activate()\n\t// TODO: activateSilently()\n\t/* Internal helper called in recursive addChildren sequence.*/\n\t_setChildren: function(children){\n\t\t_assert(children && (!this.children || this.children.length === 0), \"only init supported\");\n\t\tthis.children = [];\n\t\tfor(var i=0, l=children.length; i<l; i++){\n\t\t\tthis.children.push(new FancytreeNode(this, children[i]));\n\t\t}\n\t},\n\t/**\n\t * Append (or insert) a list of child nodes.\n\t *\n\t * @param {NodeData[]} children array of child node definitions (also single child accepted)\n\t * @param {FancytreeNode | string | Integer} [insertBefore] child node (or key or index of such).\n\t * If omitted, the new children are appended.\n\t * @returns {FancytreeNode} first child added\n\t *\n\t * @see FancytreeNode#applyPatch\n\t */\n\taddChildren: function(children, insertBefore){\n\t\tvar i, l, pos,\n\t\t\torigFirstChild = this.getFirstChild(),\n\t\t\torigLastChild = this.getLastChild(),\n\t\t\tfirstNode = null,\n\t\t\tnodeList = [];\n\n\t\tif($.isPlainObject(children) ){\n\t\t\tchildren = [children];\n\t\t}\n\t\tif(!this.children){\n\t\t\tthis.children = [];\n\t\t}\n\t\tfor(i=0, l=children.length; i<l; i++){\n\t\t\tnodeList.push(new FancytreeNode(this, children[i]));\n\t\t}\n\t\tfirstNode = nodeList[0];\n\t\tif(insertBefore == null){\n\t\t\tthis.children = this.children.concat(nodeList);\n\t\t}else{\n\t\t\t// Returns null if insertBefore is not a direct child:\n\t\t\tinsertBefore = this._findDirectChild(insertBefore);\n\t\t\tpos = $.inArray(insertBefore, this.children);\n\t\t\t_assert(pos >= 0, \"insertBefore must be an existing child\");\n\t\t\t// insert nodeList after children[pos]\n\t\t\tthis.children.splice.apply(this.children, [pos, 0].concat(nodeList));\n\t\t}\n\t\tif ( origFirstChild && !insertBefore ) {\n\t\t\t// #708: Fast path -- don't render every child of root, just the new ones!\n\t\t\t// #723, #729: but only if it's appended to an existing child list\n\t\t\tfor(i=0, l=nodeList.length; i<l; i++) {\n\t\t\t\tnodeList[i].render(); // New nodes were never rendered before\n\t\t\t}\n\t\t\t// Adjust classes where status may have changed\n\t\t\t// Has a first child\n\t\t\tif (origFirstChild !== this.getFirstChild()) {\n\t\t\t\t// Different first child -- recompute classes\n\t\t\t\torigFirstChild.renderStatus();\n\t\t\t}\n\t\t\tif (origLastChild !== this.getLastChild()) {\n\t\t\t\t// Different last child -- recompute classes\n\t\t\t\torigLastChild.renderStatus();\n\t\t\t}\n\t\t} else if( !this.parent || this.parent.ul || this.tr ){\n\t\t\t// render if the parent was rendered (or this is a root node)\n\t\t\tthis.render();\n\t\t}\n\t\tif( this.tree.options.selectMode === 3 ){\n\t\t\tthis.fixSelection3FromEndNodes();\n\t\t}\n\t\tthis.triggerModifyChild(\"add\", nodeList.length === 1 ? nodeList[0] : null);\n\t\treturn firstNode;\n\t},\n\t/**\n\t * Add class to node's span tag and to .extraClasses.\n\t *\n\t * @param {string} className class name\n\t *\n\t * @since 2.17\n\t */\n\taddClass: function(className){\n\t\treturn this.toggleClass(className, true);\n\t},\n\t/**\n\t * Append or prepend a node, or append a child node.\n\t *\n\t * This a convenience function that calls addChildren()\n\t *\n\t * @param {NodeData} node node definition\n\t * @param {string} [mode=child] 'before', 'after', 'firstChild', or 'child' ('over' is a synonym for 'child')\n\t * @returns {FancytreeNode} new node\n\t */\n\taddNode: function(node, mode){\n\t\tif(mode === undefined || mode === \"over\"){\n\t\t\tmode = \"child\";\n\t\t}\n\t\tswitch(mode){\n\t\tcase \"after\":\n\t\t\treturn this.getParent().addChildren(node, this.getNextSibling());\n\t\tcase \"before\":\n\t\t\treturn this.getParent().addChildren(node, this);\n\t\tcase \"firstChild\":\n\t\t\t// Insert before the first child if any\n\t\t\tvar insertBefore = (this.children ? this.children[0] : null);\n\t\t\treturn this.addChildren(node, insertBefore);\n\t\tcase \"child\":\n\t\tcase \"over\":\n\t\t\treturn this.addChildren(node);\n\t\t}\n\t\t_assert(false, \"Invalid mode: \" + mode);\n\t},\n\t/**Add child status nodes that indicate 'More...', etc.\n\t *\n\t * This also maintains the node's `partload` property.\n\t * @param {boolean|object} node optional node definition. Pass `false` to remove all paging nodes.\n\t * @param {string} [mode='child'] 'child'|firstChild'\n\t * @since 2.15\n\t */\n\taddPagingNode: function(node, mode){\n\t\tvar i, n;\n\n\t\tmode = mode || \"child\";\n\t\tif( node === false ) {\n\t\t\tfor(i=this.children.length-1; i >= 0; i--) {\n\t\t\t\tn = this.children[i];\n\t\t\t\tif( n.statusNodeType === \"paging\" ) {\n\t\t\t\t\tthis.removeChild(n);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.partload = false;\n\t\t\treturn;\n\t\t}\n\t\tnode = $.extend({\n\t\t\ttitle: this.tree.options.strings.moreData,\n\t\t\tstatusNodeType: \"paging\",\n\t\t\ticon: false\n\t\t}, node);\n\t\tthis.partload = true;\n\t\treturn this.addNode(node, mode);\n\t},\n\t/**\n\t * Append new node after this.\n\t *\n\t * This a convenience function that calls addNode(node, 'after')\n\t *\n\t * @param {NodeData} node node definition\n\t * @returns {FancytreeNode} new node\n\t */\n\tappendSibling: function(node){\n\t\treturn this.addNode(node, \"after\");\n\t},\n\t/**\n\t * Modify existing child nodes.\n\t *\n\t * @param {NodePatch} patch\n\t * @returns {$.Promise}\n\t * @see FancytreeNode#addChildren\n\t */\n\tapplyPatch: function(patch) {\n\t\t// patch [key, null] means 'remove'\n\t\tif(patch === null){\n\t\t\tthis.remove();\n\t\t\treturn _getResolvedPromise(this);\n\t\t}\n\t\t// TODO: make sure that root node is not collapsed or modified\n\t\t// copy (most) attributes to node.ATTR or node.data.ATTR\n\t\tvar name, promise, v,\n\t\t\tIGNORE_MAP = { children: true, expanded: true, parent: true }; // TODO: should be global\n\n\t\tfor(name in patch){\n\t\t\tv = patch[name];\n\t\t\tif( !IGNORE_MAP[name] && !$.isFunction(v)){\n\t\t\t\tif(NODE_ATTR_MAP[name]){\n\t\t\t\t\tthis[name] = v;\n\t\t\t\t}else{\n\t\t\t\t\tthis.data[name] = v;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Remove and/or create children\n\t\tif(patch.hasOwnProperty(\"children\")){\n\t\t\tthis.removeChildren();\n\t\t\tif(patch.children){ // only if not null and not empty list\n\t\t\t\t// TODO: addChildren instead?\n\t\t\t\tthis._setChildren(patch.children);\n\t\t\t}\n\t\t\t// TODO: how can we APPEND or INSERT child nodes?\n\t\t}\n\t\tif(this.isVisible()){\n\t\t\tthis.renderTitle();\n\t\t\tthis.renderStatus();\n\t\t}\n\t\t// Expand collapse (final step, since this may be async)\n\t\tif(patch.hasOwnProperty(\"expanded\")){\n\t\t\tpromise = this.setExpanded(patch.expanded);\n\t\t}else{\n\t\t\tpromise = _getResolvedPromise(this);\n\t\t}\n\t\treturn promise;\n\t},\n\t/** Collapse all sibling nodes.\n\t * @returns {$.Promise}\n\t */\n\tcollapseSiblings: function() {\n\t\treturn this.tree._callHook(\"nodeCollapseSiblings\", this);\n\t},\n\t/** Copy this node as sibling or child of `node`.\n\t *\n\t * @param {FancytreeNode} node source node\n\t * @param {string} [mode=child] 'before' | 'after' | 'child'\n\t * @param {Function} [map] callback function(NodeData) that could modify the new node\n\t * @returns {FancytreeNode} new\n\t */\n\tcopyTo: function(node, mode, map) {\n\t\treturn node.addNode(this.toDict(true, map), mode);\n\t},\n\t/** Count direct and indirect children.\n\t *\n\t * @param {boolean} [deep=true] pass 'false' to only count direct children\n\t * @returns {int} number of child nodes\n\t */\n\tcountChildren: function(deep) {\n\t\tvar cl = this.children, i, l, n;\n\t\tif( !cl ){\n\t\t\treturn 0;\n\t\t}\n\t\tn = cl.length;\n\t\tif(deep !== false){\n\t\t\tfor(i=0, l=n; i<l; i++){\n\t\t\t\tn += cl[i].countChildren();\n\t\t\t}\n\t\t}\n\t\treturn n;\n\t},\n\t// TODO: deactivate()\n\t/** Write to browser console if debugLevel >= 4 (prepending node info)\n\t *\n\t * @param {*} msg string or object or array of such\n\t */\n\tdebug: function(msg){\n\t\tif( this.tree.options.debugLevel >= 4 ) {\n\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\tconsoleApply(\"log\", arguments);\n\t\t}\n\t},\n\t/** Deprecated.\n\t * @deprecated since 2014-02-16. Use resetLazy() instead.\n\t */\n\tdiscard: function(){\n\t\tthis.warn(\"FancytreeNode.discard() is deprecated since 2014-02-16. Use .resetLazy() instead.\");\n\t\treturn this.resetLazy();\n\t},\n\t/** Remove DOM elements for all descendents. May be called on .collapse event\n\t * to keep the DOM small.\n\t * @param {boolean} [includeSelf=false]\n\t */\n\tdiscardMarkup: function(includeSelf){\n\t\tvar fn = includeSelf ? \"nodeRemoveMarkup\" : \"nodeRemoveChildMarkup\";\n\t\tthis.tree._callHook(fn, this);\n\t},\n\t/** Write error to browser console if debugLevel >= 1 (prepending tree info)\n\t*\n\t* @param {*} msg string or object or array of such\n\t*/\n\terror: function(msg){\n\t\tif( this.options.debugLevel >= 1 ) {\n\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\tconsoleApply(\"error\", arguments);\n\t\t}\n\t},\n\t/**Find all nodes that match condition (excluding self).\n\t *\n\t * @param {string | function(node)} match title string to search for, or a\n\t * callback function that returns `true` if a node is matched.\n\t * @returns {FancytreeNode[]} array of nodes (may be empty)\n\t */\n\tfindAll: function(match) {\n\t\tmatch = $.isFunction(match) ? match : _makeNodeTitleMatcher(match);\n\t\tvar res = [];\n\t\tthis.visit(function(n){\n\t\t\tif(match(n)){\n\t\t\t\tres.push(n);\n\t\t\t}\n\t\t});\n\t\treturn res;\n\t},\n\t/**Find first node that matches condition (excluding self).\n\t *\n\t * @param {string | function(node)} match title string to search for, or a\n\t * callback function that returns `true` if a node is matched.\n\t * @returns {FancytreeNode} matching node or null\n\t * @see FancytreeNode#findAll\n\t */\n\tfindFirst: function(match) {\n\t\tmatch = $.isFunction(match) ? match : _makeNodeTitleMatcher(match);\n\t\tvar res = null;\n\t\tthis.visit(function(n){\n\t\t\tif(match(n)){\n\t\t\t\tres = n;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn res;\n\t},\n\t/* Apply selection state (internal use only) */\n\t_changeSelectStatusAttrs: function(state) {\n\t\tvar changed = false,\n\t\t\topts = this.tree.options,\n\t\t\tunselectable = FT.evalOption(\"unselectable\", this, this, opts, false),\n\t\t\tunselectableStatus = FT.evalOption(\"unselectableStatus\", this, this, opts, undefined);\n\n\t\tif( unselectable && unselectableStatus != null ) {\n\t\t\tstate = unselectableStatus;\n\t\t}\n\t\tswitch(state){\n\t\tcase false:\n\t\t\tchanged = ( this.selected || this.partsel );\n\t\t\tthis.selected = false;\n\t\t\tthis.partsel = false;\n\t\t\tbreak;\n\t\tcase true:\n\t\t\tchanged = ( !this.selected || !this.partsel );\n\t\t\tthis.selected = true;\n\t\t\tthis.partsel = true;\n\t\t\tbreak;\n\t\tcase undefined:\n\t\t\tchanged = ( this.selected || !this.partsel );\n\t\t\tthis.selected = false;\n\t\t\tthis.partsel = true;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t_assert(false, \"invalid state: \" + state);\n\t\t}\n\t\t// this.debug(\"fixSelection3AfterLoad() _changeSelectStatusAttrs()\", state, changed);\n\t\tif( changed ){\n\t\t\tthis.renderStatus();\n\t\t}\n\t\treturn changed;\n\t},\n\t/**\n\t * Fix selection status, after this node was (de)selected in multi-hier mode.\n\t * This includes (de)selecting all children.\n\t */\n\tfixSelection3AfterClick: function(callOpts) {\n\t\tvar flag = this.isSelected();\n\n//\t\tthis.debug(\"fixSelection3AfterClick()\");\n\n\t\tthis.visit(function(node){\n\t\t\tnode._changeSelectStatusAttrs(flag);\n\t\t});\n\t\tthis.fixSelection3FromEndNodes(callOpts);\n\t},\n\t/**\n\t * Fix selection status for multi-hier mode.\n\t * Only end-nodes are considered to update the descendants branch and parents.\n\t * Should be called after this node has loaded new children or after\n\t * children have been modified using the API.\n\t */\n\tfixSelection3FromEndNodes: function(callOpts) {\n\t\tvar opts = this.tree.options;\n\n//\t\tthis.debug(\"fixSelection3FromEndNodes()\");\n\t\t_assert(opts.selectMode === 3, \"expected selectMode 3\");\n\n\t\t// Visit all end nodes and adjust their parent's `selected` and `partsel`\n\t\t// attributes. Return selection state true, false, or undefined.\n\t\tfunction _walk(node){\n\t\t\tvar i, l, child, s, state, allSelected, someSelected, unselIgnore, unselState,\n\t\t\t\tchildren = node.children;\n\n\t\t\tif( children && children.length ){\n\t\t\t\t// check all children recursively\n\t\t\t\tallSelected = true;\n\t\t\t\tsomeSelected = false;\n\n\t\t\t\tfor( i=0, l=children.length; i<l; i++ ){\n\t\t\t\t\tchild = children[i];\n\t\t\t\t\t// the selection state of a node is not relevant; we need the end-nodes\n\t\t\t\t\ts = _walk(child);\n\t\t\t\t\t// if( !child.unselectableIgnore ) {\n\t\t\t\t\tunselIgnore = FT.evalOption(\"unselectableIgnore\", child, child, opts, false);\n\t\t\t\t\tif( !unselIgnore ) {\n\t\t\t\t\t\tif( s !== false ) {\n\t\t\t\t\t\t\tsomeSelected = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( s !== true ) {\n\t\t\t\t\t\t\tallSelected = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstate = allSelected ? true : (someSelected ? undefined : false);\n\t\t\t}else{\n\t\t\t\t// This is an end-node: simply report the status\n\t\t\t\tunselState = FT.evalOption(\"unselectableStatus\", node, node, opts, undefined);\n\t\t\t\tstate = ( unselState == null ) ? !!node.selected : !!unselState;\n\t\t\t}\n\t\t\tnode._changeSelectStatusAttrs(state);\n\t\t\treturn state;\n\t\t}\n\t\t_walk(this);\n\n\t\t// Update parent's state\n\t\tthis.visitParents(function(node){\n\t\t\tvar i, l, child, state, unselIgnore, unselState,\n\t\t\t\tchildren = node.children,\n\t\t\t\tallSelected = true,\n\t\t\t\tsomeSelected = false;\n\n\t\t\tfor( i=0, l=children.length; i<l; i++ ){\n\t\t\t\tchild = children[i];\n\t\t\t\tunselIgnore = FT.evalOption(\"unselectableIgnore\", child, child, opts, false);\n\t\t\t\tif( !unselIgnore ) {\n\t\t\t\t\tunselState = FT.evalOption(\"unselectableStatus\", child, child, opts, undefined);\n\t\t\t\t\tstate = ( unselState == null ) ? !!child.selected : !!unselState;\n\t\t\t\t\t// When fixing the parents, we trust the sibling status (i.e.\n\t\t\t\t\t// we don't recurse)\n\t\t\t\t\tif( state || child.partsel ) {\n\t\t\t\t\t\tsomeSelected = true;\n\t\t\t\t\t}\n\t\t\t\t\tif( !state ) {\n\t\t\t\t\t\tallSelected = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tstate = allSelected ? true : (someSelected ? undefined : false);\n\t\t\tnode._changeSelectStatusAttrs(state);\n\t\t});\n\t},\n\t// TODO: focus()\n\t/**\n\t * Update node data. If dict contains 'children', then also replace\n\t * the hole sub tree.\n\t * @param {NodeData} dict\n\t *\n\t * @see FancytreeNode#addChildren\n\t * @see FancytreeNode#applyPatch\n\t */\n\tfromDict: function(dict) {\n\t\t// copy all other attributes to this.data.xxx\n\t\tfor(var name in dict){\n\t\t\tif(NODE_ATTR_MAP[name]){\n\t\t\t\t// node.NAME = dict.NAME\n\t\t\t\tthis[name] = dict[name];\n\t\t\t}else if(name === \"data\"){\n\t\t\t\t// node.data += dict.data\n\t\t\t\t$.extend(this.data, dict.data);\n\t\t\t}else if(!$.isFunction(dict[name]) && !NONE_NODE_DATA_MAP[name]){\n\t\t\t\t// node.data.NAME = dict.NAME\n\t\t\t\tthis.data[name] = dict[name];\n\t\t\t}\n\t\t}\n\t\tif(dict.children){\n\t\t\t// recursively set children and render\n\t\t\tthis.removeChildren();\n\t\t\tthis.addChildren(dict.children);\n\t\t}\n\t\tthis.renderTitle();\n/*\n\t\tvar children = dict.children;\n\t\tif(children === undefined){\n\t\t\tthis.data = $.extend(this.data, dict);\n\t\t\tthis.render();\n\t\t\treturn;\n\t\t}\n\t\tdict = $.extend({}, dict);\n\t\tdict.children = undefined;\n\t\tthis.data = $.extend(this.data, dict);\n\t\tthis.removeChildren();\n\t\tthis.addChild(children);\n*/\n\t},\n\t/** Return the list of child nodes (undefined for unexpanded lazy nodes).\n\t * @returns {FancytreeNode[] | undefined}\n\t */\n\tgetChildren: function() {\n\t\tif(this.hasChildren() === undefined){ // TODO: only required for lazy nodes?\n\t\t\treturn undefined; // Lazy node: unloaded, currently loading, or load error\n\t\t}\n\t\treturn this.children;\n\t},\n\t/** Return the first child node or null.\n\t * @returns {FancytreeNode | null}\n\t */\n\tgetFirstChild: function() {\n\t\treturn this.children ? this.children[0] : null;\n\t},\n\t/** Return the 0-based child index.\n\t * @returns {int}\n\t */\n\tgetIndex: function() {\n//\t\treturn this.parent.children.indexOf(this);\n\t\treturn $.inArray(this, this.parent.children); // indexOf doesn't work in IE7\n\t},\n\t/** Return the hierarchical child index (1-based, e.g. '3.2.4').\n\t * @param {string} [separator=\".\"]\n\t * @param {int} [digits=1]\n\t * @returns {string}\n\t */\n\tgetIndexHier: function(separator, digits) {\n\t\tseparator = separator || \".\";\n\t\tvar s,\n\t\t\tres = [];\n\t\t$.each(this.getParentList(false, true), function(i, o){\n\t\t\ts = \"\" + (o.getIndex() + 1);\n\t\t\tif( digits ){\n\t\t\t\t// prepend leading zeroes\n\t\t\t\ts = (\"0000000\" + s).substr(-digits);\n\t\t\t}\n\t\t\tres.push(s);\n\t\t});\n\t\treturn res.join(separator);\n\t},\n\t/** Return the parent keys separated by options.keyPathSeparator, e.g. \"id_1/id_17/id_32\".\n\t * @param {boolean} [excludeSelf=false]\n\t * @returns {string}\n\t */\n\tgetKeyPath: function(excludeSelf) {\n\t\tvar path = [],\n\t\t\tsep = this.tree.options.keyPathSeparator;\n\t\tthis.visitParents(function(n){\n\t\t\tif(n.parent){\n\t\t\t\tpath.unshift(n.key);\n\t\t\t}\n\t\t}, !excludeSelf);\n\t\treturn sep + path.join(sep);\n\t},\n\t/** Return the last child of this node or null.\n\t * @returns {FancytreeNode | null}\n\t */\n\tgetLastChild: function() {\n\t\treturn this.children ? this.children[this.children.length - 1] : null;\n\t},\n\t/** Return node depth. 0: System root node, 1: visible top-level node, 2: first sub-level, ... .\n\t * @returns {int}\n\t */\n\tgetLevel: function() {\n\t\tvar level = 0,\n\t\t\tdtn = this.parent;\n\t\twhile( dtn ) {\n\t\t\tlevel++;\n\t\t\tdtn = dtn.parent;\n\t\t}\n\t\treturn level;\n\t},\n\t/** Return the successor node (under the same parent) or null.\n\t * @returns {FancytreeNode | null}\n\t */\n\tgetNextSibling: function() {\n\t\t// TODO: use indexOf, if available: (not in IE6)\n\t\tif( this.parent ){\n\t\t\tvar i, l,\n\t\t\t\tac = this.parent.children;\n\n\t\t\tfor(i=0, l=ac.length-1; i<l; i++){ // up to length-2, so next(last) = null\n\t\t\t\tif( ac[i] === this ){\n\t\t\t\t\treturn ac[i+1];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t},\n\t/** Return the parent node (null for the system root node).\n\t * @returns {FancytreeNode | null}\n\t */\n\tgetParent: function() {\n\t\t// TODO: return null for top-level nodes?\n\t\treturn this.parent;\n\t},\n\t/** Return an array of all parent nodes (top-down).\n\t * @param {boolean} [includeRoot=false] Include the invisible system root node.\n\t * @param {boolean} [includeSelf=false] Include the node itself.\n\t * @returns {FancytreeNode[]}\n\t */\n\tgetParentList: function(includeRoot, includeSelf) {\n\t\tvar l = [],\n\t\t\tdtn = includeSelf ? this : this.parent;\n\t\twhile( dtn ) {\n\t\t\tif( includeRoot || dtn.parent ){\n\t\t\t\tl.unshift(dtn);\n\t\t\t}\n\t\t\tdtn = dtn.parent;\n\t\t}\n\t\treturn l;\n\t},\n\t/** Return the predecessor node (under the same parent) or null.\n\t * @returns {FancytreeNode | null}\n\t */\n\tgetPrevSibling: function() {\n\t\tif( this.parent ){\n\t\t\tvar i, l,\n\t\t\t\tac = this.parent.children;\n\n\t\t\tfor(i=1, l=ac.length; i<l; i++){ // start with 1, so prev(first) = null\n\t\t\t\tif( ac[i] === this ){\n\t\t\t\t\treturn ac[i-1];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t},\n\t/**\n\t * Return an array of selected descendant nodes.\n\t * @param {boolean} [stopOnParents=false] only return the topmost selected\n\t * node (useful with selectMode 3)\n\t * @returns {FancytreeNode[]}\n\t */\n\tgetSelectedNodes: function(stopOnParents) {\n\t\tvar nodeList = [];\n\t\tthis.visit(function(node){\n\t\t\tif( node.selected ) {\n\t\t\t\tnodeList.push(node);\n\t\t\t\tif( stopOnParents === true ){\n\t\t\t\t\treturn \"skip\"; // stop processing this branch\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn nodeList;\n\t},\n\t/** Return true if node has children. Return undefined if not sure, i.e. the node is lazy and not yet loaded).\n\t * @returns {boolean | undefined}\n\t */\n\thasChildren: function() {\n\t\tif(this.lazy){\n\t\t\tif(this.children == null ){\n\t\t\t\t// null or undefined: Not yet loaded\n\t\t\t\treturn undefined;\n\t\t\t}else if(this.children.length === 0){\n\t\t\t\t// Loaded, but response was empty\n\t\t\t\treturn false;\n\t\t\t}else if(this.children.length === 1 && this.children[0].isStatusNode() ){\n\t\t\t\t// Currently loading or load error\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn !!( this.children && this.children.length );\n\t},\n\t/** Return true if node has keyboard focus.\n\t * @returns {boolean}\n\t */\n\thasFocus: function() {\n\t\treturn (this.tree.hasFocus() && this.tree.focusNode === this);\n\t},\n\t/** Write to browser console if debugLevel >= 3 (prepending node info)\n\t *\n\t * @param {*} msg string or object or array of such\n\t */\n\tinfo: function(msg){\n\t\tif( this.tree.options.debugLevel >= 3 ) {\n\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\tconsoleApply(\"info\", arguments);\n\t\t}\n\t},\n\t/** Return true if node is active (see also FancytreeNode#isSelected).\n\t * @returns {boolean}\n\t */\n\tisActive: function() {\n\t\treturn (this.tree.activeNode === this);\n\t},\n\t/** Return true if node is vertically below `otherNode`, i.e. rendered in a subsequent row.\n\t * @param {FancytreeNode} otherNode\n\t * @returns {boolean}\n\t * @since 2.28\n\t */\n\tisBelowOf: function(otherNode) {\n\t\treturn (this.getIndexHier(\".\", 5) > otherNode.getIndexHier(\".\", 5));\n\t},\n\t/** Return true if node is a direct child of otherNode.\n\t * @param {FancytreeNode} otherNode\n\t * @returns {boolean}\n\t */\n\tisChildOf: function(otherNode) {\n\t\treturn (this.parent && this.parent === otherNode);\n\t},\n\t/** Return true, if node is a direct or indirect sub node of otherNode.\n\t * @param {FancytreeNode} otherNode\n\t * @returns {boolean}\n\t */\n\tisDescendantOf: function(otherNode) {\n\t\tif(!otherNode || otherNode.tree !== this.tree){\n\t\t\treturn false;\n\t\t}\n\t\tvar p = this.parent;\n\t\twhile( p ) {\n\t\t\tif( p === otherNode ){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif( p === p.parent ) { $.error(\"Recursive parent link: \" + p); }\n\t\t\tp = p.parent;\n\t\t}\n\t\treturn false;\n\t},\n\t/** Return true if node is expanded.\n\t * @returns {boolean}\n\t */\n\tisExpanded: function() {\n\t\treturn !!this.expanded;\n\t},\n\t/** Return true if node is the first node of its parent's children.\n\t * @returns {boolean}\n\t */\n\tisFirstSibling: function() {\n\t\tvar p = this.parent;\n\t\treturn !p || p.children[0] === this;\n\t},\n\t/** Return true if node is a folder, i.e. has the node.folder attribute set.\n\t * @returns {boolean}\n\t */\n\tisFolder: function() {\n\t\treturn !!this.folder;\n\t},\n\t/** Return true if node is the last node of its parent's children.\n\t * @returns {boolean}\n\t */\n\tisLastSibling: function() {\n\t\tvar p = this.parent;\n\t\treturn !p || p.children[p.children.length-1] === this;\n\t},\n\t/** Return true if node is lazy (even if data was already loaded)\n\t * @returns {boolean}\n\t */\n\tisLazy: function() {\n\t\treturn !!this.lazy;\n\t},\n\t/** Return true if node is lazy and loaded. For non-lazy nodes always return true.\n\t * @returns {boolean}\n\t */\n\tisLoaded: function() {\n\t\treturn !this.lazy || this.hasChildren() !== undefined; // Also checks if the only child is a status node\n\t},\n\t/** Return true if children are currently beeing loaded, i.e. a Ajax request is pending.\n\t * @returns {boolean}\n\t */\n\tisLoading: function() {\n\t\treturn !!this._isLoading;\n\t},\n\t/*\n\t * @deprecated since v2.4.0: Use isRootNode() instead\n\t */\n\tisRoot: function() {\n\t\treturn this.isRootNode();\n\t},\n\t/** Return true if node is partially selected (tri-state).\n\t * @returns {boolean}\n\t * @since 2.23\n\t */\n\tisPartsel: function() {\n\t\treturn !this.selected && !!this.partsel;\n\t},\n\t/** (experimental) Return true if this is partially loaded.\n\t * @returns {boolean}\n\t * @since 2.15\n\t */\n\tisPartload: function() {\n\t\treturn !!this.partload;\n\t},\n\t/** Return true if this is the (invisible) system root node.\n\t * @returns {boolean}\n\t * @since 2.4\n\t */\n\tisRootNode: function() {\n\t\treturn (this.tree.rootNode === this);\n\t},\n\t/** Return true if node is selected, i.e. has a checkmark set (see also FancytreeNode#isActive).\n\t * @returns {boolean}\n\t */\n\tisSelected: function() {\n\t\treturn !!this.selected;\n\t},\n\t/** Return true if this node is a temporarily generated system node like\n\t * 'loading', 'paging', or 'error' (node.statusNodeType contains the type).\n\t * @returns {boolean}\n\t */\n\tisStatusNode: function() {\n\t\treturn !!this.statusNodeType;\n\t},\n\t/** Return true if this node is a status node of type 'paging'.\n\t * @returns {boolean}\n\t * @since 2.15\n\t */\n\tisPagingNode: function() {\n\t\treturn this.statusNodeType === \"paging\";\n\t},\n\t/** Return true if this a top level node, i.e. a direct child of the (invisible) system root node.\n\t * @returns {boolean}\n\t * @since 2.4\n\t */\n\tisTopLevel: function() {\n\t\treturn (this.tree.rootNode === this.parent);\n\t},\n\t/** Return true if node is lazy and not yet loaded. For non-lazy nodes always return false.\n\t * @returns {boolean}\n\t */\n\tisUndefined: function() {\n\t\treturn this.hasChildren() === undefined; // also checks if the only child is a status node\n\t},\n\t/** Return true if all parent nodes are expanded. Note: this does not check\n\t * whether the node is scrolled into the visible part of the screen.\n\t * @returns {boolean}\n\t */\n\tisVisible: function() {\n\t\tvar i, l,\n\t\t\tparents = this.getParentList(false, false);\n\n\t\tfor(i=0, l=parents.length; i<l; i++){\n\t\t\tif( ! parents[i].expanded ){ return false; }\n\t\t}\n\t\treturn true;\n\t},\n\t/** Deprecated.\n\t * @deprecated since 2014-02-16: use load() instead.\n\t */\n\tlazyLoad: function(discard) {\n\t\tthis.warn(\"FancytreeNode.lazyLoad() is deprecated since 2014-02-16. Use .load() instead.\");\n\t\treturn this.load(discard);\n\t},\n\t/**\n\t * Load all children of a lazy node if neccessary. The <i>expanded</i> state is maintained.\n\t * @param {boolean} [forceReload=false] Pass true to discard any existing nodes before. Otherwise this method does nothing if the node was already loaded.\n\t * @returns {$.Promise}\n\t */\n\tload: function(forceReload) {\n\t\tvar res, source,\n\t\t\tthat = this,\n\t\t\twasExpanded = this.isExpanded();\n\n\t\t_assert( this.isLazy(), \"load() requires a lazy node\" );\n\t\t// _assert( forceReload || this.isUndefined(), \"Pass forceReload=true to re-load a lazy node\" );\n\t\tif( !forceReload && !this.isUndefined() ) {\n\t\t\treturn _getResolvedPromise(this);\n\t\t}\n\t\tif( this.isLoaded() ){\n\t\t\tthis.resetLazy(); // also collapses\n\t\t}\n\t\t// This method is also called by setExpanded() and loadKeyPath(), so we\n\t\t// have to avoid recursion.\n\t\tsource = this.tree._triggerNodeEvent(\"lazyLoad\", this);\n\t\tif( source === false ) { // #69\n\t\t\treturn _getResolvedPromise(this);\n\t\t}\n\t\t_assert(typeof source !== \"boolean\", \"lazyLoad event must return source in data.result\");\n\t\tres = this.tree._callHook(\"nodeLoadChildren\", this, source);\n\t\tif( wasExpanded ) {\n\t\t\tthis.expanded = true;\n\t\t\tres.always(function(){\n\t\t\t\tthat.render();\n\t\t\t});\n\t\t} else {\n\t\t\tres.always(function(){\n\t\t\t\tthat.renderStatus(); // fix expander icon to 'loaded'\n\t\t\t});\n\t\t}\n\t\treturn res;\n\t},\n\t/** Expand all parents and optionally scroll into visible area as neccessary.\n\t * Promise is resolved, when lazy loading and animations are done.\n\t * @param {object} [opts] passed to `setExpanded()`.\n\t * Defaults to {noAnimation: false, noEvents: false, scrollIntoView: true}\n\t * @returns {$.Promise}\n\t */\n\tmakeVisible: function(opts) {\n\t\tvar i,\n\t\t\tthat = this,\n\t\t\tdeferreds = [],\n\t\t\tdfd = new $.Deferred(),\n\t\t\tparents = this.getParentList(false, false),\n\t\t\tlen = parents.length,\n\t\t\teffects = !(opts && opts.noAnimation === true),\n\t\t\tscroll = !(opts && opts.scrollIntoView === false);\n\n\t\t// Expand bottom-up, so only the top node is animated\n\t\tfor(i = len - 1; i >= 0; i--){\n\t\t\t// that.debug(\"pushexpand\" + parents[i]);\n\t\t\tdeferreds.push(parents[i].setExpanded(true, opts));\n\t\t}\n\t\t$.when.apply($, deferreds).done(function(){\n\t\t\t// All expands have finished\n\t\t\t// that.debug(\"expand DONE\", scroll);\n\t\t\tif( scroll ){\n\t\t\t\tthat.scrollIntoView(effects).done(function(){\n\t\t\t\t\t// that.debug(\"scroll DONE\");\n\t\t\t\t\tdfd.resolve();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdfd.resolve();\n\t\t\t}\n\t\t});\n\t\treturn dfd.promise();\n\t},\n\t/** Move this node to targetNode.\n\t * @param {FancytreeNode} targetNode\n\t * @param {string} mode <pre>\n\t * 'child': append this node as last child of targetNode.\n\t * This is the default. To be compatble with the D'n'd\n\t * hitMode, we also accept 'over'.\n\t * 'firstChild': add this node as first child of targetNode.\n\t * 'before': add this node as sibling before targetNode.\n\t * 'after': add this node as sibling after targetNode.</pre>\n\t * @param {function} [map] optional callback(FancytreeNode) to allow modifcations\n\t */\n\tmoveTo: function(targetNode, mode, map) {\n\t\tif(mode === undefined || mode === \"over\"){\n\t\t\tmode = \"child\";\n\t\t} else if ( mode === \"firstChild\" ) {\n\t\t\tif( targetNode.children && targetNode.children.length ) {\n\t\t\t\tmode = \"before\";\n\t\t\t\ttargetNode = targetNode.children[0];\n\t\t\t} else {\n\t\t\t\tmode = \"child\";\n\t\t\t}\n\t\t}\n\t\tvar pos,\n\t\t\tprevParent = this.parent,\n\t\t\ttargetParent = (mode === \"child\") ? targetNode : targetNode.parent;\n\n\t\tif(this === targetNode){\n\t\t\treturn;\n\t\t}else if( !this.parent ){\n\t\t\t$.error(\"Cannot move system root\");\n\t\t}else if( targetParent.isDescendantOf(this) ){\n\t\t\t$.error(\"Cannot move a node to its own descendant\");\n\t\t}\n\t\tif( targetParent !== prevParent ) {\n\t\t\tprevParent.triggerModifyChild(\"remove\", this);\n\t\t}\n\t\t// Unlink this node from current parent\n\t\tif( this.parent.children.length === 1 ) {\n\t\t\tif( this.parent === targetParent ){\n\t\t\t\treturn; // #258\n\t\t\t}\n\t\t\tthis.parent.children = this.parent.lazy ? [] : null;\n\t\t\tthis.parent.expanded = false;\n\t\t} else {\n\t\t\tpos = $.inArray(this, this.parent.children);\n\t\t\t_assert(pos >= 0, \"invalid source parent\");\n\t\t\tthis.parent.children.splice(pos, 1);\n\t\t}\n\t\t// Remove from source DOM parent\n//\t\tif(this.parent.ul){\n//\t\t\tthis.parent.ul.removeChild(this.li);\n//\t\t}\n\n\t\t// Insert this node to target parent's child list\n\t\tthis.parent = targetParent;\n\t\tif( targetParent.hasChildren() ) {\n\t\t\tswitch(mode) {\n\t\t\tcase \"child\":\n\t\t\t\t// Append to existing target children\n\t\t\t\ttargetParent.children.push(this);\n\t\t\t\tbreak;\n\t\t\tcase \"before\":\n\t\t\t\t// Insert this node before target node\n\t\t\t\tpos = $.inArray(targetNode, targetParent.children);\n\t\t\t\t_assert(pos >= 0, \"invalid target parent\");\n\t\t\t\ttargetParent.children.splice(pos, 0, this);\n\t\t\t\tbreak;\n\t\t\tcase \"after\":\n\t\t\t\t// Insert this node after target node\n\t\t\t\tpos = $.inArray(targetNode, targetParent.children);\n\t\t\t\t_assert(pos >= 0, \"invalid target parent\");\n\t\t\t\ttargetParent.children.splice(pos+1, 0, this);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t$.error(\"Invalid mode \" + mode);\n\t\t\t}\n\t\t} else {\n\t\t\ttargetParent.children = [ this ];\n\t\t}\n\t\t// Parent has no <ul> tag yet:\n//\t\tif( !targetParent.ul ) {\n//\t\t\t// This is the parent's first child: create UL tag\n//\t\t\t// (Hidden, because it will be\n//\t\t\ttargetParent.ul = document.createElement(\"ul\");\n//\t\t\ttargetParent.ul.style.display = \"none\";\n//\t\t\ttargetParent.li.appendChild(targetParent.ul);\n//\t\t}\n//\t\t// Issue 319: Add to target DOM parent (only if node was already rendered(expanded))\n//\t\tif(this.li){\n//\t\t\ttargetParent.ul.appendChild(this.li);\n//\t\t}^\n\n\t\t// Let caller modify the nodes\n\t\tif( map ){\n\t\t\ttargetNode.visit(map, true);\n\t\t}\n\t\tif( targetParent === prevParent ) {\n\t\t\ttargetParent.triggerModifyChild(\"move\", this);\n\t\t} else {\n\t\t\t// prevParent.triggerModifyChild(\"remove\", this);\n\t\t\ttargetParent.triggerModifyChild(\"add\", this);\n\t\t}\n\t\t// Handle cross-tree moves\n\t\tif( this.tree !== targetNode.tree ) {\n\t\t\t// Fix node.tree for all source nodes\n//\t\t\t_assert(false, \"Cross-tree move is not yet implemented.\");\n\t\t\tthis.warn(\"Cross-tree moveTo is experimantal!\");\n\t\t\tthis.visit(function(n){\n\t\t\t\t// TODO: fix selection state and activation, ...\n\t\t\t\tn.tree = targetNode.tree;\n\t\t\t}, true);\n\t\t}\n\n\t\t// A collaposed node won't re-render children, so we have to remove it manually\n\t\t// if( !targetParent.expanded ){\n\t\t// prevParent.ul.removeChild(this.li);\n\t\t// }\n\n\t\t// Update HTML markup\n\t\tif( !prevParent.isDescendantOf(targetParent)) {\n\t\t\tprevParent.render();\n\t\t}\n\t\tif( !targetParent.isDescendantOf(prevParent) && targetParent !== prevParent) {\n\t\t\ttargetParent.render();\n\t\t}\n\t\t// TODO: fix selection state\n\t\t// TODO: fix active state\n\n/*\n\t\tvar tree = this.tree;\n\t\tvar opts = tree.options;\n\t\tvar pers = tree.persistence;\n\n\n\t\t// Always expand, if it's below minExpandLevel\n//\t\ttree.logDebug (\"%s._addChildNode(%o), l=%o\", this, ftnode, ftnode.getLevel());\n\t\tif ( opts.minExpandLevel >= ftnode.getLevel() ) {\n//\t\t\ttree.logDebug (\"Force expand for %o\", ftnode);\n\t\t\tthis.bExpanded = true;\n\t\t}\n\n\t\t// In multi-hier mode, update the parents selection state\n\t\t// DT issue #82: only if not initializing, because the children may not exist yet\n//\t\tif( !ftnode.data.isStatusNode() && opts.selectMode==3 && !isInitializing )\n//\t\t\tftnode._fixSelectionState();\n\n\t\t// In multi-hier mode, update the parents selection state\n\t\tif( ftnode.bSelected && opts.selectMode==3 ) {\n\t\t\tvar p = this;\n\t\t\twhile( p ) {\n\t\t\t\tif( !p.hasSubSel )\n\t\t\t\t\tp._setSubSel(true);\n\t\t\t\tp = p.parent;\n\t\t\t}\n\t\t}\n\t\t// render this node and the new child\n\t\tif ( tree.bEnableUpdate )\n\t\t\tthis.render();\n\n\t\treturn ftnode;\n\n*/\n\t},\n\t/** Set focus relative to this node and optionally activate.\n\t *\n\t * @param {number} where The keyCode that would normally trigger this move,\n\t *\t\te.g. `$.ui.keyCode.LEFT` would collapse the node if it\n\t * is expanded or move to the parent oterwise.\n\t * @param {boolean} [activate=true]\n\t * @returns {$.Promise}\n\t */\n\tnavigate: function(where, activate) {\n\t\tvar i, parents, res,\n\t\t\thandled = true,\n\t\t\tKC = $.ui.keyCode,\n\t\t\tsib = null;\n\n\t\t// Navigate to node\n\t\tfunction _goto(n){\n\t\t\tif( n ){\n\t\t\t\t// setFocus/setActive will scroll later (if autoScroll is specified)\n\t\t\t\ttry { n.makeVisible({scrollIntoView: false}); } catch(e) {} // #272\n\t\t\t\t// Node may still be hidden by a filter\n\t\t\t\tif( ! $(n.span).is(\":visible\") ) {\n\t\t\t\t\tn.debug(\"Navigate: skipping hidden node\");\n\t\t\t\t\tn.navigate(where, activate);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn activate === false ? n.setFocus() : n.setActive();\n\t\t\t}\n\t\t}\n\n\t\tswitch( where ) {\n\t\t\tcase KC.BACKSPACE:\n\t\t\t\tif( this.parent && this.parent.parent ) {\n\t\t\t\t\tres = _goto(this.parent);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase KC.HOME:\n\t\t\t\tthis.tree.visit(function(n){ // goto first visible node\n\t\t\t\t\tif( $(n.span).is(\":visible\") ) {\n\t\t\t\t\t\tres = _goto(n);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase KC.END:\n\t\t\t\tthis.tree.visit(function(n){ // goto last visible node\n\t\t\t\t\tif( $(n.span).is(\":visible\") ) {\n\t\t\t\t\t\tres = n;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif( res ) {\n\t\t\t\t\tres = _goto(res);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase KC.LEFT:\n\t\t\t\tif( this.expanded ) {\n\t\t\t\t\tthis.setExpanded(false);\n\t\t\t\t\tres = _goto(this);\n\t\t\t\t} else if( this.parent && this.parent.parent ) {\n\t\t\t\t\tres = _goto(this.parent);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase KC.RIGHT:\n\t\t\t\tif( !this.expanded && (this.children || this.lazy) ) {\n\t\t\t\t\tthis.setExpanded();\n\t\t\t\t\tres = _goto(this);\n\t\t\t\t} else if( this.children && this.children.length ) {\n\t\t\t\t\tres = _goto(this.children[0]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase KC.UP:\n\t\t\t\tsib = this.getPrevSibling();\n\t\t\t\t// #359: skip hidden sibling nodes, preventing a _goto() recursion\n\t\t\t\twhile( sib && !$(sib.span).is(\":visible\") ) {\n\t\t\t\t\tsib = sib.getPrevSibling();\n\t\t\t\t}\n\t\t\t\twhile( sib && sib.expanded && sib.children && sib.children.length ) {\n\t\t\t\t\tsib = sib.children[sib.children.length - 1];\n\t\t\t\t}\n\t\t\t\tif( !sib && this.parent && this.parent.parent ){\n\t\t\t\t\tsib = this.parent;\n\t\t\t\t}\n\t\t\t\tres = _goto(sib);\n\t\t\t\tbreak;\n\t\t\tcase KC.DOWN:\n\t\t\t\tif( this.expanded && this.children && this.children.length ) {\n\t\t\t\t\tsib = this.children[0];\n\t\t\t\t} else {\n\t\t\t\t\tparents = this.getParentList(false, true);\n\t\t\t\t\tfor(i=parents.length-1; i>=0; i--) {\n\t\t\t\t\t\tsib = parents[i].getNextSibling();\n\t\t\t\t\t\t// #359: skip hidden sibling nodes, preventing a _goto() recursion\n\t\t\t\t\t\twhile( sib && !$(sib.span).is(\":visible\") ) {\n\t\t\t\t\t\t\tsib = sib.getNextSibling();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( sib ){ break; }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tres = _goto(sib);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\thandled = false;\n\t\t}\n\t\treturn res || _getResolvedPromise();\n\t},\n\t/**\n\t * Remove this node (not allowed for system root).\n\t */\n\tremove: function() {\n\t\treturn this.parent.removeChild(this);\n\t},\n\t/**\n\t * Remove childNode from list of direct children.\n\t * @param {FancytreeNode} childNode\n\t */\n\tremoveChild: function(childNode) {\n\t\treturn this.tree._callHook(\"nodeRemoveChild\", this, childNode);\n\t},\n\t/**\n\t * Remove all child nodes and descendents. This converts the node into a leaf.<br>\n\t * If this was a lazy node, it is still considered 'loaded'; call node.resetLazy()\n\t * in order to trigger lazyLoad on next expand.\n\t */\n\tremoveChildren: function() {\n\t\treturn this.tree._callHook(\"nodeRemoveChildren\", this);\n\t},\n\t/**\n\t * Remove class from node's span tag and .extraClasses.\n\t *\n\t * @param {string} className class name\n\t *\n\t * @since 2.17\n\t */\n\tremoveClass: function(className){\n\t\treturn this.toggleClass(className, false);\n\t},\n\t/**\n\t * This method renders and updates all HTML markup that is required\n\t * to display this node in its current state.<br>\n\t * Note:\n\t * <ul>\n\t * <li>It should only be neccessary to call this method after the node object\n\t * was modified by direct access to its properties, because the common\n\t * API methods (node.setTitle(), moveTo(), addChildren(), remove(), ...)\n\t * already handle this.\n\t * <li> {@link FancytreeNode#renderTitle} and {@link FancytreeNode#renderStatus}\n\t * are implied. If changes are more local, calling only renderTitle() or\n\t * renderStatus() may be sufficient and faster.\n\t * </ul>\n\t *\n\t * @param {boolean} [force=false] re-render, even if html markup was already created\n\t * @param {boolean} [deep=false] also render all descendants, even if parent is collapsed\n\t */\n\trender: function(force, deep) {\n\t\treturn this.tree._callHook(\"nodeRender\", this, force, deep);\n\t},\n\t/** Create HTML markup for the node's outer <span> (expander, checkbox, icon, and title).\n\t * Implies {@link FancytreeNode#renderStatus}.\n\t * @see Fancytree_Hooks#nodeRenderTitle\n\t */\n\trenderTitle: function() {\n\t\treturn this.tree._callHook(\"nodeRenderTitle\", this);\n\t},\n\t/** Update element's CSS classes according to node state.\n\t * @see Fancytree_Hooks#nodeRenderStatus\n\t */\n\trenderStatus: function() {\n\t\treturn this.tree._callHook(\"nodeRenderStatus\", this);\n\t},\n\t/**\n\t * (experimental) Replace this node with `source`.\n\t * (Currently only available for paging nodes.)\n\t * @param {NodeData[]} source List of child node definitions\n\t * @since 2.15\n\t */\n\treplaceWith: function(source) {\n\t\tvar res,\n\t\t\tparent = this.parent,\n\t\t\tpos = $.inArray(this, parent.children),\n\t\t\tthat = this;\n\n\t\t_assert( this.isPagingNode(), \"replaceWith() currently requires a paging status node\" );\n\n\t\tres = this.tree._callHook(\"nodeLoadChildren\", this, source);\n\t\tres.done(function(data){\n\t\t\t// New nodes are currently children of `this`.\n\t\t\tvar children = that.children;\n\t\t\t// Prepend newly loaded child nodes to `this`\n\t\t\t// Move new children after self\n\t\t\tfor( i=0; i<children.length; i++ ) {\n\t\t\t\tchildren[i].parent = parent;\n\t\t\t}\n\t\t\tparent.children.splice.apply(parent.children, [pos + 1, 0].concat(children));\n\n\t\t\t// Remove self\n\t\t\tthat.children = null;\n\t\t\tthat.remove();\n\t\t\t// Redraw new nodes\n\t\t\tparent.render();\n\t\t\t// TODO: set node.partload = false if this was tha last paging node?\n\t\t\t// parent.addPagingNode(false);\n\t\t}).fail(function(){\n\t\t\tthat.setExpanded();\n\t\t});\n\t\treturn res;\n\t\t// $.error(\"Not implemented: replaceWith()\");\n\t},\n\t/**\n\t * Remove all children, collapse, and set the lazy-flag, so that the lazyLoad\n\t * event is triggered on next expand.\n\t */\n\tresetLazy: function() {\n\t\tthis.removeChildren();\n\t\tthis.expanded = false;\n\t\tthis.lazy = true;\n\t\tthis.children = undefined;\n\t\tthis.renderStatus();\n\t},\n\t/** Schedule activity for delayed execution (cancel any pending request).\n\t * scheduleAction('cancel') will only cancel a pending request (if any).\n\t * @param {string} mode\n\t * @param {number} ms\n\t */\n\tscheduleAction: function(mode, ms) {\n\t\tif( this.tree.timer ) {\n\t\t\tclearTimeout(this.tree.timer);\n\t\t\tthis.tree.debug(\"clearTimeout(%o)\", this.tree.timer);\n\t\t}\n\t\tthis.tree.timer = null;\n\t\tvar self = this; // required for closures\n\t\tswitch (mode) {\n\t\tcase \"cancel\":\n\t\t\t// Simply made sure that timer was cleared\n\t\t\tbreak;\n\t\tcase \"expand\":\n\t\t\tthis.tree.timer = setTimeout(function(){\n\t\t\t\tself.tree.debug(\"setTimeout: trigger expand\");\n\t\t\t\tself.setExpanded(true);\n\t\t\t}, ms);\n\t\t\tbreak;\n\t\tcase \"activate\":\n\t\t\tthis.tree.timer = setTimeout(function(){\n\t\t\t\tself.tree.debug(\"setTimeout: trigger activate\");\n\t\t\t\tself.setActive(true);\n\t\t\t}, ms);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t$.error(\"Invalid mode \" + mode);\n\t\t}\n// this.tree.debug(\"setTimeout(%s, %s): %s\", mode, ms, this.tree.timer);\n\t},\n\t/**\n\t *\n\t * @param {boolean | PlainObject} [effects=false] animation options.\n\t * @param {object} [options=null] {topNode: null, effects: ..., parent: ...} this node will remain visible in\n\t * any case, even if `this` is outside the scroll pane.\n\t * @returns {$.Promise}\n\t */\n\tscrollIntoView: function(effects, options) {\n\t\tif( options !== undefined && _isNode(options) ) {\n\t\t\tthis.warn(\"scrollIntoView() with 'topNode' option is deprecated since 2014-05-08. Use 'options.topNode' instead.\");\n\t\t\toptions = {topNode: options};\n\t\t}\n\t\t// this.$scrollParent = (this.options.scrollParent === \"auto\") ? $ul.scrollParent() : $(this.options.scrollParent);\n\t\t// this.$scrollParent = this.$scrollParent.length ? this.$scrollParent || this.$container;\n\n\t\tvar topNodeY, nodeY, horzScrollbarHeight, containerOffsetTop,\n\t\t\topts = $.extend({\n\t\t\t\teffects: (effects === true) ? {duration: 200, queue: false} : effects,\n\t\t\t\tscrollOfs: this.tree.options.scrollOfs,\n\t\t\t\tscrollParent: this.tree.options.scrollParent || this.tree.$container,\n\t\t\t\ttopNode: null\n\t\t\t}, options),\n\t\t\tdfd = new $.Deferred(),\n\t\t\tthat = this,\n\t\t\tnodeHeight = $(this.span).height(),\n\t\t\t$container = $(opts.scrollParent),\n\t\t\ttopOfs = opts.scrollOfs.top || 0,\n\t\t\tbottomOfs = opts.scrollOfs.bottom || 0,\n\t\t\tcontainerHeight = $container.height(),// - topOfs - bottomOfs,\n\t\t\tscrollTop = $container.scrollTop(),\n\t\t\t$animateTarget = $container,\n\t\t\tisParentWindow = $container[0] === window,\n\t\t\ttopNode = opts.topNode || null,\n\t\t\tnewScrollTop = null;\n\n\t\t// this.debug(\"scrollIntoView(), scrollTop=\" + scrollTop, opts.scrollOfs);\n//\t\t_assert($(this.span).is(\":visible\"), \"scrollIntoView node is invisible\"); // otherwise we cannot calc offsets\n\t\tif( !$(this.span).is(\":visible\") ) {\n\t\t\t// We cannot calc offsets for hidden elements\n\t\t\tthis.warn(\"scrollIntoView(): node is invisible.\");\n\t\t\treturn _getResolvedPromise();\n\t\t}\n\t\tif( isParentWindow ) {\n\t\t\tnodeY = $(this.span).offset().top;\n\t\t\ttopNodeY = (topNode && topNode.span) ? $(topNode.span).offset().top : 0;\n\t\t\t$animateTarget = $(\"html,body\");\n\n\t\t} else {\n\t\t\t_assert($container[0] !== document && $container[0] !== document.body,\n\t\t\t\t\"scrollParent should be a simple element or `window`, not document or body.\");\n\n\t\t\tcontainerOffsetTop = $container.offset().top,\n\t\t\tnodeY = $(this.span).offset().top - containerOffsetTop + scrollTop; // relative to scroll parent\n\t\t\ttopNodeY = topNode ? $(topNode.span).offset().top - containerOffsetTop + scrollTop : 0;\n\t\t\thorzScrollbarHeight = Math.max(0, ($container.innerHeight() - $container[0].clientHeight));\n\t\t\tcontainerHeight -= horzScrollbarHeight;\n\t\t}\n\n\t\t// this.debug(\" scrollIntoView(), nodeY=\" + nodeY + \", containerHeight=\" + containerHeight);\n\t\tif( nodeY < (scrollTop + topOfs) ){\n\t\t\t// Node is above visible container area\n\t\t\tnewScrollTop = nodeY - topOfs;\n\t\t\t// this.debug(\" scrollIntoView(), UPPER newScrollTop=\" + newScrollTop);\n\n\t\t}else if((nodeY + nodeHeight) > (scrollTop + containerHeight - bottomOfs)){\n\t\t\tnewScrollTop = nodeY + nodeHeight - containerHeight + bottomOfs;\n\t\t\t// this.debug(\" scrollIntoView(), LOWER newScrollTop=\" + newScrollTop);\n\t\t\t// If a topNode was passed, make sure that it is never scrolled\n\t\t\t// outside the upper border\n\t\t\tif(topNode){\n\t\t\t\t_assert(topNode.isRootNode() || $(topNode.span).is(\":visible\"), \"topNode must be visible\");\n\t\t\t\tif( topNodeY < newScrollTop ){\n\t\t\t\t\tnewScrollTop = topNodeY - topOfs;\n\t\t\t\t\t// this.debug(\" scrollIntoView(), TOP newScrollTop=\" + newScrollTop);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(newScrollTop !== null){\n\t\t\t// this.debug(\" scrollIntoView(), SET newScrollTop=\" + newScrollTop);\n\t\t\tif(opts.effects){\n\t\t\t\topts.effects.complete = function(){\n\t\t\t\t\tdfd.resolveWith(that);\n\t\t\t\t};\n\t\t\t\t$animateTarget.stop(true).animate({\n\t\t\t\t\tscrollTop: newScrollTop\n\t\t\t\t}, opts.effects);\n\t\t\t}else{\n\t\t\t\t$animateTarget[0].scrollTop = newScrollTop;\n\t\t\t\tdfd.resolveWith(this);\n\t\t\t}\n\t\t}else{\n\t\t\tdfd.resolveWith(this);\n\t\t}\n\t\treturn dfd.promise();\n\t},\n\n\t/**Activate this node.\n\t * @param {boolean} [flag=true] pass false to deactivate\n\t * @param {object} [opts] additional options. Defaults to {noEvents: false, noFocus: false}\n\t * @returns {$.Promise}\n\t */\n\tsetActive: function(flag, opts){\n\t\treturn this.tree._callHook(\"nodeSetActive\", this, flag, opts);\n\t},\n\t/**Expand or collapse this node. Promise is resolved, when lazy loading and animations are done.\n\t * @param {boolean} [flag=true] pass false to collapse\n\t * @param {object} [opts] additional options. Defaults to {noAnimation: false, noEvents: false}\n\t * @returns {$.Promise}\n\t */\n\tsetExpanded: function(flag, opts){\n\t\treturn this.tree._callHook(\"nodeSetExpanded\", this, flag, opts);\n\t},\n\t/**Set keyboard focus to this node.\n\t * @param {boolean} [flag=true] pass false to blur\n\t * @see Fancytree#setFocus\n\t */\n\tsetFocus: function(flag){\n\t\treturn this.tree._callHook(\"nodeSetFocus\", this, flag);\n\t},\n\t/**Select this node, i.e. check the checkbox.\n\t * @param {boolean} [flag=true] pass false to deselect\n\t * @param {object} [opts] additional options. Defaults to {noEvents: false, p\n\t * propagateDown: null, propagateUp: null, callback: null }\n\t */\n\tsetSelected: function(flag, opts){\n\t\treturn this.tree._callHook(\"nodeSetSelected\", this, flag, opts);\n\t},\n\t/**Mark a lazy node as 'error', 'loading', 'nodata', or 'ok'.\n\t * @param {string} status 'error'|'empty'|'ok'\n\t * @param {string} [message]\n\t * @param {string} [details]\n\t */\n\tsetStatus: function(status, message, details){\n\t\treturn this.tree._callHook(\"nodeSetStatus\", this, status, message, details);\n\t},\n\t/**Rename this node.\n\t * @param {string} title\n\t */\n\tsetTitle: function(title){\n\t\tthis.title = title;\n\t\tthis.renderTitle();\n\t\tthis.triggerModify(\"rename\");\n\t},\n\t/**Sort child list by title.\n\t * @param {function} [cmp] custom compare function(a, b) that returns -1, 0, or 1 (defaults to sort by title).\n\t * @param {boolean} [deep=false] pass true to sort all descendant nodes\n\t */\n\tsortChildren: function(cmp, deep) {\n\t\tvar i,l,\n\t\t\tcl = this.children;\n\n\t\tif( !cl ){\n\t\t\treturn;\n\t\t}\n\t\tcmp = cmp || function(a, b) {\n\t\t\tvar x = a.title.toLowerCase(),\n\t\t\t\ty = b.title.toLowerCase();\n\t\t\treturn x === y ? 0 : x > y ? 1 : -1;\n\t\t\t};\n\t\tcl.sort(cmp);\n\t\tif( deep ){\n\t\t\tfor(i=0, l=cl.length; i<l; i++){\n\t\t\t\tif( cl[i].children ){\n\t\t\t\t\tcl[i].sortChildren(cmp, \"$norender$\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif( deep !== \"$norender$\" ){\n\t\t\tthis.render();\n\t\t}\n\t\tthis.triggerModifyChild(\"sort\");\n\t},\n\t/** Convert node (or whole branch) into a plain object.\n\t *\n\t * The result is compatible with node.addChildren().\n\t *\n\t * @param {boolean} [recursive=false] include child nodes\n\t * @param {function} [callback] callback(dict, node) is called for every node, in order to allow modifications\n\t * @returns {NodeData}\n\t */\n\ttoDict: function(recursive, callback) {\n\t\tvar i, l, node,\n\t\t\tdict = {},\n\t\t\tself = this;\n\n\t\t$.each(NODE_ATTRS, function(i, a){\n\t\t\tif(self[a] || self[a] === false){\n\t\t\t\tdict[a] = self[a];\n\t\t\t}\n\t\t});\n\t\tif(!$.isEmptyObject(this.data)){\n\t\t\tdict.data = $.extend({}, this.data);\n\t\t\tif($.isEmptyObject(dict.data)){\n\t\t\t\tdelete dict.data;\n\t\t\t}\n\t\t}\n\t\tif( callback ){\n\t\t\tcallback(dict, self);\n\t\t}\n\t\tif( recursive ) {\n\t\t\tif(this.hasChildren()){\n\t\t\t\tdict.children = [];\n\t\t\t\tfor(i=0, l=this.children.length; i<l; i++ ){\n\t\t\t\t\tnode = this.children[i];\n\t\t\t\t\tif( !node.isStatusNode() ){\n\t\t\t\t\t\tdict.children.push(node.toDict(true, callback));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n// dict.children = null;\n\t\t\t}\n\t\t}\n\t\treturn dict;\n\t},\n\t/**\n\t * Set, clear, or toggle class of node's span tag and .extraClasses.\n\t *\n\t * @param {string} className class name (separate multiple classes by space)\n\t * @param {boolean} [flag] true/false to add/remove class. If omitted, class is toggled.\n\t * @returns {boolean} true if a class was added\n\t *\n\t * @since 2.17\n\t */\n\ttoggleClass: function(value, flag){\n\t\tvar className, hasClass,\n\t\t\trnotwhite = ( /\\S+/g ),\n\t\t\tclassNames = value.match( rnotwhite ) || [],\n\t\t\ti = 0,\n\t\t\twasAdded = false,\n\t\t\tstatusElem = this[this.tree.statusClassPropName],\n\t\t\tcurClasses = (\" \" + (this.extraClasses || \"\") + \" \");\n\n\t\t// this.info(\"toggleClass('\" + value + \"', \" + flag + \")\", curClasses);\n\t\t// Modify DOM element directly if it already exists\n\t\tif( statusElem ) {\n\t\t\t$(statusElem).toggleClass(value, flag);\n\t\t}\n\t\t// Modify node.extraClasses to make this change persistent\n\t\t// Toggle if flag was not passed\n\t\twhile ( className = classNames[ i++ ] ) {\n\t\t\thasClass = curClasses.indexOf(\" \" + className + \" \") >= 0;\n\t\t\tflag = (flag === undefined) ? (!hasClass) : !!flag;\n\t\t\tif ( flag ) {\n\t\t\t\tif( !hasClass ) {\n\t\t\t\t\tcurClasses += className + \" \";\n\t\t\t\t\twasAdded = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( curClasses.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\tcurClasses = curClasses.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.extraClasses = $.trim(curClasses);\n\t\t// this.info(\"-> toggleClass('\" + value + \"', \" + flag + \"): '\" + this.extraClasses + \"'\");\n\t\treturn wasAdded;\n\t},\n\t/** Flip expanded status. */\n\ttoggleExpanded: function(){\n\t\treturn this.tree._callHook(\"nodeToggleExpanded\", this);\n\t},\n\t/** Flip selection status. */\n\ttoggleSelected: function(){\n\t\treturn this.tree._callHook(\"nodeToggleSelected\", this);\n\t},\n\ttoString: function() {\n\t\treturn \"FancytreeNode@\" + this.key + \"[title='\" + this.title + \"']\";\n\t\t// return \"<FancytreeNode(#\" + this.key + \", '\" + this.title + \"')>\";\n\t},\n\t/**\n\t * Trigger `modifyChild` event on a parent to signal that a child was modified.\n\t * @param {string} operation Type of change: 'add', 'remove', 'rename', 'move', 'data', ...\n\t * @param {FancytreeNode} [childNode]\n\t * @param {object} [extra]\n\t */\n\ttriggerModifyChild: function(operation, childNode, extra){\n\t\tvar data,\n\t\t\tmodifyChild = this.tree.options.modifyChild;\n\n\t\tif ( modifyChild ){\n\t\t\tif( childNode && childNode.parent !== this ) {\n\t\t\t\t$.error(\"childNode \" + childNode + \" is not a child of \" + this);\n\t\t\t}\n\t\t\tdata = {\n\t\t\t\tnode: this,\n\t\t\t\ttree: this.tree,\n\t\t\t\toperation: operation,\n\t\t\t\tchildNode: childNode || null\n\t\t\t};\n\t\t\tif( extra ) {\n\t\t\t\t$.extend(data, extra);\n\t\t\t}\n\t\t\tmodifyChild({type: \"modifyChild\"}, data);\n\t\t}\n\t},\n\t/**\n\t * Trigger `modifyChild` event on node.parent(!).\n\t * @param {string} operation Type of change: 'add', 'remove', 'rename', 'move', 'data', ...\n\t * @param {object} [extra]\n\t */\n\ttriggerModify: function(operation, extra){\n\t\tthis.parent.triggerModifyChild(operation, this, extra);\n\t},\n\t/** Call fn(node) for all child nodes in hierarchical order (depth-first).<br>\n\t * Stop iteration, if fn() returns false. Skip current branch, if fn() returns \"skip\".<br>\n\t * Return false if iteration was stopped.\n\t *\n\t * @param {function} fn the callback function.\n\t * Return false to stop iteration, return \"skip\" to skip this node and\n\t * its children only.\n\t * @param {boolean} [includeSelf=false]\n\t * @returns {boolean}\n\t */\n\tvisit: function(fn, includeSelf) {\n\t\tvar i, l,\n\t\t\tres = true,\n\t\t\tchildren = this.children;\n\n\t\tif( includeSelf === true ) {\n\t\t\tres = fn(this);\n\t\t\tif( res === false || res === \"skip\" ){\n\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t\tif(children){\n\t\t\tfor(i=0, l=children.length; i<l; i++){\n\t\t\t\tres = children[i].visit(fn, true);\n\t\t\t\tif( res === false ){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\t/** Call fn(node) for all child nodes and recursively load lazy children.<br>\n\t * <b>Note:</b> If you need this method, you probably should consider to review\n\t * your architecture! Recursivley loading nodes is a perfect way for lazy\n\t * programmers to flood the server with requests ;-)\n\t *\n\t * @param {function} [fn] optional callback function.\n\t * Return false to stop iteration, return \"skip\" to skip this node and\n\t * its children only.\n\t * @param {boolean} [includeSelf=false]\n\t * @returns {$.Promise}\n\t * @since 2.4\n\t */\n\tvisitAndLoad: function(fn, includeSelf, _recursion) {\n\t\tvar dfd, res, loaders,\n\t\t\tnode = this;\n\n\t\t// node.debug(\"visitAndLoad\");\n\t\tif( fn && includeSelf === true ) {\n\t\t\tres = fn(node);\n\t\t\tif( res === false || res === \"skip\" ) {\n\t\t\t\treturn _recursion ? res : _getResolvedPromise();\n\t\t\t}\n\t\t}\n\t\tif( !node.children && !node.lazy ) {\n\t\t\treturn _getResolvedPromise();\n\t\t}\n\t\tdfd = new $.Deferred();\n\t\tloaders = [];\n\t\t// node.debug(\"load()...\");\n\t\tnode.load().done(function(){\n\t\t\t// node.debug(\"load()... done.\");\n\t\t\tfor(var i=0, l=node.children.length; i<l; i++){\n\t\t\t\tres = node.children[i].visitAndLoad(fn, true, true);\n\t\t\t\tif( res === false ) {\n\t\t\t\t\tdfd.reject();\n\t\t\t\t\tbreak;\n\t\t\t\t} else if ( res !== \"skip\" ) {\n\t\t\t\t\tloaders.push(res); // Add promise to the list\n\t\t\t\t}\n\t\t\t}\n\t\t\t$.when.apply(this, loaders).then(function(){\n\t\t\t\tdfd.resolve();\n\t\t\t});\n\t\t});\n\t\treturn dfd.promise();\n\t},\n\t/** Call fn(node) for all parent nodes, bottom-up, including invisible system root.<br>\n\t * Stop iteration, if fn() returns false.<br>\n\t * Return false if iteration was stopped.\n\t *\n\t * @param {function} fn the callback function.\n\t * Return false to stop iteration, return \"skip\" to skip this node and children only.\n\t * @param {boolean} [includeSelf=false]\n\t * @returns {boolean}\n\t */\n\tvisitParents: function(fn, includeSelf) {\n\t\t// Visit parent nodes (bottom up)\n\t\tif(includeSelf && fn(this) === false){\n\t\t\treturn false;\n\t\t}\n\t\tvar p = this.parent;\n\t\twhile( p ) {\n\t\t\tif(fn(p) === false){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tp = p.parent;\n\t\t}\n\t\treturn true;\n\t},\n\t/** Call fn(node) for all sibling nodes.<br>\n\t * Stop iteration, if fn() returns false.<br>\n\t * Return false if iteration was stopped.\n\t *\n\t * @param {function} fn the callback function.\n\t * Return false to stop iteration.\n\t * @param {boolean} [includeSelf=false]\n\t * @returns {boolean}\n\t */\n\tvisitSiblings: function(fn, includeSelf) {\n\t\tvar i, l, n,\n\t\t\tac = this.parent.children;\n\n\t\tfor (i=0, l=ac.length; i<l; i++) {\n\t\t\tn = ac[i];\n\t\t\tif ( includeSelf || n !== this ){\n\t\t\t\tif( fn(n) === false ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\t/** Write warning to browser console if debugLevel >= 2 (prepending node info)\n\t *\n\t * @param {*} msg string or object or array of such\n\t */\n\twarn: function(msg){\n\t\tif( this.tree.options.debugLevel >= 2 ) {\n\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\tconsoleApply(\"warn\", arguments);\n\t\t}\n\t}\n};\n\n\n/* *****************************************************************************\n * Fancytree\n */\n/**\n * Construct a new tree object.\n *\n * @class Fancytree\n * @classdesc The controller behind a fancytree.\n * This class also contains 'hook methods': see {@link Fancytree_Hooks}.\n *\n * @param {Widget} widget\n *\n * @property {string} _id Automatically generated unique tree instance ID, e.g. \"1\".\n * @property {string} _ns Automatically generated unique tree namespace, e.g. \".fancytree-1\".\n * @property {FancytreeNode} activeNode Currently active node or null.\n * @property {string} ariaPropName Property name of FancytreeNode that contains the element which will receive the aria attributes.\n * Typically \"li\", but \"tr\" for table extension.\n * @property {jQueryObject} $container Outer <ul> element (or <table> element for ext-table).\n * @property {jQueryObject} $div A jQuery object containing the element used to instantiate the tree widget (`widget.element`)\n * @property {object|array} columns Recommended place to store shared column meta data. @since 2.27\n * @property {object} data Metadata, i.e. properties that may be passed to `source` in addition to a children array.\n * @property {object} ext Hash of all active plugin instances.\n * @property {FancytreeNode} focusNode Currently focused node or null.\n * @property {FancytreeNode} lastSelectedNode Used to implement selectMode 1 (single select)\n * @property {string} nodeContainerAttrName Property name of FancytreeNode that contains the outer element of single nodes.\n * Typically \"li\", but \"tr\" for table extension.\n * @property {FancytreeOptions} options Current options, i.e. default options + options passed to constructor.\n * @property {FancytreeNode} rootNode Invisible system root node.\n * @property {string} statusClassPropName Property name of FancytreeNode that contains the element which will receive the status classes.\n * Typically \"span\", but \"tr\" for table extension.\n * @property {object} types Map for shared type specific meta data, used with node.type attribute. @since 2.27\n * @property {object} widget Base widget instance.\n */\nfunction Fancytree(widget) {\n\tthis.widget = widget;\n\tthis.$div = widget.element;\n\tthis.options = widget.options;\n\tif( this.options ) {\n\t\tif( $.isFunction(this.options.lazyload ) && !$.isFunction(this.options.lazyLoad) ) {\n\t\t\tthis.options.lazyLoad = function() {\n\t\t\t\tFT.warn(\"The 'lazyload' event is deprecated since 2014-02-25. Use 'lazyLoad' (with uppercase L) instead.\");\n\t\t\t\treturn widget.options.lazyload.apply(this, arguments);\n\t\t\t};\n\t\t}\n\t\tif( $.isFunction(this.options.loaderror) ) {\n\t\t\t$.error(\"The 'loaderror' event was renamed since 2014-07-03. Use 'loadError' (with uppercase E) instead.\");\n\t\t}\n\t\tif( this.options.fx !== undefined ) {\n\t\t\tFT.warn(\"The 'fx' option was replaced by 'toggleEffect' since 2014-11-30.\");\n\t\t}\n\t\tif( this.options.removeNode !== undefined ) {\n\t\t\t$.error(\"The 'removeNode' event was replaced by 'modifyChild' since 2.20 (2016-09-10).\");\n\t\t}\n\t}\n\tthis.ext = {}; // Active extension instances\n\tthis.types = {};\n\tthis.columns = {};\n\t// allow to init tree.data.foo from <div data-foo=''>\n\tthis.data = _getElementDataAsDict(this.$div);\n\t// TODO: use widget.uuid instead?\n\tthis._id = $.ui.fancytree._nextId++;\n\t// TODO: use widget.eventNamespace instead?\n\tthis._ns = \".fancytree-\" + this._id; // append for namespaced events\n\tthis.activeNode = null;\n\tthis.focusNode = null;\n\tthis._hasFocus = null;\n\tthis._tempCache = {};\n\tthis._lastMousedownNode = null;\n\tthis._enableUpdate = true;\n\tthis.lastSelectedNode = null;\n\tthis.systemFocusElement = null;\n\tthis.lastQuicksearchTerm = \"\";\n\tthis.lastQuicksearchTime = 0;\n\n\tthis.statusClassPropName = \"span\";\n\tthis.ariaPropName = \"li\";\n\tthis.nodeContainerAttrName = \"li\";\n\n\t// Remove previous markup if any\n\tthis.$div.find(\">ul.fancytree-container\").remove();\n\n\t// Create a node without parent.\n\tvar fakeParent = { tree: this },\n\t\t$ul;\n\tthis.rootNode = new FancytreeNode(fakeParent, {\n\t\ttitle: \"root\",\n\t\tkey: \"root_\" + this._id,\n\t\tchildren: null,\n\t\texpanded: true\n\t});\n\tthis.rootNode.parent = null;\n\n\t// Create root markup\n\t$ul = $(\"<ul>\", {\n\t\t\"class\": \"ui-fancytree fancytree-container fancytree-plain\"\n\t}).appendTo(this.$div);\n\tthis.$container = $ul;\n\tthis.rootNode.ul = $ul[0];\n\n\tif(this.options.debugLevel == null){\n\t\tthis.options.debugLevel = FT.debugLevel;\n\t}\n\t// // Add container to the TAB chain\n\t// // See http://www.w3.org/TR/wai-aria-practices/#focus_activedescendant\n\t// // #577: Allow to set tabindex to \"0\", \"-1\" and \"\"\n\t// this.$container.attr(\"tabindex\", this.options.tabindex);\n\n\t// if( this.options.rtl ) {\n\t// \tthis.$container.attr(\"DIR\", \"RTL\").addClass(\"fancytree-rtl\");\n\t// // }else{\n\t// //\tthis.$container.attr(\"DIR\", null).removeClass(\"fancytree-rtl\");\n\t// }\n\t// if(this.options.aria){\n\t// \tthis.$container.attr(\"role\", \"tree\");\n\t// \tif( this.options.selectMode !== 1 ) {\n\t// \t\tthis.$container.attr(\"aria-multiselectable\", true);\n\t// \t}\n\t// }\n}\n\n\nFancytree.prototype = /** @lends Fancytree# */{\n\t/* Return a context object that can be re-used for _callHook().\n\t * @param {Fancytree | FancytreeNode | EventData} obj\n\t * @param {Event} originalEvent\n\t * @param {Object} extra\n\t * @returns {EventData}\n\t */\n\t_makeHookContext: function(obj, originalEvent, extra) {\n\t\tvar ctx, tree;\n\t\tif(obj.node !== undefined){\n\t\t\t// obj is already a context object\n\t\t\tif(originalEvent && obj.originalEvent !== originalEvent){\n\t\t\t\t$.error(\"invalid args\");\n\t\t\t}\n\t\t\tctx = obj;\n\t\t}else if(obj.tree){\n\t\t\t// obj is a FancytreeNode\n\t\t\ttree = obj.tree;\n\t\t\tctx = { node: obj, tree: tree, widget: tree.widget, options: tree.widget.options, originalEvent: originalEvent,\n\t\t\t\t\ttypeInfo: tree.types[obj.type] || {}};\n\t\t}else if(obj.widget){\n\t\t\t// obj is a Fancytree\n\t\t\tctx = { node: null, tree: obj, widget: obj.widget, options: obj.widget.options, originalEvent: originalEvent };\n\t\t}else{\n\t\t\t$.error(\"invalid args\");\n\t\t}\n\t\tif(extra){\n\t\t\t$.extend(ctx, extra);\n\t\t}\n\t\treturn ctx;\n\t},\n\t/* Trigger a hook function: funcName(ctx, [...]).\n\t *\n\t * @param {string} funcName\n\t * @param {Fancytree|FancytreeNode|EventData} contextObject\n\t * @param {any} [_extraArgs] optional additional arguments\n\t * @returns {any}\n\t */\n\t_callHook: function(funcName, contextObject, _extraArgs) {\n\t\tvar ctx = this._makeHookContext(contextObject),\n\t\t\tfn = this[funcName],\n\t\t\targs = Array.prototype.slice.call(arguments, 2);\n\t\tif(!$.isFunction(fn)){\n\t\t\t$.error(\"_callHook('\" + funcName + \"') is not a function\");\n\t\t}\n\t\targs.unshift(ctx);\n//\t\tthis.debug(\"_hook\", funcName, ctx.node && ctx.node.toString() || ctx.tree.toString(), args);\n\t\treturn fn.apply(this, args);\n\t},\n\t_setExpiringValue: function(key, value, ms){\n\t\tthis._tempCache[key] = {value: value, expire: Date.now() + (+ms || 50)};\n\t},\n\t_getExpiringValue: function(key){\n\t\tvar entry = this._tempCache[key];\n\t\tif( entry && entry.expire > Date.now() ) {\n\t\t\treturn entry.value;\n\t\t}\n\t\tdelete this._tempCache[key];\n\t\treturn null;\n\t},\n\t/* Check if current extensions dependencies are met and throw an error if not.\n\t *\n\t * This method may be called inside the `treeInit` hook for custom extensions.\n\t *\n\t * @param {string} extension name of the required extension\n\t * @param {boolean} [required=true] pass `false` if the extension is optional, but we want to check for order if it is present\n\t * @param {boolean} [before] `true` if `name` must be included before this, `false` otherwise (use `null` if order doesn't matter)\n\t * @param {string} [message] optional error message (defaults to a descriptve error message)\n\t */\n\t_requireExtension: function(name, required, before, message) {\n\t\tbefore = !!before;\n\t\tvar thisName = this._local.name,\n\t\t\textList = this.options.extensions,\n\t\t\tisBefore = $.inArray(name, extList) < $.inArray(thisName, extList),\n\t\t\tisMissing = required && this.ext[name] == null,\n\t\t\tbadOrder = !isMissing && before != null && (before !== isBefore);\n\n\t\t_assert(thisName && thisName !== name, \"invalid or same name\");\n\n\t\tif( isMissing || badOrder ){\n\t\t\tif( !message ){\n\t\t\t\tif( isMissing || required ){\n\t\t\t\t\tmessage = \"'\" + thisName + \"' extension requires '\" + name + \"'\";\n\t\t\t\t\tif( badOrder ){\n\t\t\t\t\t\tmessage += \" to be registered \" + (before ? \"before\" : \"after\") + \" itself\";\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tmessage = \"If used together, `\" + name + \"` must be registered \" + (before ? \"before\" : \"after\") + \" `\" + thisName + \"`\";\n\t\t\t\t}\n\t\t\t}\n\t\t\t$.error(message);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\t/** Activate node with a given key and fire focus and activate events.\n\t *\n\t * A previously activated node will be deactivated.\n\t * If activeVisible option is set, all parents will be expanded as necessary.\n\t * Pass key = false, to deactivate the current node only.\n\t * @param {string} key\n\t * @returns {FancytreeNode} activated node (null, if not found)\n\t */\n\tactivateKey: function(key) {\n\t\tvar node = this.getNodeByKey(key);\n\t\tif(node){\n\t\t\tnode.setActive();\n\t\t}else if(this.activeNode){\n\t\t\tthis.activeNode.setActive(false);\n\t\t}\n\t\treturn node;\n\t},\n\t/** (experimental) Add child status nodes that indicate 'More...', ....\n\t * @param {boolean|object} node optional node definition. Pass `false` to remove all paging nodes.\n\t * @param {string} [mode='append'] 'child'|firstChild'\n\t * @since 2.15\n\t */\n\taddPagingNode: function(node, mode){\n\t\treturn this.rootNode.addPagingNode(node, mode);\n\t},\n\t/** (experimental) Modify existing data model.\n\t *\n\t * @param {Array} patchList array of [key, NodePatch] arrays\n\t * @returns {$.Promise} resolved, when all patches have been applied\n\t * @see TreePatch\n\t */\n\tapplyPatch: function(patchList) {\n\t\tvar dfd, i, p2, key, patch, node,\n\t\t\tpatchCount = patchList.length,\n\t\t\tdeferredList = [];\n\n\t\tfor(i=0; i<patchCount; i++){\n\t\t\tp2 = patchList[i];\n\t\t\t_assert(p2.length === 2, \"patchList must be an array of length-2-arrays\");\n\t\t\tkey = p2[0];\n\t\t\tpatch = p2[1];\n\t\t\tnode = (key === null) ? this.rootNode : this.getNodeByKey(key);\n\t\t\tif(node){\n\t\t\t\tdfd = new $.Deferred();\n\t\t\t\tdeferredList.push(dfd);\n\t\t\t\tnode.applyPatch(patch).always(_makeResolveFunc(dfd, node));\n\t\t\t}else{\n\t\t\t\tthis.warn(\"could not find node with key '\" + key + \"'\");\n\t\t\t}\n\t\t}\n\t\t// Return a promise that is resolved, when ALL patches were applied\n\t\treturn $.when.apply($, deferredList).promise();\n\t},\n\t/* TODO: implement in dnd extension\n\tcancelDrag: function() {\n\t\tvar dd = $.ui.ddmanager.current;\n\t\tif(dd){\n\t\t\tdd.cancel();\n\t\t}\n\t},\n */\n\t/** Remove all nodes.\n\t * @since 2.14\n\t */\n\tclear: function(source) {\n\t\tthis._callHook(\"treeClear\", this);\n\t},\n /** Return the number of nodes.\n\t* @returns {integer}\n\t*/\n\tcount: function() {\n\t\treturn this.rootNode.countChildren();\n\t},\n\t/** Write to browser console if debugLevel >= 4 (prepending tree name)\n\t *\n\t * @param {*} msg string or object or array of such\n\t */\n\tdebug: function(msg){\n\t\tif( this.options.debugLevel >= 4 ) {\n\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\tconsoleApply(\"log\", arguments);\n\t\t}\n\t},\n\t// TODO: disable()\n\t// TODO: enable()\n\t/** Temporarily suppress rendering to improve performance on bulk-updates.\n\t *\n\t * @param {boolean} flag\n\t * @returns {boolean} previous status\n\t * @since 2.19\n\t */\n\tenableUpdate: function(flag) {\n\t\tflag = ( flag !== false );\n\t\t/*jshint -W018 */ // Confusing use of '!'\n\t\tif ( !!this._enableUpdate === !!flag ) {\n\t\t\treturn flag;\n\t\t}\n\t\t/*jshint +W018 */\n\t\tthis._enableUpdate = flag;\n\t\tif ( flag ) {\n\t\t\tthis.debug(\"enableUpdate(true): redraw \"); //, this._dirtyRoots);\n\t\t\tthis.render();\n\t\t} else {\n\t\t// \tthis._dirtyRoots = null;\n\t\t\tthis.debug(\"enableUpdate(false)...\");\n\t\t}\n\t\treturn !flag; // return previous value\n\t},\n\t/**Find all nodes that matches condition.\n\t *\n\t * @param {string | function(node)} match title string to search for, or a\n\t * callback function that returns `true` if a node is matched.\n\t * @returns {FancytreeNode[]} array of nodes (may be empty)\n\t * @see FancytreeNode#findAll\n\t * @since 2.12\n\t */\n\tfindAll: function(match) {\n\t\treturn this.rootNode.findAll(match);\n\t},\n\t/**Find first node that matches condition.\n\t *\n\t * @param {string | function(node)} match title string to search for, or a\n\t * callback function that returns `true` if a node is matched.\n\t * @returns {FancytreeNode} matching node or null\n\t * @see FancytreeNode#findFirst\n\t * @since 2.12\n\t */\n\tfindFirst: function(match) {\n\t\treturn this.rootNode.findFirst(match);\n\t},\n\t/** Find the next visible node that starts with `match`, starting at `startNode`\n\t * and wrap-around at the end.\n\t *\n\t * @param {string|function} match\n\t * @param {FancytreeNode} [startNode] defaults to first node\n\t * @returns {FancytreeNode} matching node or null\n\t */\n\tfindNextNode: function(match, startNode, visibleOnly) {\n\t\tmatch = (typeof match === \"string\") ? _makeNodeTitleStartMatcher(match) : match;\n\t\tstartNode = startNode || this.getFirstChild();\n\n\t\tvar stopNode = null,\n\t\t\tparentChildren = startNode.parent.children,\n\t\t\tmatchingNode = null,\n\t\t\twalkVisible = function(parent, idx, fn) {\n\t\t\t\tvar i, grandParent,\n\t\t\t\t\tparentChildren = parent.children,\n\t\t\t\t\tsiblingCount = parentChildren.length,\n\t\t\t\t\tnode = parentChildren[idx];\n\t\t\t\t// visit node itself\n\t\t\t\tif( node && fn(node) === false ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// visit descendants\n\t\t\t\tif( node && node.children && node.expanded ) {\n\t\t\t\t\tif( walkVisible(node, 0, fn) === false ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// visit subsequent siblings\n\t\t\t\tfor( i = idx + 1; i < siblingCount; i++ ) {\n\t\t\t\t\tif( walkVisible(parent, i, fn) === false ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// visit parent's subsequent siblings\n\t\t\t\tgrandParent = parent.parent;\n\t\t\t\tif( grandParent ) {\n\t\t\t\t\treturn walkVisible(grandParent, grandParent.children.indexOf(parent) + 1, fn);\n\t\t\t\t} else {\n\t\t\t\t\t// wrap-around: restart with first node\n\t\t\t\t\treturn walkVisible(parent, 0, fn);\n\t\t\t\t}\n\t\t\t};\n\n\t\twalkVisible(startNode.parent, parentChildren.indexOf(startNode), function(node){\n\t\t\t// Stop iteration if we see the start node a second time\n\t\t\tif( node === stopNode ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tstopNode = stopNode || node;\n\t\t\t// Ignore nodes hidden by a filter\n\t\t\tif( ! $(node.span).is(\":visible\") ) {\n\t\t\t\tnode.debug(\"quicksearch: skipping hidden node\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Test if we found a match, but search for a second match if this\n\t\t\t// was the currently active node\n\t\t\tif( match(node) ) {\n\t\t\t\t// node.debug(\"quicksearch match \" + node.title, startNode);\n\t\t\t\tmatchingNode = node;\n\t\t\t\tif( matchingNode !== startNode ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn matchingNode;\n\t},\n\t// TODO: fromDict\n\t/**\n\t * Generate INPUT elements that can be submitted with html forms.\n\t *\n\t * In selectMode 3 only the topmost selected nodes are considered, unless\n\t * `opts.stopOnParents: false` is passed.\n\t *\n\t * @example\n\t * // Generate input elements for active and selected nodes\n\t * tree.generateFormElements();\n\t * // Generate input elements selected nodes, using a custom `name` attribute\n\t * tree.generateFormElements(\"cust_sel\", false);\n\t * // Generate input elements using a custom filter\n\t * tree.generateFormElements(true, true, { filter: function(node) {\n\t * return node.isSelected() && node.data.yes;\n\t * }});\n\t *\n\t * @param {boolean | string} [selected=true] Pass false to disable, pass a string to override the field name (default: 'ft_ID[]')\n\t * @param {boolean | string} [active=true] Pass false to disable, pass a string to override the field name (default: 'ft_ID_active')\n\t * @param {object} [opts] default { filter: null, stopOnParents: true }\n\t */\n\tgenerateFormElements: function(selected, active, opts) {\n\t\topts = opts || {};\n\n\t\tvar nodeList,\n\t\t\tselectedName = (typeof selected === \"string\") ? selected : \"ft_\" + this._id + \"[]\",\n\t\t\tactiveName = (typeof active === \"string\") ? active : \"ft_\" + this._id + \"_active\",\n\t\t\tid = \"fancytree_result_\" + this._id,\n\t\t\t$result = $(\"#\" + id),\n\t\t\tstopOnParents = this.options.selectMode === 3 && opts.stopOnParents !== false;\n\n\t\tif($result.length){\n\t\t\t$result.empty();\n\t\t}else{\n\t\t\t$result = $(\"<div>\", {\n\t\t\t\tid: id\n\t\t\t}).hide().insertAfter(this.$container);\n\t\t}\n\t\tif(active !== false && this.activeNode){\n\t\t\t$result.append($(\"<input>\", {\n\t\t\t\ttype: \"radio\",\n\t\t\t\tname: activeName,\n\t\t\t\tvalue: this.activeNode.key,\n\t\t\t\tchecked: true\n\t\t\t}));\n\t\t}\n\t\tfunction _appender( node ) {\n\t\t\t$result.append($(\"<input>\", {\n\t\t\t\ttype: \"checkbox\",\n\t\t\t\tname: selectedName,\n\t\t\t\tvalue: node.key,\n\t\t\t\tchecked: true\n\t\t\t}));\n\t\t}\n\t\tif ( opts.filter ) {\n\t\t\tthis.visit(function(node) {\n\t\t\t\tvar res = opts.filter(node);\n\t\t\t\tif( res === \"skip\" ) { return res; }\n\t\t\t\tif ( res !== false ) {\n\t\t\t\t\t_appender(node);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if ( selected !== false ) {\n\t\t\tnodeList = this.getSelectedNodes(stopOnParents);\n\t\t\t$.each(nodeList, function(idx, node) {\n\t\t\t\t_appender(node);\n\t\t\t});\n\t\t}\n\t},\n\t/**\n\t * Return the currently active node or null.\n\t * @returns {FancytreeNode}\n\t */\n\tgetActiveNode: function() {\n\t\treturn this.activeNode;\n\t},\n\t/** Return the first top level node if any (not the invisible root node).\n\t * @returns {FancytreeNode | null}\n\t */\n\tgetFirstChild: function() {\n\t\treturn this.rootNode.getFirstChild();\n\t},\n\t/**\n\t * Return node that has keyboard focus or null.\n\t * @returns {FancytreeNode}\n\t */\n\tgetFocusNode: function() {\n\t\treturn this.focusNode;\n\t},\n\t/**\n\t * Return node with a given key or null if not found.\n\t *\n\t * Not\n\t * @param {string} key\n\t * @param {FancytreeNode} [searchRoot] only search below this node\n\t * @returns {FancytreeNode | null}\n\t */\n\tgetNodeByKey: function(key, searchRoot) {\n\t\t// Search the DOM by element ID (assuming this is faster than traversing all nodes).\n\t\tvar el, match;\n\t\t// TODO: use tree.keyMap if available\n\t\t// TODO: check opts.generateIds === true\n\t\tif(!searchRoot){\n\t\t\tel = document.getElementById(this.options.idPrefix + key);\n\t\t\tif( el ){\n\t\t\t\treturn el.ftnode ? el.ftnode : null;\n\t\t\t}\n\t\t}\n\t\t// Not found in the DOM, but still may be in an unrendered part of tree\n\t\tsearchRoot = searchRoot || this.rootNode;\n\t\tmatch = null;\n\t\tsearchRoot.visit(function(node){\n\t\t\tif(node.key === key) {\n\t\t\t\tmatch = node;\n\t\t\t\treturn false; // Stop iteration\n\t\t\t}\n\t\t}, true);\n\t\treturn match;\n\t},\n\t/** Return the invisible system root node.\n\t * @returns {FancytreeNode}\n\t */\n\tgetRootNode: function() {\n\t\treturn this.rootNode;\n\t},\n\t/**\n\t * Return an array of selected nodes.\n\t * @param {boolean} [stopOnParents=false] only return the topmost selected\n\t * node (useful with selectMode 3)\n\t * @returns {FancytreeNode[]}\n\t */\n\tgetSelectedNodes: function(stopOnParents) {\n\t\treturn this.rootNode.getSelectedNodes(stopOnParents);\n\t},\n\t/** Return true if the tree control has keyboard focus\n\t * @returns {boolean}\n\t */\n\thasFocus: function(){\n\t\treturn !!this._hasFocus;\n\t},\n\t/** Write to browser console if debugLevel >= 3 (prepending tree name)\n\t * @param {*} msg string or object or array of such\n\t */\n\tinfo: function(msg){\n\t\tif( this.options.debugLevel >= 3 ) {\n\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\tconsoleApply(\"info\", arguments);\n\t\t}\n\t},\n/*\n\tTODO: isInitializing: function() {\n\t\treturn ( this.phase==\"init\" || this.phase==\"postInit\" );\n\t},\n\tTODO: isReloading: function() {\n\t\treturn ( this.phase==\"init\" || this.phase==\"postInit\" ) && this.options.persist && this.persistence.cookiesFound;\n\t},\n\tTODO: isUserEvent: function() {\n\t\treturn ( this.phase==\"userEvent\" );\n\t},\n*/\n\n\t/**\n\t * Make sure that a node with a given ID is loaded, by traversing - and\n\t * loading - its parents. This method is meant for lazy hierarchies.\n\t * A callback is executed for every node as we go.\n\t * @example\n\t * // Resolve using node.key:\n\t * tree.loadKeyPath(\"/_3/_23/_26/_27\", function(node, status){\n\t * if(status === \"loaded\") {\n\t * console.log(\"loaded intermediate node \" + node);\n\t * }else if(status === \"ok\") {\n\t * node.activate();\n\t * }\n\t * });\n\t * // Use deferred promise:\n\t * tree.loadKeyPath(\"/_3/_23/_26/_27\").progress(function(data){\n\t * if(data.status === \"loaded\") {\n\t * console.log(\"loaded intermediate node \" + data.node);\n\t * }else if(data.status === \"ok\") {\n\t * node.activate();\n\t * }\n\t * }).done(function(){\n\t * ...\n\t * });\n\t * // Custom path segment resolver:\n\t * tree.loadKeyPath(\"/321/431/21/2\", {\n\t * matchKey: function(node, key){\n\t * return node.data.refKey === key;\n\t * },\n\t * callback: function(node, status){\n\t * if(status === \"loaded\") {\n\t * console.log(\"loaded intermediate node \" + node);\n\t * }else if(status === \"ok\") {\n\t * node.activate();\n\t * }\n\t * }\n\t * });\n\t * @param {string | string[]} keyPathList one or more key paths (e.g. '/3/2_1/7')\n\t * @param {function | object} optsOrCallback callback(node, status) is called for every visited node ('loading', 'loaded', 'ok', 'error').\n\t * Pass an object to define custom key matchers for the path segments: {callback: function, matchKey: function}.\n\t * @returns {$.Promise}\n\t */\n\tloadKeyPath: function(keyPathList, optsOrCallback) {\n\t\tvar callback, i, path,\n\t\t\tself = this,\n\t\t\tdfd = new $.Deferred(),\n\t\t\tparent = this.getRootNode(),\n\t\t\tsep = this.options.keyPathSeparator,\n\t\t\tpathSegList = [],\n\t\t\topts = $.extend({}, optsOrCallback);\n\n\t\t// Prepare options\n\t\tif( typeof optsOrCallback === \"function\" ) {\n\t\t\tcallback = optsOrCallback;\n\t\t} else if ( optsOrCallback && optsOrCallback.callback ) {\n\t\t\tcallback = optsOrCallback.callback;\n\t\t}\n\t\topts.callback = function(ctx, node, status){\n\t\t\tif( callback ) {\n\t\t\t\tcallback.call(ctx, node, status);\n\t\t\t}\n\t\t\tdfd.notifyWith(ctx, [{node: node, status: status}]);\n\t\t};\n\t\tif( opts.matchKey == null ) {\n\t\t\topts.matchKey = function(node, key) { return node.key === key; };\n\t\t}\n\t\t// Convert array of path strings to array of segment arrays\n\t\tif(!$.isArray(keyPathList)){\n\t\t\tkeyPathList = [keyPathList];\n\t\t}\n\t\tfor(i=0; i<keyPathList.length; i++){\n\t\t\tpath = keyPathList[i];\n\t\t\t// strip leading slash\n\t\t\tif(path.charAt(0) === sep){\n\t\t\t\tpath = path.substr(1);\n\t\t\t}\n\t\t\t// segListMap[path] = { parent: parent, segList: path.split(sep) };\n\t\t\tpathSegList.push(path.split(sep));\n\t\t\t// targetList.push({ parent: parent, segList: path.split(sep)/* , path: path*/});\n\t\t}\n\t\t// The timeout forces async behavior always (even if nodes are all loaded)\n\t\t// This way a potential progress() event will fire.\n\t\tsetTimeout(function(){\n\t\t\tself._loadKeyPathImpl(dfd, opts, parent, pathSegList).done(function(){\n\t\t\t\tdfd.resolve();\n\t\t\t});\n\t\t}, 0);\n\t\treturn dfd.promise();\n\t},\n\t/*\n\t * Resolve a list of paths, relative to one parent node.\n\t */\n\t_loadKeyPathImpl: function(dfd, opts, parent, pathSegList) {\n\t\tvar deferredList, i, key, node, remainMap, tmpParent, segList, subDfd,\n\t\t\tself = this;\n\n\t\tfunction __findChild(parent, key){\n\t\t\t// console.log(\"__findChild\", key, parent);\n\t\t\tvar i, l,\n\t\t\t\tcl = parent.children;\n\n\t\t\tif( cl ) {\n\t\t\t\tfor(i=0, l=cl.length; i<l; i++){\n\t\t\t\t\tif( opts.matchKey(cl[i], key)) { return cl[i]; }\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\t// console.log(\"_loadKeyPathImpl, parent=\", parent, \", pathSegList=\", pathSegList);\n\n\t\t// Pass 1:\n\t\t// Handle all path segments for nodes that are already loaded.\n\t\t// Collect distinct top-most lazy nodes in a map.\n\t\t// Note that we can use node.key to de-dupe entries, even if a custom matcher would\n\t\t// look for other node attributes.\n\t\t// map[node.key] => {node: node, pathList: [list of remaining rest-paths]}\n\t\tremainMap = {};\n\n\t\tfor(i=0; i<pathSegList.length; i++){\n\t\t\tsegList = pathSegList[i];\n\t\t\t// target = targetList[i];\n\n\t\t\t// Traverse and pop path segments (i.e. keys), until we hit a lazy, unloaded node\n\t\t\ttmpParent = parent;\n\t\t\twhile(segList.length){\n\t\t\t\tkey = segList.shift();\n\t\t\t\tnode = __findChild(tmpParent, key);\n\t\t\t\tif(!node){\n\t\t\t\t\tthis.warn(\"loadKeyPath: key not found: \" + key + \" (parent: \" + tmpParent + \")\");\n\t\t\t\t\topts.callback(this, key, \"error\");\n\t\t\t\t\tbreak;\n\t\t\t\t}else if(segList.length === 0){\n\t\t\t\t\topts.callback(this, node, \"ok\");\n\t\t\t\t\tbreak;\n\t\t\t\t}else if(!node.lazy || (node.hasChildren() !== undefined )){\n\t\t\t\t\topts.callback(this, node, \"loaded\");\n\t\t\t\t\ttmpParent = node;\n\t\t\t\t}else{\n\t\t\t\t\topts.callback(this, node, \"loaded\");\n\t\t\t\t\tkey = node.key; //target.segList.join(sep);\n\t\t\t\t\tif(remainMap[key]){\n\t\t\t\t\t\tremainMap[key].pathSegList.push(segList);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tremainMap[key] = {parent: node, pathSegList: [segList]};\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// console.log(\"_loadKeyPathImpl AFTER pass 1, remainMap=\", remainMap);\n\n\t\t// Now load all lazy nodes and continue iteration for remaining paths\n\t\tdeferredList = [];\n\n\t\t// Avoid jshint warning 'Don't make functions within a loop.':\n\t\tfunction __lazyload(dfd, parent, pathSegList){\n\t\t\t// console.log(\"__lazyload\", parent, \"pathSegList=\", pathSegList);\n\t\t\topts.callback(self, parent, \"loading\");\n\t\t\tparent.load().done(function(){\n\t\t\t\tself._loadKeyPathImpl.call(self, dfd, opts, parent, pathSegList)\n\t\t\t\t\t.always(_makeResolveFunc(dfd, self));\n\t\t\t}).fail(function(errMsg){\n\t\t\t\tself.warn(\"loadKeyPath: error loading lazy \" + parent);\n\t\t\t\topts.callback(self, node, \"error\");\n\t\t\t\tdfd.rejectWith(self);\n\t\t\t});\n\t\t}\n\t\t// remainMap contains parent nodes, each with a list of relative sub-paths.\n\t\t// We start loading all of them now, and pass the the list to each loader.\n\t\tfor(var nodeKey in remainMap){\n\t\t\tvar remain = remainMap[nodeKey];\n\t\t\t// console.log(\"for(): remain=\", remain, \"remainMap=\", remainMap);\n\t\t\t// key = remain.segList.shift();\n\t\t\t// node = __findChild(remain.parent, key);\n\t\t\t// if (node == null) { // #576\n\t\t\t// \t// Issue #576, refactored for v2.27:\n\t\t\t// \t// The root cause was, that sometimes the wrong parent was used here\n\t\t\t// \t// to find the next segment.\n\t\t\t// \t// Falling back to getNodeByKey() was a hack that no longer works if a custom\n\t\t\t// \t// matcher is used, because we cannot assume that a single segment-key is unique\n\t\t\t// \t// throughout the tree.\n\t\t\t// \tself.error(\"loadKeyPath: error loading child by key '\" + key + \"' (parent: \" + target.parent + \")\", target);\n\t\t\t// \t// \tnode = self.getNodeByKey(key);\n\t\t\t// \tcontinue;\n\t\t\t// }\n\t\t\tsubDfd = new $.Deferred();\n\t\t\tdeferredList.push(subDfd);\n\t\t\t__lazyload(subDfd, remain.parent, remain.pathSegList);\n\t\t}\n\t\t// Return a promise that is resolved, when ALL paths were loaded\n\t\treturn $.when.apply($, deferredList).promise();\n\t},\n\t/** Re-fire beforeActivate, activate, and (optional) focus events.\n\t * Calling this method in the `init` event, will activate the node that\n\t * was marked 'active' in the source data, and optionally set the keyboard\n\t * focus.\n\t * @param [setFocus=false]\n\t */\n\treactivate: function(setFocus) {\n\t\tvar res,\n\t\t\tnode = this.activeNode;\n\n\t\tif( !node ) {\n\t\t\treturn _getResolvedPromise();\n\t\t}\n\t\tthis.activeNode = null; // Force re-activating\n\t\tres = node.setActive(true, {noFocus: true});\n\t\tif( setFocus ){\n\t\t\tnode.setFocus();\n\t\t}\n\t\treturn res;\n\t},\n\t/** Reload tree from source and return a promise.\n\t * @param [source] optional new source (defaults to initial source data)\n\t * @returns {$.Promise}\n\t */\n\treload: function(source) {\n\t\tthis._callHook(\"treeClear\", this);\n\t\treturn this._callHook(\"treeLoad\", this, source);\n\t},\n\t/**Render tree (i.e. create DOM elements for all top-level nodes).\n\t * @param {boolean} [force=false] create DOM elemnts, even if parent is collapsed\n\t * @param {boolean} [deep=false]\n\t */\n\trender: function(force, deep) {\n\t\treturn this.rootNode.render(force, deep);\n\t},\n\t/**(De)select all nodes.\n\t * @param {boolean} [flag=true]\n\t * @since 2.28\n\t */\n\tselectAll: function(flag) {\n\t\tthis.visit(function(node){\n\t\t\tnode.setSelected(flag);\n\t\t});\n\t},\n\t// TODO: selectKey: function(key, select)\n\t// TODO: serializeArray: function(stopOnParents)\n\t/**\n\t * @param {boolean} [flag=true]\n\t */\n\tsetFocus: function(flag) {\n\t\treturn this._callHook(\"treeSetFocus\", this, flag);\n\t},\n\t/**\n\t * Return all nodes as nested list of {@link NodeData}.\n\t *\n\t * @param {boolean} [includeRoot=false] Returns the hidden system root node (and its children)\n\t * @param {function} [callback] callback(dict, node) is called for every node, in order to allow modifications\n\t * @returns {Array | object}\n\t * @see FancytreeNode#toDict\n\t */\n\ttoDict: function(includeRoot, callback){\n\t\tvar res = this.rootNode.toDict(true, callback);\n\t\treturn includeRoot ? res : res.children;\n\t},\n\t/* Implicitly called for string conversions.\n\t * @returns {string}\n\t */\n\ttoString: function(){\n\t\treturn \"Fancytree@\" + this._id;\n\t\t// return \"<Fancytree(#\" + this._id + \")>\";\n\t},\n\t/* _trigger a widget event with additional node ctx.\n\t * @see EventData\n\t */\n\t_triggerNodeEvent: function(type, node, originalEvent, extra) {\n//\t\tthis.debug(\"_trigger(\" + type + \"): '\" + ctx.node.title + \"'\", ctx);\n\t\tvar ctx = this._makeHookContext(node, originalEvent, extra),\n\t\t\tres = this.widget._trigger(type, originalEvent, ctx);\n\t\tif(res !== false && ctx.result !== undefined){\n\t\t\treturn ctx.result;\n\t\t}\n\t\treturn res;\n\t},\n\t/* _trigger a widget event with additional tree data. */\n\t_triggerTreeEvent: function(type, originalEvent, extra) {\n//\t\tthis.debug(\"_trigger(\" + type + \")\", ctx);\n\t\tvar ctx = this._makeHookContext(this, originalEvent, extra),\n\t\t\tres = this.widget._trigger(type, originalEvent, ctx);\n\n\t\tif(res !== false && ctx.result !== undefined){\n\t\t\treturn ctx.result;\n\t\t}\n\t\treturn res;\n\t},\n\t/** Call fn(node) for all nodes in hierarchical order (depth-first).\n\t *\n\t * @param {function} fn the callback function.\n\t * Return false to stop iteration, return \"skip\" to skip this node and children only.\n\t * @returns {boolean} false, if the iterator was stopped.\n\t */\n\tvisit: function(fn) {\n\t\treturn this.rootNode.visit(fn, false);\n\t},\n\t/** Call fn(node) for all nodes in vertical order, top down (or bottom up).<br>\n\t * Stop iteration, if fn() returns false.<br>\n\t * Return false if iteration was stopped.\n\t *\n\t * @param {function} fn the callback function.\n\t * Return false to stop iteration, return \"skip\" to skip this node and children only.\n\t * @param {object} [options]\n\t * Defaults:\n\t * {start: First top node, reverse: false, includeSelf: true, includeHidden: false}\n\t * @returns {boolean}\n\t * @since 2.28\n\t */\n\tvisitRows: function(fn, opts) {\n\t\tif( opts && opts.reverse ) {\n\t\t\tdelete opts.reverse;\n\t\t\treturn this._visitRowsUp(fn, opts);\n\t\t}\n\t\tvar i, nextIdx, parent, res, siblings,\n\t\t\tsiblingOfs = 0,\n\t\t\tskipFirstNode = (opts.includeSelf === false),\n\t\t\tincludeHidden = !!opts.includeHidden,\n\t\t\tnode = opts.start || this.rootNode.children[0];\n\n\t\tparent = node.parent;\n\t\twhile( parent ) {\n\t\t\t// visit siblings\n\t\t\tsiblings = parent.children;\n\t\t\tnextIdx = siblings.indexOf(node) + siblingOfs;\n\n\t\t\tfor( i=nextIdx; i<siblings.length; i++) {\n\t\t\t\tnode = siblings[i];\n\t\t\t\tif( !skipFirstNode && fn(node) === false ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tskipFirstNode = false;\n\t\t\t\t// Dive into node's child nodes\n\t\t\t\tif( node.children && node.children.length && (includeHidden || node.expanded) ) {\n\t\t\t\t\t// Disable warning: Functions declared within loops referencing an outer\n\t\t\t\t\t// scoped variable may lead to confusing semantics:\n\t\t\t\t\t/*jshint -W083 */\n\t\t\t\t\tres = node.visit(function(n) {\n\t\t\t\t\t\tif( fn(n) === false ) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( !includeHidden && n.children && !n.expanded ) {\n\t\t\t\t\t\t\treturn \"skip\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false);\n\t\t\t\t\t/*jshint +W083 */\n\t\t\t\t\tif( res === false ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Visit parent nodes (bottom up)\n\t\t\tnode = parent;\n\t\t\tparent = parent.parent;\n\t\t\tsiblingOfs = 1; //\n\t\t}\n\t\treturn true;\n\t},\n\t/* Call fn(node) for all nodes in vertical order, bottom up.\n\t */\n\t_visitRowsUp: function(fn, opts) {\n\t\tvar children, idx, parent,\n\t\t\tincludeHidden = !!opts.includeHidden,\n\t\t\tnode = opts.start || this.rootNode.children[0];\n\n\t\twhile( true ) {\n\t\t\tparent = node.parent;\n\t\t\tchildren = parent.children;\n\n\t\t\tif( children[0] === node ) {\n\t\t\t\t// If this is already the first sibling, goto parent\n\t\t\t\tnode = parent;\n\t\t\t\tchildren = parent.children;\n\t\t\t} else {\n\t\t\t\t// Otherwise, goto prev. sibling\n\t\t\t\tidx = children.indexOf(node);\n\t\t\t\tnode = children[idx-1];\n\t\t\t\t// If the prev. sibling has children, follow down to last descendant\n\t\t\t\twhile( (includeHidden || node.expanded) && node.children && node.children.length ) {\n\t\t\t\t\tchildren = node.children;\n\t\t\t\t\tparent = node;\n\t\t\t\t\tnode = children[children.length - 1];\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Skip invisible\n\t\t\tif( !includeHidden && !$(node.span).is(\":visible\") ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif( fn(node) === false ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\t/** Write warning to browser console if debugLevel >= 2 (prepending tree info)\n\t *\n\t * @param {*} msg string or object or array of such\n\t */\n\twarn: function(msg){\n\t\tif( this.options.debugLevel >= 2 ) {\n\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\tconsoleApply(\"warn\", arguments);\n\t\t}\n\t}\n};\n\n/**\n * These additional methods of the {@link Fancytree} class are 'hook functions'\n * that can be used and overloaded by extensions.\n * (See <a href=\"https://github.com/mar10/fancytree/wiki/TutorialExtensions\">writing extensions</a>.)\n * @mixin Fancytree_Hooks\n */\n$.extend(Fancytree.prototype,\n\t/** @lends Fancytree_Hooks# */\n\t{\n\t/** Default handling for mouse click events.\n\t *\n\t * @param {EventData} ctx\n\t */\n\tnodeClick: function(ctx) {\n\t\tvar activate, expand,\n\t\t\t// event = ctx.originalEvent,\n\t\t\ttargetType = ctx.targetType,\n\t\t\tnode = ctx.node;\n\n//\t this.debug(\"ftnode.onClick(\" + event.type + \"): ftnode:\" + this + \", button:\" + event.button + \", which: \" + event.which, ctx);\n\t\t// TODO: use switch\n\t\t// TODO: make sure clicks on embedded <input> doesn't steal focus (see table sample)\n\t\tif( targetType === \"expander\" ) {\n\t\t\tif( node.isLoading() ) {\n\t\t\t\t// #495: we probably got a click event while a lazy load is pending.\n\t\t\t\t// The 'expanded' state is not yet set, so 'toggle' would expand\n\t\t\t\t// and trigger lazyLoad again.\n\t\t\t\t// It would be better to allow to collapse/expand the status node\n\t\t\t\t// while loading (instead of ignoring), but that would require some\n\t\t\t\t// more work.\n\t\t\t\tnode.debug(\"Got 2nd click while loading: ignored\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Clicking the expander icon always expands/collapses\n\t\t\tthis._callHook(\"nodeToggleExpanded\", ctx);\n\n\t\t} else if( targetType === \"checkbox\" ) {\n\t\t\t// Clicking the checkbox always (de)selects\n\t\t\tthis._callHook(\"nodeToggleSelected\", ctx);\n\t\t\tif( ctx.options.focusOnSelect ) { // #358\n\t\t\t\tthis._callHook(\"nodeSetFocus\", ctx, true);\n\t\t\t}\n\n\t\t} else {\n\t\t\t// Honor `clickFolderMode` for\n\t\t\texpand = false;\n\t\t\tactivate = true;\n\t\t\tif( node.folder ) {\n\t\t\t\tswitch( ctx.options.clickFolderMode ) {\n\t\t\t\tcase 2: // expand only\n\t\t\t\t\texpand = true;\n\t\t\t\t\tactivate = false;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3: // expand and activate\n\t\t\t\t\tactivate = true;\n\t\t\t\t\texpand = true; //!node.isExpanded();\n\t\t\t\t\tbreak;\n\t\t\t\t// else 1 or 4: just activate\n\t\t\t\t}\n\t\t\t}\n\t\t\tif( activate ) {\n\t\t\t\tthis.nodeSetFocus(ctx);\n\t\t\t\tthis._callHook(\"nodeSetActive\", ctx, true);\n\t\t\t}\n\t\t\tif( expand ) {\n\t\t\t\tif(!activate){\n// this._callHook(\"nodeSetFocus\", ctx);\n\t\t\t\t}\n//\t\t\t\tthis._callHook(\"nodeSetExpanded\", ctx, true);\n\t\t\t\tthis._callHook(\"nodeToggleExpanded\", ctx);\n\t\t\t}\n\t\t}\n\t\t// Make sure that clicks stop, otherwise <a href='#'> jumps to the top\n\t\t// if(event.target.localName === \"a\" && event.target.className === \"fancytree-title\"){\n\t\t// \tevent.preventDefault();\n\t\t// }\n\t\t// TODO: return promise?\n\t},\n\t/** Collapse all other children of same parent.\n\t *\n\t * @param {EventData} ctx\n\t * @param {object} callOpts\n\t */\n\tnodeCollapseSiblings: function(ctx, callOpts) {\n\t\t// TODO: return promise?\n\t\tvar ac, i, l,\n\t\t\tnode = ctx.node;\n\n\t\tif( node.parent ){\n\t\t\tac = node.parent.children;\n\t\t\tfor (i=0, l=ac.length; i<l; i++) {\n\t\t\t\tif ( ac[i] !== node && ac[i].expanded ){\n\t\t\t\t\tthis._callHook(\"nodeSetExpanded\", ac[i], false, callOpts);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t/** Default handling for mouse douleclick events.\n\t * @param {EventData} ctx\n\t */\n\tnodeDblclick: function(ctx) {\n\t\t// TODO: return promise?\n\t\tif( ctx.targetType === \"title\" && ctx.options.clickFolderMode === 4) {\n//\t\t\tthis.nodeSetFocus(ctx);\n//\t\t\tthis._callHook(\"nodeSetActive\", ctx, true);\n\t\t\tthis._callHook(\"nodeToggleExpanded\", ctx);\n\t\t}\n\t\t// TODO: prevent text selection on dblclicks\n\t\tif( ctx.targetType === \"title\" ) {\n\t\t\tctx.originalEvent.preventDefault();\n\t\t}\n\t},\n\t/** Default handling for mouse keydown events.\n\t *\n\t * NOTE: this may be called with node == null if tree (but no node) has focus.\n\t * @param {EventData} ctx\n\t */\n\tnodeKeydown: function(ctx) {\n\t\t// TODO: return promise?\n\t\tvar matchNode, stamp, res, focusNode,\n\t\t\tevent = ctx.originalEvent,\n\t\t\tnode = ctx.node,\n\t\t\ttree = ctx.tree,\n\t\t\topts = ctx.options,\n\t\t\twhich = event.which,\n\t\t\twhichChar = String.fromCharCode(which),\n\t\t\tclean = !(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey),\n\t\t\t$target = $(event.target),\n\t\t\thandled = true,\n\t\t\tactivate = !(event.ctrlKey || !opts.autoActivate );\n\n\t\t// (node || FT).debug(\"ftnode.nodeKeydown(\" + event.type + \"): ftnode:\" + this + \", charCode:\" + event.charCode + \", keyCode: \" + event.keyCode + \", which: \" + event.which);\n\t\t// FT.debug(\"eventToString\", which, '\"' + String.fromCharCode(which) + '\"', '\"' + FT.eventToString(event) + '\"');\n\n\t\t// Set focus to active (or first node) if no other node has the focus yet\n\t\tif( !node ){\n\t\t\tfocusNode = (this.getActiveNode() || this.getFirstChild());\n\t\t\tif (focusNode){\n\t\t\t\tfocusNode.setFocus();\n\t\t\t\tnode = ctx.node = this.focusNode;\n\t\t\t\tnode.debug(\"Keydown force focus on active node\");\n\t\t\t}\n\t\t}\n\n\t\tif( opts.quicksearch && clean && /\\w/.test(whichChar) &&\n\t\t\t\t!SPECIAL_KEYCODES[which] && // #659\n\t\t\t\t!$target.is(\":input:enabled\") ) {\n\t\t\t// Allow to search for longer streaks if typed in quickly\n\t\t\tstamp = Date.now();\n\t\t\tif( stamp - tree.lastQuicksearchTime > 500 ) {\n\t\t\t\ttree.lastQuicksearchTerm = \"\";\n\t\t\t}\n\t\t\ttree.lastQuicksearchTime = stamp;\n\t\t\ttree.lastQuicksearchTerm += whichChar;\n\t\t\t// tree.debug(\"quicksearch find\", tree.lastQuicksearchTerm);\n\t\t\tmatchNode = tree.findNextNode(tree.lastQuicksearchTerm, tree.getActiveNode());\n\t\t\tif( matchNode ) {\n\t\t\t\tmatchNode.setActive();\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\t\tswitch( FT.eventToString(event) ) {\n\t\t\tcase \"+\":\n\t\t\tcase \"=\": // 187: '+' @ Chrome, Safari\n\t\t\t\ttree.nodeSetExpanded(ctx, true);\n\t\t\t\tbreak;\n\t\t\tcase \"-\":\n\t\t\t\ttree.nodeSetExpanded(ctx, false);\n\t\t\t\tbreak;\n\t\t\tcase \"space\":\n\t\t\t\tif( node.isPagingNode() ) {\n\t\t\t\t\ttree._triggerNodeEvent(\"clickPaging\", ctx, event);\n\t\t\t\t} else if( FT.evalOption(\"checkbox\", node, node, opts, false) ) { // #768\n\t\t\t\t\ttree.nodeToggleSelected(ctx);\n\t\t\t\t}else{\n\t\t\t\t\ttree.nodeSetActive(ctx, true);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"return\":\n\t\t\t\ttree.nodeSetActive(ctx, true);\n\t\t\t\tbreak;\n\t\t\tcase \"home\":\n\t\t\tcase \"end\":\n\t\t\tcase \"backspace\":\n\t\t\tcase \"left\":\n\t\t\tcase \"right\":\n\t\t\tcase \"up\":\n\t\t\tcase \"down\":\n\t\t\t\tres = node.navigate(event.which, activate);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\thandled = false;\n\t\t}\n\t\tif(handled){\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\n\t// /** Default handling for mouse keypress events. */\n\t// nodeKeypress: function(ctx) {\n\t// var event = ctx.originalEvent;\n\t// },\n\n\t// /** Trigger lazyLoad event (async). */\n\t// nodeLazyLoad: function(ctx) {\n\t// var node = ctx.node;\n\t// if(this._triggerNodeEvent())\n\t// },\n\t/** Load child nodes (async).\n\t *\n\t * @param {EventData} ctx\n\t * @param {object[]|object|string|$.Promise|function} source\n\t * @returns {$.Promise} The deferred will be resolved as soon as the (ajax)\n\t * data was rendered.\n\t */\n\tnodeLoadChildren: function(ctx, source) {\n\t\tvar ajax, delay, dfd,\n\t\t\ttree = ctx.tree,\n\t\t\tnode = ctx.node,\n\t\t\trequestId = Date.now();\n\n\t\tif($.isFunction(source)){\n\t\t\tsource = source.call(tree, {type: \"source\"}, ctx);\n\t\t\t_assert(!$.isFunction(source), \"source callback must not return another function\");\n\t\t}\n\t\tif(source.url){\n\t\t\tif( node._requestId ) {\n\t\t\t\tnode.warn(\"Recursive load request #\" + requestId + \" while #\" + node._requestId + \" is pending.\");\n\t\t\t// } else {\n\t\t\t// \tnode.debug(\"Send load request #\" + requestId);\n\t\t\t}\n\t\t\t// `source` is an Ajax options object\n\t\t\tajax = $.extend({}, ctx.options.ajax, source);\n\t\t\tnode._requestId = requestId;\n\t\t\tif(ajax.debugDelay){\n\t\t\t\t// simulate a slow server\n\t\t\t\tdelay = ajax.debugDelay;\n\t\t\t\tif($.isArray(delay)){ // random delay range [min..max]\n\t\t\t\t\tdelay = delay[0] + Math.random() * (delay[1] - delay[0]);\n\t\t\t\t}\n\t\t\t\tnode.warn(\"nodeLoadChildren waiting debugDelay \" + Math.round(delay) + \" ms ...\");\n\t\t\t\tajax.debugDelay = false;\n\t\t\t\tdfd = $.Deferred(function (dfd) {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t$.ajax(ajax)\n\t\t\t\t\t\t\t.done(function () {\tdfd.resolveWith(this, arguments); })\n\t\t\t\t\t\t\t.fail(function () {\tdfd.rejectWith(this, arguments); });\n\t\t\t\t\t}, delay);\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tdfd = $.ajax(ajax);\n\t\t\t}\n\n\t\t\t// Defer the deferred: we want to be able to reject, even if ajax\n\t\t\t// resolved ok.\n\t\t\tsource = new $.Deferred();\n\t\t\tdfd.done(function (data, textStatus, jqXHR) {\n\t\t\t\tvar errorObj, res;\n\n\t\t\t\tif((this.dataType === \"json\" || this.dataType === \"jsonp\") && typeof data === \"string\"){\n\t\t\t\t\t$.error(\"Ajax request returned a string (did you get the JSON dataType wrong?).\");\n\t\t\t\t}\n\t\t\t\tif( node._requestId && node._requestId > requestId ) {\n\t\t\t\t\t// The expected request time stamp is later than `requestId`\n\t\t\t\t\t// (which was kept as as closure variable to this handler function)\n\t\t\t\t\t// node.warn(\"Ignored load response for obsolete request #\" + requestId + \" (expected #\" + node._requestId + \")\");\n\t\t\t\t\tsource.rejectWith(this, [RECURSIVE_REQUEST_ERROR]);\n\t\t\t\t\treturn;\n\t\t\t\t// } else {\n\t\t\t\t// \tnode.debug(\"Response returned for load request #\" + requestId);\n\t\t\t\t}\n\t\t\t\t// postProcess is similar to the standard ajax dataFilter hook,\n\t\t\t\t// but it is also called for JSONP\n\t\t\t\tif( ctx.options.postProcess ){\n\t\t\t\t\ttry {\n\t\t\t\t\t\tres = tree._triggerNodeEvent(\"postProcess\", ctx, ctx.originalEvent, {\n\t\t\t\t\t\t\tresponse: data, error: null, dataType: this.dataType\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\tres = { error: e, message: \"\" + e, details: \"postProcess failed\"};\n\t\t\t\t\t}\n\t\t\t\t\tif( res.error ) {\n\t\t\t\t\t\terrorObj = $.isPlainObject(res.error) ? res.error : {message: res.error};\n\t\t\t\t\t\terrorObj = tree._makeHookContext(node, null, errorObj);\n\t\t\t\t\t\tsource.rejectWith(this, [errorObj]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tdata = $.isArray(res) ? res : data;\n\n\t\t\t\t} else if (data && data.hasOwnProperty(\"d\") && ctx.options.enableAspx ) {\n\t\t\t\t\t// Process ASPX WebMethod JSON object inside \"d\" property\n\t\t\t\t\tdata = (typeof data.d === \"string\") ? $.parseJSON(data.d) : data.d;\n\t\t\t\t}\n\t\t\t\tsource.resolveWith(this, [data]);\n\t\t\t}).fail(function (jqXHR, textStatus, errorThrown) {\n\t\t\t\tvar errorObj = tree._makeHookContext(node, null, {\n\t\t\t\t\terror: jqXHR,\n\t\t\t\t\targs: Array.prototype.slice.call(arguments),\n\t\t\t\t\tmessage: errorThrown,\n\t\t\t\t\tdetails: jqXHR.status + \": \" + errorThrown\n\t\t\t\t});\n\t\t\t\tsource.rejectWith(this, [errorObj]);\n\t\t\t});\n\t\t}\n\t\t// #383: accept and convert ECMAScript 6 Promise\n\t\tif( $.isFunction(source.then) && $.isFunction(source[\"catch\"]) ) {\n\t\t\tdfd = source;\n\t\t\tsource = new $.Deferred();\n\t\t\tdfd.then(function(value){\n\t\t\t\tsource.resolve(value);\n\t\t\t}, function(reason){\n\t\t\t\tsource.reject(reason);\n\t\t\t});\n\t\t}\n\t\tif($.isFunction(source.promise)){\n\t\t\t// `source` is a deferred, i.e. ajax request\n\t\t\t// _assert(!node.isLoading(), \"recursive load\");\n\t\t\ttree.nodeSetStatus(ctx, \"loading\");\n\n\t\t\tsource.done(function (children) {\n\t\t\t\ttree.nodeSetStatus(ctx, \"ok\");\n\t\t\t\tnode._requestId = null;\n\t\t\t}).fail(function(error){\n\t\t\t\tvar ctxErr;\n\n\t\t\t\tif ( error === RECURSIVE_REQUEST_ERROR ) {\n\t\t\t\t\tnode.warn(\"Ignored response for obsolete load request #\" + requestId + \" (expected #\" + node._requestId + \")\");\n\t\t\t\t\treturn;\n\t\t\t\t} else if (error.node && error.error && error.message) {\n\t\t\t\t\t// error is already a context object\n\t\t\t\t\tctxErr = error;\n\t\t\t\t} else {\n\t\t\t\t\tctxErr = tree._makeHookContext(node, null, {\n\t\t\t\t\t\terror: error, // it can be jqXHR or any custom error\n\t\t\t\t\t\targs: Array.prototype.slice.call(arguments),\n\t\t\t\t\t\tmessage: error ? (error.message || error.toString()) : \"\"\n\t\t\t\t\t});\n\t\t\t\t\tif( ctxErr.message === \"[object Object]\" ) {\n\t\t\t\t\t\tctxErr.message = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnode.warn(\"Load children failed (\" + ctxErr.message + \")\", ctxErr);\n\t\t\t\tif( tree._triggerNodeEvent(\"loadError\", ctxErr, null) !== false ) {\n\t\t\t\t\ttree.nodeSetStatus(ctx, \"error\", ctxErr.message, ctxErr.details);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif( ctx.options.postProcess ){\n\t\t\t\t// #792: Call postProcess for non-deferred source\n\t\t\t\tvar res = tree._triggerNodeEvent(\"postProcess\", ctx, ctx.originalEvent, {\n\t\t\t\t\tresponse: source, error: null, dataType: typeof source\n\t\t\t\t});\n\n\t\t\t\tsource = $.isArray(res) ? res : source;\n\t\t\t}\n\t\t}\n\t\t// $.when(source) resolves also for non-deferreds\n\t\treturn $.when(source).done(function(children){\n\t\t\tvar metaData;\n\n\t\t\tif( $.isPlainObject(children) ){\n\t\t\t\t// We got {foo: 'abc', children: [...]}\n\t\t\t\t// Copy extra properties to tree.data.foo\n\t\t\t\t_assert(node.isRootNode(), \"source may only be an object for root nodes (expecting an array of child objects otherwise)\");\n\t\t\t\t_assert($.isArray(children.children), \"if an object is passed as source, it must contain a 'children' array (all other properties are added to 'tree.data')\");\n\t\t\t\tmetaData = children;\n\t\t\t\tchildren = children.children;\n\t\t\t\tdelete metaData.children;\n\t\t\t\t// Copy some attributes to tree.data\n\t\t\t\t$.each(TREE_ATTRS, function(i, attr) {\n\t\t\t\t\tif( metaData[attr] !== undefined ){\n\t\t\t\t\t\ttree[attr] = metaData[attr];\n\t\t\t\t\t\tdelete metaData[attr];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// Copy all other attributes to tree.data.NAME\n\t\t\t\t$.extend(tree.data, metaData);\n\t\t\t}\n\t\t\t_assert($.isArray(children), \"expected array of children\");\n\t\t\tnode._setChildren(children);\n\t\t\t// trigger fancytreeloadchildren\n\t\t\ttree._triggerNodeEvent(\"loadChildren\", node);\n\t\t});\n\t},\n\t/** [Not Implemented] */\n\tnodeLoadKeyPath: function(ctx, keyPathList) {\n\t\t// TODO: implement and improve\n\t\t// http://code.google.com/p/dynatree/issues/detail?id=222\n\t},\n\t/**\n\t * Remove a single direct child of ctx.node.\n\t * @param {EventData} ctx\n\t * @param {FancytreeNode} childNode dircect child of ctx.node\n\t */\n\tnodeRemoveChild: function(ctx, childNode) {\n\t\tvar idx,\n\t\t\tnode = ctx.node,\n\t\t\t// opts = ctx.options,\n\t\t\tsubCtx = $.extend({}, ctx, {node: childNode}),\n\t\t\tchildren = node.children;\n\n\t\t// FT.debug(\"nodeRemoveChild()\", node.toString(), childNode.toString());\n\n\t\tif( children.length === 1 ) {\n\t\t\t_assert(childNode === children[0], \"invalid single child\");\n\t\t\treturn this.nodeRemoveChildren(ctx);\n\t\t}\n\t\tif( this.activeNode && (childNode === this.activeNode || this.activeNode.isDescendantOf(childNode))){\n\t\t\tthis.activeNode.setActive(false); // TODO: don't fire events\n\t\t}\n\t\tif( this.focusNode && (childNode === this.focusNode || this.focusNode.isDescendantOf(childNode))){\n\t\t\tthis.focusNode = null;\n\t\t}\n\t\t// TODO: persist must take care to clear select and expand cookies\n\t\tthis.nodeRemoveMarkup(subCtx);\n\t\tthis.nodeRemoveChildren(subCtx);\n\t\tidx = $.inArray(childNode, children);\n\t\t_assert(idx >= 0, \"invalid child\");\n\t\t// Notify listeners\n\t\tnode.triggerModifyChild(\"remove\", childNode);\n\t\t// Unlink to support GC\n\t\tchildNode.visit(function(n){\n\t\t\tn.parent = null;\n\t\t}, true);\n\t\tthis._callHook(\"treeRegisterNode\", this, false, childNode);\n\t\t// remove from child list\n\t\tchildren.splice(idx, 1);\n\t},\n\t/**Remove HTML markup for all descendents of ctx.node.\n\t * @param {EventData} ctx\n\t */\n\tnodeRemoveChildMarkup: function(ctx) {\n\t\tvar node = ctx.node;\n\n\t\t// FT.debug(\"nodeRemoveChildMarkup()\", node.toString());\n\t\t// TODO: Unlink attr.ftnode to support GC\n\t\tif(node.ul){\n\t\t\tif( node.isRootNode() ) {\n\t\t\t\t$(node.ul).empty();\n\t\t\t} else {\n\t\t\t\t$(node.ul).remove();\n\t\t\t\tnode.ul = null;\n\t\t\t}\n\t\t\tnode.visit(function(n){\n\t\t\t\tn.li = n.ul = null;\n\t\t\t});\n\t\t}\n\t},\n\t/**Remove all descendants of ctx.node.\n\t* @param {EventData} ctx\n\t*/\n\tnodeRemoveChildren: function(ctx) {\n\t\tvar subCtx,\n\t\t\ttree = ctx.tree,\n\t\t\tnode = ctx.node,\n\t\t\tchildren = node.children;\n\t\t\t// opts = ctx.options;\n\n\t\t// FT.debug(\"nodeRemoveChildren()\", node.toString());\n\t\tif(!children){\n\t\t\treturn;\n\t\t}\n\t\tif( this.activeNode && this.activeNode.isDescendantOf(node)){\n\t\t\tthis.activeNode.setActive(false); // TODO: don't fire events\n\t\t}\n\t\tif( this.focusNode && this.focusNode.isDescendantOf(node)){\n\t\t\tthis.focusNode = null;\n\t\t}\n\t\t// TODO: persist must take care to clear select and expand cookies\n\t\tthis.nodeRemoveChildMarkup(ctx);\n\t\t// Unlink children to support GC\n\t\t// TODO: also delete this.children (not possible using visit())\n\t\tsubCtx = $.extend({}, ctx);\n\t\tnode.triggerModifyChild(\"remove\", null);\n\t\tnode.visit(function(n){\n\t\t\tn.parent = null;\n\t\t\ttree._callHook(\"treeRegisterNode\", tree, false, n);\n\t\t});\n\t\tif( node.lazy ){\n\t\t\t// 'undefined' would be interpreted as 'not yet loaded' for lazy nodes\n\t\t\tnode.children = [];\n\t\t} else{\n\t\t\tnode.children = null;\n\t\t}\n\t\tif( !node.isRootNode() ) {\n\t\t\tnode.expanded = false; // #449, #459\n\t\t}\n\t\tthis.nodeRenderStatus(ctx);\n\t},\n\t/**Remove HTML markup for ctx.node and all its descendents.\n\t * @param {EventData} ctx\n\t */\n\tnodeRemoveMarkup: function(ctx) {\n\t\tvar node = ctx.node;\n\t\t// FT.debug(\"nodeRemoveMarkup()\", node.toString());\n\t\t// TODO: Unlink attr.ftnode to support GC\n\t\tif(node.li){\n\t\t\t$(node.li).remove();\n\t\t\tnode.li = null;\n\t\t}\n\t\tthis.nodeRemoveChildMarkup(ctx);\n\t},\n\t/**\n\t * Create `<li><span>..</span> .. </li>` tags for this node.\n\t *\n\t * This method takes care that all HTML markup is created that is required\n\t * to display this node in its current state.\n\t *\n\t * Call this method to create new nodes, or after the strucuture\n\t * was changed (e.g. after moving this node or adding/removing children)\n\t * nodeRenderTitle() and nodeRenderStatus() are implied.\n\t *\n\t * <code>\n\t * <li id='KEY' ftnode=NODE>\n\t * <span class='fancytree-node fancytree-expanded fancytree-has-children fancytree-lastsib fancytree-exp-el fancytree-ico-e'>\n\t * <span class=\"fancytree-expander\"></span>\n\t * <span class=\"fancytree-checkbox\"></span> // only present in checkbox mode\n\t * <span class=\"fancytree-icon\"></span>\n\t * <a href=\"#\" class=\"fancytree-title\"> Node 1 </a>\n\t * </span>\n\t * <ul> // only present if node has children\n\t * <li id='KEY' ftnode=NODE> child1 ... </li>\n\t * <li id='KEY' ftnode=NODE> child2 ... </li>\n\t * </ul>\n\t * </li>\n\t * </code>\n\t *\n\t * @param {EventData} ctx\n\t * @param {boolean} [force=false] re-render, even if html markup was already created\n\t * @param {boolean} [deep=false] also render all descendants, even if parent is collapsed\n\t * @param {boolean} [collapsed=false] force root node to be collapsed, so we can apply animated expand later\n\t */\n\tnodeRender: function(ctx, force, deep, collapsed, _recursive) {\n\t\t/* This method must take care of all cases where the current data mode\n\t\t * (i.e. node hierarchy) does not match the current markup.\n\t\t *\n\t\t * - node was not yet rendered:\n\t\t * create markup\n\t\t * - node was rendered: exit fast\n\t\t * - children have been added\n\t\t * - children have been removed\n\t\t */\n\t\tvar childLI, childNode1, childNode2, i, l, next, subCtx,\n\t\t\tnode = ctx.node,\n\t\t\ttree = ctx.tree,\n\t\t\topts = ctx.options,\n\t\t\taria = opts.aria,\n\t\t\tfirstTime = false,\n\t\t\tparent = node.parent,\n\t\t\tisRootNode = !parent,\n\t\t\tchildren = node.children,\n\t\t\tsuccessorLi = null;\n\t\t// FT.debug(\"nodeRender(\" + !!force + \", \" + !!deep + \")\", node.toString());\n\n\t\tif( tree._enableUpdate === false ) {\n\t\t\t// tree.debug(\"no render\", tree._enableUpdate);\n\t\t\treturn;\n\t\t}\n\t\tif( ! isRootNode && ! parent.ul ) {\n\t\t\t// Calling node.collapse on a deep, unrendered node\n\t\t\treturn;\n\t\t}\n\t\t_assert(isRootNode || parent.ul, \"parent UL must exist\");\n\n\t\t// Render the node\n\t\tif( !isRootNode ){\n\t\t\t// Discard markup on force-mode, or if it is not linked to parent <ul>\n\t\t\tif(node.li && (force || (node.li.parentNode !== node.parent.ul) ) ){\n\t\t\t\tif( node.li.parentNode === node.parent.ul ){\n\t\t\t\t\t// #486: store following node, so we can insert the new markup there later\n\t\t\t\t\tsuccessorLi = node.li.nextSibling;\n\t\t\t\t}else{\n\t\t\t\t\t// May happen, when a top-level node was dropped over another\n\t\t\t\t\tthis.debug(\"Unlinking \" + node + \" (must be child of \" + node.parent + \")\");\n\t\t\t\t}\n//\t this.debug(\"nodeRemoveMarkup...\");\n\t\t\t\tthis.nodeRemoveMarkup(ctx);\n\t\t\t}\n\t\t\t// Create <li><span /> </li>\n//\t\t\tnode.debug(\"render...\");\n\t\t\tif( !node.li ) {\n//\t node.debug(\"render... really\");\n\t\t\t\tfirstTime = true;\n\t\t\t\tnode.li = document.createElement(\"li\");\n\t\t\t\tnode.li.ftnode = node;\n\n\t\t\t\tif( node.key && opts.generateIds ){\n\t\t\t\t\tnode.li.id = opts.idPrefix + node.key;\n\t\t\t\t}\n\t\t\t\tnode.span = document.createElement(\"span\");\n\t\t\t\tnode.span.className = \"fancytree-node\";\n\t\t\t\tif( aria && !node.tr ) {\n\t\t\t\t\t$(node.li).attr(\"role\", \"treeitem\");\n\t\t\t\t}\n\t\t\t\tnode.li.appendChild(node.span);\n\n\t\t\t\t// Create inner HTML for the <span> (expander, checkbox, icon, and title)\n\t\t\t\tthis.nodeRenderTitle(ctx);\n\n\t\t\t\t// Allow tweaking and binding, after node was created for the first time\n\t\t\t\tif ( opts.createNode ){\n\t\t\t\t\topts.createNode.call(tree, {type: \"createNode\"}, ctx);\n\t\t\t\t}\n\t\t\t}else{\n//\t\t\t\tthis.nodeRenderTitle(ctx);\n\t\t\t\tthis.nodeRenderStatus(ctx);\n\t\t\t}\n\t\t\t// Allow tweaking after node state was rendered\n\t\t\tif ( opts.renderNode ){\n\t\t\t\topts.renderNode.call(tree, {type: \"renderNode\"}, ctx);\n\t\t\t}\n\t\t}\n\n\t\t// Visit child nodes\n\t\tif( children ){\n\t\t\tif( isRootNode || node.expanded || deep === true ) {\n\t\t\t\t// Create a UL to hold the children\n\t\t\t\tif( !node.ul ){\n\t\t\t\t\tnode.ul = document.createElement(\"ul\");\n\t\t\t\t\tif((collapsed === true && !_recursive) || !node.expanded){\n\t\t\t\t\t\t// hide top UL, so we can use an animation to show it later\n\t\t\t\t\t\tnode.ul.style.display = \"none\";\n\t\t\t\t\t}\n\t\t\t\t\tif(aria){\n\t\t\t\t\t\t$(node.ul).attr(\"role\", \"group\");\n\t\t\t\t\t}\n\t\t\t\t\tif ( node.li ) { // issue #67\n\t\t\t\t\t\tnode.li.appendChild(node.ul);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode.tree.$div.append(node.ul);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Add child markup\n\t\t\t\tfor(i=0, l=children.length; i<l; i++) {\n\t\t\t\t\tsubCtx = $.extend({}, ctx, {node: children[i]});\n\t\t\t\t\tthis.nodeRender(subCtx, force, deep, false, true);\n\t\t\t\t}\n\t\t\t\t// Remove <li> if nodes have moved to another parent\n\t\t\t\tchildLI = node.ul.firstChild;\n\t\t\t\twhile( childLI ){\n\t\t\t\t\tchildNode2 = childLI.ftnode;\n\t\t\t\t\tif( childNode2 && childNode2.parent !== node ) {\n\t\t\t\t\t\tnode.debug(\"_fixParent: remove missing \" + childNode2, childLI);\n\t\t\t\t\t\tnext = childLI.nextSibling;\n\t\t\t\t\t\tchildLI.parentNode.removeChild(childLI);\n\t\t\t\t\t\tchildLI = next;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tchildLI = childLI.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Make sure, that <li> order matches node.children order.\n\t\t\t\tchildLI = node.ul.firstChild;\n\t\t\t\tfor(i=0, l=children.length-1; i<l; i++) {\n\t\t\t\t\tchildNode1 = children[i];\n\t\t\t\t\tchildNode2 = childLI.ftnode;\n\t\t\t\t\tif( childNode1 !== childNode2 ) {\n\t\t\t\t\t\t// node.debug(\"_fixOrder: mismatch at index \" + i + \": \" + childNode1 + \" != \" + childNode2);\n\t\t\t\t\t\tnode.ul.insertBefore(childNode1.li, childNode2.li);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchildLI = childLI.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\t// No children: remove markup if any\n\t\t\tif( node.ul ){\n//\t\t\t\talert(\"remove child markup for \" + node);\n\t\t\t\tthis.warn(\"remove child markup for \" + node);\n\t\t\t\tthis.nodeRemoveChildMarkup(ctx);\n\t\t\t}\n\t\t}\n\t\tif( !isRootNode ){\n\t\t\t// Update element classes according to node state\n\t\t\t// this.nodeRenderStatus(ctx);\n\t\t\t// Finally add the whole structure to the DOM, so the browser can render\n\t\t\tif( firstTime ){\n\t\t\t\t// #486: successorLi is set, if we re-rendered (i.e. discarded)\n\t\t\t\t// existing markup, which we want to insert at the same position.\n\t\t\t\t// (null is equivalent to append)\n//\t\t\t\tparent.ul.appendChild(node.li);\n\t\t\t\tparent.ul.insertBefore(node.li, successorLi);\n\t\t\t}\n\t\t}\n\t},\n\t/** Create HTML inside the node's outer <span> (i.e. expander, checkbox,\n\t * icon, and title).\n\t *\n\t * nodeRenderStatus() is implied.\n\t * @param {EventData} ctx\n\t * @param {string} [title] optinal new title\n\t */\n\tnodeRenderTitle: function(ctx, title) {\n\t\t// set node connector images, links and text\n\t\tvar checkbox, className, icon, nodeTitle, role, tabindex, tooltip, iconTooltip,\n\t\t\tnode = ctx.node,\n\t\t\ttree = ctx.tree,\n\t\t\topts = ctx.options,\n\t\t\taria = opts.aria,\n\t\t\tlevel = node.getLevel(),\n\t\t\tares = [];\n\n\t\tif(title !== undefined){\n\t\t\tnode.title = title;\n\t\t}\n\t\tif ( !node.span || tree._enableUpdate === false ) {\n\t\t\t// Silently bail out if node was not rendered yet, assuming\n\t\t\t// node.render() will be called as the node becomes visible\n\t\t\treturn;\n\t\t}\n\t\t// Connector (expanded, expandable or simple)\n\t\trole = (aria && node.hasChildren() !== false) ? \" role='button'\" : \"\";\n\t\tif( level < opts.minExpandLevel ) {\n\t\t\tif( !node.lazy ) {\n\t\t\t\tnode.expanded = true;\n\t\t\t}\n\t\t\tif(level > 1){\n\t\t\t\tares.push(\"<span \" + role + \" class='fancytree-expander fancytree-expander-fixed'></span>\");\n\t\t\t}\n\t\t\t// .. else (i.e. for root level) skip expander/connector alltogether\n\t\t} else {\n\t\t\tares.push(\"<span \" + role + \" class='fancytree-expander'></span>\");\n\t\t}\n\t\t// Checkbox mode\n\t\tcheckbox = FT.evalOption(\"checkbox\", node, node, opts, false);\n\n\t\tif( checkbox && !node.isStatusNode() ) {\n\t\t\trole = aria ? \" role='checkbox'\" : \"\";\n\t\t\tclassName = \"fancytree-checkbox\";\n\t\t\tif( checkbox === \"radio\" || (node.parent && node.parent.radiogroup) ) {\n\t\t\t\tclassName += \" fancytree-radio\";\n\t\t\t}\n\t\t\tares.push(\"<span \" + role + \" class='\" + className + \"'></span>\");\n\t\t}\n\t\t// Folder or doctype icon\n\t\tif( node.data.iconClass !== undefined ) { // 2015-11-16\n\t\t\t// Handle / warn about backward compatibility\n\t\t\tif( node.icon ) {\n\t\t\t\t$.error(\"'iconClass' node option is deprecated since v2.14.0: use 'icon' only instead\");\n\t\t\t} else {\n\t\t\t\tnode.warn(\"'iconClass' node option is deprecated since v2.14.0: use 'icon' instead\");\n\t\t\t\tnode.icon = node.data.iconClass;\n\t\t\t}\n\t\t}\n\t\t// If opts.icon is a callback and returns something other than undefined, use that\n\t\t// else if node.icon is a boolean or string, use that\n\t\t// else if opts.icon is a boolean or string, use that\n\t\t// else show standard icon (which may be different for folders or documents)\n\t\ticon = FT.evalOption(\"icon\", node, node, opts, true);\n\t\t// if( typeof icon !== \"boolean\" ) {\n\t\t// \t// icon is defined, but not true/false: must be a string\n\t\t// \ticon = \"\" + icon;\n\t\t// }\n\t\tif( icon !== false ) {\n\t\t\trole = aria ? \" role='presentation'\" : \"\";\n\n\t\t\ticonTooltip = FT.evalOption(\"iconTooltip\", node, node, opts, null);\n\t\t\ticonTooltip = iconTooltip ? \" title='\" + _escapeTooltip(iconTooltip) + \"'\" : \"\";\n\n\t\t\tif ( typeof icon === \"string\" ) {\n\t\t\t\tif( TEST_IMG.test(icon) ) {\n\t\t\t\t\t// node.icon is an image url. Prepend imagePath\n\t\t\t\t\ticon = (icon.charAt(0) === \"/\") ? icon : ((opts.imagePath || \"\") + icon);\n\t\t\t\t\tares.push(\"<img src='\" + icon + \"' class='fancytree-icon'\" + iconTooltip + \" alt='' />\");\n\t\t\t\t} else {\n\t\t\t\t\tares.push(\"<span \" + role + \" class='fancytree-custom-icon \" + icon + \"'\" + iconTooltip + \"></span>\");\n\t\t\t\t}\n\t\t\t} else if ( icon.text ) {\n\t\t\t\tares.push(\"<span \" + role + \" class='fancytree-custom-icon \" +\n\t\t\t\t\t(icon.addClass || \"\") + \"'\" + iconTooltip + \">\" + FT.escapeHtml(icon.text) + \"</span>\");\n\t\t\t} else if ( icon.html ) {\n\t\t\t\tares.push(\"<span \" + role + \" class='fancytree-custom-icon \" +\n\t\t\t\t\t(icon.addClass || \"\") + \"'\" + iconTooltip + \">\" + icon.html + \"</span>\");\n\t\t\t} else {\n\t\t\t\t// standard icon: theme css will take care of this\n\t\t\t\tares.push(\"<span \" + role + \" class='fancytree-icon'\" + iconTooltip + \"></span>\");\n\t\t\t}\n\t\t}\n\t\t// Node title\n\t\tnodeTitle = \"\";\n\t\tif ( opts.renderTitle ){\n\t\t\tnodeTitle = opts.renderTitle.call(tree, {type: \"renderTitle\"}, ctx) || \"\";\n\t\t}\n\t\tif ( !nodeTitle ) {\n\t\t\ttooltip = FT.evalOption(\"tooltip\", node, node, opts, null);\n\t\t\tif( tooltip === true ) {\n\t\t\t\ttooltip = node.title;\n\t\t\t}\n\t\t\t// if( node.tooltip ) {\n\t\t\t// \ttooltip = node.tooltip;\n\t\t\t// } else if ( opts.tooltip ) {\n\t\t\t// \ttooltip = opts.tooltip === true ? node.title : opts.tooltip.call(tree, node);\n\t\t\t// }\n\t\t\ttooltip = tooltip ? \" title='\" + _escapeTooltip(tooltip) + \"'\" : \"\";\n\t\t\ttabindex = opts.titlesTabbable ? \" tabindex='0'\" : \"\";\n\n\t\t\tnodeTitle = \"<span class='fancytree-title'\" +\n\t\t\t\ttooltip + tabindex + \">\" +\n\t\t\t\t(opts.escapeTitles ? FT.escapeHtml(node.title) : node.title) +\n\t\t\t\t\"</span>\";\n\t\t}\n\t\tares.push(nodeTitle);\n\t\t// Note: this will trigger focusout, if node had the focus\n\t\t//$(node.span).html(ares.join(\"\")); // it will cleanup the jQuery data currently associated with SPAN (if any), but it executes more slowly\n\t\tnode.span.innerHTML = ares.join(\"\");\n\t\t// Update CSS classes\n\t\tthis.nodeRenderStatus(ctx);\n\t\tif ( opts.enhanceTitle ){\n\t\t\tctx.$title = $(\">span.fancytree-title\", node.span);\n\t\t\tnodeTitle = opts.enhanceTitle.call(tree, {type: \"enhanceTitle\"}, ctx) || \"\";\n\t\t}\n\t},\n\t/** Update element classes according to node state.\n\t * @param {EventData} ctx\n\t */\n\tnodeRenderStatus: function(ctx) {\n\t\t// Set classes for current status\n\t\tvar $ariaElem,\n\t\t\tnode = ctx.node,\n\t\t\ttree = ctx.tree,\n\t\t\topts = ctx.options,\n//\t\t\tnodeContainer = node[tree.nodeContainerAttrName],\n\t\t\thasChildren = node.hasChildren(),\n\t\t\tisLastSib = node.isLastSibling(),\n\t\t\taria = opts.aria,\n\t\t\tcn = opts._classNames,\n\t\t\tcnList = [],\n\t\t\tstatusElem = node[tree.statusClassPropName];\n\n\t\tif( !statusElem || tree._enableUpdate === false ){\n\t\t\t// if this function is called for an unrendered node, ignore it (will be updated on nect render anyway)\n\t\t\treturn;\n\t\t}\n\t\tif( aria ) {\n\t\t\t$ariaElem = $(node.tr || node.li);\n\t\t}\n\t\t// Build a list of class names that we will add to the node <span>\n\t\tcnList.push(cn.node);\n\t\tif( tree.activeNode === node ){\n\t\t\tcnList.push(cn.active);\n//\t\t\t$(\">span.fancytree-title\", statusElem).attr(\"tabindex\", \"0\");\n//\t\t\ttree.$container.removeAttr(\"tabindex\");\n\t\t// }else{\n//\t\t\t$(\">span.fancytree-title\", statusElem).removeAttr(\"tabindex\");\n//\t\t\ttree.$container.attr(\"tabindex\", \"0\");\n\t\t}\n\t\tif( tree.focusNode === node ){\n\t\t\tcnList.push(cn.focused);\n\t\t}\n\t\tif( node.expanded ){\n\t\t\tcnList.push(cn.expanded);\n\t\t}\n\t\tif( aria ){\n\t\t\tif (hasChildren !== false) {\n\t\t\t\t$ariaElem.attr(\"aria-expanded\", Boolean(node.expanded));\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$ariaElem.removeAttr(\"aria-expanded\");\n\t\t\t}\n\t\t}\n\t\tif( node.folder ){\n\t\t\tcnList.push(cn.folder);\n\t\t}\n\t\tif( hasChildren !== false ){\n\t\t\tcnList.push(cn.hasChildren);\n\t\t}\n\t\t// TODO: required?\n\t\tif( isLastSib ){\n\t\t\tcnList.push(cn.lastsib);\n\t\t}\n\t\tif( node.lazy && node.children == null ){\n\t\t\tcnList.push(cn.lazy);\n\t\t}\n\t\tif( node.partload ){\n\t\t\tcnList.push(cn.partload);\n\t\t}\n\t\tif( node.partsel ){\n\t\t\tcnList.push(cn.partsel);\n\t\t}\n\t\tif( FT.evalOption(\"unselectable\", node, node, opts, false) ){\n\t\t\tcnList.push(cn.unselectable);\n\t\t}\n\t\tif( node._isLoading ){\n\t\t\tcnList.push(cn.loading);\n\t\t}\n\t\tif( node._error ){\n\t\t\tcnList.push(cn.error);\n\t\t}\n\t\tif( node.statusNodeType ) {\n\t\t\tcnList.push(cn.statusNodePrefix + node.statusNodeType);\n\t\t}\n\t\tif( node.selected ){\n\t\t\tcnList.push(cn.selected);\n\t\t\tif(aria){\n\t\t\t\t$ariaElem.attr(\"aria-selected\", true);\n\t\t\t}\n\t\t}else if(aria){\n\t\t\t$ariaElem.attr(\"aria-selected\", false);\n\t\t}\n\t\tif( node.extraClasses ){\n\t\t\tcnList.push(node.extraClasses);\n\t\t}\n\t\t// IE6 doesn't correctly evaluate multiple class names,\n\t\t// so we create combined class names that can be used in the CSS\n\t\tif( hasChildren === false ){\n\t\t\tcnList.push(cn.combinedExpanderPrefix + \"n\" +\n\t\t\t\t\t(isLastSib ? \"l\" : \"\")\n\t\t\t\t\t);\n\t\t}else{\n\t\t\tcnList.push(cn.combinedExpanderPrefix +\n\t\t\t\t\t(node.expanded ? \"e\" : \"c\") +\n\t\t\t\t\t(node.lazy && node.children == null ? \"d\" : \"\") +\n\t\t\t\t\t(isLastSib ? \"l\" : \"\")\n\t\t\t\t\t);\n\t\t}\n\t\tcnList.push(cn.combinedIconPrefix +\n\t\t\t\t(node.expanded ? \"e\" : \"c\") +\n\t\t\t\t(node.folder ? \"f\" : \"\")\n\t\t\t\t);\n// node.span.className = cnList.join(\" \");\n\t\tstatusElem.className = cnList.join(\" \");\n\n\t\t// TODO: we should not set this in the <span> tag also, if we set it here:\n\t\t// Maybe most (all) of the classes should be set in LI instead of SPAN?\n\t\tif(node.li){\n\t\t\t// #719: we have to consider that there may be already other classes:\n\t\t\t$(node.li).toggleClass(cn.lastsib, isLastSib);\n\t\t}\n\t},\n\t/** Activate node.\n\t * flag defaults to true.\n\t * If flag is true, the node is activated (must be a synchronous operation)\n\t * If flag is false, the node is deactivated (must be a synchronous operation)\n\t * @param {EventData} ctx\n\t * @param {boolean} [flag=true]\n\t * @param {object} [opts] additional options. Defaults to {noEvents: false, noFocus: false}\n\t * @returns {$.Promise}\n\t */\n\tnodeSetActive: function(ctx, flag, callOpts) {\n\t\t// Handle user click / [space] / [enter], according to clickFolderMode.\n\t\tcallOpts = callOpts || {};\n\t\tvar subCtx,\n\t\t\tnode = ctx.node,\n\t\t\ttree = ctx.tree,\n\t\t\topts = ctx.options,\n\t\t\tnoEvents = (callOpts.noEvents === true),\n\t\t\tnoFocus = (callOpts.noFocus === true),\n\t\t\tisActive = (node === tree.activeNode);\n\n\t\t// flag defaults to true\n\t\tflag = (flag !== false);\n\t\t// node.debug(\"nodeSetActive\", flag);\n\n\t\tif(isActive === flag){\n\t\t\t// Nothing to do\n\t\t\treturn _getResolvedPromise(node);\n\t\t}else if(flag && !noEvents && this._triggerNodeEvent(\"beforeActivate\", node, ctx.originalEvent) === false ){\n\t\t\t// Callback returned false\n\t\t\treturn _getRejectedPromise(node, [\"rejected\"]);\n\t\t}\n\t\tif(flag){\n\t\t\tif(tree.activeNode){\n\t\t\t\t_assert(tree.activeNode !== node, \"node was active (inconsistency)\");\n\t\t\t\tsubCtx = $.extend({}, ctx, {node: tree.activeNode});\n\t\t\t\ttree.nodeSetActive(subCtx, false);\n\t\t\t\t_assert(tree.activeNode === null, \"deactivate was out of sync?\");\n\t\t\t}\n\t\t\tif(opts.activeVisible){\n\t\t\t\t// If no focus is set (noFocus: true) and there is no focused node, this node is made visible.\n\t\t\t\tnode.makeVisible({scrollIntoView: noFocus && tree.focusNode == null});\n\t\t\t}\n\t\t\ttree.activeNode = node;\n\t\t\ttree.nodeRenderStatus(ctx);\n\t\t\tif( !noFocus ) {\n\t\t\t\ttree.nodeSetFocus(ctx);\n\t\t\t}\n\t\t\tif( !noEvents ) {\n\t\t\t\ttree._triggerNodeEvent(\"activate\", node, ctx.originalEvent);\n\t\t\t}\n\t\t}else{\n\t\t\t_assert(tree.activeNode === node, \"node was not active (inconsistency)\");\n\t\t\ttree.activeNode = null;\n\t\t\tthis.nodeRenderStatus(ctx);\n\t\t\tif( !noEvents ) {\n\t\t\t\tctx.tree._triggerNodeEvent(\"deactivate\", node, ctx.originalEvent);\n\t\t\t}\n\t\t}\n\t\treturn _getResolvedPromise(node);\n\t},\n\t/** Expand or collapse node, return Deferred.promise.\n\t *\n\t * @param {EventData} ctx\n\t * @param {boolean} [flag=true]\n\t * @param {object} [opts] additional options. Defaults to {noAnimation: false, noEvents: false}\n\t * @returns {$.Promise} The deferred will be resolved as soon as the (lazy)\n\t * data was retrieved, rendered, and the expand animation finshed.\n\t */\n\tnodeSetExpanded: function(ctx, flag, callOpts) {\n\t\tcallOpts = callOpts || {};\n\t\tvar _afterLoad, dfd, i, l, parents, prevAC,\n\t\t\tnode = ctx.node,\n\t\t\ttree = ctx.tree,\n\t\t\topts = ctx.options,\n\t\t\tnoAnimation = (callOpts.noAnimation === true),\n\t\t\tnoEvents = (callOpts.noEvents === true);\n\n\t\t// flag defaults to true\n\t\tflag = (flag !== false);\n\n\t\t// node.debug(\"nodeSetExpanded(\" + flag + \")\");\n\n\t\tif((node.expanded && flag) || (!node.expanded && !flag)){\n\t\t\t// Nothing to do\n\t\t\t// node.debug(\"nodeSetExpanded(\" + flag + \"): nothing to do\");\n\t\t\treturn _getResolvedPromise(node);\n\t\t}else if(flag && !node.lazy && !node.hasChildren() ){\n\t\t\t// Prevent expanding of empty nodes\n\t\t\t// return _getRejectedPromise(node, [\"empty\"]);\n\t\t\treturn _getResolvedPromise(node);\n\t\t}else if( !flag && node.getLevel() < opts.minExpandLevel ) {\n\t\t\t// Prevent collapsing locked levels\n\t\t\treturn _getRejectedPromise(node, [\"locked\"]);\n\t\t}else if ( !noEvents && this._triggerNodeEvent(\"beforeExpand\", node, ctx.originalEvent) === false ){\n\t\t\t// Callback returned false\n\t\t\treturn _getRejectedPromise(node, [\"rejected\"]);\n\t\t}\n\t\t// If this node inside a collpased node, no animation and scrolling is needed\n\t\tif( !noAnimation && !node.isVisible() ) {\n\t\t\tnoAnimation = callOpts.noAnimation = true;\n\t\t}\n\n\t\tdfd = new $.Deferred();\n\n\t\t// Auto-collapse mode: collapse all siblings\n\t\tif( flag && !node.expanded && opts.autoCollapse ) {\n\t\t\tparents = node.getParentList(false, true);\n\t\t\tprevAC = opts.autoCollapse;\n\t\t\ttry{\n\t\t\t\topts.autoCollapse = false;\n\t\t\t\tfor(i=0, l=parents.length; i<l; i++){\n\t\t\t\t\t// TODO: should return promise?\n\t\t\t\t\tthis._callHook(\"nodeCollapseSiblings\", parents[i], callOpts);\n\t\t\t\t}\n\t\t\t}finally{\n\t\t\t\topts.autoCollapse = prevAC;\n\t\t\t}\n\t\t}\n\t\t// Trigger expand/collapse after expanding\n\t\tdfd.done(function(){\n\t\t\tvar\tlastChild = node.getLastChild();\n\n\t\t\tif( flag && opts.autoScroll && !noAnimation && lastChild ) {\n\t\t\t\t// Scroll down to last child, but keep current node visible\n\t\t\t\tlastChild.scrollIntoView(true, {topNode: node}).always(function(){\n\t\t\t\t\tif( !noEvents ) {\n\t\t\t\t\t\tctx.tree._triggerNodeEvent(flag ? \"expand\" : \"collapse\", ctx);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif( !noEvents ) {\n\t\t\t\t\tctx.tree._triggerNodeEvent(flag ? \"expand\" : \"collapse\", ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t// vvv Code below is executed after loading finished:\n\t\t_afterLoad = function(callback){\n\t\t\tvar cn = opts._classNames,\n\t\t\t\tisVisible, isExpanded,\n\t\t\t\teffect = opts.toggleEffect;\n\n\t\t\tnode.expanded = flag;\n\t\t\t// Create required markup, but make sure the top UL is hidden, so we\n\t\t\t// can animate later\n\t\t\ttree._callHook(\"nodeRender\", ctx, false, false, true);\n\n\t\t\t// Hide children, if node is collapsed\n\t\t\tif( node.ul ) {\n\t\t\t\tisVisible = (node.ul.style.display !== \"none\");\n\t\t\t\tisExpanded = !!node.expanded;\n\t\t\t\tif ( isVisible === isExpanded ) {\n\t\t\t\t\tnode.warn(\"nodeSetExpanded: UL.style.display already set\");\n\n\t\t\t\t} else if ( !effect || noAnimation ) {\n\t\t\t\t\tnode.ul.style.display = ( node.expanded || !parent ) ? \"\" : \"none\";\n\n\t\t\t\t} else {\n\t\t\t\t\t// The UI toggle() effect works with the ext-wide extension,\n\t\t\t\t\t// while jQuery.animate() has problems when the title span\n\t\t\t\t\t// has position: absolute.\n\t\t\t\t\t// Since jQuery UI 1.12, the blind effect requires the parent\n\t\t\t\t\t// element to have 'position: relative'.\n\t\t\t\t\t// See #716, #717\n\t\t\t\t\t$(node.li).addClass(cn.animating); // #717\n\n\t\t\t\t\tif (!$.isFunction($(node.ul)[effect.effect]) ) {\n\t\t\t\t\t\t// The UI toggle() effect works with the ext-wide extension,\n\t\t\t\t\t\t// while jQuery.animate() has problems when the title span\n\t\t\t\t\t\t// has positon: absolute.\n\t\t\t\t\t\t// Since jQuery UI 1.12, the blind effect requires the parent\n\t\t\t\t\t\t// element to have 'position: relative'.\n\t\t\t\t\t\t// See #716, #717\n\t\t\t\t\t\ttree.debug(\"use specified effect (\" + effect.effect + \") with the jqueryui.toggle method\");\n\n\t\t\t\t\t\t// try to stop an animation that might be already in progress\n\t\t\t\t\t\t$(node.ul).stop(true, true); //< does not work after resetLazy has been called for a node whose animation wasn't complete and effect was \"blind\"\n\n\t\t\t\t\t\t// dirty fix to remove a defunct animation (effect: \"blind\") after resetLazy has been called\n\t\t\t\t\t\t$(node.ul).parent().find(\".ui-effects-placeholder\").remove();\n\n\t\t\t\t\t\t$(node.ul).toggle(effect.effect, effect.options, effect.duration, function() {\n\t\t\t\t\t\t\tnode.info(\"fancytree-animating end: \" + node.li.className);\n\t\t\t\t\t\t\t$(this).removeClass(cn.animating); // #716\n\t\t\t\t\t\t\t$(node.li).removeClass(cn.animating); // #717\n\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttree.debug(\"use jquery.\" + effect.effect + \" method\");\n\n\t\t\t\t\t\t$(node.ul)[effect.effect]({\n\t\t\t\t\t\t\tduration: effect.duration,\n\t\t\t\t\t\t\talways: function() {\n\t\t\t\t\t\t\t\t\t\tnode.info(\"fancytree-animating end: \" + node.li.className);\n\t\t\t\t\t\t\t\t\t\t$(this).removeClass(cn.animating); // #716\n\t\t\t\t\t\t\t\t\t\t$(node.li).removeClass(cn.animating); // #717\n\t\t\t\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcallback();\n\t\t};\n\t\t// ^^^ Code above is executed after loading finshed.\n\n\t\t// Load lazy nodes, if any. Then continue with _afterLoad()\n\t\tif(flag && node.lazy && node.hasChildren() === undefined){\n\t\t\t// node.debug(\"nodeSetExpanded: load start...\");\n\t\t\tnode.load().done(function(){\n\t\t\t\t// node.debug(\"nodeSetExpanded: load done\");\n\t\t\t\tif(dfd.notifyWith){ // requires jQuery 1.6+\n\t\t\t\t\tdfd.notifyWith(node, [\"loaded\"]);\n\t\t\t\t}\n\t\t\t\t_afterLoad(function () { dfd.resolveWith(node); });\n\t\t\t}).fail(function(errMsg){\n\t\t\t\t_afterLoad(function () { dfd.rejectWith(node, [\"load failed (\" + errMsg + \")\"]); });\n\t\t\t});\n/*\n\t\t\tvar source = tree._triggerNodeEvent(\"lazyLoad\", node, ctx.originalEvent);\n\t\t\t_assert(typeof source !== \"boolean\", \"lazyLoad event must return source in data.result\");\n\t\t\tnode.debug(\"nodeSetExpanded: load start...\");\n\t\t\tthis._callHook(\"nodeLoadChildren\", ctx, source).done(function(){\n\t\t\t\tnode.debug(\"nodeSetExpanded: load done\");\n\t\t\t\tif(dfd.notifyWith){ // requires jQuery 1.6+\n\t\t\t\t\tdfd.notifyWith(node, [\"loaded\"]);\n\t\t\t\t}\n\t\t\t\t_afterLoad.call(tree);\n\t\t\t}).fail(function(errMsg){\n\t\t\t\tdfd.rejectWith(node, [\"load failed (\" + errMsg + \")\"]);\n\t\t\t});\n*/\n\t\t}else{\n\t\t\t_afterLoad(function () { dfd.resolveWith(node); });\n\t\t}\n\t\t// node.debug(\"nodeSetExpanded: returns\");\n\t\treturn dfd.promise();\n\t},\n\t/** Focus or blur this node.\n\t * @param {EventData} ctx\n\t * @param {boolean} [flag=true]\n\t */\n\tnodeSetFocus: function(ctx, flag) {\n\t\t// ctx.node.debug(\"nodeSetFocus(\" + flag + \")\");\n\t\tvar ctx2,\n\t\t\ttree = ctx.tree,\n\t\t\tnode = ctx.node,\n\t\t\topts = tree.options,\n\t\t\t// et = ctx.originalEvent && ctx.originalEvent.type,\n\t\t\tisInput = ctx.originalEvent ? $(ctx.originalEvent.target).is(\":input\") : false;\n\n\t\tflag = (flag !== false);\n\n\t\t// (node || tree).debug(\"nodeSetFocus(\" + flag + \"), event: \" + et + \", isInput: \"+ isInput);\n\t\t// Blur previous node if any\n\t\tif(tree.focusNode){\n\t\t\tif(tree.focusNode === node && flag){\n\t\t\t\t// node.debug(\"nodeSetFocus(\" + flag + \"): nothing to do\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tctx2 = $.extend({}, ctx, {node: tree.focusNode});\n\t\t\ttree.focusNode = null;\n\t\t\tthis._triggerNodeEvent(\"blur\", ctx2);\n\t\t\tthis._callHook(\"nodeRenderStatus\", ctx2);\n\t\t}\n\t\t// Set focus to container and node\n\t\tif(flag){\n\t\t\tif( !this.hasFocus() ){\n\t\t\t\tnode.debug(\"nodeSetFocus: forcing container focus\");\n\t\t\t\tthis._callHook(\"treeSetFocus\", ctx, true, {calledByNode: true});\n\t\t\t}\n\t\t\tnode.makeVisible({scrollIntoView: false});\n\t\t\ttree.focusNode = node;\n\t\t\tif( opts.titlesTabbable ) {\n\t\t\t\tif( !isInput ) { // #621\n\t\t\t\t\t$(node.span).find(\".fancytree-title\").focus();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We cannot set KB focus to a node, so use the tree container\n\t\t\t\t// #563, #570: IE scrolls on every call to .focus(), if the container\n\t\t\t\t// is partially outside the viewport. So do it only, when absolutely\n\t\t\t\t// neccessary:\n\t\t\t\tif( $(document.activeElement).closest(\".fancytree-container\").length === 0 ) {\n\t\t\t\t\t$(tree.$container).focus();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif( opts.aria ){\n\t\t\t\t// Set active descendant to node's span ID (create one, if needed)\n\t\t\t\t$(tree.$container).attr(\"aria-activedescendant\",\n\t\t\t\t\t$( node.tr || node.li ).uniqueId().attr(\"id\"));\n\t\t\t\t\t// \"ftal_\" + opts.idPrefix + node.key);\n\t\t\t}\n//\t\t\t$(node.span).find(\".fancytree-title\").focus();\n\t\t\tthis._triggerNodeEvent(\"focus\", ctx);\n// if( opts.autoActivate ){\n// tree.nodeSetActive(ctx, true);\n// }\n\t\t\tif( opts.autoScroll ){\n\t\t\t\tnode.scrollIntoView();\n\t\t\t}\n\t\t\tthis._callHook(\"nodeRenderStatus\", ctx);\n\t\t}\n\t},\n\t/** (De)Select node, return new status (sync).\n\t *\n\t * @param {EventData} ctx\n\t * @param {boolean} [flag=true]\n\t * @param {object} [opts] additional options. Defaults to {noEvents: false,\n\t * propagateDown: null, propagateUp: null,\n\t * callback: null,\n\t * }\n\t * @returns {boolean} previous status\n\t */\n\tnodeSetSelected: function(ctx, flag, callOpts) {\n\t\tcallOpts = callOpts || {};\n\t\tvar node = ctx.node,\n\t\t\ttree = ctx.tree,\n\t\t\topts = ctx.options,\n\t\t\tnoEvents = (callOpts.noEvents === true),\n\t\t\tparent = node.parent;\n\n\t\t// flag defaults to true\n\t\tflag = (flag !== false);\n\n\t\t// node.debug(\"nodeSetSelected(\" + flag + \")\", ctx);\n\n\t\t// Cannot (de)select unselectable nodes directly (only by propagation or\n\t\t// by setting the `.selected` property)\n\t\tif( FT.evalOption(\"unselectable\", node, node, opts, false) ){\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember the user's intent, in case down -> up propagation prevents\n\t\t// applying it to node.selected\n\t\tnode._lastSelectIntent = flag;\n\n\t\t// Nothing to do?\n\t\t/*jshint -W018 */ // Confusing use of '!'\n\t\tif( !!node.selected === flag ){\n\t\t\tif( opts.selectMode === 3 && node.partsel && !flag ){\n\t\t\t\t// If propagation prevented selecting this node last time, we still\n\t\t\t\t// want to allow to apply setSelected(false) now\n\t\t\t}else{\n\t\t\t\treturn flag;\n\t\t\t}\n\t\t}\n\t\t/*jshint +W018 */\n\n\t\tif( !noEvents &&\n\t\t\tthis._triggerNodeEvent(\"beforeSelect\", node, ctx.originalEvent) === false ) {\n\t\t\t\treturn !!node.selected;\n\t\t}\n\t\tif(flag && opts.selectMode === 1){\n\t\t\t// single selection mode (we don't uncheck all tree nodes, for performance reasons)\n\t\t\tif(tree.lastSelectedNode){\n\t\t\t\ttree.lastSelectedNode.setSelected(false);\n\t\t\t}\n\t\t\tnode.selected = flag;\n\t\t}else if(opts.selectMode === 3 && parent && !parent.radiogroup && !node.radiogroup){\n\t\t\t// multi-hierarchical selection mode\n\t\t\tnode.selected = flag;\n\t\t\tnode.fixSelection3AfterClick(callOpts);\n\t\t}else if(parent && parent.radiogroup){\n\t\t\tnode.visitSiblings(function(n){\n\t\t\t\tn._changeSelectStatusAttrs(flag && n === node);\n\t\t\t}, true);\n\t\t}else{\n\t\t\t// default: selectMode: 2, multi selection mode\n\t\t\tnode.selected = flag;\n\t\t}\n\t\tthis.nodeRenderStatus(ctx);\n\t\ttree.lastSelectedNode = flag ? node : null;\n\t\tif( !noEvents ) {\n\t\t\ttree._triggerNodeEvent(\"select\", ctx);\n\t\t}\n\t},\n\t/** Show node status (ok, loading, error, nodata) using styles and a dummy child node.\n\t *\n\t * @param {EventData} ctx\n\t * @param status\n\t * @param message\n\t * @param details\n\t * @since 2.3\n\t */\n\tnodeSetStatus: function(ctx, status, message, details) {\n\t\tvar node = ctx.node,\n\t\t\ttree = ctx.tree;\n\n\t\tfunction _clearStatusNode() {\n\t\t\t// Remove dedicated dummy node, if any\n\t\t\tvar firstChild = ( node.children ? node.children[0] : null );\n\t\t\tif ( firstChild && firstChild.isStatusNode() ) {\n\t\t\t\ttry{\n\t\t\t\t\t// I've seen exceptions here with loadKeyPath...\n\t\t\t\t\tif(node.ul){\n\t\t\t\t\t\tnode.ul.removeChild(firstChild.li);\n\t\t\t\t\t\tfirstChild.li = null; // avoid leaks (DT issue 215)\n\t\t\t\t\t}\n\t\t\t\t}catch(e){}\n\t\t\t\tif( node.children.length === 1 ){\n\t\t\t\t\tnode.children = [];\n\t\t\t\t}else{\n\t\t\t\t\tnode.children.shift();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfunction _setStatusNode(data, type) {\n\t\t\t// Create/modify the dedicated dummy node for 'loading...' or\n\t\t\t// 'error!' status. (only called for direct child of the invisible\n\t\t\t// system root)\n\t\t\tvar firstChild = ( node.children ? node.children[0] : null );\n\t\t\tif ( firstChild && firstChild.isStatusNode() ) {\n\t\t\t\t$.extend(firstChild, data);\n\t\t\t\tfirstChild.statusNodeType = type;\n\t\t\t\ttree._callHook(\"nodeRenderTitle\", firstChild);\n\t\t\t} else {\n\t\t\t\tnode._setChildren([data]);\n\t\t\t\tnode.children[0].statusNodeType = type;\n\t\t\t\ttree.render();\n\t\t\t}\n\t\t\treturn node.children[0];\n\t\t}\n\n\t\tswitch( status ){\n\t\tcase \"ok\":\n\t\t\t_clearStatusNode();\n\t\t\tnode._isLoading = false;\n\t\t\tnode._error = null;\n\t\t\tnode.renderStatus();\n\t\t\tbreak;\n\t\tcase \"loading\":\n\t\t\tif( !node.parent ) {\n\t\t\t\t_setStatusNode({\n\t\t\t\t\ttitle: tree.options.strings.loading + (message ? \" (\" + message + \")\" : \"\"),\n\t\t\t\t\t// icon: true, // needed for 'loding' icon\n\t\t\t\t\tcheckbox: false,\n\t\t\t\t\ttooltip: details\n\t\t\t\t}, status);\n\t\t\t}\n\t\t\tnode._isLoading = true;\n\t\t\tnode._error = null;\n\t\t\tnode.renderStatus();\n\t\t\tbreak;\n\t\tcase \"error\":\n\t\t\t_setStatusNode({\n\t\t\t\ttitle: tree.options.strings.loadError + (message ? \" (\" + message + \")\" : \"\"),\n\t\t\t\t// icon: false,\n\t\t\t\tcheckbox: false,\n\t\t\t\ttooltip: details\n\t\t\t}, status);\n\t\t\tnode._isLoading = false;\n\t\t\tnode._error = { message: message, details: details };\n\t\t\tnode.renderStatus();\n\t\t\tbreak;\n\t\tcase \"nodata\":\n\t\t\t_setStatusNode({\n\t\t\t\ttitle: tree.options.strings.noData,\n\t\t\t\t// icon: false,\n\t\t\t\tcheckbox: false,\n\t\t\t\ttooltip: details\n\t\t\t}, status);\n\t\t\tnode._isLoading = false;\n\t\t\tnode._error = null;\n\t\t\tnode.renderStatus();\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t$.error(\"invalid node status \" + status);\n\t\t}\n\t},\n\t/**\n\t *\n\t * @param {EventData} ctx\n\t */\n\tnodeToggleExpanded: function(ctx) {\n\t\treturn this.nodeSetExpanded(ctx, !ctx.node.expanded);\n\t},\n\t/**\n\t * @param {EventData} ctx\n\t */\n\tnodeToggleSelected: function(ctx) {\n\t\tvar node = ctx.node,\n\t\t\tflag = !node.selected;\n\n\t\t// In selectMode: 3 this node may be unselected+partsel, even if\n\t\t// setSelected(true) was called before, due to `unselectable` children.\n\t\t// In this case, we now toggle as `setSelected(false)`\n\t\tif( node.partsel && !node.selected && node._lastSelectIntent === true ) {\n\t\t\tflag = false;\n\t\t\tnode.selected = true; // so it is not considered 'nothing to do'\n\t\t}\n\t\tnode._lastSelectIntent = flag;\n\t\treturn this.nodeSetSelected(ctx, flag);\n\t},\n\t/** Remove all nodes.\n\t * @param {EventData} ctx\n\t */\n\ttreeClear: function(ctx) {\n\t\tvar tree = ctx.tree;\n\t\ttree.activeNode = null;\n\t\ttree.focusNode = null;\n\t\ttree.$div.find(\">ul.fancytree-container\").empty();\n\t\t// TODO: call destructors and remove reference loops\n\t\ttree.rootNode.children = null;\n\t},\n\t/** Widget was created (called only once, even it re-initialized).\n\t * @param {EventData} ctx\n\t */\n\ttreeCreate: function(ctx) {\n\t},\n\t/** Widget was destroyed.\n\t * @param {EventData} ctx\n\t */\n\ttreeDestroy: function(ctx) {\n\t\tthis.$div.find(\">ul.fancytree-container\").remove();\n\t\tthis.$source && this.$source.removeClass(\"fancytree-helper-hidden\");\n\t},\n\t/** Widget was (re-)initialized.\n\t * @param {EventData} ctx\n\t */\n\ttreeInit: function(ctx) {\n\t\tvar tree = ctx.tree,\n\t\t\topts = tree.options;\n\n\t\t//this.debug(\"Fancytree.treeInit()\");\n\t\t// Add container to the TAB chain\n\t\t// See http://www.w3.org/TR/wai-aria-practices/#focus_activedescendant\n\t\t// #577: Allow to set tabindex to \"0\", \"-1\" and \"\"\n\t\ttree.$container.attr(\"tabindex\", opts.tabindex);\n\n\t\t// Copy some attributes to tree.data\n\t\t$.each(TREE_ATTRS, function(i, attr) {\n\t\t\tif( opts[attr] !== undefined ){\n\t\t\t\ttree.info(\"Move option \" + attr + \" to tree\");\n\t\t\t\ttree[attr] = opts[attr];\n\t\t\t\tdelete opts[attr];\n\t\t\t}\n\t\t});\n\n\t\tif( opts.rtl ) {\n\t\t\ttree.$container.attr(\"DIR\", \"RTL\").addClass(\"fancytree-rtl\");\n\t\t}else{\n\t\t\ttree.$container.removeAttr(\"DIR\").removeClass(\"fancytree-rtl\");\n\t\t}\n\t\tif( opts.aria ){\n\t\t\ttree.$container.attr(\"role\", \"tree\");\n\t\t\tif( opts.selectMode !== 1 ) {\n\t\t\t\ttree.$container.attr(\"aria-multiselectable\", true);\n\t\t\t}\n\t\t}\n\t\tthis.treeLoad(ctx);\n\t},\n\t/** Parse Fancytree from source, as configured in the options.\n\t * @param {EventData} ctx\n\t * @param {object} [source] optional new source (use last data otherwise)\n\t */\n\ttreeLoad: function(ctx, source) {\n\t\tvar metaData, type, $ul,\n\t\t\ttree = ctx.tree,\n\t\t\t$container = ctx.widget.element,\n\t\t\tdfd,\n\t\t\t// calling context for root node\n\t\t\trootCtx = $.extend({}, ctx, {node: this.rootNode});\n\n\t\tif(tree.rootNode.children){\n\t\t\tthis.treeClear(ctx);\n\t\t}\n\t\tsource = source || this.options.source;\n\n\t\tif(!source){\n\t\t\ttype = $container.data(\"type\") || \"html\";\n\t\t\tswitch(type){\n\t\t\tcase \"html\":\n\t\t\t\t$ul = $container.find(\">ul:first\");\n\t\t\t\t$ul.addClass(\"ui-fancytree-source fancytree-helper-hidden\");\n\t\t\t\tsource = $.ui.fancytree.parseHtml($ul);\n\t\t\t\t// allow to init tree.data.foo from <ul data-foo=''>\n\t\t\t\tthis.data = $.extend(this.data, _getElementDataAsDict($ul));\n\t\t\t\tbreak;\n\t\t\tcase \"json\":\n\t\t\t\tsource = $.parseJSON($container.text());\n\t\t\t\t// $container already contains the <ul>, but we remove the plain (json) text\n\t\t\t\t// $container.empty();\n\t\t\t\t$container.contents().filter(function(){\n\t\t\t\t\treturn (this.nodeType === 3);\n\t\t\t\t}).remove();\n\t\t\t\tif( $.isPlainObject(source) ){\n\t\t\t\t\t// We got {foo: 'abc', children: [...]}\n\t\t\t\t\t_assert($.isArray(source.children), \"if an object is passed as source, it must contain a 'children' array (all other properties are added to 'tree.data')\");\n\t\t\t\t\tmetaData = source;\n\t\t\t\t\tsource = source.children;\n\t\t\t\t\tdelete metaData.children;\n\t\t\t\t\t// Copy some attributes to tree.data\n\t\t\t\t\t$.each(TREE_ATTRS, function(i, attr) {\n\t\t\t\t\t\tif( metaData[attr] !== undefined ){\n\t\t\t\t\t\t\ttree[attr] = metaData[attr];\n\t\t\t\t\t\t\tdelete metaData[attr];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t// Copy extra properties to tree.data.foo\n\t\t\t\t\t$.extend(tree.data, metaData);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t$.error(\"Invalid data-type: \" + type);\n\t\t\t}\n\t\t}else if(typeof source === \"string\"){\n\t\t\t// TODO: source is an element ID\n\t\t\t$.error(\"Not implemented\");\n\t\t}\n\n\t\t// Trigger fancytreeinit after nodes have been loaded\n\t\tdfd = this.nodeLoadChildren(rootCtx, source).done(function(){\n\t\t\ttree.render();\n\t\t\tif( ctx.options.selectMode === 3 ){\n\t\t\t\ttree.rootNode.fixSelection3FromEndNodes();\n\t\t\t}\n\t\t\tif( tree.activeNode && tree.options.activeVisible ) {\n\t\t\t\ttree.activeNode.makeVisible();\n\t\t\t}\n\t\t\ttree._triggerTreeEvent(\"init\", null, { status: true });\n\t\t}).fail(function(){\n\t\t\ttree.render();\n\t\t\ttree._triggerTreeEvent(\"init\", null, { status: false });\n\t\t});\n\t\treturn dfd;\n\t},\n\t/** Node was inserted into or removed from the tree.\n\t * @param {EventData} ctx\n\t * @param {boolean} add\n\t * @param {FancytreeNode} node\n\t */\n\ttreeRegisterNode: function(ctx, add, node) {\n\t},\n\t/** Widget got focus.\n\t * @param {EventData} ctx\n\t * @param {boolean} [flag=true]\n\t */\n\ttreeSetFocus: function(ctx, flag, callOpts) {\n\t\tvar targetNode;\n\n\t\tflag = (flag !== false);\n\n\t\t// this.debug(\"treeSetFocus(\" + flag + \"), callOpts: \", callOpts, this.hasFocus());\n\t\t// this.debug(\" focusNode: \" + this.focusNode);\n\t\t// this.debug(\" activeNode: \" + this.activeNode);\n\t\tif( flag !== this.hasFocus() ){\n\t\t\tthis._hasFocus = flag;\n\t\t\tif( !flag && this.focusNode ) {\n\t\t\t\t// Node also looses focus if widget blurs\n\t\t\t\tthis.focusNode.setFocus(false);\n\t\t\t} else if ( flag && (!callOpts || !callOpts.calledByNode) ) {\n\t\t\t\t$(this.$container).focus();\n\t\t\t}\n\t\t\tthis.$container.toggleClass(\"fancytree-treefocus\", flag);\n\t\t\tthis._triggerTreeEvent(flag ? \"focusTree\" : \"blurTree\");\n\t\t\tif( flag && !this.activeNode ) {\n\t\t\t\t// #712: Use last mousedowned node ('click' event fires after focusin)\n\t\t\t\ttargetNode = this._lastMousedownNode || this.getFirstChild();\n\t\t\t\ttargetNode && targetNode.setFocus();\n\t\t\t}\n\t\t}\n\t},\n\t/** Widget option was set using `$().fancytree(\"option\", \"foo\", \"bar\")`.\n\t * @param {EventData} ctx\n\t * @param {string} key option name\n\t * @param {any} value option value\n\t */\n\ttreeSetOption: function(ctx, key, value) {\n\t\tvar tree = ctx.tree,\n\t\t\tcallDefault = true,\n\t\t\tcallCreate = false,\n\t\t\tcallRender = false;\n\n\t\tswitch( key ) {\n\t\tcase \"aria\":\n\t\tcase \"checkbox\":\n\t\tcase \"icon\":\n\t\tcase \"minExpandLevel\":\n\t\tcase \"tabindex\":\n\t\t\t// tree._callHook(\"treeCreate\", tree);\n\t\t\tcallCreate = true;\n\t\t\tcallRender = true;\n\t\t\tbreak;\n\t\tcase \"escapeTitles\":\n\t\tcase \"tooltip\":\n\t\t\tcallRender = true;\n\t\t\tbreak;\n\t\tcase \"rtl\":\n\t\t\tif( value === false ) {\n\t\t\t\ttree.$container.removeAttr(\"DIR\").removeClass(\"fancytree-rtl\");\n\t\t\t}else{\n\t\t\t\ttree.$container.attr(\"DIR\", \"RTL\").addClass(\"fancytree-rtl\");\n\t\t\t}\n\t\t\tcallRender = true;\n\t\t\tbreak;\n\t\tcase \"source\":\n\t\t\tcallDefault = false;\n\t\t\ttree._callHook(\"treeLoad\", tree, value);\n\t\t\tcallRender = true;\n\t\t\tbreak;\n\t\t}\n\t\ttree.debug(\"set option \" + key + \"=\" + value + \" <\" + typeof(value) + \">\");\n\t\tif(callDefault){\n\t\t\tif( this.widget._super ) {\n\t\t\t\t// jQuery UI 1.9+\n\t\t\t\tthis.widget._super.call( this.widget, key, value );\n\t\t\t} else {\n\t\t\t\t// jQuery UI <= 1.8, we have to manually invoke the _setOption method from the base widget\n\t\t\t\t$.Widget.prototype._setOption.call(this.widget, key, value);\n\t\t\t}\n\t\t}\n\t\tif(callCreate){\n\t\t\ttree._callHook(\"treeCreate\", tree);\n\t\t}\n\t\tif(callRender){\n\t\t\ttree.render(true, false); // force, not-deep\n\t\t}\n\t}\n});\n\n\n/* ******************************************************************************\n * jQuery UI widget boilerplate\n */\n\n/**\n * The plugin (derrived from <a href=\" http://api.jqueryui.com/jQuery.widget/\">jQuery.Widget</a>).<br>\n * This constructor is not called directly. Use `$(selector).fancytree({})`\n * to initialize the plugin instead.<br>\n * <pre class=\"sh_javascript sunlight-highlight-javascript\">// Access widget methods and members:\n * var tree = $(\"#tree\").fancytree(\"getTree\");\n * var node = $(\"#tree\").fancytree(\"getActiveNode\", \"1234\");\n * </pre>\n *\n * @mixin Fancytree_Widget\n */\n\n$.widget(\"ui.fancytree\",\n\t/** @lends Fancytree_Widget# */\n\t{\n\t/**These options will be used as defaults\n\t * @type {FancytreeOptions}\n\t */\n\toptions:\n\t{\n\t\tactiveVisible: true,\n\t\tajax: {\n\t\t\ttype: \"GET\",\n\t\t\tcache: false, // false: Append random '_' argument to the request url to prevent caching.\n// timeout: 0, // >0: Make sure we get an ajax error if server is unreachable\n\t\t\tdataType: \"json\" // Expect json format and pass json object to callbacks.\n\t\t}, //\n\t\taria: true,\n\t\tautoActivate: true,\n\t\tautoCollapse: false,\n\t\tautoScroll: false,\n\t\tcheckbox: false,\n\t\tclickFolderMode: 4,\n\t\tdebugLevel: null, // 0..4 (null: use global setting $.ui.fancytree.debugInfo)\n\t\tdisabled: false, // TODO: required anymore?\n\t\tenableAspx: true,\n\t\tescapeTitles: false,\n\t\textensions: [],\n\t\t// fx: { height: \"toggle\", duration: 200 },\n\t\t// toggleEffect: { effect: \"drop\", options: {direction: \"left\"}, duration: 200 },\n\t\t// toggleEffect: { effect: \"slide\", options: {direction: \"up\"}, duration: 200 },\n\t\t//toggleEffect: { effect: \"blind\", options: {direction: \"vertical\", scale: \"box\"}, duration: 200 },\n\t\ttoggleEffect: { effect: \"slideToggle\", duration: 200 }, //< \"toggle\" or \"slideToggle\" to use jQuery instead of jQueryUI for toggleEffect animation\n\t\tgenerateIds: false,\n\t\ticon: true,\n\t\tidPrefix: \"ft_\",\n\t\tfocusOnSelect: false,\n\t\tkeyboard: true,\n\t\tkeyPathSeparator: \"/\",\n\t\tminExpandLevel: 1,\n\t\tquicksearch: false,\n\t\trtl: false,\n\t\tscrollOfs: {top: 0, bottom: 0},\n\t\tscrollParent: null,\n\t\tselectMode: 2,\n\t\tstrings: {\n\t\t\tloading: \"Loading...\", // … would be escaped when escapeTitles is true\n\t\t\tloadError: \"Load error!\",\n\t\t\tmoreData: \"More...\",\n\t\t\tnoData: \"No data.\"\n\t\t},\n\t\ttabindex: \"0\",\n\t\ttitlesTabbable: false,\n\t\ttooltip: false,\n\t\t_classNames: {\n\t\t\tnode: \"fancytree-node\",\n\t\t\tfolder: \"fancytree-folder\",\n\t\t\tanimating: \"fancytree-animating\",\n\t\t\tcombinedExpanderPrefix: \"fancytree-exp-\",\n\t\t\tcombinedIconPrefix: \"fancytree-ico-\",\n\t\t\thasChildren: \"fancytree-has-children\",\n\t\t\tactive: \"fancytree-active\",\n\t\t\tselected: \"fancytree-selected\",\n\t\t\texpanded: \"fancytree-expanded\",\n\t\t\tlazy: \"fancytree-lazy\",\n\t\t\tfocused: \"fancytree-focused\",\n\t\t\tpartload: \"fancytree-partload\",\n\t\t\tpartsel: \"fancytree-partsel\",\n\t\t\tradio: \"fancytree-radio\",\n\t\t\t// radiogroup: \"fancytree-radiogroup\",\n\t\t\tunselectable: \"fancytree-unselectable\",\n\t\t\tlastsib: \"fancytree-lastsib\",\n\t\t\tloading: \"fancytree-loading\",\n\t\t\terror: \"fancytree-error\",\n\t\t\tstatusNodePrefix: \"fancytree-statusnode-\"\n\t\t},\n\t\t// events\n\t\tlazyLoad: null,\n\t\tpostProcess: null\n\t},\n\t/* Set up the widget, Called on first $().fancytree() */\n\t_create: function() {\n\t\tthis.tree = new Fancytree(this);\n\n\t\tthis.$source = this.source || this.element.data(\"type\") === \"json\" ? this.element\n\t\t\t: this.element.find(\">ul:first\");\n\t\t// Subclass Fancytree instance with all enabled extensions\n\t\tvar extension, extName, i,\n\t\t\topts = this.options,\n\t\t\textensions = opts.extensions,\n\t\t\tbase = this.tree;\n\n\t\tfor(i=0; i<extensions.length; i++){\n\t\t\textName = extensions[i];\n\t\t\textension = $.ui.fancytree._extensions[extName];\n\t\t\tif(!extension){\n\t\t\t\t$.error(\"Could not apply extension '\" + extName + \"' (it is not registered, did you forget to include it?)\");\n\t\t\t}\n\t\t\t// Add extension options as tree.options.EXTENSION\n//\t\t\t_assert(!this.tree.options[extName], \"Extension name must not exist as option name: \" + extName);\n\n\t\t\t// console.info(\"extend \" + extName, extension.options, this.tree.options[extName])\n\t\t\t// issue #876: we want to replace custom array-options, not merge them\n\t\t\tthis.tree.options[extName] = _simpleDeepMerge({}, extension.options, this.tree.options[extName]);\n\t\t\t// this.tree.options[extName] = $.extend(true, {}, extension.options, this.tree.options[extName]);\n\n\t\t\t// console.info(\"extend \" + extName + \" =>\", this.tree.options[extName])\n\t\t\t// console.info(\"extend \" + extName + \" org default =>\", extension.options)\n\n\t\t\t// Add a namespace tree.ext.EXTENSION, to hold instance data\n\t\t\t_assert(this.tree.ext[extName] === undefined, \"Extension name must not exist as Fancytree.ext attribute: '\" + extName + \"'\");\n//\t\t\tthis.tree[extName] = extension;\n\t\t\tthis.tree.ext[extName] = {};\n\t\t\t// Subclass Fancytree methods using proxies.\n\t\t\t_subclassObject(this.tree, base, extension, extName);\n\t\t\t// current extension becomes base for the next extension\n\t\t\tbase = extension;\n\t\t}\n\t\t//\n\t\tif( opts.icons !== undefined ) { // 2015-11-16\n\t\t\tif( opts.icon !== true ) {\n\t\t\t\t$.error(\"'icons' tree option is deprecated since v2.14.0: use 'icon' only instead\");\n\t\t\t} else {\n\t\t\t\tthis.tree.warn(\"'icons' tree option is deprecated since v2.14.0: use 'icon' instead\");\n\t\t\t\topts.icon = opts.icons;\n\t\t\t}\n\t\t}\n\t\tif( opts.iconClass !== undefined ) { // 2015-11-16\n\t\t\tif( opts.icon ) {\n\t\t\t\t$.error(\"'iconClass' tree option is deprecated since v2.14.0: use 'icon' only instead\");\n\t\t\t} else {\n\t\t\t\tthis.tree.warn(\"'iconClass' tree option is deprecated since v2.14.0: use 'icon' instead\");\n\t\t\t\topts.icon = opts.iconClass;\n\t\t\t}\n\t\t}\n\t\tif( opts.tabbable !== undefined ) { // 2016-04-04\n\t\t\topts.tabindex = opts.tabbable ? \"0\" : \"-1\";\n\t\t\tthis.tree.warn(\"'tabbable' tree option is deprecated since v2.17.0: use 'tabindex='\" + opts.tabindex + \"' instead\");\n\t\t}\n\t\t//\n\t\tthis.tree._callHook(\"treeCreate\", this.tree);\n\t\t// Note: 'fancytreecreate' event is fired by widget base class\n// this.tree._triggerTreeEvent(\"create\");\n\t},\n\n\t/* Called on every $().fancytree() */\n\t_init: function() {\n\t\tthis.tree._callHook(\"treeInit\", this.tree);\n\t\t// TODO: currently we call bind after treeInit, because treeInit\n\t\t// might change tree.$container.\n\t\t// It would be better, to move event binding into hooks altogether\n\t\tthis._bind();\n\t},\n\n\t/* Use the _setOption method to respond to changes to options */\n\t_setOption: function(key, value) {\n\t\treturn this.tree._callHook(\"treeSetOption\", this.tree, key, value);\n\t},\n\n\t/** Use the destroy method to clean up any modifications your widget has made to the DOM */\n\tdestroy: function() {\n\t\tthis._unbind();\n\t\tthis.tree._callHook(\"treeDestroy\", this.tree);\n\t\t// In jQuery UI 1.8, you must invoke the destroy method from the base widget\n\t\t$.Widget.prototype.destroy.call(this);\n\t\t// TODO: delete tree and nodes to make garbage collect easier?\n\t\t// TODO: In jQuery UI 1.9 and above, you would define _destroy instead of destroy and not call the base method\n\t},\n\n\t// -------------------------------------------------------------------------\n\n\t/* Remove all event handlers for our namespace */\n\t_unbind: function() {\n\t\tvar ns = this.tree._ns;\n\t\tthis.element.off(ns);\n\t\tthis.tree.$container.off(ns);\n\t\t$(document).off(ns);\n\t},\n\t/* Add mouse and kyboard handlers to the container */\n\t_bind: function() {\n\t\tvar that = this,\n\t\t\topts = this.options,\n\t\t\ttree = this.tree,\n\t\t\tns = tree._ns\n\t\t\t// selstartEvent = ( $.support.selectstart ? \"selectstart\" : \"mousedown\" )\n\t\t\t;\n\n\t\t// Remove all previuous handlers for this tree\n\t\tthis._unbind();\n\n\t\t//alert(\"keydown\" + ns + \"foc=\" + tree.hasFocus() + tree.$container);\n\t\t// tree.debug(\"bind events; container: \", tree.$container);\n\t\ttree.$container.on(\"focusin\" + ns + \" focusout\" + ns, function(event){\n\t\t\tvar node = FT.getNode(event),\n\t\t\t\tflag = (event.type === \"focusin\");\n\n\t\t\tif( !flag && node && $(event.target).is(\"a\") ) {\n\t\t\t\t// #764\n\t\t\t\tnode.debug(\"Ignored focusout on embedded <a> element.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// tree.treeOnFocusInOut.call(tree, event);\n\t\t\t// tree.debug(\"Tree container got event \" + event.type, node, event, FT.getEventTarget(event));\n\t\t\tif( flag ) {\n\t\t\t\tif( tree._getExpiringValue(\"focusin\") ) {\n\t\t\t\t\t// #789: IE 11 may send duplicate focusin events\n\t\t\t\t\ttree.debug(\"Ignored double focusin.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttree._setExpiringValue(\"focusin\", true, 50);\n\n\t\t\t\tif( !node ) {\n\t\t\t\t\t// #789: IE 11 may send focusin before mousdown(?)\n\t\t\t\t\tnode = tree._getExpiringValue(\"mouseDownNode\");\n\t\t\t\t\tif( node ) { tree.debug(\"Reconstruct mouse target for focusin from recent event.\"); }\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(node){\n\t\t\t\t// For example clicking into an <input> that is part of a node\n\t\t\t\ttree._callHook(\"nodeSetFocus\", tree._makeHookContext(node, event), flag);\n\t\t\t}else{\n\t\t\t\tif( tree.tbody && $(event.target).parents(\"table.fancytree-container > thead\").length ) {\n\t\t\t\t\t// #767: ignore events in the table's header\n\t\t\t\t\ttree.debug(\"Ignore focus event outside table body.\", event);\n\t\t\t\t} else {\n\t\t\t\t\ttree._callHook(\"treeSetFocus\", tree, flag);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}).on(\"selectstart\" + ns, \"span.fancytree-title\", function(event){\n\t\t\t// prevent mouse-drags to select text ranges\n\t\t\t// tree.debug(\"<span title> got event \" + event.type);\n\t\t\tevent.preventDefault();\n\n\t\t}).on(\"keydown\" + ns, function(event){\n\t\t\t// TODO: also bind keyup and keypress\n\t\t\t// tree.debug(\"got event \" + event.type + \", hasFocus:\" + tree.hasFocus());\n\t\t\t// if(opts.disabled || opts.keyboard === false || !tree.hasFocus() ){\n\t\t\tif(opts.disabled || opts.keyboard === false ){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvar res,\n\t\t\t\tnode = tree.focusNode, // node may be null\n\t\t\t\tctx = tree._makeHookContext(node || tree, event),\n\t\t\t\tprevPhase = tree.phase;\n\n\t\t\ttry {\n\t\t\t\ttree.phase = \"userEvent\";\n\t\t\t\t// If a 'fancytreekeydown' handler returns false, skip the default\n\t\t\t\t// handling (implemented by tree.nodeKeydown()).\n\t\t\t\tif(node){\n\t\t\t\t\tres = tree._triggerNodeEvent(\"keydown\", node, event);\n\t\t\t\t}else{\n\t\t\t\t\tres = tree._triggerTreeEvent(\"keydown\", event);\n\t\t\t\t}\n\t\t\t\tif ( res === \"preventNav\" ){\n\t\t\t\t\tres = true; // prevent keyboard navigation, but don't prevent default handling of embedded input controls\n\t\t\t\t} else if ( res !== false ){\n\t\t\t\t\tres = tree._callHook(\"nodeKeydown\", ctx);\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t} finally {\n\t\t\t\ttree.phase = prevPhase;\n\t\t\t}\n\n\t\t}).on(\"mousedown\" + ns, function(event){\n\t\t\tvar et = FT.getEventTarget(event);\n\t\t\t// that.tree.debug(\"event(\" + event.type + \"): node: \", et.node);\n\t\t\t// #712: Store the clicked node, so we can use it when we get a focusin event\n\t\t\t// ('click' event fires after focusin)\n\t\t\t// tree.debug(\"event(\" + event.type + \"): node: \", et.node);\n\t\t\ttree._lastMousedownNode = et ? et.node : null;\n\t\t\t// #789: Store the node also for a short period, so we can use it\n\t\t\t// in a *resulting* focusin event\n\t\t\ttree._setExpiringValue(\"mouseDownNode\", tree._lastMousedownNode);\n\n\t\t}).on(\"click\" + ns + \" dblclick\" + ns, function(event){\n\t\t\tif(opts.disabled){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvar ctx,\n\t\t\t\tet = FT.getEventTarget(event),\n\t\t\t\tnode = et.node,\n\t\t\t\ttree = that.tree,\n\t\t\t\tprevPhase = tree.phase;\n\n\t\t\t// that.tree.debug(\"event(\" + event.type + \"): node: \", node);\n\t\t\tif( !node ){\n\t\t\t\treturn true; // Allow bubbling of other events\n\t\t\t}\n\t\t\tctx = tree._makeHookContext(node, event);\n\t\t\t// that.tree.debug(\"event(\" + event.type + \"): node: \", node);\n\t\t\ttry {\n\t\t\t\ttree.phase = \"userEvent\";\n\t\t\t\tswitch(event.type) {\n\t\t\t\tcase \"click\":\n\t\t\t\t\tctx.targetType = et.type;\n\t\t\t\t\tif( node.isPagingNode() ) {\n\t\t\t\t\t\treturn tree._triggerNodeEvent(\"clickPaging\", ctx, event) === true;\n\t\t\t\t\t}\n\t\t\t\t\treturn ( tree._triggerNodeEvent(\"click\", ctx, event) === false ) ? false : tree._callHook(\"nodeClick\", ctx);\n\t\t\t\tcase \"dblclick\":\n\t\t\t\t\tctx.targetType = et.type;\n\t\t\t\t\treturn ( tree._triggerNodeEvent(\"dblclick\", ctx, event) === false ) ? false : tree._callHook(\"nodeDblclick\", ctx);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\ttree.phase = prevPhase;\n\t\t\t}\n\t\t});\n\t},\n\t/** Return the active node or null.\n\t * @returns {FancytreeNode}\n\t */\n\tgetActiveNode: function() {\n\t\treturn this.tree.activeNode;\n\t},\n\t/** Return the matching node or null.\n\t * @param {string} key\n\t * @returns {FancytreeNode}\n\t */\n\tgetNodeByKey: function(key) {\n\t\treturn this.tree.getNodeByKey(key);\n\t},\n\t/** Return the invisible system root node.\n\t * @returns {FancytreeNode}\n\t */\n\tgetRootNode: function() {\n\t\treturn this.tree.rootNode;\n\t},\n\t/** Return the current tree instance.\n\t * @returns {Fancytree}\n\t */\n\tgetTree: function() {\n\t\treturn this.tree;\n\t}\n});\n\n// $.ui.fancytree was created by the widget factory. Create a local shortcut:\nFT = $.ui.fancytree;\n\n/**\n * Static members in the `$.ui.fancytree` namespace.<br>\n * <br>\n * <pre class=\"sh_javascript sunlight-highlight-javascript\">// Access static members:\n * var node = $.ui.fancytree.getNode(element);\n * alert($.ui.fancytree.version);\n * </pre>\n *\n * @mixin Fancytree_Static\n */\n$.extend($.ui.fancytree,\n\t/** @lends Fancytree_Static# */\n\t{\n\t/** @type {string} */\n\tversion: \"2.29.1\", // Set to semver by 'grunt release'\n\t/** @type {string} */\n\tbuildType: \"production\", // Set to 'production' by 'grunt build'\n\t/** @type {int} */\n\tdebugLevel: 3, // Set to 3 by 'grunt build'\n\t\t\t\t\t\t\t // Used by $.ui.fancytree.debug() and as default for tree.options.debugLevel\n\n\t_nextId: 1,\n\t_nextNodeKey: 1,\n\t_extensions: {},\n\t// focusTree: null,\n\n\t/** Expose class object as $.ui.fancytree._FancytreeClass */\n\t_FancytreeClass: Fancytree,\n\t/** Expose class object as $.ui.fancytree._FancytreeNodeClass */\n\t_FancytreeNodeClass: FancytreeNode,\n\t/* Feature checks to provide backwards compatibility */\n\tjquerySupports: {\n\t\t// http://jqueryui.com/upgrade-guide/1.9/#deprecated-offset-option-merged-into-my-and-at\n\t\tpositionMyOfs: isVersionAtLeast($.ui.version, 1, 9)\n\t\t},\n\t/** Throw an error if condition fails (debug method).\n\t * @param {boolean} cond\n\t * @param {string} msg\n\t */\n\tassert: function(cond, msg){\n\t\treturn _assert(cond, msg);\n\t},\n\t/** Create a new Fancytree instance on a target element.\n\t *\n\t * @param {Element | jQueryObject | string} el Target DOM element or selector\n\t * @param {FancytreeOptions} [opts] Fancytree options\n\t * @returns {Fancytree} new tree instance\n\t * @example\n\t * var tree = $.ui.fancytree.createTree(\"#tree\", {\n\t * source: {url: \"my/webservice\"}\n\t * }); // Create tree for this matching element\n\t *\n\t * @since 2.25\n\t */\n\tcreateTree: function(el, opts){\n\t\tvar tree = $(el).fancytree(opts).fancytree(\"getTree\");\n\t\treturn tree;\n\t},\n\t/** Return a function that executes *fn* at most every *timeout* ms.\n\t * @param {integer} timeout\n\t * @param {function} fn\n\t * @param {boolean} [invokeAsap=false]\n\t * @param {any} [ctx]\n\t */\n\tdebounce: function(timeout, fn, invokeAsap, ctx) {\n\t\tvar timer;\n\t\tif(arguments.length === 3 && typeof invokeAsap !== \"boolean\") {\n\t\t\tctx = invokeAsap;\n\t\t\tinvokeAsap = false;\n\t\t}\n\t\treturn function() {\n\t\t\tvar args = arguments;\n\t\t\tctx = ctx || this;\n\t\t\tinvokeAsap && !timer && fn.apply(ctx, args);\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = setTimeout(function() {\n\t\t\t\tinvokeAsap || fn.apply(ctx, args);\n\t\t\t\ttimer = null;\n\t\t\t}, timeout);\n\t\t};\n\t},\n\t/** Write message to console if debugLevel >= 4\n\t * @param {string} msg\n\t */\n\tdebug: function(msg){\n\t\t/*jshint expr:true */\n\t\t($.ui.fancytree.debugLevel >= 4) && consoleApply(\"log\", arguments);\n\t},\n\t/** Write error message to console if debugLevel >= 1.\n\t * @param {string} msg\n\t */\n\terror: function(msg){\n\t\t($.ui.fancytree.debugLevel >= 1) && consoleApply(\"error\", arguments);\n\t},\n\t/** Convert <, >, &, ", ', / to the equivalent entities.\n\t *\n\t * @param {string} s\n\t * @returns {string}\n\t */\n\tescapeHtml: function(s){\n\t\treturn (\"\" + s).replace(REX_HTML, function(s) {\n\t\t\treturn ENTITY_MAP[s];\n\t\t});\n\t},\n\t/** Make jQuery.position() arguments backwards compatible, i.e. if\n\t * jQuery UI version <= 1.8, convert\n\t * { my: \"left+3 center\", at: \"left bottom\", of: $target }\n\t * to\n\t * { my: \"left center\", at: \"left bottom\", of: $target, offset: \"3 0\" }\n\t *\n\t * See http://jqueryui.com/upgrade-guide/1.9/#deprecated-offset-option-merged-into-my-and-at\n\t * and http://jsfiddle.net/mar10/6xtu9a4e/\n\t *\n\t * @param {object} opts\n\t * @returns {object} the (potentially modified) original opts hash object\n\t */\n\tfixPositionOptions: function(opts) {\n\t\tif( opts.offset || (\"\" + opts.my + opts.at ).indexOf(\"%\") >= 0 ) {\n\t\t $.error(\"expected new position syntax (but '%' is not supported)\");\n\t\t}\n\t\tif( ! $.ui.fancytree.jquerySupports.positionMyOfs ) {\n\t\t\tvar // parse 'left+3 center' into ['left+3 center', 'left', '+3', 'center', undefined]\n\t\t\t\tmyParts = /(\\w+)([+-]?\\d+)?\\s+(\\w+)([+-]?\\d+)?/.exec(opts.my),\n\t\t\t\tatParts = /(\\w+)([+-]?\\d+)?\\s+(\\w+)([+-]?\\d+)?/.exec(opts.at),\n\t\t\t\t// convert to numbers\n\t\t\t\tdx = (myParts[2] ? (+myParts[2]) : 0) + (atParts[2] ? (+atParts[2]) : 0),\n\t\t\t\tdy = (myParts[4] ? (+myParts[4]) : 0) + (atParts[4] ? (+atParts[4]) : 0);\n\n\t\t\topts = $.extend({}, opts, { // make a copy and overwrite\n\t\t\t\tmy: myParts[1] + \" \" + myParts[3],\n\t\t\t\tat: atParts[1] + \" \" + atParts[3]\n\t\t\t});\n\t\t\tif( dx || dy ) {\n\t\t\t\topts.offset = \"\" + dx + \" \" + dy;\n\t\t\t}\n\t\t}\n\t\treturn opts;\n\t},\n\t/** Return a {node: FancytreeNode, type: TYPE} object for a mouse event.\n\t *\n\t * @param {Event} event Mouse event, e.g. click, ...\n\t * @returns {object} Return a {node: FancytreeNode, type: TYPE} object\n\t * TYPE: 'title' | 'prefix' | 'expander' | 'checkbox' | 'icon' | undefined\n\t */\n\tgetEventTarget: function(event){\n\t\tvar $target, tree,\n\t\t\ttcn = event && event.target ? event.target.className : \"\",\n\t\t\tres = {node: this.getNode(event.target), type: undefined};\n\t\t// We use a fast version of $(res.node).hasClass()\n\t\t// See http://jsperf.com/test-for-classname/2\n\t\tif( /\\bfancytree-title\\b/.test(tcn) ){\n\t\t\tres.type = \"title\";\n\t\t}else if( /\\bfancytree-expander\\b/.test(tcn) ){\n\t\t\tres.type = (res.node.hasChildren() === false ? \"prefix\" : \"expander\");\n\t\t// }else if( /\\bfancytree-checkbox\\b/.test(tcn) || /\\bfancytree-radio\\b/.test(tcn) ){\n\t\t}else if( /\\bfancytree-checkbox\\b/.test(tcn) ){\n\t\t\tres.type = \"checkbox\";\n\t\t}else if( /\\bfancytree(-custom)?-icon\\b/.test(tcn) ){\n\t\t\tres.type = \"icon\";\n\t\t}else if( /\\bfancytree-node\\b/.test(tcn) ){\n\t\t\t// Somewhere near the title\n\t\t\tres.type = \"title\";\n\t\t}else if( event && event.target ) {\n\t\t\t$target = $(event.target);\n\t\t\tif( $target.is(\"ul[role=group]\") ) {\n\t\t\t\t// #nnn: Clicking right to a node may hit the surrounding UL\n\t\t\t\ttree = res.node && res.node.tree;\n\t\t\t\t(tree || FT).debug(\"Ignoring click on outer UL.\");\n\t\t\t\tres.node = null;\n\t\t\t}else if( $target.closest(\".fancytree-title\").length ) {\n\t\t\t\t// #228: clicking an embedded element inside a title\n\t\t\t\tres.type = \"title\";\n\t\t\t}else if( $target.closest(\".fancytree-checkbox\").length ) {\n\t\t\t\t// E.g. <svg> inside checkbox span\n\t\t\t\tres.type = \"checkbox\";\n\t\t\t}else if( $target.closest(\".fancytree-expander\").length ) {\n\t\t\t\tres.type = \"expander\";\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\t/** Return a string describing the affected node region for a mouse event.\n\t *\n\t * @param {Event} event Mouse event, e.g. click, mousemove, ...\n\t * @returns {string} 'title' | 'prefix' | 'expander' | 'checkbox' | 'icon' | undefined\n\t */\n\tgetEventTargetType: function(event){\n\t\treturn this.getEventTarget(event).type;\n\t},\n\t/** Return a FancytreeNode instance from element, event, or jQuery object.\n\t *\n\t * @param {Element | jQueryObject | Event} el\n\t * @returns {FancytreeNode} matching node or null\n\t */\n\tgetNode: function(el){\n\t\tif(el instanceof FancytreeNode){\n\t\t\treturn el; // el already was a FancytreeNode\n\t\t}else if( el instanceof $ ){\n\t\t\tel = el[0]; // el was a jQuery object: use the DOM element\n\t\t}else if(el.originalEvent !== undefined){\n\t\t\tel = el.target; // el was an Event\n\t\t}\n\t\twhile( el ) {\n\t\t\tif(el.ftnode) {\n\t\t\t\treturn el.ftnode;\n\t\t\t}\n\t\t\tel = el.parentNode;\n\t\t}\n\t\treturn null;\n\t},\n\t/** Return a Fancytree instance, from element, index, event, or jQueryObject.\n\t *\n\t * @param {Element | jQueryObject | Event | integer | string} [el]\n\t * @returns {Fancytree} matching tree or null\n\t * @example\n\t * $.ui.fancytree.getTree(); // Get first Fancytree instance on page\n\t * $.ui.fancytree.getTree(1); // Get second Fancytree instance on page\n\t * $.ui.fancytree.getTree(\"#tree\"); // Get tree for this matching element\n\t *\n\t * @since 2.13\n\t */\n\tgetTree: function(el){\n\t\tvar widget;\n\n\t\tif( el instanceof Fancytree ) {\n\t\t\treturn el; // el already was a Fancytree\n\t\t}\n\t\tif( el === undefined ) {\n\t\t\tel = 0; // get first tree\n\t\t}\n\t\tif( typeof el === \"number\" ) {\n\t\t\tel = $(\".fancytree-container\").eq(el); // el was an integer: return nth instance\n\t\t} else if( typeof el === \"string\" ) {\n\t\t\tel = $(el).eq(0); // el was a selector: use first match\n\t\t} else if( el.selector !== undefined ) {\n\t\t\tel = el.eq(0); // el was a jQuery object: use the first DOM element\n\t\t} else if( el.originalEvent !== undefined ) {\n\t\t\tel = $(el.target); // el was an Event\n\t\t}\n\t\tel = el.closest(\":ui-fancytree\");\n\t\twidget = el.data(\"ui-fancytree\") || el.data(\"fancytree\"); // the latter is required by jQuery <= 1.8\n\t\treturn widget ? widget.tree : null;\n\t},\n\t/** Return an option value that has a default, but may be overridden by a\n\t * callback or a node instance attribute.\n\t *\n\t * Evaluation sequence:<br>\n\t *\n\t * If tree.options.<optionName> is a callback that returns something, use that.<br>\n\t * Else if node.<optionName> is defined, use that.<br>\n\t * Else if tree.options.<optionName> is a value, use that.<br>\n\t * Else use `defaultValue`.\n\t *\n\t * @param {string} optionName name of the option property (on node and tree)\n\t * @param {FancytreeNode} node passed to the callback\n\t * @param {object} nodeObject where to look for the local option property, e.g. `node` or `node.data`\n\t * @param {object} treeOption where to look for the tree option, e.g. `tree.options` or `tree.options.dnd5`\n\t * @param {any} [defaultValue]\n\t * @returns {any}\n\t *\n\t * @example\n\t * // Check for node.foo, tree,options.foo(), and tree.options.foo:\n\t * $.ui.fancytree.evalOption(\"foo\", node, node, tree.options);\n\t * // Check for node.data.bar, tree,options.qux.bar(), and tree.options.qux.bar:\n\t * $.ui.fancytree.evalOption(\"bar\", node, node.data, tree.options.qux);\n\t *\n\t * @since 2.22\n\t */\n\tevalOption: function(optionName, node, nodeObject, treeOptions, defaultValue) {\n\t\tvar ctx, res,\n\t\t\ttree = node.tree,\n\t\t\ttreeOpt = treeOptions[optionName],\n\t\t\tnodeOpt = nodeObject[optionName];\n\n\t\tif( $.isFunction(treeOpt) ) {\n\t\t\tctx = {\n\t\t\t\tnode: node, tree: tree, widget: tree.widget, options: tree.widget.options,\n\t\t\t\ttypeInfo: tree.types[node.type] || {}\n\t\t\t\t};\n\t\t\tres = treeOpt.call(tree, {type: optionName}, ctx);\n\t\t\tif( res == null ) {\n\t\t\t\tres = nodeOpt;\n\t\t\t}\n\t\t} else {\n\t\t\tres = (nodeOpt != null) ? nodeOpt : treeOpt;\n\t\t}\n\t\tif( res == null ) {\n\t\t\tres = defaultValue; // no option set at all: return default\n\t\t}\n\t\treturn res;\n\t},\n\t/** Set expander, checkbox, or node icon, supporting string and object format.\n\t *\n\t * @param {Element | jQueryObject} span\n\t * @param {string} baseClass\n\t * @param {string | object} icon\n\t * @since 2.27\n\t */\n\tsetSpanIcon: function( span, baseClass, icon ) {\n\t\tvar $span = $( span );\n\n\t\tif( typeof icon === \"string\" ) {\n\t\t\t$span.attr( \"class\", baseClass + \" \" + icon );\n\t\t} else { // support object syntax: { text: ligature, addClasse: classname }\n\t\t\tif( icon.text ) {\n\t\t\t\t$span.text( \"\" + icon.text );\n\t\t\t} else if ( icon.html ) {\n\t\t\t\tspan.innerHTML = icon.html;\n\t\t\t}\n\t\t\t$span.attr( \"class\", baseClass + \" \" + ( icon.addClass || \"\" ) );\n\t\t}\n\t},\n\t/** Convert a keydown or mouse event to a canonical string like 'ctrl+a',\n\t * 'ctrl+shift+f2', 'shift+leftdblclick'.\n\t *\n\t * This is especially handy for switch-statements in event handlers.\n\t *\n\t * @param {event}\n\t * @returns {string}\n\t *\n\t * @example\n\n\tswitch( $.ui.fancytree.eventToString(event) ) {\n\t\tcase \"-\":\n\t\t\ttree.nodeSetExpanded(ctx, false);\n\t\t\tbreak;\n\t\tcase \"shift+return\":\n\t\t\ttree.nodeSetActive(ctx, true);\n\t\t\tbreak;\n\t\tcase \"down\":\n\t\t\tres = node.navigate(event.which, activate);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\thandled = false;\n\t}\n\tif( handled ){\n\t\tevent.preventDefault();\n\t}\n\t */\n\teventToString: function(event) {\n\t\t// Poor-man's hotkeys. See here for a complete implementation:\n\t\t// https://github.com/jeresig/jquery.hotkeys\n\t\tvar which = event.which,\n\t\t\tet = event.type,\n\t\t\ts = [];\n\n\t\tif( event.altKey ) { s.push(\"alt\"); }\n\t\tif( event.ctrlKey ) { s.push(\"ctrl\"); }\n\t\tif( event.metaKey ) { s.push(\"meta\"); }\n\t\tif( event.shiftKey ) { s.push(\"shift\"); }\n\n\t\tif( et === \"click\" || et === \"dblclick\" ) {\n\t\t\ts.push(MOUSE_BUTTONS[event.button] + et);\n\t\t} else {\n\t\t\tif( !IGNORE_KEYCODES[which] ) {\n\t\t\t\ts.push( SPECIAL_KEYCODES[which] || String.fromCharCode(which).toLowerCase() );\n\t\t\t}\n\t\t}\n\t\treturn s.join(\"+\");\n\t},\n\t/** Write message to console if debugLevel >= 3\n\t * @param {string} msg\n\t */\n\tinfo: function(msg){\n\t\t/*jshint expr:true */\n\t\t($.ui.fancytree.debugLevel >= 3) && consoleApply(\"info\", arguments);\n\t},\n\t/* @deprecated: use eventToString(event) instead.\n\t */\n\tkeyEventToString: function(event) {\n\t\tthis.warn(\"keyEventToString() is deprecated: use eventToString()\");\n\t\treturn this.eventToString(event);\n\t},\n\t/** Return a wrapped handler method, that provides `this.super`.\n\t *\n\t * @example\n\t\t// Implement `opts.createNode` event to add the 'draggable' attribute\n\t\t$.ui.fancytree.overrideMethod(ctx.options, \"createNode\", function(event, data) {\n\t\t\t// Default processing if any\n\t\t\tthis._super.apply(this, arguments);\n\t\t\t// Add 'draggable' attribute\n\t\t\tdata.node.span.draggable = true;\n\t\t});\n\t *\n\t * @param {object} instance\n\t * @param {string} methodName\n\t * @param {function} handler\n\t */\n\toverrideMethod: function(instance, methodName, handler){\n\t\tvar prevSuper,\n\t\t\t_super = instance[methodName] || $.noop;\n\n\t\t// context = context || this;\n\n\t\tinstance[methodName] = function() {\n\t\t\ttry {\n\t\t\t\tprevSuper = this._super;\n\t\t\t\tthis._super = _super;\n\t\t\t\treturn handler.apply(this, arguments);\n\t\t\t} finally {\n\t\t\t\tthis._super = prevSuper;\n\t\t\t}\n\t\t};\n\t},\n\t/**\n\t * Parse tree data from HTML <ul> markup\n\t *\n\t * @param {jQueryObject} $ul\n\t * @returns {NodeData[]}\n\t */\n\tparseHtml: function($ul) {\n\t\t// TODO: understand this:\n\t\t/*jshint validthis:true */\n\t\tvar classes, className, extraClasses, i, iPos, l, tmp, tmp2,\n\t\t\t$children = $ul.find(\">li\"),\n\t\t\tchildren = [];\n\n\t\t$children.each(function() {\n\t\t\tvar allData, lowerCaseAttr,\n\t\t\t\t$li = $(this),\n\t\t\t\t$liSpan = $li.find(\">span:first\", this),\n\t\t\t\t$liA = $liSpan.length ? null : $li.find(\">a:first\"),\n\t\t\t\td = { tooltip: null, data: {} };\n\n\t\t\tif( $liSpan.length ) {\n\t\t\t\td.title = $liSpan.html();\n\n\t\t\t} else if( $liA && $liA.length ) {\n\t\t\t\t// If a <li><a> tag is specified, use it literally and extract href/target.\n\t\t\t\td.title = $liA.html();\n\t\t\t\td.data.href = $liA.attr(\"href\");\n\t\t\t\td.data.target = $liA.attr(\"target\");\n\t\t\t\td.tooltip = $liA.attr(\"title\");\n\n\t\t\t} else {\n\t\t\t\t// If only a <li> tag is specified, use the trimmed string up to\n\t\t\t\t// the next child <ul> tag.\n\t\t\t\td.title = $li.html();\n\t\t\t\tiPos = d.title.search(/<ul/i);\n\t\t\t\tif( iPos >= 0 ){\n\t\t\t\t\td.title = d.title.substring(0, iPos);\n\t\t\t\t}\n\t\t\t}\n\t\t\td.title = $.trim(d.title);\n\n\t\t\t// Make sure all fields exist\n\t\t\tfor(i=0, l=CLASS_ATTRS.length; i<l; i++){\n\t\t\t\td[CLASS_ATTRS[i]] = undefined;\n\t\t\t}\n\t\t\t// Initialize to `true`, if class is set and collect extraClasses\n\t\t\tclasses = this.className.split(\" \");\n\t\t\textraClasses = [];\n\t\t\tfor(i=0, l=classes.length; i<l; i++){\n\t\t\t\tclassName = classes[i];\n\t\t\t\tif(CLASS_ATTR_MAP[className]){\n\t\t\t\t\td[className] = true;\n\t\t\t\t}else{\n\t\t\t\t\textraClasses.push(className);\n\t\t\t\t}\n\t\t\t}\n\t\t\td.extraClasses = extraClasses.join(\" \");\n\n\t\t\t// Parse node options from ID, title and class attributes\n\t\t\ttmp = $li.attr(\"title\");\n\t\t\tif( tmp ){\n\t\t\t\td.tooltip = tmp; // overrides <a title='...'>\n\t\t\t}\n\t\t\ttmp = $li.attr(\"id\");\n\t\t\tif( tmp ){\n\t\t\t\td.key = tmp;\n\t\t\t}\n\t\t\t// Translate hideCheckbox -> checkbox:false\n\t\t\tif( $li.attr(\"hideCheckbox\") ){\n\t\t\t\td.checkbox = false;\n\t\t\t}\n\t\t\t// Add <li data-NAME='...'> as node.data.NAME\n\t\t\tallData = _getElementDataAsDict($li);\n\t\t\tif( allData && !$.isEmptyObject(allData) ) {\n\t\t\t\t// #507: convert data-hidecheckbox (lower case) to hideCheckbox\n\t\t\t\tfor( lowerCaseAttr in NODE_ATTR_LOWERCASE_MAP ) {\n\t\t\t\t\tif( allData.hasOwnProperty(lowerCaseAttr) ) {\n\t\t\t\t\t\tallData[NODE_ATTR_LOWERCASE_MAP[lowerCaseAttr]] = allData[lowerCaseAttr];\n\t\t\t\t\t\tdelete allData[lowerCaseAttr];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// #56: Allow to set special node.attributes from data-...\n\t\t\t\tfor(i=0, l=NODE_ATTRS.length; i<l; i++){\n\t\t\t\t\ttmp = NODE_ATTRS[i];\n\t\t\t\t\ttmp2 = allData[tmp];\n\t\t\t\t\tif( tmp2 != null ) {\n\t\t\t\t\t\tdelete allData[tmp];\n\t\t\t\t\t\td[tmp] = tmp2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// All other data-... goes to node.data...\n\t\t\t\t$.extend(d.data, allData);\n\t\t\t}\n\t\t\t// Recursive reading of child nodes, if LI tag contains an UL tag\n\t\t\t$ul = $li.find(\">ul:first\");\n\t\t\tif( $ul.length ) {\n\t\t\t\td.children = $.ui.fancytree.parseHtml($ul);\n\t\t\t}else{\n\t\t\t\td.children = d.lazy ? undefined : null;\n\t\t\t}\n\t\t\tchildren.push(d);\n// FT.debug(\"parse \", d, children);\n\t\t});\n\t\treturn children;\n\t},\n\t/** Add Fancytree extension definition to the list of globally available extensions.\n\t *\n\t * @param {object} definition\n\t */\n\tregisterExtension: function(definition){\n\t\t_assert(definition.name != null, \"extensions must have a `name` property.\");\n\t\t_assert(definition.version != null, \"extensions must have a `version` property.\");\n\t\t$.ui.fancytree._extensions[definition.name] = definition;\n\t},\n\t/** Inverse of escapeHtml().\n\t *\n\t * @param {string} s\n\t * @returns {string}\n\t */\n\tunescapeHtml: function(s){\n\t\tvar e = document.createElement(\"div\");\n\t\te.innerHTML = s;\n\t\treturn e.childNodes.length === 0 ? \"\" : e.childNodes[0].nodeValue;\n\t},\n\t/** Write warning message to console if debugLevel >= 2.\n\t * @param {string} msg\n\t */\n\twarn: function(msg){\n\t\t($.ui.fancytree.debugLevel >= 2) && consoleApply(\"warn\", arguments);\n\t}\n});\n\n// Value returned by `require('jquery.fancytree')`\nreturn $.ui.fancytree;\n})); // End of closure\n","/*! jQuery UI - v1.12.1 - 2018-05-20\n* http://jqueryui.com\n* Includes: widget.js, position.js, keycode.js, scroll-parent.js, unique-id.js\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = \"1.12.1\";\n\n\n/*!\n * jQuery UI Widget 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: http://api.jqueryui.com/jQuery.widget/\n//>>demos: http://jqueryui.com/widget/\n\n\n\nvar widgetUuid = 0;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = $.cleanData || ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\ttry {\n\n\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\tevents = $._data( elem, \"events\" );\n\t\t\t\tif ( events && events.remove ) {\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t\t}\n\n\t\t\t// Http://bugs.jquery.com/ticket/8235\n\t\t\t} catch ( e ) {}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = $.widget || function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( $.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( !$.isFunction( value ) ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = $.Widget || function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tcurrent = $( $.unique( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._on( options.element, {\n\t\t\t\"remove\": \"_untrackClassesElement\"\n\t\t} );\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName ).off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( $.isFunction( callback ) &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Position 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/position/\n */\n\n//>>label: Position\n//>>group: Core\n//>>description: Positions elements relative to other elements.\n//>>docs: http://api.jqueryui.com/position/\n//>>demos: http://jqueryui.com/position/\n\n\n( function() {\nvar cachedScrollbarWidth,\n\tmax = Math.max,\n\tabs = Math.abs,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[ 0 ];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( $.isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = $.position || {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"<div \" +\n\t\t\t\t\"style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>\" +\n\t\t\t\t\"<div style='height:100px;width:auto;'></div></div>\" ),\n\t\t\tinnerDiv = div.children()[ 0 ];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[ 0 ].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[ 0 ].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[ 0 ].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisWindow = $.isWindow( withinElement[ 0 ] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\n\t\t\thasOffset = !isWindow && !isDocument;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\t\t\twidth: withinElement.outerWidth(),\n\t\t\theight: withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// Make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\t\ttarget = $( options.of ),\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[ 0 ].preventDefault ) {\n\n\t\t// Force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\n\t// Clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// Force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1 ) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// Calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// Reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t} );\n\n\t// Normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each( function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) +\n\t\t\t\tscrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) +\n\t\t\t\tscrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tif ( options.using ) {\n\n\t\t\t// Adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t} );\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// Element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\n\t\t\t\t// Element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\n\t\t\t\t// Element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\n\t\t\t\t// Element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\n\t\t\t// Too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// Element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\n\t\t\t\t// Element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\n\t\t\t\t// Element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\n\t\t\t\t// Element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\n\t\t\t// Too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\n\t\t\t\t\touterWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\n\t\t\t\t\tatOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\n\t\t\t\t\touterHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\n\t\t\t\t\toffset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n} )();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI Keycode 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/\n\n\nvar keycode = $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n\n/*!\n * jQuery UI Scroll Parent 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: http://api.jqueryui.com/scrollParent/\n\n\n\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n\n/*!\n * jQuery UI Unique ID 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: uniqueId\n//>>group: Core\n//>>description: Functions to generate and remove uniqueId's\n//>>docs: http://api.jqueryui.com/uniqueId/\n\n\n\nvar uniqueId = $.fn.extend( {\n\tuniqueId: ( function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each( function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\n}));\n","/**\n * Directory scanner module that will Smush images in the Directory Smush modal.\n *\n * @since 2.8.1\n *\n * @param totalSteps\n * @param currentStep\n * @returns {{scan: scan, cancel: (function(): (*|$.promise|{})), getProgress: getProgress, onFinishStep: onFinishStep, onFinish: onFinish}}\n * @constructor\n */\n\nconst DirectoryScanner = ( totalSteps, currentStep ) => {\n\ttotalSteps = parseInt( totalSteps );\n\tcurrentStep = parseInt( currentStep );\n\tlet cancelling = false;\n\n\tlet obj = {\n\t\tscan: function() {\n\t\t\tlet remainingSteps = totalSteps - currentStep;\n\t\t\tif ( currentStep !== 0 ) {\n\t\t\t\t// Scan started on a previous page load.\n\t\t\t\tstep( remainingSteps );\n\t\t\t} else {\n\t\t\t\t$.post( ajaxurl, { action: 'directory_smush_start' },\n\t\t\t\t\t() => step( remainingSteps ) );\n\t\t\t}\n\t\t},\n\n\t\tcancel: function() {\n\t\t\tcancelling = true;\n\t\t\treturn $.post( ajaxurl, { action: 'directory_smush_cancel' } );\n\t\t},\n\n\t\tgetProgress: function() {\n\t\t\tif ( cancelling ) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tconst remainingSteps = totalSteps - currentStep;\n\t\t\treturn Math.min( Math.round( ( parseInt( ( totalSteps - remainingSteps ) ) * 100 ) / totalSteps ), 99 );\n\t\t},\n\n\t\tonFinishStep: function( progress ) {\n\t\t\t$( '.wp-smush-progress-dialog .sui-progress-state-text' ).html( currentStep + '/' + totalSteps + ' ' + wp_smush_msgs.progress_smushed );\n\t\t\tWP_Smush.directory.updateProgressBar( progress );\n\t\t},\n\n\t\tonFinish: function() {\n\t\t\tWP_Smush.directory.updateProgressBar( 100 );\n\t\t\twindow.location.href = wp_smush_msgs.directory_url;\n\t\t},\n\n\t\tlimitReached: function() {\n\t\t\tlet dialog = $( '#wp-smush-progress-dialog' );\n\n\t\t\tdialog.addClass( 'wp-smush-exceed-limit' );\n\t\t\tdialog.find( '#cancel-directory-smush' ).attr( 'data-tooltip', wp_smush_msgs.bulk_resume );\n\t\t\tdialog.find( '.sui-icon-close' ).removeClass( 'sui-icon-close' ).addClass( 'sui-icon-play' );\n\t\t},\n\n\t\tresume: function() {\n\t\t\tlet dialog = $( '#wp-smush-progress-dialog' );\n\n\t\t\tdialog.removeClass( 'wp-smush-exceed-limit' );\n\t\t\tdialog.find( '#cancel-directory-smush' ).attr( 'data-tooltip', 'Cancel' );\n\t\t\tdialog.find( '.sui-icon-close' ).removeClass( 'sui-icon-play' ).addClass( 'sui-icon-close' );\n\n\t\t\tobj.scan();\n\t\t}\n\t};\n\n\t/**\n\t * Execute a scan step recursively\n\t *\n\t * Private to avoid overriding\n\t *\n\t * @param remainingSteps\n\t */\n\tconst step = function( remainingSteps ) {\n\t\tif ( remainingSteps >= 0 ) {\n\t\t\tcurrentStep = totalSteps - remainingSteps;\n\t\t\t$.post( ajaxurl, {\n\t\t\t\taction: 'directory_smush_check_step',\n\t\t\t\tstep: currentStep\n\t\t\t}, ( response ) => {\n\t\t\t\t// We're good - continue on.\n\t\t\t\tif ( 'undefined' !== typeof response.success && response.success ) {\n\t\t\t\t\tcurrentStep++;\n\t\t\t\t\tremainingSteps = remainingSteps - 1;\n\t\t\t\t\tobj.onFinishStep( obj.getProgress() );\n\t\t\t\t\tstep( remainingSteps );\n\t\t\t\t} else if ( 'undefined' !== typeof response.data.error && 'dir_smush_limit_exceeded' === response.data.error ) {\n\t\t\t\t\t// Limit reached. Stop.\n\t\t\t\t\tobj.limitReached();\n\t\t\t\t}\n\t\t\t} );\n\t\t} else {\n\t\t\t$.post( ajaxurl, { action: 'directory_smush_finish', items: totalSteps },\n\t\t\t\t( response ) => obj.onFinish( response ) );\n\t\t}\n\t};\n\n\treturn obj;\n};\n\nexport default DirectoryScanner;","/**\n * Created by umeshkumar on 12/05/16.\n */\njQuery(function () {\n\tvar el_notice = jQuery(\".smush-notice\"),\n\t\tbtn_act = el_notice.find(\".smush-notice-act\"),\n\t\tbtn_dismiss = el_notice.find(\".smush-notice-dismiss\");\n\tel_notice.fadeIn(500);\n\n\t// Hide the notice after a CTA button was clicked\n\tfunction remove_notice() {\n\t\tel_notice.fadeTo(100, 0, function () {\n\t\t\tel_notice.slideUp(100, function () {\n\t\t\t\tel_notice.remove();\n\t\t\t});\n\t\t});\n\t}\n\n\tbtn_act.click(function (ev) {\n\t\tremove_notice();\n\t\tnotify_wordpress(btn_act.data(\"msg\"));\n\t});\n\n\tbtn_dismiss.click(function (ev) {\n\t\tremove_notice();\n\t\tnotify_wordpress(btn_act.data(\"msg\"));\n\t});\n\n\t// Notify WordPress about the users choice and close the message.\n\tfunction notify_wordpress(message) {\n\t\tel_notice.attr(\"data-message\", message);\n\t\tel_notice.addClass(\"loading\");\n\n\t\t//Send a ajax request to save the dismissed notice option\n\t\tvar param = {\n\t\t\taction: 'dismiss_upgrade_notice'\n\t\t};\n\t\tjQuery.post(ajaxurl, param);\n\t}\n\n\t// Store the preference in db.\n\tfunction send_dismiss_request( action ) {\n\t\tvar param = {\n\t\t\taction: action\n\t\t};\n\t\tjQuery.post(ajaxurl, param);\n\t}\n\n\t// Dismiss the update notice.\n\tjQuery('.wp-smush-update-info').on('click', '.notice-dismiss', function (e) {\n\t\te.preventDefault();\n\t\tel_notice = jQuery(this);\n\t\tremove_notice();\n\t\tsend_dismiss_request( 'dismiss_update_info' );\n\t});\n\n\t// Dismiss S3 support alert.\n\tjQuery('div.wp-smush-s3support-alert').on('click', '.icon-fi-close', function (e) {\n\t\tel_notice = jQuery(this);\n\t\tremove_notice();\n\t\tsend_dismiss_request( 'dismiss_s3support_alert' );\n\t});\n\n});"],"sourceRoot":""}