{"version":3,"sources":["js/vendor.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","isArraylike","obj","length","type","jQuery","isWindow","nodeType","winnow","elements","qualifier","not","isFunction","grep","elem","i","call","risSimple","test","filter","inArray","sibling","cur","dir","createOptions","options","object","optionsCache","each","match","rnotwhite","_","flag","detach","addEventListener","removeEventListener","completed","detachEvent","event","readyState","ready","dataAttr","key","data","undefined","name","replace","rmultiDash","toLowerCase","getAttribute","rbrace","parseJSON","e","isEmptyDataObject","isEmptyObject","internalData","pvt","acceptData","ret","thisCache","internalKey","expando","isNode","cache","id","deletedIds","pop","guid","toJSON","noop","extend","camelCase","internalRemoveData","isArray","concat","map","split","cleanData","support","deleteExpando","returnTrue","returnFalse","safeActiveElement","activeElement","err","createSafeFragment","list","nodeNames","safeFrag","createDocumentFragment","createElement","getAll","context","tag","elems","found","getElementsByTagName","strundefined","querySelectorAll","childNodes","nodeName","push","merge","fixDefaultChecked","rcheckableType","defaultChecked","checked","manipulationTarget","content","firstChild","appendChild","ownerDocument","disableScript","find","attr","restoreScript","rscriptTypeMasked","exec","removeAttribute","setGlobalEval","refElements","_data","cloneCopyEvent","src","dest","hasData","l","oldData","curData","events","handle","add","fixCloneNodeIssues","noCloneEvent","removeEvent","text","parentNode","outerHTML","html5Clone","innerHTML","trim","value","defaultSelected","selected","defaultValue","actualDisplay","doc","style","appendTo","body","display","getDefaultComputedStyle","css","defaultDisplay","elemdisplay","iframe","documentElement","contentWindow","contentDocument","write","close","addGetHookIf","conditionFn","hookFn","get","condition","apply","arguments","vendorPropName","capName","charAt","toUpperCase","slice","origName","cssPrefixes","showHide","show","hidden","values","index","isHidden","setPositiveNumber","subtract","matches","rnumsplit","Math","max","augmentWidthOrHeight","extra","isBorderBox","styles","val","cssExpand","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","getStyles","boxSizing","curCSS","rnumnonpx","boxSizingReliable","parseFloat","Tween","prop","end","easing","prototype","init","createFxNow","setTimeout","fxNow","now","genFx","includeWidth","which","attrs","height","opacity","width","createTween","animation","tween","collection","tweeners","defaultPrefilter","props","opts","toggle","hooks","oldfire","checkDisplay","anim","orig","dataShow","queue","_queueHooks","unqueued","empty","fire","always","overflow","overflowX","overflowY","inlineBlockNeedsLayout","zoom","shrinkWrapBlocks","rfxtypes","done","hide","_removeData","start","propFilter","specialEasing","cssHooks","expand","Animation","properties","result","stopped","animationPrefilters","deferred","Deferred","tick","currentTime","remaining","startTime","duration","temp","percent","tweens","run","notifyWith","resolveWith","promise","originalProperties","originalOptions","stop","gotoEnd","rejectWith","fx","timer","progress","complete","fail","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","firstDataType","ct","finalDataType","contents","shift","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","tmp","prev","responseFields","dataFilter","state","error","buildParams","prefix","traditional","v","rbracket","createStandardXHR","XMLHttpRequest","createActiveXHR","ActiveXObject","getWindow","defaultView","parentWindow","indexOf","class2type","toString","hasOwn","hasOwnProperty","version","selector","fn","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","jquery","constructor","toArray","num","pushStack","prevObject","callback","args","first","eq","last","len","j","sort","splice","copyIsArray","copy","clone","isPlainObject","random","isReady","msg","Array","isNumeric","ownLast","globalEval","execScript","string","makeArray","arr","results","Object","second","invert","callbackInverse","callbackExpect","arg","proxy","Date","Sizzle","seed","m","groups","old","nid","newContext","newSelector","preferredDoc","setDocument","documentIsHTML","rquickExpr","getElementById","contains","getElementsByClassName","qsa","rbuggyQSA","tokenize","rescape","setAttribute","toSelector","rsibling","testContext","join","qsaError","select","createCache","keys","Expr","cacheLength","markFunction","assert","div","removeChild","addHandle","handler","attrHandle","siblingCheck","a","b","diff","sourceIndex","MAX_NEGATIVE","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","base","checkNonElements","doneName","xml","oldCache","outerCache","newCache","dirruns","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","relative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","uniqueSort","getText","isXML","compile","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","compilerCache","sortOrder","push_native","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","runescape","funescape","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","els","node","hasCompare","parent","top","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","specified","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo",">"," ","+","~","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","nodeIndex","useCache","lastChild","pseudo","idx","matched","has","innerText","lang","elemLang","hash","location","root","focus","hasFocus","href","tabIndex","enabled","disabled","selectedIndex","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","soFar","preFilters","cached","token","compiled","div1","unique","isXMLDoc","rneedsContext","rsingleTag","self","is","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","children","next","until","n","r","targets","closest","pos","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","reverse","Callbacks","firing","memory","fired","firingLength","firingIndex","firingStart","stack","once","stopOnFalse","disable","remove","lock","locked","fireWith","tuples","then","fns","newDefer","tuple","returned","resolve","reject","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","updateFunc","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","frameElement","doScroll","doScrollCheck","container","cssText","noData","applet ","embed ","object ","removeData","dequeue","startLength","setter","clearQueue","count","defer","pnum","source","el","access","chainable","emptyGet","raw","bulk","fragment","leadingWhitespace","tbody","htmlSerialize","cloneNode","appendChecked","noCloneChecked","checkClone","click","eventName","change","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","types","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","trigger","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","namespace_re","noBubble","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","srcElement","metaKey","original","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","related","submitBubbles","form","_submit_bubble","changeBubbles","propertyName","_just_changed","focusinBubbles","attaches","on","one","origFn","rinlinejQuery","rnoshimcache","rleadingWhitespace","rxhtmlTag","rtagName","rtbody","rhtml","rnoInnerhtml","rchecked","rscriptType","rcleanScript","wrapMap","option","legend","area","param","thead","tr","col","td","safeFragment","fragmentDiv","optgroup","tfoot","colgroup","caption","th","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","buildFragment","scripts","selection","wrap","safe","nodes","createTextNode","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","hasScripts","set","iNoClone","_evalUrl","prependTo","insertAfter","replaceAll","insert","shrinkWrapBlocksVal","rmargin","rposition","getComputedStyle","opener","computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","computeStyleTests","pixelPositionVal","boxSizingReliableVal","reliableMarginRightVal","marginRight","reliableHiddenOffsetsVal","cssFloat","backgroundClip","clearCloneStyle","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","pixelPosition","reliableMarginRight","swap","ralpha","ropacity","rdisplayswap","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssNumber","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","cssProps","float","$1","margin","padding","border","suffix","expanded","parts","unit","propHooks","eased","step","linear","p","swing","cos","PI","timerId","rfxnum","rrun","*","scale","maxIterations","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","valHooks","optionSet","scrollHeight","nodeHook","boolHook","ruseDefault","getSetInput","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","for","class","notxml","tabindex","parseInt","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","rvalidtokens","JSON","parse","requireNonComma","depth","str","comma","open","Function","parseXML","DOMParser","parseFromString","async","loadXML","ajaxLocParts","ajaxLocation","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","allTypes","active","lastModified","etag","url","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","status","nativeStatusText","headers","success","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","cacheURL","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","code","abort","finalText","method","crossDomain","hasContent","beforeSend","send","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","visible","r20","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","serialize","serializeArray","xhr","xhrId","xhrCallbacks","xhrSupported","cors","username","xhrFields","isAbort","onreadystatechange","responseText","script","text script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict","mkitem","item","unmountRedundant","items","tags","unmount","moveNestedTags","child","forEach","tagName","moveChildTag","addVirtual","sib","_root","_virts","moveVirtual","_each","dom","remAttr","hasKeys","mustReorder","getAttr","T_STRING","getTagName","impl","__tagImpl","tmpl","useRoot","SPECIAL_TAGS_REGEX","ref","getTag","isOption","oldItems","isVirtual","loopKeys","stub","frag","itemsLength","_mustReorder","oldPos","Tag","isLoop","hasImpl","mount","update","_item","defineProperty","si","op","__selected","parseNamedElements","childTags","forceParsingNamed","walk","initChildTag","setNamed","parseExpressions","expressions","addExpr","hasExpr","conf","updateOpts","ctx","toCamel","normalizeData","T_UNDEF","isWritable","inheritFromParent","k","mustSync","RESERVED_WORDS_BLACKLIST","propsInSyncWithParent","onChildUpdate","isMount","evt","riot","observable","inherit","cleanUpData","_tag","isMounted","__uid","mkdom","isInherited","isObject","rAF","mix","instance","mixin","getOwnPropertyNames","globalMixin","GLOBAL_MIXIN","walkAttributes","setAttr","isInStub","keepRootTag","ptag","tagIndex","__virtualDom","getImmediateCustomParentTag","_riot_id","setEventHandler","_parent","preventUpdate","insertTo","attrName","IE_VERSION","inStub","T_OBJECT","startsWith","RIOT_PREFIX","RIOT_TAG","T_FUNCTION","c","RIOT_TAG_IS","addChildTag","cachedTag","newPos","enumerable","writable","configurable","namedTag","getOwnPropertyDescriptor","o","re","mkEl","$$","querySelector","Child","getNamedKey","isArr","mountTo","_innerHTML","documentMode","callbacks","onEachEvent","defineProperties","typed","cb","arglen","busy","DEFAULT_PARSER","path","DEFAULT_SECOND_PARSER","REPLACE","debounce","autoExec","debouncedEmit","emit","ADD_EVENT_LISTENER","POPSTATE","HASHCHANGE","clickEvent","Router","central","normalize","isString","getPathFromRoot","loc","RE_ORIGIN","getPathFromBase","force","isRoot","emitStackLevel","MAX_EMIT_STACK_LEVEL","emitStack","TRIGGER","ctrlKey","shiftKey","HAS_ATTRIBUTE","go","title","shouldReplace","hist","replaceState","pushState","routeFound","parser","secondParser","EVENT_LISTENER","REMOVE_EVENT_LISTENER","history","prot","ontouchstart","started","third","some","action","mainRouter","route","create","newSubRouter","fn2","query","q","brackets","UNDEF","_loopback","_rewrite","_cache","REGLOB","_create","pair","DEFAULT","_pairs","S_QBLOCKS","_brackets","reOrIdx","_regex","_reset","cachedBrackets","_setSettings","_settings","R_MLCOMMS","R_STRINGS","FINDBRACES","(","[","{","_bp","unescapeStr","isexpr","skipBraces","ch","ix","recch","lastIndex","hasRaw","array","_tmpl","_logErr","errorHandler","riotData","_getTmpl","qstr","_parseExpr","RE_QBMARK","asText","mm","lv","ir","RE_BREND","RE_QBLOCK","cnt","CS_IDENT","jsb","rightContext","_wrapExpr","tb","JS_VARNAME","mvar","JS_CONTEXT","JS_NOPROPS","haveRaw","_mkdom","templ","replaceYield","tblTags","specialTags","tname","rootEls","childElementCount","reHasYield","reYieldSrc","reYieldDest","def","reYieldAll","styleManager","_riot","inject","styleNode","newNode","userNode","cssTextProp","styleSheet","stylesToInject","raf","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","navigator","userAgent","lastTime","nowtime","util","mixins","tag2","addRiotTags","selectAllTags","pushTags","riotTag","allTags","nodeList","_el","seppuku","rebuild","pause","kill","mergeObjects","targetObj","sourceObject","parseNumeric","updateScrollPos","scroll","onScroll","recalcAllPos","onWheel","watchArray","recalcElementPos","inited","currentMode","limit","mode","switchElementMode","fastCheck","deltaTop","abs","getDocOffsetTop","docOffsetTop","deltaHeight","initElement","isNaN","isCell","deinitElement","deinitParent","killClone","initAll","deinitAll","nodeStyle","right","bottom","marginLeft","marginTop","refElement","cloneStyle","marginBottom","borderSpacing","fontSize","getElementParams","computedStyle","parentComputedStyle","cachedPosition","numeric","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","nodeOffset","getElementOffset","borderTopWidth","borderBottomWidth","clientWidth","offsetTop","startFastCheckTimer","checkTimer","stopFastCheckTimer","handlePageVisibilityChange","initialized","hiddenPropertyName","visibilityChangeEventName","webkitHidden","prefixes","block","Stickyfill","stickies","featureTest","property","noPrefixes","mStyle","getPx","uniqueIdCounter","S","plugin","inactive","withoutFixedFixed","tests","sticky","fixed","getScrollTop","bypass","optOut","FixedFixed","isFixedToTop","elTop","initialOffset","parentHeight","isFixedToBottom","viewportHeight","elBottom","skipSettingToFixed","$el","outerHeight","isAlreadyOn","turnOn","$parent","destroy","$this","_this","FixedSticky","fixedsticky","require","validate","debug","console","warn","validator","onsubmit","submitHandler","submitButton","cancelSubmit","currentForm","pendingRequest","formSubmitted","focusInvalid","valid","errorList","element","rules","command","staticRules","existingRules","filtered","normalizeRule","messages","normalizeRules","classRules","attributeRules","dataRules","required","remote","blank","filled","unchecked","defaults","format","errorClass","pendingClass","validClass","errorElement","focusCleanup","errorContainer","errorLabelContainer","ignore","ignoreTitle","onfocusin","lastActive","unhighlight","hideThese","errorsFor","onfocusout","checkable","submitted","optional","onkeyup","excludedKeys","elementValue","invalid","onclick","highlight","findByName","setDefaults","email","date","dateISO","number","digits","equalTo","maxlength","minlength","rangelength","range","min","autoCreateRanges","eventType","labelContainer","errorContext","containers","valueCache","pending","invalidHandler","checkForm","errorMap","showErrors","prepareForm","currentElements","group","cleanElement","clean","checkElement","validationTargetFor","prepareElement","testgroup","numberOfInvalids","toHide","errors","message","successList","defaultShowErrors","resetForm","hideErrors","resetElements","objectLength","addWrapper","findLastActive","rulesCache","hasAttribute","resetInternals","toShow","$element","validity","badInput","substr","lastIndexOf","rule","rulesCount","dependencyMismatch","normalizer","TypeError","parameters","methods","formatAndAdd","log","customDataMessage","substring","customMessage","findDefined","defaultMessage","theregex","toToggle","wrapper","showLabel","validElements","invalidElements","place","errorID","elementID","idOrName","describedBy","errorPlacement","escapeCssMeta","describer","getLength","depend","dependTypes","boolean","function","startRequest","stopRequest","previousValue","classRuleSettings","creditcard","addClassRules","normalizeAttributeRule","Number","depends","keepRule","parameter","transformed","addMethod","errorMessage","supportedTypes","notSupported","optionDataString","previous","originalMessage","port","pendingRequests","stripHtml","valueStripped","regex","typeParam","optionalValue","files","factor","digit","account","sum","bankaccountNL","giroaccountNL","controlDigit","secondDigit","firstCN","secondCN","checkResult","cn","cDigit","nCheck","nDigit","bEven","validTypes","mastercard","visa","amex","dinersclub","enroute","discover","jcb","unknown","isParamString","symbol","soft","adata","gg","aaaa","xdata","UTC","getUTCFullYear","getUTCMonth","getUTCDate","countrycode","ibancheck","cChar","bbanpattern","bbancountrypatterns","ibanregexp","iban","ibancheckdigits","leadingZeroes","cRest","cOperator","AL","AD","AT","AZ","BE","BH","BA","BR","BG","CR","HR","CY","CZ","DK","DO","EE","FO","FI","FR","GE","DE","GI","GR","GL","GT","HU","IS","IE","IL","IT","KZ","KW","LV","LB","LI","LT","LU","MK","MT","MR","MU","MC","MD","ME","NL","NO","PK","PS","PL","PT","RO","SM","SA","RS","SK","SI","ES","SE","CH","TN","TR","AE","GB","VG","phone_number","cep_value","$fields","$fieldsFirst","isValid","numberFilled","isDefault","caseSensitive","includeTerritories","includeMilitary","d","f","cd","cdv","LL","VL","FL","template","tpl","move","Plugin","_name","PLUGIN_NAME","$document","TARGETS","Facebook","Twitter","LinkedIn","Google+","OilPro","Print","Email","via","onShare","altLink","$container","total","targetName","builtUrl","$link","a0","Ruler","$tooltip","constraints","__$tooltip","__init","areEqual","same","bodyContains","$obj","env","transitionSupport","animationDuration","contentAsHTML","contentCloning","delayTouch","functionInit","functionBefore","functionReady","functionAfter","functionFormat","IEmin","interactive","multiple","plugins","repositionOnScroll","restoration","selfDestruction","theme","trackerInterval","trackOrigin","trackTooltip","triggerClose","originClick","tap","touchleave","triggerOpen","touchstart","updateAnimation","hasTouchCapability","DocumentTouch","maxTouchPoints","hasTransitions","semVer","core","__$emitterPrivate","__$emitterPublic","__instancesLatestArr","__plugins","_env","__bridge","pluginName","pluginInstance","methodName","bridged","__setWindow","_getRuler","_off","_on","_one","_plugin","_trigger","instances","ns","instancesLatest","origins","tooltipster","Tooltipster","__callbacks","__closingTime","__Content","__contentBcr","__destroyed","__destroying","__enabled","__garbageCollector","__Geometry","__lastPosition","__namespace","round","__options","__$originParents","__pointerIsOverOrigin","__previousThemes","__state","__timeouts","__touchEvents","__tracker","_$origin","_$tooltip","origin","__optionsFormat","initialTitle","__contentSet","__prepareOrigin","__prepareGC","_plug","_touchRecordEvent","__prepareTooltip","__contentInsert","formattedContent","__destroyError","__geometry","$target","originIsArea","mapName","bcr","$window","geo","available","scrollX","scrollY","fixedLineage","usemapImage","windowOffset","shape","circleCenterLeft","circleCenterTop","circleRadius","areaTopOffset","areaLeftOffset","areaLeft","areaTop","areaRight","areaBottom","areaSmallestX","areaSmallestY","areaGreatestX","areaGreatestY","arrayAlternate","areaNumber","edit","geometry","getTime","eventNames","_touchIsMeaningfulEvent","_open","_touchIsTouchEvent","_touchIsEmulatedEvent","_openShortly","pointer-events","__scrollHandler","_close","reposition","g","overflows","offsetLeft","coord","__stateSet","__timeoutsClear","__trackerStart","$content","identical","currentBcr","ok","finishCallbacks","necessary","newClosingTime","-moz-animation-duration","-ms-animation-duration","-o-animation-duration","-webkit-animation-duration","animation-duration","transition-duration","extraTime","tooltip","$ae","dismissable","$elements","eventNamesIn","eventNamesOut","_optionsExtract","defaultOptions","pluginOptions","optionName","isEmulated","_touchSwiped","swiped","_unplug","__destroy","elementOrigin","elementTooltip","enable","tooltipIsDetached","helper","destroyed","destroying","contentCloningWarning","resp","multipleIsSet","contentIsSet","contentCloningIsSet","debugIsSet","__forceRedraw","$p","constrain","free","measure","tooltipBcr","contentBcr","fits","scrollWidth","ceil","uA","__defaults","arrow","distance","functionPosition","minIntersection","side","viewportAware","__instance","__previousState","__close","__create","__reposition","$html","opposites","finalResult","__targetFind","testResults","$clone","ruler","satisfied","takeTest","horizontal","vertical","__sideChange","testResult","outerSize","whole","rulerConfigured","rulerResults","ai","bi","floor","tooltipClone","tooltipParent","finalResultClone","arrowCoord","maxVal","originParentOffset","rects","getClientRects","targetRect","Inputmask","alias","internal","maskset","refreshValue","noMasksCache","definitions","userOptions","isRTL","numericInput","resolveAlias","aliasStr","aliasDefinition","aliases","mask","generateMaskSet","nocache","generateMask","metadata","greedy","repeat","placeholder","repeatStart","groupmarker","quantifiermarker","masksetDefinition","masksCache","maskToken","analyseMask","validPositions","_buffer","buffer","maskLength","ms","keepStatic","altMask","ndx","msk","alternatormarker","maskScope","actionObj","getMaskTemplate","baseOnInput","minimalPos","includeMode","ndxIntlzr","testPos","maskTemplate","lvp","getLastValidPosition","maxLength","getMaskSet","locator","nativeDef","getPlaceholder","getTestTemplate","jitMasking","isFinite","resetMaskSet","closestTo","strict","valids","posNdx","psNdx","generatedInput","stripValidPositions","nocheck","IsEnclosedStatic","posMatch","prevMatch","nextMatch","startPos","positionsClone","needsValidation","optionality","canClearPosition","isMask","positionCanMatchDefinition","determineTestTemplate","guessNextBest","testPositions","lvTest","getTests","lvTestAltArr","alternation","optionalQuantifier","newBlockMarker","checkAlternationMatch","tstPs","getTest","tndx","resolveTestFromToken","ndxInitializer","loopNdx","quantifierRecurse","handleMatch","isFirstMatch","latestMatch","tokenGroup","firstMatch","isQuantifier","resolveNdxInitializer","alternateNdx","targetAlternation","bestMatch","indexPos","lmnt","ndxPos","staticCanMatchDefinition","cacheDependency","isGroup","isOptional","optionalToken","insertStop","isAlternator","maltMatches","alternateToken","malternateMatches","currentMatches","loopNdxCnt","altIndex","amndx","currentPos","ndxInitializerClone","altIndexArr","ntndx","ndx1","altMatch","hasMatch","ndx2","altMatch2","na","mamatch","altLocArr","alndx","qt","qndx","quantifier","mergeLocators","tst","filterTests","maskTokens","previousPos","mtndx","cardinality","casing","getBufferTemplate","getBuffer","noCache","refreshFromBuffer","skipOptionalPartCharacter","posBefore","SPACE","altArr1","altArr2","naNdx","altArrC","isMatch","naArr","fromSetValid","fromAlternate","isSelection","posObj","begin","insertMode","_isValid","rslt","loopend","chrs","getBufferElement","validatedPos","possibleModifiedBuffer","refresh","setValidPosition","alternate","lastAlt","altPos","prevAltPos","validPos","altNdxs","decisionPos","validPsClone","isValidRslt","lAltPos","decisionTaker","possibilityPos","prevPos","mndx","validInputs","staticInputsBeforePos","staticInputsBeforePosAlternate","verifyValidInput","possibilities","targetLvp","trackbackAlternations","originalPos","vp","targetLocator","tll","ps","equality","targetAI","bestMatchAI","tstAI","validTest","vps","initialLength","fillMissingNonMask","caret","maskPos","pndx","testTemplate","testsFromPos","radixPointDefinitionSymbol","radixPoint","handleRemove","DELETE","currentPosValid","seekNext","nPos","snPos","postValidation","newBlock","maskL","seekPrevious","writeBuffer","caretPos","triggerInputEvent","onBeforeWrite","inputmask","_valueSet","renderColorMask","skipInputEvent","returnPL","prevTest","staticAlternations","checkVal","writeOut","nptvl","initiatingEvent","stickyCaret","isTemplateMatch","charCodeNdx","initialNdx","charCodes","bufferTemplateArr","inputValue","autoUnmask","staticInput","escapeRegex","keypress","charCodeAt","nextTest","EventHandlers","keypressEvent","forwardPosition","unmaskedvalue","setValueEvent","umValue","unmaskedValue","onUnMask","bufferValue","notranslate","translatePosition","bffrLght","setSelectionRange","selectionStart","selectionEnd","getSelection","getRangeAt","commonAncestorContainer","startOffset","endOffset","createRange","duplicate","moveStart","_valueGet","scrollCalc","mobile","textNode","setStart","setEnd","collapse","removeAllRanges","addRange","createTextRange","moveEnd","determineLastRequiredPosition","returnDefinition","bl","positions","lvTestAlt","clearOptionalTail","rl","isComplete","lrp","aml","generalize","BACKSPACE","pend","groupSeparator","initializeColorMask","findCaretPos","clientx","textTransform","whiteSpace","itl","inputText","previousWidth","offset1","offset2","colorMask","paddingTop","paddingBottom","webkitAppearance","mozAppearance","Appearance","backgroundColor","color","handleStatic","isStatic","isElementTypeSupported","patchValueProperty","npt","patchValhook","inputmaskpatch","valhookGet","valhookSet","nullable","$elem","clearMaskOnLostFocus","valueGet","valueSet","installNativeValueSetFallback","EventRuler","$input","__valueGet","noValuePatching","getPrototypeOf","__proto__","valueProperty","__lookupGetter__","__lookupSetter__","__defineGetter__","__defineSetter__","__valueSet","overruleRTL","elementType","isSupported","supportsInputType","isContentEditable","rightAlign","textAlign","android","inputmode","androidHack","submitEvent","resetEvent","mouseenterEvent","blurEvent","focusEvent","mouseleaveEvent","dblclickEvent","pasteEvent","cutEvent","oncomplete","onincomplete","oncleared","inputEventOnly","keydownEvent","inputFallBackEvent","initialValue","onBeforeMask","undoValue","clearIncomplete","valueBuffer","skipKeyPressEvent","ignorable","mouseEnter","eventHandler","ev","imOpts","readOnly","tabThrough","TAB","iemobile","iphone","that","returnVal","evArr","isInputEventSupported","evName","BACKSPACE_SAFARI","X","END","PAGE_DOWN","HOME","PAGE_UP","undoOnEscape","ESCAPE","altKey","INSERT","RIGHT","LEFT","onKeyDown","ignorables","checkval","ENTER","writeOutBuffer","valResult","onKeyValidation","tempValue","valueBeforeCaret","valueAfterCaret","clipboardData","getData","pasteValue","onBeforePaste","inputChar","bufferTemplate","nptValue","showMaskOnFocus","showMaskOnHover","positionCaretOnTab","tabbed","doRadixFocus","clickPos","radixPos","selectedCaret","positionCaretOnClick","clickPosition","lvclickPosition","lastPosition","clipData","setData","execCommand","removeMaskOnSubmit","lmib","maskTarget","mtdt","ua","dataAttribute","optionalmarker","escapeChar","pastedValue","staticDefinitionSymbol","9","definitionSymbol","importAttributeOptions","importOption","optionData","dataoptions","attrOptions","scopedOpts","noremask","getemptymask","hasMaskedValue","getmetadata","MaskToken","openGroup","insertTestDefinition","mtoken","maskdef","prevalidators","prevalidator","prevalidatorsL","verifyGroupMarker","nextToken","defaultCase","openenings","currentOpeningToken","alternator","currentToken","reverseTokens","reverseStatic","st","intMatch","openingToken","lastMatch","groupToken","tokenizer","mq","mq0","mq1","extendDefaults","extendDefinitions","definition","extendAliases","unmask","specials","ALT","CAPS_LOCK","COMMA","COMMAND","COMMAND_LEFT","COMMAND_RIGHT","CONTROL","DOWN","MENU","NUMPAD_ADD","NUMPAD_DECIMAL","NUMPAD_DIVIDE","NUMPAD_ENTER","NUMPAD_MULTIPLY","NUMPAD_SUBTRACT","PERIOD","SHIFT","UP","WINDOWS","nptmask","isLeapYear","year","getDate","dd/mm/yyyy","val1pre","val1","val2pre","separator","escapedSeparator","val2","leapday","yearrange","minyear","maxyear","isInYearRange","enteredyear","enteredyear2","determinebaseyear","hint","currentyear","getFullYear","maxYearPrefix","maxYearPostfix","maxxYear","currentYearPrefix","currentYearAndHint","today","getMonth","getFrontValue","currentResult","dayMonthValue","bufferStr","1","pchrs","2","frontValue","y","yearPrefix","mm/dd/yyyy","yyyy/mm/dd","dd.mm.yyyy","dd-mm-yyyy","mm.dd.yyyy","mm-dd-yyyy","yyyy.mm.dd","yyyy-mm-dd","datetime","hrspre","hrs24","hrs","ampm","mspre","timeseparator","hourFormat","h","datetime12","mm/dd/yyyy hh:mm xm","hh:mm t","h:s t","hh:mm:ss","hh:mm","mm/yyyy","shamsi","yyyy-mm-dd hh:mm:ss","A","&","#","ip","maskedValue","-","mac","vin","V","autoEscape","txt","escapedTxt","integerDigits","autoGroup","groupSize","seps","mod","integerOptional","digitsOptional","decimalProtect","dq","allowPlus","allowMinus","negationSymbol","front","back","unmaskAsNumber","postFormat","charAtPos","cbuf","isNegative","bufVal","bufValOrigin","escapedGroupSeparator","radixSplit","reg","needsRefresh","processValue","floatValue","signedFloatValue","radixPosition","rpb","integerPart","integerNPart","signHandler","matchRslt","radixHandler","integerValue","leadingZeroHandler","initialPos","decimalPart","leadingZero",":","radix","bufClone","vs","kommaMatches","dotMatches","valueParts","decPart","digitsFactor","pow","positionInput","canClear","currency","decimal","integer","percentage","maskSort","maska","maskb","maskas","maskbs","localeCompare","analyseMaskBase","reduceVariations","masks","previousVariation","previousmaskGroup","maskGroups","variation","maskGroup","submasks","phoneCodes","mt","abstractphone","processedValue","Regex","regexTokens","quantifierFilter","RegexToken","repeaterPart","analyseRegex","opengroups","quantifierToken","validateRegexToken","fromGroup","isvalid","regexPart","openGroupCount","matchToken","crrntndx","matchGroup","regexPartBak","qm","testExp","exp","tl","cbuffer","regexToken"],"mappings":"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","file":"vendor.min.js","sourcesContent":["/*!\r\n * jQuery JavaScript Library v1.11.3\r\n * http://jquery.com/\r\n *\r\n * Includes Sizzle.js\r\n * http://sizzlejs.com/\r\n *\r\n * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\r\n * Released under the MIT license\r\n * http://jquery.org/license\r\n *\r\n * Date: 2015-04-28T16:19Z\r\n */\r\n\r\n(function( global, factory ) {\r\n\r\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\r\n\t\t// For CommonJS and CommonJS-like environments where a proper window is present,\r\n\t\t// execute the factory and get jQuery\r\n\t\t// For environments that do not inherently posses a window with a document\r\n\t\t// (such as Node.js), expose a jQuery-making factory as module.exports\r\n\t\t// This accentuates the need for the creation of a real window\r\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\r\n\t\t// See ticket #14549 for more info\r\n\t\tmodule.exports = global.document ?\r\n\t\t\tfactory( global, true ) :\r\n\t\t\tfunction( w ) {\r\n\t\t\t\tif ( !w.document ) {\r\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\r\n\t\t\t\t}\r\n\t\t\t\treturn factory( w );\r\n\t\t\t};\r\n\t} else {\r\n\t\tfactory( global );\r\n\t}\r\n\r\n// Pass this if window is not defined yet\r\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\r\n\r\n// Can't do this because several apps including ASP.NET trace\r\n// the stack via arguments.caller.callee and Firefox dies if\r\n// you try to trace through \"use strict\" call chains. (#13335)\r\n// Support: Firefox 18+\r\n//\r\n\r\nvar deletedIds = [];\r\n\r\nvar slice = deletedIds.slice;\r\n\r\nvar concat = deletedIds.concat;\r\n\r\nvar push = deletedIds.push;\r\n\r\nvar indexOf = deletedIds.indexOf;\r\n\r\nvar class2type = {};\r\n\r\nvar toString = class2type.toString;\r\n\r\nvar hasOwn = class2type.hasOwnProperty;\r\n\r\nvar support = {};\r\n\r\n\r\n\r\nvar\r\n\tversion = \"1.11.3\",\r\n\r\n\t// Define a local copy of jQuery\r\n\tjQuery = function( selector, context ) {\r\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\r\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\r\n\t\treturn new jQuery.fn.init( selector, context );\r\n\t},\r\n\r\n\t// Support: Android<4.1, IE<9\r\n\t// Make sure we trim BOM and NBSP\r\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\r\n\r\n\t// Matches dashed string for camelizing\r\n\trmsPrefix = /^-ms-/,\r\n\trdashAlpha = /-([\\da-z])/gi,\r\n\r\n\t// Used by jQuery.camelCase as callback to replace()\r\n\tfcamelCase = function( all, letter ) {\r\n\t\treturn letter.toUpperCase();\r\n\t};\r\n\r\njQuery.fn = jQuery.prototype = {\r\n\t// The current version of jQuery being used\r\n\tjquery: version,\r\n\r\n\tconstructor: jQuery,\r\n\r\n\t// Start with an empty selector\r\n\tselector: \"\",\r\n\r\n\t// The default length of a jQuery object is 0\r\n\tlength: 0,\r\n\r\n\ttoArray: function() {\r\n\t\treturn slice.call( this );\r\n\t},\r\n\r\n\t// Get the Nth element in the matched element set OR\r\n\t// Get the whole matched element set as a clean array\r\n\tget: function( num ) {\r\n\t\treturn num != null ?\r\n\r\n\t\t\t// Return just the one element from the set\r\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\r\n\r\n\t\t\t// Return all the elements in a clean array\r\n\t\t\tslice.call( this );\r\n\t},\r\n\r\n\t// Take an array of elements and push it onto the stack\r\n\t// (returning the new matched element set)\r\n\tpushStack: function( elems ) {\r\n\r\n\t\t// Build a new jQuery matched element set\r\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\r\n\r\n\t\t// Add the old object onto the stack (as a reference)\r\n\t\tret.prevObject = this;\r\n\t\tret.context = this.context;\r\n\r\n\t\t// Return the newly-formed element set\r\n\t\treturn ret;\r\n\t},\r\n\r\n\t// Execute a callback for every element in the matched set.\r\n\t// (You can seed the arguments with an array of args, but this is\r\n\t// only used internally.)\r\n\teach: function( callback, args ) {\r\n\t\treturn jQuery.each( this, callback, args );\r\n\t},\r\n\r\n\tmap: function( callback ) {\r\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\r\n\t\t\treturn callback.call( elem, i, elem );\r\n\t\t}));\r\n\t},\r\n\r\n\tslice: function() {\r\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\r\n\t},\r\n\r\n\tfirst: function() {\r\n\t\treturn this.eq( 0 );\r\n\t},\r\n\r\n\tlast: function() {\r\n\t\treturn this.eq( -1 );\r\n\t},\r\n\r\n\teq: function( i ) {\r\n\t\tvar len = this.length,\r\n\t\t\tj = +i + ( i < 0 ? len : 0 );\r\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\r\n\t},\r\n\r\n\tend: function() {\r\n\t\treturn this.prevObject || this.constructor(null);\r\n\t},\r\n\r\n\t// For internal use only.\r\n\t// Behaves like an Array's method, not like a jQuery method.\r\n\tpush: push,\r\n\tsort: deletedIds.sort,\r\n\tsplice: deletedIds.splice\r\n};\r\n\r\njQuery.extend = jQuery.fn.extend = function() {\r\n\tvar src, copyIsArray, copy, name, options, clone,\r\n\t\ttarget = arguments[0] || {},\r\n\t\ti = 1,\r\n\t\tlength = arguments.length,\r\n\t\tdeep = false;\r\n\r\n\t// Handle a deep copy situation\r\n\tif ( typeof target === \"boolean\" ) {\r\n\t\tdeep = target;\r\n\r\n\t\t// skip the boolean and the target\r\n\t\ttarget = arguments[ i ] || {};\r\n\t\ti++;\r\n\t}\r\n\r\n\t// Handle case when target is a string or something (possible in deep copy)\r\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\r\n\t\ttarget = {};\r\n\t}\r\n\r\n\t// extend jQuery itself if only one argument is passed\r\n\tif ( i === length ) {\r\n\t\ttarget = this;\r\n\t\ti--;\r\n\t}\r\n\r\n\tfor ( ; i < length; i++ ) {\r\n\t\t// Only deal with non-null/undefined values\r\n\t\tif ( (options = arguments[ i ]) != null ) {\r\n\t\t\t// Extend the base object\r\n\t\t\tfor ( name in options ) {\r\n\t\t\t\tsrc = target[ name ];\r\n\t\t\t\tcopy = options[ name ];\r\n\r\n\t\t\t\t// Prevent never-ending loop\r\n\t\t\t\tif ( target === copy ) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Recurse if we're merging plain objects or arrays\r\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\r\n\t\t\t\t\tif ( copyIsArray ) {\r\n\t\t\t\t\t\tcopyIsArray = false;\r\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Never move original objects, clone them\r\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\r\n\r\n\t\t\t\t// Don't bring in undefined values\r\n\t\t\t\t} else if ( copy !== undefined ) {\r\n\t\t\t\t\ttarget[ name ] = copy;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Return the modified object\r\n\treturn target;\r\n};\r\n\r\njQuery.extend({\r\n\t// Unique for each copy of jQuery on the page\r\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\r\n\r\n\t// Assume jQuery is ready without the ready module\r\n\tisReady: true,\r\n\r\n\terror: function( msg ) {\r\n\t\tthrow new Error( msg );\r\n\t},\r\n\r\n\tnoop: function() {},\r\n\r\n\t// See test/unit/core.js for details concerning isFunction.\r\n\t// Since version 1.3, DOM methods and functions like alert\r\n\t// aren't supported. They return false on IE (#2968).\r\n\tisFunction: function( obj ) {\r\n\t\treturn jQuery.type(obj) === \"function\";\r\n\t},\r\n\r\n\tisArray: Array.isArray || function( obj ) {\r\n\t\treturn jQuery.type(obj) === \"array\";\r\n\t},\r\n\r\n\tisWindow: function( obj ) {\r\n\t\t/* jshint eqeqeq: false */\r\n\t\treturn obj != null && obj == obj.window;\r\n\t},\r\n\r\n\tisNumeric: function( obj ) {\r\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\r\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\r\n\t\t// subtraction forces infinities to NaN\r\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\r\n\t\treturn !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;\r\n\t},\r\n\r\n\tisEmptyObject: function( obj ) {\r\n\t\tvar name;\r\n\t\tfor ( name in obj ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\r\n\tisPlainObject: function( obj ) {\r\n\t\tvar key;\r\n\r\n\t\t// Must be an Object.\r\n\t\t// Because of IE, we also have to check the presence of the constructor property.\r\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\r\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t// Not own constructor property must be Object\r\n\t\t\tif ( obj.constructor &&\r\n\t\t\t\t!hasOwn.call(obj, \"constructor\") &&\r\n\t\t\t\t!hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t} catch ( e ) {\r\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Handle iteration over inherited properties before own properties.\r\n\t\tif ( support.ownLast ) {\r\n\t\t\tfor ( key in obj ) {\r\n\t\t\t\treturn hasOwn.call( obj, key );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Own properties are enumerated firstly, so to speed up,\r\n\t\t// if last one is own, then all properties are own.\r\n\t\tfor ( key in obj ) {}\r\n\r\n\t\treturn key === undefined || hasOwn.call( obj, key );\r\n\t},\r\n\r\n\ttype: function( obj ) {\r\n\t\tif ( obj == null ) {\r\n\t\t\treturn obj + \"\";\r\n\t\t}\r\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\r\n\t\t\tclass2type[ toString.call(obj) ] || \"object\" :\r\n\t\t\ttypeof obj;\r\n\t},\r\n\r\n\t// Evaluates a script in a global context\r\n\t// Workarounds based on findings by Jim Driscoll\r\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\r\n\tglobalEval: function( data ) {\r\n\t\tif ( data && jQuery.trim( data ) ) {\r\n\t\t\t// We use execScript on Internet Explorer\r\n\t\t\t// We use an anonymous function so that context is window\r\n\t\t\t// rather than jQuery in Firefox\r\n\t\t\t( window.execScript || function( data ) {\r\n\t\t\t\twindow[ \"eval\" ].call( window, data );\r\n\t\t\t} )( data );\r\n\t\t}\r\n\t},\r\n\r\n\t// Convert dashed to camelCase; used by the css and data modules\r\n\t// Microsoft forgot to hump their vendor prefix (#9572)\r\n\tcamelCase: function( string ) {\r\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\r\n\t},\r\n\r\n\tnodeName: function( elem, name ) {\r\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\r\n\t},\r\n\r\n\t// args is for internal usage only\r\n\teach: function( obj, callback, args ) {\r\n\t\tvar value,\r\n\t\t\ti = 0,\r\n\t\t\tlength = obj.length,\r\n\t\t\tisArray = isArraylike( obj );\r\n\r\n\t\tif ( args ) {\r\n\t\t\tif ( isArray ) {\r\n\t\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\r\n\r\n\t\t\t\t\tif ( value === false ) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor ( i in obj ) {\r\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\r\n\r\n\t\t\t\t\tif ( value === false ) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t// A special, fast, case for the most common use of each\r\n\t\t} else {\r\n\t\t\tif ( isArray ) {\r\n\t\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\r\n\r\n\t\t\t\t\tif ( value === false ) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor ( i in obj ) {\r\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\r\n\r\n\t\t\t\t\tif ( value === false ) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn obj;\r\n\t},\r\n\r\n\t// Support: Android<4.1, IE<9\r\n\ttrim: function( text ) {\r\n\t\treturn text == null ?\r\n\t\t\t\"\" :\r\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\r\n\t},\r\n\r\n\t// results is for internal usage only\r\n\tmakeArray: function( arr, results ) {\r\n\t\tvar ret = results || [];\r\n\r\n\t\tif ( arr != null ) {\r\n\t\t\tif ( isArraylike( Object(arr) ) ) {\r\n\t\t\t\tjQuery.merge( ret,\r\n\t\t\t\t\ttypeof arr === \"string\" ?\r\n\t\t\t\t\t[ arr ] : arr\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tpush.call( ret, arr );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ret;\r\n\t},\r\n\r\n\tinArray: function( elem, arr, i ) {\r\n\t\tvar len;\r\n\r\n\t\tif ( arr ) {\r\n\t\t\tif ( indexOf ) {\r\n\t\t\t\treturn indexOf.call( arr, elem, i );\r\n\t\t\t}\r\n\r\n\t\t\tlen = arr.length;\r\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\r\n\r\n\t\t\tfor ( ; i < len; i++ ) {\r\n\t\t\t\t// Skip accessing in sparse arrays\r\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t},\r\n\r\n\tmerge: function( first, second ) {\r\n\t\tvar len = +second.length,\r\n\t\t\tj = 0,\r\n\t\t\ti = first.length;\r\n\r\n\t\twhile ( j < len ) {\r\n\t\t\tfirst[ i++ ] = second[ j++ ];\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)\r\n\t\tif ( len !== len ) {\r\n\t\t\twhile ( second[j] !== undefined ) {\r\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfirst.length = i;\r\n\r\n\t\treturn first;\r\n\t},\r\n\r\n\tgrep: function( elems, callback, invert ) {\r\n\t\tvar callbackInverse,\r\n\t\t\tmatches = [],\r\n\t\t\ti = 0,\r\n\t\t\tlength = elems.length,\r\n\t\t\tcallbackExpect = !invert;\r\n\r\n\t\t// Go through the array, only saving the items\r\n\t\t// that pass the validator function\r\n\t\tfor ( ; i < length; i++ ) {\r\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\r\n\t\t\tif ( callbackInverse !== callbackExpect ) {\r\n\t\t\t\tmatches.push( elems[ i ] );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn matches;\r\n\t},\r\n\r\n\t// arg is for internal usage only\r\n\tmap: function( elems, callback, arg ) {\r\n\t\tvar value,\r\n\t\t\ti = 0,\r\n\t\t\tlength = elems.length,\r\n\t\t\tisArray = isArraylike( elems ),\r\n\t\t\tret = [];\r\n\r\n\t\t// Go through the array, translating each of the items to their new values\r\n\t\tif ( isArray ) {\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\r\n\r\n\t\t\t\tif ( value != null ) {\r\n\t\t\t\t\tret.push( value );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t// Go through every key on the object,\r\n\t\t} else {\r\n\t\t\tfor ( i in elems ) {\r\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\r\n\r\n\t\t\t\tif ( value != null ) {\r\n\t\t\t\t\tret.push( value );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Flatten any nested arrays\r\n\t\treturn concat.apply( [], ret );\r\n\t},\r\n\r\n\t// A global GUID counter for objects\r\n\tguid: 1,\r\n\r\n\t// Bind a function to a context, optionally partially applying any\r\n\t// arguments.\r\n\tproxy: function( fn, context ) {\r\n\t\tvar args, proxy, tmp;\r\n\r\n\t\tif ( typeof context === \"string\" ) {\r\n\t\t\ttmp = fn[ context ];\r\n\t\t\tcontext = fn;\r\n\t\t\tfn = tmp;\r\n\t\t}\r\n\r\n\t\t// Quick check to determine if target is callable, in the spec\r\n\t\t// this throws a TypeError, but we will just return undefined.\r\n\t\tif ( !jQuery.isFunction( fn ) ) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\r\n\t\t// Simulated bind\r\n\t\targs = slice.call( arguments, 2 );\r\n\t\tproxy = function() {\r\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\r\n\t\t};\r\n\r\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\r\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\r\n\r\n\t\treturn proxy;\r\n\t},\r\n\r\n\tnow: function() {\r\n\t\treturn +( new Date() );\r\n\t},\r\n\r\n\t// jQuery.support is not used in Core but other projects attach their\r\n\t// properties to it so it needs to exist.\r\n\tsupport: support\r\n});\r\n\r\n// Populate the class2type map\r\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\r\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\r\n});\r\n\r\nfunction isArraylike( obj ) {\r\n\r\n\t// Support: iOS 8.2 (not reproducible in simulator)\r\n\t// `in` check used to prevent JIT error (gh-2145)\r\n\t// hasOwn isn't used here due to false negatives\r\n\t// regarding Nodelist length in IE\r\n\tvar length = \"length\" in obj && obj.length,\r\n\t\ttype = jQuery.type( obj );\r\n\r\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif ( obj.nodeType === 1 && length ) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\treturn type === \"array\" || length === 0 ||\r\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\r\n}\r\nvar Sizzle =\r\n/*!\r\n * Sizzle CSS Selector Engine v2.2.0-pre\r\n * http://sizzlejs.com/\r\n *\r\n * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors\r\n * Released under the MIT license\r\n * http://jquery.org/license\r\n *\r\n * Date: 2014-12-16\r\n */\r\n(function( window ) {\r\n\r\nvar i,\r\n\tsupport,\r\n\tExpr,\r\n\tgetText,\r\n\tisXML,\r\n\ttokenize,\r\n\tcompile,\r\n\tselect,\r\n\toutermostContext,\r\n\tsortInput,\r\n\thasDuplicate,\r\n\r\n\t// Local document vars\r\n\tsetDocument,\r\n\tdocument,\r\n\tdocElem,\r\n\tdocumentIsHTML,\r\n\trbuggyQSA,\r\n\trbuggyMatches,\r\n\tmatches,\r\n\tcontains,\r\n\r\n\t// Instance-specific data\r\n\texpando = \"sizzle\" + 1 * new Date(),\r\n\tpreferredDoc = window.document,\r\n\tdirruns = 0,\r\n\tdone = 0,\r\n\tclassCache = createCache(),\r\n\ttokenCache = createCache(),\r\n\tcompilerCache = createCache(),\r\n\tsortOrder = function( a, b ) {\r\n\t\tif ( a === b ) {\r\n\t\t\thasDuplicate = true;\r\n\t\t}\r\n\t\treturn 0;\r\n\t},\r\n\r\n\t// General-purpose constants\r\n\tMAX_NEGATIVE = 1 << 31,\r\n\r\n\t// Instance methods\r\n\thasOwn = ({}).hasOwnProperty,\r\n\tarr = [],\r\n\tpop = arr.pop,\r\n\tpush_native = arr.push,\r\n\tpush = arr.push,\r\n\tslice = arr.slice,\r\n\t// Use a stripped-down indexOf as it's faster than native\r\n\t// http://jsperf.com/thor-indexof-vs-for/5\r\n\tindexOf = function( list, elem ) {\r\n\t\tvar i = 0,\r\n\t\t\tlen = list.length;\r\n\t\tfor ( ; i < len; i++ ) {\r\n\t\t\tif ( list[i] === elem ) {\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn -1;\r\n\t},\r\n\r\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\r\n\r\n\t// Regular expressions\r\n\r\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\r\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\r\n\t// http://www.w3.org/TR/css3-syntax/#characters\r\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\r\n\r\n\t// Loosely modeled on CSS identifier characters\r\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\r\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\r\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\r\n\r\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\r\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")(?:\" + whitespace +\r\n\t\t// Operator (capture 2)\r\n\t\t\"*([*^$|!~]?=)\" + whitespace +\r\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\r\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\r\n\t\t\"*\\\\]\",\r\n\r\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\((\" +\r\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\r\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\r\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\r\n\t\t// 2. simple (capture 6)\r\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\r\n\t\t// 3. anything else (capture 2)\r\n\t\t\".*\" +\r\n\t\t\")\\\\)|)\",\r\n\r\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\r\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\r\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\r\n\r\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\r\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\r\n\r\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\r\n\r\n\trpseudo = new RegExp( pseudos ),\r\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\r\n\r\n\tmatchExpr = {\r\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\r\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\r\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\r\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\r\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\r\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\r\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\r\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\r\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\r\n\t\t// For use in libraries implementing .is()\r\n\t\t// We use this for POS matching in `select`\r\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\r\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\r\n\t},\r\n\r\n\trinputs = /^(?:input|select|textarea|button)$/i,\r\n\trheader = /^h\\d$/i,\r\n\r\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\r\n\r\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\r\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\r\n\r\n\trsibling = /[+~]/,\r\n\trescape = /'|\\\\/g,\r\n\r\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\r\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\r\n\tfunescape = function( _, escaped, escapedWhitespace ) {\r\n\t\tvar high = \"0x\" + escaped - 0x10000;\r\n\t\t// NaN means non-codepoint\r\n\t\t// Support: Firefox<24\r\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\r\n\t\treturn high !== high || escapedWhitespace ?\r\n\t\t\tescaped :\r\n\t\t\thigh < 0 ?\r\n\t\t\t\t// BMP codepoint\r\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\r\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\r\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\r\n\t},\r\n\r\n\t// Used for iframes\r\n\t// See setDocument()\r\n\t// Removing the function wrapper causes a \"Permission Denied\"\r\n\t// error in IE\r\n\tunloadHandler = function() {\r\n\t\tsetDocument();\r\n\t};\r\n\r\n// Optimize for push.apply( _, NodeList )\r\ntry {\r\n\tpush.apply(\r\n\t\t(arr = slice.call( preferredDoc.childNodes )),\r\n\t\tpreferredDoc.childNodes\r\n\t);\r\n\t// Support: Android<4.0\r\n\t// Detect silently failing push.apply\r\n\tarr[ preferredDoc.childNodes.length ].nodeType;\r\n} catch ( e ) {\r\n\tpush = { apply: arr.length ?\r\n\r\n\t\t// Leverage slice if possible\r\n\t\tfunction( target, els ) {\r\n\t\t\tpush_native.apply( target, slice.call(els) );\r\n\t\t} :\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Otherwise append directly\r\n\t\tfunction( target, els ) {\r\n\t\t\tvar j = target.length,\r\n\t\t\t\ti = 0;\r\n\t\t\t// Can't trust NodeList.length\r\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\r\n\t\t\ttarget.length = j - 1;\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction Sizzle( selector, context, results, seed ) {\r\n\tvar match, elem, m, nodeType,\r\n\t\t// QSA vars\r\n\t\ti, groups, old, nid, newContext, newSelector;\r\n\r\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\r\n\t\tsetDocument( context );\r\n\t}\r\n\r\n\tcontext = context || document;\r\n\tresults = results || [];\r\n\tnodeType = context.nodeType;\r\n\r\n\tif ( typeof selector !== \"string\" || !selector ||\r\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\tif ( !seed && documentIsHTML ) {\r\n\r\n\t\t// Try to shortcut find operations when possible (e.g., not under DocumentFragment)\r\n\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\r\n\t\t\t// Speed-up: Sizzle(\"#ID\")\r\n\t\t\tif ( (m = match[1]) ) {\r\n\t\t\t\tif ( nodeType === 9 ) {\r\n\t\t\t\t\telem = context.getElementById( m );\r\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\r\n\t\t\t\t\t// nodes that are no longer in the document (jQuery #6963)\r\n\t\t\t\t\tif ( elem && elem.parentNode ) {\r\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\r\n\t\t\t\t\t\t// by name instead of ID\r\n\t\t\t\t\t\tif ( elem.id === m ) {\r\n\t\t\t\t\t\t\tresults.push( elem );\r\n\t\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Context is not a document\r\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\r\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\r\n\t\t\t\t\t\tresults.push( elem );\r\n\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t// Speed-up: Sizzle(\"TAG\")\r\n\t\t\t} else if ( match[2] ) {\r\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\r\n\t\t\t\treturn results;\r\n\r\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\r\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName ) {\r\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\r\n\t\t\t\treturn results;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// QSA path\r\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\r\n\t\t\tnid = old = expando;\r\n\t\t\tnewContext = context;\r\n\t\t\tnewSelector = nodeType !== 1 && selector;\r\n\r\n\t\t\t// qSA works strangely on Element-rooted queries\r\n\t\t\t// We can work around this by specifying an extra ID on the root\r\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\r\n\t\t\t// IE 8 doesn't work on object elements\r\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\r\n\t\t\t\tgroups = tokenize( selector );\r\n\r\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\r\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\r\n\t\t\t\t}\r\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\r\n\r\n\t\t\t\ti = groups.length;\r\n\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\r\n\t\t\t\t}\r\n\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;\r\n\t\t\t\tnewSelector = groups.join(\",\");\r\n\t\t\t}\r\n\r\n\t\t\tif ( newSelector ) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tpush.apply( results,\r\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn results;\r\n\t\t\t\t} catch(qsaError) {\r\n\t\t\t\t} finally {\r\n\t\t\t\t\tif ( !old ) {\r\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// All others\r\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\r\n}\r\n\r\n/**\r\n * Create key-value caches of limited size\r\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\r\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\r\n *\tdeleting the oldest entry\r\n */\r\nfunction createCache() {\r\n\tvar keys = [];\r\n\r\n\tfunction cache( key, value ) {\r\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\r\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\r\n\t\t\t// Only keep the most recent entries\r\n\t\t\tdelete cache[ keys.shift() ];\r\n\t\t}\r\n\t\treturn (cache[ key + \" \" ] = value);\r\n\t}\r\n\treturn cache;\r\n}\r\n\r\n/**\r\n * Mark a function for special use by Sizzle\r\n * @param {Function} fn The function to mark\r\n */\r\nfunction markFunction( fn ) {\r\n\tfn[ expando ] = true;\r\n\treturn fn;\r\n}\r\n\r\n/**\r\n * Support testing using an element\r\n * @param {Function} fn Passed the created div and expects a boolean result\r\n */\r\nfunction assert( fn ) {\r\n\tvar div = document.createElement(\"div\");\r\n\r\n\ttry {\r\n\t\treturn !!fn( div );\r\n\t} catch (e) {\r\n\t\treturn false;\r\n\t} finally {\r\n\t\t// Remove from its parent by default\r\n\t\tif ( div.parentNode ) {\r\n\t\t\tdiv.parentNode.removeChild( div );\r\n\t\t}\r\n\t\t// release memory in IE\r\n\t\tdiv = null;\r\n\t}\r\n}\r\n\r\n/**\r\n * Adds the same handler for all of the specified attrs\r\n * @param {String} attrs Pipe-separated list of attributes\r\n * @param {Function} handler The method that will be applied\r\n */\r\nfunction addHandle( attrs, handler ) {\r\n\tvar arr = attrs.split(\"|\"),\r\n\t\ti = attrs.length;\r\n\r\n\twhile ( i-- ) {\r\n\t\tExpr.attrHandle[ arr[i] ] = handler;\r\n\t}\r\n}\r\n\r\n/**\r\n * Checks document order of two siblings\r\n * @param {Element} a\r\n * @param {Element} b\r\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\r\n */\r\nfunction siblingCheck( a, b ) {\r\n\tvar cur = b && a,\r\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\r\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\r\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\r\n\r\n\t// Use IE sourceIndex if available on both nodes\r\n\tif ( diff ) {\r\n\t\treturn diff;\r\n\t}\r\n\r\n\t// Check if b follows a\r\n\tif ( cur ) {\r\n\t\twhile ( (cur = cur.nextSibling) ) {\r\n\t\t\tif ( cur === b ) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn a ? 1 : -1;\r\n}\r\n\r\n/**\r\n * Returns a function to use in pseudos for input types\r\n * @param {String} type\r\n */\r\nfunction createInputPseudo( type ) {\r\n\treturn function( elem ) {\r\n\t\tvar name = elem.nodeName.toLowerCase();\r\n\t\treturn name === \"input\" && elem.type === type;\r\n\t};\r\n}\r\n\r\n/**\r\n * Returns a function to use in pseudos for buttons\r\n * @param {String} type\r\n */\r\nfunction createButtonPseudo( type ) {\r\n\treturn function( elem ) {\r\n\t\tvar name = elem.nodeName.toLowerCase();\r\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\r\n\t};\r\n}\r\n\r\n/**\r\n * Returns a function to use in pseudos for positionals\r\n * @param {Function} fn\r\n */\r\nfunction createPositionalPseudo( fn ) {\r\n\treturn markFunction(function( argument ) {\r\n\t\targument = +argument;\r\n\t\treturn markFunction(function( seed, matches ) {\r\n\t\t\tvar j,\r\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\r\n\t\t\t\ti = matchIndexes.length;\r\n\r\n\t\t\t// Match elements found at the specified indexes\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\r\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n}\r\n\r\n/**\r\n * Checks a node for validity as a Sizzle context\r\n * @param {Element|Object=} context\r\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\r\n */\r\nfunction testContext( context ) {\r\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\r\n}\r\n\r\n// Expose support vars for convenience\r\nsupport = Sizzle.support = {};\r\n\r\n/**\r\n * Detects XML nodes\r\n * @param {Element|Object} elem An element or a document\r\n * @returns {Boolean} True iff elem is a non-HTML XML node\r\n */\r\nisXML = Sizzle.isXML = function( elem ) {\r\n\t// documentElement is verified for cases where it doesn't yet exist\r\n\t// (such as loading iframes in IE - #4833)\r\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\r\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\r\n};\r\n\r\n/**\r\n * Sets document-related variables once based on the current document\r\n * @param {Element|Object} [doc] An element or document object to use to set the document\r\n * @returns {Object} Returns the current document\r\n */\r\nsetDocument = Sizzle.setDocument = function( node ) {\r\n\tvar hasCompare, parent,\r\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\r\n\r\n\t// If no document and documentElement is available, return\r\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\r\n\t\treturn document;\r\n\t}\r\n\r\n\t// Set our document\r\n\tdocument = doc;\r\n\tdocElem = doc.documentElement;\r\n\tparent = doc.defaultView;\r\n\r\n\t// Support: IE>8\r\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\r\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\r\n\t// IE6-8 do not support the defaultView property so parent will be undefined\r\n\tif ( parent && parent !== parent.top ) {\r\n\t\t// IE11 does not have attachEvent, so all must suffer\r\n\t\tif ( parent.addEventListener ) {\r\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\r\n\t\t} else if ( parent.attachEvent ) {\r\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\r\n\t\t}\r\n\t}\r\n\r\n\t/* Support tests\r\n\t---------------------------------------------------------------------- */\r\n\tdocumentIsHTML = !isXML( doc );\r\n\r\n\t/* Attributes\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// Support: IE<8\r\n\t// Verify that getAttribute really returns attributes and not properties\r\n\t// (excepting IE8 booleans)\r\n\tsupport.attributes = assert(function( div ) {\r\n\t\tdiv.className = \"i\";\r\n\t\treturn !div.getAttribute(\"className\");\r\n\t});\r\n\r\n\t/* getElement(s)By*\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// Check if getElementsByTagName(\"*\") returns only elements\r\n\tsupport.getElementsByTagName = assert(function( div ) {\r\n\t\tdiv.appendChild( doc.createComment(\"\") );\r\n\t\treturn !div.getElementsByTagName(\"*\").length;\r\n\t});\r\n\r\n\t// Support: IE<9\r\n\tsupport.getElementsByClassName = rnative.test( doc.getElementsByClassName );\r\n\r\n\t// Support: IE<10\r\n\t// Check if getElementById returns elements by name\r\n\t// The broken getElementById methods don't pick up programatically-set names,\r\n\t// so use a roundabout getElementsByName test\r\n\tsupport.getById = assert(function( div ) {\r\n\t\tdocElem.appendChild( div ).id = expando;\r\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\r\n\t});\r\n\r\n\t// ID find and filter\r\n\tif ( support.getById ) {\r\n\t\tExpr.find[\"ID\"] = function( id, context ) {\r\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\r\n\t\t\t\tvar m = context.getElementById( id );\r\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\r\n\t\t\t\t// nodes that are no longer in the document #6963\r\n\t\t\t\treturn m && m.parentNode ? [ m ] : [];\r\n\t\t\t}\r\n\t\t};\r\n\t\tExpr.filter[\"ID\"] = function( id ) {\r\n\t\t\tvar attrId = id.replace( runescape, funescape );\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\r\n\t\t\t};\r\n\t\t};\r\n\t} else {\r\n\t\t// Support: IE6/7\r\n\t\t// getElementById is not reliable as a find shortcut\r\n\t\tdelete Expr.find[\"ID\"];\r\n\r\n\t\tExpr.filter[\"ID\"] = function( id ) {\r\n\t\t\tvar attrId = id.replace( runescape, funescape );\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\r\n\t\t\t\treturn node && node.value === attrId;\r\n\t\t\t};\r\n\t\t};\r\n\t}\r\n\r\n\t// Tag\r\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\r\n\t\tfunction( tag, context ) {\r\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\r\n\t\t\t\treturn context.getElementsByTagName( tag );\r\n\r\n\t\t\t// DocumentFragment nodes don't have gEBTN\r\n\t\t\t} else if ( support.qsa ) {\r\n\t\t\t\treturn context.querySelectorAll( tag );\r\n\t\t\t}\r\n\t\t} :\r\n\r\n\t\tfunction( tag, context ) {\r\n\t\t\tvar elem,\r\n\t\t\t\ttmp = [],\r\n\t\t\t\ti = 0,\r\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\r\n\t\t\t\tresults = context.getElementsByTagName( tag );\r\n\r\n\t\t\t// Filter out possible comments\r\n\t\t\tif ( tag === \"*\" ) {\r\n\t\t\t\twhile ( (elem = results[i++]) ) {\r\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\r\n\t\t\t\t\t\ttmp.push( elem );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn tmp;\r\n\t\t\t}\r\n\t\t\treturn results;\r\n\t\t};\r\n\r\n\t// Class\r\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\r\n\t\tif ( documentIsHTML ) {\r\n\t\t\treturn context.getElementsByClassName( className );\r\n\t\t}\r\n\t};\r\n\r\n\t/* QSA/matchesSelector\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// QSA and matchesSelector support\r\n\r\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\r\n\trbuggyMatches = [];\r\n\r\n\t// qSa(:focus) reports false when true (Chrome 21)\r\n\t// We allow this because of a bug in IE8/9 that throws an error\r\n\t// whenever `document.activeElement` is accessed on an iframe\r\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\r\n\t// See http://bugs.jquery.com/ticket/13378\r\n\trbuggyQSA = [];\r\n\r\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\r\n\t\t// Build QSA regex\r\n\t\t// Regex strategy adopted from Diego Perini\r\n\t\tassert(function( div ) {\r\n\t\t\t// Select is set to empty string on purpose\r\n\t\t\t// This is to test IE's treatment of not explicitly\r\n\t\t\t// setting a boolean content attribute,\r\n\t\t\t// since its presence should be enough\r\n\t\t\t// http://bugs.jquery.com/ticket/12359\r\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\r\n\t\t\t\t\"<select id='\" + expando + \"-\\f]' msallowcapture=''>\" +\r\n\t\t\t\t\"<option selected=''></option></select>\";\r\n\r\n\t\t\t// Support: IE8, Opera 11-12.16\r\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\r\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\r\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\r\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\r\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\r\n\t\t\t}\r\n\r\n\t\t\t// Support: IE8\r\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\r\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\r\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\r\n\t\t\t}\r\n\r\n\t\t\t// Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+\r\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\r\n\t\t\t\trbuggyQSA.push(\"~=\");\r\n\t\t\t}\r\n\r\n\t\t\t// Webkit/Opera - :checked should return selected option elements\r\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\r\n\t\t\t// IE8 throws error here and will not see later tests\r\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\r\n\t\t\t\trbuggyQSA.push(\":checked\");\r\n\t\t\t}\r\n\r\n\t\t\t// Support: Safari 8+, iOS 8+\r\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\r\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\r\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\r\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tassert(function( div ) {\r\n\t\t\t// Support: Windows 8 Native Apps\r\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\r\n\t\t\tvar input = doc.createElement(\"input\");\r\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\r\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\r\n\r\n\t\t\t// Support: IE8\r\n\t\t\t// Enforce case-sensitivity of name attribute\r\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\r\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\r\n\t\t\t}\r\n\r\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\r\n\t\t\t// IE8 throws error here and will not see later tests\r\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\r\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\r\n\t\t\t}\r\n\r\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\r\n\t\t\tdiv.querySelectorAll(\"*,:x\");\r\n\t\t\trbuggyQSA.push(\",.*:\");\r\n\t\t});\r\n\t}\r\n\r\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\r\n\t\tdocElem.webkitMatchesSelector ||\r\n\t\tdocElem.mozMatchesSelector ||\r\n\t\tdocElem.oMatchesSelector ||\r\n\t\tdocElem.msMatchesSelector) )) ) {\r\n\r\n\t\tassert(function( div ) {\r\n\t\t\t// Check to see if it's possible to do matchesSelector\r\n\t\t\t// on a disconnected node (IE 9)\r\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\r\n\r\n\t\t\t// This should fail with an exception\r\n\t\t\t// Gecko does not error, returns false instead\r\n\t\t\tmatches.call( div, \"[s!='']:x\" );\r\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\r\n\t\t});\r\n\t}\r\n\r\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\r\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\r\n\r\n\t/* Contains\r\n\t---------------------------------------------------------------------- */\r\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\r\n\r\n\t// Element contains another\r\n\t// Purposefully does not implement inclusive descendent\r\n\t// As in, an element does not contain itself\r\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\r\n\t\tfunction( a, b ) {\r\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\r\n\t\t\t\tbup = b && b.parentNode;\r\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\r\n\t\t\t\tadown.contains ?\r\n\t\t\t\t\tadown.contains( bup ) :\r\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\r\n\t\t\t));\r\n\t\t} :\r\n\t\tfunction( a, b ) {\r\n\t\t\tif ( b ) {\r\n\t\t\t\twhile ( (b = b.parentNode) ) {\r\n\t\t\t\t\tif ( b === a ) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t};\r\n\r\n\t/* Sorting\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// Document order sorting\r\n\tsortOrder = hasCompare ?\r\n\tfunction( a, b ) {\r\n\r\n\t\t// Flag for duplicate removal\r\n\t\tif ( a === b ) {\r\n\t\t\thasDuplicate = true;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t// Sort on method existence if only one input has compareDocumentPosition\r\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\r\n\t\tif ( compare ) {\r\n\t\t\treturn compare;\r\n\t\t}\r\n\r\n\t\t// Calculate position if both inputs belong to the same document\r\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\r\n\t\t\ta.compareDocumentPosition( b ) :\r\n\r\n\t\t\t// Otherwise we know they are disconnected\r\n\t\t\t1;\r\n\r\n\t\t// Disconnected nodes\r\n\t\tif ( compare & 1 ||\r\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\r\n\r\n\t\t\t// Choose the first element that is related to our preferred document\r\n\t\t\tif ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tif ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\r\n\t\t\t// Maintain original order\r\n\t\t\treturn sortInput ?\r\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\r\n\t\t\t\t0;\r\n\t\t}\r\n\r\n\t\treturn compare & 4 ? -1 : 1;\r\n\t} :\r\n\tfunction( a, b ) {\r\n\t\t// Exit early if the nodes are identical\r\n\t\tif ( a === b ) {\r\n\t\t\thasDuplicate = true;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tvar cur,\r\n\t\t\ti = 0,\r\n\t\t\taup = a.parentNode,\r\n\t\t\tbup = b.parentNode,\r\n\t\t\tap = [ a ],\r\n\t\t\tbp = [ b ];\r\n\r\n\t\t// Parentless nodes are either documents or disconnected\r\n\t\tif ( !aup || !bup ) {\r\n\t\t\treturn a === doc ? -1 :\r\n\t\t\t\tb === doc ? 1 :\r\n\t\t\t\taup ? -1 :\r\n\t\t\t\tbup ? 1 :\r\n\t\t\t\tsortInput ?\r\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\r\n\t\t\t\t0;\r\n\r\n\t\t// If the nodes are siblings, we can do a quick check\r\n\t\t} else if ( aup === bup ) {\r\n\t\t\treturn siblingCheck( a, b );\r\n\t\t}\r\n\r\n\t\t// Otherwise we need full lists of their ancestors for comparison\r\n\t\tcur = a;\r\n\t\twhile ( (cur = cur.parentNode) ) {\r\n\t\t\tap.unshift( cur );\r\n\t\t}\r\n\t\tcur = b;\r\n\t\twhile ( (cur = cur.parentNode) ) {\r\n\t\t\tbp.unshift( cur );\r\n\t\t}\r\n\r\n\t\t// Walk down the tree looking for a discrepancy\r\n\t\twhile ( ap[i] === bp[i] ) {\r\n\t\t\ti++;\r\n\t\t}\r\n\r\n\t\treturn i ?\r\n\t\t\t// Do a sibling check if the nodes have a common ancestor\r\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\r\n\r\n\t\t\t// Otherwise nodes in our document sort first\r\n\t\t\tap[i] === preferredDoc ? -1 :\r\n\t\t\tbp[i] === preferredDoc ? 1 :\r\n\t\t\t0;\r\n\t};\r\n\r\n\treturn doc;\r\n};\r\n\r\nSizzle.matches = function( expr, elements ) {\r\n\treturn Sizzle( expr, null, null, elements );\r\n};\r\n\r\nSizzle.matchesSelector = function( elem, expr ) {\r\n\t// Set document vars if needed\r\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\r\n\t\tsetDocument( elem );\r\n\t}\r\n\r\n\t// Make sure that attribute selectors are quoted\r\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\r\n\r\n\tif ( support.matchesSelector && documentIsHTML &&\r\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\r\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\r\n\r\n\t\ttry {\r\n\t\t\tvar ret = matches.call( elem, expr );\r\n\r\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\r\n\t\t\tif ( ret || support.disconnectedMatch ||\r\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\r\n\t\t\t\t\t// fragment in IE 9\r\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\t\t} catch (e) {}\r\n\t}\r\n\r\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\r\n};\r\n\r\nSizzle.contains = function( context, elem ) {\r\n\t// Set document vars if needed\r\n\tif ( ( context.ownerDocument || context ) !== document ) {\r\n\t\tsetDocument( context );\r\n\t}\r\n\treturn contains( context, elem );\r\n};\r\n\r\nSizzle.attr = function( elem, name ) {\r\n\t// Set document vars if needed\r\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\r\n\t\tsetDocument( elem );\r\n\t}\r\n\r\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\r\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\r\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\r\n\t\t\tfn( elem, name, !documentIsHTML ) :\r\n\t\t\tundefined;\r\n\r\n\treturn val !== undefined ?\r\n\t\tval :\r\n\t\tsupport.attributes || !documentIsHTML ?\r\n\t\t\telem.getAttribute( name ) :\r\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\r\n\t\t\t\tval.value :\r\n\t\t\t\tnull;\r\n};\r\n\r\nSizzle.error = function( msg ) {\r\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\r\n};\r\n\r\n/**\r\n * Document sorting and removing duplicates\r\n * @param {ArrayLike} results\r\n */\r\nSizzle.uniqueSort = function( results ) {\r\n\tvar elem,\r\n\t\tduplicates = [],\r\n\t\tj = 0,\r\n\t\ti = 0;\r\n\r\n\t// Unless we *know* we can detect duplicates, assume their presence\r\n\thasDuplicate = !support.detectDuplicates;\r\n\tsortInput = !support.sortStable && results.slice( 0 );\r\n\tresults.sort( sortOrder );\r\n\r\n\tif ( hasDuplicate ) {\r\n\t\twhile ( (elem = results[i++]) ) {\r\n\t\t\tif ( elem === results[ i ] ) {\r\n\t\t\t\tj = duplicates.push( i );\r\n\t\t\t}\r\n\t\t}\r\n\t\twhile ( j-- ) {\r\n\t\t\tresults.splice( duplicates[ j ], 1 );\r\n\t\t}\r\n\t}\r\n\r\n\t// Clear input after sorting to release objects\r\n\t// See https://github.com/jquery/sizzle/pull/225\r\n\tsortInput = null;\r\n\r\n\treturn results;\r\n};\r\n\r\n/**\r\n * Utility function for retrieving the text value of an array of DOM nodes\r\n * @param {Array|Element} elem\r\n */\r\ngetText = Sizzle.getText = function( elem ) {\r\n\tvar node,\r\n\t\tret = \"\",\r\n\t\ti = 0,\r\n\t\tnodeType = elem.nodeType;\r\n\r\n\tif ( !nodeType ) {\r\n\t\t// If no nodeType, this is expected to be an array\r\n\t\twhile ( (node = elem[i++]) ) {\r\n\t\t\t// Do not traverse comment nodes\r\n\t\t\tret += getText( node );\r\n\t\t}\r\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\r\n\t\t// Use textContent for elements\r\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\r\n\t\tif ( typeof elem.textContent === \"string\" ) {\r\n\t\t\treturn elem.textContent;\r\n\t\t} else {\r\n\t\t\t// Traverse its children\r\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\r\n\t\t\t\tret += getText( elem );\r\n\t\t\t}\r\n\t\t}\r\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\r\n\t\treturn elem.nodeValue;\r\n\t}\r\n\t// Do not include comment or processing instruction nodes\r\n\r\n\treturn ret;\r\n};\r\n\r\nExpr = Sizzle.selectors = {\r\n\r\n\t// Can be adjusted by the user\r\n\tcacheLength: 50,\r\n\r\n\tcreatePseudo: markFunction,\r\n\r\n\tmatch: matchExpr,\r\n\r\n\tattrHandle: {},\r\n\r\n\tfind: {},\r\n\r\n\trelative: {\r\n\t\t\">\": { dir: \"parentNode\", first: true },\r\n\t\t\" \": { dir: \"parentNode\" },\r\n\t\t\"+\": { dir: \"previousSibling\", first: true },\r\n\t\t\"~\": { dir: \"previousSibling\" }\r\n\t},\r\n\r\n\tpreFilter: {\r\n\t\t\"ATTR\": function( match ) {\r\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\r\n\r\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\r\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\r\n\r\n\t\t\tif ( match[2] === \"~=\" ) {\r\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\r\n\t\t\t}\r\n\r\n\t\t\treturn match.slice( 0, 4 );\r\n\t\t},\r\n\r\n\t\t\"CHILD\": function( match ) {\r\n\t\t\t/* matches from matchExpr[\"CHILD\"]\r\n\t\t\t\t1 type (only|nth|...)\r\n\t\t\t\t2 what (child|of-type)\r\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\r\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\r\n\t\t\t\t5 sign of xn-component\r\n\t\t\t\t6 x of xn-component\r\n\t\t\t\t7 sign of y-component\r\n\t\t\t\t8 y of y-component\r\n\t\t\t*/\r\n\t\t\tmatch[1] = match[1].toLowerCase();\r\n\r\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\r\n\t\t\t\t// nth-* requires argument\r\n\t\t\t\tif ( !match[3] ) {\r\n\t\t\t\t\tSizzle.error( match[0] );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\r\n\t\t\t\t// remember that false/true cast respectively to 0/1\r\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\r\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\r\n\r\n\t\t\t// other types prohibit arguments\r\n\t\t\t} else if ( match[3] ) {\r\n\t\t\t\tSizzle.error( match[0] );\r\n\t\t\t}\r\n\r\n\t\t\treturn match;\r\n\t\t},\r\n\r\n\t\t\"PSEUDO\": function( match ) {\r\n\t\t\tvar excess,\r\n\t\t\t\tunquoted = !match[6] && match[2];\r\n\r\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// Accept quoted arguments as-is\r\n\t\t\tif ( match[3] ) {\r\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\r\n\r\n\t\t\t// Strip excess characters from unquoted arguments\r\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\r\n\t\t\t\t// Get excess from tokenize (recursively)\r\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\r\n\t\t\t\t// advance to the next closing parenthesis\r\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\r\n\r\n\t\t\t\t// excess is a negative index\r\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\r\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\r\n\t\t\t}\r\n\r\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\r\n\t\t\treturn match.slice( 0, 3 );\r\n\t\t}\r\n\t},\r\n\r\n\tfilter: {\r\n\r\n\t\t\"TAG\": function( nodeNameSelector ) {\r\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\r\n\t\t\treturn nodeNameSelector === \"*\" ?\r\n\t\t\t\tfunction() { return true; } :\r\n\t\t\t\tfunction( elem ) {\r\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\r\n\t\t\t\t};\r\n\t\t},\r\n\r\n\t\t\"CLASS\": function( className ) {\r\n\t\t\tvar pattern = classCache[ className + \" \" ];\r\n\r\n\t\t\treturn pattern ||\r\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\r\n\t\t\t\tclassCache( className, function( elem ) {\r\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\r\n\t\t\t\t});\r\n\t\t},\r\n\r\n\t\t\"ATTR\": function( name, operator, check ) {\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\tvar result = Sizzle.attr( elem, name );\r\n\r\n\t\t\t\tif ( result == null ) {\r\n\t\t\t\t\treturn operator === \"!=\";\r\n\t\t\t\t}\r\n\t\t\t\tif ( !operator ) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresult += \"\";\r\n\r\n\t\t\t\treturn operator === \"=\" ? result === check :\r\n\t\t\t\t\toperator === \"!=\" ? result !== check :\r\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\r\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\r\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\r\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\r\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\r\n\t\t\t\t\tfalse;\r\n\t\t\t};\r\n\t\t},\r\n\r\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\r\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\r\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\r\n\t\t\t\tofType = what === \"of-type\";\r\n\r\n\t\t\treturn first === 1 && last === 0 ?\r\n\r\n\t\t\t\t// Shortcut for :nth-*(n)\r\n\t\t\t\tfunction( elem ) {\r\n\t\t\t\t\treturn !!elem.parentNode;\r\n\t\t\t\t} :\r\n\r\n\t\t\t\tfunction( elem, context, xml ) {\r\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\r\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\r\n\t\t\t\t\t\tparent = elem.parentNode,\r\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\r\n\t\t\t\t\t\tuseCache = !xml && !ofType;\r\n\r\n\t\t\t\t\tif ( parent ) {\r\n\r\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\r\n\t\t\t\t\t\tif ( simple ) {\r\n\t\t\t\t\t\t\twhile ( dir ) {\r\n\t\t\t\t\t\t\t\tnode = elem;\r\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\r\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\r\n\t\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\r\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\r\n\r\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\r\n\t\t\t\t\t\tif ( forward && useCache ) {\r\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\r\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\r\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\r\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\r\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\r\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\r\n\r\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\r\n\r\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\r\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\r\n\r\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\r\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\r\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Use previously-cached element index if available\r\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\r\n\t\t\t\t\t\t\tdiff = cache[1];\r\n\r\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\r\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\r\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\r\n\r\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\r\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\r\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\r\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\r\n\t\t\t\t\t\tdiff -= last;\r\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t},\r\n\r\n\t\t\"PSEUDO\": function( pseudo, argument ) {\r\n\t\t\t// pseudo-class names are case-insensitive\r\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\r\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\r\n\t\t\t// Remember that setFilters inherits from pseudos\r\n\t\t\tvar args,\r\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\r\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\r\n\r\n\t\t\t// The user may use createPseudo to indicate that\r\n\t\t\t// arguments are needed to create the filter function\r\n\t\t\t// just as Sizzle does\r\n\t\t\tif ( fn[ expando ] ) {\r\n\t\t\t\treturn fn( argument );\r\n\t\t\t}\r\n\r\n\t\t\t// But maintain support for old signatures\r\n\t\t\tif ( fn.length > 1 ) {\r\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\r\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\r\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\r\n\t\t\t\t\t\tvar idx,\r\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\r\n\t\t\t\t\t\t\ti = matched.length;\r\n\t\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\r\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}) :\r\n\t\t\t\t\tfunction( elem ) {\r\n\t\t\t\t\t\treturn fn( elem, 0, args );\r\n\t\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn fn;\r\n\t\t}\r\n\t},\r\n\r\n\tpseudos: {\r\n\t\t// Potentially complex pseudos\r\n\t\t\"not\": markFunction(function( selector ) {\r\n\t\t\t// Trim the selector passed to compile\r\n\t\t\t// to avoid treating leading and trailing\r\n\t\t\t// spaces as combinators\r\n\t\t\tvar input = [],\r\n\t\t\t\tresults = [],\r\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\r\n\r\n\t\t\treturn matcher[ expando ] ?\r\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\r\n\t\t\t\t\tvar elem,\r\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\r\n\t\t\t\t\t\ti = seed.length;\r\n\r\n\t\t\t\t\t// Match elements unmatched by `matcher`\r\n\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\r\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}) :\r\n\t\t\t\tfunction( elem, context, xml ) {\r\n\t\t\t\t\tinput[0] = elem;\r\n\t\t\t\t\tmatcher( input, null, xml, results );\r\n\t\t\t\t\t// Don't keep the element (issue #299)\r\n\t\t\t\t\tinput[0] = null;\r\n\t\t\t\t\treturn !results.pop();\r\n\t\t\t\t};\r\n\t\t}),\r\n\r\n\t\t\"has\": markFunction(function( selector ) {\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\r\n\t\t\t};\r\n\t\t}),\r\n\r\n\t\t\"contains\": markFunction(function( text ) {\r\n\t\t\ttext = text.replace( runescape, funescape );\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\r\n\t\t\t};\r\n\t\t}),\r\n\r\n\t\t// \"Whether an element is represented by a :lang() selector\r\n\t\t// is based solely on the element's language value\r\n\t\t// being equal to the identifier C,\r\n\t\t// or beginning with the identifier C immediately followed by \"-\".\r\n\t\t// The matching of C against the element's language value is performed case-insensitively.\r\n\t\t// The identifier C does not have to be a valid language name.\"\r\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\r\n\t\t\"lang\": markFunction( function( lang ) {\r\n\t\t\t// lang value must be a valid identifier\r\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\r\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\r\n\t\t\t}\r\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\tvar elemLang;\r\n\t\t\t\tdo {\r\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\r\n\t\t\t\t\t\telem.lang :\r\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\r\n\r\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\r\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\t\t}),\r\n\r\n\t\t// Miscellaneous\r\n\t\t\"target\": function( elem ) {\r\n\t\t\tvar hash = window.location && window.location.hash;\r\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\r\n\t\t},\r\n\r\n\t\t\"root\": function( elem ) {\r\n\t\t\treturn elem === docElem;\r\n\t\t},\r\n\r\n\t\t\"focus\": function( elem ) {\r\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\r\n\t\t},\r\n\r\n\t\t// Boolean properties\r\n\t\t\"enabled\": function( elem ) {\r\n\t\t\treturn elem.disabled === false;\r\n\t\t},\r\n\r\n\t\t\"disabled\": function( elem ) {\r\n\t\t\treturn elem.disabled === true;\r\n\t\t},\r\n\r\n\t\t\"checked\": function( elem ) {\r\n\t\t\t// In CSS3, :checked should return both checked and selected elements\r\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\r\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\r\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\r\n\t\t},\r\n\r\n\t\t\"selected\": function( elem ) {\r\n\t\t\t// Accessing this property makes selected-by-default\r\n\t\t\t// options in Safari work properly\r\n\t\t\tif ( elem.parentNode ) {\r\n\t\t\t\telem.parentNode.selectedIndex;\r\n\t\t\t}\r\n\r\n\t\t\treturn elem.selected === true;\r\n\t\t},\r\n\r\n\t\t// Contents\r\n\t\t\"empty\": function( elem ) {\r\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\r\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\r\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\r\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\r\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\r\n\t\t\t\tif ( elem.nodeType < 6 ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t\"parent\": function( elem ) {\r\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\r\n\t\t},\r\n\r\n\t\t// Element/input types\r\n\t\t\"header\": function( elem ) {\r\n\t\t\treturn rheader.test( elem.nodeName );\r\n\t\t},\r\n\r\n\t\t\"input\": function( elem ) {\r\n\t\t\treturn rinputs.test( elem.nodeName );\r\n\t\t},\r\n\r\n\t\t\"button\": function( elem ) {\r\n\t\t\tvar name = elem.nodeName.toLowerCase();\r\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\r\n\t\t},\r\n\r\n\t\t\"text\": function( elem ) {\r\n\t\t\tvar attr;\r\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\r\n\t\t\t\telem.type === \"text\" &&\r\n\r\n\t\t\t\t// Support: IE<8\r\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\r\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\r\n\t\t},\r\n\r\n\t\t// Position-in-collection\r\n\t\t\"first\": createPositionalPseudo(function() {\r\n\t\t\treturn [ 0 ];\r\n\t\t}),\r\n\r\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\r\n\t\t\treturn [ length - 1 ];\r\n\t\t}),\r\n\r\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\r\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\r\n\t\t}),\r\n\r\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\r\n\t\t\tvar i = 0;\r\n\t\t\tfor ( ; i < length; i += 2 ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t}),\r\n\r\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\r\n\t\t\tvar i = 1;\r\n\t\t\tfor ( ; i < length; i += 2 ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t}),\r\n\r\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\r\n\t\t\tvar i = argument < 0 ? argument + length : argument;\r\n\t\t\tfor ( ; --i >= 0; ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t}),\r\n\r\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\r\n\t\t\tvar i = argument < 0 ? argument + length : argument;\r\n\t\t\tfor ( ; ++i < length; ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t})\r\n\t}\r\n};\r\n\r\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\r\n\r\n// Add button/input type pseudos\r\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\r\n\tExpr.pseudos[ i ] = createInputPseudo( i );\r\n}\r\nfor ( i in { submit: true, reset: true } ) {\r\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\r\n}\r\n\r\n// Easy API for creating new setFilters\r\nfunction setFilters() {}\r\nsetFilters.prototype = Expr.filters = Expr.pseudos;\r\nExpr.setFilters = new setFilters();\r\n\r\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\r\n\tvar matched, match, tokens, type,\r\n\t\tsoFar, groups, preFilters,\r\n\t\tcached = tokenCache[ selector + \" \" ];\r\n\r\n\tif ( cached ) {\r\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\r\n\t}\r\n\r\n\tsoFar = selector;\r\n\tgroups = [];\r\n\tpreFilters = Expr.preFilter;\r\n\r\n\twhile ( soFar ) {\r\n\r\n\t\t// Comma and first run\r\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\r\n\t\t\tif ( match ) {\r\n\t\t\t\t// Don't consume trailing commas as valid\r\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\r\n\t\t\t}\r\n\t\t\tgroups.push( (tokens = []) );\r\n\t\t}\r\n\r\n\t\tmatched = false;\r\n\r\n\t\t// Combinators\r\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\r\n\t\t\tmatched = match.shift();\r\n\t\t\ttokens.push({\r\n\t\t\t\tvalue: matched,\r\n\t\t\t\t// Cast descendant combinators to space\r\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\r\n\t\t\t});\r\n\t\t\tsoFar = soFar.slice( matched.length );\r\n\t\t}\r\n\r\n\t\t// Filters\r\n\t\tfor ( type in Expr.filter ) {\r\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\r\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\r\n\t\t\t\tmatched = match.shift();\r\n\t\t\t\ttokens.push({\r\n\t\t\t\t\tvalue: matched,\r\n\t\t\t\t\ttype: type,\r\n\t\t\t\t\tmatches: match\r\n\t\t\t\t});\r\n\t\t\t\tsoFar = soFar.slice( matched.length );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( !matched ) {\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t// Return the length of the invalid excess\r\n\t// if we're just parsing\r\n\t// Otherwise, throw an error or return tokens\r\n\treturn parseOnly ?\r\n\t\tsoFar.length :\r\n\t\tsoFar ?\r\n\t\t\tSizzle.error( selector ) :\r\n\t\t\t// Cache the tokens\r\n\t\t\ttokenCache( selector, groups ).slice( 0 );\r\n};\r\n\r\nfunction toSelector( tokens ) {\r\n\tvar i = 0,\r\n\t\tlen = tokens.length,\r\n\t\tselector = \"\";\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tselector += tokens[i].value;\r\n\t}\r\n\treturn selector;\r\n}\r\n\r\nfunction addCombinator( matcher, combinator, base ) {\r\n\tvar dir = combinator.dir,\r\n\t\tcheckNonElements = base && dir === \"parentNode\",\r\n\t\tdoneName = done++;\r\n\r\n\treturn combinator.first ?\r\n\t\t// Check against closest ancestor/preceding element\r\n\t\tfunction( elem, context, xml ) {\r\n\t\t\twhile ( (elem = elem[ dir ]) ) {\r\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\r\n\t\t\t\t\treturn matcher( elem, context, xml );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} :\r\n\r\n\t\t// Check against all ancestor/preceding elements\r\n\t\tfunction( elem, context, xml ) {\r\n\t\t\tvar oldCache, outerCache,\r\n\t\t\t\tnewCache = [ dirruns, doneName ];\r\n\r\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\r\n\t\t\tif ( xml ) {\r\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\r\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\r\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\r\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\r\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\r\n\t\t\t\t\t\tif ( (oldCache = outerCache[ dir ]) &&\r\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\r\n\r\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\r\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\r\n\t\t\t\t\t\t\touterCache[ dir ] = newCache;\r\n\r\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\r\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\r\n\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n}\r\n\r\nfunction elementMatcher( matchers ) {\r\n\treturn matchers.length > 1 ?\r\n\t\tfunction( elem, context, xml ) {\r\n\t\t\tvar i = matchers.length;\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t} :\r\n\t\tmatchers[0];\r\n}\r\n\r\nfunction multipleContexts( selector, contexts, results ) {\r\n\tvar i = 0,\r\n\t\tlen = contexts.length;\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tSizzle( selector, contexts[i], results );\r\n\t}\r\n\treturn results;\r\n}\r\n\r\nfunction condense( unmatched, map, filter, context, xml ) {\r\n\tvar elem,\r\n\t\tnewUnmatched = [],\r\n\t\ti = 0,\r\n\t\tlen = unmatched.length,\r\n\t\tmapped = map != null;\r\n\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tif ( (elem = unmatched[i]) ) {\r\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\r\n\t\t\t\tnewUnmatched.push( elem );\r\n\t\t\t\tif ( mapped ) {\r\n\t\t\t\t\tmap.push( i );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn newUnmatched;\r\n}\r\n\r\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\r\n\tif ( postFilter && !postFilter[ expando ] ) {\r\n\t\tpostFilter = setMatcher( postFilter );\r\n\t}\r\n\tif ( postFinder && !postFinder[ expando ] ) {\r\n\t\tpostFinder = setMatcher( postFinder, postSelector );\r\n\t}\r\n\treturn markFunction(function( seed, results, context, xml ) {\r\n\t\tvar temp, i, elem,\r\n\t\t\tpreMap = [],\r\n\t\t\tpostMap = [],\r\n\t\t\tpreexisting = results.length,\r\n\r\n\t\t\t// Get initial elements from seed or context\r\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\r\n\r\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\r\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\r\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\r\n\t\t\t\telems,\r\n\r\n\t\t\tmatcherOut = matcher ?\r\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\r\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\r\n\r\n\t\t\t\t\t// ...intermediate processing is necessary\r\n\t\t\t\t\t[] :\r\n\r\n\t\t\t\t\t// ...otherwise use results directly\r\n\t\t\t\t\tresults :\r\n\t\t\t\tmatcherIn;\r\n\r\n\t\t// Find primary matches\r\n\t\tif ( matcher ) {\r\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\r\n\t\t}\r\n\r\n\t\t// Apply postFilter\r\n\t\tif ( postFilter ) {\r\n\t\t\ttemp = condense( matcherOut, postMap );\r\n\t\t\tpostFilter( temp, [], context, xml );\r\n\r\n\t\t\t// Un-match failing elements by moving them back to matcherIn\r\n\t\t\ti = temp.length;\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tif ( (elem = temp[i]) ) {\r\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( seed ) {\r\n\t\t\tif ( postFinder || preFilter ) {\r\n\t\t\t\tif ( postFinder ) {\r\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\r\n\t\t\t\t\ttemp = [];\r\n\t\t\t\t\ti = matcherOut.length;\r\n\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\r\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\r\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\r\n\t\t\t\ti = matcherOut.length;\r\n\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\r\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\r\n\r\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t// Add elements to results, through postFinder if defined\r\n\t\t} else {\r\n\t\t\tmatcherOut = condense(\r\n\t\t\t\tmatcherOut === results ?\r\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\r\n\t\t\t\t\tmatcherOut\r\n\t\t\t);\r\n\t\t\tif ( postFinder ) {\r\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\r\n\t\t\t} else {\r\n\t\t\t\tpush.apply( results, matcherOut );\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction matcherFromTokens( tokens ) {\r\n\tvar checkContext, matcher, j,\r\n\t\tlen = tokens.length,\r\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\r\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\r\n\t\ti = leadingRelative ? 1 : 0,\r\n\r\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\r\n\t\tmatchContext = addCombinator( function( elem ) {\r\n\t\t\treturn elem === checkContext;\r\n\t\t}, implicitRelative, true ),\r\n\t\tmatchAnyContext = addCombinator( function( elem ) {\r\n\t\t\treturn indexOf( checkContext, elem ) > -1;\r\n\t\t}, implicitRelative, true ),\r\n\t\tmatchers = [ function( elem, context, xml ) {\r\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\r\n\t\t\t\t(checkContext = context).nodeType ?\r\n\t\t\t\t\tmatchContext( elem, context, xml ) :\r\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\r\n\t\t\t// Avoid hanging onto element (issue #299)\r\n\t\t\tcheckContext = null;\r\n\t\t\treturn ret;\r\n\t\t} ];\r\n\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\r\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\r\n\t\t} else {\r\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\r\n\r\n\t\t\t// Return special upon seeing a positional matcher\r\n\t\t\tif ( matcher[ expando ] ) {\r\n\t\t\t\t// Find the next relative operator (if any) for proper handling\r\n\t\t\t\tj = ++i;\r\n\t\t\t\tfor ( ; j < len; j++ ) {\r\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn setMatcher(\r\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\r\n\t\t\t\t\ti > 1 && toSelector(\r\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\r\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\r\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\r\n\t\t\t\t\tmatcher,\r\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\r\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\r\n\t\t\t\t\tj < len && toSelector( tokens )\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tmatchers.push( matcher );\r\n\t\t}\r\n\t}\r\n\r\n\treturn elementMatcher( matchers );\r\n}\r\n\r\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\r\n\tvar bySet = setMatchers.length > 0,\r\n\t\tbyElement = elementMatchers.length > 0,\r\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\r\n\t\t\tvar elem, j, matcher,\r\n\t\t\t\tmatchedCount = 0,\r\n\t\t\t\ti = \"0\",\r\n\t\t\t\tunmatched = seed && [],\r\n\t\t\t\tsetMatched = [],\r\n\t\t\t\tcontextBackup = outermostContext,\r\n\t\t\t\t// We must always have either seed elements or outermost context\r\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\r\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\r\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\r\n\t\t\t\tlen = elems.length;\r\n\r\n\t\t\tif ( outermost ) {\r\n\t\t\t\toutermostContext = context !== document && context;\r\n\t\t\t}\r\n\r\n\t\t\t// Add elements passing elementMatchers directly to results\r\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\r\n\t\t\t// Support: IE<9, Safari\r\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\r\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\r\n\t\t\t\tif ( byElement && elem ) {\r\n\t\t\t\t\tj = 0;\r\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\r\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\r\n\t\t\t\t\t\t\tresults.push( elem );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( outermost ) {\r\n\t\t\t\t\t\tdirruns = dirrunsUnique;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Track unmatched elements for set filters\r\n\t\t\t\tif ( bySet ) {\r\n\t\t\t\t\t// They will have gone through all possible matchers\r\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\r\n\t\t\t\t\t\tmatchedCount--;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Lengthen the array for every element, matched or not\r\n\t\t\t\t\tif ( seed ) {\r\n\t\t\t\t\t\tunmatched.push( elem );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Apply set filters to unmatched elements\r\n\t\t\tmatchedCount += i;\r\n\t\t\tif ( bySet && i !== matchedCount ) {\r\n\t\t\t\tj = 0;\r\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\r\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( seed ) {\r\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\r\n\t\t\t\t\tif ( matchedCount > 0 ) {\r\n\t\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\r\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\r\n\t\t\t\t\tsetMatched = condense( setMatched );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Add matches to results\r\n\t\t\t\tpush.apply( results, setMatched );\r\n\r\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\r\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\r\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\r\n\r\n\t\t\t\t\tSizzle.uniqueSort( results );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Override manipulation of globals by nested matchers\r\n\t\t\tif ( outermost ) {\r\n\t\t\t\tdirruns = dirrunsUnique;\r\n\t\t\t\toutermostContext = contextBackup;\r\n\t\t\t}\r\n\r\n\t\t\treturn unmatched;\r\n\t\t};\r\n\r\n\treturn bySet ?\r\n\t\tmarkFunction( superMatcher ) :\r\n\t\tsuperMatcher;\r\n}\r\n\r\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\r\n\tvar i,\r\n\t\tsetMatchers = [],\r\n\t\telementMatchers = [],\r\n\t\tcached = compilerCache[ selector + \" \" ];\r\n\r\n\tif ( !cached ) {\r\n\t\t// Generate a function of recursive functions that can be used to check each element\r\n\t\tif ( !match ) {\r\n\t\t\tmatch = tokenize( selector );\r\n\t\t}\r\n\t\ti = match.length;\r\n\t\twhile ( i-- ) {\r\n\t\t\tcached = matcherFromTokens( match[i] );\r\n\t\t\tif ( cached[ expando ] ) {\r\n\t\t\t\tsetMatchers.push( cached );\r\n\t\t\t} else {\r\n\t\t\t\telementMatchers.push( cached );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Cache the compiled function\r\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\r\n\r\n\t\t// Save selector and tokenization\r\n\t\tcached.selector = selector;\r\n\t}\r\n\treturn cached;\r\n};\r\n\r\n/**\r\n * A low-level selection function that works with Sizzle's compiled\r\n * selector functions\r\n * @param {String|Function} selector A selector or a pre-compiled\r\n * selector function built with Sizzle.compile\r\n * @param {Element} context\r\n * @param {Array} [results]\r\n * @param {Array} [seed] A set of elements to match against\r\n */\r\nselect = Sizzle.select = function( selector, context, results, seed ) {\r\n\tvar i, tokens, token, type, find,\r\n\t\tcompiled = typeof selector === \"function\" && selector,\r\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\r\n\r\n\tresults = results || [];\r\n\r\n\t// Try to minimize operations if there is no seed and only one group\r\n\tif ( match.length === 1 ) {\r\n\r\n\t\t// Take a shortcut and set the context if the root selector is an ID\r\n\t\ttokens = match[0] = match[0].slice( 0 );\r\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\r\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\r\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\r\n\r\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\r\n\t\t\tif ( !context ) {\r\n\t\t\t\treturn results;\r\n\r\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\r\n\t\t\t} else if ( compiled ) {\r\n\t\t\t\tcontext = context.parentNode;\r\n\t\t\t}\r\n\r\n\t\t\tselector = selector.slice( tokens.shift().value.length );\r\n\t\t}\r\n\r\n\t\t// Fetch a seed set for right-to-left matching\r\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\r\n\t\twhile ( i-- ) {\r\n\t\t\ttoken = tokens[i];\r\n\r\n\t\t\t// Abort if we hit a combinator\r\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif ( (find = Expr.find[ type ]) ) {\r\n\t\t\t\t// Search, expanding context for leading sibling combinators\r\n\t\t\t\tif ( (seed = find(\r\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\r\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\r\n\t\t\t\t)) ) {\r\n\r\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\r\n\t\t\t\t\ttokens.splice( i, 1 );\r\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\r\n\t\t\t\t\tif ( !selector ) {\r\n\t\t\t\t\t\tpush.apply( results, seed );\r\n\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Compile and execute a filtering function if one is not provided\r\n\t// Provide `match` to avoid retokenization if we modified the selector above\r\n\t( compiled || compile( selector, match ) )(\r\n\t\tseed,\r\n\t\tcontext,\r\n\t\t!documentIsHTML,\r\n\t\tresults,\r\n\t\trsibling.test( selector ) && testContext( context.parentNode ) || context\r\n\t);\r\n\treturn results;\r\n};\r\n\r\n// One-time assignments\r\n\r\n// Sort stability\r\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\r\n\r\n// Support: Chrome 14-35+\r\n// Always assume duplicates if they aren't passed to the comparison function\r\nsupport.detectDuplicates = !!hasDuplicate;\r\n\r\n// Initialize against the default document\r\nsetDocument();\r\n\r\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\r\n// Detached nodes confoundingly follow *each other*\r\nsupport.sortDetached = assert(function( div1 ) {\r\n\t// Should return 1, but returns 4 (following)\r\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\r\n});\r\n\r\n// Support: IE<8\r\n// Prevent attribute/property \"interpolation\"\r\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\r\nif ( !assert(function( div ) {\r\n\tdiv.innerHTML = \"<a href='#'></a>\";\r\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\r\n}) ) {\r\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\r\n\t\tif ( !isXML ) {\r\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\r\n\t\t}\r\n\t});\r\n}\r\n\r\n// Support: IE<9\r\n// Use defaultValue in place of getAttribute(\"value\")\r\nif ( !support.attributes || !assert(function( div ) {\r\n\tdiv.innerHTML = \"<input/>\";\r\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\r\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\r\n}) ) {\r\n\taddHandle( \"value\", function( elem, name, isXML ) {\r\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\r\n\t\t\treturn elem.defaultValue;\r\n\t\t}\r\n\t});\r\n}\r\n\r\n// Support: IE<9\r\n// Use getAttributeNode to fetch booleans when getAttribute lies\r\nif ( !assert(function( div ) {\r\n\treturn div.getAttribute(\"disabled\") == null;\r\n}) ) {\r\n\taddHandle( booleans, function( elem, name, isXML ) {\r\n\t\tvar val;\r\n\t\tif ( !isXML ) {\r\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\r\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\r\n\t\t\t\t\tval.value :\r\n\t\t\t\tnull;\r\n\t\t}\r\n\t});\r\n}\r\n\r\nreturn Sizzle;\r\n\r\n})( window );\r\n\r\n\r\n\r\njQuery.find = Sizzle;\r\njQuery.expr = Sizzle.selectors;\r\njQuery.expr[\":\"] = jQuery.expr.pseudos;\r\njQuery.unique = Sizzle.uniqueSort;\r\njQuery.text = Sizzle.getText;\r\njQuery.isXMLDoc = Sizzle.isXML;\r\njQuery.contains = Sizzle.contains;\r\n\r\n\r\n\r\nvar rneedsContext = jQuery.expr.match.needsContext;\r\n\r\nvar rsingleTag = (/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/);\r\n\r\n\r\n\r\nvar risSimple = /^.[^:#\\[\\.,]*$/;\r\n\r\n// Implement the identical functionality for filter and not\r\nfunction winnow( elements, qualifier, not ) {\r\n\tif ( jQuery.isFunction( qualifier ) ) {\r\n\t\treturn jQuery.grep( elements, function( elem, i ) {\r\n\t\t\t/* jshint -W018 */\r\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tif ( qualifier.nodeType ) {\r\n\t\treturn jQuery.grep( elements, function( elem ) {\r\n\t\t\treturn ( elem === qualifier ) !== not;\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tif ( typeof qualifier === \"string\" ) {\r\n\t\tif ( risSimple.test( qualifier ) ) {\r\n\t\t\treturn jQuery.filter( qualifier, elements, not );\r\n\t\t}\r\n\r\n\t\tqualifier = jQuery.filter( qualifier, elements );\r\n\t}\r\n\r\n\treturn jQuery.grep( elements, function( elem ) {\r\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;\r\n\t});\r\n}\r\n\r\njQuery.filter = function( expr, elems, not ) {\r\n\tvar elem = elems[ 0 ];\r\n\r\n\tif ( not ) {\r\n\t\texpr = \":not(\" + expr + \")\";\r\n\t}\r\n\r\n\treturn elems.length === 1 && elem.nodeType === 1 ?\r\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\r\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\r\n\t\t\treturn elem.nodeType === 1;\r\n\t\t}));\r\n};\r\n\r\njQuery.fn.extend({\r\n\tfind: function( selector ) {\r\n\t\tvar i,\r\n\t\t\tret = [],\r\n\t\t\tself = this,\r\n\t\t\tlen = self.length;\r\n\r\n\t\tif ( typeof selector !== \"string\" ) {\r\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\r\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\r\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}) );\r\n\t\t}\r\n\r\n\t\tfor ( i = 0; i < len; i++ ) {\r\n\t\t\tjQuery.find( selector, self[ i ], ret );\r\n\t\t}\r\n\r\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\r\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\r\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\r\n\t\treturn ret;\r\n\t},\r\n\tfilter: function( selector ) {\r\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\r\n\t},\r\n\tnot: function( selector ) {\r\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\r\n\t},\r\n\tis: function( selector ) {\r\n\t\treturn !!winnow(\r\n\t\t\tthis,\r\n\r\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\r\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\r\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\r\n\t\t\t\tjQuery( selector ) :\r\n\t\t\t\tselector || [],\r\n\t\t\tfalse\r\n\t\t).length;\r\n\t}\r\n});\r\n\r\n\r\n// Initialize a jQuery object\r\n\r\n\r\n// A central reference to the root jQuery(document)\r\nvar rootjQuery,\r\n\r\n\t// Use the correct document accordingly with window argument (sandbox)\r\n\tdocument = window.document,\r\n\r\n\t// A simple way to check for HTML strings\r\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\r\n\t// Strict HTML recognition (#11290: must start with <)\r\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\r\n\r\n\tinit = jQuery.fn.init = function( selector, context ) {\r\n\t\tvar match, elem;\r\n\r\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\r\n\t\tif ( !selector ) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\t// Handle HTML strings\r\n\t\tif ( typeof selector === \"string\" ) {\r\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\r\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\r\n\t\t\t\tmatch = [ null, selector, null ];\r\n\r\n\t\t\t} else {\r\n\t\t\t\tmatch = rquickExpr.exec( selector );\r\n\t\t\t}\r\n\r\n\t\t\t// Match html or make sure no context is specified for #id\r\n\t\t\tif ( match && (match[1] || !context) ) {\r\n\r\n\t\t\t\t// HANDLE: $(html) -> $(array)\r\n\t\t\t\tif ( match[1] ) {\r\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\r\n\r\n\t\t\t\t\t// scripts is true for back-compat\r\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\r\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\r\n\t\t\t\t\t\tmatch[1],\r\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t) );\r\n\r\n\t\t\t\t\t// HANDLE: $(html, props)\r\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\r\n\t\t\t\t\t\tfor ( match in context ) {\r\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\r\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\r\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\r\n\r\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn this;\r\n\r\n\t\t\t\t// HANDLE: $(#id)\r\n\t\t\t\t} else {\r\n\t\t\t\t\telem = document.getElementById( match[2] );\r\n\r\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\r\n\t\t\t\t\t// nodes that are no longer in the document #6963\r\n\t\t\t\t\tif ( elem && elem.parentNode ) {\r\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\r\n\t\t\t\t\t\t// by name instead of ID\r\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\r\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\r\n\t\t\t\t\t\tthis.length = 1;\r\n\t\t\t\t\t\tthis[0] = elem;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.context = document;\r\n\t\t\t\t\tthis.selector = selector;\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t}\r\n\r\n\t\t\t// HANDLE: $(expr, $(...))\r\n\t\t\t} else if ( !context || context.jquery ) {\r\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\r\n\r\n\t\t\t// HANDLE: $(expr, context)\r\n\t\t\t// (which is just equivalent to: $(context).find(expr)\r\n\t\t\t} else {\r\n\t\t\t\treturn this.constructor( context ).find( selector );\r\n\t\t\t}\r\n\r\n\t\t// HANDLE: $(DOMElement)\r\n\t\t} else if ( selector.nodeType ) {\r\n\t\t\tthis.context = this[0] = selector;\r\n\t\t\tthis.length = 1;\r\n\t\t\treturn this;\r\n\r\n\t\t// HANDLE: $(function)\r\n\t\t// Shortcut for document ready\r\n\t\t} else if ( jQuery.isFunction( selector ) ) {\r\n\t\t\treturn typeof rootjQuery.ready !== \"undefined\" ?\r\n\t\t\t\trootjQuery.ready( selector ) :\r\n\t\t\t\t// Execute immediately if ready is not present\r\n\t\t\t\tselector( jQuery );\r\n\t\t}\r\n\r\n\t\tif ( selector.selector !== undefined ) {\r\n\t\t\tthis.selector = selector.selector;\r\n\t\t\tthis.context = selector.context;\r\n\t\t}\r\n\r\n\t\treturn jQuery.makeArray( selector, this );\r\n\t};\r\n\r\n// Give the init function the jQuery prototype for later instantiation\r\ninit.prototype = jQuery.fn;\r\n\r\n// Initialize central reference\r\nrootjQuery = jQuery( document );\r\n\r\n\r\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\r\n\t// methods guaranteed to produce a unique set when starting from a unique set\r\n\tguaranteedUnique = {\r\n\t\tchildren: true,\r\n\t\tcontents: true,\r\n\t\tnext: true,\r\n\t\tprev: true\r\n\t};\r\n\r\njQuery.extend({\r\n\tdir: function( elem, dir, until ) {\r\n\t\tvar matched = [],\r\n\t\t\tcur = elem[ dir ];\r\n\r\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\r\n\t\t\tif ( cur.nodeType === 1 ) {\r\n\t\t\t\tmatched.push( cur );\r\n\t\t\t}\r\n\t\t\tcur = cur[dir];\r\n\t\t}\r\n\t\treturn matched;\r\n\t},\r\n\r\n\tsibling: function( n, elem ) {\r\n\t\tvar r = [];\r\n\r\n\t\tfor ( ; n; n = n.nextSibling ) {\r\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\r\n\t\t\t\tr.push( n );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn r;\r\n\t}\r\n});\r\n\r\njQuery.fn.extend({\r\n\thas: function( target ) {\r\n\t\tvar i,\r\n\t\t\ttargets = jQuery( target, this ),\r\n\t\t\tlen = targets.length;\r\n\r\n\t\treturn this.filter(function() {\r\n\t\t\tfor ( i = 0; i < len; i++ ) {\r\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tclosest: function( selectors, context ) {\r\n\t\tvar cur,\r\n\t\t\ti = 0,\r\n\t\t\tl = this.length,\r\n\t\t\tmatched = [],\r\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\r\n\t\t\t\tjQuery( selectors, context || this.context ) :\r\n\t\t\t\t0;\r\n\r\n\t\tfor ( ; i < l; i++ ) {\r\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\r\n\t\t\t\t// Always skip document fragments\r\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\r\n\t\t\t\t\tpos.index(cur) > -1 :\r\n\r\n\t\t\t\t\t// Don't pass non-elements to Sizzle\r\n\t\t\t\t\tcur.nodeType === 1 &&\r\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\r\n\r\n\t\t\t\t\tmatched.push( cur );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );\r\n\t},\r\n\r\n\t// Determine the position of an element within\r\n\t// the matched set of elements\r\n\tindex: function( elem ) {\r\n\r\n\t\t// No argument, return index in parent\r\n\t\tif ( !elem ) {\r\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;\r\n\t\t}\r\n\r\n\t\t// index in selector\r\n\t\tif ( typeof elem === \"string\" ) {\r\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\r\n\t\t}\r\n\r\n\t\t// Locate the position of the desired element\r\n\t\treturn jQuery.inArray(\r\n\t\t\t// If it receives a jQuery object, the first element is used\r\n\t\t\telem.jquery ? elem[0] : elem, this );\r\n\t},\r\n\r\n\tadd: function( selector, context ) {\r\n\t\treturn this.pushStack(\r\n\t\t\tjQuery.unique(\r\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\r\n\t\t\t)\r\n\t\t);\r\n\t},\r\n\r\n\taddBack: function( selector ) {\r\n\t\treturn this.add( selector == null ?\r\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\r\n\t\t);\r\n\t}\r\n});\r\n\r\nfunction sibling( cur, dir ) {\r\n\tdo {\r\n\t\tcur = cur[ dir ];\r\n\t} while ( cur && cur.nodeType !== 1 );\r\n\r\n\treturn cur;\r\n}\r\n\r\njQuery.each({\r\n\tparent: function( elem ) {\r\n\t\tvar parent = elem.parentNode;\r\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\r\n\t},\r\n\tparents: function( elem ) {\r\n\t\treturn jQuery.dir( elem, \"parentNode\" );\r\n\t},\r\n\tparentsUntil: function( elem, i, until ) {\r\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\r\n\t},\r\n\tnext: function( elem ) {\r\n\t\treturn sibling( elem, \"nextSibling\" );\r\n\t},\r\n\tprev: function( elem ) {\r\n\t\treturn sibling( elem, \"previousSibling\" );\r\n\t},\r\n\tnextAll: function( elem ) {\r\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\r\n\t},\r\n\tprevAll: function( elem ) {\r\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\r\n\t},\r\n\tnextUntil: function( elem, i, until ) {\r\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\r\n\t},\r\n\tprevUntil: function( elem, i, until ) {\r\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\r\n\t},\r\n\tsiblings: function( elem ) {\r\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\r\n\t},\r\n\tchildren: function( elem ) {\r\n\t\treturn jQuery.sibling( elem.firstChild );\r\n\t},\r\n\tcontents: function( elem ) {\r\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\r\n\t\t\telem.contentDocument || elem.contentWindow.document :\r\n\t\t\tjQuery.merge( [], elem.childNodes );\r\n\t}\r\n}, function( name, fn ) {\r\n\tjQuery.fn[ name ] = function( until, selector ) {\r\n\t\tvar ret = jQuery.map( this, fn, until );\r\n\r\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\r\n\t\t\tselector = until;\r\n\t\t}\r\n\r\n\t\tif ( selector && typeof selector === \"string\" ) {\r\n\t\t\tret = jQuery.filter( selector, ret );\r\n\t\t}\r\n\r\n\t\tif ( this.length > 1 ) {\r\n\t\t\t// Remove duplicates\r\n\t\t\tif ( !guaranteedUnique[ name ] ) {\r\n\t\t\t\tret = jQuery.unique( ret );\r\n\t\t\t}\r\n\r\n\t\t\t// Reverse order for parents* and prev-derivatives\r\n\t\t\tif ( rparentsprev.test( name ) ) {\r\n\t\t\t\tret = ret.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.pushStack( ret );\r\n\t};\r\n});\r\nvar rnotwhite = (/\\S+/g);\r\n\r\n\r\n\r\n// String to Object options format cache\r\nvar optionsCache = {};\r\n\r\n// Convert String-formatted options into Object-formatted ones and store in cache\r\nfunction createOptions( options ) {\r\n\tvar object = optionsCache[ options ] = {};\r\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\r\n\t\tobject[ flag ] = true;\r\n\t});\r\n\treturn object;\r\n}\r\n\r\n/*\r\n * Create a callback list using the following parameters:\r\n *\r\n *\toptions: an optional list of space-separated options that will change how\r\n *\t\t\tthe callback list behaves or a more traditional option object\r\n *\r\n * By default a callback list will act like an event callback list and can be\r\n * \"fired\" multiple times.\r\n *\r\n * Possible options:\r\n *\r\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\r\n *\r\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\r\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\r\n *\t\t\t\t\tvalues (like a Deferred)\r\n *\r\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\r\n *\r\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\r\n *\r\n */\r\njQuery.Callbacks = function( options ) {\r\n\r\n\t// Convert options from String-formatted to Object-formatted if needed\r\n\t// (we check in cache first)\r\n\toptions = typeof options === \"string\" ?\r\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\r\n\t\tjQuery.extend( {}, options );\r\n\r\n\tvar // Flag to know if list is currently firing\r\n\t\tfiring,\r\n\t\t// Last fire value (for non-forgettable lists)\r\n\t\tmemory,\r\n\t\t// Flag to know if list was already fired\r\n\t\tfired,\r\n\t\t// End of the loop when firing\r\n\t\tfiringLength,\r\n\t\t// Index of currently firing callback (modified by remove if needed)\r\n\t\tfiringIndex,\r\n\t\t// First callback to fire (used internally by add and fireWith)\r\n\t\tfiringStart,\r\n\t\t// Actual callback list\r\n\t\tlist = [],\r\n\t\t// Stack of fire calls for repeatable lists\r\n\t\tstack = !options.once && [],\r\n\t\t// Fire callbacks\r\n\t\tfire = function( data ) {\r\n\t\t\tmemory = options.memory && data;\r\n\t\t\tfired = true;\r\n\t\t\tfiringIndex = firingStart || 0;\r\n\t\t\tfiringStart = 0;\r\n\t\t\tfiringLength = list.length;\r\n\t\t\tfiring = true;\r\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\r\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\r\n\t\t\t\t\tmemory = false; // To prevent further calls using add\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfiring = false;\r\n\t\t\tif ( list ) {\r\n\t\t\t\tif ( stack ) {\r\n\t\t\t\t\tif ( stack.length ) {\r\n\t\t\t\t\t\tfire( stack.shift() );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if ( memory ) {\r\n\t\t\t\t\tlist = [];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tself.disable();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t// Actual Callbacks object\r\n\t\tself = {\r\n\t\t\t// Add a callback or a collection of callbacks to the list\r\n\t\t\tadd: function() {\r\n\t\t\t\tif ( list ) {\r\n\t\t\t\t\t// First, we save the current length\r\n\t\t\t\t\tvar start = list.length;\r\n\t\t\t\t\t(function add( args ) {\r\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\r\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\r\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\r\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\r\n\t\t\t\t\t\t\t\t\tlist.push( arg );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\r\n\t\t\t\t\t\t\t\t// Inspect recursively\r\n\t\t\t\t\t\t\t\tadd( arg );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})( arguments );\r\n\t\t\t\t\t// Do we need to add the callbacks to the\r\n\t\t\t\t\t// current firing batch?\r\n\t\t\t\t\tif ( firing ) {\r\n\t\t\t\t\t\tfiringLength = list.length;\r\n\t\t\t\t\t// With memory, if we're not firing then\r\n\t\t\t\t\t// we should call right away\r\n\t\t\t\t\t} else if ( memory ) {\r\n\t\t\t\t\t\tfiringStart = start;\r\n\t\t\t\t\t\tfire( memory );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\t// Remove a callback from the list\r\n\t\t\tremove: function() {\r\n\t\t\t\tif ( list ) {\r\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\r\n\t\t\t\t\t\tvar index;\r\n\t\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\r\n\t\t\t\t\t\t\tlist.splice( index, 1 );\r\n\t\t\t\t\t\t\t// Handle firing indexes\r\n\t\t\t\t\t\t\tif ( firing ) {\r\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\r\n\t\t\t\t\t\t\t\t\tfiringLength--;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\r\n\t\t\t\t\t\t\t\t\tfiringIndex--;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\t// Check if a given callback is in the list.\r\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\r\n\t\t\thas: function( fn ) {\r\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\r\n\t\t\t},\r\n\t\t\t// Remove all callbacks from the list\r\n\t\t\tempty: function() {\r\n\t\t\t\tlist = [];\r\n\t\t\t\tfiringLength = 0;\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\t// Have the list do nothing anymore\r\n\t\t\tdisable: function() {\r\n\t\t\t\tlist = stack = memory = undefined;\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\t// Is it disabled?\r\n\t\t\tdisabled: function() {\r\n\t\t\t\treturn !list;\r\n\t\t\t},\r\n\t\t\t// Lock the list in its current state\r\n\t\t\tlock: function() {\r\n\t\t\t\tstack = undefined;\r\n\t\t\t\tif ( !memory ) {\r\n\t\t\t\t\tself.disable();\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\t// Is it locked?\r\n\t\t\tlocked: function() {\r\n\t\t\t\treturn !stack;\r\n\t\t\t},\r\n\t\t\t// Call all callbacks with the given context and arguments\r\n\t\t\tfireWith: function( context, args ) {\r\n\t\t\t\tif ( list && ( !fired || stack ) ) {\r\n\t\t\t\t\targs = args || [];\r\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\r\n\t\t\t\t\tif ( firing ) {\r\n\t\t\t\t\t\tstack.push( args );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tfire( args );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\t// Call all the callbacks with the given arguments\r\n\t\t\tfire: function() {\r\n\t\t\t\tself.fireWith( this, arguments );\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\t// To know if the callbacks have already been called at least once\r\n\t\t\tfired: function() {\r\n\t\t\t\treturn !!fired;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\treturn self;\r\n};\r\n\r\n\r\njQuery.extend({\r\n\r\n\tDeferred: function( func ) {\r\n\t\tvar tuples = [\r\n\t\t\t\t// action, add listener, listener list, final state\r\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\r\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\r\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\r\n\t\t\t],\r\n\t\t\tstate = \"pending\",\r\n\t\t\tpromise = {\r\n\t\t\t\tstate: function() {\r\n\t\t\t\t\treturn state;\r\n\t\t\t\t},\r\n\t\t\t\talways: function() {\r\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t},\r\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\r\n\t\t\t\t\tvar fns = arguments;\r\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\r\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\r\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\r\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\r\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\r\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\r\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\r\n\t\t\t\t\t\t\t\t\treturned.promise()\r\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\r\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\r\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tfns = null;\r\n\t\t\t\t\t}).promise();\r\n\t\t\t\t},\r\n\t\t\t\t// Get a promise for this deferred\r\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\r\n\t\t\t\tpromise: function( obj ) {\r\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdeferred = {};\r\n\r\n\t\t// Keep pipe for back-compat\r\n\t\tpromise.pipe = promise.then;\r\n\r\n\t\t// Add list-specific methods\r\n\t\tjQuery.each( tuples, function( i, tuple ) {\r\n\t\t\tvar list = tuple[ 2 ],\r\n\t\t\t\tstateString = tuple[ 3 ];\r\n\r\n\t\t\t// promise[ done | fail | progress ] = list.add\r\n\t\t\tpromise[ tuple[1] ] = list.add;\r\n\r\n\t\t\t// Handle state\r\n\t\t\tif ( stateString ) {\r\n\t\t\t\tlist.add(function() {\r\n\t\t\t\t\t// state = [ resolved | rejected ]\r\n\t\t\t\t\tstate = stateString;\r\n\r\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\r\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\r\n\t\t\t}\r\n\r\n\t\t\t// deferred[ resolve | reject | notify ]\r\n\t\t\tdeferred[ tuple[0] ] = function() {\r\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\r\n\t\t\t\treturn this;\r\n\t\t\t};\r\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\r\n\t\t});\r\n\r\n\t\t// Make the deferred a promise\r\n\t\tpromise.promise( deferred );\r\n\r\n\t\t// Call given func if any\r\n\t\tif ( func ) {\r\n\t\t\tfunc.call( deferred, deferred );\r\n\t\t}\r\n\r\n\t\t// All done!\r\n\t\treturn deferred;\r\n\t},\r\n\r\n\t// Deferred helper\r\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\r\n\t\tvar i = 0,\r\n\t\t\tresolveValues = slice.call( arguments ),\r\n\t\t\tlength = resolveValues.length,\r\n\r\n\t\t\t// the count of uncompleted subordinates\r\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\r\n\r\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\r\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\r\n\r\n\t\t\t// Update function for both resolve and progress values\r\n\t\t\tupdateFunc = function( i, contexts, values ) {\r\n\t\t\t\treturn function( value ) {\r\n\t\t\t\t\tcontexts[ i ] = this;\r\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\r\n\t\t\t\t\tif ( values === progressValues ) {\r\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\r\n\r\n\t\t\t\t\t} else if ( !(--remaining) ) {\r\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\tprogressValues, progressContexts, resolveContexts;\r\n\r\n\t\t// add listeners to Deferred subordinates; treat others as resolved\r\n\t\tif ( length > 1 ) {\r\n\t\t\tprogressValues = new Array( length );\r\n\t\t\tprogressContexts = new Array( length );\r\n\t\t\tresolveContexts = new Array( length );\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\r\n\t\t\t\t\tresolveValues[ i ].promise()\r\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\r\n\t\t\t\t\t\t.fail( deferred.reject )\r\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\t--remaining;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// if we're not waiting on anything, resolve the master\r\n\t\tif ( !remaining ) {\r\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\r\n\t\t}\r\n\r\n\t\treturn deferred.promise();\r\n\t}\r\n});\r\n\r\n\r\n// The deferred used on DOM ready\r\nvar readyList;\r\n\r\njQuery.fn.ready = function( fn ) {\r\n\t// Add the callback\r\n\tjQuery.ready.promise().done( fn );\r\n\r\n\treturn this;\r\n};\r\n\r\njQuery.extend({\r\n\t// Is the DOM ready to be used? Set to true once it occurs.\r\n\tisReady: false,\r\n\r\n\t// A counter to track how many items to wait for before\r\n\t// the ready event fires. See #6781\r\n\treadyWait: 1,\r\n\r\n\t// Hold (or release) the ready event\r\n\tholdReady: function( hold ) {\r\n\t\tif ( hold ) {\r\n\t\t\tjQuery.readyWait++;\r\n\t\t} else {\r\n\t\t\tjQuery.ready( true );\r\n\t\t}\r\n\t},\r\n\r\n\t// Handle when the DOM is ready\r\n\tready: function( wait ) {\r\n\r\n\t\t// Abort if there are pending holds or we're already ready\r\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\r\n\t\tif ( !document.body ) {\r\n\t\t\treturn setTimeout( jQuery.ready );\r\n\t\t}\r\n\r\n\t\t// Remember that the DOM is ready\r\n\t\tjQuery.isReady = true;\r\n\r\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\r\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// If there are functions bound, to execute\r\n\t\treadyList.resolveWith( document, [ jQuery ] );\r\n\r\n\t\t// Trigger any bound ready events\r\n\t\tif ( jQuery.fn.triggerHandler ) {\r\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\r\n\t\t\tjQuery( document ).off( \"ready\" );\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/**\r\n * Clean-up method for dom ready events\r\n */\r\nfunction detach() {\r\n\tif ( document.addEventListener ) {\r\n\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\r\n\t\twindow.removeEventListener( \"load\", completed, false );\r\n\r\n\t} else {\r\n\t\tdocument.detachEvent( \"onreadystatechange\", completed );\r\n\t\twindow.detachEvent( \"onload\", completed );\r\n\t}\r\n}\r\n\r\n/**\r\n * The ready event handler and self cleanup method\r\n */\r\nfunction completed() {\r\n\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\r\n\tif ( document.addEventListener || event.type === \"load\" || document.readyState === \"complete\" ) {\r\n\t\tdetach();\r\n\t\tjQuery.ready();\r\n\t}\r\n}\r\n\r\njQuery.ready.promise = function( obj ) {\r\n\tif ( !readyList ) {\r\n\r\n\t\treadyList = jQuery.Deferred();\r\n\r\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\r\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\r\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\r\n\t\tif ( document.readyState === \"complete\" ) {\r\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\r\n\t\t\tsetTimeout( jQuery.ready );\r\n\r\n\t\t// Standards-based browsers support DOMContentLoaded\r\n\t\t} else if ( document.addEventListener ) {\r\n\t\t\t// Use the handy event callback\r\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\r\n\r\n\t\t\t// A fallback to window.onload, that will always work\r\n\t\t\twindow.addEventListener( \"load\", completed, false );\r\n\r\n\t\t// If IE event model is used\r\n\t\t} else {\r\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\r\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\r\n\r\n\t\t\t// A fallback to window.onload, that will always work\r\n\t\t\twindow.attachEvent( \"onload\", completed );\r\n\r\n\t\t\t// If IE and not a frame\r\n\t\t\t// continually check to see if the document is ready\r\n\t\t\tvar top = false;\r\n\r\n\t\t\ttry {\r\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\r\n\t\t\t} catch(e) {}\r\n\r\n\t\t\tif ( top && top.doScroll ) {\r\n\t\t\t\t(function doScrollCheck() {\r\n\t\t\t\t\tif ( !jQuery.isReady ) {\r\n\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\r\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\r\n\t\t\t\t\t\t\ttop.doScroll(\"left\");\r\n\t\t\t\t\t\t} catch(e) {\r\n\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// detach all dom ready events\r\n\t\t\t\t\t\tdetach();\r\n\r\n\t\t\t\t\t\t// and execute any waiting functions\r\n\t\t\t\t\t\tjQuery.ready();\r\n\t\t\t\t\t}\r\n\t\t\t\t})();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn readyList.promise( obj );\r\n};\r\n\r\n\r\nvar strundefined = typeof undefined;\r\n\r\n\r\n\r\n// Support: IE<9\r\n// Iteration over object's inherited properties before its own\r\nvar i;\r\nfor ( i in jQuery( support ) ) {\r\n\tbreak;\r\n}\r\nsupport.ownLast = i !== \"0\";\r\n\r\n// Note: most support tests are defined in their respective modules.\r\n// false until the test is run\r\nsupport.inlineBlockNeedsLayout = false;\r\n\r\n// Execute ASAP in case we need to set body.style.zoom\r\njQuery(function() {\r\n\t// Minified: var a,b,c,d\r\n\tvar val, div, body, container;\r\n\r\n\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\r\n\tif ( !body || !body.style ) {\r\n\t\t// Return for frameset docs that don't have a body\r\n\t\treturn;\r\n\t}\r\n\r\n\t// Setup\r\n\tdiv = document.createElement( \"div\" );\r\n\tcontainer = document.createElement( \"div\" );\r\n\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\r\n\tbody.appendChild( container ).appendChild( div );\r\n\r\n\tif ( typeof div.style.zoom !== strundefined ) {\r\n\t\t// Support: IE<8\r\n\t\t// Check if natively block-level elements act like inline-block\r\n\t\t// elements when setting their display to 'inline' and giving\r\n\t\t// them layout\r\n\t\tdiv.style.cssText = \"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\";\r\n\r\n\t\tsupport.inlineBlockNeedsLayout = val = div.offsetWidth === 3;\r\n\t\tif ( val ) {\r\n\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\r\n\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\r\n\t\t\t// Support: IE<8\r\n\t\t\tbody.style.zoom = 1;\r\n\t\t}\r\n\t}\r\n\r\n\tbody.removeChild( container );\r\n});\r\n\r\n\r\n\r\n\r\n(function() {\r\n\tvar div = document.createElement( \"div\" );\r\n\r\n\t// Execute the test only if not already executed in another module.\r\n\tif (support.deleteExpando == null) {\r\n\t\t// Support: IE<9\r\n\t\tsupport.deleteExpando = true;\r\n\t\ttry {\r\n\t\t\tdelete div.test;\r\n\t\t} catch( e ) {\r\n\t\t\tsupport.deleteExpando = false;\r\n\t\t}\r\n\t}\r\n\r\n\t// Null elements to avoid leaks in IE.\r\n\tdiv = null;\r\n})();\r\n\r\n\r\n/**\r\n * Determines whether an object can have data\r\n */\r\njQuery.acceptData = function( elem ) {\r\n\tvar noData = jQuery.noData[ (elem.nodeName + \" \").toLowerCase() ],\r\n\t\tnodeType = +elem.nodeType || 1;\r\n\r\n\t// Do not set data on non-element DOM nodes because it will not be cleared (#8335).\r\n\treturn nodeType !== 1 && nodeType !== 9 ?\r\n\t\tfalse :\r\n\r\n\t\t// Nodes accept data unless otherwise specified; rejection can be conditional\r\n\t\t!noData || noData !== true && elem.getAttribute(\"classid\") === noData;\r\n};\r\n\r\n\r\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\r\n\trmultiDash = /([A-Z])/g;\r\n\r\nfunction dataAttr( elem, key, data ) {\r\n\t// If nothing was found internally, try to fetch any\r\n\t// data from the HTML5 data-* attribute\r\n\tif ( data === undefined && elem.nodeType === 1 ) {\r\n\r\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\r\n\r\n\t\tdata = elem.getAttribute( name );\r\n\r\n\t\tif ( typeof data === \"string\" ) {\r\n\t\t\ttry {\r\n\t\t\t\tdata = data === \"true\" ? true :\r\n\t\t\t\t\tdata === \"false\" ? false :\r\n\t\t\t\t\tdata === \"null\" ? null :\r\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\r\n\t\t\t\t\t+data + \"\" === data ? +data :\r\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\r\n\t\t\t\t\tdata;\r\n\t\t\t} catch( e ) {}\r\n\r\n\t\t\t// Make sure we set the data so it isn't changed later\r\n\t\t\tjQuery.data( elem, key, data );\r\n\r\n\t\t} else {\r\n\t\t\tdata = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\treturn data;\r\n}\r\n\r\n// checks a cache object for emptiness\r\nfunction isEmptyDataObject( obj ) {\r\n\tvar name;\r\n\tfor ( name in obj ) {\r\n\r\n\t\t// if the public data object is empty, the private is still empty\r\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif ( name !== \"toJSON\" ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\treturn true;\r\n}\r\n\r\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ) {\r\n\tif ( !jQuery.acceptData( elem ) ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar ret, thisCache,\r\n\t\tinternalKey = jQuery.expando,\r\n\r\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\r\n\t\t// can't GC object references properly across the DOM-JS boundary\r\n\t\tisNode = elem.nodeType,\r\n\r\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\r\n\t\t// attached directly to the object so GC can occur automatically\r\n\t\tcache = isNode ? jQuery.cache : elem,\r\n\r\n\t\t// Only defining an ID for JS objects if its cache already exists allows\r\n\t\t// the code to shortcut on the same path as a DOM node with no cache\r\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\r\n\r\n\t// Avoid doing any more work than we need to when trying to get data on an\r\n\t// object that has no data at all\r\n\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === \"string\" ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif ( !id ) {\r\n\t\t// Only DOM nodes need a new unique ID for each element since their data\r\n\t\t// ends up in the global cache\r\n\t\tif ( isNode ) {\r\n\t\t\tid = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;\r\n\t\t} else {\r\n\t\t\tid = internalKey;\r\n\t\t}\r\n\t}\r\n\r\n\tif ( !cache[ id ] ) {\r\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\r\n\t\t// is serialized using JSON.stringify\r\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\r\n\t}\r\n\r\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\r\n\t// shallow copied over onto the existing cache\r\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\r\n\t\tif ( pvt ) {\r\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\r\n\t\t} else {\r\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\r\n\t\t}\r\n\t}\r\n\r\n\tthisCache = cache[ id ];\r\n\r\n\t// jQuery data() is stored in a separate object inside the object's internal data\r\n\t// cache in order to avoid key collisions between internal data and user-defined\r\n\t// data.\r\n\tif ( !pvt ) {\r\n\t\tif ( !thisCache.data ) {\r\n\t\t\tthisCache.data = {};\r\n\t\t}\r\n\r\n\t\tthisCache = thisCache.data;\r\n\t}\r\n\r\n\tif ( data !== undefined ) {\r\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\r\n\t}\r\n\r\n\t// Check for both converted-to-camel and non-converted data property names\r\n\t// If a data property was specified\r\n\tif ( typeof name === \"string\" ) {\r\n\r\n\t\t// First Try to find as-is property data\r\n\t\tret = thisCache[ name ];\r\n\r\n\t\t// Test for null|undefined property data\r\n\t\tif ( ret == null ) {\r\n\r\n\t\t\t// Try to find the camelCased property\r\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\r\n\t\t}\r\n\t} else {\r\n\t\tret = thisCache;\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\nfunction internalRemoveData( elem, name, pvt ) {\r\n\tif ( !jQuery.acceptData( elem ) ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar thisCache, i,\r\n\t\tisNode = elem.nodeType,\r\n\r\n\t\t// See jQuery.data for more information\r\n\t\tcache = isNode ? jQuery.cache : elem,\r\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\r\n\r\n\t// If there is already no cache entry for this object, there is no\r\n\t// purpose in continuing\r\n\tif ( !cache[ id ] ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif ( name ) {\r\n\r\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\r\n\r\n\t\tif ( thisCache ) {\r\n\r\n\t\t\t// Support array or space separated string names for data keys\r\n\t\t\tif ( !jQuery.isArray( name ) ) {\r\n\r\n\t\t\t\t// try the string as a key before any manipulation\r\n\t\t\t\tif ( name in thisCache ) {\r\n\t\t\t\t\tname = [ name ];\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\r\n\t\t\t\t\tname = jQuery.camelCase( name );\r\n\t\t\t\t\tif ( name in thisCache ) {\r\n\t\t\t\t\t\tname = [ name ];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tname = name.split(\" \");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// If \"name\" is an array of keys...\r\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\r\n\t\t\t\t// keys will be converted to camelCase.\r\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\r\n\t\t\t\t// both plain key and camelCase key. #12786\r\n\t\t\t\t// This will only penalize the array argument path.\r\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\r\n\t\t\t}\r\n\r\n\t\t\ti = name.length;\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tdelete thisCache[ name[i] ];\r\n\t\t\t}\r\n\r\n\t\t\t// If there is no data left in the cache, we want to continue\r\n\t\t\t// and let the cache object itself get destroyed\r\n\t\t\tif ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// See jQuery.data for more information\r\n\tif ( !pvt ) {\r\n\t\tdelete cache[ id ].data;\r\n\r\n\t\t// Don't destroy the parent cache unless the internal data object\r\n\t\t// had been the only thing left in it\r\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\t// Destroy the cache\r\n\tif ( isNode ) {\r\n\t\tjQuery.cleanData( [ elem ], true );\r\n\r\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\r\n\t/* jshint eqeqeq: false */\r\n\t} else if ( support.deleteExpando || cache != cache.window ) {\r\n\t\t/* jshint eqeqeq: true */\r\n\t\tdelete cache[ id ];\r\n\r\n\t// When all else fails, null\r\n\t} else {\r\n\t\tcache[ id ] = null;\r\n\t}\r\n}\r\n\r\njQuery.extend({\r\n\tcache: {},\r\n\r\n\t// The following elements (space-suffixed to avoid Object.prototype collisions)\r\n\t// throw uncatchable exceptions if you attempt to set expando properties\r\n\tnoData: {\r\n\t\t\"applet \": true,\r\n\t\t\"embed \": true,\r\n\t\t// ...but Flash objects (which have this classid) *can* handle expandos\r\n\t\t\"object \": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\r\n\t},\r\n\r\n\thasData: function( elem ) {\r\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\r\n\t\treturn !!elem && !isEmptyDataObject( elem );\r\n\t},\r\n\r\n\tdata: function( elem, name, data ) {\r\n\t\treturn internalData( elem, name, data );\r\n\t},\r\n\r\n\tremoveData: function( elem, name ) {\r\n\t\treturn internalRemoveData( elem, name );\r\n\t},\r\n\r\n\t// For internal use only.\r\n\t_data: function( elem, name, data ) {\r\n\t\treturn internalData( elem, name, data, true );\r\n\t},\r\n\r\n\t_removeData: function( elem, name ) {\r\n\t\treturn internalRemoveData( elem, name, true );\r\n\t}\r\n});\r\n\r\njQuery.fn.extend({\r\n\tdata: function( key, value ) {\r\n\t\tvar i, name, data,\r\n\t\t\telem = this[0],\r\n\t\t\tattrs = elem && elem.attributes;\r\n\r\n\t\t// Special expections of .data basically thwart jQuery.access,\r\n\t\t// so implement the relevant behavior ourselves\r\n\r\n\t\t// Gets all values\r\n\t\tif ( key === undefined ) {\r\n\t\t\tif ( this.length ) {\r\n\t\t\t\tdata = jQuery.data( elem );\r\n\r\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\r\n\t\t\t\t\ti = attrs.length;\r\n\t\t\t\t\twhile ( i-- ) {\r\n\r\n\t\t\t\t\t\t// Support: IE11+\r\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\r\n\t\t\t\t\t\tif ( attrs[ i ] ) {\r\n\t\t\t\t\t\t\tname = attrs[ i ].name;\r\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\r\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\r\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn data;\r\n\t\t}\r\n\r\n\t\t// Sets multiple values\r\n\t\tif ( typeof key === \"object\" ) {\r\n\t\t\treturn this.each(function() {\r\n\t\t\t\tjQuery.data( this, key );\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn arguments.length > 1 ?\r\n\r\n\t\t\t// Sets one value\r\n\t\t\tthis.each(function() {\r\n\t\t\t\tjQuery.data( this, key, value );\r\n\t\t\t}) :\r\n\r\n\t\t\t// Gets one value\r\n\t\t\t// Try to fetch any internally stored data first\r\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;\r\n\t},\r\n\r\n\tremoveData: function( key ) {\r\n\t\treturn this.each(function() {\r\n\t\t\tjQuery.removeData( this, key );\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\r\njQuery.extend({\r\n\tqueue: function( elem, type, data ) {\r\n\t\tvar queue;\r\n\r\n\t\tif ( elem ) {\r\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\r\n\t\t\tqueue = jQuery._data( elem, type );\r\n\r\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\r\n\t\t\tif ( data ) {\r\n\t\t\t\tif ( !queue || jQuery.isArray(data) ) {\r\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray(data) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tqueue.push( data );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn queue || [];\r\n\t\t}\r\n\t},\r\n\r\n\tdequeue: function( elem, type ) {\r\n\t\ttype = type || \"fx\";\r\n\r\n\t\tvar queue = jQuery.queue( elem, type ),\r\n\t\t\tstartLength = queue.length,\r\n\t\t\tfn = queue.shift(),\r\n\t\t\thooks = jQuery._queueHooks( elem, type ),\r\n\t\t\tnext = function() {\r\n\t\t\t\tjQuery.dequeue( elem, type );\r\n\t\t\t};\r\n\r\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\r\n\t\tif ( fn === \"inprogress\" ) {\r\n\t\t\tfn = queue.shift();\r\n\t\t\tstartLength--;\r\n\t\t}\r\n\r\n\t\tif ( fn ) {\r\n\r\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\r\n\t\t\t// automatically dequeued\r\n\t\t\tif ( type === \"fx\" ) {\r\n\t\t\t\tqueue.unshift( \"inprogress\" );\r\n\t\t\t}\r\n\r\n\t\t\t// clear up the last queue stop function\r\n\t\t\tdelete hooks.stop;\r\n\t\t\tfn.call( elem, next, hooks );\r\n\t\t}\r\n\r\n\t\tif ( !startLength && hooks ) {\r\n\t\t\thooks.empty.fire();\r\n\t\t}\r\n\t},\r\n\r\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\r\n\t_queueHooks: function( elem, type ) {\r\n\t\tvar key = type + \"queueHooks\";\r\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\r\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\r\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\r\n\t\t\t\tjQuery._removeData( elem, key );\r\n\t\t\t})\r\n\t\t});\r\n\t}\r\n});\r\n\r\njQuery.fn.extend({\r\n\tqueue: function( type, data ) {\r\n\t\tvar setter = 2;\r\n\r\n\t\tif ( typeof type !== \"string\" ) {\r\n\t\t\tdata = type;\r\n\t\t\ttype = \"fx\";\r\n\t\t\tsetter--;\r\n\t\t}\r\n\r\n\t\tif ( arguments.length < setter ) {\r\n\t\t\treturn jQuery.queue( this[0], type );\r\n\t\t}\r\n\r\n\t\treturn data === undefined ?\r\n\t\t\tthis :\r\n\t\t\tthis.each(function() {\r\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\r\n\r\n\t\t\t\t// ensure a hooks for this queue\r\n\t\t\t\tjQuery._queueHooks( this, type );\r\n\r\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\r\n\t\t\t\t\tjQuery.dequeue( this, type );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t},\r\n\tdequeue: function( type ) {\r\n\t\treturn this.each(function() {\r\n\t\t\tjQuery.dequeue( this, type );\r\n\t\t});\r\n\t},\r\n\tclearQueue: function( type ) {\r\n\t\treturn this.queue( type || \"fx\", [] );\r\n\t},\r\n\t// Get a promise resolved when queues of a certain type\r\n\t// are emptied (fx is the type by default)\r\n\tpromise: function( type, obj ) {\r\n\t\tvar tmp,\r\n\t\t\tcount = 1,\r\n\t\t\tdefer = jQuery.Deferred(),\r\n\t\t\telements = this,\r\n\t\t\ti = this.length,\r\n\t\t\tresolve = function() {\r\n\t\t\t\tif ( !( --count ) ) {\r\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\tif ( typeof type !== \"string\" ) {\r\n\t\t\tobj = type;\r\n\t\t\ttype = undefined;\r\n\t\t}\r\n\t\ttype = type || \"fx\";\r\n\r\n\t\twhile ( i-- ) {\r\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\r\n\t\t\tif ( tmp && tmp.empty ) {\r\n\t\t\t\tcount++;\r\n\t\t\t\ttmp.empty.add( resolve );\r\n\t\t\t}\r\n\t\t}\r\n\t\tresolve();\r\n\t\treturn defer.promise( obj );\r\n\t}\r\n});\r\nvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\r\n\r\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\r\n\r\nvar isHidden = function( elem, el ) {\r\n\t\t// isHidden might be called from jQuery#filter function;\r\n\t\t// in that case, element will be second argument\r\n\t\telem = el || elem;\r\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\r\n\t};\r\n\r\n\r\n\r\n// Multifunctional method to get and set values of a collection\r\n// The value/s can optionally be executed if it's a function\r\nvar access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\r\n\tvar i = 0,\r\n\t\tlength = elems.length,\r\n\t\tbulk = key == null;\r\n\r\n\t// Sets many values\r\n\tif ( jQuery.type( key ) === \"object\" ) {\r\n\t\tchainable = true;\r\n\t\tfor ( i in key ) {\r\n\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\r\n\t\t}\r\n\r\n\t// Sets one value\r\n\t} else if ( value !== undefined ) {\r\n\t\tchainable = true;\r\n\r\n\t\tif ( !jQuery.isFunction( value ) ) {\r\n\t\t\traw = true;\r\n\t\t}\r\n\r\n\t\tif ( bulk ) {\r\n\t\t\t// Bulk operations run against the entire set\r\n\t\t\tif ( raw ) {\r\n\t\t\t\tfn.call( elems, value );\r\n\t\t\t\tfn = null;\r\n\r\n\t\t\t// ...except when executing function values\r\n\t\t\t} else {\r\n\t\t\t\tbulk = fn;\r\n\t\t\t\tfn = function( elem, key, value ) {\r\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( fn ) {\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn chainable ?\r\n\t\telems :\r\n\r\n\t\t// Gets\r\n\t\tbulk ?\r\n\t\t\tfn.call( elems ) :\r\n\t\t\tlength ? fn( elems[0], key ) : emptyGet;\r\n};\r\nvar rcheckableType = (/^(?:checkbox|radio)$/i);\r\n\r\n\r\n\r\n(function() {\r\n\t// Minified: var a,b,c\r\n\tvar input = document.createElement( \"input\" ),\r\n\t\tdiv = document.createElement( \"div\" ),\r\n\t\tfragment = document.createDocumentFragment();\r\n\r\n\t// Setup\r\n\tdiv.innerHTML = \" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\r\n\r\n\t// IE strips leading whitespace when .innerHTML is used\r\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\r\n\r\n\t// Make sure that tbody elements aren't automatically inserted\r\n\t// IE will insert them into empty tables\r\n\tsupport.tbody = !div.getElementsByTagName( \"tbody\" ).length;\r\n\r\n\t// Make sure that link elements get serialized correctly by innerHTML\r\n\t// This requires a wrapper element in IE\r\n\tsupport.htmlSerialize = !!div.getElementsByTagName( \"link\" ).length;\r\n\r\n\t// Makes sure cloning an html5 element does not cause problems\r\n\t// Where outerHTML is undefined, this still works\r\n\tsupport.html5Clone =\r\n\t\tdocument.createElement( \"nav\" ).cloneNode( true ).outerHTML !== \"<:nav></:nav>\";\r\n\r\n\t// Check if a disconnected checkbox will retain its checked\r\n\t// value of true after appended to the DOM (IE6/7)\r\n\tinput.type = \"checkbox\";\r\n\tinput.checked = true;\r\n\tfragment.appendChild( input );\r\n\tsupport.appendChecked = input.checked;\r\n\r\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\r\n\t// Support: IE6-IE11+\r\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\r\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\r\n\r\n\t// #11217 - WebKit loses check when the name is after the checked attribute\r\n\tfragment.appendChild( div );\r\n\tdiv.innerHTML = \"<input type='radio' checked='checked' name='t'/>\";\r\n\r\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\r\n\t// old WebKit doesn't clone checked state correctly in fragments\r\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\r\n\r\n\t// Support: IE<9\r\n\t// Opera does not clone events (and typeof div.attachEvent === undefined).\r\n\t// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()\r\n\tsupport.noCloneEvent = true;\r\n\tif ( div.attachEvent ) {\r\n\t\tdiv.attachEvent( \"onclick\", function() {\r\n\t\t\tsupport.noCloneEvent = false;\r\n\t\t});\r\n\r\n\t\tdiv.cloneNode( true ).click();\r\n\t}\r\n\r\n\t// Execute the test only if not already executed in another module.\r\n\tif (support.deleteExpando == null) {\r\n\t\t// Support: IE<9\r\n\t\tsupport.deleteExpando = true;\r\n\t\ttry {\r\n\t\t\tdelete div.test;\r\n\t\t} catch( e ) {\r\n\t\t\tsupport.deleteExpando = false;\r\n\t\t}\r\n\t}\r\n})();\r\n\r\n\r\n(function() {\r\n\tvar i, eventName,\r\n\t\tdiv = document.createElement( \"div\" );\r\n\r\n\t// Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)\r\n\tfor ( i in { submit: true, change: true, focusin: true }) {\r\n\t\teventName = \"on\" + i;\r\n\r\n\t\tif ( !(support[ i + \"Bubbles\" ] = eventName in window) ) {\r\n\t\t\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\r\n\t\t\tdiv.setAttribute( eventName, \"t\" );\r\n\t\t\tsupport[ i + \"Bubbles\" ] = div.attributes[ eventName ].expando === false;\r\n\t\t}\r\n\t}\r\n\r\n\t// Null elements to avoid leaks in IE.\r\n\tdiv = null;\r\n})();\r\n\r\n\r\nvar rformElems = /^(?:input|select|textarea)$/i,\r\n\trkeyEvent = /^key/,\r\n\trmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,\r\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\r\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\r\n\r\nfunction returnTrue() {\r\n\treturn true;\r\n}\r\n\r\nfunction returnFalse() {\r\n\treturn false;\r\n}\r\n\r\nfunction safeActiveElement() {\r\n\ttry {\r\n\t\treturn document.activeElement;\r\n\t} catch ( err ) { }\r\n}\r\n\r\n/*\r\n * Helper functions for managing events -- not part of the public interface.\r\n * Props to Dean Edwards' addEvent library for many of the ideas.\r\n */\r\njQuery.event = {\r\n\r\n\tglobal: {},\r\n\r\n\tadd: function( elem, types, handler, data, selector ) {\r\n\t\tvar tmp, events, t, handleObjIn,\r\n\t\t\tspecial, eventHandle, handleObj,\r\n\t\t\thandlers, type, namespaces, origType,\r\n\t\t\telemData = jQuery._data( elem );\r\n\r\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\r\n\t\tif ( !elemData ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Caller can pass in an object of custom data in lieu of the handler\r\n\t\tif ( handler.handler ) {\r\n\t\t\thandleObjIn = handler;\r\n\t\t\thandler = handleObjIn.handler;\r\n\t\t\tselector = handleObjIn.selector;\r\n\t\t}\r\n\r\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\r\n\t\tif ( !handler.guid ) {\r\n\t\t\thandler.guid = jQuery.guid++;\r\n\t\t}\r\n\r\n\t\t// Init the element's event structure and main handler, if this is the first\r\n\t\tif ( !(events = elemData.events) ) {\r\n\t\t\tevents = elemData.events = {};\r\n\t\t}\r\n\t\tif ( !(eventHandle = elemData.handle) ) {\r\n\t\t\teventHandle = elemData.handle = function( e ) {\r\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\r\n\t\t\t\t// when an event is called after a page has unloaded\r\n\t\t\t\treturn typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?\r\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\r\n\t\t\t\t\tundefined;\r\n\t\t\t};\r\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\r\n\t\t\teventHandle.elem = elem;\r\n\t\t}\r\n\r\n\t\t// Handle multiple events separated by a space\r\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\r\n\t\tt = types.length;\r\n\t\twhile ( t-- ) {\r\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\r\n\t\t\ttype = origType = tmp[1];\r\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\r\n\r\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\r\n\t\t\tif ( !type ) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\t// If event changes its type, use the special event handlers for the changed type\r\n\t\t\tspecial = jQuery.event.special[ type ] || {};\r\n\r\n\t\t\t// If selector defined, determine special event api type, otherwise given type\r\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\r\n\r\n\t\t\t// Update special based on newly reset type\r\n\t\t\tspecial = jQuery.event.special[ type ] || {};\r\n\r\n\t\t\t// handleObj is passed to all event handlers\r\n\t\t\thandleObj = jQuery.extend({\r\n\t\t\t\ttype: type,\r\n\t\t\t\torigType: origType,\r\n\t\t\t\tdata: data,\r\n\t\t\t\thandler: handler,\r\n\t\t\t\tguid: handler.guid,\r\n\t\t\t\tselector: selector,\r\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\r\n\t\t\t\tnamespace: namespaces.join(\".\")\r\n\t\t\t}, handleObjIn );\r\n\r\n\t\t\t// Init the event handler queue if we're the first\r\n\t\t\tif ( !(handlers = events[ type ]) ) {\r\n\t\t\t\thandlers = events[ type ] = [];\r\n\t\t\t\thandlers.delegateCount = 0;\r\n\r\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\r\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\r\n\t\t\t\t\t// Bind the global event handler to the element\r\n\t\t\t\t\tif ( elem.addEventListener ) {\r\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\r\n\r\n\t\t\t\t\t} else if ( elem.attachEvent ) {\r\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif ( special.add ) {\r\n\t\t\t\tspecial.add.call( elem, handleObj );\r\n\r\n\t\t\t\tif ( !handleObj.handler.guid ) {\r\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Add to the element's handler list, delegates in front\r\n\t\t\tif ( selector ) {\r\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\r\n\t\t\t} else {\r\n\t\t\t\thandlers.push( handleObj );\r\n\t\t\t}\r\n\r\n\t\t\t// Keep track of which events have ever been used, for event optimization\r\n\t\t\tjQuery.event.global[ type ] = true;\r\n\t\t}\r\n\r\n\t\t// Nullify elem to prevent memory leaks in IE\r\n\t\telem = null;\r\n\t},\r\n\r\n\t// Detach an event or set of events from an element\r\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\r\n\t\tvar j, handleObj, tmp,\r\n\t\t\torigCount, t, events,\r\n\t\t\tspecial, handlers, type,\r\n\t\t\tnamespaces, origType,\r\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\r\n\r\n\t\tif ( !elemData || !(events = elemData.events) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Once for each type.namespace in types; type may be omitted\r\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\r\n\t\tt = types.length;\r\n\t\twhile ( t-- ) {\r\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\r\n\t\t\ttype = origType = tmp[1];\r\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\r\n\r\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\r\n\t\t\tif ( !type ) {\r\n\t\t\t\tfor ( type in events ) {\r\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\r\n\t\t\t\t}\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tspecial = jQuery.event.special[ type ] || {};\r\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\r\n\t\t\thandlers = events[ type ] || [];\r\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\r\n\r\n\t\t\t// Remove matching events\r\n\t\t\torigCount = j = handlers.length;\r\n\t\t\twhile ( j-- ) {\r\n\t\t\t\thandleObj = handlers[ j ];\r\n\r\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\r\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\r\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\r\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\r\n\t\t\t\t\thandlers.splice( j, 1 );\r\n\r\n\t\t\t\t\tif ( handleObj.selector ) {\r\n\t\t\t\t\t\thandlers.delegateCount--;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( special.remove ) {\r\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\r\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\r\n\t\t\tif ( origCount && !handlers.length ) {\r\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\r\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdelete events[ type ];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Remove the expando if it's no longer used\r\n\t\tif ( jQuery.isEmptyObject( events ) ) {\r\n\t\t\tdelete elemData.handle;\r\n\r\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\r\n\t\t\t// so use it instead of delete\r\n\t\t\tjQuery._removeData( elem, \"events\" );\r\n\t\t}\r\n\t},\r\n\r\n\ttrigger: function( event, data, elem, onlyHandlers ) {\r\n\t\tvar handle, ontype, cur,\r\n\t\t\tbubbleType, special, tmp, i,\r\n\t\t\teventPath = [ elem || document ],\r\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\r\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\r\n\r\n\t\tcur = tmp = elem = elem || document;\r\n\r\n\t\t// Don't do events on text and comment nodes\r\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\r\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( type.indexOf(\".\") >= 0 ) {\r\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\r\n\t\t\tnamespaces = type.split(\".\");\r\n\t\t\ttype = namespaces.shift();\r\n\t\t\tnamespaces.sort();\r\n\t\t}\r\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\r\n\r\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\r\n\t\tevent = event[ jQuery.expando ] ?\r\n\t\t\tevent :\r\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\r\n\r\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\r\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\r\n\t\tevent.namespace = namespaces.join(\".\");\r\n\t\tevent.namespace_re = event.namespace ?\r\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\r\n\t\t\tnull;\r\n\r\n\t\t// Clean up the event in case it is being reused\r\n\t\tevent.result = undefined;\r\n\t\tif ( !event.target ) {\r\n\t\t\tevent.target = elem;\r\n\t\t}\r\n\r\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\r\n\t\tdata = data == null ?\r\n\t\t\t[ event ] :\r\n\t\t\tjQuery.makeArray( data, [ event ] );\r\n\r\n\t\t// Allow special events to draw outside the lines\r\n\t\tspecial = jQuery.event.special[ type ] || {};\r\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\r\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\r\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\r\n\r\n\t\t\tbubbleType = special.delegateType || type;\r\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\r\n\t\t\t\tcur = cur.parentNode;\r\n\t\t\t}\r\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\r\n\t\t\t\teventPath.push( cur );\r\n\t\t\t\ttmp = cur;\r\n\t\t\t}\r\n\r\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\r\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\r\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Fire handlers on the event path\r\n\t\ti = 0;\r\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\r\n\r\n\t\t\tevent.type = i > 1 ?\r\n\t\t\t\tbubbleType :\r\n\t\t\t\tspecial.bindType || type;\r\n\r\n\t\t\t// jQuery handler\r\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\r\n\t\t\tif ( handle ) {\r\n\t\t\t\thandle.apply( cur, data );\r\n\t\t\t}\r\n\r\n\t\t\t// Native handler\r\n\t\t\thandle = ontype && cur[ ontype ];\r\n\t\t\tif ( handle && handle.apply && jQuery.acceptData( cur ) ) {\r\n\t\t\t\tevent.result = handle.apply( cur, data );\r\n\t\t\t\tif ( event.result === false ) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tevent.type = type;\r\n\r\n\t\t// If nobody prevented the default action, do it now\r\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\r\n\r\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\r\n\t\t\t\tjQuery.acceptData( elem ) ) {\r\n\r\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\r\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\r\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\r\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\r\n\r\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\r\n\t\t\t\t\ttmp = elem[ ontype ];\r\n\r\n\t\t\t\t\tif ( tmp ) {\r\n\t\t\t\t\t\telem[ ontype ] = null;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\r\n\t\t\t\t\tjQuery.event.triggered = type;\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\telem[ type ]();\r\n\t\t\t\t\t} catch ( e ) {\r\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\r\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\r\n\t\t\t\t\t}\r\n\t\t\t\t\tjQuery.event.triggered = undefined;\r\n\r\n\t\t\t\t\tif ( tmp ) {\r\n\t\t\t\t\t\telem[ ontype ] = tmp;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn event.result;\r\n\t},\r\n\r\n\tdispatch: function( event ) {\r\n\r\n\t\t// Make a writable jQuery.Event from the native event object\r\n\t\tevent = jQuery.event.fix( event );\r\n\r\n\t\tvar i, ret, handleObj, matched, j,\r\n\t\t\thandlerQueue = [],\r\n\t\t\targs = slice.call( arguments ),\r\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\r\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\r\n\r\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\r\n\t\targs[0] = event;\r\n\t\tevent.delegateTarget = this;\r\n\r\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\r\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Determine handlers\r\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\r\n\r\n\t\t// Run delegates first; they may want to stop propagation beneath us\r\n\t\ti = 0;\r\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\r\n\t\t\tevent.currentTarget = matched.elem;\r\n\r\n\t\t\tj = 0;\r\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\r\n\r\n\t\t\t\t// Triggered event must either 1) have no namespace, or\r\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\r\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\r\n\r\n\t\t\t\t\tevent.handleObj = handleObj;\r\n\t\t\t\t\tevent.data = handleObj.data;\r\n\r\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\r\n\t\t\t\t\t\t\t.apply( matched.elem, args );\r\n\r\n\t\t\t\t\tif ( ret !== undefined ) {\r\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Call the postDispatch hook for the mapped type\r\n\t\tif ( special.postDispatch ) {\r\n\t\t\tspecial.postDispatch.call( this, event );\r\n\t\t}\r\n\r\n\t\treturn event.result;\r\n\t},\r\n\r\n\thandlers: function( event, handlers ) {\r\n\t\tvar sel, handleObj, matches, i,\r\n\t\t\thandlerQueue = [],\r\n\t\t\tdelegateCount = handlers.delegateCount,\r\n\t\t\tcur = event.target;\r\n\r\n\t\t// Find delegate handlers\r\n\t\t// Black-hole SVG <use> instance trees (#13180)\r\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\r\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\r\n\r\n\t\t\t/* jshint eqeqeq: false */\r\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\r\n\t\t\t\t/* jshint eqeqeq: true */\r\n\r\n\t\t\t\t// Don't check non-elements (#13208)\r\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\r\n\t\t\t\tif ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== \"click\") ) {\r\n\t\t\t\t\tmatches = [];\r\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\r\n\t\t\t\t\t\thandleObj = handlers[ i ];\r\n\r\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\r\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\r\n\r\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\r\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\r\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\r\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ( matches[ sel ] ) {\r\n\t\t\t\t\t\t\tmatches.push( handleObj );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( matches.length ) {\r\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Add the remaining (directly-bound) handlers\r\n\t\tif ( delegateCount < handlers.length ) {\r\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\r\n\t\t}\r\n\r\n\t\treturn handlerQueue;\r\n\t},\r\n\r\n\tfix: function( event ) {\r\n\t\tif ( event[ jQuery.expando ] ) {\r\n\t\t\treturn event;\r\n\t\t}\r\n\r\n\t\t// Create a writable copy of the event object and normalize some properties\r\n\t\tvar i, prop, copy,\r\n\t\t\ttype = event.type,\r\n\t\t\toriginalEvent = event,\r\n\t\t\tfixHook = this.fixHooks[ type ];\r\n\r\n\t\tif ( !fixHook ) {\r\n\t\t\tthis.fixHooks[ type ] = fixHook =\r\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\r\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\r\n\t\t\t\t{};\r\n\t\t}\r\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\r\n\r\n\t\tevent = new jQuery.Event( originalEvent );\r\n\r\n\t\ti = copy.length;\r\n\t\twhile ( i-- ) {\r\n\t\t\tprop = copy[ i ];\r\n\t\t\tevent[ prop ] = originalEvent[ prop ];\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Fix target property (#1925)\r\n\t\tif ( !event.target ) {\r\n\t\t\tevent.target = originalEvent.srcElement || document;\r\n\t\t}\r\n\r\n\t\t// Support: Chrome 23+, Safari?\r\n\t\t// Target should not be a text node (#504, #13143)\r\n\t\tif ( event.target.nodeType === 3 ) {\r\n\t\t\tevent.target = event.target.parentNode;\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\r\n\t\tevent.metaKey = !!event.metaKey;\r\n\r\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\r\n\t},\r\n\r\n\t// Includes some event props shared by KeyEvent and MouseEvent\r\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\r\n\r\n\tfixHooks: {},\r\n\r\n\tkeyHooks: {\r\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\r\n\t\tfilter: function( event, original ) {\r\n\r\n\t\t\t// Add which for key events\r\n\t\t\tif ( event.which == null ) {\r\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\r\n\t\t\t}\r\n\r\n\t\t\treturn event;\r\n\t\t}\r\n\t},\r\n\r\n\tmouseHooks: {\r\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\r\n\t\tfilter: function( event, original ) {\r\n\t\t\tvar body, eventDoc, doc,\r\n\t\t\t\tbutton = original.button,\r\n\t\t\t\tfromElement = original.fromElement;\r\n\r\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\r\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\r\n\t\t\t\teventDoc = event.target.ownerDocument || document;\r\n\t\t\t\tdoc = eventDoc.documentElement;\r\n\t\t\t\tbody = eventDoc.body;\r\n\r\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\r\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );\r\n\t\t\t}\r\n\r\n\t\t\t// Add relatedTarget, if necessary\r\n\t\t\tif ( !event.relatedTarget && fromElement ) {\r\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\r\n\t\t\t}\r\n\r\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\r\n\t\t\t// Note: button is not normalized, so don't use it\r\n\t\t\tif ( !event.which && button !== undefined ) {\r\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\r\n\t\t\t}\r\n\r\n\t\t\treturn event;\r\n\t\t}\r\n\t},\r\n\r\n\tspecial: {\r\n\t\tload: {\r\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\r\n\t\t\tnoBubble: true\r\n\t\t},\r\n\t\tfocus: {\r\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\r\n\t\t\ttrigger: function() {\r\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t} catch ( e ) {\r\n\t\t\t\t\t\t// Support: IE<9\r\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\r\n\t\t\t\t\t\t// let .trigger() run the handlers\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdelegateType: \"focusin\"\r\n\t\t},\r\n\t\tblur: {\r\n\t\t\ttrigger: function() {\r\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\r\n\t\t\t\t\tthis.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdelegateType: \"focusout\"\r\n\t\t},\r\n\t\tclick: {\r\n\t\t\t// For checkbox, fire native event so checked state will be right\r\n\t\t\ttrigger: function() {\r\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\r\n\t\t\t\t\tthis.click();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\r\n\t\t\t_default: function( event ) {\r\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tbeforeunload: {\r\n\t\t\tpostDispatch: function( event ) {\r\n\r\n\t\t\t\t// Support: Firefox 20+\r\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\r\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\r\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tsimulate: function( type, elem, event, bubble ) {\r\n\t\t// Piggyback on a donor event to simulate a different one.\r\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\r\n\t\t// simulated event prevents default then we do the same on the donor.\r\n\t\tvar e = jQuery.extend(\r\n\t\t\tnew jQuery.Event(),\r\n\t\t\tevent,\r\n\t\t\t{\r\n\t\t\t\ttype: type,\r\n\t\t\t\tisSimulated: true,\r\n\t\t\t\toriginalEvent: {}\r\n\t\t\t}\r\n\t\t);\r\n\t\tif ( bubble ) {\r\n\t\t\tjQuery.event.trigger( e, null, elem );\r\n\t\t} else {\r\n\t\t\tjQuery.event.dispatch.call( elem, e );\r\n\t\t}\r\n\t\tif ( e.isDefaultPrevented() ) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t}\r\n};\r\n\r\njQuery.removeEvent = document.removeEventListener ?\r\n\tfunction( elem, type, handle ) {\r\n\t\tif ( elem.removeEventListener ) {\r\n\t\t\telem.removeEventListener( type, handle, false );\r\n\t\t}\r\n\t} :\r\n\tfunction( elem, type, handle ) {\r\n\t\tvar name = \"on\" + type;\r\n\r\n\t\tif ( elem.detachEvent ) {\r\n\r\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\r\n\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\r\n\t\t\tif ( typeof elem[ name ] === strundefined ) {\r\n\t\t\t\telem[ name ] = null;\r\n\t\t\t}\r\n\r\n\t\t\telem.detachEvent( name, handle );\r\n\t\t}\r\n\t};\r\n\r\njQuery.Event = function( src, props ) {\r\n\t// Allow instantiation without the 'new' keyword\r\n\tif ( !(this instanceof jQuery.Event) ) {\r\n\t\treturn new jQuery.Event( src, props );\r\n\t}\r\n\r\n\t// Event object\r\n\tif ( src && src.type ) {\r\n\t\tthis.originalEvent = src;\r\n\t\tthis.type = src.type;\r\n\r\n\t\t// Events bubbling up the document may have been marked as prevented\r\n\t\t// by a handler lower down the tree; reflect the correct value.\r\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\r\n\t\t\t\tsrc.defaultPrevented === undefined &&\r\n\t\t\t\t// Support: IE < 9, Android < 4.0\r\n\t\t\t\tsrc.returnValue === false ?\r\n\t\t\treturnTrue :\r\n\t\t\treturnFalse;\r\n\r\n\t// Event type\r\n\t} else {\r\n\t\tthis.type = src;\r\n\t}\r\n\r\n\t// Put explicitly provided properties onto the event object\r\n\tif ( props ) {\r\n\t\tjQuery.extend( this, props );\r\n\t}\r\n\r\n\t// Create a timestamp if incoming event doesn't have one\r\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\r\n\r\n\t// Mark it as fixed\r\n\tthis[ jQuery.expando ] = true;\r\n};\r\n\r\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\r\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\r\njQuery.Event.prototype = {\r\n\tisDefaultPrevented: returnFalse,\r\n\tisPropagationStopped: returnFalse,\r\n\tisImmediatePropagationStopped: returnFalse,\r\n\r\n\tpreventDefault: function() {\r\n\t\tvar e = this.originalEvent;\r\n\r\n\t\tthis.isDefaultPrevented = returnTrue;\r\n\t\tif ( !e ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// If preventDefault exists, run it on the original event\r\n\t\tif ( e.preventDefault ) {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t// Support: IE\r\n\t\t// Otherwise set the returnValue property of the original event to false\r\n\t\t} else {\r\n\t\t\te.returnValue = false;\r\n\t\t}\r\n\t},\r\n\tstopPropagation: function() {\r\n\t\tvar e = this.originalEvent;\r\n\r\n\t\tthis.isPropagationStopped = returnTrue;\r\n\t\tif ( !e ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// If stopPropagation exists, run it on the original event\r\n\t\tif ( e.stopPropagation ) {\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\r\n\t\t// Support: IE\r\n\t\t// Set the cancelBubble property of the original event to true\r\n\t\te.cancelBubble = true;\r\n\t},\r\n\tstopImmediatePropagation: function() {\r\n\t\tvar e = this.originalEvent;\r\n\r\n\t\tthis.isImmediatePropagationStopped = returnTrue;\r\n\r\n\t\tif ( e && e.stopImmediatePropagation ) {\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t}\r\n\r\n\t\tthis.stopPropagation();\r\n\t}\r\n};\r\n\r\n// Create mouseenter/leave events using mouseover/out and event-time checks\r\njQuery.each({\r\n\tmouseenter: \"mouseover\",\r\n\tmouseleave: \"mouseout\",\r\n\tpointerenter: \"pointerover\",\r\n\tpointerleave: \"pointerout\"\r\n}, function( orig, fix ) {\r\n\tjQuery.event.special[ orig ] = {\r\n\t\tdelegateType: fix,\r\n\t\tbindType: fix,\r\n\r\n\t\thandle: function( event ) {\r\n\t\t\tvar ret,\r\n\t\t\t\ttarget = this,\r\n\t\t\t\trelated = event.relatedTarget,\r\n\t\t\t\thandleObj = event.handleObj;\r\n\r\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\r\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\r\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\r\n\t\t\t\tevent.type = handleObj.origType;\r\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\r\n\t\t\t\tevent.type = fix;\r\n\t\t\t}\r\n\t\t\treturn ret;\r\n\t\t}\r\n\t};\r\n});\r\n\r\n// IE submit delegation\r\nif ( !support.submitBubbles ) {\r\n\r\n\tjQuery.event.special.submit = {\r\n\t\tsetup: function() {\r\n\t\t\t// Only need this for delegated form submit events\r\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\r\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\r\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\r\n\t\t\t\tvar elem = e.target,\r\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\r\n\t\t\t\tif ( form && !jQuery._data( form, \"submitBubbles\" ) ) {\r\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\r\n\t\t\t\t\t\tevent._submit_bubble = true;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tjQuery._data( form, \"submitBubbles\", true );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t// return undefined since we don't need an event listener\r\n\t\t},\r\n\r\n\t\tpostDispatch: function( event ) {\r\n\t\t\t// If form was submitted by the user, bubble the event up the tree\r\n\t\t\tif ( event._submit_bubble ) {\r\n\t\t\t\tdelete event._submit_bubble;\r\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\r\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tteardown: function() {\r\n\t\t\t// Only need this for delegated form submit events\r\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\r\n\t\t\tjQuery.event.remove( this, \"._submit\" );\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// IE change delegation and checkbox/radio fix\r\nif ( !support.changeBubbles ) {\r\n\r\n\tjQuery.event.special.change = {\r\n\r\n\t\tsetup: function() {\r\n\r\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\r\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\r\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\r\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\r\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\r\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\r\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\r\n\t\t\t\t\t\t\tthis._just_changed = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\r\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\r\n\t\t\t\t\t\t\tthis._just_changed = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\r\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\r\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\r\n\t\t\t\tvar elem = e.target;\r\n\r\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"changeBubbles\" ) ) {\r\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\r\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\r\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tjQuery._data( elem, \"changeBubbles\", true );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\thandle: function( event ) {\r\n\t\t\tvar elem = event.target;\r\n\r\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\r\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\r\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tteardown: function() {\r\n\t\t\tjQuery.event.remove( this, \"._change\" );\r\n\r\n\t\t\treturn !rformElems.test( this.nodeName );\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// Create \"bubbling\" focus and blur events\r\nif ( !support.focusinBubbles ) {\r\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\r\n\r\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\r\n\t\tvar handler = function( event ) {\r\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\r\n\t\t\t};\r\n\r\n\t\tjQuery.event.special[ fix ] = {\r\n\t\t\tsetup: function() {\r\n\t\t\t\tvar doc = this.ownerDocument || this,\r\n\t\t\t\t\tattaches = jQuery._data( doc, fix );\r\n\r\n\t\t\t\tif ( !attaches ) {\r\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\r\n\t\t\t\t}\r\n\t\t\t\tjQuery._data( doc, fix, ( attaches || 0 ) + 1 );\r\n\t\t\t},\r\n\t\t\tteardown: function() {\r\n\t\t\t\tvar doc = this.ownerDocument || this,\r\n\t\t\t\t\tattaches = jQuery._data( doc, fix ) - 1;\r\n\r\n\t\t\t\tif ( !attaches ) {\r\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\r\n\t\t\t\t\tjQuery._removeData( doc, fix );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tjQuery._data( doc, fix, attaches );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n}\r\n\r\njQuery.fn.extend({\r\n\r\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\r\n\t\tvar type, origFn;\r\n\r\n\t\t// Types can be a map of types/handlers\r\n\t\tif ( typeof types === \"object\" ) {\r\n\t\t\t// ( types-Object, selector, data )\r\n\t\t\tif ( typeof selector !== \"string\" ) {\r\n\t\t\t\t// ( types-Object, data )\r\n\t\t\t\tdata = data || selector;\r\n\t\t\t\tselector = undefined;\r\n\t\t\t}\r\n\t\t\tfor ( type in types ) {\r\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif ( data == null && fn == null ) {\r\n\t\t\t// ( types, fn )\r\n\t\t\tfn = selector;\r\n\t\t\tdata = selector = undefined;\r\n\t\t} else if ( fn == null ) {\r\n\t\t\tif ( typeof selector === \"string\" ) {\r\n\t\t\t\t// ( types, selector, fn )\r\n\t\t\t\tfn = data;\r\n\t\t\t\tdata = undefined;\r\n\t\t\t} else {\r\n\t\t\t\t// ( types, data, fn )\r\n\t\t\t\tfn = data;\r\n\t\t\t\tdata = selector;\r\n\t\t\t\tselector = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif ( fn === false ) {\r\n\t\t\tfn = returnFalse;\r\n\t\t} else if ( !fn ) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif ( one === 1 ) {\r\n\t\t\torigFn = fn;\r\n\t\t\tfn = function( event ) {\r\n\t\t\t\t// Can use an empty set, since event contains the info\r\n\t\t\t\tjQuery().off( event );\r\n\t\t\t\treturn origFn.apply( this, arguments );\r\n\t\t\t};\r\n\t\t\t// Use same guid so caller can remove using origFn\r\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\r\n\t\t}\r\n\t\treturn this.each( function() {\r\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\r\n\t\t});\r\n\t},\r\n\tone: function( types, selector, data, fn ) {\r\n\t\treturn this.on( types, selector, data, fn, 1 );\r\n\t},\r\n\toff: function( types, selector, fn ) {\r\n\t\tvar handleObj, type;\r\n\t\tif ( types && types.preventDefault && types.handleObj ) {\r\n\t\t\t// ( event ) dispatched jQuery.Event\r\n\t\t\thandleObj = types.handleObj;\r\n\t\t\tjQuery( types.delegateTarget ).off(\r\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\r\n\t\t\t\thandleObj.selector,\r\n\t\t\t\thandleObj.handler\r\n\t\t\t);\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif ( typeof types === \"object\" ) {\r\n\t\t\t// ( types-object [, selector] )\r\n\t\t\tfor ( type in types ) {\r\n\t\t\t\tthis.off( type, selector, types[ type ] );\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif ( selector === false || typeof selector === \"function\" ) {\r\n\t\t\t// ( types [, fn] )\r\n\t\t\tfn = selector;\r\n\t\t\tselector = undefined;\r\n\t\t}\r\n\t\tif ( fn === false ) {\r\n\t\t\tfn = returnFalse;\r\n\t\t}\r\n\t\treturn this.each(function() {\r\n\t\t\tjQuery.event.remove( this, types, fn, selector );\r\n\t\t});\r\n\t},\r\n\r\n\ttrigger: function( type, data ) {\r\n\t\treturn this.each(function() {\r\n\t\t\tjQuery.event.trigger( type, data, this );\r\n\t\t});\r\n\t},\r\n\ttriggerHandler: function( type, data ) {\r\n\t\tvar elem = this[0];\r\n\t\tif ( elem ) {\r\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\r\n\t\t}\r\n\t}\r\n});\r\n\r\n\r\nfunction createSafeFragment( document ) {\r\n\tvar list = nodeNames.split( \"|\" ),\r\n\t\tsafeFrag = document.createDocumentFragment();\r\n\r\n\tif ( safeFrag.createElement ) {\r\n\t\twhile ( list.length ) {\r\n\t\t\tsafeFrag.createElement(\r\n\t\t\t\tlist.pop()\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\treturn safeFrag;\r\n}\r\n\r\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\r\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\r\n\trinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\r\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\r\n\trleadingWhitespace = /^\\s+/,\r\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\r\n\trtagName = /<([\\w:]+)/,\r\n\trtbody = /<tbody/i,\r\n\trhtml = /<|&#?\\w+;/,\r\n\trnoInnerhtml = /<(?:script|style|link)/i,\r\n\t// checked=\"checked\" or checked\r\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\r\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\r\n\trscriptTypeMasked = /^true\\/(.*)/,\r\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\r\n\r\n\t// We have to close these tags to support XHTML (#13200)\r\n\twrapMap = {\r\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\r\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\r\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\r\n\t\tparam: [ 1, \"<object>\", \"</object>\" ],\r\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\r\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\r\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\r\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\r\n\r\n\t\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\r\n\t\t// unless wrapped in a div with non-breaking characters in front of it.\r\n\t\t_default: support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X<div>\", \"</div>\" ]\r\n\t},\r\n\tsafeFragment = createSafeFragment( document ),\r\n\tfragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\r\n\r\nwrapMap.optgroup = wrapMap.option;\r\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\r\nwrapMap.th = wrapMap.td;\r\n\r\nfunction getAll( context, tag ) {\r\n\tvar elems, elem,\r\n\t\ti = 0,\r\n\t\tfound = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || \"*\" ) :\r\n\t\t\ttypeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || \"*\" ) :\r\n\t\t\tundefined;\r\n\r\n\tif ( !found ) {\r\n\t\tfor ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {\r\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\r\n\t\t\t\tfound.push( elem );\r\n\t\t\t} else {\r\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\r\n\t\tjQuery.merge( [ context ], found ) :\r\n\t\tfound;\r\n}\r\n\r\n// Used in buildFragment, fixes the defaultChecked property\r\nfunction fixDefaultChecked( elem ) {\r\n\tif ( rcheckableType.test( elem.type ) ) {\r\n\t\telem.defaultChecked = elem.checked;\r\n\t}\r\n}\r\n\r\n// Support: IE<8\r\n// Manipulating tables requires a tbody\r\nfunction manipulationTarget( elem, content ) {\r\n\treturn jQuery.nodeName( elem, \"table\" ) &&\r\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\r\n\r\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\r\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\r\n\t\telem;\r\n}\r\n\r\n// Replace/restore the type attribute of script elements for safe DOM manipulation\r\nfunction disableScript( elem ) {\r\n\telem.type = (jQuery.find.attr( elem, \"type\" ) !== null) + \"/\" + elem.type;\r\n\treturn elem;\r\n}\r\nfunction restoreScript( elem ) {\r\n\tvar match = rscriptTypeMasked.exec( elem.type );\r\n\tif ( match ) {\r\n\t\telem.type = match[1];\r\n\t} else {\r\n\t\telem.removeAttribute(\"type\");\r\n\t}\r\n\treturn elem;\r\n}\r\n\r\n// Mark scripts as having already been evaluated\r\nfunction setGlobalEval( elems, refElements ) {\r\n\tvar elem,\r\n\t\ti = 0;\r\n\tfor ( ; (elem = elems[i]) != null; i++ ) {\r\n\t\tjQuery._data( elem, \"globalEval\", !refElements || jQuery._data( refElements[i], \"globalEval\" ) );\r\n\t}\r\n}\r\n\r\nfunction cloneCopyEvent( src, dest ) {\r\n\r\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar type, i, l,\r\n\t\toldData = jQuery._data( src ),\r\n\t\tcurData = jQuery._data( dest, oldData ),\r\n\t\tevents = oldData.events;\r\n\r\n\tif ( events ) {\r\n\t\tdelete curData.handle;\r\n\t\tcurData.events = {};\r\n\r\n\t\tfor ( type in events ) {\r\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\r\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// make the cloned public data object a copy from the original\r\n\tif ( curData.data ) {\r\n\t\tcurData.data = jQuery.extend( {}, curData.data );\r\n\t}\r\n}\r\n\r\nfunction fixCloneNodeIssues( src, dest ) {\r\n\tvar nodeName, e, data;\r\n\r\n\t// We do not need to do anything for non-Elements\r\n\tif ( dest.nodeType !== 1 ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tnodeName = dest.nodeName.toLowerCase();\r\n\r\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\r\n\tif ( !support.noCloneEvent && dest[ jQuery.expando ] ) {\r\n\t\tdata = jQuery._data( dest );\r\n\r\n\t\tfor ( e in data.events ) {\r\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\r\n\t\t}\r\n\r\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\r\n\t\tdest.removeAttribute( jQuery.expando );\r\n\t}\r\n\r\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\r\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\r\n\t\tdisableScript( dest ).text = src.text;\r\n\t\trestoreScript( dest );\r\n\r\n\t// IE6-10 improperly clones children of object elements using classid.\r\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\r\n\t} else if ( nodeName === \"object\" ) {\r\n\t\tif ( dest.parentNode ) {\r\n\t\t\tdest.outerHTML = src.outerHTML;\r\n\t\t}\r\n\r\n\t\t// This path appears unavoidable for IE9. When cloning an object\r\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\r\n\t\t// If the src has innerHTML and the destination does not,\r\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\r\n\t\tif ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {\r\n\t\t\tdest.innerHTML = src.innerHTML;\r\n\t\t}\r\n\r\n\t} else if ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\r\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\r\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\r\n\t\t// a checked appearance if the defaultChecked value isn't also set\r\n\r\n\t\tdest.defaultChecked = dest.checked = src.checked;\r\n\r\n\t\t// IE6-7 get confused and end up setting the value of a cloned\r\n\t\t// checkbox/radio button to an empty string instead of \"on\"\r\n\t\tif ( dest.value !== src.value ) {\r\n\t\t\tdest.value = src.value;\r\n\t\t}\r\n\r\n\t// IE6-8 fails to return the selected option to the default selected\r\n\t// state when cloning options\r\n\t} else if ( nodeName === \"option\" ) {\r\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\r\n\r\n\t// IE6-8 fails to set the defaultValue to the correct value when\r\n\t// cloning other types of input fields\r\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\r\n\t\tdest.defaultValue = src.defaultValue;\r\n\t}\r\n}\r\n\r\njQuery.extend({\r\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\r\n\t\tvar destElements, node, clone, i, srcElements,\r\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\r\n\r\n\t\tif ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\r\n\t\t\tclone = elem.cloneNode( true );\r\n\r\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\r\n\t\t} else {\r\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\r\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\r\n\t\t}\r\n\r\n\t\tif ( (!support.noCloneEvent || !support.noCloneChecked) &&\r\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\r\n\r\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\r\n\t\t\tdestElements = getAll( clone );\r\n\t\t\tsrcElements = getAll( elem );\r\n\r\n\t\t\t// Fix all IE cloning issues\r\n\t\t\tfor ( i = 0; (node = srcElements[i]) != null; ++i ) {\r\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\r\n\t\t\t\tif ( destElements[i] ) {\r\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[i] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Copy the events from the original to the clone\r\n\t\tif ( dataAndEvents ) {\r\n\t\t\tif ( deepDataAndEvents ) {\r\n\t\t\t\tsrcElements = srcElements || getAll( elem );\r\n\t\t\t\tdestElements = destElements || getAll( clone );\r\n\r\n\t\t\t\tfor ( i = 0; (node = srcElements[i]) != null; i++ ) {\r\n\t\t\t\t\tcloneCopyEvent( node, destElements[i] );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcloneCopyEvent( elem, clone );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Preserve script evaluation history\r\n\t\tdestElements = getAll( clone, \"script\" );\r\n\t\tif ( destElements.length > 0 ) {\r\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\r\n\t\t}\r\n\r\n\t\tdestElements = srcElements = node = null;\r\n\r\n\t\t// Return the cloned set\r\n\t\treturn clone;\r\n\t},\r\n\r\n\tbuildFragment: function( elems, context, scripts, selection ) {\r\n\t\tvar j, elem, contains,\r\n\t\t\ttmp, tag, tbody, wrap,\r\n\t\t\tl = elems.length,\r\n\r\n\t\t\t// Ensure a safe fragment\r\n\t\t\tsafe = createSafeFragment( context ),\r\n\r\n\t\t\tnodes = [],\r\n\t\t\ti = 0;\r\n\r\n\t\tfor ( ; i < l; i++ ) {\r\n\t\t\telem = elems[ i ];\r\n\r\n\t\t\tif ( elem || elem === 0 ) {\r\n\r\n\t\t\t\t// Add nodes directly\r\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\r\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\r\n\r\n\t\t\t\t// Convert non-html into a text node\r\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\r\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\r\n\r\n\t\t\t\t// Convert html into DOM nodes\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttmp = tmp || safe.appendChild( context.createElement(\"div\") );\r\n\r\n\t\t\t\t\t// Deserialize a standard representation\r\n\t\t\t\t\ttag = (rtagName.exec( elem ) || [ \"\", \"\" ])[ 1 ].toLowerCase();\r\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\r\n\r\n\t\t\t\t\ttmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[2];\r\n\r\n\t\t\t\t\t// Descend through wrappers to the right content\r\n\t\t\t\t\tj = wrap[0];\r\n\t\t\t\t\twhile ( j-- ) {\r\n\t\t\t\t\t\ttmp = tmp.lastChild;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Manually add leading whitespace removed by IE\r\n\t\t\t\t\tif ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\r\n\t\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\r\n\t\t\t\t\tif ( !support.tbody ) {\r\n\r\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\r\n\t\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\r\n\t\t\t\t\t\t\ttmp.firstChild :\r\n\r\n\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\r\n\t\t\t\t\t\t\twrap[1] === \"<table>\" && !rtbody.test( elem ) ?\r\n\t\t\t\t\t\t\t\ttmp :\r\n\t\t\t\t\t\t\t\t0;\r\n\r\n\t\t\t\t\t\tj = elem && elem.childNodes.length;\r\n\t\t\t\t\t\twhile ( j-- ) {\r\n\t\t\t\t\t\t\tif ( jQuery.nodeName( (tbody = elem.childNodes[j]), \"tbody\" ) && !tbody.childNodes.length ) {\r\n\t\t\t\t\t\t\t\telem.removeChild( tbody );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\r\n\r\n\t\t\t\t\t// Fix #12392 for WebKit and IE > 9\r\n\t\t\t\t\ttmp.textContent = \"\";\r\n\r\n\t\t\t\t\t// Fix #12392 for oldIE\r\n\t\t\t\t\twhile ( tmp.firstChild ) {\r\n\t\t\t\t\t\ttmp.removeChild( tmp.firstChild );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Remember the top-level container for proper cleanup\r\n\t\t\t\t\ttmp = safe.lastChild;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Fix #11356: Clear elements from fragment\r\n\t\tif ( tmp ) {\r\n\t\t\tsafe.removeChild( tmp );\r\n\t\t}\r\n\r\n\t\t// Reset defaultChecked for any radios and checkboxes\r\n\t\t// about to be appended to the DOM in IE 6/7 (#8060)\r\n\t\tif ( !support.appendChecked ) {\r\n\t\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\r\n\t\t}\r\n\r\n\t\ti = 0;\r\n\t\twhile ( (elem = nodes[ i++ ]) ) {\r\n\r\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\r\n\t\t\t// that element, do not do anything\r\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\r\n\r\n\t\t\t// Append to fragment\r\n\t\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\r\n\r\n\t\t\t// Preserve script evaluation history\r\n\t\t\tif ( contains ) {\r\n\t\t\t\tsetGlobalEval( tmp );\r\n\t\t\t}\r\n\r\n\t\t\t// Capture executables\r\n\t\t\tif ( scripts ) {\r\n\t\t\t\tj = 0;\r\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\r\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\r\n\t\t\t\t\t\tscripts.push( elem );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttmp = null;\r\n\r\n\t\treturn safe;\r\n\t},\r\n\r\n\tcleanData: function( elems, /* internal */ acceptData ) {\r\n\t\tvar elem, type, id, data,\r\n\t\t\ti = 0,\r\n\t\t\tinternalKey = jQuery.expando,\r\n\t\t\tcache = jQuery.cache,\r\n\t\t\tdeleteExpando = support.deleteExpando,\r\n\t\t\tspecial = jQuery.event.special;\r\n\r\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\r\n\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\r\n\r\n\t\t\t\tid = elem[ internalKey ];\r\n\t\t\t\tdata = id && cache[ id ];\r\n\r\n\t\t\t\tif ( data ) {\r\n\t\t\t\t\tif ( data.events ) {\r\n\t\t\t\t\t\tfor ( type in data.events ) {\r\n\t\t\t\t\t\t\tif ( special[ type ] ) {\r\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\r\n\r\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\r\n\t\t\t\t\tif ( cache[ id ] ) {\r\n\r\n\t\t\t\t\t\tdelete cache[ id ];\r\n\r\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\r\n\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\r\n\t\t\t\t\t\t// we must handle all of these cases\r\n\t\t\t\t\t\tif ( deleteExpando ) {\r\n\t\t\t\t\t\t\tdelete elem[ internalKey ];\r\n\r\n\t\t\t\t\t\t} else if ( typeof elem.removeAttribute !== strundefined ) {\r\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\r\n\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\telem[ internalKey ] = null;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdeletedIds.push( id );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\njQuery.fn.extend({\r\n\ttext: function( value ) {\r\n\t\treturn access( this, function( value ) {\r\n\t\t\treturn value === undefined ?\r\n\t\t\t\tjQuery.text( this ) :\r\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\r\n\t\t}, null, value, arguments.length );\r\n\t},\r\n\r\n\tappend: function() {\r\n\t\treturn this.domManip( arguments, function( elem ) {\r\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\r\n\t\t\t\tvar target = manipulationTarget( this, elem );\r\n\t\t\t\ttarget.appendChild( elem );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tprepend: function() {\r\n\t\treturn this.domManip( arguments, function( elem ) {\r\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\r\n\t\t\t\tvar target = manipulationTarget( this, elem );\r\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tbefore: function() {\r\n\t\treturn this.domManip( arguments, function( elem ) {\r\n\t\t\tif ( this.parentNode ) {\r\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tafter: function() {\r\n\t\treturn this.domManip( arguments, function( elem ) {\r\n\t\t\tif ( this.parentNode ) {\r\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tremove: function( selector, keepData /* Internal Use Only */ ) {\r\n\t\tvar elem,\r\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\r\n\t\t\ti = 0;\r\n\r\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\r\n\r\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\r\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\r\n\t\t\t}\r\n\r\n\t\t\tif ( elem.parentNode ) {\r\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\r\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\r\n\t\t\t\t}\r\n\t\t\t\telem.parentNode.removeChild( elem );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tempty: function() {\r\n\t\tvar elem,\r\n\t\t\ti = 0;\r\n\r\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\r\n\t\t\t// Remove element nodes and prevent memory leaks\r\n\t\t\tif ( elem.nodeType === 1 ) {\r\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\r\n\t\t\t}\r\n\r\n\t\t\t// Remove any remaining nodes\r\n\t\t\twhile ( elem.firstChild ) {\r\n\t\t\t\telem.removeChild( elem.firstChild );\r\n\t\t\t}\r\n\r\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\r\n\t\t\t// Support: IE<9\r\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\r\n\t\t\t\telem.options.length = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\r\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\r\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\r\n\r\n\t\treturn this.map(function() {\r\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\r\n\t\t});\r\n\t},\r\n\r\n\thtml: function( value ) {\r\n\t\treturn access( this, function( value ) {\r\n\t\t\tvar elem = this[ 0 ] || {},\r\n\t\t\t\ti = 0,\r\n\t\t\t\tl = this.length;\r\n\r\n\t\t\tif ( value === undefined ) {\r\n\t\t\t\treturn elem.nodeType === 1 ?\r\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\r\n\t\t\t\t\tundefined;\r\n\t\t\t}\r\n\r\n\t\t\t// See if we can take a shortcut and just use innerHTML\r\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\r\n\t\t\t\t( support.htmlSerialize || !rnoshimcache.test( value ) ) &&\r\n\t\t\t\t( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\r\n\t\t\t\t!wrapMap[ (rtagName.exec( value ) || [ \"\", \"\" ])[ 1 ].toLowerCase() ] ) {\r\n\r\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tfor (; i < l; i++ ) {\r\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\r\n\t\t\t\t\t\telem = this[i] || {};\r\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\r\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\r\n\t\t\t\t\t\t\telem.innerHTML = value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\telem = 0;\r\n\r\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\r\n\t\t\t\t} catch(e) {}\r\n\t\t\t}\r\n\r\n\t\t\tif ( elem ) {\r\n\t\t\t\tthis.empty().append( value );\r\n\t\t\t}\r\n\t\t}, null, value, arguments.length );\r\n\t},\r\n\r\n\treplaceWith: function() {\r\n\t\tvar arg = arguments[ 0 ];\r\n\r\n\t\t// Make the changes, replacing each context element with the new content\r\n\t\tthis.domManip( arguments, function( elem ) {\r\n\t\t\targ = this.parentNode;\r\n\r\n\t\t\tjQuery.cleanData( getAll( this ) );\r\n\r\n\t\t\tif ( arg ) {\r\n\t\t\t\targ.replaceChild( elem, this );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\r\n\t\treturn arg && (arg.length || arg.nodeType) ? this : this.remove();\r\n\t},\r\n\r\n\tdetach: function( selector ) {\r\n\t\treturn this.remove( selector, true );\r\n\t},\r\n\r\n\tdomManip: function( args, callback ) {\r\n\r\n\t\t// Flatten any nested arrays\r\n\t\targs = concat.apply( [], args );\r\n\r\n\t\tvar first, node, hasScripts,\r\n\t\t\tscripts, doc, fragment,\r\n\t\t\ti = 0,\r\n\t\t\tl = this.length,\r\n\t\t\tset = this,\r\n\t\t\tiNoClone = l - 1,\r\n\t\t\tvalue = args[0],\r\n\t\t\tisFunction = jQuery.isFunction( value );\r\n\r\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\r\n\t\tif ( isFunction ||\r\n\t\t\t\t( l > 1 && typeof value === \"string\" &&\r\n\t\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\r\n\t\t\treturn this.each(function( index ) {\r\n\t\t\t\tvar self = set.eq( index );\r\n\t\t\t\tif ( isFunction ) {\r\n\t\t\t\t\targs[0] = value.call( this, index, self.html() );\r\n\t\t\t\t}\r\n\t\t\t\tself.domManip( args, callback );\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ( l ) {\r\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );\r\n\t\t\tfirst = fragment.firstChild;\r\n\r\n\t\t\tif ( fragment.childNodes.length === 1 ) {\r\n\t\t\t\tfragment = first;\r\n\t\t\t}\r\n\r\n\t\t\tif ( first ) {\r\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\r\n\t\t\t\thasScripts = scripts.length;\r\n\r\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\r\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\r\n\t\t\t\tfor ( ; i < l; i++ ) {\r\n\t\t\t\t\tnode = fragment;\r\n\r\n\t\t\t\t\tif ( i !== iNoClone ) {\r\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\r\n\r\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\r\n\t\t\t\t\t\tif ( hasScripts ) {\r\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcallback.call( this[i], node, i );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( hasScripts ) {\r\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\r\n\r\n\t\t\t\t\t// Reenable scripts\r\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\r\n\r\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\r\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\r\n\t\t\t\t\t\tnode = scripts[ i ];\r\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\r\n\t\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\r\n\r\n\t\t\t\t\t\t\tif ( node.src ) {\r\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\r\n\t\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\r\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tjQuery.globalEval( ( node.text || node.textContent || node.innerHTML || \"\" ).replace( rcleanScript, \"\" ) );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Fix #11809: Avoid leaking memory\r\n\t\t\t\tfragment = first = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\njQuery.each({\r\n\tappendTo: \"append\",\r\n\tprependTo: \"prepend\",\r\n\tinsertBefore: \"before\",\r\n\tinsertAfter: \"after\",\r\n\treplaceAll: \"replaceWith\"\r\n}, function( name, original ) {\r\n\tjQuery.fn[ name ] = function( selector ) {\r\n\t\tvar elems,\r\n\t\t\ti = 0,\r\n\t\t\tret = [],\r\n\t\t\tinsert = jQuery( selector ),\r\n\t\t\tlast = insert.length - 1;\r\n\r\n\t\tfor ( ; i <= last; i++ ) {\r\n\t\t\telems = i === last ? this : this.clone(true);\r\n\t\t\tjQuery( insert[i] )[ original ]( elems );\r\n\r\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\r\n\t\t\tpush.apply( ret, elems.get() );\r\n\t\t}\r\n\r\n\t\treturn this.pushStack( ret );\r\n\t};\r\n});\r\n\r\n\r\nvar iframe,\r\n\telemdisplay = {};\r\n\r\n/**\r\n * Retrieve the actual display of a element\r\n * @param {String} name nodeName of the element\r\n * @param {Object} doc Document object\r\n */\r\n// Called only from within defaultDisplay\r\nfunction actualDisplay( name, doc ) {\r\n\tvar style,\r\n\t\telem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\r\n\r\n\t\t// getDefaultComputedStyle might be reliably used only on attached element\r\n\t\tdisplay = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?\r\n\r\n\t\t\t// Use of this method is a temporary fix (more like optmization) until something better comes along,\r\n\t\t\t// since it was removed from specification and supported only in FF\r\n\t\t\tstyle.display : jQuery.css( elem[ 0 ], \"display\" );\r\n\r\n\t// We don't have any data stored on the element,\r\n\t// so use \"detach\" method as fast way to get rid of the element\r\n\telem.detach();\r\n\r\n\treturn display;\r\n}\r\n\r\n/**\r\n * Try to determine the default display value of an element\r\n * @param {String} nodeName\r\n */\r\nfunction defaultDisplay( nodeName ) {\r\n\tvar doc = document,\r\n\t\tdisplay = elemdisplay[ nodeName ];\r\n\r\n\tif ( !display ) {\r\n\t\tdisplay = actualDisplay( nodeName, doc );\r\n\r\n\t\t// If the simple way fails, read from inside an iframe\r\n\t\tif ( display === \"none\" || !display ) {\r\n\r\n\t\t\t// Use the already-created iframe if possible\r\n\t\t\tiframe = (iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" )).appendTo( doc.documentElement );\r\n\r\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\r\n\t\t\tdoc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;\r\n\r\n\t\t\t// Support: IE\r\n\t\t\tdoc.write();\r\n\t\t\tdoc.close();\r\n\r\n\t\t\tdisplay = actualDisplay( nodeName, doc );\r\n\t\t\tiframe.detach();\r\n\t\t}\r\n\r\n\t\t// Store the correct default display\r\n\t\telemdisplay[ nodeName ] = display;\r\n\t}\r\n\r\n\treturn display;\r\n}\r\n\r\n\r\n(function() {\r\n\tvar shrinkWrapBlocksVal;\r\n\r\n\tsupport.shrinkWrapBlocks = function() {\r\n\t\tif ( shrinkWrapBlocksVal != null ) {\r\n\t\t\treturn shrinkWrapBlocksVal;\r\n\t\t}\r\n\r\n\t\t// Will be changed later if needed.\r\n\t\tshrinkWrapBlocksVal = false;\r\n\r\n\t\t// Minified: var b,c,d\r\n\t\tvar div, body, container;\r\n\r\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\r\n\t\tif ( !body || !body.style ) {\r\n\t\t\t// Test fired too early or in an unsupported environment, exit.\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Setup\r\n\t\tdiv = document.createElement( \"div\" );\r\n\t\tcontainer = document.createElement( \"div\" );\r\n\t\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\r\n\t\tbody.appendChild( container ).appendChild( div );\r\n\r\n\t\t// Support: IE6\r\n\t\t// Check if elements with layout shrink-wrap their children\r\n\t\tif ( typeof div.style.zoom !== strundefined ) {\r\n\t\t\t// Reset CSS: box-sizing; display; margin; border\r\n\t\t\tdiv.style.cssText =\r\n\t\t\t\t// Support: Firefox<29, Android 2.3\r\n\t\t\t\t// Vendor-prefix box-sizing\r\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\r\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;\" +\r\n\t\t\t\t\"padding:1px;width:1px;zoom:1\";\r\n\t\t\tdiv.appendChild( document.createElement( \"div\" ) ).style.width = \"5px\";\r\n\t\t\tshrinkWrapBlocksVal = div.offsetWidth !== 3;\r\n\t\t}\r\n\r\n\t\tbody.removeChild( container );\r\n\r\n\t\treturn shrinkWrapBlocksVal;\r\n\t};\r\n\r\n})();\r\nvar rmargin = (/^margin/);\r\n\r\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\r\n\r\n\r\n\r\nvar getStyles, curCSS,\r\n\trposition = /^(top|right|bottom|left)$/;\r\n\r\nif ( window.getComputedStyle ) {\r\n\tgetStyles = function( elem ) {\r\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\r\n\t\t// IE throws on elements created in popups\r\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\r\n\t\tif ( elem.ownerDocument.defaultView.opener ) {\r\n\t\t\treturn elem.ownerDocument.defaultView.getComputedStyle( elem, null );\r\n\t\t}\r\n\r\n\t\treturn window.getComputedStyle( elem, null );\r\n\t};\r\n\r\n\tcurCSS = function( elem, name, computed ) {\r\n\t\tvar width, minWidth, maxWidth, ret,\r\n\t\t\tstyle = elem.style;\r\n\r\n\t\tcomputed = computed || getStyles( elem );\r\n\r\n\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\r\n\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\r\n\r\n\t\tif ( computed ) {\r\n\r\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\r\n\t\t\t\tret = jQuery.style( elem, name );\r\n\t\t\t}\r\n\r\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\r\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\r\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\r\n\t\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\r\n\t\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\r\n\r\n\t\t\t\t// Remember the original values\r\n\t\t\t\twidth = style.width;\r\n\t\t\t\tminWidth = style.minWidth;\r\n\t\t\t\tmaxWidth = style.maxWidth;\r\n\r\n\t\t\t\t// Put in the new values to get a computed value out\r\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\r\n\t\t\t\tret = computed.width;\r\n\r\n\t\t\t\t// Revert the changed values\r\n\t\t\t\tstyle.width = width;\r\n\t\t\t\tstyle.minWidth = minWidth;\r\n\t\t\t\tstyle.maxWidth = maxWidth;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Support: IE\r\n\t\t// IE returns zIndex value as an integer.\r\n\t\treturn ret === undefined ?\r\n\t\t\tret :\r\n\t\t\tret + \"\";\r\n\t};\r\n} else if ( document.documentElement.currentStyle ) {\r\n\tgetStyles = function( elem ) {\r\n\t\treturn elem.currentStyle;\r\n\t};\r\n\r\n\tcurCSS = function( elem, name, computed ) {\r\n\t\tvar left, rs, rsLeft, ret,\r\n\t\t\tstyle = elem.style;\r\n\r\n\t\tcomputed = computed || getStyles( elem );\r\n\t\tret = computed ? computed[ name ] : undefined;\r\n\r\n\t\t// Avoid setting ret to empty string here\r\n\t\t// so we don't default to auto\r\n\t\tif ( ret == null && style && style[ name ] ) {\r\n\t\t\tret = style[ name ];\r\n\t\t}\r\n\r\n\t\t// From the awesome hack by Dean Edwards\r\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\r\n\r\n\t\t// If we're not dealing with a regular pixel number\r\n\t\t// but a number that has a weird ending, we need to convert it to pixels\r\n\t\t// but not position css attributes, as those are proportional to the parent element instead\r\n\t\t// and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\r\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\r\n\r\n\t\t\t// Remember the original values\r\n\t\t\tleft = style.left;\r\n\t\t\trs = elem.runtimeStyle;\r\n\t\t\trsLeft = rs && rs.left;\r\n\r\n\t\t\t// Put in the new values to get a computed value out\r\n\t\t\tif ( rsLeft ) {\r\n\t\t\t\trs.left = elem.currentStyle.left;\r\n\t\t\t}\r\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\r\n\t\t\tret = style.pixelLeft + \"px\";\r\n\r\n\t\t\t// Revert the changed values\r\n\t\t\tstyle.left = left;\r\n\t\t\tif ( rsLeft ) {\r\n\t\t\t\trs.left = rsLeft;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Support: IE\r\n\t\t// IE returns zIndex value as an integer.\r\n\t\treturn ret === undefined ?\r\n\t\t\tret :\r\n\t\t\tret + \"\" || \"auto\";\r\n\t};\r\n}\r\n\r\n\r\n\r\n\r\nfunction addGetHookIf( conditionFn, hookFn ) {\r\n\t// Define the hook, we'll check on the first run if it's really needed.\r\n\treturn {\r\n\t\tget: function() {\r\n\t\t\tvar condition = conditionFn();\r\n\r\n\t\t\tif ( condition == null ) {\r\n\t\t\t\t// The test was not ready at this point; screw the hook this time\r\n\t\t\t\t// but check again when needed next time.\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif ( condition ) {\r\n\t\t\t\t// Hook not needed (or it's not possible to use it due to missing dependency),\r\n\t\t\t\t// remove it.\r\n\t\t\t\t// Since there are no other hooks for marginRight, remove the whole object.\r\n\t\t\t\tdelete this.get;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\r\n\r\n\t\t\treturn (this.get = hookFn).apply( this, arguments );\r\n\t\t}\r\n\t};\r\n}\r\n\r\n\r\n(function() {\r\n\t// Minified: var b,c,d,e,f,g, h,i\r\n\tvar div, style, a, pixelPositionVal, boxSizingReliableVal,\r\n\t\treliableHiddenOffsetsVal, reliableMarginRightVal;\r\n\r\n\t// Setup\r\n\tdiv = document.createElement( \"div\" );\r\n\tdiv.innerHTML = \" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\r\n\ta = div.getElementsByTagName( \"a\" )[ 0 ];\r\n\tstyle = a && a.style;\r\n\r\n\t// Finish early in limited (non-browser) environments\r\n\tif ( !style ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tstyle.cssText = \"float:left;opacity:.5\";\r\n\r\n\t// Support: IE<9\r\n\t// Make sure that element opacity exists (as opposed to filter)\r\n\tsupport.opacity = style.opacity === \"0.5\";\r\n\r\n\t// Verify style float existence\r\n\t// (IE uses styleFloat instead of cssFloat)\r\n\tsupport.cssFloat = !!style.cssFloat;\r\n\r\n\tdiv.style.backgroundClip = \"content-box\";\r\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\r\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\r\n\r\n\t// Support: Firefox<29, Android 2.3\r\n\t// Vendor-prefix box-sizing\r\n\tsupport.boxSizing = style.boxSizing === \"\" || style.MozBoxSizing === \"\" ||\r\n\t\tstyle.WebkitBoxSizing === \"\";\r\n\r\n\tjQuery.extend(support, {\r\n\t\treliableHiddenOffsets: function() {\r\n\t\t\tif ( reliableHiddenOffsetsVal == null ) {\r\n\t\t\t\tcomputeStyleTests();\r\n\t\t\t}\r\n\t\t\treturn reliableHiddenOffsetsVal;\r\n\t\t},\r\n\r\n\t\tboxSizingReliable: function() {\r\n\t\t\tif ( boxSizingReliableVal == null ) {\r\n\t\t\t\tcomputeStyleTests();\r\n\t\t\t}\r\n\t\t\treturn boxSizingReliableVal;\r\n\t\t},\r\n\r\n\t\tpixelPosition: function() {\r\n\t\t\tif ( pixelPositionVal == null ) {\r\n\t\t\t\tcomputeStyleTests();\r\n\t\t\t}\r\n\t\t\treturn pixelPositionVal;\r\n\t\t},\r\n\r\n\t\t// Support: Android 2.3\r\n\t\treliableMarginRight: function() {\r\n\t\t\tif ( reliableMarginRightVal == null ) {\r\n\t\t\t\tcomputeStyleTests();\r\n\t\t\t}\r\n\t\t\treturn reliableMarginRightVal;\r\n\t\t}\r\n\t});\r\n\r\n\tfunction computeStyleTests() {\r\n\t\t// Minified: var b,c,d,j\r\n\t\tvar div, body, container, contents;\r\n\r\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\r\n\t\tif ( !body || !body.style ) {\r\n\t\t\t// Test fired too early or in an unsupported environment, exit.\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Setup\r\n\t\tdiv = document.createElement( \"div\" );\r\n\t\tcontainer = document.createElement( \"div\" );\r\n\t\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\r\n\t\tbody.appendChild( container ).appendChild( div );\r\n\r\n\t\tdiv.style.cssText =\r\n\t\t\t// Support: Firefox<29, Android 2.3\r\n\t\t\t// Vendor-prefix box-sizing\r\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;\" +\r\n\t\t\t\"box-sizing:border-box;display:block;margin-top:1%;top:1%;\" +\r\n\t\t\t\"border:1px;padding:1px;width:4px;position:absolute\";\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Assume reasonable values in the absence of getComputedStyle\r\n\t\tpixelPositionVal = boxSizingReliableVal = false;\r\n\t\treliableMarginRightVal = true;\r\n\r\n\t\t// Check for getComputedStyle so that this code is not run in IE<9.\r\n\t\tif ( window.getComputedStyle ) {\r\n\t\t\tpixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\r\n\t\t\tboxSizingReliableVal =\r\n\t\t\t\t( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\r\n\r\n\t\t\t// Support: Android 2.3\r\n\t\t\t// Div with explicit width and no margin-right incorrectly\r\n\t\t\t// gets computed margin-right based on width of container (#3333)\r\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\r\n\t\t\tcontents = div.appendChild( document.createElement( \"div\" ) );\r\n\r\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\r\n\t\t\tcontents.style.cssText = div.style.cssText =\r\n\t\t\t\t// Support: Firefox<29, Android 2.3\r\n\t\t\t\t// Vendor-prefix box-sizing\r\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\r\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\r\n\t\t\tcontents.style.marginRight = contents.style.width = \"0\";\r\n\t\t\tdiv.style.width = \"1px\";\r\n\r\n\t\t\treliableMarginRightVal =\r\n\t\t\t\t!parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );\r\n\r\n\t\t\tdiv.removeChild( contents );\r\n\t\t}\r\n\r\n\t\t// Support: IE8\r\n\t\t// Check if table cells still have offsetWidth/Height when they are set\r\n\t\t// to display:none and there are still other visible table cells in a\r\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\r\n\t\t// determining if an element has been hidden directly using\r\n\t\t// display:none (it is still safe to use offsets if a parent element is\r\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\r\n\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\r\n\t\tcontents = div.getElementsByTagName( \"td\" );\r\n\t\tcontents[ 0 ].style.cssText = \"margin:0;border:0;padding:0;display:none\";\r\n\t\treliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;\r\n\t\tif ( reliableHiddenOffsetsVal ) {\r\n\t\t\tcontents[ 0 ].style.display = \"\";\r\n\t\t\tcontents[ 1 ].style.display = \"none\";\r\n\t\t\treliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;\r\n\t\t}\r\n\r\n\t\tbody.removeChild( container );\r\n\t}\r\n\r\n})();\r\n\r\n\r\n// A method for quickly swapping in/out CSS properties to get correct calculations.\r\njQuery.swap = function( elem, options, callback, args ) {\r\n\tvar ret, name,\r\n\t\told = {};\r\n\r\n\t// Remember the old values, and insert the new ones\r\n\tfor ( name in options ) {\r\n\t\told[ name ] = elem.style[ name ];\r\n\t\telem.style[ name ] = options[ name ];\r\n\t}\r\n\r\n\tret = callback.apply( elem, args || [] );\r\n\r\n\t// Revert the old values\r\n\tfor ( name in options ) {\r\n\t\telem.style[ name ] = old[ name ];\r\n\t}\r\n\r\n\treturn ret;\r\n};\r\n\r\n\r\nvar\r\n\t\tralpha = /alpha\\([^)]*\\)/i,\r\n\tropacity = /opacity\\s*=\\s*([^)]*)/,\r\n\r\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\r\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\r\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\r\n\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\r\n\trrelNum = new RegExp( \"^([+-])=(\" + pnum + \")\", \"i\" ),\r\n\r\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\r\n\tcssNormalTransform = {\r\n\t\tletterSpacing: \"0\",\r\n\t\tfontWeight: \"400\"\r\n\t},\r\n\r\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\r\n\r\n\r\n// return a css property mapped to a potentially vendor prefixed property\r\nfunction vendorPropName( style, name ) {\r\n\r\n\t// shortcut for names that are not vendor prefixed\r\n\tif ( name in style ) {\r\n\t\treturn name;\r\n\t}\r\n\r\n\t// check for vendor prefixed names\r\n\tvar capName = name.charAt(0).toUpperCase() + name.slice(1),\r\n\t\torigName = name,\r\n\t\ti = cssPrefixes.length;\r\n\r\n\twhile ( i-- ) {\r\n\t\tname = cssPrefixes[ i ] + capName;\r\n\t\tif ( name in style ) {\r\n\t\t\treturn name;\r\n\t\t}\r\n\t}\r\n\r\n\treturn origName;\r\n}\r\n\r\nfunction showHide( elements, show ) {\r\n\tvar display, elem, hidden,\r\n\t\tvalues = [],\r\n\t\tindex = 0,\r\n\t\tlength = elements.length;\r\n\r\n\tfor ( ; index < length; index++ ) {\r\n\t\telem = elements[ index ];\r\n\t\tif ( !elem.style ) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\r\n\t\tdisplay = elem.style.display;\r\n\t\tif ( show ) {\r\n\t\t\t// Reset the inline display of this element to learn if it is\r\n\t\t\t// being hidden by cascaded rules or not\r\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\r\n\t\t\t\telem.style.display = \"\";\r\n\t\t\t}\r\n\r\n\t\t\t// Set elements which have been overridden with display: none\r\n\t\t\t// in a stylesheet to whatever the default browser style is\r\n\t\t\t// for such an element\r\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\r\n\t\t\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\", defaultDisplay(elem.nodeName) );\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\thidden = isHidden( elem );\r\n\r\n\t\t\tif ( display && display !== \"none\" || !hidden ) {\r\n\t\t\t\tjQuery._data( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Set the display of most of the elements in a second loop\r\n\t// to avoid the constant reflow\r\n\tfor ( index = 0; index < length; index++ ) {\r\n\t\telem = elements[ index ];\r\n\t\tif ( !elem.style ) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\r\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\r\n\t\t}\r\n\t}\r\n\r\n\treturn elements;\r\n}\r\n\r\nfunction setPositiveNumber( elem, value, subtract ) {\r\n\tvar matches = rnumsplit.exec( value );\r\n\treturn matches ?\r\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\r\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\r\n\t\tvalue;\r\n}\r\n\r\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\r\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\r\n\t\t// If we already have the right measurement, avoid augmentation\r\n\t\t4 :\r\n\t\t// Otherwise initialize for horizontal or vertical properties\r\n\t\tname === \"width\" ? 1 : 0,\r\n\r\n\t\tval = 0;\r\n\r\n\tfor ( ; i < 4; i += 2 ) {\r\n\t\t// both box models exclude margin, so add it if we want it\r\n\t\tif ( extra === \"margin\" ) {\r\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\r\n\t\t}\r\n\r\n\t\tif ( isBorderBox ) {\r\n\t\t\t// border-box includes padding, so remove it if we want content\r\n\t\t\tif ( extra === \"content\" ) {\r\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\r\n\t\t\t}\r\n\r\n\t\t\t// at this point, extra isn't border nor margin, so remove border\r\n\t\t\tif ( extra !== \"margin\" ) {\r\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// at this point, extra isn't content, so add padding\r\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\r\n\r\n\t\t\t// at this point, extra isn't content nor padding, so add border\r\n\t\t\tif ( extra !== \"padding\" ) {\r\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn val;\r\n}\r\n\r\nfunction getWidthOrHeight( elem, name, extra ) {\r\n\r\n\t// Start with offset property, which is equivalent to the border-box value\r\n\tvar valueIsBorderBox = true,\r\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\r\n\t\tstyles = getStyles( elem ),\r\n\t\tisBorderBox = support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\r\n\r\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\r\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\r\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\r\n\tif ( val <= 0 || val == null ) {\r\n\t\t// Fall back to computed then uncomputed css if necessary\r\n\t\tval = curCSS( elem, name, styles );\r\n\t\tif ( val < 0 || val == null ) {\r\n\t\t\tval = elem.style[ name ];\r\n\t\t}\r\n\r\n\t\t// Computed unit is not pixels. Stop here and return.\r\n\t\tif ( rnumnonpx.test(val) ) {\r\n\t\t\treturn val;\r\n\t\t}\r\n\r\n\t\t// we need the check for style in case a browser which returns unreliable values\r\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\r\n\t\tvalueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );\r\n\r\n\t\t// Normalize \"\", auto, and prepare for extra\r\n\t\tval = parseFloat( val ) || 0;\r\n\t}\r\n\r\n\t// use the active box-sizing model to add/subtract irrelevant styles\r\n\treturn ( val +\r\n\t\taugmentWidthOrHeight(\r\n\t\t\telem,\r\n\t\t\tname,\r\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\r\n\t\t\tvalueIsBorderBox,\r\n\t\t\tstyles\r\n\t\t)\r\n\t) + \"px\";\r\n}\r\n\r\njQuery.extend({\r\n\t// Add in style property hooks for overriding the default\r\n\t// behavior of getting and setting a style property\r\n\tcssHooks: {\r\n\t\topacity: {\r\n\t\t\tget: function( elem, computed ) {\r\n\t\t\t\tif ( computed ) {\r\n\t\t\t\t\t// We should always get a number back from opacity\r\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\r\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// Don't automatically add \"px\" to these possibly-unitless properties\r\n\tcssNumber: {\r\n\t\t\"columnCount\": true,\r\n\t\t\"fillOpacity\": true,\r\n\t\t\"flexGrow\": true,\r\n\t\t\"flexShrink\": true,\r\n\t\t\"fontWeight\": true,\r\n\t\t\"lineHeight\": true,\r\n\t\t\"opacity\": true,\r\n\t\t\"order\": true,\r\n\t\t\"orphans\": true,\r\n\t\t\"widows\": true,\r\n\t\t\"zIndex\": true,\r\n\t\t\"zoom\": true\r\n\t},\r\n\r\n\t// Add in properties whose names you wish to fix before\r\n\t// setting or getting the value\r\n\tcssProps: {\r\n\t\t// normalize float css property\r\n\t\t\"float\": support.cssFloat ? \"cssFloat\" : \"styleFloat\"\r\n\t},\r\n\r\n\t// Get and set the style property on a DOM Node\r\n\tstyle: function( elem, name, value, extra ) {\r\n\t\t// Don't set styles on text and comment nodes\r\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Make sure that we're working with the right name\r\n\t\tvar ret, type, hooks,\r\n\t\t\torigName = jQuery.camelCase( name ),\r\n\t\t\tstyle = elem.style;\r\n\r\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\r\n\r\n\t\t// gets hook for the prefixed version\r\n\t\t// followed by the unprefixed version\r\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\r\n\r\n\t\t// Check if we're setting a value\r\n\t\tif ( value !== undefined ) {\r\n\t\t\ttype = typeof value;\r\n\r\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\r\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\r\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\r\n\t\t\t\t// Fixes bug #9237\r\n\t\t\t\ttype = \"number\";\r\n\t\t\t}\r\n\r\n\t\t\t// Make sure that null and NaN values aren't set. See: #7116\r\n\t\t\tif ( value == null || value !== value ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\r\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\r\n\t\t\t\tvalue += \"px\";\r\n\t\t\t}\r\n\r\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\r\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\r\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0 ) {\r\n\t\t\t\tstyle[ name ] = \"inherit\";\r\n\t\t\t}\r\n\r\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\r\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\r\n\r\n\t\t\t\t// Support: IE\r\n\t\t\t\t// Swallow errors from 'invalid' CSS values (#5509)\r\n\t\t\t\ttry {\r\n\t\t\t\t\tstyle[ name ] = value;\r\n\t\t\t\t} catch(e) {}\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// If a hook was provided get the non-computed value from there\r\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\r\n\t\t\t// Otherwise just get the value from the style object\r\n\t\t\treturn style[ name ];\r\n\t\t}\r\n\t},\r\n\r\n\tcss: function( elem, name, extra, styles ) {\r\n\t\tvar num, val, hooks,\r\n\t\t\torigName = jQuery.camelCase( name );\r\n\r\n\t\t// Make sure that we're working with the right name\r\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\r\n\r\n\t\t// gets hook for the prefixed version\r\n\t\t// followed by the unprefixed version\r\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\r\n\r\n\t\t// If a hook was provided get the computed value from there\r\n\t\tif ( hooks && \"get\" in hooks ) {\r\n\t\t\tval = hooks.get( elem, true, extra );\r\n\t\t}\r\n\r\n\t\t// Otherwise, if a way to get the computed value exists, use that\r\n\t\tif ( val === undefined ) {\r\n\t\t\tval = curCSS( elem, name, styles );\r\n\t\t}\r\n\r\n\t\t//convert \"normal\" to computed value\r\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\r\n\t\t\tval = cssNormalTransform[ name ];\r\n\t\t}\r\n\r\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\r\n\t\tif ( extra === \"\" || extra ) {\r\n\t\t\tnum = parseFloat( val );\r\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\r\n\t\t}\r\n\t\treturn val;\r\n\t}\r\n});\r\n\r\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\r\n\tjQuery.cssHooks[ name ] = {\r\n\t\tget: function( elem, computed, extra ) {\r\n\t\t\tif ( computed ) {\r\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\r\n\t\t\t\t// however, it must have a current display style that would benefit from this\r\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) && elem.offsetWidth === 0 ?\r\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\r\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\r\n\t\t\t\t\t}) :\r\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tset: function( elem, value, extra ) {\r\n\t\t\tvar styles = extra && getStyles( elem );\r\n\t\t\treturn setPositiveNumber( elem, value, extra ?\r\n\t\t\t\taugmentWidthOrHeight(\r\n\t\t\t\t\telem,\r\n\t\t\t\t\tname,\r\n\t\t\t\t\textra,\r\n\t\t\t\t\tsupport.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\r\n\t\t\t\t\tstyles\r\n\t\t\t\t) : 0\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n});\r\n\r\nif ( !support.opacity ) {\r\n\tjQuery.cssHooks.opacity = {\r\n\t\tget: function( elem, computed ) {\r\n\t\t\t// IE uses filters for opacity\r\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\r\n\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\r\n\t\t\t\tcomputed ? \"1\" : \"\";\r\n\t\t},\r\n\r\n\t\tset: function( elem, value ) {\r\n\t\t\tvar style = elem.style,\r\n\t\t\t\tcurrentStyle = elem.currentStyle,\r\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\r\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\r\n\r\n\t\t\t// IE has trouble with opacity if it does not have layout\r\n\t\t\t// Force it by setting the zoom level\r\n\t\t\tstyle.zoom = 1;\r\n\r\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\r\n\t\t\t// if value === \"\", then remove inline opacity #12685\r\n\t\t\tif ( ( value >= 1 || value === \"\" ) &&\r\n\t\t\t\t\tjQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\r\n\t\t\t\t\tstyle.removeAttribute ) {\r\n\r\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\r\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\r\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\r\n\t\t\t\tstyle.removeAttribute( \"filter\" );\r\n\r\n\t\t\t\t// if there is no filter style applied in a css rule or unset inline opacity, we are done\r\n\t\t\t\tif ( value === \"\" || currentStyle && !currentStyle.filter ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// otherwise, set new filter values\r\n\t\t\tstyle.filter = ralpha.test( filter ) ?\r\n\t\t\t\tfilter.replace( ralpha, opacity ) :\r\n\t\t\t\tfilter + \" \" + opacity;\r\n\t\t}\r\n\t};\r\n}\r\n\r\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\r\n\tfunction( elem, computed ) {\r\n\t\tif ( computed ) {\r\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\r\n\t\t\t// Work around by temporarily setting element display to inline-block\r\n\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\r\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\r\n\t\t}\r\n\t}\r\n);\r\n\r\n// These hooks are used by animate to expand properties\r\njQuery.each({\r\n\tmargin: \"\",\r\n\tpadding: \"\",\r\n\tborder: \"Width\"\r\n}, function( prefix, suffix ) {\r\n\tjQuery.cssHooks[ prefix + suffix ] = {\r\n\t\texpand: function( value ) {\r\n\t\t\tvar i = 0,\r\n\t\t\t\texpanded = {},\r\n\r\n\t\t\t\t// assumes a single number if not a string\r\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\r\n\r\n\t\t\tfor ( ; i < 4; i++ ) {\r\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\r\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\r\n\t\t\t}\r\n\r\n\t\t\treturn expanded;\r\n\t\t}\r\n\t};\r\n\r\n\tif ( !rmargin.test( prefix ) ) {\r\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\r\n\t}\r\n});\r\n\r\njQuery.fn.extend({\r\n\tcss: function( name, value ) {\r\n\t\treturn access( this, function( elem, name, value ) {\r\n\t\t\tvar styles, len,\r\n\t\t\t\tmap = {},\r\n\t\t\t\ti = 0;\r\n\r\n\t\t\tif ( jQuery.isArray( name ) ) {\r\n\t\t\t\tstyles = getStyles( elem );\r\n\t\t\t\tlen = name.length;\r\n\r\n\t\t\t\tfor ( ; i < len; i++ ) {\r\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn map;\r\n\t\t\t}\r\n\r\n\t\t\treturn value !== undefined ?\r\n\t\t\t\tjQuery.style( elem, name, value ) :\r\n\t\t\t\tjQuery.css( elem, name );\r\n\t\t}, name, value, arguments.length > 1 );\r\n\t},\r\n\tshow: function() {\r\n\t\treturn showHide( this, true );\r\n\t},\r\n\thide: function() {\r\n\t\treturn showHide( this );\r\n\t},\r\n\ttoggle: function( state ) {\r\n\t\tif ( typeof state === \"boolean\" ) {\r\n\t\t\treturn state ? this.show() : this.hide();\r\n\t\t}\r\n\r\n\t\treturn this.each(function() {\r\n\t\t\tif ( isHidden( this ) ) {\r\n\t\t\t\tjQuery( this ).show();\r\n\t\t\t} else {\r\n\t\t\t\tjQuery( this ).hide();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\r\nfunction Tween( elem, options, prop, end, easing ) {\r\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\r\n}\r\njQuery.Tween = Tween;\r\n\r\nTween.prototype = {\r\n\tconstructor: Tween,\r\n\tinit: function( elem, options, prop, end, easing, unit ) {\r\n\t\tthis.elem = elem;\r\n\t\tthis.prop = prop;\r\n\t\tthis.easing = easing || \"swing\";\r\n\t\tthis.options = options;\r\n\t\tthis.start = this.now = this.cur();\r\n\t\tthis.end = end;\r\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\r\n\t},\r\n\tcur: function() {\r\n\t\tvar hooks = Tween.propHooks[ this.prop ];\r\n\r\n\t\treturn hooks && hooks.get ?\r\n\t\t\thooks.get( this ) :\r\n\t\t\tTween.propHooks._default.get( this );\r\n\t},\r\n\trun: function( percent ) {\r\n\t\tvar eased,\r\n\t\t\thooks = Tween.propHooks[ this.prop ];\r\n\r\n\t\tif ( this.options.duration ) {\r\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\r\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tthis.pos = eased = percent;\r\n\t\t}\r\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\r\n\r\n\t\tif ( this.options.step ) {\r\n\t\t\tthis.options.step.call( this.elem, this.now, this );\r\n\t\t}\r\n\r\n\t\tif ( hooks && hooks.set ) {\r\n\t\t\thooks.set( this );\r\n\t\t} else {\r\n\t\t\tTween.propHooks._default.set( this );\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n};\r\n\r\nTween.prototype.init.prototype = Tween.prototype;\r\n\r\nTween.propHooks = {\r\n\t_default: {\r\n\t\tget: function( tween ) {\r\n\t\t\tvar result;\r\n\r\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\r\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\r\n\t\t\t\treturn tween.elem[ tween.prop ];\r\n\t\t\t}\r\n\r\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\r\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\r\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\r\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\r\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\r\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\r\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\r\n\t\t},\r\n\t\tset: function( tween ) {\r\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\r\n\t\t\t// available and use plain properties where available\r\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\r\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\r\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\r\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\r\n\t\t\t} else {\r\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// Support: IE <=9\r\n// Panic based approach to setting things on disconnected nodes\r\n\r\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\r\n\tset: function( tween ) {\r\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\r\n\t\t\ttween.elem[ tween.prop ] = tween.now;\r\n\t\t}\r\n\t}\r\n};\r\n\r\njQuery.easing = {\r\n\tlinear: function( p ) {\r\n\t\treturn p;\r\n\t},\r\n\tswing: function( p ) {\r\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\r\n\t}\r\n};\r\n\r\njQuery.fx = Tween.prototype.init;\r\n\r\n// Back Compat <1.8 extension point\r\njQuery.fx.step = {};\r\n\r\n\r\n\r\n\r\nvar\r\n\tfxNow, timerId,\r\n\trfxtypes = /^(?:toggle|show|hide)$/,\r\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" ),\r\n\trrun = /queueHooks$/,\r\n\tanimationPrefilters = [ defaultPrefilter ],\r\n\ttweeners = {\r\n\t\t\"*\": [ function( prop, value ) {\r\n\t\t\tvar tween = this.createTween( prop, value ),\r\n\t\t\t\ttarget = tween.cur(),\r\n\t\t\t\tparts = rfxnum.exec( value ),\r\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\r\n\r\n\t\t\t\t// Starting value computation is required for potential unit mismatches\r\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\r\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\r\n\t\t\t\tscale = 1,\r\n\t\t\t\tmaxIterations = 20;\r\n\r\n\t\t\tif ( start && start[ 3 ] !== unit ) {\r\n\t\t\t\t// Trust units reported by jQuery.css\r\n\t\t\t\tunit = unit || start[ 3 ];\r\n\r\n\t\t\t\t// Make sure we update the tween properties later on\r\n\t\t\t\tparts = parts || [];\r\n\r\n\t\t\t\t// Iteratively approximate from a nonzero starting point\r\n\t\t\t\tstart = +target || 1;\r\n\r\n\t\t\t\tdo {\r\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\r\n\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\r\n\t\t\t\t\tscale = scale || \".5\";\r\n\r\n\t\t\t\t\t// Adjust and apply\r\n\t\t\t\t\tstart = start / scale;\r\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\r\n\r\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\r\n\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\r\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\r\n\t\t\t}\r\n\r\n\t\t\t// Update tween properties\r\n\t\t\tif ( parts ) {\r\n\t\t\t\tstart = tween.start = +start || +target || 0;\r\n\t\t\t\ttween.unit = unit;\r\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\r\n\t\t\t\ttween.end = parts[ 1 ] ?\r\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\r\n\t\t\t\t\t+parts[ 2 ];\r\n\t\t\t}\r\n\r\n\t\t\treturn tween;\r\n\t\t} ]\r\n\t};\r\n\r\n// Animations created synchronously will run synchronously\r\nfunction createFxNow() {\r\n\tsetTimeout(function() {\r\n\t\tfxNow = undefined;\r\n\t});\r\n\treturn ( fxNow = jQuery.now() );\r\n}\r\n\r\n// Generate parameters to create a standard animation\r\nfunction genFx( type, includeWidth ) {\r\n\tvar which,\r\n\t\tattrs = { height: type },\r\n\t\ti = 0;\r\n\r\n\t// if we include width, step value is 1 to do all cssExpand values,\r\n\t// if we don't include width, step value is 2 to skip over Left and Right\r\n\tincludeWidth = includeWidth ? 1 : 0;\r\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\r\n\t\twhich = cssExpand[ i ];\r\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\r\n\t}\r\n\r\n\tif ( includeWidth ) {\r\n\t\tattrs.opacity = attrs.width = type;\r\n\t}\r\n\r\n\treturn attrs;\r\n}\r\n\r\nfunction createTween( value, prop, animation ) {\r\n\tvar tween,\r\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\r\n\t\tindex = 0,\r\n\t\tlength = collection.length;\r\n\tfor ( ; index < length; index++ ) {\r\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\r\n\r\n\t\t\t// we're done with this property\r\n\t\t\treturn tween;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction defaultPrefilter( elem, props, opts ) {\r\n\t/* jshint validthis: true */\r\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\r\n\t\tanim = this,\r\n\t\torig = {},\r\n\t\tstyle = elem.style,\r\n\t\thidden = elem.nodeType && isHidden( elem ),\r\n\t\tdataShow = jQuery._data( elem, \"fxshow\" );\r\n\r\n\t// handle queue: false promises\r\n\tif ( !opts.queue ) {\r\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\r\n\t\tif ( hooks.unqueued == null ) {\r\n\t\t\thooks.unqueued = 0;\r\n\t\t\toldfire = hooks.empty.fire;\r\n\t\t\thooks.empty.fire = function() {\r\n\t\t\t\tif ( !hooks.unqueued ) {\r\n\t\t\t\t\toldfire();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t\thooks.unqueued++;\r\n\r\n\t\tanim.always(function() {\r\n\t\t\t// doing this makes sure that the complete handler will be called\r\n\t\t\t// before this completes\r\n\t\t\tanim.always(function() {\r\n\t\t\t\thooks.unqueued--;\r\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\r\n\t\t\t\t\thooks.empty.fire();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t// height/width overflow pass\r\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\r\n\t\t// Make sure that nothing sneaks out\r\n\t\t// Record all 3 overflow attributes because IE does not\r\n\t\t// change the overflow attribute when overflowX and\r\n\t\t// overflowY are set to the same value\r\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\r\n\r\n\t\t// Set display property to inline-block for height/width\r\n\t\t// animations on inline elements that are having width/height animated\r\n\t\tdisplay = jQuery.css( elem, \"display\" );\r\n\r\n\t\t// Test default display if display is currently \"none\"\r\n\t\tcheckDisplay = display === \"none\" ?\r\n\t\t\tjQuery._data( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\r\n\r\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\r\n\r\n\t\t\t// inline-level elements accept inline-block;\r\n\t\t\t// block-level elements need to be inline with layout\r\n\t\t\tif ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === \"inline\" ) {\r\n\t\t\t\tstyle.display = \"inline-block\";\r\n\t\t\t} else {\r\n\t\t\t\tstyle.zoom = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif ( opts.overflow ) {\r\n\t\tstyle.overflow = \"hidden\";\r\n\t\tif ( !support.shrinkWrapBlocks() ) {\r\n\t\t\tanim.always(function() {\r\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\r\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\r\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t// show/hide pass\r\n\tfor ( prop in props ) {\r\n\t\tvalue = props[ prop ];\r\n\t\tif ( rfxtypes.exec( value ) ) {\r\n\t\t\tdelete props[ prop ];\r\n\t\t\ttoggle = toggle || value === \"toggle\";\r\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\r\n\r\n\t\t\t\t// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden\r\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\r\n\t\t\t\t\thidden = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\r\n\r\n\t\t// Any non-fx value stops us from restoring the original display value\r\n\t\t} else {\r\n\t\t\tdisplay = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\tif ( !jQuery.isEmptyObject( orig ) ) {\r\n\t\tif ( dataShow ) {\r\n\t\t\tif ( \"hidden\" in dataShow ) {\r\n\t\t\t\thidden = dataShow.hidden;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tdataShow = jQuery._data( elem, \"fxshow\", {} );\r\n\t\t}\r\n\r\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\r\n\t\tif ( toggle ) {\r\n\t\t\tdataShow.hidden = !hidden;\r\n\t\t}\r\n\t\tif ( hidden ) {\r\n\t\t\tjQuery( elem ).show();\r\n\t\t} else {\r\n\t\t\tanim.done(function() {\r\n\t\t\t\tjQuery( elem ).hide();\r\n\t\t\t});\r\n\t\t}\r\n\t\tanim.done(function() {\r\n\t\t\tvar prop;\r\n\t\t\tjQuery._removeData( elem, \"fxshow\" );\r\n\t\t\tfor ( prop in orig ) {\r\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\r\n\t\t\t}\r\n\t\t});\r\n\t\tfor ( prop in orig ) {\r\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\r\n\r\n\t\t\tif ( !( prop in dataShow ) ) {\r\n\t\t\t\tdataShow[ prop ] = tween.start;\r\n\t\t\t\tif ( hidden ) {\r\n\t\t\t\t\ttween.end = tween.start;\r\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\r\n\t} else if ( (display === \"none\" ? defaultDisplay( elem.nodeName ) : display) === \"inline\" ) {\r\n\t\tstyle.display = display;\r\n\t}\r\n}\r\n\r\nfunction propFilter( props, specialEasing ) {\r\n\tvar index, name, easing, value, hooks;\r\n\r\n\t// camelCase, specialEasing and expand cssHook pass\r\n\tfor ( index in props ) {\r\n\t\tname = jQuery.camelCase( index );\r\n\t\teasing = specialEasing[ name ];\r\n\t\tvalue = props[ index ];\r\n\t\tif ( jQuery.isArray( value ) ) {\r\n\t\t\teasing = value[ 1 ];\r\n\t\t\tvalue = props[ index ] = value[ 0 ];\r\n\t\t}\r\n\r\n\t\tif ( index !== name ) {\r\n\t\t\tprops[ name ] = value;\r\n\t\t\tdelete props[ index ];\r\n\t\t}\r\n\r\n\t\thooks = jQuery.cssHooks[ name ];\r\n\t\tif ( hooks && \"expand\" in hooks ) {\r\n\t\t\tvalue = hooks.expand( value );\r\n\t\t\tdelete props[ name ];\r\n\r\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\r\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\r\n\t\t\tfor ( index in value ) {\r\n\t\t\t\tif ( !( index in props ) ) {\r\n\t\t\t\t\tprops[ index ] = value[ index ];\r\n\t\t\t\t\tspecialEasing[ index ] = easing;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tspecialEasing[ name ] = easing;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction Animation( elem, properties, options ) {\r\n\tvar result,\r\n\t\tstopped,\r\n\t\tindex = 0,\r\n\t\tlength = animationPrefilters.length,\r\n\t\tdeferred = jQuery.Deferred().always( function() {\r\n\t\t\t// don't match elem in the :animated selector\r\n\t\t\tdelete tick.elem;\r\n\t\t}),\r\n\t\ttick = function() {\r\n\t\t\tif ( stopped ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tvar currentTime = fxNow || createFxNow(),\r\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\r\n\t\t\t\t// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)\r\n\t\t\t\ttemp = remaining / animation.duration || 0,\r\n\t\t\t\tpercent = 1 - temp,\r\n\t\t\t\tindex = 0,\r\n\t\t\t\tlength = animation.tweens.length;\r\n\r\n\t\t\tfor ( ; index < length ; index++ ) {\r\n\t\t\t\tanimation.tweens[ index ].run( percent );\r\n\t\t\t}\r\n\r\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\r\n\r\n\t\t\tif ( percent < 1 && length ) {\r\n\t\t\t\treturn remaining;\r\n\t\t\t} else {\r\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tanimation = deferred.promise({\r\n\t\t\telem: elem,\r\n\t\t\tprops: jQuery.extend( {}, properties ),\r\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\r\n\t\t\toriginalProperties: properties,\r\n\t\t\toriginalOptions: options,\r\n\t\t\tstartTime: fxNow || createFxNow(),\r\n\t\t\tduration: options.duration,\r\n\t\t\ttweens: [],\r\n\t\t\tcreateTween: function( prop, end ) {\r\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\r\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\r\n\t\t\t\tanimation.tweens.push( tween );\r\n\t\t\t\treturn tween;\r\n\t\t\t},\r\n\t\t\tstop: function( gotoEnd ) {\r\n\t\t\t\tvar index = 0,\r\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\r\n\t\t\t\t\t// otherwise we skip this part\r\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\r\n\t\t\t\tif ( stopped ) {\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t}\r\n\t\t\t\tstopped = true;\r\n\t\t\t\tfor ( ; index < length ; index++ ) {\r\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// resolve when we played the last frame\r\n\t\t\t\t// otherwise, reject\r\n\t\t\t\tif ( gotoEnd ) {\r\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t}),\r\n\t\tprops = animation.props;\r\n\r\n\tpropFilter( props, animation.opts.specialEasing );\r\n\r\n\tfor ( ; index < length ; index++ ) {\r\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\r\n\t\tif ( result ) {\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\r\n\tjQuery.map( props, createTween, animation );\r\n\r\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\r\n\t\tanimation.opts.start.call( elem, animation );\r\n\t}\r\n\r\n\tjQuery.fx.timer(\r\n\t\tjQuery.extend( tick, {\r\n\t\t\telem: elem,\r\n\t\t\tanim: animation,\r\n\t\t\tqueue: animation.opts.queue\r\n\t\t})\r\n\t);\r\n\r\n\t// attach callbacks from options\r\n\treturn animation.progress( animation.opts.progress )\r\n\t\t.done( animation.opts.done, animation.opts.complete )\r\n\t\t.fail( animation.opts.fail )\r\n\t\t.always( animation.opts.always );\r\n}\r\n\r\njQuery.Animation = jQuery.extend( Animation, {\r\n\ttweener: function( props, callback ) {\r\n\t\tif ( jQuery.isFunction( props ) ) {\r\n\t\t\tcallback = props;\r\n\t\t\tprops = [ \"*\" ];\r\n\t\t} else {\r\n\t\t\tprops = props.split(\" \");\r\n\t\t}\r\n\r\n\t\tvar prop,\r\n\t\t\tindex = 0,\r\n\t\t\tlength = props.length;\r\n\r\n\t\tfor ( ; index < length ; index++ ) {\r\n\t\t\tprop = props[ index ];\r\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\r\n\t\t\ttweeners[ prop ].unshift( callback );\r\n\t\t}\r\n\t},\r\n\r\n\tprefilter: function( callback, prepend ) {\r\n\t\tif ( prepend ) {\r\n\t\t\tanimationPrefilters.unshift( callback );\r\n\t\t} else {\r\n\t\t\tanimationPrefilters.push( callback );\r\n\t\t}\r\n\t}\r\n});\r\n\r\njQuery.speed = function( speed, easing, fn ) {\r\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\r\n\t\tcomplete: fn || !fn && easing ||\r\n\t\t\tjQuery.isFunction( speed ) && speed,\r\n\t\tduration: speed,\r\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\r\n\t};\r\n\r\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\r\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\r\n\r\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\r\n\tif ( opt.queue == null || opt.queue === true ) {\r\n\t\topt.queue = \"fx\";\r\n\t}\r\n\r\n\t// Queueing\r\n\topt.old = opt.complete;\r\n\r\n\topt.complete = function() {\r\n\t\tif ( jQuery.isFunction( opt.old ) ) {\r\n\t\t\topt.old.call( this );\r\n\t\t}\r\n\r\n\t\tif ( opt.queue ) {\r\n\t\t\tjQuery.dequeue( this, opt.queue );\r\n\t\t}\r\n\t};\r\n\r\n\treturn opt;\r\n};\r\n\r\njQuery.fn.extend({\r\n\tfadeTo: function( speed, to, easing, callback ) {\r\n\r\n\t\t// show any hidden elements after setting opacity to 0\r\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\r\n\r\n\t\t\t// animate to the value specified\r\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\r\n\t},\r\n\tanimate: function( prop, speed, easing, callback ) {\r\n\t\tvar empty = jQuery.isEmptyObject( prop ),\r\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\r\n\t\t\tdoAnimation = function() {\r\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\r\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\r\n\r\n\t\t\t\t// Empty animations, or finishing resolves immediately\r\n\t\t\t\tif ( empty || jQuery._data( this, \"finish\" ) ) {\r\n\t\t\t\t\tanim.stop( true );\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tdoAnimation.finish = doAnimation;\r\n\r\n\t\treturn empty || optall.queue === false ?\r\n\t\t\tthis.each( doAnimation ) :\r\n\t\t\tthis.queue( optall.queue, doAnimation );\r\n\t},\r\n\tstop: function( type, clearQueue, gotoEnd ) {\r\n\t\tvar stopQueue = function( hooks ) {\r\n\t\t\tvar stop = hooks.stop;\r\n\t\t\tdelete hooks.stop;\r\n\t\t\tstop( gotoEnd );\r\n\t\t};\r\n\r\n\t\tif ( typeof type !== \"string\" ) {\r\n\t\t\tgotoEnd = clearQueue;\r\n\t\t\tclearQueue = type;\r\n\t\t\ttype = undefined;\r\n\t\t}\r\n\t\tif ( clearQueue && type !== false ) {\r\n\t\t\tthis.queue( type || \"fx\", [] );\r\n\t\t}\r\n\r\n\t\treturn this.each(function() {\r\n\t\t\tvar dequeue = true,\r\n\t\t\t\tindex = type != null && type + \"queueHooks\",\r\n\t\t\t\ttimers = jQuery.timers,\r\n\t\t\t\tdata = jQuery._data( this );\r\n\r\n\t\t\tif ( index ) {\r\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\r\n\t\t\t\t\tstopQueue( data[ index ] );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor ( index in data ) {\r\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\r\n\t\t\t\t\t\tstopQueue( data[ index ] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor ( index = timers.length; index--; ) {\r\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\r\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\r\n\t\t\t\t\tdequeue = false;\r\n\t\t\t\t\ttimers.splice( index, 1 );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// start the next in the queue if the last step wasn't forced\r\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\r\n\t\t\t// but only if they were gotoEnd\r\n\t\t\tif ( dequeue || !gotoEnd ) {\r\n\t\t\t\tjQuery.dequeue( this, type );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\tfinish: function( type ) {\r\n\t\tif ( type !== false ) {\r\n\t\t\ttype = type || \"fx\";\r\n\t\t}\r\n\t\treturn this.each(function() {\r\n\t\t\tvar index,\r\n\t\t\t\tdata = jQuery._data( this ),\r\n\t\t\t\tqueue = data[ type + \"queue\" ],\r\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\r\n\t\t\t\ttimers = jQuery.timers,\r\n\t\t\t\tlength = queue ? queue.length : 0;\r\n\r\n\t\t\t// enable finishing flag on private data\r\n\t\t\tdata.finish = true;\r\n\r\n\t\t\t// empty the queue first\r\n\t\t\tjQuery.queue( this, type, [] );\r\n\r\n\t\t\tif ( hooks && hooks.stop ) {\r\n\t\t\t\thooks.stop.call( this, true );\r\n\t\t\t}\r\n\r\n\t\t\t// look for any active animations, and finish them\r\n\t\t\tfor ( index = timers.length; index--; ) {\r\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\r\n\t\t\t\t\ttimers[ index ].anim.stop( true );\r\n\t\t\t\t\ttimers.splice( index, 1 );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// look for any animations in the old queue and finish them\r\n\t\t\tfor ( index = 0; index < length; index++ ) {\r\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\r\n\t\t\t\t\tqueue[ index ].finish.call( this );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// turn off finishing flag\r\n\t\t\tdelete data.finish;\r\n\t\t});\r\n\t}\r\n});\r\n\r\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\r\n\tvar cssFn = jQuery.fn[ name ];\r\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\r\n\t\treturn speed == null || typeof speed === \"boolean\" ?\r\n\t\t\tcssFn.apply( this, arguments ) :\r\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\r\n\t};\r\n});\r\n\r\n// Generate shortcuts for custom animations\r\njQuery.each({\r\n\tslideDown: genFx(\"show\"),\r\n\tslideUp: genFx(\"hide\"),\r\n\tslideToggle: genFx(\"toggle\"),\r\n\tfadeIn: { opacity: \"show\" },\r\n\tfadeOut: { opacity: \"hide\" },\r\n\tfadeToggle: { opacity: \"toggle\" }\r\n}, function( name, props ) {\r\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\r\n\t\treturn this.animate( props, speed, easing, callback );\r\n\t};\r\n});\r\n\r\njQuery.timers = [];\r\njQuery.fx.tick = function() {\r\n\tvar timer,\r\n\t\ttimers = jQuery.timers,\r\n\t\ti = 0;\r\n\r\n\tfxNow = jQuery.now();\r\n\r\n\tfor ( ; i < timers.length; i++ ) {\r\n\t\ttimer = timers[ i ];\r\n\t\t// Checks the timer has not already been removed\r\n\t\tif ( !timer() && timers[ i ] === timer ) {\r\n\t\t\ttimers.splice( i--, 1 );\r\n\t\t}\r\n\t}\r\n\r\n\tif ( !timers.length ) {\r\n\t\tjQuery.fx.stop();\r\n\t}\r\n\tfxNow = undefined;\r\n};\r\n\r\njQuery.fx.timer = function( timer ) {\r\n\tjQuery.timers.push( timer );\r\n\tif ( timer() ) {\r\n\t\tjQuery.fx.start();\r\n\t} else {\r\n\t\tjQuery.timers.pop();\r\n\t}\r\n};\r\n\r\njQuery.fx.interval = 13;\r\n\r\njQuery.fx.start = function() {\r\n\tif ( !timerId ) {\r\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\r\n\t}\r\n};\r\n\r\njQuery.fx.stop = function() {\r\n\tclearInterval( timerId );\r\n\ttimerId = null;\r\n};\r\n\r\njQuery.fx.speeds = {\r\n\tslow: 600,\r\n\tfast: 200,\r\n\t// Default speed\r\n\t_default: 400\r\n};\r\n\r\n\r\n// Based off of the plugin by Clint Helfers, with permission.\r\n// http://blindsignals.com/index.php/2009/07/jquery-delay/\r\njQuery.fn.delay = function( time, type ) {\r\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\r\n\ttype = type || \"fx\";\r\n\r\n\treturn this.queue( type, function( next, hooks ) {\r\n\t\tvar timeout = setTimeout( next, time );\r\n\t\thooks.stop = function() {\r\n\t\t\tclearTimeout( timeout );\r\n\t\t};\r\n\t});\r\n};\r\n\r\n\r\n(function() {\r\n\t// Minified: var a,b,c,d,e\r\n\tvar input, div, select, a, opt;\r\n\r\n\t// Setup\r\n\tdiv = document.createElement( \"div\" );\r\n\tdiv.setAttribute( \"className\", \"t\" );\r\n\tdiv.innerHTML = \" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\r\n\ta = div.getElementsByTagName(\"a\")[ 0 ];\r\n\r\n\t// First batch of tests.\r\n\tselect = document.createElement(\"select\");\r\n\topt = select.appendChild( document.createElement(\"option\") );\r\n\tinput = div.getElementsByTagName(\"input\")[ 0 ];\r\n\r\n\ta.style.cssText = \"top:1px\";\r\n\r\n\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\r\n\tsupport.getSetAttribute = div.className !== \"t\";\r\n\r\n\t// Get the style information from getAttribute\r\n\t// (IE uses .cssText instead)\r\n\tsupport.style = /top/.test( a.getAttribute(\"style\") );\r\n\r\n\t// Make sure that URLs aren't manipulated\r\n\t// (IE normalizes it by default)\r\n\tsupport.hrefNormalized = a.getAttribute(\"href\") === \"/a\";\r\n\r\n\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\r\n\tsupport.checkOn = !!input.value;\r\n\r\n\t// Make sure that a selected-by-default option has a working selected property.\r\n\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\r\n\tsupport.optSelected = opt.selected;\r\n\r\n\t// Tests for enctype support on a form (#6743)\r\n\tsupport.enctype = !!document.createElement(\"form\").enctype;\r\n\r\n\t// Make sure that the options inside disabled selects aren't marked as disabled\r\n\t// (WebKit marks them as disabled)\r\n\tselect.disabled = true;\r\n\tsupport.optDisabled = !opt.disabled;\r\n\r\n\t// Support: IE8 only\r\n\t// Check if we can trust getAttribute(\"value\")\r\n\tinput = document.createElement( \"input\" );\r\n\tinput.setAttribute( \"value\", \"\" );\r\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\r\n\r\n\t// Check if an input maintains its value after becoming a radio\r\n\tinput.value = \"t\";\r\n\tinput.setAttribute( \"type\", \"radio\" );\r\n\tsupport.radioValue = input.value === \"t\";\r\n})();\r\n\r\n\r\nvar rreturn = /\\r/g;\r\n\r\njQuery.fn.extend({\r\n\tval: function( value ) {\r\n\t\tvar hooks, ret, isFunction,\r\n\t\t\telem = this[0];\r\n\r\n\t\tif ( !arguments.length ) {\r\n\t\t\tif ( elem ) {\r\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\r\n\r\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\r\n\t\t\t\t\treturn ret;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tret = elem.value;\r\n\r\n\t\t\t\treturn typeof ret === \"string\" ?\r\n\t\t\t\t\t// handle most common string cases\r\n\t\t\t\t\tret.replace(rreturn, \"\") :\r\n\t\t\t\t\t// handle cases where value is null/undef or number\r\n\t\t\t\t\tret == null ? \"\" : ret;\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tisFunction = jQuery.isFunction( value );\r\n\r\n\t\treturn this.each(function( i ) {\r\n\t\t\tvar val;\r\n\r\n\t\t\tif ( this.nodeType !== 1 ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif ( isFunction ) {\r\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\r\n\t\t\t} else {\r\n\t\t\t\tval = value;\r\n\t\t\t}\r\n\r\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\r\n\t\t\tif ( val == null ) {\r\n\t\t\t\tval = \"\";\r\n\t\t\t} else if ( typeof val === \"number\" ) {\r\n\t\t\t\tval += \"\";\r\n\t\t\t} else if ( jQuery.isArray( val ) ) {\r\n\t\t\t\tval = jQuery.map( val, function( value ) {\r\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\r\n\r\n\t\t\t// If set returns undefined, fall back to normal setting\r\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\r\n\t\t\t\tthis.value = val;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n});\r\n\r\njQuery.extend({\r\n\tvalHooks: {\r\n\t\toption: {\r\n\t\t\tget: function( elem ) {\r\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\r\n\t\t\t\treturn val != null ?\r\n\t\t\t\t\tval :\r\n\t\t\t\t\t// Support: IE10-11+\r\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\r\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) );\r\n\t\t\t}\r\n\t\t},\r\n\t\tselect: {\r\n\t\t\tget: function( elem ) {\r\n\t\t\t\tvar value, option,\r\n\t\t\t\t\toptions = elem.options,\r\n\t\t\t\t\tindex = elem.selectedIndex,\r\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\r\n\t\t\t\t\tvalues = one ? null : [],\r\n\t\t\t\t\tmax = one ? index + 1 : options.length,\r\n\t\t\t\t\ti = index < 0 ?\r\n\t\t\t\t\t\tmax :\r\n\t\t\t\t\t\tone ? index : 0;\r\n\r\n\t\t\t\t// Loop through all the selected options\r\n\t\t\t\tfor ( ; i < max; i++ ) {\r\n\t\t\t\t\toption = options[ i ];\r\n\r\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\r\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\r\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\r\n\t\t\t\t\t\t\t( support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null ) &&\r\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\r\n\r\n\t\t\t\t\t\t// Get the specific value for the option\r\n\t\t\t\t\t\tvalue = jQuery( option ).val();\r\n\r\n\t\t\t\t\t\t// We don't need an array for one selects\r\n\t\t\t\t\t\tif ( one ) {\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Multi-Selects return an array\r\n\t\t\t\t\t\tvalues.push( value );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn values;\r\n\t\t\t},\r\n\r\n\t\t\tset: function( elem, value ) {\r\n\t\t\t\tvar optionSet, option,\r\n\t\t\t\t\toptions = elem.options,\r\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\r\n\t\t\t\t\ti = options.length;\r\n\r\n\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\toption = options[ i ];\r\n\r\n\t\t\t\t\tif ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {\r\n\r\n\t\t\t\t\t\t// Support: IE6\r\n\t\t\t\t\t\t// When new option element is added to select box we need to\r\n\t\t\t\t\t\t// force reflow of newly added node in order to workaround delay\r\n\t\t\t\t\t\t// of initialization properties\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\toption.selected = optionSet = true;\r\n\r\n\t\t\t\t\t\t} catch ( _ ) {\r\n\r\n\t\t\t\t\t\t\t// Will be executed only in IE6\r\n\t\t\t\t\t\t\toption.scrollHeight;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\toption.selected = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\r\n\t\t\t\tif ( !optionSet ) {\r\n\t\t\t\t\telem.selectedIndex = -1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn options;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Radios and checkboxes getter/setter\r\njQuery.each([ \"radio\", \"checkbox\" ], function() {\r\n\tjQuery.valHooks[ this ] = {\r\n\t\tset: function( elem, value ) {\r\n\t\t\tif ( jQuery.isArray( value ) ) {\r\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tif ( !support.checkOn ) {\r\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\r\n\t\t\t// Support: Webkit\r\n\t\t\t// \"\" is returned instead of \"on\" if a value isn't specified\r\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\r\n\t\t};\r\n\t}\r\n});\r\n\r\n\r\n\r\n\r\nvar nodeHook, boolHook,\r\n\tattrHandle = jQuery.expr.attrHandle,\r\n\truseDefault = /^(?:checked|selected)$/i,\r\n\tgetSetAttribute = support.getSetAttribute,\r\n\tgetSetInput = support.input;\r\n\r\njQuery.fn.extend({\r\n\tattr: function( name, value ) {\r\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\r\n\t},\r\n\r\n\tremoveAttr: function( name ) {\r\n\t\treturn this.each(function() {\r\n\t\t\tjQuery.removeAttr( this, name );\r\n\t\t});\r\n\t}\r\n});\r\n\r\njQuery.extend({\r\n\tattr: function( elem, name, value ) {\r\n\t\tvar hooks, ret,\r\n\t\t\tnType = elem.nodeType;\r\n\r\n\t\t// don't get/set attributes on text, comment and attribute nodes\r\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Fallback to prop when attributes are not supported\r\n\t\tif ( typeof elem.getAttribute === strundefined ) {\r\n\t\t\treturn jQuery.prop( elem, name, value );\r\n\t\t}\r\n\r\n\t\t// All attributes are lowercase\r\n\t\t// Grab necessary hook if one is defined\r\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\r\n\t\t\tname = name.toLowerCase();\r\n\t\t\thooks = jQuery.attrHooks[ name ] ||\r\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\r\n\t\t}\r\n\r\n\t\tif ( value !== undefined ) {\r\n\r\n\t\t\tif ( value === null ) {\r\n\t\t\t\tjQuery.removeAttr( elem, name );\r\n\r\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\r\n\t\t\t\treturn ret;\r\n\r\n\t\t\t} else {\r\n\t\t\t\telem.setAttribute( name, value + \"\" );\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\r\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\r\n\t\t\treturn ret;\r\n\r\n\t\t} else {\r\n\t\t\tret = jQuery.find.attr( elem, name );\r\n\r\n\t\t\t// Non-existent attributes return null, we normalize to undefined\r\n\t\t\treturn ret == null ?\r\n\t\t\t\tundefined :\r\n\t\t\t\tret;\r\n\t\t}\r\n\t},\r\n\r\n\tremoveAttr: function( elem, value ) {\r\n\t\tvar name, propName,\r\n\t\t\ti = 0,\r\n\t\t\tattrNames = value && value.match( rnotwhite );\r\n\r\n\t\tif ( attrNames && elem.nodeType === 1 ) {\r\n\t\t\twhile ( (name = attrNames[i++]) ) {\r\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\r\n\r\n\t\t\t\t// Boolean attributes get special treatment (#10870)\r\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\r\n\t\t\t\t\t// Set corresponding property to false\r\n\t\t\t\t\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\r\n\t\t\t\t\t\telem[ propName ] = false;\r\n\t\t\t\t\t// Support: IE<9\r\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate)\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\r\n\t\t\t\t\t\t\telem[ propName ] = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\r\n\t\t\t\t} else {\r\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\r\n\t\t\t\t}\r\n\r\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tattrHooks: {\r\n\t\ttype: {\r\n\t\t\tset: function( elem, value ) {\r\n\t\t\t\tif ( !support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\r\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\r\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\r\n\t\t\t\t\tvar val = elem.value;\r\n\t\t\t\t\telem.setAttribute( \"type\", value );\r\n\t\t\t\t\tif ( val ) {\r\n\t\t\t\t\t\telem.value = val;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Hook for boolean attributes\r\nboolHook = {\r\n\tset: function( elem, value, name ) {\r\n\t\tif ( value === false ) {\r\n\t\t\t// Remove boolean attributes when set to false\r\n\t\t\tjQuery.removeAttr( elem, name );\r\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\r\n\t\t\t// IE<8 needs the *property* name\r\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\r\n\r\n\t\t// Use defaultChecked and defaultSelected for oldIE\r\n\t\t} else {\r\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\r\n\t\t}\r\n\r\n\t\treturn name;\r\n\t}\r\n};\r\n\r\n// Retrieve booleans specially\r\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\r\n\r\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\r\n\r\n\tattrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?\r\n\t\tfunction( elem, name, isXML ) {\r\n\t\t\tvar ret, handle;\r\n\t\t\tif ( !isXML ) {\r\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\r\n\t\t\t\thandle = attrHandle[ name ];\r\n\t\t\t\tattrHandle[ name ] = ret;\r\n\t\t\t\tret = getter( elem, name, isXML ) != null ?\r\n\t\t\t\t\tname.toLowerCase() :\r\n\t\t\t\t\tnull;\r\n\t\t\t\tattrHandle[ name ] = handle;\r\n\t\t\t}\r\n\t\t\treturn ret;\r\n\t\t} :\r\n\t\tfunction( elem, name, isXML ) {\r\n\t\t\tif ( !isXML ) {\r\n\t\t\t\treturn elem[ jQuery.camelCase( \"default-\" + name ) ] ?\r\n\t\t\t\t\tname.toLowerCase() :\r\n\t\t\t\t\tnull;\r\n\t\t\t}\r\n\t\t};\r\n});\r\n\r\n// fix oldIE attroperties\r\nif ( !getSetInput || !getSetAttribute ) {\r\n\tjQuery.attrHooks.value = {\r\n\t\tset: function( elem, value, name ) {\r\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\r\n\t\t\t\t// Does not return so that setAttribute is also used\r\n\t\t\t\telem.defaultValue = value;\r\n\t\t\t} else {\r\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\r\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\r\nif ( !getSetAttribute ) {\r\n\r\n\t// Use this for any attribute in IE6/7\r\n\t// This fixes almost every IE6/7 issue\r\n\tnodeHook = {\r\n\t\tset: function( elem, value, name ) {\r\n\t\t\t// Set the existing or create a new attribute node\r\n\t\t\tvar ret = elem.getAttributeNode( name );\r\n\t\t\tif ( !ret ) {\r\n\t\t\t\telem.setAttributeNode(\r\n\t\t\t\t\t(ret = elem.ownerDocument.createAttribute( name ))\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tret.value = value += \"\";\r\n\r\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\r\n\t\t\tif ( name === \"value\" || value === elem.getAttribute( name ) ) {\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Some attributes are constructed with empty-string values when not defined\r\n\tattrHandle.id = attrHandle.name = attrHandle.coords =\r\n\t\tfunction( elem, name, isXML ) {\r\n\t\t\tvar ret;\r\n\t\t\tif ( !isXML ) {\r\n\t\t\t\treturn (ret = elem.getAttributeNode( name )) && ret.value !== \"\" ?\r\n\t\t\t\t\tret.value :\r\n\t\t\t\t\tnull;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t// Fixing value retrieval on a button requires this module\r\n\tjQuery.valHooks.button = {\r\n\t\tget: function( elem, name ) {\r\n\t\t\tvar ret = elem.getAttributeNode( name );\r\n\t\t\tif ( ret && ret.specified ) {\r\n\t\t\t\treturn ret.value;\r\n\t\t\t}\r\n\t\t},\r\n\t\tset: nodeHook.set\r\n\t};\r\n\r\n\t// Set contenteditable to false on removals(#10429)\r\n\t// Setting to empty string throws an error as an invalid value\r\n\tjQuery.attrHooks.contenteditable = {\r\n\t\tset: function( elem, value, name ) {\r\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\r\n\t\t}\r\n\t};\r\n\r\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\r\n\t// This is for removals\r\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\r\n\t\tjQuery.attrHooks[ name ] = {\r\n\t\t\tset: function( elem, value ) {\r\n\t\t\t\tif ( value === \"\" ) {\r\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\r\n\t\t\t\t\treturn value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n}\r\n\r\nif ( !support.style ) {\r\n\tjQuery.attrHooks.style = {\r\n\t\tget: function( elem ) {\r\n\t\t\t// Return undefined in the case of empty string\r\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\r\n\t\t\t// .cssText, that would destroy case senstitivity in URL's, like in \"background\"\r\n\t\t\treturn elem.style.cssText || undefined;\r\n\t\t},\r\n\t\tset: function( elem, value ) {\r\n\t\t\treturn ( elem.style.cssText = value + \"\" );\r\n\t\t}\r\n\t};\r\n}\r\n\r\n\r\n\r\n\r\nvar rfocusable = /^(?:input|select|textarea|button|object)$/i,\r\n\trclickable = /^(?:a|area)$/i;\r\n\r\njQuery.fn.extend({\r\n\tprop: function( name, value ) {\r\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\r\n\t},\r\n\r\n\tremoveProp: function( name ) {\r\n\t\tname = jQuery.propFix[ name ] || name;\r\n\t\treturn this.each(function() {\r\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\r\n\t\t\ttry {\r\n\t\t\t\tthis[ name ] = undefined;\r\n\t\t\t\tdelete this[ name ];\r\n\t\t\t} catch( e ) {}\r\n\t\t});\r\n\t}\r\n});\r\n\r\njQuery.extend({\r\n\tpropFix: {\r\n\t\t\"for\": \"htmlFor\",\r\n\t\t\"class\": \"className\"\r\n\t},\r\n\r\n\tprop: function( elem, name, value ) {\r\n\t\tvar ret, hooks, notxml,\r\n\t\t\tnType = elem.nodeType;\r\n\r\n\t\t// don't get/set properties on text, comment and attribute nodes\r\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\r\n\r\n\t\tif ( notxml ) {\r\n\t\t\t// Fix name and attach hooks\r\n\t\t\tname = jQuery.propFix[ name ] || name;\r\n\t\t\thooks = jQuery.propHooks[ name ];\r\n\t\t}\r\n\r\n\t\tif ( value !== undefined ) {\r\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\r\n\t\t\t\tret :\r\n\t\t\t\t( elem[ name ] = value );\r\n\r\n\t\t} else {\r\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\r\n\t\t\t\tret :\r\n\t\t\t\telem[ name ];\r\n\t\t}\r\n\t},\r\n\r\n\tpropHooks: {\r\n\t\ttabIndex: {\r\n\t\t\tget: function( elem ) {\r\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\r\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\r\n\t\t\t\t// Use proper attribute retrieval(#12072)\r\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\r\n\r\n\t\t\t\treturn tabindex ?\r\n\t\t\t\t\tparseInt( tabindex, 10 ) :\r\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\r\n\t\t\t\t\t\t0 :\r\n\t\t\t\t\t\t-1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Some attributes require a special call on IE\r\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\r\nif ( !support.hrefNormalized ) {\r\n\t// href/src property should get the full normalized URL (#10299/#12915)\r\n\tjQuery.each([ \"href\", \"src\" ], function( i, name ) {\r\n\t\tjQuery.propHooks[ name ] = {\r\n\t\t\tget: function( elem ) {\r\n\t\t\t\treturn elem.getAttribute( name, 4 );\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n}\r\n\r\n// Support: Safari, IE9+\r\n// mis-reports the default selected property of an option\r\n// Accessing the parent's selectedIndex property fixes it\r\nif ( !support.optSelected ) {\r\n\tjQuery.propHooks.selected = {\r\n\t\tget: function( elem ) {\r\n\t\t\tvar parent = elem.parentNode;\r\n\r\n\t\t\tif ( parent ) {\r\n\t\t\t\tparent.selectedIndex;\r\n\r\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\r\n\t\t\t\tif ( parent.parentNode ) {\r\n\t\t\t\t\tparent.parentNode.selectedIndex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n}\r\n\r\njQuery.each([\r\n\t\"tabIndex\",\r\n\t\"readOnly\",\r\n\t\"maxLength\",\r\n\t\"cellSpacing\",\r\n\t\"cellPadding\",\r\n\t\"rowSpan\",\r\n\t\"colSpan\",\r\n\t\"useMap\",\r\n\t\"frameBorder\",\r\n\t\"contentEditable\"\r\n], function() {\r\n\tjQuery.propFix[ this.toLowerCase() ] = this;\r\n});\r\n\r\n// IE6/7 call enctype encoding\r\nif ( !support.enctype ) {\r\n\tjQuery.propFix.enctype = \"encoding\";\r\n}\r\n\r\n\r\n\r\n\r\nvar rclass = /[\\t\\r\\n\\f]/g;\r\n\r\njQuery.fn.extend({\r\n\taddClass: function( value ) {\r\n\t\tvar classes, elem, cur, clazz, j, finalValue,\r\n\t\t\ti = 0,\r\n\t\t\tlen = this.length,\r\n\t\t\tproceed = typeof value === \"string\" && value;\r\n\r\n\t\tif ( jQuery.isFunction( value ) ) {\r\n\t\t\treturn this.each(function( j ) {\r\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ( proceed ) {\r\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\r\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\r\n\r\n\t\t\tfor ( ; i < len; i++ ) {\r\n\t\t\t\telem = this[ i ];\r\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\r\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\r\n\t\t\t\t\t\" \"\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif ( cur ) {\r\n\t\t\t\t\tj = 0;\r\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\r\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\r\n\t\t\t\t\t\t\tcur += clazz + \" \";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\r\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\r\n\t\t\t\t\tif ( elem.className !== finalValue ) {\r\n\t\t\t\t\t\telem.className = finalValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tremoveClass: function( value ) {\r\n\t\tvar classes, elem, cur, clazz, j, finalValue,\r\n\t\t\ti = 0,\r\n\t\t\tlen = this.length,\r\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value;\r\n\r\n\t\tif ( jQuery.isFunction( value ) ) {\r\n\t\t\treturn this.each(function( j ) {\r\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\r\n\t\t\t});\r\n\t\t}\r\n\t\tif ( proceed ) {\r\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\r\n\r\n\t\t\tfor ( ; i < len; i++ ) {\r\n\t\t\t\telem = this[ i ];\r\n\t\t\t\t// This expression is here for better compressibility (see addClass)\r\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\r\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\r\n\t\t\t\t\t\"\"\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif ( cur ) {\r\n\t\t\t\t\tj = 0;\r\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\r\n\t\t\t\t\t\t// Remove *all* instances\r\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\r\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\r\n\t\t\t\t\tfinalValue = value ? jQuery.trim( cur ) : \"\";\r\n\t\t\t\t\tif ( elem.className !== finalValue ) {\r\n\t\t\t\t\t\telem.className = finalValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\ttoggleClass: function( value, stateVal ) {\r\n\t\tvar type = typeof value;\r\n\r\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\r\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\r\n\t\t}\r\n\r\n\t\tif ( jQuery.isFunction( value ) ) {\r\n\t\t\treturn this.each(function( i ) {\r\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn this.each(function() {\r\n\t\t\tif ( type === \"string\" ) {\r\n\t\t\t\t// toggle individual class names\r\n\t\t\t\tvar className,\r\n\t\t\t\t\ti = 0,\r\n\t\t\t\t\tself = jQuery( this ),\r\n\t\t\t\t\tclassNames = value.match( rnotwhite ) || [];\r\n\r\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\r\n\t\t\t\t\t// check each className given, space separated list\r\n\t\t\t\t\tif ( self.hasClass( className ) ) {\r\n\t\t\t\t\t\tself.removeClass( className );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tself.addClass( className );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t// Toggle whole class name\r\n\t\t\t} else if ( type === strundefined || type === \"boolean\" ) {\r\n\t\t\t\tif ( this.className ) {\r\n\t\t\t\t\t// store className if set\r\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\r\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\r\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\r\n\t\t\t\t// falling back to the empty string if nothing was stored.\r\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\thasClass: function( selector ) {\r\n\t\tvar className = \" \" + selector + \" \",\r\n\t\t\ti = 0,\r\n\t\t\tl = this.length;\r\n\t\tfor ( ; i < l; i++ ) {\r\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n});\r\n\r\n\r\n\r\n\r\n// Return jQuery for attributes-only inclusion\r\n\r\n\r\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\r\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\r\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\r\n\r\n\t// Handle event binding\r\n\tjQuery.fn[ name ] = function( data, fn ) {\r\n\t\treturn arguments.length > 0 ?\r\n\t\t\tthis.on( name, null, data, fn ) :\r\n\t\t\tthis.trigger( name );\r\n\t};\r\n});\r\n\r\njQuery.fn.extend({\r\n\thover: function( fnOver, fnOut ) {\r\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\r\n\t},\r\n\r\n\tbind: function( types, data, fn ) {\r\n\t\treturn this.on( types, null, data, fn );\r\n\t},\r\n\tunbind: function( types, fn ) {\r\n\t\treturn this.off( types, null, fn );\r\n\t},\r\n\r\n\tdelegate: function( selector, types, data, fn ) {\r\n\t\treturn this.on( types, selector, data, fn );\r\n\t},\r\n\tundelegate: function( selector, types, fn ) {\r\n\t\t// ( namespace ) or ( selector, types [, fn] )\r\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\r\n\t}\r\n});\r\n\r\n\r\nvar nonce = jQuery.now();\r\n\r\nvar rquery = (/\\?/);\r\n\r\n\r\n\r\nvar rvalidtokens = /(,)|(\\[|{)|(}|])|\"(?:[^\"\\\\\\r\\n]|\\\\[\"\\\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*\"\\s*:?|true|false|null|-?(?!0\\d)\\d+(?:\\.\\d+|)(?:[eE][+-]?\\d+|)/g;\r\n\r\njQuery.parseJSON = function( data ) {\r\n\t// Attempt to parse using the native JSON parser first\r\n\tif ( window.JSON && window.JSON.parse ) {\r\n\t\t// Support: Android 2.3\r\n\t\t// Workaround failure to string-cast null input\r\n\t\treturn window.JSON.parse( data + \"\" );\r\n\t}\r\n\r\n\tvar requireNonComma,\r\n\t\tdepth = null,\r\n\t\tstr = jQuery.trim( data + \"\" );\r\n\r\n\t// Guard against invalid (and possibly dangerous) input by ensuring that nothing remains\r\n\t// after removing valid tokens\r\n\treturn str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {\r\n\r\n\t\t// Force termination if we see a misplaced comma\r\n\t\tif ( requireNonComma && comma ) {\r\n\t\t\tdepth = 0;\r\n\t\t}\r\n\r\n\t\t// Perform no more replacements after returning to outermost depth\r\n\t\tif ( depth === 0 ) {\r\n\t\t\treturn token;\r\n\t\t}\r\n\r\n\t\t// Commas must not follow \"[\", \"{\", or \",\"\r\n\t\trequireNonComma = open || comma;\r\n\r\n\t\t// Determine new depth\r\n\t\t// array/object open (\"[\" or \"{\"): depth += true - false (increment)\r\n\t\t// array/object close (\"]\" or \"}\"): depth += false - true (decrement)\r\n\t\t// other cases (\",\" or primitive): depth += true - true (numeric cast)\r\n\t\tdepth += !close - !open;\r\n\r\n\t\t// Remove this token\r\n\t\treturn \"\";\r\n\t}) ) ?\r\n\t\t( Function( \"return \" + str ) )() :\r\n\t\tjQuery.error( \"Invalid JSON: \" + data );\r\n};\r\n\r\n\r\n// Cross-browser xml parsing\r\njQuery.parseXML = function( data ) {\r\n\tvar xml, tmp;\r\n\tif ( !data || typeof data !== \"string\" ) {\r\n\t\treturn null;\r\n\t}\r\n\ttry {\r\n\t\tif ( window.DOMParser ) { // Standard\r\n\t\t\ttmp = new DOMParser();\r\n\t\t\txml = tmp.parseFromString( data, \"text/xml\" );\r\n\t\t} else { // IE\r\n\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\r\n\t\t\txml.async = \"false\";\r\n\t\t\txml.loadXML( data );\r\n\t\t}\r\n\t} catch( e ) {\r\n\t\txml = undefined;\r\n\t}\r\n\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\r\n\t\tjQuery.error( \"Invalid XML: \" + data );\r\n\t}\r\n\treturn xml;\r\n};\r\n\r\n\r\nvar\r\n\t// Document location\r\n\tajaxLocParts,\r\n\tajaxLocation,\r\n\r\n\trhash = /#.*$/,\r\n\trts = /([?&])_=[^&]*/,\r\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\r\n\t// #7653, #8125, #8152: local protocol detection\r\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\r\n\trnoContent = /^(?:GET|HEAD)$/,\r\n\trprotocol = /^\\/\\//,\r\n\trurl = /^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,\r\n\r\n\t/* Prefilters\r\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\r\n\t * 2) These are called:\r\n\t * - BEFORE asking for a transport\r\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\r\n\t * 3) key is the dataType\r\n\t * 4) the catchall symbol \"*\" can be used\r\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\r\n\t */\r\n\tprefilters = {},\r\n\r\n\t/* Transports bindings\r\n\t * 1) key is the dataType\r\n\t * 2) the catchall symbol \"*\" can be used\r\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\r\n\t */\r\n\ttransports = {},\r\n\r\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\r\n\tallTypes = \"*/\".concat(\"*\");\r\n\r\n// #8138, IE may throw an exception when accessing\r\n// a field from window.location if document.domain has been set\r\ntry {\r\n\tajaxLocation = location.href;\r\n} catch( e ) {\r\n\t// Use the href attribute of an A element\r\n\t// since IE will modify it given document.location\r\n\tajaxLocation = document.createElement( \"a\" );\r\n\tajaxLocation.href = \"\";\r\n\tajaxLocation = ajaxLocation.href;\r\n}\r\n\r\n// Segment location into parts\r\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\r\n\r\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\r\nfunction addToPrefiltersOrTransports( structure ) {\r\n\r\n\t// dataTypeExpression is optional and defaults to \"*\"\r\n\treturn function( dataTypeExpression, func ) {\r\n\r\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\r\n\t\t\tfunc = dataTypeExpression;\r\n\t\t\tdataTypeExpression = \"*\";\r\n\t\t}\r\n\r\n\t\tvar dataType,\r\n\t\t\ti = 0,\r\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\r\n\r\n\t\tif ( jQuery.isFunction( func ) ) {\r\n\t\t\t// For each dataType in the dataTypeExpression\r\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\r\n\t\t\t\t// Prepend if requested\r\n\t\t\t\tif ( dataType.charAt( 0 ) === \"+\" ) {\r\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\r\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\r\n\r\n\t\t\t\t// Otherwise append\r\n\t\t\t\t} else {\r\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// Base inspection function for prefilters and transports\r\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\r\n\r\n\tvar inspected = {},\r\n\t\tseekingTransport = ( structure === transports );\r\n\r\n\tfunction inspect( dataType ) {\r\n\t\tvar selected;\r\n\t\tinspected[ dataType ] = true;\r\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\r\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\r\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\r\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\r\n\t\t\t\tinspect( dataTypeOrTransport );\r\n\t\t\t\treturn false;\r\n\t\t\t} else if ( seekingTransport ) {\r\n\t\t\t\treturn !( selected = dataTypeOrTransport );\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn selected;\r\n\t}\r\n\r\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\r\n}\r\n\r\n// A special extend for ajax options\r\n// that takes \"flat\" options (not to be deep extended)\r\n// Fixes #9887\r\nfunction ajaxExtend( target, src ) {\r\n\tvar deep, key,\r\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\r\n\r\n\tfor ( key in src ) {\r\n\t\tif ( src[ key ] !== undefined ) {\r\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\r\n\t\t}\r\n\t}\r\n\tif ( deep ) {\r\n\t\tjQuery.extend( true, target, deep );\r\n\t}\r\n\r\n\treturn target;\r\n}\r\n\r\n/* Handles responses to an ajax request:\r\n * - finds the right dataType (mediates between content-type and expected dataType)\r\n * - returns the corresponding response\r\n */\r\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\r\n\tvar firstDataType, ct, finalDataType, type,\r\n\t\tcontents = s.contents,\r\n\t\tdataTypes = s.dataTypes;\r\n\r\n\t// Remove auto dataType and get content-type in the process\r\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\r\n\t\tdataTypes.shift();\r\n\t\tif ( ct === undefined ) {\r\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\r\n\t\t}\r\n\t}\r\n\r\n\t// Check if we're dealing with a known content-type\r\n\tif ( ct ) {\r\n\t\tfor ( type in contents ) {\r\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\r\n\t\t\t\tdataTypes.unshift( type );\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Check to see if we have a response for the expected dataType\r\n\tif ( dataTypes[ 0 ] in responses ) {\r\n\t\tfinalDataType = dataTypes[ 0 ];\r\n\t} else {\r\n\t\t// Try convertible dataTypes\r\n\t\tfor ( type in responses ) {\r\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\r\n\t\t\t\tfinalDataType = type;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif ( !firstDataType ) {\r\n\t\t\t\tfirstDataType = type;\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Or just use first one\r\n\t\tfinalDataType = finalDataType || firstDataType;\r\n\t}\r\n\r\n\t// If we found a dataType\r\n\t// We add the dataType to the list if needed\r\n\t// and return the corresponding response\r\n\tif ( finalDataType ) {\r\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\r\n\t\t\tdataTypes.unshift( finalDataType );\r\n\t\t}\r\n\t\treturn responses[ finalDataType ];\r\n\t}\r\n}\r\n\r\n/* Chain conversions given the request and the original response\r\n * Also sets the responseXXX fields on the jqXHR instance\r\n */\r\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\r\n\tvar conv2, current, conv, tmp, prev,\r\n\t\tconverters = {},\r\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\r\n\t\tdataTypes = s.dataTypes.slice();\r\n\r\n\t// Create converters map with lowercased keys\r\n\tif ( dataTypes[ 1 ] ) {\r\n\t\tfor ( conv in s.converters ) {\r\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\r\n\t\t}\r\n\t}\r\n\r\n\tcurrent = dataTypes.shift();\r\n\r\n\t// Convert to each sequential dataType\r\n\twhile ( current ) {\r\n\r\n\t\tif ( s.responseFields[ current ] ) {\r\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\r\n\t\t}\r\n\r\n\t\t// Apply the dataFilter if provided\r\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\r\n\t\t\tresponse = s.dataFilter( response, s.dataType );\r\n\t\t}\r\n\r\n\t\tprev = current;\r\n\t\tcurrent = dataTypes.shift();\r\n\r\n\t\tif ( current ) {\r\n\r\n\t\t\t// There's only work to do if current dataType is non-auto\r\n\t\t\tif ( current === \"*\" ) {\r\n\r\n\t\t\t\tcurrent = prev;\r\n\r\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\r\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\r\n\r\n\t\t\t\t// Seek a direct converter\r\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\r\n\r\n\t\t\t\t// If none found, seek a pair\r\n\t\t\t\tif ( !conv ) {\r\n\t\t\t\t\tfor ( conv2 in converters ) {\r\n\r\n\t\t\t\t\t\t// If conv2 outputs current\r\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\r\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\r\n\r\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\r\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\r\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\r\n\t\t\t\t\t\t\tif ( conv ) {\r\n\t\t\t\t\t\t\t\t// Condense equivalence converters\r\n\t\t\t\t\t\t\t\tif ( conv === true ) {\r\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\r\n\r\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\r\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\r\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\r\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Apply converter (if not an equivalence)\r\n\t\t\t\tif ( conv !== true ) {\r\n\r\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\r\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\r\n\t\t\t\t\t\tresponse = conv( response );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tresponse = conv( response );\r\n\t\t\t\t\t\t} catch ( e ) {\r\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn { state: \"success\", data: response };\r\n}\r\n\r\njQuery.extend({\r\n\r\n\t// Counter for holding the number of active queries\r\n\tactive: 0,\r\n\r\n\t// Last-Modified header cache for next request\r\n\tlastModified: {},\r\n\tetag: {},\r\n\r\n\tajaxSettings: {\r\n\t\turl: ajaxLocation,\r\n\t\ttype: \"GET\",\r\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\r\n\t\tglobal: true,\r\n\t\tprocessData: true,\r\n\t\tasync: true,\r\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\r\n\t\t/*\r\n\t\ttimeout: 0,\r\n\t\tdata: null,\r\n\t\tdataType: null,\r\n\t\tusername: null,\r\n\t\tpassword: null,\r\n\t\tcache: null,\r\n\t\tthrows: false,\r\n\t\ttraditional: false,\r\n\t\theaders: {},\r\n\t\t*/\r\n\r\n\t\taccepts: {\r\n\t\t\t\"*\": allTypes,\r\n\t\t\ttext: \"text/plain\",\r\n\t\t\thtml: \"text/html\",\r\n\t\t\txml: \"application/xml, text/xml\",\r\n\t\t\tjson: \"application/json, text/javascript\"\r\n\t\t},\r\n\r\n\t\tcontents: {\r\n\t\t\txml: /xml/,\r\n\t\t\thtml: /html/,\r\n\t\t\tjson: /json/\r\n\t\t},\r\n\r\n\t\tresponseFields: {\r\n\t\t\txml: \"responseXML\",\r\n\t\t\ttext: \"responseText\",\r\n\t\t\tjson: \"responseJSON\"\r\n\t\t},\r\n\r\n\t\t// Data converters\r\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\r\n\t\tconverters: {\r\n\r\n\t\t\t// Convert anything to text\r\n\t\t\t\"* text\": String,\r\n\r\n\t\t\t// Text to html (true = no transformation)\r\n\t\t\t\"text html\": true,\r\n\r\n\t\t\t// Evaluate text as a json expression\r\n\t\t\t\"text json\": jQuery.parseJSON,\r\n\r\n\t\t\t// Parse text as xml\r\n\t\t\t\"text xml\": jQuery.parseXML\r\n\t\t},\r\n\r\n\t\t// For options that shouldn't be deep extended:\r\n\t\t// you can add your own custom options here if\r\n\t\t// and when you create one that shouldn't be\r\n\t\t// deep extended (see ajaxExtend)\r\n\t\tflatOptions: {\r\n\t\t\turl: true,\r\n\t\t\tcontext: true\r\n\t\t}\r\n\t},\r\n\r\n\t// Creates a full fledged settings object into target\r\n\t// with both ajaxSettings and settings fields.\r\n\t// If target is omitted, writes into ajaxSettings.\r\n\tajaxSetup: function( target, settings ) {\r\n\t\treturn settings ?\r\n\r\n\t\t\t// Building a settings object\r\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\r\n\r\n\t\t\t// Extending ajaxSettings\r\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\r\n\t},\r\n\r\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\r\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\r\n\r\n\t// Main method\r\n\tajax: function( url, options ) {\r\n\r\n\t\t// If url is an object, simulate pre-1.5 signature\r\n\t\tif ( typeof url === \"object\" ) {\r\n\t\t\toptions = url;\r\n\t\t\turl = undefined;\r\n\t\t}\r\n\r\n\t\t// Force options to be an object\r\n\t\toptions = options || {};\r\n\r\n\t\tvar // Cross-domain detection vars\r\n\t\t\tparts,\r\n\t\t\t// Loop variable\r\n\t\t\ti,\r\n\t\t\t// URL without anti-cache param\r\n\t\t\tcacheURL,\r\n\t\t\t// Response headers as string\r\n\t\t\tresponseHeadersString,\r\n\t\t\t// timeout handle\r\n\t\t\ttimeoutTimer,\r\n\r\n\t\t\t// To know if global events are to be dispatched\r\n\t\t\tfireGlobals,\r\n\r\n\t\t\ttransport,\r\n\t\t\t// Response headers\r\n\t\t\tresponseHeaders,\r\n\t\t\t// Create the final options object\r\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\r\n\t\t\t// Callbacks context\r\n\t\t\tcallbackContext = s.context || s,\r\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\r\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\r\n\t\t\t\tjQuery( callbackContext ) :\r\n\t\t\t\tjQuery.event,\r\n\t\t\t// Deferreds\r\n\t\t\tdeferred = jQuery.Deferred(),\r\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\r\n\t\t\t// Status-dependent callbacks\r\n\t\t\tstatusCode = s.statusCode || {},\r\n\t\t\t// Headers (they are sent all at once)\r\n\t\t\trequestHeaders = {},\r\n\t\t\trequestHeadersNames = {},\r\n\t\t\t// The jqXHR state\r\n\t\t\tstate = 0,\r\n\t\t\t// Default abort message\r\n\t\t\tstrAbort = \"canceled\",\r\n\t\t\t// Fake xhr\r\n\t\t\tjqXHR = {\r\n\t\t\t\treadyState: 0,\r\n\r\n\t\t\t\t// Builds headers hashtable if needed\r\n\t\t\t\tgetResponseHeader: function( key ) {\r\n\t\t\t\t\tvar match;\r\n\t\t\t\t\tif ( state === 2 ) {\r\n\t\t\t\t\t\tif ( !responseHeaders ) {\r\n\t\t\t\t\t\t\tresponseHeaders = {};\r\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\r\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn match == null ? null : match;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Raw string\r\n\t\t\t\tgetAllResponseHeaders: function() {\r\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Caches the header\r\n\t\t\t\tsetRequestHeader: function( name, value ) {\r\n\t\t\t\t\tvar lname = name.toLowerCase();\r\n\t\t\t\t\tif ( !state ) {\r\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\r\n\t\t\t\t\t\trequestHeaders[ name ] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Overrides response content-type header\r\n\t\t\t\toverrideMimeType: function( type ) {\r\n\t\t\t\t\tif ( !state ) {\r\n\t\t\t\t\t\ts.mimeType = type;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Status-dependent callbacks\r\n\t\t\t\tstatusCode: function( map ) {\r\n\t\t\t\t\tvar code;\r\n\t\t\t\t\tif ( map ) {\r\n\t\t\t\t\t\tif ( state < 2 ) {\r\n\t\t\t\t\t\t\tfor ( code in map ) {\r\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\r\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\r\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Cancel the request\r\n\t\t\t\tabort: function( statusText ) {\r\n\t\t\t\t\tvar finalText = statusText || strAbort;\r\n\t\t\t\t\tif ( transport ) {\r\n\t\t\t\t\t\ttransport.abort( finalText );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdone( 0, finalText );\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t// Attach deferreds\r\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\r\n\t\tjqXHR.success = jqXHR.done;\r\n\t\tjqXHR.error = jqXHR.fail;\r\n\r\n\t\t// Remove hash character (#7531: and string promotion)\r\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\r\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\r\n\t\t// We also use the url parameter if available\r\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\r\n\r\n\t\t// Alias method option to type as per ticket #12004\r\n\t\ts.type = options.method || options.type || s.method || s.type;\r\n\r\n\t\t// Extract dataTypes list\r\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\r\n\r\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\r\n\t\tif ( s.crossDomain == null ) {\r\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\r\n\t\t\ts.crossDomain = !!( parts &&\r\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\r\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\r\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Convert data if not already a string\r\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\r\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\r\n\t\t}\r\n\r\n\t\t// Apply prefilters\r\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\r\n\r\n\t\t// If request was aborted inside a prefilter, stop there\r\n\t\tif ( state === 2 ) {\r\n\t\t\treturn jqXHR;\r\n\t\t}\r\n\r\n\t\t// We can fire global events as of now if asked to\r\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\r\n\t\tfireGlobals = jQuery.event && s.global;\r\n\r\n\t\t// Watch for a new set of requests\r\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\r\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\r\n\t\t}\r\n\r\n\t\t// Uppercase the type\r\n\t\ts.type = s.type.toUpperCase();\r\n\r\n\t\t// Determine if request has content\r\n\t\ts.hasContent = !rnoContent.test( s.type );\r\n\r\n\t\t// Save the URL in case we're toying with the If-Modified-Since\r\n\t\t// and/or If-None-Match header later on\r\n\t\tcacheURL = s.url;\r\n\r\n\t\t// More options handling for requests with no content\r\n\t\tif ( !s.hasContent ) {\r\n\r\n\t\t\t// If data is available, append data to url\r\n\t\t\tif ( s.data ) {\r\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\r\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\r\n\t\t\t\tdelete s.data;\r\n\t\t\t}\r\n\r\n\t\t\t// Add anti-cache in url if needed\r\n\t\t\tif ( s.cache === false ) {\r\n\t\t\t\ts.url = rts.test( cacheURL ) ?\r\n\r\n\t\t\t\t\t// If there is already a '_' parameter, set its value\r\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\r\n\r\n\t\t\t\t\t// Otherwise add one to the end\r\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\r\n\t\tif ( s.ifModified ) {\r\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\r\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\r\n\t\t\t}\r\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\r\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Set the correct header, if data is being sent\r\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\r\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\r\n\t\t}\r\n\r\n\t\t// Set the Accepts header for the server, depending on the dataType\r\n\t\tjqXHR.setRequestHeader(\r\n\t\t\t\"Accept\",\r\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\r\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\r\n\t\t\t\ts.accepts[ \"*\" ]\r\n\t\t);\r\n\r\n\t\t// Check for headers option\r\n\t\tfor ( i in s.headers ) {\r\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\r\n\t\t}\r\n\r\n\t\t// Allow custom headers/mimetypes and early abort\r\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\r\n\t\t\t// Abort if not done already and return\r\n\t\t\treturn jqXHR.abort();\r\n\t\t}\r\n\r\n\t\t// aborting is no longer a cancellation\r\n\t\tstrAbort = \"abort\";\r\n\r\n\t\t// Install callbacks on deferreds\r\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\r\n\t\t\tjqXHR[ i ]( s[ i ] );\r\n\t\t}\r\n\r\n\t\t// Get transport\r\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\r\n\r\n\t\t// If no transport, we auto-abort\r\n\t\tif ( !transport ) {\r\n\t\t\tdone( -1, \"No Transport\" );\r\n\t\t} else {\r\n\t\t\tjqXHR.readyState = 1;\r\n\r\n\t\t\t// Send global event\r\n\t\t\tif ( fireGlobals ) {\r\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\r\n\t\t\t}\r\n\t\t\t// Timeout\r\n\t\t\tif ( s.async && s.timeout > 0 ) {\r\n\t\t\t\ttimeoutTimer = setTimeout(function() {\r\n\t\t\t\t\tjqXHR.abort(\"timeout\");\r\n\t\t\t\t}, s.timeout );\r\n\t\t\t}\r\n\r\n\t\t\ttry {\r\n\t\t\t\tstate = 1;\r\n\t\t\t\ttransport.send( requestHeaders, done );\r\n\t\t\t} catch ( e ) {\r\n\t\t\t\t// Propagate exception as error if not done\r\n\t\t\t\tif ( state < 2 ) {\r\n\t\t\t\t\tdone( -1, e );\r\n\t\t\t\t// Simply rethrow otherwise\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow e;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Callback for when everything is done\r\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\r\n\t\t\tvar isSuccess, success, error, response, modified,\r\n\t\t\t\tstatusText = nativeStatusText;\r\n\r\n\t\t\t// Called once\r\n\t\t\tif ( state === 2 ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// State is \"done\" now\r\n\t\t\tstate = 2;\r\n\r\n\t\t\t// Clear timeout if it exists\r\n\t\t\tif ( timeoutTimer ) {\r\n\t\t\t\tclearTimeout( timeoutTimer );\r\n\t\t\t}\r\n\r\n\t\t\t// Dereference transport for early garbage collection\r\n\t\t\t// (no matter how long the jqXHR object will be used)\r\n\t\t\ttransport = undefined;\r\n\r\n\t\t\t// Cache response headers\r\n\t\t\tresponseHeadersString = headers || \"\";\r\n\r\n\t\t\t// Set readyState\r\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\r\n\r\n\t\t\t// Determine if successful\r\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\r\n\r\n\t\t\t// Get response data\r\n\t\t\tif ( responses ) {\r\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\r\n\t\t\t}\r\n\r\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\r\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\r\n\r\n\t\t\t// If successful, handle type chaining\r\n\t\t\tif ( isSuccess ) {\r\n\r\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\r\n\t\t\t\tif ( s.ifModified ) {\r\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\r\n\t\t\t\t\tif ( modified ) {\r\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\r\n\t\t\t\t\tif ( modified ) {\r\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if no content\r\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\r\n\t\t\t\t\tstatusText = \"nocontent\";\r\n\r\n\t\t\t\t// if not modified\r\n\t\t\t\t} else if ( status === 304 ) {\r\n\t\t\t\t\tstatusText = \"notmodified\";\r\n\r\n\t\t\t\t// If we have data, let's convert it\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstatusText = response.state;\r\n\t\t\t\t\tsuccess = response.data;\r\n\t\t\t\t\terror = response.error;\r\n\t\t\t\t\tisSuccess = !error;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// We extract error from statusText\r\n\t\t\t\t// then normalize statusText and status for non-aborts\r\n\t\t\t\terror = statusText;\r\n\t\t\t\tif ( status || !statusText ) {\r\n\t\t\t\t\tstatusText = \"error\";\r\n\t\t\t\t\tif ( status < 0 ) {\r\n\t\t\t\t\t\tstatus = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set data for the fake xhr object\r\n\t\t\tjqXHR.status = status;\r\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\r\n\r\n\t\t\t// Success/Error\r\n\t\t\tif ( isSuccess ) {\r\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\r\n\t\t\t} else {\r\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\r\n\t\t\t}\r\n\r\n\t\t\t// Status-dependent callbacks\r\n\t\t\tjqXHR.statusCode( statusCode );\r\n\t\t\tstatusCode = undefined;\r\n\r\n\t\t\tif ( fireGlobals ) {\r\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\r\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\r\n\t\t\t}\r\n\r\n\t\t\t// Complete\r\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\r\n\r\n\t\t\tif ( fireGlobals ) {\r\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\r\n\t\t\t\t// Handle the global AJAX counter\r\n\t\t\t\tif ( !( --jQuery.active ) ) {\r\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn jqXHR;\r\n\t},\r\n\r\n\tgetJSON: function( url, data, callback ) {\r\n\t\treturn jQuery.get( url, data, callback, \"json\" );\r\n\t},\r\n\r\n\tgetScript: function( url, callback ) {\r\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\r\n\t}\r\n});\r\n\r\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\r\n\tjQuery[ method ] = function( url, data, callback, type ) {\r\n\t\t// shift arguments if data argument was omitted\r\n\t\tif ( jQuery.isFunction( data ) ) {\r\n\t\t\ttype = type || callback;\r\n\t\t\tcallback = data;\r\n\t\t\tdata = undefined;\r\n\t\t}\r\n\r\n\t\treturn jQuery.ajax({\r\n\t\t\turl: url,\r\n\t\t\ttype: method,\r\n\t\t\tdataType: type,\r\n\t\t\tdata: data,\r\n\t\t\tsuccess: callback\r\n\t\t});\r\n\t};\r\n});\r\n\r\n\r\njQuery._evalUrl = function( url ) {\r\n\treturn jQuery.ajax({\r\n\t\turl: url,\r\n\t\ttype: \"GET\",\r\n\t\tdataType: \"script\",\r\n\t\tasync: false,\r\n\t\tglobal: false,\r\n\t\t\"throws\": true\r\n\t});\r\n};\r\n\r\n\r\njQuery.fn.extend({\r\n\twrapAll: function( html ) {\r\n\t\tif ( jQuery.isFunction( html ) ) {\r\n\t\t\treturn this.each(function(i) {\r\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ( this[0] ) {\r\n\t\t\t// The elements to wrap the target around\r\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\r\n\r\n\t\t\tif ( this[0].parentNode ) {\r\n\t\t\t\twrap.insertBefore( this[0] );\r\n\t\t\t}\r\n\r\n\t\t\twrap.map(function() {\r\n\t\t\t\tvar elem = this;\r\n\r\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\r\n\t\t\t\t\telem = elem.firstChild;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn elem;\r\n\t\t\t}).append( this );\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\twrapInner: function( html ) {\r\n\t\tif ( jQuery.isFunction( html ) ) {\r\n\t\t\treturn this.each(function(i) {\r\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn this.each(function() {\r\n\t\t\tvar self = jQuery( this ),\r\n\t\t\t\tcontents = self.contents();\r\n\r\n\t\t\tif ( contents.length ) {\r\n\t\t\t\tcontents.wrapAll( html );\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.append( html );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\twrap: function( html ) {\r\n\t\tvar isFunction = jQuery.isFunction( html );\r\n\r\n\t\treturn this.each(function(i) {\r\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\r\n\t\t});\r\n\t},\r\n\r\n\tunwrap: function() {\r\n\t\treturn this.parent().each(function() {\r\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\r\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\r\n\t\t\t}\r\n\t\t}).end();\r\n\t}\r\n});\r\n\r\n\r\njQuery.expr.filters.hidden = function( elem ) {\r\n\t// Support: Opera <= 12.12\r\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\r\n\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||\r\n\t\t(!support.reliableHiddenOffsets() &&\r\n\t\t\t((elem.style && elem.style.display) || jQuery.css( elem, \"display\" )) === \"none\");\r\n};\r\n\r\njQuery.expr.filters.visible = function( elem ) {\r\n\treturn !jQuery.expr.filters.hidden( elem );\r\n};\r\n\r\n\r\n\r\n\r\nvar r20 = /%20/g,\r\n\trbracket = /\\[\\]$/,\r\n\trCRLF = /\\r?\\n/g,\r\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\r\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\r\n\r\nfunction buildParams( prefix, obj, traditional, add ) {\r\n\tvar name;\r\n\r\n\tif ( jQuery.isArray( obj ) ) {\r\n\t\t// Serialize array item.\r\n\t\tjQuery.each( obj, function( i, v ) {\r\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\r\n\t\t\t\t// Treat each array item as a scalar.\r\n\t\t\t\tadd( prefix, v );\r\n\r\n\t\t\t} else {\r\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\r\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\r\n\t\t// Serialize object item.\r\n\t\tfor ( name in obj ) {\r\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\r\n\t\t}\r\n\r\n\t} else {\r\n\t\t// Serialize scalar item.\r\n\t\tadd( prefix, obj );\r\n\t}\r\n}\r\n\r\n// Serialize an array of form elements or a set of\r\n// key/values into a query string\r\njQuery.param = function( a, traditional ) {\r\n\tvar prefix,\r\n\t\ts = [],\r\n\t\tadd = function( key, value ) {\r\n\t\t\t// If value is a function, invoke it and return its value\r\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\r\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\r\n\t\t};\r\n\r\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\r\n\tif ( traditional === undefined ) {\r\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\r\n\t}\r\n\r\n\t// If an array was passed in, assume that it is an array of form elements.\r\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\r\n\t\t// Serialize the form elements\r\n\t\tjQuery.each( a, function() {\r\n\t\t\tadd( this.name, this.value );\r\n\t\t});\r\n\r\n\t} else {\r\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\r\n\t\t// did it), otherwise encode params recursively.\r\n\t\tfor ( prefix in a ) {\r\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\r\n\t\t}\r\n\t}\r\n\r\n\t// Return the resulting serialization\r\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\r\n};\r\n\r\njQuery.fn.extend({\r\n\tserialize: function() {\r\n\t\treturn jQuery.param( this.serializeArray() );\r\n\t},\r\n\tserializeArray: function() {\r\n\t\treturn this.map(function() {\r\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\r\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\r\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\r\n\t\t})\r\n\t\t.filter(function() {\r\n\t\t\tvar type = this.type;\r\n\t\t\t// Use .is(\":disabled\") so that fieldset[disabled] works\r\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\r\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\r\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\r\n\t\t})\r\n\t\t.map(function( i, elem ) {\r\n\t\t\tvar val = jQuery( this ).val();\r\n\r\n\t\t\treturn val == null ?\r\n\t\t\t\tnull :\r\n\t\t\t\tjQuery.isArray( val ) ?\r\n\t\t\t\t\tjQuery.map( val, function( val ) {\r\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\r\n\t\t\t\t\t}) :\r\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\r\n\t\t}).get();\r\n\t}\r\n});\r\n\r\n\r\n// Create the request object\r\n// (This is still attached to ajaxSettings for backward compatibility)\r\njQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?\r\n\t// Support: IE6+\r\n\tfunction() {\r\n\r\n\t\t// XHR cannot access local files, always use ActiveX for that case\r\n\t\treturn !this.isLocal &&\r\n\r\n\t\t\t// Support: IE7-8\r\n\t\t\t// oldIE XHR does not support non-RFC2616 methods (#13240)\r\n\t\t\t// See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx\r\n\t\t\t// and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9\r\n\t\t\t// Although this check for six methods instead of eight\r\n\t\t\t// since IE also does not support \"trace\" and \"connect\"\r\n\t\t\t/^(get|post|head|put|delete|options)$/i.test( this.type ) &&\r\n\r\n\t\t\tcreateStandardXHR() || createActiveXHR();\r\n\t} :\r\n\t// For all other browsers, use the standard XMLHttpRequest object\r\n\tcreateStandardXHR;\r\n\r\nvar xhrId = 0,\r\n\txhrCallbacks = {},\r\n\txhrSupported = jQuery.ajaxSettings.xhr();\r\n\r\n// Support: IE<10\r\n// Open requests must be manually aborted on unload (#5280)\r\n// See https://support.microsoft.com/kb/2856746 for more info\r\nif ( window.attachEvent ) {\r\n\twindow.attachEvent( \"onunload\", function() {\r\n\t\tfor ( var key in xhrCallbacks ) {\r\n\t\t\txhrCallbacks[ key ]( undefined, true );\r\n\t\t}\r\n\t});\r\n}\r\n\r\n// Determine support properties\r\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\r\nxhrSupported = support.ajax = !!xhrSupported;\r\n\r\n// Create transport if the browser can provide an xhr\r\nif ( xhrSupported ) {\r\n\r\n\tjQuery.ajaxTransport(function( options ) {\r\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\r\n\t\tif ( !options.crossDomain || support.cors ) {\r\n\r\n\t\t\tvar callback;\r\n\r\n\t\t\treturn {\r\n\t\t\t\tsend: function( headers, complete ) {\r\n\t\t\t\t\tvar i,\r\n\t\t\t\t\t\txhr = options.xhr(),\r\n\t\t\t\t\t\tid = ++xhrId;\r\n\r\n\t\t\t\t\t// Open the socket\r\n\t\t\t\t\txhr.open( options.type, options.url, options.async, options.username, options.password );\r\n\r\n\t\t\t\t\t// Apply custom fields if provided\r\n\t\t\t\t\tif ( options.xhrFields ) {\r\n\t\t\t\t\t\tfor ( i in options.xhrFields ) {\r\n\t\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Override mime type if needed\r\n\t\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\r\n\t\t\t\t\t\txhr.overrideMimeType( options.mimeType );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// X-Requested-With header\r\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\r\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\r\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\r\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\r\n\t\t\t\t\tif ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\r\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Set headers\r\n\t\t\t\t\tfor ( i in headers ) {\r\n\t\t\t\t\t\t// Support: IE<9\r\n\t\t\t\t\t\t// IE's ActiveXObject throws a 'Type Mismatch' exception when setting\r\n\t\t\t\t\t\t// request header to a null-value.\r\n\t\t\t\t\t\t//\r\n\t\t\t\t\t\t// To keep consistent with other XHR implementations, cast the value\r\n\t\t\t\t\t\t// to string and ignore `undefined`.\r\n\t\t\t\t\t\tif ( headers[ i ] !== undefined ) {\r\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] + \"\" );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Do send the request\r\n\t\t\t\t\t// This may raise an exception which is actually\r\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\r\n\t\t\t\t\txhr.send( ( options.hasContent && options.data ) || null );\r\n\r\n\t\t\t\t\t// Listener\r\n\t\t\t\t\tcallback = function( _, isAbort ) {\r\n\t\t\t\t\t\tvar status, statusText, responses;\r\n\r\n\t\t\t\t\t\t// Was never called and is aborted or complete\r\n\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\r\n\t\t\t\t\t\t\t// Clean up\r\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\r\n\t\t\t\t\t\t\tcallback = undefined;\r\n\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\r\n\r\n\t\t\t\t\t\t\t// Abort manually if needed\r\n\t\t\t\t\t\t\tif ( isAbort ) {\r\n\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\r\n\t\t\t\t\t\t\t\t\txhr.abort();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tresponses = {};\r\n\t\t\t\t\t\t\t\tstatus = xhr.status;\r\n\r\n\t\t\t\t\t\t\t\t// Support: IE<10\r\n\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\r\n\t\t\t\t\t\t\t\t// (#11426)\r\n\t\t\t\t\t\t\t\tif ( typeof xhr.responseText === \"string\" ) {\r\n\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\r\n\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\r\n\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\r\n\t\t\t\t\t\t\t\t} catch( e ) {\r\n\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\r\n\t\t\t\t\t\t\t\t\tstatusText = \"\";\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\r\n\r\n\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\r\n\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\r\n\t\t\t\t\t\t\t\t// can do given current implementations)\r\n\t\t\t\t\t\t\t\tif ( !status && options.isLocal && !options.crossDomain ) {\r\n\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\r\n\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\r\n\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\r\n\t\t\t\t\t\t\t\t\tstatus = 204;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Call complete if needed\r\n\t\t\t\t\t\tif ( responses ) {\r\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, xhr.getAllResponseHeaders() );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tif ( !options.async ) {\r\n\t\t\t\t\t\t// if we're in sync mode we fire the callback\r\n\t\t\t\t\t\tcallback();\r\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\r\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\r\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\r\n\t\t\t\t\t\tsetTimeout( callback );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// Add to the list of active xhr callbacks\r\n\t\t\t\t\t\txhr.onreadystatechange = xhrCallbacks[ id ] = callback;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\tabort: function() {\r\n\t\t\t\t\tif ( callback ) {\r\n\t\t\t\t\t\tcallback( undefined, true );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t});\r\n}\r\n\r\n// Functions to create xhrs\r\nfunction createStandardXHR() {\r\n\ttry {\r\n\t\treturn new window.XMLHttpRequest();\r\n\t} catch( e ) {}\r\n}\r\n\r\nfunction createActiveXHR() {\r\n\ttry {\r\n\t\treturn new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\r\n\t} catch( e ) {}\r\n}\r\n\r\n\r\n\r\n\r\n// Install script dataType\r\njQuery.ajaxSetup({\r\n\taccepts: {\r\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\r\n\t},\r\n\tcontents: {\r\n\t\tscript: /(?:java|ecma)script/\r\n\t},\r\n\tconverters: {\r\n\t\t\"text script\": function( text ) {\r\n\t\t\tjQuery.globalEval( text );\r\n\t\t\treturn text;\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Handle cache's special case and global\r\njQuery.ajaxPrefilter( \"script\", function( s ) {\r\n\tif ( s.cache === undefined ) {\r\n\t\ts.cache = false;\r\n\t}\r\n\tif ( s.crossDomain ) {\r\n\t\ts.type = \"GET\";\r\n\t\ts.global = false;\r\n\t}\r\n});\r\n\r\n// Bind script tag hack transport\r\njQuery.ajaxTransport( \"script\", function(s) {\r\n\r\n\t// This transport only deals with cross domain requests\r\n\tif ( s.crossDomain ) {\r\n\r\n\t\tvar script,\r\n\t\t\thead = document.head || jQuery(\"head\")[0] || document.documentElement;\r\n\r\n\t\treturn {\r\n\r\n\t\t\tsend: function( _, callback ) {\r\n\r\n\t\t\t\tscript = document.createElement(\"script\");\r\n\r\n\t\t\t\tscript.async = true;\r\n\r\n\t\t\t\tif ( s.scriptCharset ) {\r\n\t\t\t\t\tscript.charset = s.scriptCharset;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tscript.src = s.url;\r\n\r\n\t\t\t\t// Attach handlers for all browsers\r\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\r\n\r\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\r\n\r\n\t\t\t\t\t\t// Handle memory leak in IE\r\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\r\n\r\n\t\t\t\t\t\t// Remove the script\r\n\t\t\t\t\t\tif ( script.parentNode ) {\r\n\t\t\t\t\t\t\tscript.parentNode.removeChild( script );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Dereference the script\r\n\t\t\t\t\t\tscript = null;\r\n\r\n\t\t\t\t\t\t// Callback if not abort\r\n\t\t\t\t\t\tif ( !isAbort ) {\r\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending\r\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\r\n\t\t\t\thead.insertBefore( script, head.firstChild );\r\n\t\t\t},\r\n\r\n\t\t\tabort: function() {\r\n\t\t\t\tif ( script ) {\r\n\t\t\t\t\tscript.onload( undefined, true );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n});\r\n\r\n\r\n\r\n\r\nvar oldCallbacks = [],\r\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\r\n\r\n// Default jsonp settings\r\njQuery.ajaxSetup({\r\n\tjsonp: \"callback\",\r\n\tjsonpCallback: function() {\r\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\r\n\t\tthis[ callback ] = true;\r\n\t\treturn callback;\r\n\t}\r\n});\r\n\r\n// Detect, normalize options and install callbacks for jsonp requests\r\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\r\n\r\n\tvar callbackName, overwritten, responseContainer,\r\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\r\n\t\t\t\"url\" :\r\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\r\n\t\t);\r\n\r\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\r\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\r\n\r\n\t\t// Get callback name, remembering preexisting value associated with it\r\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\r\n\t\t\ts.jsonpCallback() :\r\n\t\t\ts.jsonpCallback;\r\n\r\n\t\t// Insert callback into url or form data\r\n\t\tif ( jsonProp ) {\r\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\r\n\t\t} else if ( s.jsonp !== false ) {\r\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\r\n\t\t}\r\n\r\n\t\t// Use data converter to retrieve json after script execution\r\n\t\ts.converters[\"script json\"] = function() {\r\n\t\t\tif ( !responseContainer ) {\r\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\r\n\t\t\t}\r\n\t\t\treturn responseContainer[ 0 ];\r\n\t\t};\r\n\r\n\t\t// force json dataType\r\n\t\ts.dataTypes[ 0 ] = \"json\";\r\n\r\n\t\t// Install callback\r\n\t\toverwritten = window[ callbackName ];\r\n\t\twindow[ callbackName ] = function() {\r\n\t\t\tresponseContainer = arguments;\r\n\t\t};\r\n\r\n\t\t// Clean-up function (fires after converters)\r\n\t\tjqXHR.always(function() {\r\n\t\t\t// Restore preexisting value\r\n\t\t\twindow[ callbackName ] = overwritten;\r\n\r\n\t\t\t// Save back as free\r\n\t\t\tif ( s[ callbackName ] ) {\r\n\t\t\t\t// make sure that re-using the options doesn't screw things around\r\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\r\n\r\n\t\t\t\t// save the callback name for future use\r\n\t\t\t\toldCallbacks.push( callbackName );\r\n\t\t\t}\r\n\r\n\t\t\t// Call if it was a function and we have a response\r\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\r\n\t\t\t\toverwritten( responseContainer[ 0 ] );\r\n\t\t\t}\r\n\r\n\t\t\tresponseContainer = overwritten = undefined;\r\n\t\t});\r\n\r\n\t\t// Delegate to script\r\n\t\treturn \"script\";\r\n\t}\r\n});\r\n\r\n\r\n\r\n\r\n// data: string of html\r\n// context (optional): If specified, the fragment will be created in this context, defaults to document\r\n// keepScripts (optional): If true, will include scripts passed in the html string\r\njQuery.parseHTML = function( data, context, keepScripts ) {\r\n\tif ( !data || typeof data !== \"string\" ) {\r\n\t\treturn null;\r\n\t}\r\n\tif ( typeof context === \"boolean\" ) {\r\n\t\tkeepScripts = context;\r\n\t\tcontext = false;\r\n\t}\r\n\tcontext = context || document;\r\n\r\n\tvar parsed = rsingleTag.exec( data ),\r\n\t\tscripts = !keepScripts && [];\r\n\r\n\t// Single tag\r\n\tif ( parsed ) {\r\n\t\treturn [ context.createElement( parsed[1] ) ];\r\n\t}\r\n\r\n\tparsed = jQuery.buildFragment( [ data ], context, scripts );\r\n\r\n\tif ( scripts && scripts.length ) {\r\n\t\tjQuery( scripts ).remove();\r\n\t}\r\n\r\n\treturn jQuery.merge( [], parsed.childNodes );\r\n};\r\n\r\n\r\n// Keep a copy of the old load method\r\nvar _load = jQuery.fn.load;\r\n\r\n/**\r\n * Load a url into a page\r\n */\r\njQuery.fn.load = function( url, params, callback ) {\r\n\tif ( typeof url !== \"string\" && _load ) {\r\n\t\treturn _load.apply( this, arguments );\r\n\t}\r\n\r\n\tvar selector, response, type,\r\n\t\tself = this,\r\n\t\toff = url.indexOf(\" \");\r\n\r\n\tif ( off >= 0 ) {\r\n\t\tselector = jQuery.trim( url.slice( off, url.length ) );\r\n\t\turl = url.slice( 0, off );\r\n\t}\r\n\r\n\t// If it's a function\r\n\tif ( jQuery.isFunction( params ) ) {\r\n\r\n\t\t// We assume that it's the callback\r\n\t\tcallback = params;\r\n\t\tparams = undefined;\r\n\r\n\t// Otherwise, build a param string\r\n\t} else if ( params && typeof params === \"object\" ) {\r\n\t\ttype = \"POST\";\r\n\t}\r\n\r\n\t// If we have elements to modify, make the request\r\n\tif ( self.length > 0 ) {\r\n\t\tjQuery.ajax({\r\n\t\t\turl: url,\r\n\r\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\r\n\t\t\ttype: type,\r\n\t\t\tdataType: \"html\",\r\n\t\t\tdata: params\r\n\t\t}).done(function( responseText ) {\r\n\r\n\t\t\t// Save response for use in complete callback\r\n\t\t\tresponse = arguments;\r\n\r\n\t\t\tself.html( selector ?\r\n\r\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\r\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\r\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\r\n\r\n\t\t\t\t// Otherwise use the full result\r\n\t\t\t\tresponseText );\r\n\r\n\t\t}).complete( callback && function( jqXHR, status ) {\r\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\r\n\t\t});\r\n\t}\r\n\r\n\treturn this;\r\n};\r\n\r\n\r\n\r\n\r\n// Attach a bunch of functions for handling common AJAX events\r\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ) {\r\n\tjQuery.fn[ type ] = function( fn ) {\r\n\t\treturn this.on( type, fn );\r\n\t};\r\n});\r\n\r\n\r\n\r\n\r\njQuery.expr.filters.animated = function( elem ) {\r\n\treturn jQuery.grep(jQuery.timers, function( fn ) {\r\n\t\treturn elem === fn.elem;\r\n\t}).length;\r\n};\r\n\r\n\r\n\r\n\r\n\r\nvar docElem = window.document.documentElement;\r\n\r\n/**\r\n * Gets a window from an element\r\n */\r\nfunction getWindow( elem ) {\r\n\treturn jQuery.isWindow( elem ) ?\r\n\t\telem :\r\n\t\telem.nodeType === 9 ?\r\n\t\t\telem.defaultView || elem.parentWindow :\r\n\t\t\tfalse;\r\n}\r\n\r\njQuery.offset = {\r\n\tsetOffset: function( elem, options, i ) {\r\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\r\n\t\t\tposition = jQuery.css( elem, \"position\" ),\r\n\t\t\tcurElem = jQuery( elem ),\r\n\t\t\tprops = {};\r\n\r\n\t\t// set position first, in-case top/left are set even on static elem\r\n\t\tif ( position === \"static\" ) {\r\n\t\t\telem.style.position = \"relative\";\r\n\t\t}\r\n\r\n\t\tcurOffset = curElem.offset();\r\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\r\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\r\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\r\n\t\t\tjQuery.inArray(\"auto\", [ curCSSTop, curCSSLeft ] ) > -1;\r\n\r\n\t\t// need to be able to calculate position if either top or left is auto and position is either absolute or fixed\r\n\t\tif ( calculatePosition ) {\r\n\t\t\tcurPosition = curElem.position();\r\n\t\t\tcurTop = curPosition.top;\r\n\t\t\tcurLeft = curPosition.left;\r\n\t\t} else {\r\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\r\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\r\n\t\t}\r\n\r\n\t\tif ( jQuery.isFunction( options ) ) {\r\n\t\t\toptions = options.call( elem, i, curOffset );\r\n\t\t}\r\n\r\n\t\tif ( options.top != null ) {\r\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\r\n\t\t}\r\n\t\tif ( options.left != null ) {\r\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\r\n\t\t}\r\n\r\n\t\tif ( \"using\" in options ) {\r\n\t\t\toptions.using.call( elem, props );\r\n\t\t} else {\r\n\t\t\tcurElem.css( props );\r\n\t\t}\r\n\t}\r\n};\r\n\r\njQuery.fn.extend({\r\n\toffset: function( options ) {\r\n\t\tif ( arguments.length ) {\r\n\t\t\treturn options === undefined ?\r\n\t\t\t\tthis :\r\n\t\t\t\tthis.each(function( i ) {\r\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar docElem, win,\r\n\t\t\tbox = { top: 0, left: 0 },\r\n\t\t\telem = this[ 0 ],\r\n\t\t\tdoc = elem && elem.ownerDocument;\r\n\r\n\t\tif ( !doc ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tdocElem = doc.documentElement;\r\n\r\n\t\t// Make sure it's not a disconnected DOM node\r\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\r\n\t\t\treturn box;\r\n\t\t}\r\n\r\n\t\t// If we don't have gBCR, just use 0,0 rather than error\r\n\t\t// BlackBerry 5, iOS 3 (original iPhone)\r\n\t\tif ( typeof elem.getBoundingClientRect !== strundefined ) {\r\n\t\t\tbox = elem.getBoundingClientRect();\r\n\t\t}\r\n\t\twin = getWindow( doc );\r\n\t\treturn {\r\n\t\t\ttop: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),\r\n\t\t\tleft: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )\r\n\t\t};\r\n\t},\r\n\r\n\tposition: function() {\r\n\t\tif ( !this[ 0 ] ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar offsetParent, offset,\r\n\t\t\tparentOffset = { top: 0, left: 0 },\r\n\t\t\telem = this[ 0 ];\r\n\r\n\t\t// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent\r\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\r\n\t\t\t// we assume that getBoundingClientRect is available when computed position is fixed\r\n\t\t\toffset = elem.getBoundingClientRect();\r\n\t\t} else {\r\n\t\t\t// Get *real* offsetParent\r\n\t\t\toffsetParent = this.offsetParent();\r\n\r\n\t\t\t// Get correct offsets\r\n\t\t\toffset = this.offset();\r\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\r\n\t\t\t\tparentOffset = offsetParent.offset();\r\n\t\t\t}\r\n\r\n\t\t\t// Add offsetParent borders\r\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\r\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\r\n\t\t}\r\n\r\n\t\t// Subtract parent offsets and element margins\r\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\r\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\r\n\t\treturn {\r\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\r\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true)\r\n\t\t};\r\n\t},\r\n\r\n\toffsetParent: function() {\r\n\t\treturn this.map(function() {\r\n\t\t\tvar offsetParent = this.offsetParent || docElem;\r\n\r\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\" ) === \"static\" ) ) {\r\n\t\t\t\toffsetParent = offsetParent.offsetParent;\r\n\t\t\t}\r\n\t\t\treturn offsetParent || docElem;\r\n\t\t});\r\n\t}\r\n});\r\n\r\n// Create scrollLeft and scrollTop methods\r\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\r\n\tvar top = /Y/.test( prop );\r\n\r\n\tjQuery.fn[ method ] = function( val ) {\r\n\t\treturn access( this, function( elem, method, val ) {\r\n\t\t\tvar win = getWindow( elem );\r\n\r\n\t\t\tif ( val === undefined ) {\r\n\t\t\t\treturn win ? (prop in win) ? win[ prop ] :\r\n\t\t\t\t\twin.document.documentElement[ method ] :\r\n\t\t\t\t\telem[ method ];\r\n\t\t\t}\r\n\r\n\t\t\tif ( win ) {\r\n\t\t\t\twin.scrollTo(\r\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\r\n\t\t\t\t\ttop ? val : jQuery( win ).scrollTop()\r\n\t\t\t\t);\r\n\r\n\t\t\t} else {\r\n\t\t\t\telem[ method ] = val;\r\n\t\t\t}\r\n\t\t}, method, val, arguments.length, null );\r\n\t};\r\n});\r\n\r\n// Add the top/left cssHooks using jQuery.fn.position\r\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\r\n// getComputedStyle returns percent when specified for top/left/bottom/right\r\n// rather than make the css module depend on the offset module, we just check for it here\r\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\r\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\r\n\t\tfunction( elem, computed ) {\r\n\t\t\tif ( computed ) {\r\n\t\t\t\tcomputed = curCSS( elem, prop );\r\n\t\t\t\t// if curCSS returns percentage, fallback to offset\r\n\t\t\t\treturn rnumnonpx.test( computed ) ?\r\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\r\n\t\t\t\t\tcomputed;\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n});\r\n\r\n\r\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\r\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\r\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\r\n\t\t// margin is only for outerHeight, outerWidth\r\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\r\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\r\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\r\n\r\n\t\t\treturn access( this, function( elem, type, value ) {\r\n\t\t\t\tvar doc;\r\n\r\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\r\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\r\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\r\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\r\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Get document width or height\r\n\t\t\t\tif ( elem.nodeType === 9 ) {\r\n\t\t\t\t\tdoc = elem.documentElement;\r\n\r\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest\r\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.\r\n\t\t\t\t\treturn Math.max(\r\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\r\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\r\n\t\t\t\t\t\tdoc[ \"client\" + name ]\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn value === undefined ?\r\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\r\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\r\n\r\n\t\t\t\t\t// Set width or height on the element\r\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\r\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\r\n\t\t};\r\n\t});\r\n});\r\n\r\n\r\n// The number of elements contained in the matched element set\r\njQuery.fn.size = function() {\r\n\treturn this.length;\r\n};\r\n\r\njQuery.fn.andSelf = jQuery.fn.addBack;\r\n\r\n\r\n\r\n\r\n// Register as a named AMD module, since jQuery can be concatenated with other\r\n// files that may use define, but not via a proper concatenation script that\r\n// understands anonymous AMD modules. A named AMD is safest and most robust\r\n// way to register. Lowercase jquery is used because AMD module names are\r\n// derived from file names, and jQuery is normally delivered in a lowercase\r\n// file name. Do this after creating the global so that if an AMD module wants\r\n// to call noConflict to hide this version of jQuery, it will work.\r\n\r\n// Note that for maximum portability, libraries that are not jQuery should\r\n// declare themselves as anonymous modules, and avoid setting a global if an\r\n// AMD loader is present. jQuery is a special case. For more information, see\r\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\r\n\r\nif ( typeof define === \"function\" && define.amd ) {\r\n\tdefine( \"jquery\", [], function() {\r\n\t\treturn jQuery;\r\n\t});\r\n}\r\n\r\n\r\n\r\n\r\nvar\r\n\t// Map over jQuery in case of overwrite\r\n\t_jQuery = window.jQuery,\r\n\r\n\t// Map over the $ in case of overwrite\r\n\t_$ = window.$;\r\n\r\njQuery.noConflict = function( deep ) {\r\n\tif ( window.$ === jQuery ) {\r\n\t\twindow.$ = _$;\r\n\t}\r\n\r\n\tif ( deep && window.jQuery === jQuery ) {\r\n\t\twindow.jQuery = _jQuery;\r\n\t}\r\n\r\n\treturn jQuery;\r\n};\r\n\r\n// Expose jQuery and $ identifiers, even in\r\n// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\r\n// and CommonJS for browser emulators (#13566)\r\nif ( typeof noGlobal === strundefined ) {\r\n\twindow.jQuery = window.$ = jQuery;\r\n}\r\n\r\n\r\n\r\n\r\nreturn jQuery;\r\n\r\n}));\r\n\n/* Riot v2.3.17, @license MIT */\r\n\r\n;(function(window, undefined) {\r\n 'use strict';\r\nvar riot = { version: 'v2.3.17', settings: {} },\r\n // be aware, internal usage\r\n // ATTENTION: prefix the global dynamic variables with `__`\r\n\r\n // counter to give a unique id to all the Tag instances\r\n __uid = 0,\r\n // tags instances cache\r\n __virtualDom = [],\r\n // tags implementation cache\r\n __tagImpl = {},\r\n\r\n /**\r\n * Const\r\n */\r\n GLOBAL_MIXIN = '__global_mixin',\r\n\r\n // riot specific prefixes\r\n RIOT_PREFIX = 'riot-',\r\n RIOT_TAG = RIOT_PREFIX + 'tag',\r\n RIOT_TAG_IS = 'data-is',\r\n\r\n // for typeof == '' comparisons\r\n T_STRING = 'string',\r\n T_OBJECT = 'object',\r\n T_UNDEF = 'undefined',\r\n T_BOOL = 'boolean',\r\n T_FUNCTION = 'function',\r\n // special native tags that cannot be treated like the others\r\n SPECIAL_TAGS_REGEX = /^(?:t(?:body|head|foot|[rhd])|caption|col(?:group)?|opt(?:ion|group))$/,\r\n RESERVED_WORDS_BLACKLIST = ['_item', '_id', '_parent', 'update', 'root', 'mount', 'unmount', 'mixin', 'isMounted', 'isLoop', 'tags', 'parent', 'opts', 'trigger', 'on', 'off', 'one'],\r\n\r\n // version# for IE 8-11, 0 for others\r\n IE_VERSION = (window && window.document || {}).documentMode | 0\r\n/* istanbul ignore next */\r\nriot.observable = function(el) {\r\n\r\n /**\r\n * Extend the original object or create a new empty one\r\n * @type { Object }\r\n */\r\n\r\n el = el || {}\r\n\r\n /**\r\n * Private variables and methods\r\n */\r\n var callbacks = {},\r\n slice = Array.prototype.slice,\r\n onEachEvent = function(e, fn) { e.replace(/\\S+/g, fn) }\r\n\r\n // extend the object adding the observable methods\r\n Object.defineProperties(el, {\r\n /**\r\n * Listen to the given space separated list of `events` and execute the `callback` each time an event is triggered.\r\n * @param { String } events - events ids\r\n * @param { Function } fn - callback function\r\n * @returns { Object } el\r\n */\r\n on: {\r\n value: function(events, fn) {\r\n if (typeof fn != 'function') return el\r\n\r\n onEachEvent(events, function(name, pos) {\r\n (callbacks[name] = callbacks[name] || []).push(fn)\r\n fn.typed = pos > 0\r\n })\r\n\r\n return el\r\n },\r\n enumerable: false,\r\n writable: false,\r\n configurable: false\r\n },\r\n\r\n /**\r\n * Removes the given space separated list of `events` listeners\r\n * @param { String } events - events ids\r\n * @param { Function } fn - callback function\r\n * @returns { Object } el\r\n */\r\n off: {\r\n value: function(events, fn) {\r\n if (events == '*' && !fn) callbacks = {}\r\n else {\r\n onEachEvent(events, function(name) {\r\n if (fn) {\r\n var arr = callbacks[name]\r\n for (var i = 0, cb; cb = arr && arr[i]; ++i) {\r\n if (cb == fn) arr.splice(i--, 1)\r\n }\r\n } else delete callbacks[name]\r\n })\r\n }\r\n return el\r\n },\r\n enumerable: false,\r\n writable: false,\r\n configurable: false\r\n },\r\n\r\n /**\r\n * Listen to the given space separated list of `events` and execute the `callback` at most once\r\n * @param { String } events - events ids\r\n * @param { Function } fn - callback function\r\n * @returns { Object } el\r\n */\r\n one: {\r\n value: function(events, fn) {\r\n function on() {\r\n el.off(events, on)\r\n fn.apply(el, arguments)\r\n }\r\n return el.on(events, on)\r\n },\r\n enumerable: false,\r\n writable: false,\r\n configurable: false\r\n },\r\n\r\n /**\r\n * Execute all callback functions that listen to the given space separated list of `events`\r\n * @param { String } events - events ids\r\n * @returns { Object } el\r\n */\r\n trigger: {\r\n value: function(events) {\r\n\r\n // getting the arguments\r\n var arglen = arguments.length - 1,\r\n args = new Array(arglen),\r\n fns\r\n\r\n for (var i = 0; i < arglen; i++) {\r\n args[i] = arguments[i + 1] // skip first argument\r\n }\r\n\r\n onEachEvent(events, function(name) {\r\n\r\n fns = slice.call(callbacks[name] || [], 0)\r\n\r\n for (var i = 0, fn; fn = fns[i]; ++i) {\r\n if (fn.busy) return\r\n fn.busy = 1\r\n fn.apply(el, fn.typed ? [name].concat(args) : args)\r\n if (fns[i] !== fn) { i-- }\r\n fn.busy = 0\r\n }\r\n\r\n if (callbacks['*'] && name != '*')\r\n el.trigger.apply(el, ['*', name].concat(args))\r\n\r\n })\r\n\r\n return el\r\n },\r\n enumerable: false,\r\n writable: false,\r\n configurable: false\r\n }\r\n })\r\n\r\n return el\r\n\r\n}\r\n/* istanbul ignore next */\r\n;(function(riot) {\r\n\r\n/**\r\n * Simple client-side router\r\n * @module riot-route\r\n */\r\n\r\n\r\nvar RE_ORIGIN = /^.+?\\/+[^\\/]+/,\r\n EVENT_LISTENER = 'EventListener',\r\n REMOVE_EVENT_LISTENER = 'remove' + EVENT_LISTENER,\r\n ADD_EVENT_LISTENER = 'add' + EVENT_LISTENER,\r\n HAS_ATTRIBUTE = 'hasAttribute',\r\n REPLACE = 'replace',\r\n POPSTATE = 'popstate',\r\n HASHCHANGE = 'hashchange',\r\n TRIGGER = 'trigger',\r\n MAX_EMIT_STACK_LEVEL = 3,\r\n win = typeof window != 'undefined' && window,\r\n doc = typeof document != 'undefined' && document,\r\n hist = win && history,\r\n loc = win && (hist.location || win.location), // see html5-history-api\r\n prot = Router.prototype, // to minify more\r\n clickEvent = doc && doc.ontouchstart ? 'touchstart' : 'click',\r\n started = false,\r\n central = riot.observable(),\r\n routeFound = false,\r\n debouncedEmit,\r\n base, current, parser, secondParser, emitStack = [], emitStackLevel = 0\r\n\r\n/**\r\n * Default parser. You can replace it via router.parser method.\r\n * @param {string} path - current path (normalized)\r\n * @returns {array} array\r\n */\r\nfunction DEFAULT_PARSER(path) {\r\n return path.split(/[/?#]/)\r\n}\r\n\r\n/**\r\n * Default parser (second). You can replace it via router.parser method.\r\n * @param {string} path - current path (normalized)\r\n * @param {string} filter - filter string (normalized)\r\n * @returns {array} array\r\n */\r\nfunction DEFAULT_SECOND_PARSER(path, filter) {\r\n var re = new RegExp('^' + filter[REPLACE](/\\*/g, '([^/?#]+?)')[REPLACE](/\\.\\./, '.*') + '$'),\r\n args = path.match(re)\r\n\r\n if (args) return args.slice(1)\r\n}\r\n\r\n/**\r\n * Simple/cheap debounce implementation\r\n * @param {function} fn - callback\r\n * @param {number} delay - delay in seconds\r\n * @returns {function} debounced function\r\n */\r\nfunction debounce(fn, delay) {\r\n var t\r\n return function () {\r\n clearTimeout(t)\r\n t = setTimeout(fn, delay)\r\n }\r\n}\r\n\r\n/**\r\n * Set the window listeners to trigger the routes\r\n * @param {boolean} autoExec - see route.start\r\n */\r\nfunction start(autoExec) {\r\n debouncedEmit = debounce(emit, 1)\r\n win[ADD_EVENT_LISTENER](POPSTATE, debouncedEmit)\r\n win[ADD_EVENT_LISTENER](HASHCHANGE, debouncedEmit)\r\n doc[ADD_EVENT_LISTENER](clickEvent, click)\r\n if (autoExec) emit(true)\r\n}\r\n\r\n/**\r\n * Router class\r\n */\r\nfunction Router() {\r\n this.$ = []\r\n riot.observable(this) // make it observable\r\n central.on('stop', this.s.bind(this))\r\n central.on('emit', this.e.bind(this))\r\n}\r\n\r\nfunction normalize(path) {\r\n return path[REPLACE](/^\\/|\\/$/, '')\r\n}\r\n\r\nfunction isString(str) {\r\n return typeof str == 'string'\r\n}\r\n\r\n/**\r\n * Get the part after domain name\r\n * @param {string} href - fullpath\r\n * @returns {string} path from root\r\n */\r\nfunction getPathFromRoot(href) {\r\n return (href || loc.href || '')[REPLACE](RE_ORIGIN, '')\r\n}\r\n\r\n/**\r\n * Get the part after base\r\n * @param {string} href - fullpath\r\n * @returns {string} path from base\r\n */\r\nfunction getPathFromBase(href) {\r\n return base[0] == '#'\r\n ? (href || loc.href || '').split(base)[1] || ''\r\n : getPathFromRoot(href)[REPLACE](base, '')\r\n}\r\n\r\nfunction emit(force) {\r\n // the stack is needed for redirections\r\n var isRoot = emitStackLevel == 0\r\n if (MAX_EMIT_STACK_LEVEL <= emitStackLevel) return\r\n\r\n emitStackLevel++\r\n emitStack.push(function() {\r\n var path = getPathFromBase()\r\n if (force || path != current) {\r\n central[TRIGGER]('emit', path)\r\n current = path\r\n }\r\n })\r\n if (isRoot) {\r\n while (emitStack.length) {\r\n emitStack[0]()\r\n emitStack.shift()\r\n }\r\n emitStackLevel = 0\r\n }\r\n}\r\n\r\nfunction click(e) {\r\n if (\r\n e.which != 1 // not left click\r\n || e.metaKey || e.ctrlKey || e.shiftKey // or meta keys\r\n || e.defaultPrevented // or default prevented\r\n ) return\r\n\r\n var el = e.target\r\n while (el && el.nodeName != 'A') el = el.parentNode\r\n if (\r\n !el || el.nodeName != 'A' // not A tag\r\n || el[HAS_ATTRIBUTE]('download') // has download attr\r\n || !el[HAS_ATTRIBUTE]('href') // has no href attr\r\n || el.target && el.target != '_self' // another window or frame\r\n || el.href.indexOf(loc.href.match(RE_ORIGIN)[0]) == -1 // cross origin\r\n ) return\r\n\r\n if (el.href != loc.href) {\r\n if (\r\n el.href.split('#')[0] == loc.href.split('#')[0] // internal jump\r\n || base != '#' && getPathFromRoot(el.href).indexOf(base) !== 0 // outside of base\r\n || !go(getPathFromBase(el.href), el.title || doc.title) // route not found\r\n ) return\r\n }\r\n\r\n e.preventDefault()\r\n}\r\n\r\n/**\r\n * Go to the path\r\n * @param {string} path - destination path\r\n * @param {string} title - page title\r\n * @param {boolean} shouldReplace - use replaceState or pushState\r\n * @returns {boolean} - route not found flag\r\n */\r\nfunction go(path, title, shouldReplace) {\r\n if (hist) { // if a browser\r\n path = base + normalize(path)\r\n title = title || doc.title\r\n // browsers ignores the second parameter `title`\r\n shouldReplace\r\n ? hist.replaceState(null, title, path)\r\n : hist.pushState(null, title, path)\r\n // so we need to set it manually\r\n doc.title = title\r\n routeFound = false\r\n emit()\r\n return routeFound\r\n }\r\n\r\n // Server-side usage: directly execute handlers for the path\r\n return central[TRIGGER]('emit', getPathFromBase(path))\r\n}\r\n\r\n/**\r\n * Go to path or set action\r\n * a single string: go there\r\n * two strings: go there with setting a title\r\n * two strings and boolean: replace history with setting a title\r\n * a single function: set an action on the default route\r\n * a string/RegExp and a function: set an action on the route\r\n * @param {(string|function)} first - path / action / filter\r\n * @param {(string|RegExp|function)} second - title / action\r\n * @param {boolean} third - replace flag\r\n */\r\nprot.m = function(first, second, third) {\r\n if (isString(first) && (!second || isString(second))) go(first, second, third || false)\r\n else if (second) this.r(first, second)\r\n else this.r('@', first)\r\n}\r\n\r\n/**\r\n * Stop routing\r\n */\r\nprot.s = function() {\r\n this.off('*')\r\n this.$ = []\r\n}\r\n\r\n/**\r\n * Emit\r\n * @param {string} path - path\r\n */\r\nprot.e = function(path) {\r\n this.$.concat('@').some(function(filter) {\r\n var args = (filter == '@' ? parser : secondParser)(normalize(path), normalize(filter))\r\n if (typeof args != 'undefined') {\r\n this[TRIGGER].apply(null, [filter].concat(args))\r\n return routeFound = true // exit from loop\r\n }\r\n }, this)\r\n}\r\n\r\n/**\r\n * Register route\r\n * @param {string} filter - filter for matching to url\r\n * @param {function} action - action to register\r\n */\r\nprot.r = function(filter, action) {\r\n if (filter != '@') {\r\n filter = '/' + normalize(filter)\r\n this.$.push(filter)\r\n }\r\n this.on(filter, action)\r\n}\r\n\r\nvar mainRouter = new Router()\r\nvar route = mainRouter.m.bind(mainRouter)\r\n\r\n/**\r\n * Create a sub router\r\n * @returns {function} the method of a new Router object\r\n */\r\nroute.create = function() {\r\n var newSubRouter = new Router()\r\n // stop only this sub-router\r\n newSubRouter.m.stop = newSubRouter.s.bind(newSubRouter)\r\n // return sub-router's main method\r\n return newSubRouter.m.bind(newSubRouter)\r\n}\r\n\r\n/**\r\n * Set the base of url\r\n * @param {(str|RegExp)} arg - a new base or '#' or '#!'\r\n */\r\nroute.base = function(arg) {\r\n base = arg || '#'\r\n current = getPathFromBase() // recalculate current path\r\n}\r\n\r\n/** Exec routing right now **/\r\nroute.exec = function() {\r\n emit(true)\r\n}\r\n\r\n/**\r\n * Replace the default router to yours\r\n * @param {function} fn - your parser function\r\n * @param {function} fn2 - your secondParser function\r\n */\r\nroute.parser = function(fn, fn2) {\r\n if (!fn && !fn2) {\r\n // reset parser for testing...\r\n parser = DEFAULT_PARSER\r\n secondParser = DEFAULT_SECOND_PARSER\r\n }\r\n if (fn) parser = fn\r\n if (fn2) secondParser = fn2\r\n}\r\n\r\n/**\r\n * Helper function to get url query as an object\r\n * @returns {object} parsed query\r\n */\r\nroute.query = function() {\r\n var q = {}\r\n var href = loc.href || current\r\n href[REPLACE](/[?&](.+?)=([^&]*)/g, function(_, k, v) { q[k] = v })\r\n return q\r\n}\r\n\r\n/** Stop routing **/\r\nroute.stop = function () {\r\n if (started) {\r\n if (win) {\r\n win[REMOVE_EVENT_LISTENER](POPSTATE, debouncedEmit)\r\n win[REMOVE_EVENT_LISTENER](HASHCHANGE, debouncedEmit)\r\n doc[REMOVE_EVENT_LISTENER](clickEvent, click)\r\n }\r\n central[TRIGGER]('stop')\r\n started = false\r\n }\r\n}\r\n\r\n/**\r\n * Start routing\r\n * @param {boolean} autoExec - automatically exec after starting if true\r\n */\r\nroute.start = function (autoExec) {\r\n if (!started) {\r\n if (win) {\r\n if (document.readyState == 'complete') start(autoExec)\r\n // the timeout is needed to solve\r\n // a weird safari bug https://github.com/riot/route/issues/33\r\n else win[ADD_EVENT_LISTENER]('load', function() {\r\n setTimeout(function() { start(autoExec) }, 1)\r\n })\r\n }\r\n started = true\r\n }\r\n}\r\n\r\n/** Prepare the router **/\r\nroute.base()\r\nroute.parser()\r\n\r\nriot.route = route\r\n})(riot)\r\n/* istanbul ignore next */\r\n\r\n/**\r\n * The riot template engine\r\n * @version v2.3.21\r\n */\r\n\r\n/**\r\n * riot.util.brackets\r\n *\r\n * - `brackets ` - Returns a string or regex based on its parameter\r\n * - `brackets.set` - Change the current riot brackets\r\n *\r\n * @module\r\n */\r\n\r\nvar brackets = (function (UNDEF) {\r\n\r\n var\r\n REGLOB = 'g',\r\n\r\n R_MLCOMMS = /\\/\\*[^*]*\\*+(?:[^*\\/][^*]*\\*+)*\\//g,\r\n\r\n R_STRINGS = /\"[^\"\\\\]*(?:\\\\[\\S\\s][^\"\\\\]*)*\"|'[^'\\\\]*(?:\\\\[\\S\\s][^'\\\\]*)*'/g,\r\n\r\n S_QBLOCKS = R_STRINGS.source + '|' +\r\n /(?:\\breturn\\s+|(?:[$\\w\\)\\]]|\\+\\+|--)\\s*(\\/)(?![*\\/]))/.source + '|' +\r\n /\\/(?=[^*\\/])[^[\\/\\\\]*(?:(?:\\[(?:\\\\.|[^\\]\\\\]*)*\\]|\\\\.)[^[\\/\\\\]*)*?(\\/)[gim]*/.source,\r\n\r\n FINDBRACES = {\r\n '(': RegExp('([()])|' + S_QBLOCKS, REGLOB),\r\n '[': RegExp('([[\\\\]])|' + S_QBLOCKS, REGLOB),\r\n '{': RegExp('([{}])|' + S_QBLOCKS, REGLOB)\r\n },\r\n\r\n DEFAULT = '{ }'\r\n\r\n var _pairs = [\r\n '{', '}',\r\n '{', '}',\r\n /{[^}]*}/,\r\n /\\\\([{}])/g,\r\n /\\\\({)|{/g,\r\n RegExp('\\\\\\\\(})|([[({])|(})|' + S_QBLOCKS, REGLOB),\r\n DEFAULT,\r\n /^\\s*{\\^?\\s*([$\\w]+)(?:\\s*,\\s*(\\S+))?\\s+in\\s+(\\S.*)\\s*}/,\r\n /(^|[^\\\\]){=[\\S\\s]*?}/\r\n ]\r\n\r\n var\r\n cachedBrackets = UNDEF,\r\n _regex,\r\n _cache = [],\r\n _settings\r\n\r\n function _loopback (re) { return re }\r\n\r\n function _rewrite (re, bp) {\r\n if (!bp) bp = _cache\r\n return new RegExp(\r\n re.source.replace(/{/g, bp[2]).replace(/}/g, bp[3]), re.global ? REGLOB : ''\r\n )\r\n }\r\n\r\n function _create (pair) {\r\n if (pair === DEFAULT) return _pairs\r\n\r\n var arr = pair.split(' ')\r\n\r\n if (arr.length !== 2 || /[\\x00-\\x1F<>a-zA-Z0-9'\",;\\\\]/.test(pair)) {\r\n throw new Error('Unsupported brackets \"' + pair + '\"')\r\n }\r\n arr = arr.concat(pair.replace(/(?=[[\\]()*+?.^$|])/g, '\\\\').split(' '))\r\n\r\n arr[4] = _rewrite(arr[1].length > 1 ? /{[\\S\\s]*?}/ : _pairs[4], arr)\r\n arr[5] = _rewrite(pair.length > 3 ? /\\\\({|})/g : _pairs[5], arr)\r\n arr[6] = _rewrite(_pairs[6], arr)\r\n arr[7] = RegExp('\\\\\\\\(' + arr[3] + ')|([[({])|(' + arr[3] + ')|' + S_QBLOCKS, REGLOB)\r\n arr[8] = pair\r\n return arr\r\n }\r\n\r\n function _brackets (reOrIdx) {\r\n return reOrIdx instanceof RegExp ? _regex(reOrIdx) : _cache[reOrIdx]\r\n }\r\n\r\n _brackets.split = function split (str, tmpl, _bp) {\r\n // istanbul ignore next: _bp is for the compiler\r\n if (!_bp) _bp = _cache\r\n\r\n var\r\n parts = [],\r\n match,\r\n isexpr,\r\n start,\r\n pos,\r\n re = _bp[6]\r\n\r\n isexpr = start = re.lastIndex = 0\r\n\r\n while (match = re.exec(str)) {\r\n\r\n pos = match.index\r\n\r\n if (isexpr) {\r\n\r\n if (match[2]) {\r\n re.lastIndex = skipBraces(str, match[2], re.lastIndex)\r\n continue\r\n }\r\n if (!match[3])\r\n continue\r\n }\r\n\r\n if (!match[1]) {\r\n unescapeStr(str.slice(start, pos))\r\n start = re.lastIndex\r\n re = _bp[6 + (isexpr ^= 1)]\r\n re.lastIndex = start\r\n }\r\n }\r\n\r\n if (str && start < str.length) {\r\n unescapeStr(str.slice(start))\r\n }\r\n\r\n return parts\r\n\r\n function unescapeStr (s) {\r\n if (tmpl || isexpr)\r\n parts.push(s && s.replace(_bp[5], '$1'))\r\n else\r\n parts.push(s)\r\n }\r\n\r\n function skipBraces (s, ch, ix) {\r\n var\r\n match,\r\n recch = FINDBRACES[ch]\r\n\r\n recch.lastIndex = ix\r\n ix = 1\r\n while (match = recch.exec(s)) {\r\n if (match[1] &&\r\n !(match[1] === ch ? ++ix : --ix)) break\r\n }\r\n return ix ? s.length : recch.lastIndex\r\n }\r\n }\r\n\r\n _brackets.hasExpr = function hasExpr (str) {\r\n return _cache[4].test(str)\r\n }\r\n\r\n _brackets.loopKeys = function loopKeys (expr) {\r\n var m = expr.match(_cache[9])\r\n return m\r\n ? { key: m[1], pos: m[2], val: _cache[0] + m[3].trim() + _cache[1] }\r\n : { val: expr.trim() }\r\n }\r\n\r\n _brackets.hasRaw = function (src) {\r\n return _cache[10].test(src)\r\n }\r\n\r\n _brackets.array = function array (pair) {\r\n return pair ? _create(pair) : _cache\r\n }\r\n\r\n function _reset (pair) {\r\n if ((pair || (pair = DEFAULT)) !== _cache[8]) {\r\n _cache = _create(pair)\r\n _regex = pair === DEFAULT ? _loopback : _rewrite\r\n _cache[9] = _regex(_pairs[9])\r\n _cache[10] = _regex(_pairs[10])\r\n }\r\n cachedBrackets = pair\r\n }\r\n\r\n function _setSettings (o) {\r\n var b\r\n o = o || {}\r\n b = o.brackets\r\n Object.defineProperty(o, 'brackets', {\r\n set: _reset,\r\n get: function () { return cachedBrackets },\r\n enumerable: true\r\n })\r\n _settings = o\r\n _reset(b)\r\n }\r\n\r\n Object.defineProperty(_brackets, 'settings', {\r\n set: _setSettings,\r\n get: function () { return _settings }\r\n })\r\n\r\n /* istanbul ignore next: in the browser riot is always in the scope */\r\n _brackets.settings = typeof riot !== 'undefined' && riot.settings || {}\r\n _brackets.set = _reset\r\n\r\n _brackets.R_STRINGS = R_STRINGS\r\n _brackets.R_MLCOMMS = R_MLCOMMS\r\n _brackets.S_QBLOCKS = S_QBLOCKS\r\n\r\n return _brackets\r\n\r\n})()\r\n\r\n/**\r\n * @module tmpl\r\n *\r\n * tmpl - Root function, returns the template value, render with data\r\n * tmpl.hasExpr - Test the existence of a expression inside a string\r\n * tmpl.loopKeys - Get the keys for an 'each' loop (used by `_each`)\r\n */\r\n\r\nvar tmpl = (function () {\r\n\r\n var _cache = {}\r\n\r\n function _tmpl (str, data) {\r\n if (!str) return str\r\n\r\n return (_cache[str] || (_cache[str] = _create(str))).call(data, _logErr)\r\n }\r\n\r\n _tmpl.haveRaw = brackets.hasRaw\r\n\r\n _tmpl.hasExpr = brackets.hasExpr\r\n\r\n _tmpl.loopKeys = brackets.loopKeys\r\n\r\n _tmpl.errorHandler = null\r\n\r\n function _logErr (err, ctx) {\r\n\r\n if (_tmpl.errorHandler) {\r\n\r\n err.riotData = {\r\n tagName: ctx && ctx.root && ctx.root.tagName,\r\n _riot_id: ctx && ctx._riot_id //eslint-disable-line camelcase\r\n }\r\n _tmpl.errorHandler(err)\r\n }\r\n }\r\n\r\n function _create (str) {\r\n\r\n var expr = _getTmpl(str)\r\n if (expr.slice(0, 11) !== 'try{return ') expr = 'return ' + expr\r\n\r\n return new Function('E', expr + ';')\r\n }\r\n\r\n var\r\n RE_QBLOCK = RegExp(brackets.S_QBLOCKS, 'g'),\r\n RE_QBMARK = /\\x01(\\d+)~/g\r\n\r\n function _getTmpl (str) {\r\n var\r\n qstr = [],\r\n expr,\r\n parts = brackets.split(str.replace(/\\u2057/g, '\"'), 1)\r\n\r\n if (parts.length > 2 || parts[0]) {\r\n var i, j, list = []\r\n\r\n for (i = j = 0; i < parts.length; ++i) {\r\n\r\n expr = parts[i]\r\n\r\n if (expr && (expr = i & 1 ?\r\n\r\n _parseExpr(expr, 1, qstr) :\r\n\r\n '\"' + expr\r\n .replace(/\\\\/g, '\\\\\\\\')\r\n .replace(/\\r\\n?|\\n/g, '\\\\n')\r\n .replace(/\"/g, '\\\\\"') +\r\n '\"'\r\n\r\n )) list[j++] = expr\r\n\r\n }\r\n\r\n expr = j < 2 ? list[0] :\r\n '[' + list.join(',') + '].join(\"\")'\r\n\r\n } else {\r\n\r\n expr = _parseExpr(parts[1], 0, qstr)\r\n }\r\n\r\n if (qstr[0])\r\n expr = expr.replace(RE_QBMARK, function (_, pos) {\r\n return qstr[pos]\r\n .replace(/\\r/g, '\\\\r')\r\n .replace(/\\n/g, '\\\\n')\r\n })\r\n\r\n return expr\r\n }\r\n\r\n var\r\n RE_BREND = {\r\n '(': /[()]/g,\r\n '[': /[[\\]]/g,\r\n '{': /[{}]/g\r\n },\r\n CS_IDENT = /^(?:(-?[_A-Za-z\\xA0-\\xFF][-\\w\\xA0-\\xFF]*)|\\x01(\\d+)~):/\r\n\r\n function _parseExpr (expr, asText, qstr) {\r\n\r\n if (expr[0] === '=') expr = expr.slice(1)\r\n\r\n expr = expr\r\n .replace(RE_QBLOCK, function (s, div) {\r\n return s.length > 2 && !div ? '\\x01' + (qstr.push(s) - 1) + '~' : s\r\n })\r\n .replace(/\\s+/g, ' ').trim()\r\n .replace(/\\ ?([[\\({},?\\.:])\\ ?/g, '$1')\r\n\r\n if (expr) {\r\n var\r\n list = [],\r\n cnt = 0,\r\n match\r\n\r\n while (expr &&\r\n (match = expr.match(CS_IDENT)) &&\r\n !match.index\r\n ) {\r\n var\r\n key,\r\n jsb,\r\n re = /,|([[{(])|$/g\r\n\r\n expr = RegExp.rightContext\r\n key = match[2] ? qstr[match[2]].slice(1, -1).trim().replace(/\\s+/g, ' ') : match[1]\r\n\r\n while (jsb = (match = re.exec(expr))[1]) skipBraces(jsb, re)\r\n\r\n jsb = expr.slice(0, match.index)\r\n expr = RegExp.rightContext\r\n\r\n list[cnt++] = _wrapExpr(jsb, 1, key)\r\n }\r\n\r\n expr = !cnt ? _wrapExpr(expr, asText) :\r\n cnt > 1 ? '[' + list.join(',') + '].join(\" \").trim()' : list[0]\r\n }\r\n return expr\r\n\r\n function skipBraces (ch, re) {\r\n var\r\n mm,\r\n lv = 1,\r\n ir = RE_BREND[ch]\r\n\r\n ir.lastIndex = re.lastIndex\r\n while (mm = ir.exec(expr)) {\r\n if (mm[0] === ch) ++lv\r\n else if (!--lv) break\r\n }\r\n re.lastIndex = lv ? expr.length : ir.lastIndex\r\n }\r\n }\r\n\r\n // istanbul ignore next: not both\r\n var\r\n JS_CONTEXT = '\"in this?this:' + (typeof window !== 'object' ? 'global' : 'window') + ').',\r\n JS_VARNAME = /[,{][$\\w]+:|(^ *|[^$\\w\\.])(?!(?:typeof|true|false|null|undefined|in|instanceof|is(?:Finite|NaN)|void|NaN|new|Date|RegExp|Math)(?![$\\w]))([$_A-Za-z][$\\w]*)/g,\r\n JS_NOPROPS = /^(?=(\\.[$\\w]+))\\1(?:[^.[(]|$)/\r\n\r\n function _wrapExpr (expr, asText, key) {\r\n var tb\r\n\r\n expr = expr.replace(JS_VARNAME, function (match, p, mvar, pos, s) {\r\n if (mvar) {\r\n pos = tb ? 0 : pos + match.length\r\n\r\n if (mvar !== 'this' && mvar !== 'global' && mvar !== 'window') {\r\n match = p + '(\"' + mvar + JS_CONTEXT + mvar\r\n if (pos) tb = (s = s[pos]) === '.' || s === '(' || s === '['\r\n } else if (pos) {\r\n tb = !JS_NOPROPS.test(s.slice(pos))\r\n }\r\n }\r\n return match\r\n })\r\n\r\n if (tb) {\r\n expr = 'try{return ' + expr + '}catch(e){E(e,this)}'\r\n }\r\n\r\n if (key) {\r\n\r\n expr = (tb ?\r\n 'function(){' + expr + '}.call(this)' : '(' + expr + ')'\r\n ) + '?\"' + key + '\":\"\"'\r\n\r\n } else if (asText) {\r\n\r\n expr = 'function(v){' + (tb ?\r\n expr.replace('return ', 'v=') : 'v=(' + expr + ')'\r\n ) + ';return v||v===0?v:\"\"}.call(this)'\r\n }\r\n\r\n return expr\r\n }\r\n\r\n // istanbul ignore next: compatibility fix for beta versions\r\n _tmpl.parse = function (s) { return s }\r\n\r\n _tmpl.version = brackets.version = 'v2.3.21'\r\n\r\n return _tmpl\r\n\r\n})()\r\n\r\n/*\r\n lib/browser/tag/mkdom.js\r\n\r\n Includes hacks needed for the Internet Explorer version 9 and below\r\n See: http://kangax.github.io/compat-table/es5/#ie8\r\n http://codeplanet.io/dropping-ie8/\r\n*/\r\nvar mkdom = (function _mkdom() {\r\n var\r\n reHasYield = /<yield\\b/i,\r\n reYieldAll = /<yield\\s*(?:\\/>|>([\\S\\s]*?)<\\/yield\\s*>)/ig,\r\n reYieldSrc = /<yield\\s+to=['\"]([^'\">]*)['\"]\\s*>([\\S\\s]*?)<\\/yield\\s*>/ig,\r\n reYieldDest = /<yield\\s+from=['\"]?([-\\w]+)['\"]?\\s*(?:\\/>|>([\\S\\s]*?)<\\/yield\\s*>)/ig\r\n var\r\n rootEls = { tr: 'tbody', th: 'tr', td: 'tr', col: 'colgroup' },\r\n tblTags = IE_VERSION && IE_VERSION < 10\r\n ? SPECIAL_TAGS_REGEX : /^(?:t(?:body|head|foot|[rhd])|caption|col(?:group)?)$/\r\n\r\n /**\r\n * Creates a DOM element to wrap the given content. Normally an `DIV`, but can be\r\n * also a `TABLE`, `SELECT`, `TBODY`, `TR`, or `COLGROUP` element.\r\n *\r\n * @param {string} templ - The template coming from the custom tag definition\r\n * @param {string} [html] - HTML content that comes from the DOM element where you\r\n * will mount the tag, mostly the original tag in the page\r\n * @returns {HTMLElement} DOM element with _templ_ merged through `YIELD` with the _html_.\r\n */\r\n function _mkdom(templ, html) {\r\n var\r\n match = templ && templ.match(/^\\s*<([-\\w]+)/),\r\n tagName = match && match[1].toLowerCase(),\r\n el = mkEl('div')\r\n\r\n // replace all the yield tags with the tag inner html\r\n templ = replaceYield(templ, html)\r\n\r\n /* istanbul ignore next */\r\n if (tblTags.test(tagName))\r\n el = specialTags(el, templ, tagName)\r\n else\r\n el.innerHTML = templ\r\n\r\n el.stub = true\r\n\r\n return el\r\n }\r\n\r\n /*\r\n Creates the root element for table or select child elements:\r\n tr/th/td/thead/tfoot/tbody/caption/col/colgroup/option/optgroup\r\n */\r\n function specialTags(el, templ, tagName) {\r\n var\r\n select = tagName[0] === 'o',\r\n parent = select ? 'select>' : 'table>'\r\n\r\n // trim() is important here, this ensures we don't have artifacts,\r\n // so we can check if we have only one element inside the parent\r\n el.innerHTML = '<' + parent + templ.trim() + '</' + parent\r\n parent = el.firstChild\r\n\r\n // returns the immediate parent if tr/th/td/col is the only element, if not\r\n // returns the whole tree, as this can include additional elements\r\n if (select) {\r\n parent.selectedIndex = -1 // for IE9, compatible w/current riot behavior\r\n } else {\r\n // avoids insertion of cointainer inside container (ex: tbody inside tbody)\r\n var tname = rootEls[tagName]\r\n if (tname && parent.childElementCount === 1) parent = $(tname, parent)\r\n }\r\n return parent\r\n }\r\n\r\n /*\r\n Replace the yield tag from any tag template with the innerHTML of the\r\n original tag in the page\r\n */\r\n function replaceYield(templ, html) {\r\n // do nothing if no yield\r\n if (!reHasYield.test(templ)) return templ\r\n\r\n // be careful with #1343 - string on the source having `$1`\r\n var src = {}\r\n\r\n html = html && html.replace(reYieldSrc, function (_, ref, text) {\r\n src[ref] = src[ref] || text // preserve first definition\r\n return ''\r\n }).trim()\r\n\r\n return templ\r\n .replace(reYieldDest, function (_, ref, def) { // yield with from - to attrs\r\n return src[ref] || def || ''\r\n })\r\n .replace(reYieldAll, function (_, def) { // yield without any \"from\"\r\n return html || def || ''\r\n })\r\n }\r\n\r\n return _mkdom\r\n\r\n})()\r\n\r\n/**\r\n * Convert the item looped into an object used to extend the child tag properties\r\n * @param { Object } expr - object containing the keys used to extend the children tags\r\n * @param { * } key - value to assign to the new object returned\r\n * @param { * } val - value containing the position of the item in the array\r\n * @returns { Object } - new object containing the values of the original item\r\n *\r\n * The variables 'key' and 'val' are arbitrary.\r\n * They depend on the collection type looped (Array, Object)\r\n * and on the expression used on the each tag\r\n *\r\n */\r\nfunction mkitem(expr, key, val) {\r\n var item = {}\r\n item[expr.key] = key\r\n if (expr.pos) item[expr.pos] = val\r\n return item\r\n}\r\n\r\n/**\r\n * Unmount the redundant tags\r\n * @param { Array } items - array containing the current items to loop\r\n * @param { Array } tags - array containing all the children tags\r\n */\r\nfunction unmountRedundant(items, tags) {\r\n\r\n var i = tags.length,\r\n j = items.length,\r\n t\r\n\r\n while (i > j) {\r\n t = tags[--i]\r\n tags.splice(i, 1)\r\n t.unmount()\r\n }\r\n}\r\n\r\n/**\r\n * Move the nested custom tags in non custom loop tags\r\n * @param { Object } child - non custom loop tag\r\n * @param { Number } i - current position of the loop tag\r\n */\r\nfunction moveNestedTags(child, i) {\r\n Object.keys(child.tags).forEach(function(tagName) {\r\n var tag = child.tags[tagName]\r\n if (isArray(tag))\r\n each(tag, function (t) {\r\n moveChildTag(t, tagName, i)\r\n })\r\n else\r\n moveChildTag(tag, tagName, i)\r\n })\r\n}\r\n\r\n/**\r\n * Adds the elements for a virtual tag\r\n * @param { Tag } tag - the tag whose root's children will be inserted or appended\r\n * @param { Node } src - the node that will do the inserting or appending\r\n * @param { Tag } target - only if inserting, insert before this tag's first child\r\n */\r\nfunction addVirtual(tag, src, target) {\r\n var el = tag._root, sib\r\n tag._virts = []\r\n while (el) {\r\n sib = el.nextSibling\r\n if (target)\r\n src.insertBefore(el, target._root)\r\n else\r\n src.appendChild(el)\r\n\r\n tag._virts.push(el) // hold for unmounting\r\n el = sib\r\n }\r\n}\r\n\r\n/**\r\n * Move virtual tag and all child nodes\r\n * @param { Tag } tag - first child reference used to start move\r\n * @param { Node } src - the node that will do the inserting\r\n * @param { Tag } target - insert before this tag's first child\r\n * @param { Number } len - how many child nodes to move\r\n */\r\nfunction moveVirtual(tag, src, target, len) {\r\n var el = tag._root, sib, i = 0\r\n for (; i < len; i++) {\r\n sib = el.nextSibling\r\n src.insertBefore(el, target._root)\r\n el = sib\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Manage tags having the 'each'\r\n * @param { Object } dom - DOM node we need to loop\r\n * @param { Tag } parent - parent tag instance where the dom node is contained\r\n * @param { String } expr - string contained in the 'each' attribute\r\n */\r\nfunction _each(dom, parent, expr) {\r\n\r\n // remove the each property from the original tag\r\n remAttr(dom, 'each')\r\n\r\n var mustReorder = typeof getAttr(dom, 'no-reorder') !== T_STRING || remAttr(dom, 'no-reorder'),\r\n tagName = getTagName(dom),\r\n impl = __tagImpl[tagName] || { tmpl: dom.outerHTML },\r\n useRoot = SPECIAL_TAGS_REGEX.test(tagName),\r\n root = dom.parentNode,\r\n ref = document.createTextNode(''),\r\n child = getTag(dom),\r\n isOption = tagName.toLowerCase() === 'option', // the option tags must be treated differently\r\n tags = [],\r\n oldItems = [],\r\n hasKeys,\r\n isVirtual = dom.tagName == 'VIRTUAL'\r\n\r\n // parse the each expression\r\n expr = tmpl.loopKeys(expr)\r\n\r\n // insert a marked where the loop tags will be injected\r\n root.insertBefore(ref, dom)\r\n\r\n // clean template code\r\n parent.one('before-mount', function () {\r\n\r\n // remove the original DOM node\r\n dom.parentNode.removeChild(dom)\r\n if (root.stub) root = parent.root\r\n\r\n }).on('update', function () {\r\n // get the new items collection\r\n var items = tmpl(expr.val, parent),\r\n // create a fragment to hold the new DOM nodes to inject in the parent tag\r\n frag = document.createDocumentFragment()\r\n\r\n // object loop. any changes cause full redraw\r\n if (!isArray(items)) {\r\n hasKeys = items || false\r\n items = hasKeys ?\r\n Object.keys(items).map(function (key) {\r\n return mkitem(expr, key, items[key])\r\n }) : []\r\n }\r\n\r\n // loop all the new items\r\n var i = 0,\r\n itemsLength = items.length\r\n\r\n for (; i < itemsLength; i++) {\r\n // reorder only if the items are objects\r\n var\r\n item = items[i],\r\n _mustReorder = mustReorder && item instanceof Object && !hasKeys,\r\n oldPos = oldItems.indexOf(item),\r\n pos = ~oldPos && _mustReorder ? oldPos : i,\r\n // does a tag exist in this position?\r\n tag = tags[pos]\r\n\r\n item = !hasKeys && expr.key ? mkitem(expr, item, i) : item\r\n\r\n // new tag\r\n if (\r\n !_mustReorder && !tag // with no-reorder we just update the old tags\r\n ||\r\n _mustReorder && !~oldPos || !tag // by default we always try to reorder the DOM elements\r\n ) {\r\n\r\n tag = new Tag(impl, {\r\n parent: parent,\r\n isLoop: true,\r\n hasImpl: !!__tagImpl[tagName],\r\n root: useRoot ? root : dom.cloneNode(),\r\n item: item\r\n }, dom.innerHTML)\r\n\r\n tag.mount()\r\n\r\n if (isVirtual) tag._root = tag.root.firstChild // save reference for further moves or inserts\r\n // this tag must be appended\r\n if (i == tags.length || !tags[i]) { // fix 1581\r\n if (isVirtual)\r\n addVirtual(tag, frag)\r\n else frag.appendChild(tag.root)\r\n }\r\n // this tag must be insert\r\n else {\r\n if (isVirtual)\r\n addVirtual(tag, root, tags[i])\r\n else root.insertBefore(tag.root, tags[i].root) // #1374 some browsers reset selected here\r\n oldItems.splice(i, 0, item)\r\n }\r\n\r\n tags.splice(i, 0, tag)\r\n pos = i // handled here so no move\r\n } else tag.update(item, true)\r\n\r\n // reorder the tag if it's not located in its previous position\r\n if (\r\n pos !== i && _mustReorder &&\r\n tags[i] // fix 1581 unable to reproduce it in a test!\r\n ) {\r\n // update the DOM\r\n if (isVirtual)\r\n moveVirtual(tag, root, tags[i], dom.childNodes.length)\r\n else root.insertBefore(tag.root, tags[i].root)\r\n // update the position attribute if it exists\r\n if (expr.pos)\r\n tag[expr.pos] = i\r\n // move the old tag instance\r\n tags.splice(i, 0, tags.splice(pos, 1)[0])\r\n // move the old item\r\n oldItems.splice(i, 0, oldItems.splice(pos, 1)[0])\r\n // if the loop tags are not custom\r\n // we need to move all their custom tags into the right position\r\n if (!child && tag.tags) moveNestedTags(tag, i)\r\n }\r\n\r\n // cache the original item to use it in the events bound to this node\r\n // and its children\r\n tag._item = item\r\n // cache the real parent tag internally\r\n defineProperty(tag, '_parent', parent)\r\n }\r\n\r\n // remove the redundant tags\r\n unmountRedundant(items, tags)\r\n\r\n // insert the new nodes\r\n if (isOption) {\r\n root.appendChild(frag)\r\n\r\n // #1374 <select> <option selected={true}> </select>\r\n if (root.length) {\r\n var si, op = root.options\r\n\r\n root.selectedIndex = si = -1\r\n for (i = 0; i < op.length; i++) {\r\n if (op[i].selected = op[i].__selected) {\r\n if (si < 0) root.selectedIndex = si = i\r\n }\r\n }\r\n }\r\n }\r\n else root.insertBefore(frag, ref)\r\n\r\n // set the 'tags' property of the parent tag\r\n // if child is 'undefined' it means that we don't need to set this property\r\n // for example:\r\n // we don't need store the `myTag.tags['div']` property if we are looping a div tag\r\n // but we need to track the `myTag.tags['child']` property looping a custom child node named `child`\r\n if (child) parent.tags[tagName] = tags\r\n\r\n // clone the items array\r\n oldItems = items.slice()\r\n\r\n })\r\n\r\n}\r\n/**\r\n * Object that will be used to inject and manage the css of every tag instance\r\n */\r\nvar styleManager = (function(_riot) {\r\n\r\n if (!window) return { // skip injection on the server\r\n add: function () {},\r\n inject: function () {}\r\n }\r\n\r\n var styleNode = (function () {\r\n // create a new style element with the correct type\r\n var newNode = mkEl('style')\r\n setAttr(newNode, 'type', 'text/css')\r\n\r\n // replace any user node or insert the new one into the head\r\n var userNode = $('style[type=riot]')\r\n if (userNode) {\r\n if (userNode.id) newNode.id = userNode.id\r\n userNode.parentNode.replaceChild(newNode, userNode)\r\n }\r\n else document.getElementsByTagName('head')[0].appendChild(newNode)\r\n\r\n return newNode\r\n })()\r\n\r\n // Create cache and shortcut to the correct property\r\n var cssTextProp = styleNode.styleSheet,\r\n stylesToInject = ''\r\n\r\n // Expose the style node in a non-modificable property\r\n Object.defineProperty(_riot, 'styleNode', {\r\n value: styleNode,\r\n writable: true\r\n })\r\n\r\n /**\r\n * Public api\r\n */\r\n return {\r\n /**\r\n * Save a tag style to be later injected into DOM\r\n * @param { String } css [description]\r\n */\r\n add: function(css) {\r\n stylesToInject += css\r\n },\r\n /**\r\n * Inject all previously saved tag styles into DOM\r\n * innerHTML seems slow: http://jsperf.com/riot-insert-style\r\n */\r\n inject: function() {\r\n if (stylesToInject) {\r\n if (cssTextProp) cssTextProp.cssText += stylesToInject\r\n else styleNode.innerHTML += stylesToInject\r\n stylesToInject = ''\r\n }\r\n }\r\n }\r\n\r\n})(riot)\r\n\r\n\r\nfunction parseNamedElements(root, tag, childTags, forceParsingNamed) {\r\n\r\n walk(root, function(dom) {\r\n if (dom.nodeType == 1) {\r\n dom.isLoop = dom.isLoop ||\r\n (dom.parentNode && dom.parentNode.isLoop || getAttr(dom, 'each'))\r\n ? 1 : 0\r\n\r\n // custom child tag\r\n if (childTags) {\r\n var child = getTag(dom)\r\n\r\n if (child && !dom.isLoop)\r\n childTags.push(initChildTag(child, {root: dom, parent: tag}, dom.innerHTML, tag))\r\n }\r\n\r\n if (!dom.isLoop || forceParsingNamed)\r\n setNamed(dom, tag, [])\r\n }\r\n\r\n })\r\n\r\n}\r\n\r\nfunction parseExpressions(root, tag, expressions) {\r\n\r\n function addExpr(dom, val, extra) {\r\n if (tmpl.hasExpr(val)) {\r\n expressions.push(extend({ dom: dom, expr: val }, extra))\r\n }\r\n }\r\n\r\n walk(root, function(dom) {\r\n var type = dom.nodeType,\r\n attr\r\n\r\n // text node\r\n if (type == 3 && dom.parentNode.tagName != 'STYLE') addExpr(dom, dom.nodeValue)\r\n if (type != 1) return\r\n\r\n /* element */\r\n\r\n // loop\r\n attr = getAttr(dom, 'each')\r\n\r\n if (attr) { _each(dom, tag, attr); return false }\r\n\r\n // attribute expressions\r\n each(dom.attributes, function(attr) {\r\n var name = attr.name,\r\n bool = name.split('__')[1]\r\n\r\n addExpr(dom, attr.value, { attr: bool || name, bool: bool })\r\n if (bool) { remAttr(dom, name); return false }\r\n\r\n })\r\n\r\n // skip custom tags\r\n if (getTag(dom)) return false\r\n\r\n })\r\n\r\n}\r\nfunction Tag(impl, conf, innerHTML) {\r\n\r\n var self = riot.observable(this),\r\n opts = inherit(conf.opts) || {},\r\n parent = conf.parent,\r\n isLoop = conf.isLoop,\r\n hasImpl = conf.hasImpl,\r\n item = cleanUpData(conf.item),\r\n expressions = [],\r\n childTags = [],\r\n root = conf.root,\r\n tagName = root.tagName.toLowerCase(),\r\n attr = {},\r\n implAttr = {},\r\n propsInSyncWithParent = [],\r\n dom\r\n\r\n // only call unmount if we have a valid __tagImpl (has name property)\r\n if (impl.name && root._tag) root._tag.unmount(true)\r\n\r\n // not yet mounted\r\n this.isMounted = false\r\n root.isLoop = isLoop\r\n\r\n // keep a reference to the tag just created\r\n // so we will be able to mount this tag multiple times\r\n root._tag = this\r\n\r\n // create a unique id to this tag\r\n // it could be handy to use it also to improve the virtual dom rendering speed\r\n defineProperty(this, '_riot_id', ++__uid) // base 1 allows test !t._riot_id\r\n\r\n extend(this, { parent: parent, root: root, opts: opts, tags: {} }, item)\r\n\r\n // grab attributes\r\n each(root.attributes, function(el) {\r\n var val = el.value\r\n // remember attributes with expressions only\r\n if (tmpl.hasExpr(val)) attr[el.name] = val\r\n })\r\n\r\n dom = mkdom(impl.tmpl, innerHTML)\r\n\r\n // options\r\n function updateOpts() {\r\n var ctx = hasImpl && isLoop ? self : parent || self\r\n\r\n // update opts from current DOM attributes\r\n each(root.attributes, function(el) {\r\n var val = el.value\r\n opts[toCamel(el.name)] = tmpl.hasExpr(val) ? tmpl(val, ctx) : val\r\n })\r\n // recover those with expressions\r\n each(Object.keys(attr), function(name) {\r\n opts[toCamel(name)] = tmpl(attr[name], ctx)\r\n })\r\n }\r\n\r\n function normalizeData(data) {\r\n for (var key in item) {\r\n if (typeof self[key] !== T_UNDEF && isWritable(self, key))\r\n self[key] = data[key]\r\n }\r\n }\r\n\r\n function inheritFromParent () {\r\n if (!self.parent || !isLoop) return\r\n each(Object.keys(self.parent), function(k) {\r\n // some properties must be always in sync with the parent tag\r\n var mustSync = !contains(RESERVED_WORDS_BLACKLIST, k) && contains(propsInSyncWithParent, k)\r\n if (typeof self[k] === T_UNDEF || mustSync) {\r\n // track the property to keep in sync\r\n // so we can keep it updated\r\n if (!mustSync) propsInSyncWithParent.push(k)\r\n self[k] = self.parent[k]\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Update the tag expressions and options\r\n * @param { * } data - data we want to use to extend the tag properties\r\n * @param { Boolean } isInherited - is this update coming from a parent tag?\r\n * @returns { self }\r\n */\r\n defineProperty(this, 'update', function(data, isInherited) {\r\n\r\n // make sure the data passed will not override\r\n // the component core methods\r\n data = cleanUpData(data)\r\n // inherit properties from the parent\r\n inheritFromParent()\r\n // normalize the tag properties in case an item object was initially passed\r\n if (data && isObject(item)) {\r\n normalizeData(data)\r\n item = data\r\n }\r\n extend(self, data)\r\n updateOpts()\r\n self.trigger('update', data)\r\n update(expressions, self)\r\n\r\n // the updated event will be triggered\r\n // once the DOM will be ready and all the re-flows are completed\r\n // this is useful if you want to get the \"real\" root properties\r\n // 4 ex: root.offsetWidth ...\r\n if (isInherited && self.parent)\r\n // closes #1599\r\n self.parent.one('updated', function() { self.trigger('updated') })\r\n else rAF(function() { self.trigger('updated') })\r\n\r\n return this\r\n })\r\n\r\n defineProperty(this, 'mixin', function() {\r\n each(arguments, function(mix) {\r\n var instance\r\n\r\n mix = typeof mix === T_STRING ? riot.mixin(mix) : mix\r\n\r\n // check if the mixin is a function\r\n if (isFunction(mix)) {\r\n // create the new mixin instance\r\n instance = new mix()\r\n // save the prototype to loop it afterwards\r\n mix = mix.prototype\r\n } else instance = mix\r\n\r\n // loop the keys in the function prototype or the all object keys\r\n each(Object.getOwnPropertyNames(mix), function(key) {\r\n // bind methods to self\r\n if (key != 'init')\r\n self[key] = isFunction(instance[key]) ?\r\n instance[key].bind(self) :\r\n instance[key]\r\n })\r\n\r\n // init method will be called automatically\r\n if (instance.init) instance.init.bind(self)()\r\n })\r\n return this\r\n })\r\n\r\n defineProperty(this, 'mount', function() {\r\n\r\n updateOpts()\r\n\r\n // add global mixin\r\n var globalMixin = riot.mixin(GLOBAL_MIXIN)\r\n if (globalMixin) self.mixin(globalMixin)\r\n\r\n // initialiation\r\n if (impl.fn) impl.fn.call(self, opts)\r\n\r\n // parse layout after init. fn may calculate args for nested custom tags\r\n parseExpressions(dom, self, expressions)\r\n\r\n // mount the child tags\r\n toggle(true)\r\n\r\n // update the root adding custom attributes coming from the compiler\r\n // it fixes also #1087\r\n if (impl.attrs)\r\n walkAttributes(impl.attrs, function (k, v) { setAttr(root, k, v) })\r\n if (impl.attrs || hasImpl)\r\n parseExpressions(self.root, self, expressions)\r\n\r\n if (!self.parent || isLoop) self.update(item)\r\n\r\n // internal use only, fixes #403\r\n self.trigger('before-mount')\r\n\r\n if (isLoop && !hasImpl) {\r\n // update the root attribute for the looped elements\r\n root = dom.firstChild\r\n } else {\r\n while (dom.firstChild) root.appendChild(dom.firstChild)\r\n if (root.stub) root = parent.root\r\n }\r\n\r\n defineProperty(self, 'root', root)\r\n\r\n // parse the named dom nodes in the looped child\r\n // adding them to the parent as well\r\n if (isLoop)\r\n parseNamedElements(self.root, self.parent, null, true)\r\n\r\n // if it's not a child tag we can trigger its mount event\r\n if (!self.parent || self.parent.isMounted) {\r\n self.isMounted = true\r\n self.trigger('mount')\r\n }\r\n // otherwise we need to wait that the parent event gets triggered\r\n else self.parent.one('mount', function() {\r\n // avoid to trigger the `mount` event for the tags\r\n // not visible included in an if statement\r\n if (!isInStub(self.root)) {\r\n self.parent.isMounted = self.isMounted = true\r\n self.trigger('mount')\r\n }\r\n })\r\n })\r\n\r\n\r\n defineProperty(this, 'unmount', function(keepRootTag) {\r\n var el = root,\r\n p = el.parentNode,\r\n ptag,\r\n tagIndex = __virtualDom.indexOf(self)\r\n\r\n self.trigger('before-unmount')\r\n\r\n // remove this tag instance from the global virtualDom variable\r\n if (~tagIndex)\r\n __virtualDom.splice(tagIndex, 1)\r\n\r\n if (this._virts) {\r\n each(this._virts, function(v) {\r\n if (v.parentNode) v.parentNode.removeChild(v)\r\n })\r\n }\r\n\r\n if (p) {\r\n\r\n if (parent) {\r\n ptag = getImmediateCustomParentTag(parent)\r\n // remove this tag from the parent tags object\r\n // if there are multiple nested tags with same name..\r\n // remove this element form the array\r\n if (isArray(ptag.tags[tagName]))\r\n each(ptag.tags[tagName], function(tag, i) {\r\n if (tag._riot_id == self._riot_id)\r\n ptag.tags[tagName].splice(i, 1)\r\n })\r\n else\r\n // otherwise just delete the tag instance\r\n ptag.tags[tagName] = undefined\r\n }\r\n\r\n else\r\n while (el.firstChild) el.removeChild(el.firstChild)\r\n\r\n if (!keepRootTag)\r\n p.removeChild(el)\r\n else\r\n // the riot-tag attribute isn't needed anymore, remove it\r\n remAttr(p, 'riot-tag')\r\n }\r\n\r\n\r\n self.trigger('unmount')\r\n toggle()\r\n self.off('*')\r\n self.isMounted = false\r\n delete root._tag\r\n\r\n })\r\n\r\n // proxy function to bind updates\r\n // dispatched from a parent tag\r\n function onChildUpdate(data) { self.update(data, true) }\r\n\r\n function toggle(isMount) {\r\n\r\n // mount/unmount children\r\n each(childTags, function(child) { child[isMount ? 'mount' : 'unmount']() })\r\n\r\n // listen/unlisten parent (events flow one way from parent to children)\r\n if (!parent) return\r\n var evt = isMount ? 'on' : 'off'\r\n\r\n // the loop tags will be always in sync with the parent automatically\r\n if (isLoop)\r\n parent[evt]('unmount', self.unmount)\r\n else {\r\n parent[evt]('update', onChildUpdate)[evt]('unmount', self.unmount)\r\n }\r\n }\r\n\r\n\r\n // named elements available for fn\r\n parseNamedElements(dom, this, childTags)\r\n\r\n}\r\n/**\r\n * Attach an event to a DOM node\r\n * @param { String } name - event name\r\n * @param { Function } handler - event callback\r\n * @param { Object } dom - dom node\r\n * @param { Tag } tag - tag instance\r\n */\r\nfunction setEventHandler(name, handler, dom, tag) {\r\n\r\n dom[name] = function(e) {\r\n\r\n var ptag = tag._parent,\r\n item = tag._item,\r\n el\r\n\r\n if (!item)\r\n while (ptag && !item) {\r\n item = ptag._item\r\n ptag = ptag._parent\r\n }\r\n\r\n // cross browser event fix\r\n e = e || window.event\r\n\r\n // override the event properties\r\n if (isWritable(e, 'currentTarget')) e.currentTarget = dom\r\n if (isWritable(e, 'target')) e.target = e.srcElement\r\n if (isWritable(e, 'which')) e.which = e.charCode || e.keyCode\r\n\r\n e.item = item\r\n\r\n // prevent default behaviour (by default)\r\n if (handler.call(tag, e) !== true && !/radio|check/.test(dom.type)) {\r\n if (e.preventDefault) e.preventDefault()\r\n e.returnValue = false\r\n }\r\n\r\n if (!e.preventUpdate) {\r\n el = item ? getImmediateCustomParentTag(ptag) : tag\r\n el.update()\r\n }\r\n\r\n }\r\n\r\n}\r\n\r\n\r\n/**\r\n * Insert a DOM node replacing another one (used by if- attribute)\r\n * @param { Object } root - parent node\r\n * @param { Object } node - node replaced\r\n * @param { Object } before - node added\r\n */\r\nfunction insertTo(root, node, before) {\r\n if (!root) return\r\n root.insertBefore(before, node)\r\n root.removeChild(node)\r\n}\r\n\r\n/**\r\n * Update the expressions in a Tag instance\r\n * @param { Array } expressions - expression that must be re evaluated\r\n * @param { Tag } tag - tag instance\r\n */\r\nfunction update(expressions, tag) {\r\n\r\n each(expressions, function(expr, i) {\r\n\r\n var dom = expr.dom,\r\n attrName = expr.attr,\r\n value = tmpl(expr.expr, tag),\r\n parent = expr.dom.parentNode\r\n\r\n if (expr.bool) {\r\n value = !!value\r\n if (attrName === 'selected') dom.__selected = value // #1374\r\n }\r\n else if (value == null)\r\n value = ''\r\n\r\n // #1638: regression of #1612, update the dom only if the value of the\r\n // expression was changed\r\n if (expr.value === value) {\r\n return\r\n }\r\n expr.value = value\r\n\r\n // textarea and text nodes has no attribute name\r\n if (!attrName) {\r\n // about #815 w/o replace: the browser converts the value to a string,\r\n // the comparison by \"==\" does too, but not in the server\r\n value += ''\r\n // test for parent avoids error with invalid assignment to nodeValue\r\n if (parent) {\r\n if (parent.tagName === 'TEXTAREA') {\r\n parent.value = value // #1113\r\n if (!IE_VERSION) dom.nodeValue = value // #1625 IE throws here, nodeValue\r\n } // will be available on 'updated'\r\n else dom.nodeValue = value\r\n }\r\n return\r\n }\r\n\r\n // ~~#1612: look for changes in dom.value when updating the value~~\r\n if (attrName === 'value') {\r\n dom.value = value\r\n return\r\n }\r\n\r\n // remove original attribute\r\n remAttr(dom, attrName)\r\n\r\n // event handler\r\n if (isFunction(value)) {\r\n setEventHandler(attrName, value, dom, tag)\r\n\r\n // if- conditional\r\n } else if (attrName == 'if') {\r\n var stub = expr.stub,\r\n add = function() { insertTo(stub.parentNode, stub, dom) },\r\n remove = function() { insertTo(dom.parentNode, dom, stub) }\r\n\r\n // add to DOM\r\n if (value) {\r\n if (stub) {\r\n add()\r\n dom.inStub = false\r\n // avoid to trigger the mount event if the tags is not visible yet\r\n // maybe we can optimize this avoiding to mount the tag at all\r\n if (!isInStub(dom)) {\r\n walk(dom, function(el) {\r\n if (el._tag && !el._tag.isMounted)\r\n el._tag.isMounted = !!el._tag.trigger('mount')\r\n })\r\n }\r\n }\r\n // remove from DOM\r\n } else {\r\n stub = expr.stub = stub || document.createTextNode('')\r\n // if the parentNode is defined we can easily replace the tag\r\n if (dom.parentNode)\r\n remove()\r\n // otherwise we need to wait the updated event\r\n else (tag.parent || tag).one('updated', remove)\r\n\r\n dom.inStub = true\r\n }\r\n // show / hide\r\n } else if (attrName === 'show') {\r\n dom.style.display = value ? '' : 'none'\r\n\r\n } else if (attrName === 'hide') {\r\n dom.style.display = value ? 'none' : ''\r\n\r\n } else if (expr.bool) {\r\n dom[attrName] = value\r\n if (value) setAttr(dom, attrName, attrName)\r\n\r\n } else if (value === 0 || value && typeof value !== T_OBJECT) {\r\n // <img src=\"{ expr }\">\r\n if (startsWith(attrName, RIOT_PREFIX) && attrName != RIOT_TAG) {\r\n attrName = attrName.slice(RIOT_PREFIX.length)\r\n }\r\n setAttr(dom, attrName, value)\r\n }\r\n\r\n })\r\n\r\n}\r\n/**\r\n * Specialized function for looping an array-like collection with `each={}`\r\n * @param { Array } els - collection of items\r\n * @param {Function} fn - callback function\r\n * @returns { Array } the array looped\r\n */\r\nfunction each(els, fn) {\r\n var len = els ? els.length : 0\r\n\r\n for (var i = 0, el; i < len; i++) {\r\n el = els[i]\r\n // return false -> current item was removed by fn during the loop\r\n if (el != null && fn(el, i) === false) i--\r\n }\r\n return els\r\n}\r\n\r\n/**\r\n * Detect if the argument passed is a function\r\n * @param { * } v - whatever you want to pass to this function\r\n * @returns { Boolean } -\r\n */\r\nfunction isFunction(v) {\r\n return typeof v === T_FUNCTION || false // avoid IE problems\r\n}\r\n\r\n/**\r\n * Detect if the argument passed is an object, exclude null.\r\n * NOTE: Use isObject(x) && !isArray(x) to excludes arrays.\r\n * @param { * } v - whatever you want to pass to this function\r\n * @returns { Boolean } -\r\n */\r\nfunction isObject(v) {\r\n return v && typeof v === T_OBJECT // typeof null is 'object'\r\n}\r\n\r\n/**\r\n * Remove any DOM attribute from a node\r\n * @param { Object } dom - DOM node we want to update\r\n * @param { String } name - name of the property we want to remove\r\n */\r\nfunction remAttr(dom, name) {\r\n dom.removeAttribute(name)\r\n}\r\n\r\n/**\r\n * Convert a string containing dashes to camel case\r\n * @param { String } string - input string\r\n * @returns { String } my-string -> myString\r\n */\r\nfunction toCamel(string) {\r\n return string.replace(/-(\\w)/g, function(_, c) {\r\n return c.toUpperCase()\r\n })\r\n}\r\n\r\n/**\r\n * Get the value of any DOM attribute on a node\r\n * @param { Object } dom - DOM node we want to parse\r\n * @param { String } name - name of the attribute we want to get\r\n * @returns { String | undefined } name of the node attribute whether it exists\r\n */\r\nfunction getAttr(dom, name) {\r\n return dom.getAttribute(name)\r\n}\r\n\r\n/**\r\n * Set any DOM attribute\r\n * @param { Object } dom - DOM node we want to update\r\n * @param { String } name - name of the property we want to set\r\n * @param { String } val - value of the property we want to set\r\n */\r\nfunction setAttr(dom, name, val) {\r\n dom.setAttribute(name, val)\r\n}\r\n\r\n/**\r\n * Detect the tag implementation by a DOM node\r\n * @param { Object } dom - DOM node we need to parse to get its tag implementation\r\n * @returns { Object } it returns an object containing the implementation of a custom tag (template and boot function)\r\n */\r\nfunction getTag(dom) {\r\n return dom.tagName && __tagImpl[getAttr(dom, RIOT_TAG_IS) ||\r\n getAttr(dom, RIOT_TAG) || dom.tagName.toLowerCase()]\r\n}\r\n/**\r\n * Add a child tag to its parent into the `tags` object\r\n * @param { Object } tag - child tag instance\r\n * @param { String } tagName - key where the new tag will be stored\r\n * @param { Object } parent - tag instance where the new child tag will be included\r\n */\r\nfunction addChildTag(tag, tagName, parent) {\r\n var cachedTag = parent.tags[tagName]\r\n\r\n // if there are multiple children tags having the same name\r\n if (cachedTag) {\r\n // if the parent tags property is not yet an array\r\n // create it adding the first cached tag\r\n if (!isArray(cachedTag))\r\n // don't add the same tag twice\r\n if (cachedTag !== tag)\r\n parent.tags[tagName] = [cachedTag]\r\n // add the new nested tag to the array\r\n if (!contains(parent.tags[tagName], tag))\r\n parent.tags[tagName].push(tag)\r\n } else {\r\n parent.tags[tagName] = tag\r\n }\r\n}\r\n\r\n/**\r\n * Move the position of a custom tag in its parent tag\r\n * @param { Object } tag - child tag instance\r\n * @param { String } tagName - key where the tag was stored\r\n * @param { Number } newPos - index where the new tag will be stored\r\n */\r\nfunction moveChildTag(tag, tagName, newPos) {\r\n var parent = tag.parent,\r\n tags\r\n // no parent no move\r\n if (!parent) return\r\n\r\n tags = parent.tags[tagName]\r\n\r\n if (isArray(tags))\r\n tags.splice(newPos, 0, tags.splice(tags.indexOf(tag), 1)[0])\r\n else addChildTag(tag, tagName, parent)\r\n}\r\n\r\n/**\r\n * Create a new child tag including it correctly into its parent\r\n * @param { Object } child - child tag implementation\r\n * @param { Object } opts - tag options containing the DOM node where the tag will be mounted\r\n * @param { String } innerHTML - inner html of the child node\r\n * @param { Object } parent - instance of the parent tag including the child custom tag\r\n * @returns { Object } instance of the new child tag just created\r\n */\r\nfunction initChildTag(child, opts, innerHTML, parent) {\r\n var tag = new Tag(child, opts, innerHTML),\r\n tagName = getTagName(opts.root),\r\n ptag = getImmediateCustomParentTag(parent)\r\n // fix for the parent attribute in the looped elements\r\n tag.parent = ptag\r\n // store the real parent tag\r\n // in some cases this could be different from the custom parent tag\r\n // for example in nested loops\r\n tag._parent = parent\r\n\r\n // add this tag to the custom parent tag\r\n addChildTag(tag, tagName, ptag)\r\n // and also to the real parent tag\r\n if (ptag !== parent)\r\n addChildTag(tag, tagName, parent)\r\n // empty the child node once we got its template\r\n // to avoid that its children get compiled multiple times\r\n opts.root.innerHTML = ''\r\n\r\n return tag\r\n}\r\n\r\n/**\r\n * Loop backward all the parents tree to detect the first custom parent tag\r\n * @param { Object } tag - a Tag instance\r\n * @returns { Object } the instance of the first custom parent tag found\r\n */\r\nfunction getImmediateCustomParentTag(tag) {\r\n var ptag = tag\r\n while (!getTag(ptag.root)) {\r\n if (!ptag.parent) break\r\n ptag = ptag.parent\r\n }\r\n return ptag\r\n}\r\n\r\n/**\r\n * Helper function to set an immutable property\r\n * @param { Object } el - object where the new property will be set\r\n * @param { String } key - object key where the new property will be stored\r\n * @param { * } value - value of the new property\r\n* @param { Object } options - set the propery overriding the default options\r\n * @returns { Object } - the initial object\r\n */\r\nfunction defineProperty(el, key, value, options) {\r\n Object.defineProperty(el, key, extend({\r\n value: value,\r\n enumerable: false,\r\n writable: false,\r\n configurable: false\r\n }, options))\r\n return el\r\n}\r\n\r\n/**\r\n * Get the tag name of any DOM node\r\n * @param { Object } dom - DOM node we want to parse\r\n * @returns { String } name to identify this dom node in riot\r\n */\r\nfunction getTagName(dom) {\r\n var child = getTag(dom),\r\n namedTag = getAttr(dom, 'name'),\r\n tagName = namedTag && !tmpl.hasExpr(namedTag) ?\r\n namedTag :\r\n child ? child.name : dom.tagName.toLowerCase()\r\n\r\n return tagName\r\n}\r\n\r\n/**\r\n * Extend any object with other properties\r\n * @param { Object } src - source object\r\n * @returns { Object } the resulting extended object\r\n *\r\n * var obj = { foo: 'baz' }\r\n * extend(obj, {bar: 'bar', foo: 'bar'})\r\n * console.log(obj) => {bar: 'bar', foo: 'bar'}\r\n *\r\n */\r\nfunction extend(src) {\r\n var obj, args = arguments\r\n for (var i = 1; i < args.length; ++i) {\r\n if (obj = args[i]) {\r\n for (var key in obj) {\r\n // check if this property of the source object could be overridden\r\n if (isWritable(src, key))\r\n src[key] = obj[key]\r\n }\r\n }\r\n }\r\n return src\r\n}\r\n\r\n/**\r\n * Check whether an array contains an item\r\n * @param { Array } arr - target array\r\n * @param { * } item - item to test\r\n * @returns { Boolean } Does 'arr' contain 'item'?\r\n */\r\nfunction contains(arr, item) {\r\n return ~arr.indexOf(item)\r\n}\r\n\r\n/**\r\n * Check whether an object is a kind of array\r\n * @param { * } a - anything\r\n * @returns {Boolean} is 'a' an array?\r\n */\r\nfunction isArray(a) { return Array.isArray(a) || a instanceof Array }\r\n\r\n/**\r\n * Detect whether a property of an object could be overridden\r\n * @param { Object } obj - source object\r\n * @param { String } key - object property\r\n * @returns { Boolean } is this property writable?\r\n */\r\nfunction isWritable(obj, key) {\r\n var props = Object.getOwnPropertyDescriptor(obj, key)\r\n return typeof obj[key] === T_UNDEF || props && props.writable\r\n}\r\n\r\n\r\n/**\r\n * With this function we avoid that the internal Tag methods get overridden\r\n * @param { Object } data - options we want to use to extend the tag instance\r\n * @returns { Object } clean object without containing the riot internal reserved words\r\n */\r\nfunction cleanUpData(data) {\r\n if (!(data instanceof Tag) && !(data && typeof data.trigger == T_FUNCTION))\r\n return data\r\n\r\n var o = {}\r\n for (var key in data) {\r\n if (!contains(RESERVED_WORDS_BLACKLIST, key))\r\n o[key] = data[key]\r\n }\r\n return o\r\n}\r\n\r\n/**\r\n * Walk down recursively all the children tags starting dom node\r\n * @param { Object } dom - starting node where we will start the recursion\r\n * @param { Function } fn - callback to transform the child node just found\r\n */\r\nfunction walk(dom, fn) {\r\n if (dom) {\r\n // stop the recursion\r\n if (fn(dom) === false) return\r\n else {\r\n dom = dom.firstChild\r\n\r\n while (dom) {\r\n walk(dom, fn)\r\n dom = dom.nextSibling\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Minimize risk: only zero or one _space_ between attr & value\r\n * @param { String } html - html string we want to parse\r\n * @param { Function } fn - callback function to apply on any attribute found\r\n */\r\nfunction walkAttributes(html, fn) {\r\n var m,\r\n re = /([-\\w]+) ?= ?(?:\"([^\"]*)|'([^']*)|({[^}]*}))/g\r\n\r\n while (m = re.exec(html)) {\r\n fn(m[1].toLowerCase(), m[2] || m[3] || m[4])\r\n }\r\n}\r\n\r\n/**\r\n * Check whether a DOM node is in stub mode, useful for the riot 'if' directive\r\n * @param { Object } dom - DOM node we want to parse\r\n * @returns { Boolean } -\r\n */\r\nfunction isInStub(dom) {\r\n while (dom) {\r\n if (dom.inStub) return true\r\n dom = dom.parentNode\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * Create a generic DOM node\r\n * @param { String } name - name of the DOM node we want to create\r\n * @returns { Object } DOM node just created\r\n */\r\nfunction mkEl(name) {\r\n return document.createElement(name)\r\n}\r\n\r\n/**\r\n * Shorter and fast way to select multiple nodes in the DOM\r\n * @param { String } selector - DOM selector\r\n * @param { Object } ctx - DOM node where the targets of our search will is located\r\n * @returns { Object } dom nodes found\r\n */\r\nfunction $$(selector, ctx) {\r\n return (ctx || document).querySelectorAll(selector)\r\n}\r\n\r\n/**\r\n * Shorter and fast way to select a single node in the DOM\r\n * @param { String } selector - unique dom selector\r\n * @param { Object } ctx - DOM node where the target of our search will is located\r\n * @returns { Object } dom node found\r\n */\r\nfunction $(selector, ctx) {\r\n return (ctx || document).querySelector(selector)\r\n}\r\n\r\n/**\r\n * Simple object prototypal inheritance\r\n * @param { Object } parent - parent object\r\n * @returns { Object } child instance\r\n */\r\nfunction inherit(parent) {\r\n function Child() {}\r\n Child.prototype = parent\r\n return new Child()\r\n}\r\n\r\n/**\r\n * Get the name property needed to identify a DOM node in riot\r\n * @param { Object } dom - DOM node we need to parse\r\n * @returns { String | undefined } give us back a string to identify this dom node\r\n */\r\nfunction getNamedKey(dom) {\r\n return getAttr(dom, 'id') || getAttr(dom, 'name')\r\n}\r\n\r\n/**\r\n * Set the named properties of a tag element\r\n * @param { Object } dom - DOM node we need to parse\r\n * @param { Object } parent - tag instance where the named dom element will be eventually added\r\n * @param { Array } keys - list of all the tag instance properties\r\n */\r\nfunction setNamed(dom, parent, keys) {\r\n // get the key value we want to add to the tag instance\r\n var key = getNamedKey(dom),\r\n isArr,\r\n // add the node detected to a tag instance using the named property\r\n add = function(value) {\r\n // avoid to override the tag properties already set\r\n if (contains(keys, key)) return\r\n // check whether this value is an array\r\n isArr = isArray(value)\r\n // if the key was never set\r\n if (!value)\r\n // set it once on the tag instance\r\n parent[key] = dom\r\n // if it was an array and not yet set\r\n else if (!isArr || isArr && !contains(value, dom)) {\r\n // add the dom node into the array\r\n if (isArr)\r\n value.push(dom)\r\n else\r\n parent[key] = [value, dom]\r\n }\r\n }\r\n\r\n // skip the elements with no named properties\r\n if (!key) return\r\n\r\n // check whether this key has been already evaluated\r\n if (tmpl.hasExpr(key))\r\n // wait the first updated event only once\r\n parent.one('mount', function() {\r\n key = getNamedKey(dom)\r\n add(parent[key])\r\n })\r\n else\r\n add(parent[key])\r\n\r\n}\r\n\r\n/**\r\n * Faster String startsWith alternative\r\n * @param { String } src - source string\r\n * @param { String } str - test string\r\n * @returns { Boolean } -\r\n */\r\nfunction startsWith(src, str) {\r\n return src.slice(0, str.length) === str\r\n}\r\n\r\n/**\r\n * requestAnimationFrame function\r\n * Adapted from https://gist.github.com/paulirish/1579671, license MIT\r\n */\r\nvar rAF = (function (w) {\r\n var raf = w.requestAnimationFrame ||\r\n w.mozRequestAnimationFrame || w.webkitRequestAnimationFrame\r\n\r\n if (!raf || /iP(ad|hone|od).*OS 6/.test(w.navigator.userAgent)) { // buggy iOS6\r\n var lastTime = 0\r\n\r\n raf = function (cb) {\r\n var nowtime = Date.now(), timeout = Math.max(16 - (nowtime - lastTime), 0)\r\n setTimeout(function () { cb(lastTime = nowtime + timeout) }, timeout)\r\n }\r\n }\r\n return raf\r\n\r\n})(window || {})\r\n\r\n/**\r\n * Mount a tag creating new Tag instance\r\n * @param { Object } root - dom node where the tag will be mounted\r\n * @param { String } tagName - name of the riot tag we want to mount\r\n * @param { Object } opts - options to pass to the Tag instance\r\n * @returns { Tag } a new Tag instance\r\n */\r\nfunction mountTo(root, tagName, opts) {\r\n var tag = __tagImpl[tagName],\r\n // cache the inner HTML to fix #855\r\n innerHTML = root._innerHTML = root._innerHTML || root.innerHTML\r\n\r\n // clear the inner html\r\n root.innerHTML = ''\r\n\r\n if (tag && root) tag = new Tag(tag, { root: root, opts: opts }, innerHTML)\r\n\r\n if (tag && tag.mount) {\r\n tag.mount()\r\n // add this tag to the virtualDom variable\r\n if (!contains(__virtualDom, tag)) __virtualDom.push(tag)\r\n }\r\n\r\n return tag\r\n}\r\n/**\r\n * Riot public api\r\n */\r\n\r\n// share methods for other riot parts, e.g. compiler\r\nriot.util = { brackets: brackets, tmpl: tmpl }\r\n\r\n/**\r\n * Create a mixin that could be globally shared across all the tags\r\n */\r\nriot.mixin = (function() {\r\n var mixins = {}\r\n\r\n /**\r\n * Create/Return a mixin by its name\r\n * @param { String } name - mixin name (global mixin if missing)\r\n * @param { Object } mixin - mixin logic\r\n * @returns { Object } the mixin logic\r\n */\r\n return function(name, mixin) {\r\n if (isObject(name)) {\r\n mixin = name\r\n mixins[GLOBAL_MIXIN] = extend(mixins[GLOBAL_MIXIN] || {}, mixin)\r\n return\r\n }\r\n\r\n if (!mixin) return mixins[name]\r\n mixins[name] = mixin\r\n }\r\n\r\n})()\r\n\r\n/**\r\n * Create a new riot tag implementation\r\n * @param { String } name - name/id of the new riot tag\r\n * @param { String } html - tag template\r\n * @param { String } css - custom tag css\r\n * @param { String } attrs - root tag attributes\r\n * @param { Function } fn - user function\r\n * @returns { String } name/id of the tag just created\r\n */\r\nriot.tag = function(name, html, css, attrs, fn) {\r\n if (isFunction(attrs)) {\r\n fn = attrs\r\n if (/^[\\w\\-]+\\s?=/.test(css)) {\r\n attrs = css\r\n css = ''\r\n } else attrs = ''\r\n }\r\n if (css) {\r\n if (isFunction(css)) fn = css\r\n else styleManager.add(css)\r\n }\r\n name = name.toLowerCase()\r\n __tagImpl[name] = { name: name, tmpl: html, attrs: attrs, fn: fn }\r\n return name\r\n}\r\n\r\n/**\r\n * Create a new riot tag implementation (for use by the compiler)\r\n * @param { String } name - name/id of the new riot tag\r\n * @param { String } html - tag template\r\n * @param { String } css - custom tag css\r\n * @param { String } attrs - root tag attributes\r\n * @param { Function } fn - user function\r\n * @returns { String } name/id of the tag just created\r\n */\r\nriot.tag2 = function(name, html, css, attrs, fn) {\r\n if (css) styleManager.add(css)\r\n //if (bpair) riot.settings.brackets = bpair\r\n __tagImpl[name] = { name: name, tmpl: html, attrs: attrs, fn: fn }\r\n return name\r\n}\r\n\r\n/**\r\n * Mount a tag using a specific tag implementation\r\n * @param { String } selector - tag DOM selector\r\n * @param { String } tagName - tag implementation name\r\n * @param { Object } opts - tag logic\r\n * @returns { Array } new tags instances\r\n */\r\nriot.mount = function(selector, tagName, opts) {\r\n\r\n var els,\r\n allTags,\r\n tags = []\r\n\r\n // helper functions\r\n\r\n function addRiotTags(arr) {\r\n var list = ''\r\n each(arr, function (e) {\r\n if (!/[^-\\w]/.test(e)) {\r\n e = e.trim().toLowerCase()\r\n list += ',[' + RIOT_TAG_IS + '=\"' + e + '\"],[' + RIOT_TAG + '=\"' + e + '\"]'\r\n }\r\n })\r\n return list\r\n }\r\n\r\n function selectAllTags() {\r\n var keys = Object.keys(__tagImpl)\r\n return keys + addRiotTags(keys)\r\n }\r\n\r\n function pushTags(root) {\r\n if (root.tagName) {\r\n var riotTag = getAttr(root, RIOT_TAG_IS) || getAttr(root, RIOT_TAG)\r\n\r\n // have tagName? force riot-tag to be the same\r\n if (tagName && riotTag !== tagName) {\r\n riotTag = tagName\r\n setAttr(root, RIOT_TAG_IS, tagName)\r\n }\r\n var tag = mountTo(root, riotTag || root.tagName.toLowerCase(), opts)\r\n\r\n if (tag) tags.push(tag)\r\n } else if (root.length) {\r\n each(root, pushTags) // assume nodeList\r\n }\r\n }\r\n\r\n // ----- mount code -----\r\n\r\n // inject styles into DOM\r\n styleManager.inject()\r\n\r\n if (isObject(tagName)) {\r\n opts = tagName\r\n tagName = 0\r\n }\r\n\r\n // crawl the DOM to find the tag\r\n if (typeof selector === T_STRING) {\r\n if (selector === '*')\r\n // select all the tags registered\r\n // and also the tags found with the riot-tag attribute set\r\n selector = allTags = selectAllTags()\r\n else\r\n // or just the ones named like the selector\r\n selector += addRiotTags(selector.split(/, */))\r\n\r\n // make sure to pass always a selector\r\n // to the querySelectorAll function\r\n els = selector ? $$(selector) : []\r\n }\r\n else\r\n // probably you have passed already a tag or a NodeList\r\n els = selector\r\n\r\n // select all the registered and mount them inside their root elements\r\n if (tagName === '*') {\r\n // get all custom tags\r\n tagName = allTags || selectAllTags()\r\n // if the root els it's just a single tag\r\n if (els.tagName)\r\n els = $$(tagName, els)\r\n else {\r\n // select all the children for all the different root elements\r\n var nodeList = []\r\n each(els, function (_el) {\r\n nodeList.push($$(tagName, _el))\r\n })\r\n els = nodeList\r\n }\r\n // get rid of the tagName\r\n tagName = 0\r\n }\r\n\r\n pushTags(els)\r\n\r\n return tags\r\n}\r\n\r\n/**\r\n * Update all the tags instances created\r\n * @returns { Array } all the tags instances\r\n */\r\nriot.update = function() {\r\n return each(__virtualDom, function(tag) {\r\n tag.update()\r\n })\r\n}\r\n\r\n/**\r\n * Export the Tag constructor\r\n */\r\nriot.Tag = Tag\r\n // support CommonJS, AMD & browser\r\n /* istanbul ignore next */\r\n if (typeof exports === T_OBJECT)\r\n module.exports = riot\r\n else if (typeof define === T_FUNCTION && typeof define.amd !== T_UNDEF)\r\n define(function() { return riot })\r\n else\r\n window.riot = riot\r\n\r\n})(typeof window != 'undefined' ? window : void 0);\r\n\n/*!\r\n * Stickyfill -- `position: sticky` polyfill\r\n * v. 1.1.3 | https://github.com/wilddeer/stickyfill\r\n * Copyright Oleg Korsunsky | http://wd.dizaina.net/\r\n *\r\n * MIT License\r\n */\r\n(function(doc, win) {\r\n var watchArray = [],\r\n scroll,\r\n initialized = false,\r\n html = doc.documentElement,\r\n noop = function() {},\r\n checkTimer,\r\n\r\n //visibility API strings\r\n hiddenPropertyName = 'hidden',\r\n visibilityChangeEventName = 'visibilitychange';\r\n\r\n //fallback to prefixed names in old webkit browsers\r\n if (doc.webkitHidden !== undefined) {\r\n hiddenPropertyName = 'webkitHidden';\r\n visibilityChangeEventName = 'webkitvisibilitychange';\r\n }\r\n\r\n //test getComputedStyle\r\n if (!win.getComputedStyle) {\r\n seppuku();\r\n }\r\n\r\n //test for native support\r\n var prefixes = ['', '-webkit-', '-moz-', '-ms-'],\r\n block = document.createElement('div');\r\n\r\n for (var i = prefixes.length - 1; i >= 0; i--) {\r\n try {\r\n block.style.position = prefixes[i] + 'sticky';\r\n }\r\n catch(e) {}\r\n if (block.style.position != '') {\r\n seppuku();\r\n }\r\n }\r\n\r\n updateScrollPos();\r\n\r\n //commit seppuku!\r\n function seppuku() {\r\n init = add = rebuild = pause = stop = kill = noop;\r\n }\r\n\r\n function mergeObjects(targetObj, sourceObject) {\r\n for (var key in sourceObject) {\r\n if (sourceObject.hasOwnProperty(key)) {\r\n targetObj[key] = sourceObject[key];\r\n }\r\n }\r\n }\r\n\r\n function parseNumeric(val) {\r\n return parseFloat(val) || 0;\r\n }\r\n\r\n function updateScrollPos() {\r\n scroll = {\r\n top: win.pageYOffset,\r\n left: win.pageXOffset\r\n };\r\n }\r\n\r\n function onScroll() {\r\n if (win.pageXOffset != scroll.left) {\r\n updateScrollPos();\r\n rebuild();\r\n return;\r\n }\r\n \r\n if (win.pageYOffset != scroll.top) {\r\n updateScrollPos();\r\n recalcAllPos();\r\n }\r\n }\r\n\r\n //fixes flickering\r\n function onWheel(event) {\r\n setTimeout(function() {\r\n if (win.pageYOffset != scroll.top) {\r\n scroll.top = win.pageYOffset;\r\n recalcAllPos();\r\n }\r\n }, 0);\r\n }\r\n\r\n function recalcAllPos() {\r\n for (var i = watchArray.length - 1; i >= 0; i--) {\r\n recalcElementPos(watchArray[i]);\r\n }\r\n }\r\n\r\n function recalcElementPos(el) {\r\n if (!el.inited) return;\r\n\r\n var currentMode = (scroll.top <= el.limit.start? 0: scroll.top >= el.limit.end? 2: 1);\r\n\r\n if (el.mode != currentMode) {\r\n switchElementMode(el, currentMode);\r\n }\r\n }\r\n\r\n //checks whether stickies start or stop positions have changed\r\n function fastCheck() {\r\n for (var i = watchArray.length - 1; i >= 0; i--) {\r\n if (!watchArray[i].inited) continue;\r\n\r\n var deltaTop = Math.abs(getDocOffsetTop(watchArray[i].clone) - watchArray[i].docOffsetTop),\r\n deltaHeight = Math.abs(watchArray[i].parent.node.offsetHeight - watchArray[i].parent.height);\r\n\r\n if (deltaTop >= 2 || deltaHeight >= 2) return false;\r\n }\r\n return true;\r\n }\r\n\r\n function initElement(el) {\r\n if (isNaN(parseFloat(el.computed.top)) || el.isCell || el.computed.display == 'none') return;\r\n\r\n el.inited = true;\r\n\r\n if (!el.clone) clone(el);\r\n if (el.parent.computed.position != 'absolute' &&\r\n el.parent.computed.position != 'relative') el.parent.node.style.position = 'relative';\r\n\r\n recalcElementPos(el);\r\n\r\n el.parent.height = el.parent.node.offsetHeight;\r\n el.docOffsetTop = getDocOffsetTop(el.clone);\r\n }\r\n\r\n function deinitElement(el) {\r\n var deinitParent = true;\r\n\r\n el.clone && killClone(el);\r\n mergeObjects(el.node.style, el.css);\r\n\r\n //check whether element's parent is used by other stickies\r\n for (var i = watchArray.length - 1; i >= 0; i--) {\r\n if (watchArray[i].node !== el.node && watchArray[i].parent.node === el.parent.node) {\r\n deinitParent = false;\r\n break;\r\n }\r\n };\r\n\r\n if (deinitParent) el.parent.node.style.position = el.parent.css.position;\r\n el.mode = -1;\r\n }\r\n\r\n function initAll() {\r\n for (var i = watchArray.length - 1; i >= 0; i--) {\r\n initElement(watchArray[i]);\r\n }\r\n }\r\n\r\n function deinitAll() {\r\n for (var i = watchArray.length - 1; i >= 0; i--) {\r\n deinitElement(watchArray[i]);\r\n }\r\n }\r\n\r\n function switchElementMode(el, mode) {\r\n var nodeStyle = el.node.style;\r\n\r\n switch (mode) {\r\n case 0:\r\n nodeStyle.position = 'absolute';\r\n nodeStyle.left = el.offset.left + 'px';\r\n nodeStyle.right = el.offset.right + 'px';\r\n nodeStyle.top = el.offset.top + 'px';\r\n nodeStyle.bottom = 'auto';\r\n nodeStyle.width = 'auto';\r\n nodeStyle.marginLeft = 0;\r\n nodeStyle.marginRight = 0;\r\n nodeStyle.marginTop = 0;\r\n break;\r\n\r\n case 1:\r\n nodeStyle.position = 'fixed';\r\n nodeStyle.left = el.box.left + 'px';\r\n nodeStyle.right = el.box.right + 'px';\r\n nodeStyle.top = el.css.top;\r\n nodeStyle.bottom = 'auto';\r\n nodeStyle.width = 'auto';\r\n nodeStyle.marginLeft = 0;\r\n nodeStyle.marginRight = 0;\r\n nodeStyle.marginTop = 0;\r\n break;\r\n\r\n case 2:\r\n nodeStyle.position = 'absolute';\r\n nodeStyle.left = el.offset.left + 'px';\r\n nodeStyle.right = el.offset.right + 'px';\r\n nodeStyle.top = 'auto';\r\n nodeStyle.bottom = 0;\r\n nodeStyle.width = 'auto';\r\n nodeStyle.marginLeft = 0;\r\n nodeStyle.marginRight = 0;\r\n break;\r\n }\r\n\r\n el.mode = mode;\r\n }\r\n\r\n function clone(el) {\r\n el.clone = document.createElement('div');\r\n\r\n var refElement = el.node.nextSibling || el.node,\r\n cloneStyle = el.clone.style;\r\n\r\n cloneStyle.height = el.height + 'px';\r\n cloneStyle.width = el.width + 'px';\r\n cloneStyle.marginTop = el.computed.marginTop;\r\n cloneStyle.marginBottom = el.computed.marginBottom;\r\n cloneStyle.marginLeft = el.computed.marginLeft;\r\n cloneStyle.marginRight = el.computed.marginRight;\r\n cloneStyle.padding = cloneStyle.border = cloneStyle.borderSpacing = 0;\r\n cloneStyle.fontSize = '1em';\r\n cloneStyle.position = 'static';\r\n cloneStyle.cssFloat = el.computed.cssFloat;\r\n\r\n el.node.parentNode.insertBefore(el.clone, refElement);\r\n }\r\n\r\n function killClone(el) {\r\n el.clone.parentNode.removeChild(el.clone);\r\n el.clone = undefined;\r\n }\r\n\r\n function getElementParams(node) {\r\n var computedStyle = getComputedStyle(node),\r\n parentNode = node.parentNode,\r\n parentComputedStyle = getComputedStyle(parentNode),\r\n cachedPosition = node.style.position;\r\n\r\n node.style.position = 'relative';\r\n\r\n var computed = {\r\n top: computedStyle.top,\r\n marginTop: computedStyle.marginTop,\r\n marginBottom: computedStyle.marginBottom,\r\n marginLeft: computedStyle.marginLeft,\r\n marginRight: computedStyle.marginRight,\r\n cssFloat: computedStyle.cssFloat,\r\n display: computedStyle.display\r\n },\r\n numeric = {\r\n top: parseNumeric(computedStyle.top),\r\n marginBottom: parseNumeric(computedStyle.marginBottom),\r\n paddingLeft: parseNumeric(computedStyle.paddingLeft),\r\n paddingRight: parseNumeric(computedStyle.paddingRight),\r\n borderLeftWidth: parseNumeric(computedStyle.borderLeftWidth),\r\n borderRightWidth: parseNumeric(computedStyle.borderRightWidth)\r\n };\r\n\r\n node.style.position = cachedPosition;\r\n\r\n var css = {\r\n position: node.style.position,\r\n top: node.style.top,\r\n bottom: node.style.bottom,\r\n left: node.style.left,\r\n right: node.style.right,\r\n width: node.style.width,\r\n marginTop: node.style.marginTop,\r\n marginLeft: node.style.marginLeft,\r\n marginRight: node.style.marginRight\r\n },\r\n nodeOffset = getElementOffset(node),\r\n parentOffset = getElementOffset(parentNode),\r\n \r\n parent = {\r\n node: parentNode,\r\n css: {\r\n position: parentNode.style.position\r\n },\r\n computed: {\r\n position: parentComputedStyle.position\r\n },\r\n numeric: {\r\n borderLeftWidth: parseNumeric(parentComputedStyle.borderLeftWidth),\r\n borderRightWidth: parseNumeric(parentComputedStyle.borderRightWidth),\r\n borderTopWidth: parseNumeric(parentComputedStyle.borderTopWidth),\r\n borderBottomWidth: parseNumeric(parentComputedStyle.borderBottomWidth)\r\n }\r\n },\r\n\r\n el = {\r\n node: node,\r\n box: {\r\n left: nodeOffset.win.left,\r\n right: html.clientWidth - nodeOffset.win.right\r\n },\r\n offset: {\r\n top: nodeOffset.win.top - parentOffset.win.top - parent.numeric.borderTopWidth,\r\n left: nodeOffset.win.left - parentOffset.win.left - parent.numeric.borderLeftWidth,\r\n right: -nodeOffset.win.right + parentOffset.win.right - parent.numeric.borderRightWidth\r\n },\r\n css: css,\r\n isCell: computedStyle.display == 'table-cell',\r\n computed: computed,\r\n numeric: numeric,\r\n width: nodeOffset.win.right - nodeOffset.win.left,\r\n height: nodeOffset.win.bottom - nodeOffset.win.top,\r\n mode: -1,\r\n inited: false,\r\n parent: parent,\r\n limit: {\r\n start: nodeOffset.doc.top - numeric.top,\r\n end: parentOffset.doc.top + parentNode.offsetHeight - parent.numeric.borderBottomWidth -\r\n node.offsetHeight - numeric.top - numeric.marginBottom\r\n }\r\n };\r\n\r\n return el;\r\n }\r\n\r\n function getDocOffsetTop(node) {\r\n var docOffsetTop = 0;\r\n\r\n while (node) {\r\n docOffsetTop += node.offsetTop;\r\n node = node.offsetParent;\r\n }\r\n\r\n return docOffsetTop;\r\n }\r\n\r\n function getElementOffset(node) {\r\n var box = node.getBoundingClientRect();\r\n\r\n return {\r\n doc: {\r\n top: box.top + win.pageYOffset,\r\n left: box.left + win.pageXOffset\r\n },\r\n win: box\r\n };\r\n }\r\n\r\n function startFastCheckTimer() {\r\n checkTimer = setInterval(function() {\r\n !fastCheck() && rebuild();\r\n }, 500);\r\n }\r\n\r\n function stopFastCheckTimer() {\r\n clearInterval(checkTimer);\r\n }\r\n\r\n function handlePageVisibilityChange() {\r\n if (!initialized) return;\r\n\r\n if (document[hiddenPropertyName]) {\r\n stopFastCheckTimer();\r\n }\r\n else {\r\n startFastCheckTimer();\r\n }\r\n }\r\n\r\n function init() {\r\n if (initialized) return;\r\n\r\n updateScrollPos();\r\n initAll();\r\n\r\n win.addEventListener('scroll', onScroll);\r\n win.addEventListener('wheel', onWheel);\r\n\r\n //watch for width changes\r\n win.addEventListener('resize', rebuild);\r\n win.addEventListener('orientationchange', rebuild);\r\n\r\n //watch for page visibility\r\n doc.addEventListener(visibilityChangeEventName, handlePageVisibilityChange);\r\n\r\n startFastCheckTimer();\r\n\r\n initialized = true;\r\n }\r\n\r\n function rebuild() {\r\n if (!initialized) return;\r\n\r\n deinitAll();\r\n \r\n for (var i = watchArray.length - 1; i >= 0; i--) {\r\n watchArray[i] = getElementParams(watchArray[i].node);\r\n }\r\n \r\n initAll();\r\n }\r\n\r\n function pause() {\r\n win.removeEventListener('scroll', onScroll);\r\n win.removeEventListener('wheel', onWheel);\r\n win.removeEventListener('resize', rebuild);\r\n win.removeEventListener('orientationchange', rebuild);\r\n doc.removeEventListener(visibilityChangeEventName, handlePageVisibilityChange);\r\n\r\n stopFastCheckTimer();\r\n\r\n initialized = false;\r\n }\r\n\r\n function stop() {\r\n pause();\r\n deinitAll(); \r\n }\r\n\r\n function kill() {\r\n stop();\r\n\r\n //empty the array without loosing the references,\r\n //the most performant method according to http://jsperf.com/empty-javascript-array\r\n while (watchArray.length) {\r\n watchArray.pop();\r\n }\r\n }\r\n\r\n function add(node) {\r\n //check if Stickyfill is already applied to the node\r\n for (var i = watchArray.length - 1; i >= 0; i--) {\r\n if (watchArray[i].node === node) return;\r\n };\r\n\r\n var el = getElementParams(node);\r\n\r\n watchArray.push(el);\r\n\r\n if (!initialized) {\r\n init();\r\n }\r\n else {\r\n initElement(el);\r\n }\r\n }\r\n\r\n function remove(node) {\r\n for (var i = watchArray.length - 1; i >= 0; i--) {\r\n if (watchArray[i].node === node) {\r\n deinitElement(watchArray[i]);\r\n watchArray.splice(i, 1);\r\n }\r\n };\r\n }\r\n\r\n //expose Stickyfill\r\n win.Stickyfill = {\r\n stickies: watchArray,\r\n add: add,\r\n remove: remove,\r\n init: init,\r\n rebuild: rebuild,\r\n pause: pause,\r\n stop: stop,\r\n kill: kill\r\n };\r\n})(document, window);\r\n\r\n\r\n//if jQuery is available -- create a plugin\r\nif (window.jQuery) {\r\n (function($) {\r\n $.fn.Stickyfill = function(options) {\r\n this.each(function() {\r\n Stickyfill.add(this);\r\n });\r\n\r\n return this;\r\n };\r\n })(window.jQuery);\r\n}\r\n\n;(function( win, $ ) {\r\n\r\n\tfunction featureTest( property, value, noPrefixes ) {\r\n\t\t// Thanks Modernizr! https://github.com/phistuck/Modernizr/commit/3fb7217f5f8274e2f11fe6cfeda7cfaf9948a1f5\r\n\t\tvar prop = property + ':',\r\n\t\t\tel = document.createElement( 'test' ),\r\n\t\t\tmStyle = el.style;\r\n\r\n\t\tif( !noPrefixes ) {\r\n\t\t\tmStyle.cssText = prop + [ '-webkit-', '-moz-', '-ms-', '-o-', '' ].join( value + ';' + prop ) + value + ';';\r\n\t\t} else {\r\n\t\t\tmStyle.cssText = prop + value;\r\n\t\t}\r\n\t\treturn mStyle[ property ].indexOf( value ) !== -1;\r\n\t}\r\n\r\n\tfunction getPx( unit ) {\r\n\t\treturn parseInt( unit, 10 ) || 0;\r\n\t}\r\n\r\n\tvar uniqueIdCounter = 0;\r\n\r\n\tvar S = {\r\n\t\tclasses: {\r\n\t\t\tplugin: 'fixedsticky',\r\n\t\t\tactive: 'fixedsticky-on',\r\n\t\t\tinactive: 'fixedsticky-off',\r\n\t\t\tclone: 'fixedsticky-dummy',\r\n\t\t\twithoutFixedFixed: 'fixedsticky-withoutfixedfixed'\r\n\t\t},\r\n\t\tkeys: {\r\n\t\t\toffset: 'fixedStickyOffset',\r\n\t\t\tposition: 'fixedStickyPosition',\r\n\t\t\tid: 'fixedStickyId'\r\n\t\t},\r\n\t\ttests: {\r\n\t\t\tsticky: featureTest( 'position', 'sticky' ),\r\n\t\t\tfixed: featureTest( 'position', 'fixed', true )\r\n\t\t},\r\n\t\t// Thanks jQuery!\r\n\t\tgetScrollTop: function() {\r\n\t\t\tvar prop = 'pageYOffset',\r\n\t\t\t\tmethod = 'scrollTop';\r\n\t\t\treturn win ? (prop in win) ? win[ prop ] :\r\n\t\t\t\twin.document.documentElement[ method ] :\r\n\t\t\t\twin.document.body[ method ];\r\n\t\t},\r\n\t\tbypass: function() {\r\n\t\t\t// Check native sticky, check fixed and if fixed-fixed is also included on the page and is supported\r\n\t\t\treturn ( S.tests.sticky && !S.optOut ) ||\r\n\t\t\t\t!S.tests.fixed ||\r\n\t\t\t\twin.FixedFixed && !$( win.document.documentElement ).hasClass( 'fixed-supported' );\r\n\t\t},\r\n\t\tupdate: function( el ) {\r\n\t\t\tif( !el.offsetWidth ) { return; }\r\n\r\n\t\t\tvar $el = $( el ),\r\n\t\t\t\theight = $el.outerHeight(),\r\n\t\t\t\tinitialOffset = $el.data( S.keys.offset ),\r\n\t\t\t\tscroll = S.getScrollTop(),\r\n\t\t\t\tisAlreadyOn = $el.is( '.' + S.classes.active ),\r\n\t\t\t\ttoggle = function( turnOn ) {\r\n\t\t\t\t\t$el[ turnOn ? 'addClass' : 'removeClass' ]( S.classes.active )\r\n\t\t\t\t\t\t[ !turnOn ? 'addClass' : 'removeClass' ]( S.classes.inactive );\r\n\t\t\t\t},\r\n\t\t\t\tviewportHeight = $( window ).height(),\r\n\t\t\t\tposition = $el.data( S.keys.position ),\r\n\t\t\t\tskipSettingToFixed,\r\n\t\t\t\telTop,\r\n\t\t\t\telBottom,\r\n\t\t\t\t$parent = $el.parent(),\r\n\t\t\t\tparentOffset = $parent.offset().top,\r\n\t\t\t\tparentHeight = $parent.outerHeight();\r\n\r\n\t\t\tif( initialOffset === undefined ) {\r\n\t\t\t\tinitialOffset = $el.offset().top;\r\n\t\t\t\t$el.data( S.keys.offset, initialOffset );\r\n\t\t\t\t$el.after( $( '<div>' ).addClass( S.classes.clone ).height( height ) );\r\n\t\t\t}\r\n\r\n\t\t\tif( !position ) {\r\n\t\t\t\t// Some browsers require fixed/absolute to report accurate top/left values.\r\n\t\t\t\tskipSettingToFixed = $el.css( 'top' ) !== 'auto' || $el.css( 'bottom' ) !== 'auto';\r\n\r\n\t\t\t\tif( !skipSettingToFixed ) {\r\n\t\t\t\t\t$el.css( 'position', 'fixed' );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tposition = {\r\n\t\t\t\t\ttop: $el.css( 'top' ) !== 'auto',\r\n\t\t\t\t\tbottom: $el.css( 'bottom' ) !== 'auto'\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif( !skipSettingToFixed ) {\r\n\t\t\t\t\t$el.css( 'position', '' );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$el.data( S.keys.position, position );\r\n\t\t\t}\r\n\r\n\t\t\tfunction isFixedToTop() {\r\n\t\t\t\tvar offsetTop = scroll + elTop;\r\n\r\n\t\t\t\t// Initial Offset Top\r\n\t\t\t\treturn initialOffset < offsetTop &&\r\n\t\t\t\t\t// Container Bottom\r\n\t\t\t\t\toffsetTop + height <= parentOffset + parentHeight;\r\n\t\t\t}\r\n\r\n\t\t\tfunction isFixedToBottom() {\r\n\t\t\t\t// Initial Offset Top + Height\r\n\t\t\t\treturn initialOffset + ( height || 0 ) > scroll + viewportHeight - elBottom &&\r\n\t\t\t\t\t// Container Top\r\n\t\t\t\t\tscroll + viewportHeight - elBottom >= parentOffset + ( height || 0 );\r\n\t\t\t}\r\n\r\n\t\t\telTop = getPx( $el.css( 'top' ) );\r\n\t\t\telBottom = getPx( $el.css( 'bottom' ) );\r\n\r\n\t\t\tif( position.top && isFixedToTop() || position.bottom && isFixedToBottom() ) {\r\n\t\t\t\tif( !isAlreadyOn ) {\r\n\t\t\t\t\ttoggle( true );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif( isAlreadyOn ) {\r\n\t\t\t\t\ttoggle( false );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tdestroy: function( el ) {\r\n\t\t\tvar $el = $( el );\r\n\t\t\tif (S.bypass()) {\r\n\t\t\t\treturn $el;\r\n\t\t\t}\r\n\r\n\t\t\treturn $el.each(function() {\r\n\t\t\t\tvar $this = $( this );\r\n\t\t\t\tvar id = $this.data( S.keys.id );\r\n\t\t\t\t$( win ).unbind( '.fixedsticky' + id );\r\n\r\n\t\t\t\t$this\r\n\t\t\t\t\t.removeData( [ S.keys.offset, S.keys.position, S.keys.id ] )\r\n\t\t\t\t\t.removeClass( S.classes.active )\r\n\t\t\t\t\t.removeClass( S.classes.inactive )\r\n\t\t\t\t\t.next( '.' + S.classes.clone ).remove();\r\n\t\t\t});\r\n\t\t},\r\n\t\tinit: function( el ) {\r\n\t\t\tvar $el = $( el );\r\n\r\n\t\t\tif( S.bypass() ) {\r\n\t\t\t\treturn $el;\r\n\t\t\t}\r\n\r\n\t\t\treturn $el.each(function() {\r\n\t\t\t\tvar _this = this;\r\n\t\t\t\tvar id = uniqueIdCounter++;\r\n\t\t\t\t$( this ).data( S.keys.id, id );\r\n\r\n\t\t\t\t$( win ).bind( 'scroll.fixedsticky' + id, function() {\r\n\t\t\t\t\tS.update( _this );\r\n\t\t\t\t}).trigger( 'scroll.fixedsticky' + id );\r\n\r\n\t\t\t\t$( win ).bind( 'resize.fixedsticky' + id , function() {\r\n\t\t\t\t\tif( $el.is( '.' + S.classes.active ) ) {\r\n\t\t\t\t\t\tS.update( _this );\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\twin.FixedSticky = S;\r\n\r\n\t// Plugin\r\n\t$.fn.fixedsticky = function( method ) {\r\n\t\tif ( typeof S[ method ] === 'function') {\r\n\t\t\treturn S[ method ].call( S, this);\r\n\t\t} else if ( typeof method === 'object' || ! method ) {\r\n\t\t\treturn S.init.call( S, this );\r\n\t\t} else {\r\n\t\t\tthrow new Error( 'Method `' + method + '` does not exist on jQuery.fixedsticky' );\r\n\t\t}\r\n\t};\r\n\r\n\t// Add fallback when fixed-fixed is not available.\r\n\tif( !win.FixedFixed ) {\r\n\t\t$( win.document.documentElement ).addClass( S.classes.withoutFixedFixed );\r\n\t}\r\n\r\n})( window, jQuery );\r\n\n/*!\r\n * jQuery Validation Plugin v1.15.0\r\n *\r\n * http://jqueryvalidation.org/\r\n *\r\n * Copyright (c) 2016 Jörn Zaefferer\r\n * Released under the MIT license\r\n */\r\n(function( factory ) {\r\n\tif ( typeof define === \"function\" && define.amd ) {\r\n\t\tdefine( [\"jquery\"], factory );\r\n\t} else if (typeof module === \"object\" && module.exports) {\r\n\t\tmodule.exports = factory( require( \"jquery\" ) );\r\n\t} else {\r\n\t\tfactory( jQuery );\r\n\t}\r\n}(function( $ ) {\r\n\r\n$.extend( $.fn, {\r\n\r\n\t// http://jqueryvalidation.org/validate/\r\n\tvalidate: function( options ) {\r\n\r\n\t\t// If nothing is selected, return nothing; can't chain anyway\r\n\t\tif ( !this.length ) {\r\n\t\t\tif ( options && options.debug && window.console ) {\r\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check if a validator for this form was already created\r\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\r\n\t\tif ( validator ) {\r\n\t\t\treturn validator;\r\n\t\t}\r\n\r\n\t\t// Add novalidate tag if HTML5.\r\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\r\n\r\n\t\tvalidator = new $.validator( options, this[ 0 ] );\r\n\t\t$.data( this[ 0 ], \"validator\", validator );\r\n\r\n\t\tif ( validator.settings.onsubmit ) {\r\n\r\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\r\n\t\t\t\tif ( validator.settings.submitHandler ) {\r\n\t\t\t\t\tvalidator.submitButton = event.target;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\r\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\r\n\t\t\t\t\tvalidator.cancelSubmit = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\r\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\r\n\t\t\t\t\tvalidator.cancelSubmit = true;\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\r\n\t\t\t// Validate the form on submit\r\n\t\t\tthis.on( \"submit.validate\", function( event ) {\r\n\t\t\t\tif ( validator.settings.debug ) {\r\n\r\n\t\t\t\t\t// Prevent form submit to be able to see console output\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t\tfunction handle() {\r\n\t\t\t\t\tvar hidden, result;\r\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\r\n\t\t\t\t\t\tif ( validator.submitButton ) {\r\n\r\n\t\t\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\r\n\t\t\t\t\t\t\thidden = $( \"<input type='hidden'/>\" )\r\n\t\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\r\n\t\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\r\n\t\t\t\t\t\t\t\t.appendTo( validator.currentForm );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\r\n\t\t\t\t\t\tif ( validator.submitButton ) {\r\n\r\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\r\n\t\t\t\t\t\t\thidden.remove();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ( result !== undefined ) {\r\n\t\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\r\n\t\t\t\tif ( validator.cancelSubmit ) {\r\n\t\t\t\t\tvalidator.cancelSubmit = false;\r\n\t\t\t\t\treturn handle();\r\n\t\t\t\t}\r\n\t\t\t\tif ( validator.form() ) {\r\n\t\t\t\t\tif ( validator.pendingRequest ) {\r\n\t\t\t\t\t\tvalidator.formSubmitted = true;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn handle();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalidator.focusInvalid();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\treturn validator;\r\n\t},\r\n\r\n\t// http://jqueryvalidation.org/valid/\r\n\tvalid: function() {\r\n\t\tvar valid, validator, errorList;\r\n\r\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\r\n\t\t\tvalid = this.validate().form();\r\n\t\t} else {\r\n\t\t\terrorList = [];\r\n\t\t\tvalid = true;\r\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\r\n\t\t\tthis.each( function() {\r\n\t\t\t\tvalid = validator.element( this ) && valid;\r\n\t\t\t\tif ( !valid ) {\r\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t\tvalidator.errorList = errorList;\r\n\t\t}\r\n\t\treturn valid;\r\n\t},\r\n\r\n\t// http://jqueryvalidation.org/rules/\r\n\trules: function( command, argument ) {\r\n\r\n\t\t// If nothing is selected, return nothing; can't chain anyway\r\n\t\tif ( !this.length ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar element = this[ 0 ],\r\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\r\n\r\n\t\tif ( command ) {\r\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\r\n\t\t\tstaticRules = settings.rules;\r\n\t\t\texistingRules = $.validator.staticRules( element );\r\n\t\t\tswitch ( command ) {\r\n\t\t\tcase \"add\":\r\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\r\n\r\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\r\n\t\t\t\tdelete existingRules.messages;\r\n\t\t\t\tstaticRules[ element.name ] = existingRules;\r\n\t\t\t\tif ( argument.messages ) {\r\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"remove\":\r\n\t\t\t\tif ( !argument ) {\r\n\t\t\t\t\tdelete staticRules[ element.name ];\r\n\t\t\t\t\treturn existingRules;\r\n\t\t\t\t}\r\n\t\t\t\tfiltered = {};\r\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\r\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\r\n\t\t\t\t\tdelete existingRules[ method ];\r\n\t\t\t\t\tif ( method === \"required\" ) {\r\n\t\t\t\t\t\t$( element ).removeAttr( \"aria-required\" );\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\t\t\t\treturn filtered;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdata = $.validator.normalizeRules(\r\n\t\t$.extend(\r\n\t\t\t{},\r\n\t\t\t$.validator.classRules( element ),\r\n\t\t\t$.validator.attributeRules( element ),\r\n\t\t\t$.validator.dataRules( element ),\r\n\t\t\t$.validator.staticRules( element )\r\n\t\t), element );\r\n\r\n\t\t// Make sure required is at front\r\n\t\tif ( data.required ) {\r\n\t\t\tparam = data.required;\r\n\t\t\tdelete data.required;\r\n\t\t\tdata = $.extend( { required: param }, data );\r\n\t\t\t$( element ).attr( \"aria-required\", \"true\" );\r\n\t\t}\r\n\r\n\t\t// Make sure remote is at back\r\n\t\tif ( data.remote ) {\r\n\t\t\tparam = data.remote;\r\n\t\t\tdelete data.remote;\r\n\t\t\tdata = $.extend( data, { remote: param } );\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n} );\r\n\r\n// Custom selectors\r\n$.extend( $.expr[ \":\" ], {\r\n\r\n\t// http://jqueryvalidation.org/blank-selector/\r\n\tblank: function( a ) {\r\n\t\treturn !$.trim( \"\" + $( a ).val() );\r\n\t},\r\n\r\n\t// http://jqueryvalidation.org/filled-selector/\r\n\tfilled: function( a ) {\r\n\t\tvar val = $( a ).val();\r\n\t\treturn val !== null && !!$.trim( \"\" + val );\r\n\t},\r\n\r\n\t// http://jqueryvalidation.org/unchecked-selector/\r\n\tunchecked: function( a ) {\r\n\t\treturn !$( a ).prop( \"checked\" );\r\n\t}\r\n} );\r\n\r\n// Constructor for validator\r\n$.validator = function( options, form ) {\r\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\r\n\tthis.currentForm = form;\r\n\tthis.init();\r\n};\r\n\r\n// http://jqueryvalidation.org/jQuery.validator.format/\r\n$.validator.format = function( source, params ) {\r\n\tif ( arguments.length === 1 ) {\r\n\t\treturn function() {\r\n\t\t\tvar args = $.makeArray( arguments );\r\n\t\t\targs.unshift( source );\r\n\t\t\treturn $.validator.format.apply( this, args );\r\n\t\t};\r\n\t}\r\n\tif ( params === undefined ) {\r\n\t\treturn source;\r\n\t}\r\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\r\n\t\tparams = $.makeArray( arguments ).slice( 1 );\r\n\t}\r\n\tif ( params.constructor !== Array ) {\r\n\t\tparams = [ params ];\r\n\t}\r\n\t$.each( params, function( i, n ) {\r\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\r\n\t\t\treturn n;\r\n\t\t} );\r\n\t} );\r\n\treturn source;\r\n};\r\n\r\n$.extend( $.validator, {\r\n\r\n\tdefaults: {\r\n\t\tmessages: {},\r\n\t\tgroups: {},\r\n\t\trules: {},\r\n\t\terrorClass: \"error\",\r\n\t\tpendingClass: \"pending\",\r\n\t\tvalidClass: \"valid\",\r\n\t\terrorElement: \"label\",\r\n\t\tfocusCleanup: false,\r\n\t\tfocusInvalid: true,\r\n\t\terrorContainer: $( [] ),\r\n\t\terrorLabelContainer: $( [] ),\r\n\t\tonsubmit: true,\r\n\t\tignore: \":hidden\",\r\n\t\tignoreTitle: false,\r\n\t\tonfocusin: function( element ) {\r\n\t\t\tthis.lastActive = element;\r\n\r\n\t\t\t// Hide error label and remove error class on focus if enabled\r\n\t\t\tif ( this.settings.focusCleanup ) {\r\n\t\t\t\tif ( this.settings.unhighlight ) {\r\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\r\n\t\t\t\t}\r\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\r\n\t\t\t}\r\n\t\t},\r\n\t\tonfocusout: function( element ) {\r\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\r\n\t\t\t\tthis.element( element );\r\n\t\t\t}\r\n\t\t},\r\n\t\tonkeyup: function( element, event ) {\r\n\r\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\r\n\t\t\t// Shift => 16\r\n\t\t\t// Ctrl => 17\r\n\t\t\t// Alt => 18\r\n\t\t\t// Caps lock => 20\r\n\t\t\t// End => 35\r\n\t\t\t// Home => 36\r\n\t\t\t// Left arrow => 37\r\n\t\t\t// Up arrow => 38\r\n\t\t\t// Right arrow => 39\r\n\t\t\t// Down arrow => 40\r\n\t\t\t// Insert => 45\r\n\t\t\t// Num lock => 144\r\n\t\t\t// AltGr key => 225\r\n\t\t\tvar excludedKeys = [\r\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\r\n\t\t\t\t38, 39, 40, 45, 144, 225\r\n\t\t\t];\r\n\r\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\r\n\t\t\t\treturn;\r\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\r\n\t\t\t\tthis.element( element );\r\n\t\t\t}\r\n\t\t},\r\n\t\tonclick: function( element ) {\r\n\r\n\t\t\t// Click on selects, radiobuttons and checkboxes\r\n\t\t\tif ( element.name in this.submitted ) {\r\n\t\t\t\tthis.element( element );\r\n\r\n\t\t\t// Or option elements, check parent select in that case\r\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\r\n\t\t\t\tthis.element( element.parentNode );\r\n\t\t\t}\r\n\t\t},\r\n\t\thighlight: function( element, errorClass, validClass ) {\r\n\t\t\tif ( element.type === \"radio\" ) {\r\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\r\n\t\t\t} else {\r\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\r\n\t\t\t}\r\n\t\t},\r\n\t\tunhighlight: function( element, errorClass, validClass ) {\r\n\t\t\tif ( element.type === \"radio\" ) {\r\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\r\n\t\t\t} else {\r\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// http://jqueryvalidation.org/jQuery.validator.setDefaults/\r\n\tsetDefaults: function( settings ) {\r\n\t\t$.extend( $.validator.defaults, settings );\r\n\t},\r\n\r\n\tmessages: {\r\n\t\trequired: \"This field is required.\",\r\n\t\tremote: \"Please fix this field.\",\r\n\t\temail: \"Please enter a valid email address.\",\r\n\t\turl: \"Please enter a valid URL.\",\r\n\t\tdate: \"Please enter a valid date.\",\r\n\t\tdateISO: \"Please enter a valid date ( ISO ).\",\r\n\t\tnumber: \"Please enter a valid number.\",\r\n\t\tdigits: \"Please enter only digits.\",\r\n\t\tequalTo: \"Please enter the same value again.\",\r\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\r\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\r\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\r\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\r\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\r\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\r\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\r\n\t},\r\n\r\n\tautoCreateRanges: false,\r\n\r\n\tprototype: {\r\n\r\n\t\tinit: function() {\r\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\r\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\r\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\r\n\t\t\tthis.submitted = {};\r\n\t\t\tthis.valueCache = {};\r\n\t\t\tthis.pendingRequest = 0;\r\n\t\t\tthis.pending = {};\r\n\t\t\tthis.invalid = {};\r\n\t\t\tthis.reset();\r\n\r\n\t\t\tvar groups = ( this.groups = {} ),\r\n\t\t\t\trules;\r\n\t\t\t$.each( this.settings.groups, function( key, value ) {\r\n\t\t\t\tif ( typeof value === \"string\" ) {\r\n\t\t\t\t\tvalue = value.split( /\\s/ );\r\n\t\t\t\t}\r\n\t\t\t\t$.each( value, function( index, name ) {\r\n\t\t\t\t\tgroups[ name ] = key;\r\n\t\t\t\t} );\r\n\t\t\t} );\r\n\t\t\trules = this.settings.rules;\r\n\t\t\t$.each( rules, function( key, value ) {\r\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\r\n\t\t\t} );\r\n\r\n\t\t\tfunction delegate( event ) {\r\n\t\t\t\tvar validator = $.data( event.target.form, \"validator\" ),\r\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\r\n\t\t\t\t\tsettings = validator.settings;\r\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\r\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$( this.currentForm )\r\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\r\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\r\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\r\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\r\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable]\", delegate )\r\n\r\n\t\t\t\t// Support: Chrome, oldIE\r\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\r\n\t\t\t\t.on( \"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate );\r\n\r\n\t\t\tif ( this.settings.invalidHandler ) {\r\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\r\n\t\t\t}\r\n\r\n\t\t\t// Add aria-required to any Static/Data/Class required fields before first validation\r\n\t\t\t// Screen readers require this attribute to be present before the initial submission http://www.w3.org/TR/WCAG-TECHS/ARIA2.html\r\n\t\t\t$( this.currentForm ).find( \"[required], [data-rule-required], .required\" ).attr( \"aria-required\", \"true\" );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/Validator.form/\r\n\t\tform: function() {\r\n\t\t\tthis.checkForm();\r\n\t\t\t$.extend( this.submitted, this.errorMap );\r\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\r\n\t\t\tif ( !this.valid() ) {\r\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\r\n\t\t\t}\r\n\t\t\tthis.showErrors();\r\n\t\t\treturn this.valid();\r\n\t\t},\r\n\r\n\t\tcheckForm: function() {\r\n\t\t\tthis.prepareForm();\r\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\r\n\t\t\t\tthis.check( elements[ i ] );\r\n\t\t\t}\r\n\t\t\treturn this.valid();\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/Validator.element/\r\n\t\telement: function( element ) {\r\n\t\t\tvar cleanElement = this.clean( element ),\r\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\r\n\t\t\t\tv = this,\r\n\t\t\t\tresult = true,\r\n\t\t\t\trs, group;\r\n\r\n\t\t\tif ( checkElement === undefined ) {\r\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\r\n\t\t\t} else {\r\n\t\t\t\tthis.prepareElement( checkElement );\r\n\t\t\t\tthis.currentElements = $( checkElement );\r\n\r\n\t\t\t\t// If this element is grouped, then validate all group elements already\r\n\t\t\t\t// containing a value\r\n\t\t\t\tgroup = this.groups[ checkElement.name ];\r\n\t\t\t\tif ( group ) {\r\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\r\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\r\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\r\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\r\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\r\n\t\t\t\t\t\t\t\tresult = result && v.check( cleanElement );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\r\n\t\t\t\trs = this.check( checkElement ) !== false;\r\n\t\t\t\tresult = result && rs;\r\n\t\t\t\tif ( rs ) {\r\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( !this.numberOfInvalids() ) {\r\n\r\n\t\t\t\t\t// Hide error containers on last error\r\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\r\n\t\t\t\t}\r\n\t\t\t\tthis.showErrors();\r\n\r\n\t\t\t\t// Add aria-invalid status for screen readers\r\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/Validator.showErrors/\r\n\t\tshowErrors: function( errors ) {\r\n\t\t\tif ( errors ) {\r\n\t\t\t\tvar validator = this;\r\n\r\n\t\t\t\t// Add items to error list and map\r\n\t\t\t\t$.extend( this.errorMap, errors );\r\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tmessage: message,\r\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\r\n\t\t\t\t\t};\r\n\t\t\t\t} );\r\n\r\n\t\t\t\t// Remove items from success list\r\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\r\n\t\t\t\t\treturn !( element.name in errors );\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t\tif ( this.settings.showErrors ) {\r\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\r\n\t\t\t} else {\r\n\t\t\t\tthis.defaultShowErrors();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/Validator.resetForm/\r\n\t\tresetForm: function() {\r\n\t\t\tif ( $.fn.resetForm ) {\r\n\t\t\t\t$( this.currentForm ).resetForm();\r\n\t\t\t}\r\n\t\t\tthis.invalid = {};\r\n\t\t\tthis.submitted = {};\r\n\t\t\tthis.prepareForm();\r\n\t\t\tthis.hideErrors();\r\n\t\t\tvar elements = this.elements()\r\n\t\t\t\t.removeData( \"previousValue\" )\r\n\t\t\t\t.removeAttr( \"aria-invalid\" );\r\n\r\n\t\t\tthis.resetElements( elements );\r\n\t\t},\r\n\r\n\t\tresetElements: function( elements ) {\r\n\t\t\tvar i;\r\n\r\n\t\t\tif ( this.settings.unhighlight ) {\r\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\r\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\r\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\r\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\telements\r\n\t\t\t\t\t.removeClass( this.settings.errorClass )\r\n\t\t\t\t\t.removeClass( this.settings.validClass );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tnumberOfInvalids: function() {\r\n\t\t\treturn this.objectLength( this.invalid );\r\n\t\t},\r\n\r\n\t\tobjectLength: function( obj ) {\r\n\t\t\t/* jshint unused: false */\r\n\t\t\tvar count = 0,\r\n\t\t\t\ti;\r\n\t\t\tfor ( i in obj ) {\r\n\t\t\t\tif ( obj[ i ] ) {\r\n\t\t\t\t\tcount++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn count;\r\n\t\t},\r\n\r\n\t\thideErrors: function() {\r\n\t\t\tthis.hideThese( this.toHide );\r\n\t\t},\r\n\r\n\t\thideThese: function( errors ) {\r\n\t\t\terrors.not( this.containers ).text( \"\" );\r\n\t\t\tthis.addWrapper( errors ).hide();\r\n\t\t},\r\n\r\n\t\tvalid: function() {\r\n\t\t\treturn this.size() === 0;\r\n\t\t},\r\n\r\n\t\tsize: function() {\r\n\t\t\treturn this.errorList.length;\r\n\t\t},\r\n\r\n\t\tfocusInvalid: function() {\r\n\t\t\tif ( this.settings.focusInvalid ) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\r\n\t\t\t\t\t.filter( \":visible\" )\r\n\t\t\t\t\t.focus()\r\n\r\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\r\n\t\t\t\t\t.trigger( \"focusin\" );\r\n\t\t\t\t} catch ( e ) {\r\n\r\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tfindLastActive: function() {\r\n\t\t\tvar lastActive = this.lastActive;\r\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\r\n\t\t\t\treturn n.element.name === lastActive.name;\r\n\t\t\t} ).length === 1 && lastActive;\r\n\t\t},\r\n\r\n\t\telements: function() {\r\n\t\t\tvar validator = this,\r\n\t\t\t\trulesCache = {};\r\n\r\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\r\n\t\t\treturn $( this.currentForm )\r\n\t\t\t.find( \"input, select, textarea, [contenteditable]\" )\r\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\r\n\t\t\t.not( this.settings.ignore )\r\n\t\t\t.filter( function() {\r\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\r\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\r\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Set form expando on contenteditable\r\n\t\t\t\tif ( this.hasAttribute( \"contenteditable\" ) ) {\r\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\r\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\trulesCache[ name ] = true;\r\n\t\t\t\treturn true;\r\n\t\t\t} );\r\n\t\t},\r\n\r\n\t\tclean: function( selector ) {\r\n\t\t\treturn $( selector )[ 0 ];\r\n\t\t},\r\n\r\n\t\terrors: function() {\r\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\r\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\r\n\t\t},\r\n\r\n\t\tresetInternals: function() {\r\n\t\t\tthis.successList = [];\r\n\t\t\tthis.errorList = [];\r\n\t\t\tthis.errorMap = {};\r\n\t\t\tthis.toShow = $( [] );\r\n\t\t\tthis.toHide = $( [] );\r\n\t\t},\r\n\r\n\t\treset: function() {\r\n\t\t\tthis.resetInternals();\r\n\t\t\tthis.currentElements = $( [] );\r\n\t\t},\r\n\r\n\t\tprepareForm: function() {\r\n\t\t\tthis.reset();\r\n\t\t\tthis.toHide = this.errors().add( this.containers );\r\n\t\t},\r\n\r\n\t\tprepareElement: function( element ) {\r\n\t\t\tthis.reset();\r\n\t\t\tthis.toHide = this.errorsFor( element );\r\n\t\t},\r\n\r\n\t\telementValue: function( element ) {\r\n\t\t\tvar $element = $( element ),\r\n\t\t\t\ttype = element.type,\r\n\t\t\t\tval, idx;\r\n\r\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\r\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\r\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\r\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\r\n\t\t\t}\r\n\r\n\t\t\tif ( element.hasAttribute( \"contenteditable\" ) ) {\r\n\t\t\t\tval = $element.text();\r\n\t\t\t} else {\r\n\t\t\t\tval = $element.val();\r\n\t\t\t}\r\n\r\n\t\t\tif ( type === \"file\" ) {\r\n\r\n\t\t\t\t// Modern browser (chrome & safari)\r\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\r\n\t\t\t\t\treturn val.substr( 12 );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Legacy browsers\r\n\t\t\t\t// Unix-based path\r\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\r\n\t\t\t\tif ( idx >= 0 ) {\r\n\t\t\t\t\treturn val.substr( idx + 1 );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Windows-based path\r\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\r\n\t\t\t\tif ( idx >= 0 ) {\r\n\t\t\t\t\treturn val.substr( idx + 1 );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Just the file name\r\n\t\t\t\treturn val;\r\n\t\t\t}\r\n\r\n\t\t\tif ( typeof val === \"string\" ) {\r\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\r\n\t\t\t}\r\n\t\t\treturn val;\r\n\t\t},\r\n\r\n\t\tcheck: function( element ) {\r\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\r\n\r\n\t\t\tvar rules = $( element ).rules(),\r\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t} ).length,\r\n\t\t\t\tdependencyMismatch = false,\r\n\t\t\t\tval = this.elementValue( element ),\r\n\t\t\t\tresult, method, rule;\r\n\r\n\t\t\t// If a normalizer is defined for this element, then\r\n\t\t\t// call it to retreive the changed value instead\r\n\t\t\t// of using the real one.\r\n\t\t\t// Note that `this` in the normalizer is `element`.\r\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\r\n\t\t\t\tval = rules.normalizer.call( element, val );\r\n\r\n\t\t\t\tif ( typeof val !== \"string\" ) {\r\n\t\t\t\t\tthrow new TypeError( \"The normalizer should return a string value.\" );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Delete the normalizer from rules to avoid treating\r\n\t\t\t\t// it as a pre-defined method.\r\n\t\t\t\tdelete rules.normalizer;\r\n\t\t\t}\r\n\r\n\t\t\tfor ( method in rules ) {\r\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\r\n\t\t\t\ttry {\r\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\r\n\r\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\r\n\t\t\t\t\t// don't mark it as valid when there are no other rules\r\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\r\n\t\t\t\t\t\tdependencyMismatch = true;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdependencyMismatch = false;\r\n\r\n\t\t\t\t\tif ( result === \"pending\" ) {\r\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( !result ) {\r\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch ( e ) {\r\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\r\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( e instanceof TypeError ) {\r\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthrow e;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ( dependencyMismatch ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif ( this.objectLength( rules ) ) {\r\n\t\t\t\tthis.successList.push( element );\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t// Return the custom message for the given element and validation method\r\n\t\t// specified in the element's HTML5 data attribute\r\n\t\t// return the generic message if present and no method specific message is present\r\n\t\tcustomDataMessage: function( element, method ) {\r\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\r\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\r\n\t\t},\r\n\r\n\t\t// Return the custom message for the given element name and validation method\r\n\t\tcustomMessage: function( name, method ) {\r\n\t\t\tvar m = this.settings.messages[ name ];\r\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\r\n\t\t},\r\n\r\n\t\t// Return the first defined argument, allowing empty strings\r\n\t\tfindDefined: function() {\r\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\r\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\r\n\t\t\t\t\treturn arguments[ i ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn undefined;\r\n\t\t},\r\n\r\n\t\tdefaultMessage: function( element, rule ) {\r\n\t\t\tvar message = this.findDefined(\r\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\r\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\r\n\r\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\r\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\r\n\t\t\t\t\t$.validator.messages[ rule.method ],\r\n\t\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\r\n\t\t\t\t),\r\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\r\n\t\t\tif ( typeof message === \"function\" ) {\r\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\r\n\t\t\t} else if ( theregex.test( message ) ) {\r\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\r\n\t\t\t}\r\n\r\n\t\t\treturn message;\r\n\t\t},\r\n\r\n\t\tformatAndAdd: function( element, rule ) {\r\n\t\t\tvar message = this.defaultMessage( element, rule );\r\n\r\n\t\t\tthis.errorList.push( {\r\n\t\t\t\tmessage: message,\r\n\t\t\t\telement: element,\r\n\t\t\t\tmethod: rule.method\r\n\t\t\t} );\r\n\r\n\t\t\tthis.errorMap[ element.name ] = message;\r\n\t\t\tthis.submitted[ element.name ] = message;\r\n\t\t},\r\n\r\n\t\taddWrapper: function( toToggle ) {\r\n\t\t\tif ( this.settings.wrapper ) {\r\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\r\n\t\t\t}\r\n\t\t\treturn toToggle;\r\n\t\t},\r\n\r\n\t\tdefaultShowErrors: function() {\r\n\t\t\tvar i, elements, error;\r\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\r\n\t\t\t\terror = this.errorList[ i ];\r\n\t\t\t\tif ( this.settings.highlight ) {\r\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\r\n\t\t\t\t}\r\n\t\t\t\tthis.showLabel( error.element, error.message );\r\n\t\t\t}\r\n\t\t\tif ( this.errorList.length ) {\r\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\r\n\t\t\t}\r\n\t\t\tif ( this.settings.success ) {\r\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\r\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ( this.settings.unhighlight ) {\r\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\r\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\r\n\t\t\tthis.hideErrors();\r\n\t\t\tthis.addWrapper( this.toShow ).show();\r\n\t\t},\r\n\r\n\t\tvalidElements: function() {\r\n\t\t\treturn this.currentElements.not( this.invalidElements() );\r\n\t\t},\r\n\r\n\t\tinvalidElements: function() {\r\n\t\t\treturn $( this.errorList ).map( function() {\r\n\t\t\t\treturn this.element;\r\n\t\t\t} );\r\n\t\t},\r\n\r\n\t\tshowLabel: function( element, message ) {\r\n\t\t\tvar place, group, errorID, v,\r\n\t\t\t\terror = this.errorsFor( element ),\r\n\t\t\t\telementID = this.idOrName( element ),\r\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\r\n\r\n\t\t\tif ( error.length ) {\r\n\r\n\t\t\t\t// Refresh error/success class\r\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\r\n\r\n\t\t\t\t// Replace message on existing label\r\n\t\t\t\terror.html( message );\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// Create error element\r\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\r\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\r\n\t\t\t\t\t.addClass( this.settings.errorClass )\r\n\t\t\t\t\t.html( message || \"\" );\r\n\r\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\r\n\t\t\t\tplace = error;\r\n\t\t\t\tif ( this.settings.wrapper ) {\r\n\r\n\t\t\t\t\t// Make sure the element is visible, even in IE\r\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\r\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\r\n\t\t\t\t}\r\n\t\t\t\tif ( this.labelContainer.length ) {\r\n\t\t\t\t\tthis.labelContainer.append( place );\r\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\r\n\t\t\t\t\tthis.settings.errorPlacement( place, $( element ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tplace.insertAfter( element );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Link error back to the element\r\n\t\t\t\tif ( error.is( \"label\" ) ) {\r\n\r\n\t\t\t\t\t// If the error is a label, then associate using 'for'\r\n\t\t\t\t\terror.attr( \"for\", elementID );\r\n\r\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\r\n\t\t\t\t\t// to explicitly apply aria-describedby\r\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\r\n\t\t\t\t\terrorID = error.attr( \"id\" );\r\n\r\n\t\t\t\t\t// Respect existing non-error aria-describedby\r\n\t\t\t\t\tif ( !describedBy ) {\r\n\t\t\t\t\t\tdescribedBy = errorID;\r\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\r\n\r\n\t\t\t\t\t\t// Add to end of list if not already present\r\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\r\n\r\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\r\n\t\t\t\t\tgroup = this.groups[ element.name ];\r\n\t\t\t\t\tif ( group ) {\r\n\t\t\t\t\t\tv = this;\r\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\r\n\t\t\t\t\t\t\tif ( testgroup === group ) {\r\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\r\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ( !message && this.settings.success ) {\r\n\t\t\t\terror.text( \"\" );\r\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\r\n\t\t\t\t\terror.addClass( this.settings.success );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.settings.success( error, element );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.toShow = this.toShow.add( error );\r\n\t\t},\r\n\r\n\t\terrorsFor: function( element ) {\r\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\r\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\r\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\r\n\r\n\t\t\t// 'aria-describedby' should directly reference the error element\r\n\t\t\tif ( describer ) {\r\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\r\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\r\n\t\t\t}\r\n\r\n\t\t\treturn this\r\n\t\t\t\t.errors()\r\n\t\t\t\t.filter( selector );\r\n\t\t},\r\n\r\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\r\n\t\t// meta-characters that should be escaped in order to be used with JQuery\r\n\t\t// as a literal part of a name/id or any selector.\r\n\t\tescapeCssMeta: function( string ) {\r\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\r\n\t\t},\r\n\r\n\t\tidOrName: function( element ) {\r\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\r\n\t\t},\r\n\r\n\t\tvalidationTargetFor: function( element ) {\r\n\r\n\t\t\t// If radio/checkbox, validate first element in group instead\r\n\t\t\tif ( this.checkable( element ) ) {\r\n\t\t\t\telement = this.findByName( element.name );\r\n\t\t\t}\r\n\r\n\t\t\t// Always apply ignore filter\r\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\r\n\t\t},\r\n\r\n\t\tcheckable: function( element ) {\r\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\r\n\t\t},\r\n\r\n\t\tfindByName: function( name ) {\r\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\r\n\t\t},\r\n\r\n\t\tgetLength: function( value, element ) {\r\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\r\n\t\t\tcase \"select\":\r\n\t\t\t\treturn $( \"option:selected\", element ).length;\r\n\t\t\tcase \"input\":\r\n\t\t\t\tif ( this.checkable( element ) ) {\r\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn value.length;\r\n\t\t},\r\n\r\n\t\tdepend: function( param, element ) {\r\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\r\n\t\t},\r\n\r\n\t\tdependTypes: {\r\n\t\t\t\"boolean\": function( param ) {\r\n\t\t\t\treturn param;\r\n\t\t\t},\r\n\t\t\t\"string\": function( param, element ) {\r\n\t\t\t\treturn !!$( param, element.form ).length;\r\n\t\t\t},\r\n\t\t\t\"function\": function( param, element ) {\r\n\t\t\t\treturn param( element );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\toptional: function( element ) {\r\n\t\t\tvar val = this.elementValue( element );\r\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\r\n\t\t},\r\n\r\n\t\tstartRequest: function( element ) {\r\n\t\t\tif ( !this.pending[ element.name ] ) {\r\n\t\t\t\tthis.pendingRequest++;\r\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\r\n\t\t\t\tthis.pending[ element.name ] = true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tstopRequest: function( element, valid ) {\r\n\t\t\tthis.pendingRequest--;\r\n\r\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\r\n\t\t\tif ( this.pendingRequest < 0 ) {\r\n\t\t\t\tthis.pendingRequest = 0;\r\n\t\t\t}\r\n\t\t\tdelete this.pending[ element.name ];\r\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\r\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\r\n\t\t\t\t$( this.currentForm ).submit();\r\n\t\t\t\tthis.formSubmitted = false;\r\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\r\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\r\n\t\t\t\tthis.formSubmitted = false;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tpreviousValue: function( element, method ) {\r\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\r\n\t\t\t\told: null,\r\n\t\t\t\tvalid: true,\r\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\r\n\t\t\t} );\r\n\t\t},\r\n\r\n\t\t// Cleans up all forms and elements, removes validator-specific events\r\n\t\tdestroy: function() {\r\n\t\t\tthis.resetForm();\r\n\r\n\t\t\t$( this.currentForm )\r\n\t\t\t\t.off( \".validate\" )\r\n\t\t\t\t.removeData( \"validator\" )\r\n\t\t\t\t.find( \".validate-equalTo-blur\" )\r\n\t\t\t\t\t.off( \".validate-equalTo\" )\r\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" );\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tclassRuleSettings: {\r\n\t\trequired: { required: true },\r\n\t\temail: { email: true },\r\n\t\turl: { url: true },\r\n\t\tdate: { date: true },\r\n\t\tdateISO: { dateISO: true },\r\n\t\tnumber: { number: true },\r\n\t\tdigits: { digits: true },\r\n\t\tcreditcard: { creditcard: true }\r\n\t},\r\n\r\n\taddClassRules: function( className, rules ) {\r\n\t\tif ( className.constructor === String ) {\r\n\t\t\tthis.classRuleSettings[ className ] = rules;\r\n\t\t} else {\r\n\t\t\t$.extend( this.classRuleSettings, className );\r\n\t\t}\r\n\t},\r\n\r\n\tclassRules: function( element ) {\r\n\t\tvar rules = {},\r\n\t\t\tclasses = $( element ).attr( \"class\" );\r\n\r\n\t\tif ( classes ) {\r\n\t\t\t$.each( classes.split( \" \" ), function() {\r\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\r\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\r\n\r\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\r\n\t\t// allows type=\"date\" and others to be compared as strings\r\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\r\n\t\t\tvalue = Number( value );\r\n\r\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\r\n\t\t\tif ( isNaN( value ) ) {\r\n\t\t\t\tvalue = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( value || value === 0 ) {\r\n\t\t\trules[ method ] = value;\r\n\t\t} else if ( type === method && type !== \"range\" ) {\r\n\r\n\t\t\t// Exception: the jquery validate 'range' method\r\n\t\t\t// does not test for the html5 'range' type\r\n\t\t\trules[ method ] = true;\r\n\t\t}\r\n\t},\r\n\r\n\tattributeRules: function( element ) {\r\n\t\tvar rules = {},\r\n\t\t\t$element = $( element ),\r\n\t\t\ttype = element.getAttribute( \"type\" ),\r\n\t\t\tmethod, value;\r\n\r\n\t\tfor ( method in $.validator.methods ) {\r\n\r\n\t\t\t// Support for <input required> in both html5 and older browsers\r\n\t\t\tif ( method === \"required\" ) {\r\n\t\t\t\tvalue = element.getAttribute( method );\r\n\r\n\t\t\t\t// Some browsers return an empty string for the required attribute\r\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\r\n\t\t\t\tif ( value === \"\" ) {\r\n\t\t\t\t\tvalue = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Force non-HTML5 browsers to return bool\r\n\t\t\t\tvalue = !!value;\r\n\t\t\t} else {\r\n\t\t\t\tvalue = $element.attr( method );\r\n\t\t\t}\r\n\r\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\r\n\t\t}\r\n\r\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\r\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\r\n\t\t\tdelete rules.maxlength;\r\n\t\t}\r\n\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tdataRules: function( element ) {\r\n\t\tvar rules = {},\r\n\t\t\t$element = $( element ),\r\n\t\t\ttype = element.getAttribute( \"type\" ),\r\n\t\t\tmethod, value;\r\n\r\n\t\tfor ( method in $.validator.methods ) {\r\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\r\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\r\n\t\t}\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tstaticRules: function( element ) {\r\n\t\tvar rules = {},\r\n\t\t\tvalidator = $.data( element.form, \"validator\" );\r\n\r\n\t\tif ( validator.settings.rules ) {\r\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\r\n\t\t}\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tnormalizeRules: function( rules, element ) {\r\n\r\n\t\t// Handle dependency check\r\n\t\t$.each( rules, function( prop, val ) {\r\n\r\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\r\n\t\t\tif ( val === false ) {\r\n\t\t\t\tdelete rules[ prop ];\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif ( val.param || val.depends ) {\r\n\t\t\t\tvar keepRule = true;\r\n\t\t\t\tswitch ( typeof val.depends ) {\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif ( keepRule ) {\r\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\r\n\t\t\t\t\tdelete rules[ prop ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\t// Evaluate parameters\r\n\t\t$.each( rules, function( rule, parameter ) {\r\n\t\t\trules[ rule ] = $.isFunction( parameter ) && rule !== \"normalizer\" ? parameter( element ) : parameter;\r\n\t\t} );\r\n\r\n\t\t// Clean number parameters\r\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\r\n\t\t\tif ( rules[ this ] ) {\r\n\t\t\t\trules[ this ] = Number( rules[ this ] );\r\n\t\t\t}\r\n\t\t} );\r\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\r\n\t\t\tvar parts;\r\n\t\t\tif ( rules[ this ] ) {\r\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\r\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\r\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\r\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\r\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\tif ( $.validator.autoCreateRanges ) {\r\n\r\n\t\t\t// Auto-create ranges\r\n\t\t\tif ( rules.min != null && rules.max != null ) {\r\n\t\t\t\trules.range = [ rules.min, rules.max ];\r\n\t\t\t\tdelete rules.min;\r\n\t\t\t\tdelete rules.max;\r\n\t\t\t}\r\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\r\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\r\n\t\t\t\tdelete rules.minlength;\r\n\t\t\t\tdelete rules.maxlength;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rules;\r\n\t},\r\n\r\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\r\n\tnormalizeRule: function( data ) {\r\n\t\tif ( typeof data === \"string\" ) {\r\n\t\t\tvar transformed = {};\r\n\t\t\t$.each( data.split( /\\s/ ), function() {\r\n\t\t\t\ttransformed[ this ] = true;\r\n\t\t\t} );\r\n\t\t\tdata = transformed;\r\n\t\t}\r\n\t\treturn data;\r\n\t},\r\n\r\n\t// http://jqueryvalidation.org/jQuery.validator.addMethod/\r\n\taddMethod: function( name, method, message ) {\r\n\t\t$.validator.methods[ name ] = method;\r\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\r\n\t\tif ( method.length < 3 ) {\r\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\r\n\t\t}\r\n\t},\r\n\r\n\t// http://jqueryvalidation.org/jQuery.validator.methods/\r\n\tmethods: {\r\n\r\n\t\t// http://jqueryvalidation.org/required-method/\r\n\t\trequired: function( value, element, param ) {\r\n\r\n\t\t\t// Check if dependency is met\r\n\t\t\tif ( !this.depend( param, element ) ) {\r\n\t\t\t\treturn \"dependency-mismatch\";\r\n\t\t\t}\r\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\r\n\r\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\r\n\t\t\t\tvar val = $( element ).val();\r\n\t\t\t\treturn val && val.length > 0;\r\n\t\t\t}\r\n\t\t\tif ( this.checkable( element ) ) {\r\n\t\t\t\treturn this.getLength( value, element ) > 0;\r\n\t\t\t}\r\n\t\t\treturn value.length > 0;\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/email-method/\r\n\t\temail: function( value, element ) {\r\n\r\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\r\n\t\t\t// Retrieved 2014-01-14\r\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\r\n\t\t\t// Or use custom methods to implement your own email validation\r\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/url-method/\r\n\t\turl: function( value, element ) {\r\n\r\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\r\n\t\t\t// https://gist.github.com/dperini/729294\r\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\r\n\t\t\t// modified to allow protocol-relative URLs\r\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/date-method/\r\n\t\tdate: function( value, element ) {\r\n\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/dateISO-method/\r\n\t\tdateISO: function( value, element ) {\r\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/number-method/\r\n\t\tnumber: function( value, element ) {\r\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/digits-method/\r\n\t\tdigits: function( value, element ) {\r\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/minlength-method/\r\n\t\tminlength: function( value, element, param ) {\r\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\r\n\t\t\treturn this.optional( element ) || length >= param;\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/maxlength-method/\r\n\t\tmaxlength: function( value, element, param ) {\r\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\r\n\t\t\treturn this.optional( element ) || length <= param;\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/rangelength-method/\r\n\t\trangelength: function( value, element, param ) {\r\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\r\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/min-method/\r\n\t\tmin: function( value, element, param ) {\r\n\t\t\treturn this.optional( element ) || value >= param;\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/max-method/\r\n\t\tmax: function( value, element, param ) {\r\n\t\t\treturn this.optional( element ) || value <= param;\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/range-method/\r\n\t\trange: function( value, element, param ) {\r\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/step-method/\r\n\t\tstep: function( value, element, param ) {\r\n\t\t\tvar type = $( element ).attr( \"type\" ),\r\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\r\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\r\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\r\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() );\r\n\r\n\t\t\t// Works only for text, number and range input types\r\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\r\n\t\t\tif ( notSupported ) {\r\n\t\t\t\tthrow new Error( errorMessage );\r\n\t\t\t}\r\n\t\t\treturn this.optional( element ) || ( value % param === 0 );\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/equalTo-method/\r\n\t\tequalTo: function( value, element, param ) {\r\n\r\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\r\n\t\t\tvar target = $( param );\r\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\r\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\r\n\t\t\t\t\t$( element ).valid();\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t\treturn value === target.val();\r\n\t\t},\r\n\r\n\t\t// http://jqueryvalidation.org/remote-method/\r\n\t\tremote: function( value, element, param, method ) {\r\n\t\t\tif ( this.optional( element ) ) {\r\n\t\t\t\treturn \"dependency-mismatch\";\r\n\t\t\t}\r\n\r\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\r\n\r\n\t\t\tvar previous = this.previousValue( element, method ),\r\n\t\t\t\tvalidator, data, optionDataString;\r\n\r\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\r\n\t\t\t\tthis.settings.messages[ element.name ] = {};\r\n\t\t\t}\r\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\r\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\r\n\r\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\r\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\r\n\t\t\tif ( previous.old === optionDataString ) {\r\n\t\t\t\treturn previous.valid;\r\n\t\t\t}\r\n\r\n\t\t\tprevious.old = optionDataString;\r\n\t\t\tvalidator = this;\r\n\t\t\tthis.startRequest( element );\r\n\t\t\tdata = {};\r\n\t\t\tdata[ element.name ] = value;\r\n\t\t\t$.ajax( $.extend( true, {\r\n\t\t\t\tmode: \"abort\",\r\n\t\t\t\tport: \"validate\" + element.name,\r\n\t\t\t\tdataType: \"json\",\r\n\t\t\t\tdata: data,\r\n\t\t\t\tcontext: validator.currentForm,\r\n\t\t\t\tsuccess: function( response ) {\r\n\t\t\t\t\tvar valid = response === true || response === \"true\",\r\n\t\t\t\t\t\terrors, message, submitted;\r\n\r\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\r\n\t\t\t\t\tif ( valid ) {\r\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\r\n\t\t\t\t\t\tvalidator.resetInternals();\r\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\r\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\r\n\t\t\t\t\t\tvalidator.successList.push( element );\r\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\r\n\t\t\t\t\t\tvalidator.showErrors();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\terrors = {};\r\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\r\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\r\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\r\n\t\t\t\t\t\tvalidator.showErrors( errors );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tprevious.valid = valid;\r\n\t\t\t\t\tvalidator.stopRequest( element, valid );\r\n\t\t\t\t}\r\n\t\t\t}, param ) );\r\n\t\t\treturn \"pending\";\r\n\t\t}\r\n\t}\r\n\r\n} );\r\n\r\n// Ajax mode: abort\r\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\r\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\r\n\r\nvar pendingRequests = {},\r\n\tajax;\r\n\r\n// Use a prefilter if available (1.5+)\r\nif ( $.ajaxPrefilter ) {\r\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\r\n\t\tvar port = settings.port;\r\n\t\tif ( settings.mode === \"abort\" ) {\r\n\t\t\tif ( pendingRequests[ port ] ) {\r\n\t\t\t\tpendingRequests[ port ].abort();\r\n\t\t\t}\r\n\t\t\tpendingRequests[ port ] = xhr;\r\n\t\t}\r\n\t} );\r\n} else {\r\n\r\n\t// Proxy ajax\r\n\tajax = $.ajax;\r\n\t$.ajax = function( settings ) {\r\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\r\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\r\n\t\tif ( mode === \"abort\" ) {\r\n\t\t\tif ( pendingRequests[ port ] ) {\r\n\t\t\t\tpendingRequests[ port ].abort();\r\n\t\t\t}\r\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\r\n\t\t\treturn pendingRequests[ port ];\r\n\t\t}\r\n\t\treturn ajax.apply( this, arguments );\r\n\t};\r\n}\r\n\r\n}));\n/*!\r\n * jQuery Validation Plugin v1.15.0\r\n *\r\n * http://jqueryvalidation.org/\r\n *\r\n * Copyright (c) 2016 Jörn Zaefferer\r\n * Released under the MIT license\r\n */\r\n(function( factory ) {\r\n\tif ( typeof define === \"function\" && define.amd ) {\r\n\t\tdefine( [\"jquery\", \"./jquery.validate\"], factory );\r\n\t} else if (typeof module === \"object\" && module.exports) {\r\n\t\tmodule.exports = factory( require( \"jquery\" ) );\r\n\t} else {\r\n\t\tfactory( jQuery );\r\n\t}\r\n}(function( $ ) {\r\n\r\n( function() {\r\n\r\n\tfunction stripHtml( value ) {\r\n\r\n\t\t// Remove html tags and space chars\r\n\t\treturn value.replace( /<.[^<>]*?>/g, \" \" ).replace( / | /gi, \" \" )\r\n\r\n\t\t// Remove punctuation\r\n\t\t.replace( /[.(),;:!?%#$'\\\"_+=\\/\\-“â€â€™]*/g, \"\" );\r\n\t}\r\n\r\n\t$.validator.addMethod( \"maxWords\", function( value, element, params ) {\r\n\t\treturn this.optional( element ) || stripHtml( value ).match( /\\b\\w+\\b/g ).length <= params;\r\n\t}, $.validator.format( \"Please enter {0} words or less.\" ) );\r\n\r\n\t$.validator.addMethod( \"minWords\", function( value, element, params ) {\r\n\t\treturn this.optional( element ) || stripHtml( value ).match( /\\b\\w+\\b/g ).length >= params;\r\n\t}, $.validator.format( \"Please enter at least {0} words.\" ) );\r\n\r\n\t$.validator.addMethod( \"rangeWords\", function( value, element, params ) {\r\n\t\tvar valueStripped = stripHtml( value ),\r\n\t\t\tregex = /\\b\\w+\\b/g;\r\n\t\treturn this.optional( element ) || valueStripped.match( regex ).length >= params[ 0 ] && valueStripped.match( regex ).length <= params[ 1 ];\r\n\t}, $.validator.format( \"Please enter between {0} and {1} words.\" ) );\r\n\r\n}() );\r\n\r\n// Accept a value from a file input based on a required mimetype\r\n$.validator.addMethod( \"accept\", function( value, element, param ) {\r\n\r\n\t// Split mime on commas in case we have multiple types we can accept\r\n\tvar typeParam = typeof param === \"string\" ? param.replace( /\\s/g, \"\" ) : \"image/*\",\r\n\toptionalValue = this.optional( element ),\r\n\ti, file, regex;\r\n\r\n\t// Element is optional\r\n\tif ( optionalValue ) {\r\n\t\treturn optionalValue;\r\n\t}\r\n\r\n\tif ( $( element ).attr( \"type\" ) === \"file\" ) {\r\n\r\n\t\t// Escape string to be used in the regex\r\n\t\t// see: http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\r\n\t\t// Escape also \"/*\" as \"/.*\" as a wildcard\r\n\t\ttypeParam = typeParam.replace( /[\\-\\[\\]\\/\\{\\}\\(\\)\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\" ).replace( /,/g, \"|\" ).replace( \"\\/*\", \"/.*\" );\r\n\r\n\t\t// Check if the element has a FileList before checking each file\r\n\t\tif ( element.files && element.files.length ) {\r\n\t\t\tregex = new RegExp( \".?(\" + typeParam + \")$\", \"i\" );\r\n\t\t\tfor ( i = 0; i < element.files.length; i++ ) {\r\n\t\t\t\tfile = element.files[ i ];\r\n\r\n\t\t\t\t// Grab the mimetype from the loaded file, verify it matches\r\n\t\t\t\tif ( !file.type.match( regex ) ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Either return true because we've validated each file, or because the\r\n\t// browser does not support element.files and the FileList feature\r\n\treturn true;\r\n}, $.validator.format( \"Please enter a value with a valid mimetype.\" ) );\r\n\r\n$.validator.addMethod( \"alphanumeric\", function( value, element ) {\r\n\treturn this.optional( element ) || /^\\w+$/i.test( value );\r\n}, \"Letters, numbers, and underscores only please\" );\r\n\r\n/*\r\n * Dutch bank account numbers (not 'giro' numbers) have 9 digits\r\n * and pass the '11 check'.\r\n * We accept the notation with spaces, as that is common.\r\n * acceptable: 123456789 or 12 34 56 789\r\n */\r\n$.validator.addMethod( \"bankaccountNL\", function( value, element ) {\r\n\tif ( this.optional( element ) ) {\r\n\t\treturn true;\r\n\t}\r\n\tif ( !( /^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test( value ) ) ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// Now '11 check'\r\n\tvar account = value.replace( / /g, \"\" ), // Remove spaces\r\n\t\tsum = 0,\r\n\t\tlen = account.length,\r\n\t\tpos, factor, digit;\r\n\tfor ( pos = 0; pos < len; pos++ ) {\r\n\t\tfactor = len - pos;\r\n\t\tdigit = account.substring( pos, pos + 1 );\r\n\t\tsum = sum + factor * digit;\r\n\t}\r\n\treturn sum % 11 === 0;\r\n}, \"Please specify a valid bank account number\" );\r\n\r\n$.validator.addMethod( \"bankorgiroaccountNL\", function( value, element ) {\r\n\treturn this.optional( element ) ||\r\n\t\t\t( $.validator.methods.bankaccountNL.call( this, value, element ) ) ||\r\n\t\t\t( $.validator.methods.giroaccountNL.call( this, value, element ) );\r\n}, \"Please specify a valid bank or giro account number\" );\r\n\r\n/**\r\n * BIC is the business identifier code (ISO 9362). This BIC check is not a guarantee for authenticity.\r\n *\r\n * BIC pattern: BBBBCCLLbbb (8 or 11 characters long; bbb is optional)\r\n *\r\n * Validation is case-insensitive. Please make sure to normalize input yourself.\r\n *\r\n * BIC definition in detail:\r\n * - First 4 characters - bank code (only letters)\r\n * - Next 2 characters - ISO 3166-1 alpha-2 country code (only letters)\r\n * - Next 2 characters - location code (letters and digits)\r\n * a. shall not start with '0' or '1'\r\n * b. second character must be a letter ('O' is not allowed) or digit ('0' for test (therefore not allowed), '1' denoting passive participant, '2' typically reverse-billing)\r\n * - Last 3 characters - branch code, optional (shall not start with 'X' except in case of 'XXX' for primary office) (letters and digits)\r\n */\r\n$.validator.addMethod( \"bic\", function( value, element ) {\r\n return this.optional( element ) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test( value.toUpperCase() );\r\n}, \"Please specify a valid BIC code\" );\r\n\r\n/*\r\n * Código de identificación fiscal ( CIF ) is the tax identification code for Spanish legal entities\r\n * Further rules can be found in Spanish on http://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal\r\n */\r\n$.validator.addMethod( \"cifES\", function( value ) {\r\n\t\"use strict\";\r\n\r\n\tvar num = [],\r\n\t\tcontrolDigit, sum, i, count, tmp, secondDigit;\r\n\r\n\tvalue = value.toUpperCase();\r\n\r\n\t// Quick format test\r\n\tif ( !value.match( \"((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)\" ) ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfor ( i = 0; i < 9; i++ ) {\r\n\t\tnum[ i ] = parseInt( value.charAt( i ), 10 );\r\n\t}\r\n\r\n\t// Algorithm for checking CIF codes\r\n\tsum = num[ 2 ] + num[ 4 ] + num[ 6 ];\r\n\tfor ( count = 1; count < 8; count += 2 ) {\r\n\t\ttmp = ( 2 * num[ count ] ).toString();\r\n\t\tsecondDigit = tmp.charAt( 1 );\r\n\r\n\t\tsum += parseInt( tmp.charAt( 0 ), 10 ) + ( secondDigit === \"\" ? 0 : parseInt( secondDigit, 10 ) );\r\n\t}\r\n\r\n\t/* The first (position 1) is a letter following the following criteria:\r\n\t *\tA. Corporations\r\n\t *\tB. LLCs\r\n\t *\tC. General partnerships\r\n\t *\tD. Companies limited partnerships\r\n\t *\tE. Communities of goods\r\n\t *\tF. Cooperative Societies\r\n\t *\tG. Associations\r\n\t *\tH. Communities of homeowners in horizontal property regime\r\n\t *\tJ. Civil Societies\r\n\t *\tK. Old format\r\n\t *\tL. Old format\r\n\t *\tM. Old format\r\n\t *\tN. Nonresident entities\r\n\t *\tP. Local authorities\r\n\t *\tQ. Autonomous bodies, state or not, and the like, and congregations and religious institutions\r\n\t *\tR. Congregations and religious institutions (since 2008 ORDER EHA/451/2008)\r\n\t *\tS. Organs of State Administration and regions\r\n\t *\tV. Agrarian Transformation\r\n\t *\tW. Permanent establishments of non-resident in Spain\r\n\t */\r\n\tif ( /^[ABCDEFGHJNPQRSUVW]{1}/.test( value ) ) {\r\n\t\tsum += \"\";\r\n\t\tcontrolDigit = 10 - parseInt( sum.charAt( sum.length - 1 ), 10 );\r\n\t\tvalue += controlDigit;\r\n\t\treturn ( num[ 8 ].toString() === String.fromCharCode( 64 + controlDigit ) || num[ 8 ].toString() === value.charAt( value.length - 1 ) );\r\n\t}\r\n\r\n\treturn false;\r\n\r\n}, \"Please specify a valid CIF number.\" );\r\n\r\n/*\r\n * Brazillian CPF number (Cadastrado de Pessoas FÃsicas) is the equivalent of a Brazilian tax registration number.\r\n * CPF numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.\r\n */\r\n$.validator.addMethod( \"cpfBR\", function( value ) {\r\n\r\n\t// Removing special characters from value\r\n\tvalue = value.replace( /([~!@#$%^&*()_+=`{}\\[\\]\\-|\\\\:;'<>,.\\/? ])+/g, \"\" );\r\n\r\n\t// Checking value to have 11 digits only\r\n\tif ( value.length !== 11 ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar sum = 0,\r\n\t\tfirstCN, secondCN, checkResult, i;\r\n\r\n\tfirstCN = parseInt( value.substring( 9, 10 ), 10 );\r\n\tsecondCN = parseInt( value.substring( 10, 11 ), 10 );\r\n\r\n\tcheckResult = function( sum, cn ) {\r\n\t\tvar result = ( sum * 10 ) % 11;\r\n\t\tif ( ( result === 10 ) || ( result === 11 ) ) {\r\n\t\t\tresult = 0;\r\n\t\t}\r\n\t\treturn ( result === cn );\r\n\t};\r\n\r\n\t// Checking for dump data\r\n\tif ( value === \"\" ||\r\n\t\tvalue === \"00000000000\" ||\r\n\t\tvalue === \"11111111111\" ||\r\n\t\tvalue === \"22222222222\" ||\r\n\t\tvalue === \"33333333333\" ||\r\n\t\tvalue === \"44444444444\" ||\r\n\t\tvalue === \"55555555555\" ||\r\n\t\tvalue === \"66666666666\" ||\r\n\t\tvalue === \"77777777777\" ||\r\n\t\tvalue === \"88888888888\" ||\r\n\t\tvalue === \"99999999999\"\r\n\t) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// Step 1 - using first Check Number:\r\n\tfor ( i = 1; i <= 9; i++ ) {\r\n\t\tsum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 11 - i );\r\n\t}\r\n\r\n\t// If first Check Number (CN) is valid, move to Step 2 - using second Check Number:\r\n\tif ( checkResult( sum, firstCN ) ) {\r\n\t\tsum = 0;\r\n\t\tfor ( i = 1; i <= 10; i++ ) {\r\n\t\t\tsum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 12 - i );\r\n\t\t}\r\n\t\treturn checkResult( sum, secondCN );\r\n\t}\r\n\treturn false;\r\n\r\n}, \"Please specify a valid CPF number\" );\r\n\r\n// http://jqueryvalidation.org/creditcard-method/\r\n// based on http://en.wikipedia.org/wiki/Luhn_algorithm\r\n$.validator.addMethod( \"creditcard\", function( value, element ) {\r\n\tif ( this.optional( element ) ) {\r\n\t\treturn \"dependency-mismatch\";\r\n\t}\r\n\r\n\t// Accept only spaces, digits and dashes\r\n\tif ( /[^0-9 \\-]+/.test( value ) ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar nCheck = 0,\r\n\t\tnDigit = 0,\r\n\t\tbEven = false,\r\n\t\tn, cDigit;\r\n\r\n\tvalue = value.replace( /\\D/g, \"\" );\r\n\r\n\t// Basing min and max length on\r\n\t// http://developer.ean.com/general_info/Valid_Credit_Card_Types\r\n\tif ( value.length < 13 || value.length > 19 ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfor ( n = value.length - 1; n >= 0; n-- ) {\r\n\t\tcDigit = value.charAt( n );\r\n\t\tnDigit = parseInt( cDigit, 10 );\r\n\t\tif ( bEven ) {\r\n\t\t\tif ( ( nDigit *= 2 ) > 9 ) {\r\n\t\t\t\tnDigit -= 9;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tnCheck += nDigit;\r\n\t\tbEven = !bEven;\r\n\t}\r\n\r\n\treturn ( nCheck % 10 ) === 0;\r\n}, \"Please enter a valid credit card number.\" );\r\n\r\n/* NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator\r\n * Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0\r\n * Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)\r\n */\r\n$.validator.addMethod( \"creditcardtypes\", function( value, element, param ) {\r\n\tif ( /[^0-9\\-]+/.test( value ) ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvalue = value.replace( /\\D/g, \"\" );\r\n\r\n\tvar validTypes = 0x0000;\r\n\r\n\tif ( param.mastercard ) {\r\n\t\tvalidTypes |= 0x0001;\r\n\t}\r\n\tif ( param.visa ) {\r\n\t\tvalidTypes |= 0x0002;\r\n\t}\r\n\tif ( param.amex ) {\r\n\t\tvalidTypes |= 0x0004;\r\n\t}\r\n\tif ( param.dinersclub ) {\r\n\t\tvalidTypes |= 0x0008;\r\n\t}\r\n\tif ( param.enroute ) {\r\n\t\tvalidTypes |= 0x0010;\r\n\t}\r\n\tif ( param.discover ) {\r\n\t\tvalidTypes |= 0x0020;\r\n\t}\r\n\tif ( param.jcb ) {\r\n\t\tvalidTypes |= 0x0040;\r\n\t}\r\n\tif ( param.unknown ) {\r\n\t\tvalidTypes |= 0x0080;\r\n\t}\r\n\tif ( param.all ) {\r\n\t\tvalidTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;\r\n\t}\r\n\tif ( validTypes & 0x0001 && /^(5[12345])/.test( value ) ) { // Mastercard\r\n\t\treturn value.length === 16;\r\n\t}\r\n\tif ( validTypes & 0x0002 && /^(4)/.test( value ) ) { // Visa\r\n\t\treturn value.length === 16;\r\n\t}\r\n\tif ( validTypes & 0x0004 && /^(3[47])/.test( value ) ) { // Amex\r\n\t\treturn value.length === 15;\r\n\t}\r\n\tif ( validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test( value ) ) { // Dinersclub\r\n\t\treturn value.length === 14;\r\n\t}\r\n\tif ( validTypes & 0x0010 && /^(2(014|149))/.test( value ) ) { // Enroute\r\n\t\treturn value.length === 15;\r\n\t}\r\n\tif ( validTypes & 0x0020 && /^(6011)/.test( value ) ) { // Discover\r\n\t\treturn value.length === 16;\r\n\t}\r\n\tif ( validTypes & 0x0040 && /^(3)/.test( value ) ) { // Jcb\r\n\t\treturn value.length === 16;\r\n\t}\r\n\tif ( validTypes & 0x0040 && /^(2131|1800)/.test( value ) ) { // Jcb\r\n\t\treturn value.length === 15;\r\n\t}\r\n\tif ( validTypes & 0x0080 ) { // Unknown\r\n\t\treturn true;\r\n\t}\r\n\treturn false;\r\n}, \"Please enter a valid credit card number.\" );\r\n\r\n/**\r\n * Validates currencies with any given symbols by @jameslouiz\r\n * Symbols can be optional or required. Symbols required by default\r\n *\r\n * Usage examples:\r\n * currency: [\"£\", false] - Use false for soft currency validation\r\n * currency: [\"$\", false]\r\n * currency: [\"RM\", false] - also works with text based symbols such as \"RM\" - Malaysia Ringgit etc\r\n *\r\n * <input class=\"currencyInput\" name=\"currencyInput\">\r\n *\r\n * Soft symbol checking\r\n * currencyInput: {\r\n * currency: [\"$\", false]\r\n * }\r\n *\r\n * Strict symbol checking (default)\r\n * currencyInput: {\r\n * currency: \"$\"\r\n * //OR\r\n * currency: [\"$\", true]\r\n * }\r\n *\r\n * Multiple Symbols\r\n * currencyInput: {\r\n * currency: \"$,£,¢\"\r\n * }\r\n */\r\n$.validator.addMethod( \"currency\", function( value, element, param ) {\r\n var isParamString = typeof param === \"string\",\r\n symbol = isParamString ? param : param[ 0 ],\r\n soft = isParamString ? true : param[ 1 ],\r\n regex;\r\n\r\n symbol = symbol.replace( /,/g, \"\" );\r\n symbol = soft ? symbol + \"]\" : symbol + \"]?\";\r\n regex = \"^[\" + symbol + \"([1-9]{1}[0-9]{0,2}(\\\\,[0-9]{3})*(\\\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\\\.[0-9]{0,2})?|0(\\\\.[0-9]{0,2})?|(\\\\.[0-9]{1,2})?)$\";\r\n regex = new RegExp( regex );\r\n return this.optional( element ) || regex.test( value );\r\n\r\n}, \"Please specify a valid currency\" );\r\n\r\n$.validator.addMethod( \"dateFA\", function( value, element ) {\r\n\treturn this.optional( element ) || /^[1-4]\\d{3}\\/((0?[1-6]\\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value );\r\n}, $.validator.messages.date );\r\n\r\n/**\r\n * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.\r\n *\r\n * @example $.validator.methods.date(\"01/01/1900\")\r\n * @result true\r\n *\r\n * @example $.validator.methods.date(\"01/13/1990\")\r\n * @result false\r\n *\r\n * @example $.validator.methods.date(\"01.01.1900\")\r\n * @result false\r\n *\r\n * @example <input name=\"pippo\" class=\"{dateITA:true}\" />\r\n * @desc Declares an optional input element whose value must be a valid date.\r\n *\r\n * @name $.validator.methods.dateITA\r\n * @type Boolean\r\n * @cat Plugins/Validate/Methods\r\n */\r\n$.validator.addMethod( \"dateITA\", function( value, element ) {\r\n\tvar check = false,\r\n\t\tre = /^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$/,\r\n\t\tadata, gg, mm, aaaa, xdata;\r\n\tif ( re.test( value ) ) {\r\n\t\tadata = value.split( \"/\" );\r\n\t\tgg = parseInt( adata[ 0 ], 10 );\r\n\t\tmm = parseInt( adata[ 1 ], 10 );\r\n\t\taaaa = parseInt( adata[ 2 ], 10 );\r\n\t\txdata = new Date( Date.UTC( aaaa, mm - 1, gg, 12, 0, 0, 0 ) );\r\n\t\tif ( ( xdata.getUTCFullYear() === aaaa ) && ( xdata.getUTCMonth() === mm - 1 ) && ( xdata.getUTCDate() === gg ) ) {\r\n\t\t\tcheck = true;\r\n\t\t} else {\r\n\t\t\tcheck = false;\r\n\t\t}\r\n\t} else {\r\n\t\tcheck = false;\r\n\t}\r\n\treturn this.optional( element ) || check;\r\n}, $.validator.messages.date );\r\n\r\n$.validator.addMethod( \"dateNL\", function( value, element ) {\r\n\treturn this.optional( element ) || /^(0?[1-9]|[12]\\d|3[01])[\\.\\/\\-](0?[1-9]|1[012])[\\.\\/\\-]([12]\\d)?(\\d\\d)$/.test( value );\r\n}, $.validator.messages.date );\r\n\r\n// Older \"accept\" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept\r\n$.validator.addMethod( \"extension\", function( value, element, param ) {\r\n\tparam = typeof param === \"string\" ? param.replace( /,/g, \"|\" ) : \"png|jpe?g|gif\";\r\n\treturn this.optional( element ) || value.match( new RegExp( \"\\\\.(\" + param + \")$\", \"i\" ) );\r\n}, $.validator.format( \"Please enter a value with a valid extension.\" ) );\r\n\r\n/**\r\n * Dutch giro account numbers (not bank numbers) have max 7 digits\r\n */\r\n$.validator.addMethod( \"giroaccountNL\", function( value, element ) {\r\n\treturn this.optional( element ) || /^[0-9]{1,7}$/.test( value );\r\n}, \"Please specify a valid giro account number\" );\r\n\r\n/**\r\n * IBAN is the international bank account number.\r\n * It has a country - specific format, that is checked here too\r\n *\r\n * Validation is case-insensitive. Please make sure to normalize input yourself.\r\n */\r\n$.validator.addMethod( \"iban\", function( value, element ) {\r\n\r\n\t// Some quick simple tests to prevent needless work\r\n\tif ( this.optional( element ) ) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t// Remove spaces and to upper case\r\n\tvar iban = value.replace( / /g, \"\" ).toUpperCase(),\r\n\t\tibancheckdigits = \"\",\r\n\t\tleadingZeroes = true,\r\n\t\tcRest = \"\",\r\n\t\tcOperator = \"\",\r\n\t\tcountrycode, ibancheck, charAt, cChar, bbanpattern, bbancountrypatterns, ibanregexp, i, p;\r\n\r\n\t// Check the country code and find the country specific format\r\n\tcountrycode = iban.substring( 0, 2 );\r\n\tbbancountrypatterns = {\r\n\t\t\"AL\": \"\\\\d{8}[\\\\dA-Z]{16}\",\r\n\t\t\"AD\": \"\\\\d{8}[\\\\dA-Z]{12}\",\r\n\t\t\"AT\": \"\\\\d{16}\",\r\n\t\t\"AZ\": \"[\\\\dA-Z]{4}\\\\d{20}\",\r\n\t\t\"BE\": \"\\\\d{12}\",\r\n\t\t\"BH\": \"[A-Z]{4}[\\\\dA-Z]{14}\",\r\n\t\t\"BA\": \"\\\\d{16}\",\r\n\t\t\"BR\": \"\\\\d{23}[A-Z][\\\\dA-Z]\",\r\n\t\t\"BG\": \"[A-Z]{4}\\\\d{6}[\\\\dA-Z]{8}\",\r\n\t\t\"CR\": \"\\\\d{17}\",\r\n\t\t\"HR\": \"\\\\d{17}\",\r\n\t\t\"CY\": \"\\\\d{8}[\\\\dA-Z]{16}\",\r\n\t\t\"CZ\": \"\\\\d{20}\",\r\n\t\t\"DK\": \"\\\\d{14}\",\r\n\t\t\"DO\": \"[A-Z]{4}\\\\d{20}\",\r\n\t\t\"EE\": \"\\\\d{16}\",\r\n\t\t\"FO\": \"\\\\d{14}\",\r\n\t\t\"FI\": \"\\\\d{14}\",\r\n\t\t\"FR\": \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\",\r\n\t\t\"GE\": \"[\\\\dA-Z]{2}\\\\d{16}\",\r\n\t\t\"DE\": \"\\\\d{18}\",\r\n\t\t\"GI\": \"[A-Z]{4}[\\\\dA-Z]{15}\",\r\n\t\t\"GR\": \"\\\\d{7}[\\\\dA-Z]{16}\",\r\n\t\t\"GL\": \"\\\\d{14}\",\r\n\t\t\"GT\": \"[\\\\dA-Z]{4}[\\\\dA-Z]{20}\",\r\n\t\t\"HU\": \"\\\\d{24}\",\r\n\t\t\"IS\": \"\\\\d{22}\",\r\n\t\t\"IE\": \"[\\\\dA-Z]{4}\\\\d{14}\",\r\n\t\t\"IL\": \"\\\\d{19}\",\r\n\t\t\"IT\": \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\",\r\n\t\t\"KZ\": \"\\\\d{3}[\\\\dA-Z]{13}\",\r\n\t\t\"KW\": \"[A-Z]{4}[\\\\dA-Z]{22}\",\r\n\t\t\"LV\": \"[A-Z]{4}[\\\\dA-Z]{13}\",\r\n\t\t\"LB\": \"\\\\d{4}[\\\\dA-Z]{20}\",\r\n\t\t\"LI\": \"\\\\d{5}[\\\\dA-Z]{12}\",\r\n\t\t\"LT\": \"\\\\d{16}\",\r\n\t\t\"LU\": \"\\\\d{3}[\\\\dA-Z]{13}\",\r\n\t\t\"MK\": \"\\\\d{3}[\\\\dA-Z]{10}\\\\d{2}\",\r\n\t\t\"MT\": \"[A-Z]{4}\\\\d{5}[\\\\dA-Z]{18}\",\r\n\t\t\"MR\": \"\\\\d{23}\",\r\n\t\t\"MU\": \"[A-Z]{4}\\\\d{19}[A-Z]{3}\",\r\n\t\t\"MC\": \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\",\r\n\t\t\"MD\": \"[\\\\dA-Z]{2}\\\\d{18}\",\r\n\t\t\"ME\": \"\\\\d{18}\",\r\n\t\t\"NL\": \"[A-Z]{4}\\\\d{10}\",\r\n\t\t\"NO\": \"\\\\d{11}\",\r\n\t\t\"PK\": \"[\\\\dA-Z]{4}\\\\d{16}\",\r\n\t\t\"PS\": \"[\\\\dA-Z]{4}\\\\d{21}\",\r\n\t\t\"PL\": \"\\\\d{24}\",\r\n\t\t\"PT\": \"\\\\d{21}\",\r\n\t\t\"RO\": \"[A-Z]{4}[\\\\dA-Z]{16}\",\r\n\t\t\"SM\": \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\",\r\n\t\t\"SA\": \"\\\\d{2}[\\\\dA-Z]{18}\",\r\n\t\t\"RS\": \"\\\\d{18}\",\r\n\t\t\"SK\": \"\\\\d{20}\",\r\n\t\t\"SI\": \"\\\\d{15}\",\r\n\t\t\"ES\": \"\\\\d{20}\",\r\n\t\t\"SE\": \"\\\\d{20}\",\r\n\t\t\"CH\": \"\\\\d{5}[\\\\dA-Z]{12}\",\r\n\t\t\"TN\": \"\\\\d{20}\",\r\n\t\t\"TR\": \"\\\\d{5}[\\\\dA-Z]{17}\",\r\n\t\t\"AE\": \"\\\\d{3}\\\\d{16}\",\r\n\t\t\"GB\": \"[A-Z]{4}\\\\d{14}\",\r\n\t\t\"VG\": \"[\\\\dA-Z]{4}\\\\d{16}\"\r\n\t};\r\n\r\n\tbbanpattern = bbancountrypatterns[ countrycode ];\r\n\r\n\t// As new countries will start using IBAN in the\r\n\t// future, we only check if the countrycode is known.\r\n\t// This prevents false negatives, while almost all\r\n\t// false positives introduced by this, will be caught\r\n\t// by the checksum validation below anyway.\r\n\t// Strict checking should return FALSE for unknown\r\n\t// countries.\r\n\tif ( typeof bbanpattern !== \"undefined\" ) {\r\n\t\tibanregexp = new RegExp( \"^[A-Z]{2}\\\\d{2}\" + bbanpattern + \"$\", \"\" );\r\n\t\tif ( !( ibanregexp.test( iban ) ) ) {\r\n\t\t\treturn false; // Invalid country specific format\r\n\t\t}\r\n\t}\r\n\r\n\t// Now check the checksum, first convert to digits\r\n\tibancheck = iban.substring( 4, iban.length ) + iban.substring( 0, 4 );\r\n\tfor ( i = 0; i < ibancheck.length; i++ ) {\r\n\t\tcharAt = ibancheck.charAt( i );\r\n\t\tif ( charAt !== \"0\" ) {\r\n\t\t\tleadingZeroes = false;\r\n\t\t}\r\n\t\tif ( !leadingZeroes ) {\r\n\t\t\tibancheckdigits += \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\".indexOf( charAt );\r\n\t\t}\r\n\t}\r\n\r\n\t// Calculate the result of: ibancheckdigits % 97\r\n\tfor ( p = 0; p < ibancheckdigits.length; p++ ) {\r\n\t\tcChar = ibancheckdigits.charAt( p );\r\n\t\tcOperator = \"\" + cRest + \"\" + cChar;\r\n\t\tcRest = cOperator % 97;\r\n\t}\r\n\treturn cRest === 1;\r\n}, \"Please specify a valid IBAN\" );\r\n\r\n$.validator.addMethod( \"integer\", function( value, element ) {\r\n\treturn this.optional( element ) || /^-?\\d+$/.test( value );\r\n}, \"A positive or negative non-decimal number please\" );\r\n\r\n$.validator.addMethod( \"ipv4\", function( value, element ) {\r\n\treturn this.optional( element ) || /^(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/i.test( value );\r\n}, \"Please enter a valid IP v4 address.\" );\r\n\r\n$.validator.addMethod( \"ipv6\", function( value, element ) {\r\n\treturn this.optional( element ) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test( value );\r\n}, \"Please enter a valid IP v6 address.\" );\r\n\r\n$.validator.addMethod( \"lettersonly\", function( value, element ) {\r\n\treturn this.optional( element ) || /^[a-z]+$/i.test( value );\r\n}, \"Letters only please\" );\r\n\r\n$.validator.addMethod( \"letterswithbasicpunc\", function( value, element ) {\r\n\treturn this.optional( element ) || /^[a-z\\-.,()'\"\\s]+$/i.test( value );\r\n}, \"Letters or punctuation only please\" );\r\n\r\n$.validator.addMethod( \"mobileNL\", function( value, element ) {\r\n\treturn this.optional( element ) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)6((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test( value );\r\n}, \"Please specify a valid mobile number\" );\r\n\r\n/* For UK phone functions, do the following server side processing:\r\n * Compare original input with this RegEx pattern:\r\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\r\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\r\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\r\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\r\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\r\n */\r\n$.validator.addMethod( \"mobileUK\", function( phone_number, element ) {\r\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\r\n\treturn this.optional( element ) || phone_number.length > 9 &&\r\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?|0)7(?:[1345789]\\d{2}|624)\\s?\\d{3}\\s?\\d{3})$/ );\r\n}, \"Please specify a valid mobile number\" );\r\n\r\n/*\r\n * The número de identidad de extranjero ( NIE )is a code used to identify the non-nationals in Spain\r\n */\r\n$.validator.addMethod( \"nieES\", function( value ) {\r\n\t\"use strict\";\r\n\r\n\tvalue = value.toUpperCase();\r\n\r\n\t// Basic format test\r\n\tif ( !value.match( \"((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)\" ) ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// Test NIE\r\n\t//T\r\n\tif ( /^[T]{1}/.test( value ) ) {\r\n\t\treturn ( value[ 8 ] === /^[T]{1}[A-Z0-9]{8}$/.test( value ) );\r\n\t}\r\n\r\n\t//XYZ\r\n\tif ( /^[XYZ]{1}/.test( value ) ) {\r\n\t\treturn (\r\n\t\t\tvalue[ 8 ] === \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt(\r\n\t\t\t\tvalue.replace( \"X\", \"0\" )\r\n\t\t\t\t\t.replace( \"Y\", \"1\" )\r\n\t\t\t\t\t.replace( \"Z\", \"2\" )\r\n\t\t\t\t\t.substring( 0, 8 ) % 23\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\treturn false;\r\n\r\n}, \"Please specify a valid NIE number.\" );\r\n\r\n/*\r\n * The Número de Identificación Fiscal ( NIF ) is the way tax identification used in Spain for individuals\r\n */\r\n$.validator.addMethod( \"nifES\", function( value ) {\r\n\t\"use strict\";\r\n\r\n\tvalue = value.toUpperCase();\r\n\r\n\t// Basic format test\r\n\tif ( !value.match( \"((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)\" ) ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// Test NIF\r\n\tif ( /^[0-9]{8}[A-Z]{1}$/.test( value ) ) {\r\n\t\treturn ( \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt( value.substring( 8, 0 ) % 23 ) === value.charAt( 8 ) );\r\n\t}\r\n\r\n\t// Test specials NIF (starts with K, L or M)\r\n\tif ( /^[KLM]{1}/.test( value ) ) {\r\n\t\treturn ( value[ 8 ] === String.fromCharCode( 64 ) );\r\n\t}\r\n\r\n\treturn false;\r\n\r\n}, \"Please specify a valid NIF number.\" );\r\n\r\njQuery.validator.addMethod( \"notEqualTo\", function( value, element, param ) {\r\n\treturn this.optional( element ) || !$.validator.methods.equalTo.call( this, value, element, param );\r\n}, \"Please enter a different value, values must not be the same.\" );\r\n\r\n$.validator.addMethod( \"nowhitespace\", function( value, element ) {\r\n\treturn this.optional( element ) || /^\\S+$/i.test( value );\r\n}, \"No white space please\" );\r\n\r\n/**\r\n* Return true if the field value matches the given format RegExp\r\n*\r\n* @example $.validator.methods.pattern(\"AR1004\",element,/^AR\\d{4}$/)\r\n* @result true\r\n*\r\n* @example $.validator.methods.pattern(\"BR1004\",element,/^AR\\d{4}$/)\r\n* @result false\r\n*\r\n* @name $.validator.methods.pattern\r\n* @type Boolean\r\n* @cat Plugins/Validate/Methods\r\n*/\r\n$.validator.addMethod( \"pattern\", function( value, element, param ) {\r\n\tif ( this.optional( element ) ) {\r\n\t\treturn true;\r\n\t}\r\n\tif ( typeof param === \"string\" ) {\r\n\t\tparam = new RegExp( \"^(?:\" + param + \")$\" );\r\n\t}\r\n\treturn param.test( value );\r\n}, \"Invalid format.\" );\r\n\r\n/**\r\n * Dutch phone numbers have 10 digits (or 11 and start with +31).\r\n */\r\n$.validator.addMethod( \"phoneNL\", function( value, element ) {\r\n\treturn this.optional( element ) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)[1-9]((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test( value );\r\n}, \"Please specify a valid phone number.\" );\r\n\r\n/* For UK phone functions, do the following server side processing:\r\n * Compare original input with this RegEx pattern:\r\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\r\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\r\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\r\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\r\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\r\n */\r\n$.validator.addMethod( \"phoneUK\", function( phone_number, element ) {\r\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\r\n\treturn this.optional( element ) || phone_number.length > 9 &&\r\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?)|(?:\\(?0))(?:\\d{2}\\)?\\s?\\d{4}\\s?\\d{4}|\\d{3}\\)?\\s?\\d{3}\\s?\\d{3,4}|\\d{4}\\)?\\s?(?:\\d{5}|\\d{3}\\s?\\d{3})|\\d{5}\\)?\\s?\\d{4,5})$/ );\r\n}, \"Please specify a valid phone number\" );\r\n\r\n/**\r\n * Matches US phone number format\r\n *\r\n * where the area code may not start with 1 and the prefix may not start with 1\r\n * allows '-' or ' ' as a separator and allows parens around area code\r\n * some people may want to put a '1' in front of their number\r\n *\r\n * 1(212)-999-2345 or\r\n * 212 999 2344 or\r\n * 212-999-0983\r\n *\r\n * but not\r\n * 111-123-5434\r\n * and not\r\n * 212 123 4567\r\n */\r\n$.validator.addMethod( \"phoneUS\", function( phone_number, element ) {\r\n\tphone_number = phone_number.replace( /\\s+/g, \"\" );\r\n\treturn this.optional( element ) || phone_number.length > 9 &&\r\n\t\tphone_number.match( /^(\\+?1-?)?(\\([2-9]([02-9]\\d|1[02-9])\\)|[2-9]([02-9]\\d|1[02-9]))-?[2-9]([02-9]\\d|1[02-9])-?\\d{4}$/ );\r\n}, \"Please specify a valid phone number\" );\r\n\r\n/* For UK phone functions, do the following server side processing:\r\n * Compare original input with this RegEx pattern:\r\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\r\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\r\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\r\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\r\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\r\n */\r\n\r\n// Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers\r\n$.validator.addMethod( \"phonesUK\", function( phone_number, element ) {\r\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\r\n\treturn this.optional( element ) || phone_number.length > 9 &&\r\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?|0)(?:1\\d{8,9}|[23]\\d{9}|7(?:[1345789]\\d{8}|624\\d{6})))$/ );\r\n}, \"Please specify a valid uk phone number\" );\r\n\r\n/**\r\n * Matches a valid Canadian Postal Code\r\n *\r\n * @example jQuery.validator.methods.postalCodeCA( \"H0H 0H0\", element )\r\n * @result true\r\n *\r\n * @example jQuery.validator.methods.postalCodeCA( \"H0H0H0\", element )\r\n * @result false\r\n *\r\n * @name jQuery.validator.methods.postalCodeCA\r\n * @type Boolean\r\n * @cat Plugins/Validate/Methods\r\n */\r\n$.validator.addMethod( \"postalCodeCA\", function( value, element ) {\r\n\treturn this.optional( element ) || /^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJKLMNPRSTVWXYZ] *\\d[ABCEGHJKLMNPRSTVWXYZ]\\d$/i.test( value );\r\n}, \"Please specify a valid postal code\" );\r\n\r\n/*\r\n* Valida CEPs do brasileiros:\r\n*\r\n* Formatos aceitos:\r\n* 99999-999\r\n* 99.999-999\r\n* 99999999\r\n*/\r\n$.validator.addMethod( \"postalcodeBR\", function( cep_value, element ) {\r\n\treturn this.optional( element ) || /^\\d{2}.\\d{3}-\\d{3}?$|^\\d{5}-?\\d{3}?$/.test( cep_value );\r\n}, \"Informe um CEP válido.\" );\r\n\r\n/* Matches Italian postcode (CAP) */\r\n$.validator.addMethod( \"postalcodeIT\", function( value, element ) {\r\n\treturn this.optional( element ) || /^\\d{5}$/.test( value );\r\n}, \"Please specify a valid postal code\" );\r\n\r\n$.validator.addMethod( \"postalcodeNL\", function( value, element ) {\r\n\treturn this.optional( element ) || /^[1-9][0-9]{3}\\s?[a-zA-Z]{2}$/.test( value );\r\n}, \"Please specify a valid postal code\" );\r\n\r\n// Matches UK postcode. Does not match to UK Channel Islands that have their own postcodes (non standard UK)\r\n$.validator.addMethod( \"postcodeUK\", function( value, element ) {\r\n\treturn this.optional( element ) || /^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\\s?(0AA))$/i.test( value );\r\n}, \"Please specify a valid UK postcode\" );\r\n\r\n/*\r\n * Lets you say \"at least X inputs that match selector Y must be filled.\"\r\n *\r\n * The end result is that neither of these inputs:\r\n *\r\n *\t<input class=\"productinfo\" name=\"partnumber\">\r\n *\t<input class=\"productinfo\" name=\"description\">\r\n *\r\n *\t...will validate unless at least one of them is filled.\r\n *\r\n * partnumber:\t{require_from_group: [1,\".productinfo\"]},\r\n * description: {require_from_group: [1,\".productinfo\"]}\r\n *\r\n * options[0]: number of fields that must be filled in the group\r\n * options[1]: CSS selector that defines the group of conditionally required fields\r\n */\r\n$.validator.addMethod( \"require_from_group\", function( value, element, options ) {\r\n\tvar $fields = $( options[ 1 ], element.form ),\r\n\t\t$fieldsFirst = $fields.eq( 0 ),\r\n\t\tvalidator = $fieldsFirst.data( \"valid_req_grp\" ) ? $fieldsFirst.data( \"valid_req_grp\" ) : $.extend( {}, this ),\r\n\t\tisValid = $fields.filter( function() {\r\n\t\t\treturn validator.elementValue( this );\r\n\t\t} ).length >= options[ 0 ];\r\n\r\n\t// Store the cloned validator for future validation\r\n\t$fieldsFirst.data( \"valid_req_grp\", validator );\r\n\r\n\t// If element isn't being validated, run each require_from_group field's validation rules\r\n\tif ( !$( element ).data( \"being_validated\" ) ) {\r\n\t\t$fields.data( \"being_validated\", true );\r\n\t\t$fields.each( function() {\r\n\t\t\tvalidator.element( this );\r\n\t\t} );\r\n\t\t$fields.data( \"being_validated\", false );\r\n\t}\r\n\treturn isValid;\r\n}, $.validator.format( \"Please fill at least {0} of these fields.\" ) );\r\n\r\n/*\r\n * Lets you say \"either at least X inputs that match selector Y must be filled,\r\n * OR they must all be skipped (left blank).\"\r\n *\r\n * The end result, is that none of these inputs:\r\n *\r\n *\t<input class=\"productinfo\" name=\"partnumber\">\r\n *\t<input class=\"productinfo\" name=\"description\">\r\n *\t<input class=\"productinfo\" name=\"color\">\r\n *\r\n *\t...will validate unless either at least two of them are filled,\r\n *\tOR none of them are.\r\n *\r\n * partnumber:\t{skip_or_fill_minimum: [2,\".productinfo\"]},\r\n * description: {skip_or_fill_minimum: [2,\".productinfo\"]},\r\n * color:\t\t{skip_or_fill_minimum: [2,\".productinfo\"]}\r\n *\r\n * options[0]: number of fields that must be filled in the group\r\n * options[1]: CSS selector that defines the group of conditionally required fields\r\n *\r\n */\r\n$.validator.addMethod( \"skip_or_fill_minimum\", function( value, element, options ) {\r\n\tvar $fields = $( options[ 1 ], element.form ),\r\n\t\t$fieldsFirst = $fields.eq( 0 ),\r\n\t\tvalidator = $fieldsFirst.data( \"valid_skip\" ) ? $fieldsFirst.data( \"valid_skip\" ) : $.extend( {}, this ),\r\n\t\tnumberFilled = $fields.filter( function() {\r\n\t\t\treturn validator.elementValue( this );\r\n\t\t} ).length,\r\n\t\tisValid = numberFilled === 0 || numberFilled >= options[ 0 ];\r\n\r\n\t// Store the cloned validator for future validation\r\n\t$fieldsFirst.data( \"valid_skip\", validator );\r\n\r\n\t// If element isn't being validated, run each skip_or_fill_minimum field's validation rules\r\n\tif ( !$( element ).data( \"being_validated\" ) ) {\r\n\t\t$fields.data( \"being_validated\", true );\r\n\t\t$fields.each( function() {\r\n\t\t\tvalidator.element( this );\r\n\t\t} );\r\n\t\t$fields.data( \"being_validated\", false );\r\n\t}\r\n\treturn isValid;\r\n}, $.validator.format( \"Please either skip these fields or fill at least {0} of them.\" ) );\r\n\r\n/* Validates US States and/or Territories by @jdforsythe\r\n * Can be case insensitive or require capitalization - default is case insensitive\r\n * Can include US Territories or not - default does not\r\n * Can include US Military postal abbreviations (AA, AE, AP) - default does not\r\n *\r\n * Note: \"States\" always includes DC (District of Colombia)\r\n *\r\n * Usage examples:\r\n *\r\n * This is the default - case insensitive, no territories, no military zones\r\n * stateInput: {\r\n * caseSensitive: false,\r\n * includeTerritories: false,\r\n * includeMilitary: false\r\n * }\r\n *\r\n * Only allow capital letters, no territories, no military zones\r\n * stateInput: {\r\n * caseSensitive: false\r\n * }\r\n *\r\n * Case insensitive, include territories but not military zones\r\n * stateInput: {\r\n * includeTerritories: true\r\n * }\r\n *\r\n * Only allow capital letters, include territories and military zones\r\n * stateInput: {\r\n * caseSensitive: true,\r\n * includeTerritories: true,\r\n * includeMilitary: true\r\n * }\r\n *\r\n */\r\n$.validator.addMethod( \"stateUS\", function( value, element, options ) {\r\n\tvar isDefault = typeof options === \"undefined\",\r\n\t\tcaseSensitive = ( isDefault || typeof options.caseSensitive === \"undefined\" ) ? false : options.caseSensitive,\r\n\t\tincludeTerritories = ( isDefault || typeof options.includeTerritories === \"undefined\" ) ? false : options.includeTerritories,\r\n\t\tincludeMilitary = ( isDefault || typeof options.includeMilitary === \"undefined\" ) ? false : options.includeMilitary,\r\n\t\tregex;\r\n\r\n\tif ( !includeTerritories && !includeMilitary ) {\r\n\t\tregex = \"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\";\r\n\t} else if ( includeTerritories && includeMilitary ) {\r\n\t\tregex = \"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\";\r\n\t} else if ( includeTerritories ) {\r\n\t\tregex = \"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\";\r\n\t} else {\r\n\t\tregex = \"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\";\r\n\t}\r\n\r\n\tregex = caseSensitive ? new RegExp( regex ) : new RegExp( regex, \"i\" );\r\n\treturn this.optional( element ) || regex.test( value );\r\n}, \"Please specify a valid state\" );\r\n\r\n// TODO check if value starts with <, otherwise don't try stripping anything\r\n$.validator.addMethod( \"strippedminlength\", function( value, element, param ) {\r\n\treturn $( value ).text().length >= param;\r\n}, $.validator.format( \"Please enter at least {0} characters\" ) );\r\n\r\n$.validator.addMethod( \"time\", function( value, element ) {\r\n\treturn this.optional( element ) || /^([01]\\d|2[0-3]|[0-9])(:[0-5]\\d){1,2}$/.test( value );\r\n}, \"Please enter a valid time, between 00:00 and 23:59\" );\r\n\r\n$.validator.addMethod( \"time12h\", function( value, element ) {\r\n\treturn this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\\d){1,2}(\\ ?[AP]M))$/i.test( value );\r\n}, \"Please enter a valid time in 12-hour am/pm format\" );\r\n\r\n// Same as url, but TLD is optional\r\n$.validator.addMethod( \"url2\", function( value, element ) {\r\n\treturn this.optional( element ) || /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)*(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test( value );\r\n}, $.validator.messages.url );\r\n\r\n/**\r\n * Return true, if the value is a valid vehicle identification number (VIN).\r\n *\r\n * Works with all kind of text inputs.\r\n *\r\n * @example <input type=\"text\" size=\"20\" name=\"VehicleID\" class=\"{required:true,vinUS:true}\" />\r\n * @desc Declares a required input element whose value must be a valid vehicle identification number.\r\n *\r\n * @name $.validator.methods.vinUS\r\n * @type Boolean\r\n * @cat Plugins/Validate/Methods\r\n */\r\n$.validator.addMethod( \"vinUS\", function( v ) {\r\n\tif ( v.length !== 17 ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar LL = [ \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"J\", \"K\", \"L\", \"M\", \"N\", \"P\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\" ],\r\n\t\tVL = [ 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9 ],\r\n\t\tFL = [ 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2 ],\r\n\t\trs = 0,\r\n\t\ti, n, d, f, cd, cdv;\r\n\r\n\tfor ( i = 0; i < 17; i++ ) {\r\n\t\tf = FL[ i ];\r\n\t\td = v.slice( i, i + 1 );\r\n\t\tif ( i === 8 ) {\r\n\t\t\tcdv = d;\r\n\t\t}\r\n\t\tif ( !isNaN( d ) ) {\r\n\t\t\td *= f;\r\n\t\t} else {\r\n\t\t\tfor ( n = 0; n < LL.length; n++ ) {\r\n\t\t\t\tif ( d.toUpperCase() === LL[ n ] ) {\r\n\t\t\t\t\td = VL[ n ];\r\n\t\t\t\t\td *= f;\r\n\t\t\t\t\tif ( isNaN( cdv ) && n === 8 ) {\r\n\t\t\t\t\t\tcdv = LL[ n ];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\trs += d;\r\n\t}\r\n\tcd = rs % 11;\r\n\tif ( cd === 10 ) {\r\n\t\tcd = \"X\";\r\n\t}\r\n\tif ( cd === cdv ) {\r\n\t\treturn true;\r\n\t}\r\n\treturn false;\r\n}, \"The specified vehicle identification number (VIN) is invalid.\" );\r\n\r\n$.validator.addMethod( \"zipcodeUS\", function( value, element ) {\r\n\treturn this.optional( element ) || /^\\d{5}(-\\d{4})?$/.test( value );\r\n}, \"The specified US ZIP Code is invalid\" );\r\n\r\n$.validator.addMethod( \"ziprange\", function( value, element ) {\r\n\treturn this.optional( element ) || /^90[2-5]\\d\\{2\\}-\\d{4}$/.test( value );\r\n}, \"Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx\" );\r\n\r\n}));\n/* jshint browser:true,jquery:true */\r\n\r\n;(function($, window, document, undefined) {\r\n \"use strict\";\r\n /*jshint scripturl:true, -W084*/\r\n\r\n var $window = $(window), $document = $(document);\r\n\r\n var TARGETS = {\r\n 'Facebook': 'https://www.facebook.com/sharer/sharer.php?u={$url}&t={$title}',\r\n 'Twitter': 'https://twitter.com/intent/tweet?text={$title}&url={$url}&via={$via}',\r\n 'LinkedIn': 'https://www.linkedin.com/shareArticle?mini=true&url={$url}&title={$title}',\r\n 'Google+': 'https://plus.google.com/share?url={$url}',\r\n 'OilPro': 'http://oilpro.com/links/submit?url={$url}',\r\n 'Print': 'javascript:window.print()',\r\n 'Email': 'mailto:?subject={$title}&body={$url}'\r\n };\r\n\r\n var PLUGIN_NAME = 'BEShare';\r\n var defaults = {\r\n 'type': 'popup',\r\n 'targets': ['Facebook', 'Twitter'],\r\n 'class': PLUGIN_NAME,\r\n 'prefix': 'icon-',\r\n 'suffix': '',\r\n 'width': '626',\r\n 'height': '436',\r\n 'via': '',\r\n 'onShare': null,\r\n 'altLink': null\r\n };\r\n\r\n // Mini template engine.\r\n function template(tpl, data) {\r\n var re = /\\{\\$([^}]+)?\\}/g, match;\r\n while(match = re.exec(tpl)) {\r\n tpl = tpl.replace(match[0], data[match[1]]);\r\n }\r\n return tpl;\r\n }\r\n\r\n function move($element, offset) {\r\n if (!offset) {\r\n offset = { \r\n 'top': '-9999px',\r\n 'left': '-9999px'\r\n };\r\n }\r\n $element.css(offset);\r\n }\r\n\r\n function Plugin(element, options) {\r\n this.element = $(element);\r\n this.options = $.extend({}, defaults, options);\r\n \r\n this._name = PLUGIN_NAME;\r\n this.init();\r\n }\r\n\r\n Plugin.prototype.init = function() {\r\n var options = this.options, $container;\r\n if (options.type === \"inline\") {\r\n $container = this.element;\r\n } else {\r\n $container = $('<div/>');\r\n $container.appendTo(document.body);\r\n $container.css({\r\n 'position': 'absolute'\r\n });\r\n move($container);\r\n }\r\n this.container = $container;\r\n $container.addClass(options['class']);\r\n\r\n var targets = options.targets;\r\n if ($.type(targets) === 'string') {\r\n // @TODO: Parse string 'ServiceA,ServiceB|ServiceC,ServiceD'\r\n }\r\n\r\n var i, total = targets.length;\r\n for (i = 0; i < total; i++) {\r\n this.add(targets[i]);\r\n }\r\n\r\n if (options.type === 'popup') {\r\n this.element.on('click.'+PLUGIN_NAME, function(event) {\r\n // Stop the event from bubbling up to the below handler.\r\n event.stopPropagation();\r\n\r\n var position = $(this).offset();\r\n\r\n move($container, position);\r\n $container.addClass('active');\r\n return false;\r\n });\r\n\r\n // Clicking anywhere outside will close the popup.\r\n $document.on('click.'+PLUGIN_NAME, function(event) { \r\n if(!$(event.target).closest('.'+options['class']).length) {\r\n if ($container.hasClass('active')) {\r\n $container.removeClass('active');\r\n move($container);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n Plugin.prototype.add = function(targetName) {\r\n var options = this.options;\r\n var target = TARGETS[targetName];\r\n if (!target) {\r\n // Any string not of a target is output as is.\r\n this.container.append(targetName);\r\n return this;\r\n }\r\n\r\n var builtUrl = this.element.attr('href') || document.location.href;\r\n\r\n if(options.altLink) {\r\n builtUrl = builtUrl + \"/\" + (this.element.attr('rel') || '');\r\n }\r\n\r\n var url = template(target, {\r\n url: encodeURIComponent(builtUrl),\r\n title: encodeURIComponent(document.title),\r\n via: encodeURIComponent(options.via)\r\n });\r\n\r\n var $link = $('<a href=\"' + url + '\"><span>' + targetName + '</span></a>');\r\n \r\n switch (targetName) {\r\n case 'Print':\r\n $link.attr('title', 'Print this page'); \r\n break;\r\n case 'Email':\r\n $link.attr('title', 'Share this page via Email');\r\n break;\r\n default:\r\n $link.attr('title', 'Share this page on ' + targetName); \r\n break;\r\n }\r\n\r\n if (url.indexOf('http') === 0) {\r\n // External links\r\n $link.attr('target', '_blank');\r\n $link.on('click.'+PLUGIN_NAME, function() {\r\n window.open(url, PLUGIN_NAME, 'toolbar=0,status=0,width='+options.width+',height='+options.height);\r\n\r\n if (options.onShare) {\r\n options.onShare(targetName);\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n $link.addClass(options.prefix + targetName.toLowerCase().replace('+','plus') + options.suffix);\r\n $link.appendTo(this.container);\r\n return this;\r\n };\r\n\r\n $.fn[PLUGIN_NAME] = function(options) {\r\n return this.each(function() {\r\n if (!$.data(this, 'plugin_' + PLUGIN_NAME)) {\r\n $.data(this, 'plugin_' + PLUGIN_NAME, \r\n new Plugin( this, options ));\r\n }\r\n });\r\n };\r\n})(jQuery, window, document);\r\n\n/**\r\n * tooltipster http://iamceege.github.io/tooltipster/\r\n * A rockin' custom tooltip jQuery plugin\r\n * Developed by Caleb Jacob and Louis Ameline\r\n * MIT license\r\n */\r\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module unless amdModuleId is set\n define([\"jquery\"], function (a0) {\n return (factory(a0));\n });\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory(require(\"jquery\"));\n } else {\n factory(jQuery);\n }\n}(this, function ($) {\n\n// This file will be UMDified by a build task.\n\nvar defaults = {\n\t\tanimation: 'fade',\n\t\tanimationDuration: 350,\n\t\tcontent: null,\n\t\tcontentAsHTML: false,\n\t\tcontentCloning: false,\n\t\tdebug: true,\n\t\tdelay: 300,\n\t\tdelayTouch: [300, 500],\n\t\tfunctionInit: null,\n\t\tfunctionBefore: null,\n\t\tfunctionReady: null,\n\t\tfunctionAfter: null,\n\t\tfunctionFormat: null,\n\t\tIEmin: 6,\n\t\tinteractive: false,\n\t\tmultiple: false,\n\t\t// must be 'body' for now, or an element positioned at (0, 0)\n\t\t// in the document, typically like the very top views of an app.\n\t\tparent: 'body',\n\t\tplugins: ['sideTip'],\n\t\trepositionOnScroll: false,\n\t\trestoration: 'none',\n\t\tselfDestruction: true,\n\t\ttheme: [],\n\t\ttimer: 0,\n\t\ttrackerInterval: 500,\n\t\ttrackOrigin: false,\n\t\ttrackTooltip: false,\n\t\ttrigger: 'hover',\n\t\ttriggerClose: {\n\t\t\tclick: false,\n\t\t\tmouseleave: false,\n\t\t\toriginClick: false,\n\t\t\tscroll: false,\n\t\t\ttap: false,\n\t\t\ttouchleave: false\n\t\t},\n\t\ttriggerOpen: {\n\t\t\tclick: false,\n\t\t\tmouseenter: false,\n\t\t\ttap: false,\n\t\t\ttouchstart: false\n\t\t},\n\t\tupdateAnimation: 'rotate',\n\t\tzIndex: 9999999\n\t},\n\t// we'll avoid using the 'window' global as a good practice but npm's\n\t// jquery@<2.1.0 package actually requires a 'window' global, so not sure\n\t// it's useful at all\n\twin = (typeof window != 'undefined') ? window : null,\n\t// env will be proxied by the core for plugins to have access its properties\n\tenv = {\n\t\t// detect if this device can trigger touch events. Better have a false\n\t\t// positive (unused listeners, that's ok) than a false negative.\n\t\t// https://github.com/Modernizr/Modernizr/blob/master/feature-detects/touchevents.js\n\t\t// http://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript\n\t\thasTouchCapability: !!(\n\t\t\twin\n\t\t\t&&\t(\t'ontouchstart' in win\n\t\t\t\t||\t(win.DocumentTouch && win.document instanceof win.DocumentTouch)\n\t\t\t\t||\twin.navigator.maxTouchPoints\n\t\t\t)\n\t\t),\n\t\thasTransitions: transitionSupport(),\n\t\tIE: false,\n\t\t// don't set manually, it will be updated by a build task after the manifest\n\t\tsemVer: '4.1.7',\n\t\twindow: win\n\t},\n\tcore = function() {\n\t\t\n\t\t// core variables\n\t\t\n\t\t// the core emitters\n\t\tthis.__$emitterPrivate = $({});\n\t\tthis.__$emitterPublic = $({});\n\t\tthis.__instancesLatestArr = [];\n\t\t// collects plugin constructors\n\t\tthis.__plugins = {};\n\t\t// proxy env variables for plugins who might use them\n\t\tthis._env = env;\n\t};\n\n// core methods\ncore.prototype = {\n\t\n\t/**\n\t * A function to proxy the public methods of an object onto another\n\t *\n\t * @param {object} constructor The constructor to bridge\n\t * @param {object} obj The object that will get new methods (an instance or the core)\n\t * @param {string} pluginName A plugin name for the console log message\n\t * @return {core}\n\t * @private\n\t */\n\t__bridge: function(constructor, obj, pluginName) {\n\t\t\n\t\t// if it's not already bridged\n\t\tif (!obj[pluginName]) {\n\t\t\t\n\t\t\tvar fn = function() {};\n\t\t\tfn.prototype = constructor;\n\t\t\t\n\t\t\tvar pluginInstance = new fn();\n\t\t\t\n\t\t\t// the _init method has to exist in instance constructors but might be missing\n\t\t\t// in core constructors\n\t\t\tif (pluginInstance.__init) {\n\t\t\t\tpluginInstance.__init(obj);\n\t\t\t}\n\t\t\t\n\t\t\t$.each(constructor, function(methodName, fn) {\n\t\t\t\t\n\t\t\t\t// don't proxy \"private\" methods, only \"protected\" and public ones\n\t\t\t\tif (methodName.indexOf('__') != 0) {\n\t\t\t\t\t\n\t\t\t\t\t// if the method does not exist yet\n\t\t\t\t\tif (!obj[methodName]) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tobj[methodName] = function() {\n\t\t\t\t\t\t\treturn pluginInstance[methodName].apply(pluginInstance, Array.prototype.slice.apply(arguments));\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t\t// remember to which plugin this method corresponds (several plugins may\n\t\t\t\t\t\t// have methods of the same name, we need to be sure)\n\t\t\t\t\t\tobj[methodName].bridged = pluginInstance;\n\t\t\t\t\t}\n\t\t\t\t\telse if (defaults.debug) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tconsole.log('The '+ methodName +' method of the '+ pluginName\n\t\t\t\t\t\t\t+' plugin conflicts with another plugin or native methods');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tobj[pluginName] = pluginInstance;\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For mockup in Node env if need be, for testing purposes\n\t *\n\t * @return {core}\n\t * @private\n\t */\n\t__setWindow: function(window) {\n\t\tenv.window = window;\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Returns a ruler, a tool to help measure the size of a tooltip under\n\t * various settings. Meant for plugins\n\t * \n\t * @see Ruler\n\t * @return {object} A Ruler instance\n\t * @protected\n\t */\n\t_getRuler: function($tooltip) {\n\t\treturn new Ruler($tooltip);\n\t},\n\t\n\t/**\n\t * For internal use by plugins, if needed\n\t *\n\t * @return {core}\n\t * @protected\n\t */\n\t_off: function() {\n\t\tthis.__$emitterPrivate.off.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For internal use by plugins, if needed\n\t *\n\t * @return {core}\n\t * @protected\n\t */\n\t_on: function() {\n\t\tthis.__$emitterPrivate.on.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For internal use by plugins, if needed\n\t *\n\t * @return {core}\n\t * @protected\n\t */\n\t_one: function() {\n\t\tthis.__$emitterPrivate.one.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Returns (getter) or adds (setter) a plugin\n\t *\n\t * @param {string|object} plugin Provide a string (in the full form\n\t * \"namespace.name\") to use as as getter, an object to use as a setter\n\t * @return {object|core}\n\t * @protected\n\t */\n\t_plugin: function(plugin) {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\t// getter\n\t\tif (typeof plugin == 'string') {\n\t\t\t\n\t\t\tvar pluginName = plugin,\n\t\t\t\tp = null;\n\t\t\t\n\t\t\t// if the namespace is provided, it's easy to search\n\t\t\tif (pluginName.indexOf('.') > 0) {\n\t\t\t\tp = self.__plugins[pluginName];\n\t\t\t}\n\t\t\t// otherwise, return the first name that matches\n\t\t\telse {\n\t\t\t\t$.each(self.__plugins, function(i, plugin) {\n\t\t\t\t\t\n\t\t\t\t\tif (plugin.name.substring(plugin.name.length - pluginName.length - 1) == '.'+ pluginName) {\n\t\t\t\t\t\tp = plugin;\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\n\t\t\treturn p;\n\t\t}\n\t\t// setter\n\t\telse {\n\t\t\t\n\t\t\t// force namespaces\n\t\t\tif (plugin.name.indexOf('.') < 0) {\n\t\t\t\tthrow new Error('Plugins must be namespaced');\n\t\t\t}\n\t\t\t\n\t\t\tself.__plugins[plugin.name] = plugin;\n\t\t\t\n\t\t\t// if the plugin has core features\n\t\t\tif (plugin.core) {\n\t\t\t\t\n\t\t\t\t// bridge non-private methods onto the core to allow new core methods\n\t\t\t\tself.__bridge(plugin.core, self, plugin.name);\n\t\t\t}\n\t\t\t\n\t\t\treturn this;\n\t\t}\n\t},\n\t\n\t/**\n\t * Trigger events on the core emitters\n\t * \n\t * @returns {core}\n\t * @protected\n\t */\n\t_trigger: function() {\n\t\t\n\t\tvar args = Array.prototype.slice.apply(arguments);\n\t\t\n\t\tif (typeof args[0] == 'string') {\n\t\t\targs[0] = { type: args[0] };\n\t\t}\n\t\t\n\t\t// note: the order of emitters matters\n\t\tthis.__$emitterPrivate.trigger.apply(this.__$emitterPrivate, args);\n\t\tthis.__$emitterPublic.trigger.apply(this.__$emitterPublic, args);\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Returns instances of all tooltips in the page or an a given element\n\t *\n\t * @param {string|HTML object collection} selector optional Use this\n\t * parameter to restrict the set of objects that will be inspected\n\t * for the retrieval of instances. By default, all instances in the\n\t * page are returned.\n\t * @return {array} An array of instance objects\n\t * @public\n\t */\n\tinstances: function(selector) {\n\t\t\n\t\tvar instances = [],\n\t\t\tsel = selector || '.tooltipstered';\n\t\t\n\t\t$(sel).each(function() {\n\t\t\t\n\t\t\tvar $this = $(this),\n\t\t\t\tns = $this.data('tooltipster-ns');\n\t\t\t\n\t\t\tif (ns) {\n\t\t\t\t\n\t\t\t\t$.each(ns, function(i, namespace) {\n\t\t\t\t\tinstances.push($this.data(namespace));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn instances;\n\t},\n\t\n\t/**\n\t * Returns the Tooltipster objects generated by the last initializing call\n\t *\n\t * @return {array} An array of instance objects\n\t * @public\n\t */\n\tinstancesLatest: function() {\n\t\treturn this.__instancesLatestArr;\n\t},\n\t\n\t/**\n\t * For public use only, not to be used by plugins (use ::_off() instead)\n\t *\n\t * @return {core}\n\t * @public\n\t */\n\toff: function() {\n\t\tthis.__$emitterPublic.off.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For public use only, not to be used by plugins (use ::_on() instead)\n\t *\n\t * @return {core}\n\t * @public\n\t */\n\ton: function() {\n\t\tthis.__$emitterPublic.on.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For public use only, not to be used by plugins (use ::_one() instead)\n\t * \n\t * @return {core}\n\t * @public\n\t */\n\tone: function() {\n\t\tthis.__$emitterPublic.one.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Returns all HTML elements which have one or more tooltips\n\t *\n\t * @param {string} selector optional Use this to restrict the results\n\t * to the descendants of an element\n\t * @return {array} An array of HTML elements\n\t * @public\n\t */\n\torigins: function(selector) {\n\t\t\n\t\tvar sel = selector ?\n\t\t\tselector +' ' :\n\t\t\t'';\n\t\t\n\t\treturn $(sel +'.tooltipstered').toArray();\n\t},\n\t\n\t/**\n\t * Change default options for all future instances\n\t *\n\t * @param {object} d The options that should be made defaults\n\t * @return {core}\n\t * @public\n\t */\n\tsetDefaults: function(d) {\n\t\t$.extend(defaults, d);\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For users to trigger their handlers on the public emitter\n\t * \n\t * @returns {core}\n\t * @public\n\t */\n\ttriggerHandler: function() {\n\t\tthis.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t}\n};\n\n// $.tooltipster will be used to call core methods\n$.tooltipster = new core();\n\n// the Tooltipster instance class (mind the capital T)\n$.Tooltipster = function(element, options) {\n\t\n\t// list of instance variables\n\t\n\t// stack of custom callbacks provided as parameters to API methods\n\tthis.__callbacks = {\n\t\tclose: [],\n\t\topen: []\n\t};\n\t// the schedule time of DOM removal\n\tthis.__closingTime;\n\t// this will be the user content shown in the tooltip. A capital \"C\" is used\n\t// because there is also a method called content()\n\tthis.__Content;\n\t// for the size tracker\n\tthis.__contentBcr;\n\t// to disable the tooltip once the destruction has begun\n\tthis.__destroyed = false;\n\tthis.__destroying = false;\n\t// we can't emit directly on the instance because if a method with the same\n\t// name as the event exists, it will be called by jQuery. Se we use a plain\n\t// object as emitter. This emitter is for internal use by plugins,\n\t// if needed.\n\tthis.__$emitterPrivate = $({});\n\t// this emitter is for the user to listen to events without risking to mess\n\t// with our internal listeners\n\tthis.__$emitterPublic = $({});\n\tthis.__enabled = true;\n\t// the reference to the gc interval\n\tthis.__garbageCollector;\n\t// various position and size data recomputed before each repositioning\n\tthis.__Geometry;\n\t// the tooltip position, saved after each repositioning by a plugin\n\tthis.__lastPosition;\n\t// a unique namespace per instance\n\tthis.__namespace = 'tooltipster-'+ Math.round(Math.random()*1000000);\n\tthis.__options;\n\t// will be used to support origins in scrollable areas\n\tthis.__$originParents;\n\tthis.__pointerIsOverOrigin = false;\n\t// to remove themes if needed\n\tthis.__previousThemes = [];\n\t// the state can be either: appearing, stable, disappearing, closed\n\tthis.__state = 'closed';\n\t// timeout references\n\tthis.__timeouts = {\n\t\tclose: [],\n\t\topen: null\n\t};\n\t// store touch events to be able to detect emulated mouse events\n\tthis.__touchEvents = [];\n\t// the reference to the tracker interval\n\tthis.__tracker = null;\n\t// the element to which this tooltip is associated\n\tthis._$origin;\n\t// this will be the tooltip element (jQuery wrapped HTML element).\n\t// It's the job of a plugin to create it and append it to the DOM\n\tthis._$tooltip;\n\t\n\t// launch\n\tthis.__init(element, options);\n};\n\n$.Tooltipster.prototype = {\n\t\n\t/**\n\t * @param origin\n\t * @param options\n\t * @private\n\t */\n\t__init: function(origin, options) {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\tself._$origin = $(origin);\n\t\tself.__options = $.extend(true, {}, defaults, options);\n\t\t\n\t\t// some options may need to be reformatted\n\t\tself.__optionsFormat();\n\t\t\n\t\t// don't run on old IE if asked no to\n\t\tif (\t!env.IE\n\t\t\t||\tenv.IE >= self.__options.IEmin\n\t\t) {\n\t\t\t\n\t\t\t// note: the content is null (empty) by default and can stay that\n\t\t\t// way if the plugin remains initialized but not fed any content. The\n\t\t\t// tooltip will just not appear.\n\t\t\t\n\t\t\t// let's save the initial value of the title attribute for later\n\t\t\t// restoration if need be.\n\t\t\tvar initialTitle = null;\n\t\t\t\n\t\t\t// it will already have been saved in case of multiple tooltips\n\t\t\tif (self._$origin.data('tooltipster-initialTitle') === undefined) {\n\t\t\t\t\n\t\t\t\tinitialTitle = self._$origin.attr('title');\n\t\t\t\t\n\t\t\t\t// we do not want initialTitle to be \"undefined\" because\n\t\t\t\t// of how jQuery's .data() method works\n\t\t\t\tif (initialTitle === undefined) initialTitle = null;\n\t\t\t\t\n\t\t\t\tself._$origin.data('tooltipster-initialTitle', initialTitle);\n\t\t\t}\n\t\t\t\n\t\t\t// If content is provided in the options, it has precedence over the\n\t\t\t// title attribute.\n\t\t\t// Note: an empty string is considered content, only 'null' represents\n\t\t\t// the absence of content.\n\t\t\t// Also, an existing title=\"\" attribute will result in an empty string\n\t\t\t// content\n\t\t\tif (self.__options.content !== null) {\n\t\t\t\tself.__contentSet(self.__options.content);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t\n\t\t\t\tvar selector = self._$origin.attr('data-tooltip-content'),\n\t\t\t\t\t$el;\n\t\t\t\t\n\t\t\t\tif (selector){\n\t\t\t\t\t$el = $(selector);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif ($el && $el[0]) {\n\t\t\t\t\tself.__contentSet($el.first());\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tself.__contentSet(initialTitle);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tself._$origin\n\t\t\t\t// strip the title off of the element to prevent the default tooltips\n\t\t\t\t// from popping up\n\t\t\t\t.removeAttr('title')\n\t\t\t\t// to be able to find all instances on the page later (upon window\n\t\t\t\t// events in particular)\n\t\t\t\t.addClass('tooltipstered');\n\t\t\t\n\t\t\t// set listeners on the origin\n\t\t\tself.__prepareOrigin();\n\t\t\t\n\t\t\t// set the garbage collector\n\t\t\tself.__prepareGC();\n\t\t\t\n\t\t\t// init plugins\n\t\t\t$.each(self.__options.plugins, function(i, pluginName) {\n\t\t\t\tself._plug(pluginName);\n\t\t\t});\n\t\t\t\n\t\t\t// to detect swiping\n\t\t\tif (env.hasTouchCapability) {\n\t\t\t\t$('body').on('touchmove.'+ self.__namespace +'-triggerOpen', function(event) {\n\t\t\t\t\tself._touchRecordEvent(event);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tself\n\t\t\t\t// prepare the tooltip when it gets created. This event must\n\t\t\t\t// be fired by a plugin\n\t\t\t\t._on('created', function() {\n\t\t\t\t\tself.__prepareTooltip();\n\t\t\t\t})\n\t\t\t\t// save position information when it's sent by a plugin\n\t\t\t\t._on('repositioned', function(e) {\n\t\t\t\t\tself.__lastPosition = e.position;\n\t\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tself.__options.disabled = true;\n\t\t}\n\t},\n\t\n\t/**\n\t * Insert the content into the appropriate HTML element of the tooltip\n\t * \n\t * @returns {self}\n\t * @private\n\t */\n\t__contentInsert: function() {\n\t\t\n\t\tvar self = this,\n\t\t\t$el = self._$tooltip.find('.tooltipster-content'),\n\t\t\tformattedContent = self.__Content,\n\t\t\tformat = function(content) {\n\t\t\t\tformattedContent = content;\n\t\t\t};\n\t\t\n\t\tself._trigger({\n\t\t\ttype: 'format',\n\t\t\tcontent: self.__Content,\n\t\t\tformat: format\n\t\t});\n\t\t\n\t\tif (self.__options.functionFormat) {\n\t\t\t\n\t\t\tformattedContent = self.__options.functionFormat.call(\n\t\t\t\tself,\n\t\t\t\tself,\n\t\t\t\t{ origin: self._$origin[0] },\n\t\t\t\tself.__Content\n\t\t\t);\n\t\t}\n\t\t\n\t\tif (typeof formattedContent === 'string' && !self.__options.contentAsHTML) {\n\t\t\t$el.text(formattedContent);\n\t\t}\n\t\telse {\n\t\t\t$el\n\t\t\t\t.empty()\n\t\t\t\t.append(formattedContent);\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Save the content, cloning it beforehand if need be\n\t * \n\t * @param content\n\t * @returns {self}\n\t * @private\n\t */\n\t__contentSet: function(content) {\n\t\t\n\t\t// clone if asked. Cloning the object makes sure that each instance has its\n\t\t// own version of the content (in case a same object were provided for several\n\t\t// instances)\n\t\t// reminder: typeof null === object\n\t\tif (content instanceof $ && this.__options.contentCloning) {\n\t\t\tcontent = content.clone(true);\n\t\t}\n\t\t\n\t\tthis.__Content = content;\n\t\t\n\t\tthis._trigger({\n\t\t\ttype: 'updated',\n\t\t\tcontent: content\n\t\t});\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Error message about a method call made after destruction\n\t * \n\t * @private\n\t */\n\t__destroyError: function() {\n\t\tthrow new Error('This tooltip has been destroyed and cannot execute your method call.');\n\t},\n\t\n\t/**\n\t * Gather all information about dimensions and available space,\n\t * called before every repositioning\n\t * \n\t * @private\n\t * @returns {object}\n\t */\n\t__geometry: function() {\n\t\t\n\t\tvar\tself = this,\n\t\t\t$target = self._$origin,\n\t\t\toriginIsArea = self._$origin.is('area');\n\t\t\n\t\t// if this._$origin is a map area, the target we'll need\n\t\t// the dimensions of is actually the image using the map,\n\t\t// not the area itself\n\t\tif (originIsArea) {\n\t\t\t\n\t\t\tvar mapName = self._$origin.parent().attr('name');\n\t\t\t\n\t\t\t$target = $('img[usemap=\"#'+ mapName +'\"]');\n\t\t}\n\t\t\n\t\tvar bcr = $target[0].getBoundingClientRect(),\n\t\t\t$document = $(env.window.document),\n\t\t\t$window = $(env.window),\n\t\t\t$parent = $target,\n\t\t\t// some useful properties of important elements\n\t\t\tgeo = {\n\t\t\t\t// available space for the tooltip, see down below\n\t\t\t\tavailable: {\n\t\t\t\t\tdocument: null,\n\t\t\t\t\twindow: null\n\t\t\t\t},\n\t\t\t\tdocument: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\theight: $document.height(),\n\t\t\t\t\t\twidth: $document.width()\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\twindow: {\n\t\t\t\t\tscroll: {\n\t\t\t\t\t\t// the second ones are for IE compatibility\n\t\t\t\t\t\tleft: env.window.scrollX || env.window.document.documentElement.scrollLeft,\n\t\t\t\t\t\ttop: env.window.scrollY || env.window.document.documentElement.scrollTop\n\t\t\t\t\t},\n\t\t\t\t\tsize: {\n\t\t\t\t\t\theight: $window.height(),\n\t\t\t\t\t\twidth: $window.width()\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\torigin: {\n\t\t\t\t\t// the origin has a fixed lineage if itself or one of its\n\t\t\t\t\t// ancestors has a fixed position\n\t\t\t\t\tfixedLineage: false,\n\t\t\t\t\t// relative to the document\n\t\t\t\t\toffset: {},\n\t\t\t\t\tsize: {\n\t\t\t\t\t\theight: bcr.bottom - bcr.top,\n\t\t\t\t\t\twidth: bcr.right - bcr.left\n\t\t\t\t\t},\n\t\t\t\t\tusemapImage: originIsArea ? $target[0] : null,\n\t\t\t\t\t// relative to the window\n\t\t\t\t\twindowOffset: {\n\t\t\t\t\t\tbottom: bcr.bottom,\n\t\t\t\t\t\tleft: bcr.left,\n\t\t\t\t\t\tright: bcr.right,\n\t\t\t\t\t\ttop: bcr.top\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tgeoFixed = false;\n\t\t\n\t\t// if the element is a map area, some properties may need\n\t\t// to be recalculated\n\t\tif (originIsArea) {\n\t\t\t\n\t\t\tvar shape = self._$origin.attr('shape'),\n\t\t\t\tcoords = self._$origin.attr('coords');\n\t\t\t\n\t\t\tif (coords) {\n\t\t\t\t\n\t\t\t\tcoords = coords.split(',');\n\t\t\t\t\n\t\t\t\t$.map(coords, function(val, i) {\n\t\t\t\t\tcoords[i] = parseInt(val);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t// if the image itself is the area, nothing more to do\n\t\t\tif (shape != 'default') {\n\t\t\t\t\n\t\t\t\tswitch(shape) {\n\t\t\t\t\t\n\t\t\t\t\tcase 'circle':\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar circleCenterLeft = coords[0],\n\t\t\t\t\t\t\tcircleCenterTop = coords[1],\n\t\t\t\t\t\t\tcircleRadius = coords[2],\n\t\t\t\t\t\t\tareaTopOffset = circleCenterTop - circleRadius,\n\t\t\t\t\t\t\tareaLeftOffset = circleCenterLeft - circleRadius;\n\t\t\t\t\t\t\n\t\t\t\t\t\tgeo.origin.size.height = circleRadius * 2;\n\t\t\t\t\t\tgeo.origin.size.width = geo.origin.size.height;\n\t\t\t\t\t\t\n\t\t\t\t\t\tgeo.origin.windowOffset.left += areaLeftOffset;\n\t\t\t\t\t\tgeo.origin.windowOffset.top += areaTopOffset;\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase 'rect':\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar areaLeft = coords[0],\n\t\t\t\t\t\t\tareaTop = coords[1],\n\t\t\t\t\t\t\tareaRight = coords[2],\n\t\t\t\t\t\t\tareaBottom = coords[3];\n\t\t\t\t\t\t\n\t\t\t\t\t\tgeo.origin.size.height = areaBottom - areaTop;\n\t\t\t\t\t\tgeo.origin.size.width = areaRight - areaLeft;\n\t\t\t\t\t\t\n\t\t\t\t\t\tgeo.origin.windowOffset.left += areaLeft;\n\t\t\t\t\t\tgeo.origin.windowOffset.top += areaTop;\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase 'poly':\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar areaSmallestX = 0,\n\t\t\t\t\t\t\tareaSmallestY = 0,\n\t\t\t\t\t\t\tareaGreatestX = 0,\n\t\t\t\t\t\t\tareaGreatestY = 0,\n\t\t\t\t\t\t\tarrayAlternate = 'even';\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (var i = 0; i < coords.length; i++) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar areaNumber = coords[i];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (arrayAlternate == 'even') {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (areaNumber > areaGreatestX) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tareaGreatestX = areaNumber;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\t\t\t\t\tareaSmallestX = areaGreatestX;\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\n\t\t\t\t\t\t\t\tif (areaNumber < areaSmallestX) {\n\t\t\t\t\t\t\t\t\tareaSmallestX = areaNumber;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tarrayAlternate = 'odd';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (areaNumber > areaGreatestY) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tareaGreatestY = areaNumber;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (i == 1) {\n\t\t\t\t\t\t\t\t\t\tareaSmallestY = areaGreatestY;\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\n\t\t\t\t\t\t\t\tif (areaNumber < areaSmallestY) {\n\t\t\t\t\t\t\t\t\tareaSmallestY = areaNumber;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tarrayAlternate = 'even';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tgeo.origin.size.height = areaGreatestY - areaSmallestY;\n\t\t\t\t\t\tgeo.origin.size.width = areaGreatestX - areaSmallestX;\n\t\t\t\t\t\t\n\t\t\t\t\t\tgeo.origin.windowOffset.left += areaSmallestX;\n\t\t\t\t\t\tgeo.origin.windowOffset.top += areaSmallestY;\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// user callback through an event\n\t\tvar edit = function(r) {\n\t\t\tgeo.origin.size.height = r.height,\n\t\t\t\tgeo.origin.windowOffset.left = r.left,\n\t\t\t\tgeo.origin.windowOffset.top = r.top,\n\t\t\t\tgeo.origin.size.width = r.width\n\t\t};\n\t\t\n\t\tself._trigger({\n\t\t\ttype: 'geometry',\n\t\t\tedit: edit,\n\t\t\tgeometry: {\n\t\t\t\theight: geo.origin.size.height,\n\t\t\t\tleft: geo.origin.windowOffset.left,\n\t\t\t\ttop: geo.origin.windowOffset.top,\n\t\t\t\twidth: geo.origin.size.width\n\t\t\t}\n\t\t});\n\t\t\n\t\t// calculate the remaining properties with what we got\n\t\t\n\t\tgeo.origin.windowOffset.right = geo.origin.windowOffset.left + geo.origin.size.width;\n\t\tgeo.origin.windowOffset.bottom = geo.origin.windowOffset.top + geo.origin.size.height;\n\t\t\n\t\tgeo.origin.offset.left = geo.origin.windowOffset.left + geo.window.scroll.left;\n\t\tgeo.origin.offset.top = geo.origin.windowOffset.top + geo.window.scroll.top;\n\t\tgeo.origin.offset.bottom = geo.origin.offset.top + geo.origin.size.height;\n\t\tgeo.origin.offset.right = geo.origin.offset.left + geo.origin.size.width;\n\t\t\n\t\t// the space that is available to display the tooltip relatively to the document\n\t\tgeo.available.document = {\n\t\t\tbottom: {\n\t\t\t\theight: geo.document.size.height - geo.origin.offset.bottom,\n\t\t\t\twidth: geo.document.size.width\n\t\t\t},\n\t\t\tleft: {\n\t\t\t\theight: geo.document.size.height,\n\t\t\t\twidth: geo.origin.offset.left\n\t\t\t},\n\t\t\tright: {\n\t\t\t\theight: geo.document.size.height,\n\t\t\t\twidth: geo.document.size.width - geo.origin.offset.right\n\t\t\t},\n\t\t\ttop: {\n\t\t\t\theight: geo.origin.offset.top,\n\t\t\t\twidth: geo.document.size.width\n\t\t\t}\n\t\t};\n\t\t\n\t\t// the space that is available to display the tooltip relatively to the viewport\n\t\t// (the resulting values may be negative if the origin overflows the viewport)\n\t\tgeo.available.window = {\n\t\t\tbottom: {\n\t\t\t\t// the inner max is here to make sure the available height is no bigger\n\t\t\t\t// than the viewport height (when the origin is off screen at the top).\n\t\t\t\t// The outer max just makes sure that the height is not negative (when\n\t\t\t\t// the origin overflows at the bottom).\n\t\t\t\theight: Math.max(geo.window.size.height - Math.max(geo.origin.windowOffset.bottom, 0), 0),\n\t\t\t\twidth: geo.window.size.width\n\t\t\t},\n\t\t\tleft: {\n\t\t\t\theight: geo.window.size.height,\n\t\t\t\twidth: Math.max(geo.origin.windowOffset.left, 0)\n\t\t\t},\n\t\t\tright: {\n\t\t\t\theight: geo.window.size.height,\n\t\t\t\twidth: Math.max(geo.window.size.width - Math.max(geo.origin.windowOffset.right, 0), 0)\n\t\t\t},\n\t\t\ttop: {\n\t\t\t\theight: Math.max(geo.origin.windowOffset.top, 0),\n\t\t\t\twidth: geo.window.size.width\n\t\t\t}\n\t\t};\n\t\t\n\t\twhile ($parent[0].tagName.toLowerCase() != 'html') {\n\t\t\t\n\t\t\tif ($parent.css('position') == 'fixed') {\n\t\t\t\tgeo.origin.fixedLineage = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\t$parent = $parent.parent();\n\t\t}\n\t\t\n\t\treturn geo;\n\t},\n\t\n\t/**\n\t * Some options may need to be formated before being used\n\t * \n\t * @returns {self}\n\t * @private\n\t */\n\t__optionsFormat: function() {\n\t\t\n\t\tif (typeof this.__options.animationDuration == 'number') {\n\t\t\tthis.__options.animationDuration = [this.__options.animationDuration, this.__options.animationDuration];\n\t\t}\n\t\t\n\t\tif (typeof this.__options.delay == 'number') {\n\t\t\tthis.__options.delay = [this.__options.delay, this.__options.delay];\n\t\t}\n\t\t\n\t\tif (typeof this.__options.delayTouch == 'number') {\n\t\t\tthis.__options.delayTouch = [this.__options.delayTouch, this.__options.delayTouch];\n\t\t}\n\t\t\n\t\tif (typeof this.__options.theme == 'string') {\n\t\t\tthis.__options.theme = [this.__options.theme];\n\t\t}\n\t\t\n\t\t// determine the future parent\n\t\tif (typeof this.__options.parent == 'string') {\n\t\t\tthis.__options.parent = $(this.__options.parent);\n\t\t}\n\t\t\n\t\tif (this.__options.trigger == 'hover') {\n\t\t\t\n\t\t\tthis.__options.triggerOpen = {\n\t\t\t\tmouseenter: true,\n\t\t\t\ttouchstart: true\n\t\t\t};\n\t\t\t\n\t\t\tthis.__options.triggerClose = {\n\t\t\t\tmouseleave: true,\n\t\t\t\toriginClick: true,\n\t\t\t\ttouchleave: true\n\t\t\t};\n\t\t}\n\t\telse if (this.__options.trigger == 'click') {\n\t\t\t\n\t\t\tthis.__options.triggerOpen = {\n\t\t\t\tclick: true,\n\t\t\t\ttap: true\n\t\t\t};\n\t\t\t\n\t\t\tthis.__options.triggerClose = {\n\t\t\t\tclick: true,\n\t\t\t\ttap: true\n\t\t\t};\n\t\t}\n\t\t\n\t\t// for the plugins\n\t\tthis._trigger('options');\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Schedules or cancels the garbage collector task\n\t *\n\t * @returns {self}\n\t * @private\n\t */\n\t__prepareGC: function() {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\t// in case the selfDestruction option has been changed by a method call\n\t\tif (self.__options.selfDestruction) {\n\t\t\t\n\t\t\t// the GC task\n\t\t\tself.__garbageCollector = setInterval(function() {\n\t\t\t\t\n\t\t\t\tvar now = new Date().getTime();\n\t\t\t\t\n\t\t\t\t// forget the old events\n\t\t\t\tself.__touchEvents = $.grep(self.__touchEvents, function(event, i) {\n\t\t\t\t\t// 1 minute\n\t\t\t\t\treturn now - event.time > 60000;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t// auto-destruct if the origin is gone\n\t\t\t\tif (!bodyContains(self._$origin)) {\n\t\t\t\t\tself.destroy();\n\t\t\t\t}\n\t\t\t}, 20000);\n\t\t}\n\t\telse {\n\t\t\tclearInterval(self.__garbageCollector);\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Sets listeners on the origin if the open triggers require them.\n\t * Unlike the listeners set at opening time, these ones\n\t * remain even when the tooltip is closed. It has been made a\n\t * separate method so it can be called when the triggers are\n\t * changed in the options. Closing is handled in _open()\n\t * because of the bindings that may be needed on the tooltip\n\t * itself\n\t *\n\t * @returns {self}\n\t * @private\n\t */\n\t__prepareOrigin: function() {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\t// in case we're resetting the triggers\n\t\tself._$origin.off('.'+ self.__namespace +'-triggerOpen');\n\t\t\n\t\t// if the device is touch capable, even if only mouse triggers\n\t\t// are asked, we need to listen to touch events to know if the mouse\n\t\t// events are actually emulated (so we can ignore them)\n\t\tif (env.hasTouchCapability) {\n\t\t\t\n\t\t\tself._$origin.on(\n\t\t\t\t'touchstart.'+ self.__namespace +'-triggerOpen ' +\n\t\t\t\t'touchend.'+ self.__namespace +'-triggerOpen ' +\n\t\t\t\t'touchcancel.'+ self.__namespace +'-triggerOpen',\n\t\t\t\tfunction(event){\n\t\t\t\t\tself._touchRecordEvent(event);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\t\n\t\t// mouse click and touch tap work the same way\n\t\tif (\tself.__options.triggerOpen.click\n\t\t\t||\t(self.__options.triggerOpen.tap && env.hasTouchCapability)\n\t\t) {\n\t\t\t\n\t\t\tvar eventNames = '';\n\t\t\tif (self.__options.triggerOpen.click) {\n\t\t\t\teventNames += 'click.'+ self.__namespace +'-triggerOpen ';\n\t\t\t}\n\t\t\tif (self.__options.triggerOpen.tap && env.hasTouchCapability) {\n\t\t\t\teventNames += 'touchend.'+ self.__namespace +'-triggerOpen';\n\t\t\t}\n\t\t\t\n\t\t\tself._$origin.on(eventNames, function(event) {\n\t\t\t\tif (self._touchIsMeaningfulEvent(event)) {\n\t\t\t\t\tself._open(event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\t// mouseenter and touch start work the same way\n\t\tif (\tself.__options.triggerOpen.mouseenter\n\t\t\t||\t(self.__options.triggerOpen.touchstart && env.hasTouchCapability)\n\t\t) {\n\t\t\t\n\t\t\tvar eventNames = '';\n\t\t\tif (self.__options.triggerOpen.mouseenter) {\n\t\t\t\teventNames += 'mouseenter.'+ self.__namespace +'-triggerOpen ';\n\t\t\t}\n\t\t\tif (self.__options.triggerOpen.touchstart && env.hasTouchCapability) {\n\t\t\t\teventNames += 'touchstart.'+ self.__namespace +'-triggerOpen';\n\t\t\t}\n\t\t\t\n\t\t\tself._$origin.on(eventNames, function(event) {\n\t\t\t\tif (\tself._touchIsTouchEvent(event)\n\t\t\t\t\t||\t!self._touchIsEmulatedEvent(event)\n\t\t\t\t) {\n\t\t\t\t\tself.__pointerIsOverOrigin = true;\n\t\t\t\t\tself._openShortly(event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\t// info for the mouseleave/touchleave close triggers when they use a delay\n\t\tif (\tself.__options.triggerClose.mouseleave\n\t\t\t||\t(self.__options.triggerClose.touchleave && env.hasTouchCapability)\n\t\t) {\n\t\t\t\n\t\t\tvar eventNames = '';\n\t\t\tif (self.__options.triggerClose.mouseleave) {\n\t\t\t\teventNames += 'mouseleave.'+ self.__namespace +'-triggerOpen ';\n\t\t\t}\n\t\t\tif (self.__options.triggerClose.touchleave && env.hasTouchCapability) {\n\t\t\t\teventNames += 'touchend.'+ self.__namespace +'-triggerOpen touchcancel.'+ self.__namespace +'-triggerOpen';\n\t\t\t}\n\t\t\t\n\t\t\tself._$origin.on(eventNames, function(event) {\n\t\t\t\t\n\t\t\t\tif (self._touchIsMeaningfulEvent(event)) {\n\t\t\t\t\tself.__pointerIsOverOrigin = false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Do the things that need to be done only once after the tooltip\n\t * HTML element it has been created. It has been made a separate\n\t * method so it can be called when options are changed. Remember\n\t * that the tooltip may actually exist in the DOM before it is\n\t * opened, and present after it has been closed: it's the display\n\t * plugin that takes care of handling it.\n\t * \n\t * @returns {self}\n\t * @private\n\t */\n\t__prepareTooltip: function() {\n\t\t\n\t\tvar self = this,\n\t\t\tp = self.__options.interactive ? 'auto' : '';\n\t\t\n\t\t// this will be useful to know quickly if the tooltip is in\n\t\t// the DOM or not \n\t\tself._$tooltip\n\t\t\t.attr('id', self.__namespace)\n\t\t\t.css({\n\t\t\t\t// pointer events\n\t\t\t\t'pointer-events': p,\n\t\t\t\tzIndex: self.__options.zIndex\n\t\t\t});\n\t\t\n\t\t// themes\n\t\t// remove the old ones and add the new ones\n\t\t$.each(self.__previousThemes, function(i, theme) {\n\t\t\tself._$tooltip.removeClass(theme);\n\t\t});\n\t\t$.each(self.__options.theme, function(i, theme) {\n\t\t\tself._$tooltip.addClass(theme);\n\t\t});\n\t\t\n\t\tself.__previousThemes = $.merge([], self.__options.theme);\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Handles the scroll on any of the parents of the origin (when the\n\t * tooltip is open)\n\t *\n\t * @param {object} event\n\t * @returns {self}\n\t * @private\n\t */\n\t__scrollHandler: function(event) {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\tif (self.__options.triggerClose.scroll) {\n\t\t\tself._close(event);\n\t\t}\n\t\telse {\n\t\t\t\n\t\t\t// if the origin or tooltip have been removed: do nothing, the tracker will\n\t\t\t// take care of it later\n\t\t\tif (bodyContains(self._$origin) && bodyContains(self._$tooltip)) {\n\t\t\t\t\n\t\t\t\t// if the scroll happened on the window\n\t\t\t\tif (event.target === env.window.document) {\n\t\t\t\t\t\n\t\t\t\t\t// if the origin has a fixed lineage, window scroll will have no\n\t\t\t\t\t// effect on its position nor on the position of the tooltip\n\t\t\t\t\tif (!self.__Geometry.origin.fixedLineage) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// we don't need to do anything unless repositionOnScroll is true\n\t\t\t\t\t\t// because the tooltip will already have moved with the window\n\t\t\t\t\t\t// (and of course with the origin)\n\t\t\t\t\t\tif (self.__options.repositionOnScroll) {\n\t\t\t\t\t\t\tself.reposition(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// if the scroll happened on another parent of the tooltip, it means\n\t\t\t\t// that it's in a scrollable area and now needs to have its position\n\t\t\t\t// adjusted or recomputed, depending ont the repositionOnScroll\n\t\t\t\t// option. Also, if the origin is partly hidden due to a parent that\n\t\t\t\t// hides its overflow, we'll just hide (not close) the tooltip.\n\t\t\t\telse {\n\t\t\t\t\t\n\t\t\t\t\tvar g = self.__geometry(),\n\t\t\t\t\t\toverflows = false;\n\t\t\t\t\t\n\t\t\t\t\t// a fixed position origin is not affected by the overflow hiding\n\t\t\t\t\t// of a parent\n\t\t\t\t\tif (self._$origin.css('position') != 'fixed') {\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.__$originParents.each(function(i, el) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar $el = $(el),\n\t\t\t\t\t\t\t\toverflowX = $el.css('overflow-x'),\n\t\t\t\t\t\t\t\toverflowY = $el.css('overflow-y');\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (overflowX != 'visible' || overflowY != 'visible') {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tvar bcr = el.getBoundingClientRect();\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (overflowX != 'visible') {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (\tg.origin.windowOffset.left < bcr.left\n\t\t\t\t\t\t\t\t\t\t||\tg.origin.windowOffset.right > bcr.right\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\toverflows = true;\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\n\t\t\t\t\t\t\t\tif (overflowY != 'visible') {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (\tg.origin.windowOffset.top < bcr.top\n\t\t\t\t\t\t\t\t\t\t||\tg.origin.windowOffset.bottom > bcr.bottom\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\toverflows = true;\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}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// no need to go further if fixed, for the same reason as above\n\t\t\t\t\t\t\tif ($el.css('position') == 'fixed') {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (overflows) {\n\t\t\t\t\t\tself._$tooltip.css('visibility', 'hidden');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tself._$tooltip.css('visibility', 'visible');\n\t\t\t\t\t\t\n\t\t\t\t\t\t// reposition\n\t\t\t\t\t\tif (self.__options.repositionOnScroll) {\n\t\t\t\t\t\t\tself.reposition(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// or just adjust offset\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// we have to use offset and not windowOffset because this way,\n\t\t\t\t\t\t\t// only the scroll distance of the scrollable areas are taken into\n\t\t\t\t\t\t\t// account (the scrolltop value of the main window must be\n\t\t\t\t\t\t\t// ignored since the tooltip already moves with it)\n\t\t\t\t\t\t\tvar offsetLeft = g.origin.offset.left - self.__Geometry.origin.offset.left,\n\t\t\t\t\t\t\t\toffsetTop = g.origin.offset.top - self.__Geometry.origin.offset.top;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// add the offset to the position initially computed by the display plugin\n\t\t\t\t\t\t\tself._$tooltip.css({\n\t\t\t\t\t\t\t\tleft: self.__lastPosition.coord.left + offsetLeft,\n\t\t\t\t\t\t\t\ttop: self.__lastPosition.coord.top + offsetTop\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tself._trigger({\n\t\t\t\t\ttype: 'scroll',\n\t\t\t\t\tevent: event\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Changes the state of the tooltip\n\t *\n\t * @param {string} state\n\t * @returns {self}\n\t * @private\n\t */\n\t__stateSet: function(state) {\n\t\t\n\t\tthis.__state = state;\n\t\t\n\t\tthis._trigger({\n\t\t\ttype: 'state',\n\t\t\tstate: state\n\t\t});\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Clear appearance timeouts\n\t *\n\t * @returns {self}\n\t * @private\n\t */\n\t__timeoutsClear: function() {\n\t\t\n\t\t// there is only one possible open timeout: the delayed opening\n\t\t// when the mouseenter/touchstart open triggers are used\n\t\tclearTimeout(this.__timeouts.open);\n\t\tthis.__timeouts.open = null;\n\t\t\n\t\t// ... but several close timeouts: the delayed closing when the\n\t\t// mouseleave close trigger is used and the timer option\n\t\t$.each(this.__timeouts.close, function(i, timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t});\n\t\tthis.__timeouts.close = [];\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Start the tracker that will make checks at regular intervals\n\t * \n\t * @returns {self}\n\t * @private\n\t */\n\t__trackerStart: function() {\n\t\t\n\t\tvar self = this,\n\t\t\t$content = self._$tooltip.find('.tooltipster-content');\n\t\t\n\t\t// get the initial content size\n\t\tif (self.__options.trackTooltip) {\n\t\t\tself.__contentBcr = $content[0].getBoundingClientRect();\n\t\t}\n\t\t\n\t\tself.__tracker = setInterval(function() {\n\t\t\t\n\t\t\t// if the origin or tooltip elements have been removed.\n\t\t\t// Note: we could destroy the instance now if the origin has\n\t\t\t// been removed but we'll leave that task to our garbage collector\n\t\t\tif (!bodyContains(self._$origin) || !bodyContains(self._$tooltip)) {\n\t\t\t\tself._close();\n\t\t\t}\n\t\t\t// if everything is alright\n\t\t\telse {\n\t\t\t\t\n\t\t\t\t// compare the former and current positions of the origin to reposition\n\t\t\t\t// the tooltip if need be\n\t\t\t\tif (self.__options.trackOrigin) {\n\t\t\t\t\t\n\t\t\t\t\tvar g = self.__geometry(),\n\t\t\t\t\t\tidentical = false;\n\t\t\t\t\t\n\t\t\t\t\t// compare size first (a change requires repositioning too)\n\t\t\t\t\tif (areEqual(g.origin.size, self.__Geometry.origin.size)) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// for elements that have a fixed lineage (see __geometry()), we track the\n\t\t\t\t\t\t// top and left properties (relative to window)\n\t\t\t\t\t\tif (self.__Geometry.origin.fixedLineage) {\n\t\t\t\t\t\t\tif (areEqual(g.origin.windowOffset, self.__Geometry.origin.windowOffset)) {\n\t\t\t\t\t\t\t\tidentical = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// otherwise, track total offset (relative to document)\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (areEqual(g.origin.offset, self.__Geometry.origin.offset)) {\n\t\t\t\t\t\t\t\tidentical = 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\t\n\t\t\t\t\tif (!identical) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// close the tooltip when using the mouseleave close trigger\n\t\t\t\t\t\t// (see https://github.com/iamceege/tooltipster/pull/253)\n\t\t\t\t\t\tif (self.__options.triggerClose.mouseleave) {\n\t\t\t\t\t\t\tself._close();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tself.reposition();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (self.__options.trackTooltip) {\n\t\t\t\t\t\n\t\t\t\t\tvar currentBcr = $content[0].getBoundingClientRect();\n\t\t\t\t\t\n\t\t\t\t\tif (\tcurrentBcr.height !== self.__contentBcr.height\n\t\t\t\t\t\t||\tcurrentBcr.width !== self.__contentBcr.width\n\t\t\t\t\t) {\n\t\t\t\t\t\tself.reposition();\n\t\t\t\t\t\tself.__contentBcr = currentBcr;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, self.__options.trackerInterval);\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Closes the tooltip (after the closing delay)\n\t * \n\t * @param event\n\t * @param callback\n\t * @returns {self}\n\t * @protected\n\t */\n\t_close: function(event, callback) {\n\t\t\n\t\tvar self = this,\n\t\t\tok = true;\n\t\t\n\t\tself._trigger({\n\t\t\ttype: 'close',\n\t\t\tevent: event,\n\t\t\tstop: function() {\n\t\t\t\tok = false;\n\t\t\t}\n\t\t});\n\t\t\n\t\t// a destroying tooltip may not refuse to close\n\t\tif (ok || self.__destroying) {\n\t\t\t\n\t\t\t// save the method custom callback and cancel any open method custom callbacks\n\t\t\tif (callback) self.__callbacks.close.push(callback);\n\t\t\tself.__callbacks.open = [];\n\t\t\t\n\t\t\t// clear open/close timeouts\n\t\t\tself.__timeoutsClear();\n\t\t\t\n\t\t\tvar finishCallbacks = function() {\n\t\t\t\t\n\t\t\t\t// trigger any close method custom callbacks and reset them\n\t\t\t\t$.each(self.__callbacks.close, function(i,c) {\n\t\t\t\t\tc.call(self, self, {\n\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\torigin: self._$origin[0]\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tself.__callbacks.close = [];\n\t\t\t};\n\t\t\t\n\t\t\tif (self.__state != 'closed') {\n\t\t\t\t\n\t\t\t\tvar necessary = true,\n\t\t\t\t\td = new Date(),\n\t\t\t\t\tnow = d.getTime(),\n\t\t\t\t\tnewClosingTime = now + self.__options.animationDuration[1];\n\t\t\t\t\n\t\t\t\t// the tooltip may already already be disappearing, but if a new\n\t\t\t\t// call to close() is made after the animationDuration was changed\n\t\t\t\t// to 0 (for example), we ought to actually close it sooner than\n\t\t\t\t// previously scheduled. In that case it should be noted that the\n\t\t\t\t// browser will not adapt the animation duration to the new\n\t\t\t\t// animationDuration that was set after the start of the closing\n\t\t\t\t// animation.\n\t\t\t\t// Note: the same thing could be considered at opening, but is not\n\t\t\t\t// really useful since the tooltip is actually opened immediately\n\t\t\t\t// upon a call to _open(). Since it would not make the opening\n\t\t\t\t// animation finish sooner, its sole impact would be to trigger the\n\t\t\t\t// state event and the open callbacks sooner than the actual end of\n\t\t\t\t// the opening animation, which is not great.\n\t\t\t\tif (self.__state == 'disappearing') {\n\t\t\t\t\t\n\t\t\t\t\tif (newClosingTime > self.__closingTime) {\n\t\t\t\t\t\tnecessary = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (necessary) {\n\t\t\t\t\t\n\t\t\t\t\tself.__closingTime = newClosingTime;\n\t\t\t\t\t\n\t\t\t\t\tif (self.__state != 'disappearing') {\n\t\t\t\t\t\tself.__stateSet('disappearing');\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar finish = function() {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// stop the tracker\n\t\t\t\t\t\tclearInterval(self.__tracker);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// a \"beforeClose\" option has been asked several times but would\n\t\t\t\t\t\t// probably useless since the content element is still accessible\n\t\t\t\t\t\t// via ::content(), and because people can always use listeners\n\t\t\t\t\t\t// inside their content to track what's going on. For the sake of\n\t\t\t\t\t\t// simplicity, this has been denied. Bur for the rare people who\n\t\t\t\t\t\t// really need the option (for old browsers or for the case where\n\t\t\t\t\t\t// detaching the content is actually destructive, for file or\n\t\t\t\t\t\t// password inputs for example), this event will do the work.\n\t\t\t\t\t\tself._trigger({\n\t\t\t\t\t\t\ttype: 'closing',\n\t\t\t\t\t\t\tevent: event\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\t// unbind listeners which are no longer needed\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t.off('.'+ self.__namespace +'-triggerClose')\n\t\t\t\t\t\t\t.removeClass('tooltipster-dying');\n\t\t\t\t\t\t\n\t\t\t\t\t\t// orientationchange, scroll and resize listeners\n\t\t\t\t\t\t$(env.window).off('.'+ self.__namespace +'-triggerClose');\n\t\t\t\t\t\t\n\t\t\t\t\t\t// scroll listeners\n\t\t\t\t\t\tself.__$originParents.each(function(i, el) {\n\t\t\t\t\t\t\t$(el).off('scroll.'+ self.__namespace +'-triggerClose');\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// clear the array to prevent memory leaks\n\t\t\t\t\t\tself.__$originParents = null;\n\t\t\t\t\t\t\n\t\t\t\t\t\t$('body').off('.'+ self.__namespace +'-triggerClose');\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._$origin.off('.'+ self.__namespace +'-triggerClose');\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._off('dismissable');\n\t\t\t\t\t\t\n\t\t\t\t\t\t// a plugin that would like to remove the tooltip from the\n\t\t\t\t\t\t// DOM when closed should bind on this\n\t\t\t\t\t\tself.__stateSet('closed');\n\t\t\t\t\t\t\n\t\t\t\t\t\t// trigger event\n\t\t\t\t\t\tself._trigger({\n\t\t\t\t\t\t\ttype: 'after',\n\t\t\t\t\t\t\tevent: event\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\t// call our constructor custom callback function\n\t\t\t\t\t\tif (self.__options.functionAfter) {\n\t\t\t\t\t\t\tself.__options.functionAfter.call(self, self, {\n\t\t\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\t\t\torigin: self._$origin[0]\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// call our method custom callbacks functions\n\t\t\t\t\t\tfinishCallbacks();\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\tif (env.hasTransitions) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._$tooltip.css({\n\t\t\t\t\t\t\t'-moz-animation-duration': self.__options.animationDuration[1] + 'ms',\n\t\t\t\t\t\t\t'-ms-animation-duration': self.__options.animationDuration[1] + 'ms',\n\t\t\t\t\t\t\t'-o-animation-duration': self.__options.animationDuration[1] + 'ms',\n\t\t\t\t\t\t\t'-webkit-animation-duration': self.__options.animationDuration[1] + 'ms',\n\t\t\t\t\t\t\t'animation-duration': self.__options.animationDuration[1] + 'ms',\n\t\t\t\t\t\t\t'transition-duration': self.__options.animationDuration[1] + 'ms'\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t// clear both potential open and close tasks\n\t\t\t\t\t\t\t.clearQueue()\n\t\t\t\t\t\t\t.removeClass('tooltipster-show')\n\t\t\t\t\t\t\t// for transitions only\n\t\t\t\t\t\t\t.addClass('tooltipster-dying');\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (self.__options.animationDuration[1] > 0) {\n\t\t\t\t\t\t\tself._$tooltip.delay(self.__options.animationDuration[1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._$tooltip.queue(finish);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t.stop()\n\t\t\t\t\t\t\t.fadeOut(self.__options.animationDuration[1], finish);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// if the tooltip is already closed, we still need to trigger\n\t\t\t// the method custom callbacks\n\t\t\telse {\n\t\t\t\tfinishCallbacks();\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * For internal use by plugins, if needed\n\t * \n\t * @returns {self}\n\t * @protected\n\t */\n\t_off: function() {\n\t\tthis.__$emitterPrivate.off.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For internal use by plugins, if needed\n\t *\n\t * @returns {self}\n\t * @protected\n\t */\n\t_on: function() {\n\t\tthis.__$emitterPrivate.on.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For internal use by plugins, if needed\n\t *\n\t * @returns {self}\n\t * @protected\n\t */\n\t_one: function() {\n\t\tthis.__$emitterPrivate.one.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Opens the tooltip right away\n\t *\n\t * @param event\n\t * @param callback\n\t * @returns {self}\n\t * @protected\n\t */\n\t_open: function(event, callback) {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\t// if the destruction process has not begun and if this was not\n\t\t// triggered by an unwanted emulated click event\n\t\tif (!self.__destroying) {\n\t\t\t\n\t\t\t// check that the origin is still in the DOM\n\t\t\tif (\tbodyContains(self._$origin)\n\t\t\t\t// if the tooltip is enabled\n\t\t\t\t&&\tself.__enabled\n\t\t\t) {\n\t\t\t\t\n\t\t\t\tvar ok = true;\n\t\t\t\t\n\t\t\t\t// if the tooltip is not open yet, we need to call functionBefore.\n\t\t\t\t// otherwise we can jst go on\n\t\t\t\tif (self.__state == 'closed') {\n\t\t\t\t\t\n\t\t\t\t\t// trigger an event. The event.stop function allows the callback\n\t\t\t\t\t// to prevent the opening of the tooltip\n\t\t\t\t\tself._trigger({\n\t\t\t\t\t\ttype: 'before',\n\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\tstop: function() {\n\t\t\t\t\t\t\tok = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif (ok && self.__options.functionBefore) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// call our custom function before continuing\n\t\t\t\t\t\tok = self.__options.functionBefore.call(self, self, {\n\t\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\t\torigin: self._$origin[0]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (ok !== false) {\n\t\t\t\t\t\n\t\t\t\t\t// if there is some content\n\t\t\t\t\tif (self.__Content !== null) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// save the method callback and cancel close method callbacks\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tself.__callbacks.open.push(callback);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself.__callbacks.close = [];\n\t\t\t\t\t\t\n\t\t\t\t\t\t// get rid of any appearance timeouts\n\t\t\t\t\t\tself.__timeoutsClear();\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar extraTime,\n\t\t\t\t\t\t\tfinish = function() {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (self.__state != 'stable') {\n\t\t\t\t\t\t\t\t\tself.__stateSet('stable');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// trigger any open method custom callbacks and reset them\n\t\t\t\t\t\t\t\t$.each(self.__callbacks.open, function(i,c) {\n\t\t\t\t\t\t\t\t\tc.call(self, self, {\n\t\t\t\t\t\t\t\t\t\torigin: self._$origin[0],\n\t\t\t\t\t\t\t\t\t\ttooltip: self._$tooltip[0]\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\n\t\t\t\t\t\t\t\tself.__callbacks.open = [];\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t\t// if the tooltip is already open\n\t\t\t\t\t\tif (self.__state !== 'closed') {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// the timer (if any) will start (or restart) right now\n\t\t\t\t\t\t\textraTime = 0;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// if it was disappearing, cancel that\n\t\t\t\t\t\t\tif (self.__state === 'disappearing') {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tself.__stateSet('appearing');\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (env.hasTransitions) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t\t\t\t.clearQueue()\n\t\t\t\t\t\t\t\t\t\t.removeClass('tooltipster-dying')\n\t\t\t\t\t\t\t\t\t\t.addClass('tooltipster-show');\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (self.__options.animationDuration[0] > 0) {\n\t\t\t\t\t\t\t\t\t\tself._$tooltip.delay(self.__options.animationDuration[0]);\n\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\tself._$tooltip.queue(finish);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t// in case the tooltip was currently fading out, bring it back\n\t\t\t\t\t\t\t\t\t// to life\n\t\t\t\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t\t\t\t.stop()\n\t\t\t\t\t\t\t\t\t\t.fadeIn(finish);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// if the tooltip is already open, we still need to trigger the method\n\t\t\t\t\t\t\t// custom callback\n\t\t\t\t\t\t\telse if (self.__state == 'stable') {\n\t\t\t\t\t\t\t\tfinish();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// if the tooltip isn't already open, open it\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// a plugin must bind on this and store the tooltip in this._$tooltip\n\t\t\t\t\t\t\tself.__stateSet('appearing');\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// the timer (if any) will start when the tooltip has fully appeared\n\t\t\t\t\t\t\t// after its transition\n\t\t\t\t\t\t\textraTime = self.__options.animationDuration[0];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// insert the content inside the tooltip\n\t\t\t\t\t\t\tself.__contentInsert();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// reposition the tooltip and attach to the DOM\n\t\t\t\t\t\t\tself.reposition(event, true);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// animate in the tooltip. If the display plugin wants no css\n\t\t\t\t\t\t\t// animations, it may override the animation option with a\n\t\t\t\t\t\t\t// dummy value that will produce no effect\n\t\t\t\t\t\t\tif (env.hasTransitions) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// note: there seems to be an issue with start animations which\n\t\t\t\t\t\t\t\t// are randomly not played on fast devices in both Chrome and FF,\n\t\t\t\t\t\t\t\t// couldn't find a way to solve it yet. It seems that applying\n\t\t\t\t\t\t\t\t// the classes before appending to the DOM helps a little, but\n\t\t\t\t\t\t\t\t// it messes up some CSS transitions. The issue almost never\n\t\t\t\t\t\t\t\t// happens when delay[0]==0 though\n\t\t\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t\t\t.addClass('tooltipster-'+ self.__options.animation)\n\t\t\t\t\t\t\t\t\t.addClass('tooltipster-initial')\n\t\t\t\t\t\t\t\t\t.css({\n\t\t\t\t\t\t\t\t\t\t'-moz-animation-duration': self.__options.animationDuration[0] + 'ms',\n\t\t\t\t\t\t\t\t\t\t'-ms-animation-duration': self.__options.animationDuration[0] + 'ms',\n\t\t\t\t\t\t\t\t\t\t'-o-animation-duration': self.__options.animationDuration[0] + 'ms',\n\t\t\t\t\t\t\t\t\t\t'-webkit-animation-duration': self.__options.animationDuration[0] + 'ms',\n\t\t\t\t\t\t\t\t\t\t'animation-duration': self.__options.animationDuration[0] + 'ms',\n\t\t\t\t\t\t\t\t\t\t'transition-duration': self.__options.animationDuration[0] + 'ms'\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\tsetTimeout(\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// a quick hover may have already triggered a mouseleave\n\t\t\t\t\t\t\t\t\t\tif (self.__state != 'closed') {\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t\t\t\t\t\t.addClass('tooltipster-show')\n\t\t\t\t\t\t\t\t\t\t\t\t.removeClass('tooltipster-initial');\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tif (self.__options.animationDuration[0] > 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tself._$tooltip.delay(self.__options.animationDuration[0]);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tself._$tooltip.queue(finish);\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\t0\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// old browsers will have to live with this\n\t\t\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t\t\t.css('display', 'none')\n\t\t\t\t\t\t\t\t\t.fadeIn(self.__options.animationDuration[0], finish);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// checks if the origin is removed while the tooltip is open\n\t\t\t\t\t\t\tself.__trackerStart();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// NOTE: the listeners below have a '-triggerClose' namespace\n\t\t\t\t\t\t\t// because we'll remove them when the tooltip closes (unlike\n\t\t\t\t\t\t\t// the '-triggerOpen' listeners). So some of them are actually\n\t\t\t\t\t\t\t// not about close triggers, rather about positioning.\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t$(env.window)\n\t\t\t\t\t\t\t\t// reposition on resize\n\t\t\t\t\t\t\t\t.on('resize.'+ self.__namespace +'-triggerClose', function(e) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tvar $ae = $(document.activeElement);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t// reposition only if the resize event was not triggered upon the opening\n\t\t\t\t\t\t\t\t\t// of a virtual keyboard due to an input field being focused within the tooltip\n\t\t\t\t\t\t\t\t\t// (otherwise the repositioning would lose the focus)\n\t\t\t\t\t\t\t\t\tif (\t(!$ae.is('input') && !$ae.is('textarea'))\n\t\t\t\t\t\t\t\t\t\t||\t!$.contains(self._$tooltip[0], $ae[0])\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tself.reposition(e);\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// same as below for parents\n\t\t\t\t\t\t\t\t.on('scroll.'+ self.__namespace +'-triggerClose', function(e) {\n\t\t\t\t\t\t\t\t\tself.__scrollHandler(e);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.__$originParents = self._$origin.parents();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// scrolling may require the tooltip to be moved or even\n\t\t\t\t\t\t\t// repositioned in some cases\n\t\t\t\t\t\t\tself.__$originParents.each(function(i, parent) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t$(parent).on('scroll.'+ self.__namespace +'-triggerClose', function(e) {\n\t\t\t\t\t\t\t\t\tself.__scrollHandler(e);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (\tself.__options.triggerClose.mouseleave\n\t\t\t\t\t\t\t\t||\t(self.__options.triggerClose.touchleave && env.hasTouchCapability)\n\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// we use an event to allow users/plugins to control when the mouseleave/touchleave\n\t\t\t\t\t\t\t\t// close triggers will come to action. It allows to have more triggering elements\n\t\t\t\t\t\t\t\t// than just the origin and the tooltip for example, or to cancel/delay the closing,\n\t\t\t\t\t\t\t\t// or to make the tooltip interactive even if it wasn't when it was open, etc.\n\t\t\t\t\t\t\t\tself._on('dismissable', function(event) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (event.dismissable) {\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tif (event.delay) {\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\ttimeout = setTimeout(function() {\n\t\t\t\t\t\t\t\t\t\t\t\t// event.event may be undefined\n\t\t\t\t\t\t\t\t\t\t\t\tself._close(event.event);\n\t\t\t\t\t\t\t\t\t\t\t}, event.delay);\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tself.__timeouts.close.push(timeout);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tself._close(event);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// now set the listeners that will trigger 'dismissable' events\n\t\t\t\t\t\t\t\tvar $elements = self._$origin,\n\t\t\t\t\t\t\t\t\teventNamesIn = '',\n\t\t\t\t\t\t\t\t\teventNamesOut = '',\n\t\t\t\t\t\t\t\t\ttimeout = null;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// if we have to allow interaction, bind on the tooltip too\n\t\t\t\t\t\t\t\tif (self.__options.interactive) {\n\t\t\t\t\t\t\t\t\t$elements = $elements.add(self._$tooltip);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (self.__options.triggerClose.mouseleave) {\n\t\t\t\t\t\t\t\t\teventNamesIn += 'mouseenter.'+ self.__namespace +'-triggerClose ';\n\t\t\t\t\t\t\t\t\teventNamesOut += 'mouseleave.'+ self.__namespace +'-triggerClose ';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (self.__options.triggerClose.touchleave && env.hasTouchCapability) {\n\t\t\t\t\t\t\t\t\teventNamesIn += 'touchstart.'+ self.__namespace +'-triggerClose';\n\t\t\t\t\t\t\t\t\teventNamesOut += 'touchend.'+ self.__namespace +'-triggerClose touchcancel.'+ self.__namespace +'-triggerClose';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t$elements\n\t\t\t\t\t\t\t\t\t// close after some time spent outside of the elements\n\t\t\t\t\t\t\t\t\t.on(eventNamesOut, function(event) {\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// it's ok if the touch gesture ended up to be a swipe,\n\t\t\t\t\t\t\t\t\t\t// it's still a \"touch leave\" situation\n\t\t\t\t\t\t\t\t\t\tif (\tself._touchIsTouchEvent(event)\n\t\t\t\t\t\t\t\t\t\t\t||\t!self._touchIsEmulatedEvent(event)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tvar delay = (event.type == 'mouseleave') ?\n\t\t\t\t\t\t\t\t\t\t\t\tself.__options.delay :\n\t\t\t\t\t\t\t\t\t\t\t\tself.__options.delayTouch;\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tself._trigger({\n\t\t\t\t\t\t\t\t\t\t\t\tdelay: delay[1],\n\t\t\t\t\t\t\t\t\t\t\t\tdismissable: true,\n\t\t\t\t\t\t\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\t\t\t\t\t\t\ttype: 'dismissable'\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t// suspend the mouseleave timeout when the pointer comes back\n\t\t\t\t\t\t\t\t\t// over the elements\n\t\t\t\t\t\t\t\t\t.on(eventNamesIn, function(event) {\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// it's also ok if the touch event is a swipe gesture\n\t\t\t\t\t\t\t\t\t\tif (\tself._touchIsTouchEvent(event)\n\t\t\t\t\t\t\t\t\t\t\t||\t!self._touchIsEmulatedEvent(event)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tself._trigger({\n\t\t\t\t\t\t\t\t\t\t\t\tdismissable: false,\n\t\t\t\t\t\t\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\t\t\t\t\t\t\ttype: 'dismissable'\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// close the tooltip when the origin gets a mouse click (common behavior of\n\t\t\t\t\t\t\t// native tooltips)\n\t\t\t\t\t\t\tif (self.__options.triggerClose.originClick) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tself._$origin.on('click.'+ self.__namespace + '-triggerClose', function(event) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t// we could actually let a tap trigger this but this feature just\n\t\t\t\t\t\t\t\t\t// does not make sense on touch devices\n\t\t\t\t\t\t\t\t\tif (\t!self._touchIsTouchEvent(event)\n\t\t\t\t\t\t\t\t\t\t&&\t!self._touchIsEmulatedEvent(event)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tself._close(event);\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\t\n\t\t\t\t\t\t\t// set the same bindings for click and touch on the body to close the tooltip\n\t\t\t\t\t\t\tif (\tself.__options.triggerClose.click\n\t\t\t\t\t\t\t\t||\t(self.__options.triggerClose.tap && env.hasTouchCapability)\n\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// don't set right away since the click/tap event which triggered this method\n\t\t\t\t\t\t\t\t// (if it was a click/tap) is going to bubble up to the body, we don't want it\n\t\t\t\t\t\t\t\t// to close the tooltip immediately after it opened\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (self.__state != 'closed') {\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tvar eventNames = '';\n\t\t\t\t\t\t\t\t\t\tif (self.__options.triggerClose.click) {\n\t\t\t\t\t\t\t\t\t\t\teventNames += 'click.'+ self.__namespace +'-triggerClose ';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (self.__options.triggerClose.tap && env.hasTouchCapability) {\n\t\t\t\t\t\t\t\t\t\t\teventNames += 'touchend.'+ self.__namespace +'-triggerClose';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t$('body').on(eventNames, function(event) {\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tif (self._touchIsMeaningfulEvent(event)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tself._touchRecordEvent(event);\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tif (!self.__options.interactive || !$.contains(self._$tooltip[0], event.target)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tself._close(event);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// needed to detect and ignore swiping\n\t\t\t\t\t\t\t\t\t\tif (self.__options.triggerClose.tap && env.hasTouchCapability) {\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t$('body').on('touchstart.'+ self.__namespace +'-triggerClose', function(event) {\n\t\t\t\t\t\t\t\t\t\t\t\tself._touchRecordEvent(event);\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself._trigger('ready');\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// call our custom callback\n\t\t\t\t\t\t\tif (self.__options.functionReady) {\n\t\t\t\t\t\t\t\tself.__options.functionReady.call(self, self, {\n\t\t\t\t\t\t\t\t\torigin: self._$origin[0],\n\t\t\t\t\t\t\t\t\ttooltip: self._$tooltip[0]\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// if we have a timer set, let the countdown begin\n\t\t\t\t\t\tif (self.__options.timer > 0) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar timeout = setTimeout(function() {\n\t\t\t\t\t\t\t\tself._close();\n\t\t\t\t\t\t\t}, self.__options.timer + extraTime);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.__timeouts.close.push(timeout);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * When using the mouseenter/touchstart open triggers, this function will\n\t * schedule the opening of the tooltip after the delay, if there is one\n\t *\n\t * @param event\n\t * @returns {self}\n\t * @protected\n \t */\n\t_openShortly: function(event) {\n\t\t\n\t\tvar self = this,\n\t\t\tok = true;\n\t\t\n\t\tif (self.__state != 'stable' && self.__state != 'appearing') {\n\t\t\t\n\t\t\t// if a timeout is not already running\n\t\t\tif (!self.__timeouts.open) {\n\t\t\t\t\n\t\t\t\tself._trigger({\n\t\t\t\t\ttype: 'start',\n\t\t\t\t\tevent: event,\n\t\t\t\t\tstop: function() {\n\t\t\t\t\t\tok = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif (ok) {\n\t\t\t\t\t\n\t\t\t\t\tvar delay = (event.type.indexOf('touch') == 0) ?\n\t\t\t\t\t\tself.__options.delayTouch :\n\t\t\t\t\t\tself.__options.delay;\n\t\t\t\t\t\n\t\t\t\t\tif (delay[0]) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.__timeouts.open = setTimeout(function() {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.__timeouts.open = null;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// open only if the pointer (mouse or touch) is still over the origin.\n\t\t\t\t\t\t\t// The check on the \"meaningful event\" can only be made here, after some\n\t\t\t\t\t\t\t// time has passed (to know if the touch was a swipe or not)\n\t\t\t\t\t\t\tif (self.__pointerIsOverOrigin && self._touchIsMeaningfulEvent(event)) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// signal that we go on\n\t\t\t\t\t\t\t\tself._trigger('startend');\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tself._open(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// signal that we cancel\n\t\t\t\t\t\t\t\tself._trigger('startcancel');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, delay[0]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// signal that we go on\n\t\t\t\t\t\tself._trigger('startend');\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._open(event);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Meant for plugins to get their options\n\t * \n\t * @param {string} pluginName The name of the plugin that asks for its options\n\t * @param {object} defaultOptions The default options of the plugin\n\t * @returns {object} The options\n\t * @protected\n\t */\n\t_optionsExtract: function(pluginName, defaultOptions) {\n\t\t\n\t\tvar self = this,\n\t\t\toptions = $.extend(true, {}, defaultOptions);\n\t\t\n\t\t// if the plugin options were isolated in a property named after the\n\t\t// plugin, use them (prevents conflicts with other plugins)\n\t\tvar pluginOptions = self.__options[pluginName];\n\t\t\n\t\t// if not, try to get them as regular options\n\t\tif (!pluginOptions){\n\t\t\t\n\t\t\tpluginOptions = {};\n\t\t\t\n\t\t\t$.each(defaultOptions, function(optionName, value) {\n\t\t\t\t\n\t\t\t\tvar o = self.__options[optionName];\n\t\t\t\t\n\t\t\t\tif (o !== undefined) {\n\t\t\t\t\tpluginOptions[optionName] = o;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\t// let's merge the default options and the ones that were provided. We'd want\n\t\t// to do a deep copy but not let jQuery merge arrays, so we'll do a shallow\n\t\t// extend on two levels, that will be enough if options are not more than 1\n\t\t// level deep\n\t\t$.each(options, function(optionName, value) {\n\t\t\t\n\t\t\tif (pluginOptions[optionName] !== undefined) {\n\t\t\t\t\n\t\t\t\tif ((\t\ttypeof value == 'object'\n\t\t\t\t\t\t&&\t!(value instanceof Array)\n\t\t\t\t\t\t&&\tvalue != null\n\t\t\t\t\t)\n\t\t\t\t\t&&\n\t\t\t\t\t(\t\ttypeof pluginOptions[optionName] == 'object'\n\t\t\t\t\t\t&&\t!(pluginOptions[optionName] instanceof Array)\n\t\t\t\t\t\t&&\tpluginOptions[optionName] != null\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\t$.extend(options[optionName], pluginOptions[optionName]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions[optionName] = pluginOptions[optionName];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn options;\n\t},\n\t\n\t/**\n\t * Used at instantiation of the plugin, or afterwards by plugins that activate themselves\n\t * on existing instances\n\t * \n\t * @param {object} pluginName\n\t * @returns {self}\n\t * @protected\n\t */\n\t_plug: function(pluginName) {\n\t\t\n\t\tvar plugin = $.tooltipster._plugin(pluginName);\n\t\t\n\t\tif (plugin) {\n\t\t\t\n\t\t\t// if there is a constructor for instances\n\t\t\tif (plugin.instance) {\n\t\t\t\t\n\t\t\t\t// proxy non-private methods on the instance to allow new instance methods\n\t\t\t\t$.tooltipster.__bridge(plugin.instance, this, plugin.name);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthrow new Error('The \"'+ pluginName +'\" plugin is not defined');\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * This will return true if the event is a mouse event which was\n\t * emulated by the browser after a touch event. This allows us to\n\t * really dissociate mouse and touch triggers.\n\t * \n\t * There is a margin of error if a real mouse event is fired right\n\t * after (within the delay shown below) a touch event on the same\n\t * element, but hopefully it should not happen often.\n\t * \n\t * @returns {boolean}\n\t * @protected\n\t */\n\t_touchIsEmulatedEvent: function(event) {\n\t\t\n\t\tvar isEmulated = false,\n\t\t\tnow = new Date().getTime();\n\t\t\n\t\tfor (var i = this.__touchEvents.length - 1; i >= 0; i--) {\n\t\t\t\n\t\t\tvar e = this.__touchEvents[i];\n\t\t\t\n\t\t\t// delay, in milliseconds. It's supposed to be 300ms in\n\t\t\t// most browsers (350ms on iOS) to allow a double tap but\n\t\t\t// can be less (check out FastClick for more info)\n\t\t\tif (now - e.time < 500) {\n\t\t\t\t\n\t\t\t\tif (e.target === event.target) {\n\t\t\t\t\tisEmulated = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn isEmulated;\n\t},\n\t\n\t/**\n\t * Returns false if the event was an emulated mouse event or\n\t * a touch event involved in a swipe gesture.\n\t * \n\t * @param {object} event\n\t * @returns {boolean}\n\t * @protected\n\t */\n\t_touchIsMeaningfulEvent: function(event) {\n\t\treturn (\n\t\t\t\t(this._touchIsTouchEvent(event) && !this._touchSwiped(event.target))\n\t\t\t||\t(!this._touchIsTouchEvent(event) && !this._touchIsEmulatedEvent(event))\n\t\t);\n\t},\n\t\n\t/**\n\t * Checks if an event is a touch event\n\t * \n\t * @param {object} event\n\t * @returns {boolean}\n\t * @protected\n\t */\n\t_touchIsTouchEvent: function(event){\n\t\treturn event.type.indexOf('touch') == 0;\n\t},\n\t\n\t/**\n\t * Store touch events for a while to detect swiping and emulated mouse events\n\t * \n\t * @param {object} event\n\t * @returns {self}\n\t * @protected\n\t */\n\t_touchRecordEvent: function(event) {\n\t\t\n\t\tif (this._touchIsTouchEvent(event)) {\n\t\t\tevent.time = new Date().getTime();\n\t\t\tthis.__touchEvents.push(event);\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Returns true if a swipe happened after the last touchstart event fired on\n\t * event.target.\n\t * \n\t * We need to differentiate a swipe from a tap before we let the event open\n\t * or close the tooltip. A swipe is when a touchmove (scroll) event happens\n\t * on the body between the touchstart and the touchend events of an element.\n\t * \n\t * @param {object} target The HTML element that may have triggered the swipe\n\t * @returns {boolean}\n\t * @protected\n\t */\n\t_touchSwiped: function(target) {\n\t\t\n\t\tvar swiped = false;\n\t\t\n\t\tfor (var i = this.__touchEvents.length - 1; i >= 0; i--) {\n\t\t\t\n\t\t\tvar e = this.__touchEvents[i];\n\t\t\t\n\t\t\tif (e.type == 'touchmove') {\n\t\t\t\tswiped = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (\n\t\t\t\te.type == 'touchstart'\n\t\t\t\t&&\ttarget === e.target\n\t\t\t) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn swiped;\n\t},\n\t\n\t/**\n\t * Triggers an event on the instance emitters\n\t * \n\t * @returns {self}\n\t * @protected\n\t */\n\t_trigger: function() {\n\t\t\n\t\tvar args = Array.prototype.slice.apply(arguments);\n\t\t\n\t\tif (typeof args[0] == 'string') {\n\t\t\targs[0] = { type: args[0] };\n\t\t}\n\t\t\n\t\t// add properties to the event\n\t\targs[0].instance = this;\n\t\targs[0].origin = this._$origin ? this._$origin[0] : null;\n\t\targs[0].tooltip = this._$tooltip ? this._$tooltip[0] : null;\n\t\t\n\t\t// note: the order of emitters matters\n\t\tthis.__$emitterPrivate.trigger.apply(this.__$emitterPrivate, args);\n\t\t$.tooltipster._trigger.apply($.tooltipster, args);\n\t\tthis.__$emitterPublic.trigger.apply(this.__$emitterPublic, args);\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Deactivate a plugin on this instance\n\t * \n\t * @returns {self}\n\t * @protected\n\t */\n\t_unplug: function(pluginName) {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\t// if the plugin has been activated on this instance\n\t\tif (self[pluginName]) {\n\t\t\t\n\t\t\tvar plugin = $.tooltipster._plugin(pluginName);\n\t\t\t\n\t\t\t// if there is a constructor for instances\n\t\t\tif (plugin.instance) {\n\t\t\t\t\n\t\t\t\t// unbridge\n\t\t\t\t$.each(plugin.instance, function(methodName, fn) {\n\t\t\t\t\t\n\t\t\t\t\t// if the method exists (privates methods do not) and comes indeed from\n\t\t\t\t\t// this plugin (may be missing or come from a conflicting plugin).\n\t\t\t\t\tif (\tself[methodName]\n\t\t\t\t\t\t&&\tself[methodName].bridged === self[pluginName]\n\t\t\t\t\t) {\n\t\t\t\t\t\tdelete self[methodName];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t// destroy the plugin\n\t\t\tif (self[pluginName].__destroy) {\n\t\t\t\tself[pluginName].__destroy();\n\t\t\t}\n\t\t\t\n\t\t\t// remove the reference to the plugin instance\n\t\t\tdelete self[pluginName];\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * @see self::_close\n\t * @returns {self}\n\t * @public\n\t */\n\tclose: function(callback) {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\tthis._close(null, callback);\n\t\t}\n\t\telse {\n\t\t\tthis.__destroyError();\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Sets or gets the content of the tooltip\n\t * \n\t * @returns {mixed|self}\n\t * @public\n\t */\n\tcontent: function(content) {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\t// getter method\n\t\tif (content === undefined) {\n\t\t\treturn self.__Content;\n\t\t}\n\t\t// setter method\n\t\telse {\n\t\t\t\n\t\t\tif (!self.__destroyed) {\n\t\t\t\t\n\t\t\t\t// change the content\n\t\t\t\tself.__contentSet(content);\n\t\t\t\t\n\t\t\t\tif (self.__Content !== null) {\n\t\t\t\t\t\n\t\t\t\t\t// update the tooltip if it is open\n\t\t\t\t\tif (self.__state !== 'closed') {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// reset the content in the tooltip\n\t\t\t\t\t\tself.__contentInsert();\n\t\t\t\t\t\t\n\t\t\t\t\t\t// reposition and resize the tooltip\n\t\t\t\t\t\tself.reposition();\n\t\t\t\t\t\t\n\t\t\t\t\t\t// if we want to play a little animation showing the content changed\n\t\t\t\t\t\tif (self.__options.updateAnimation) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (env.hasTransitions) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// keep the reference in the local scope\n\t\t\t\t\t\t\t\tvar animation = self.__options.updateAnimation;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tself._$tooltip.addClass('tooltipster-update-'+ animation);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// remove the class after a while. The actual duration of the\n\t\t\t\t\t\t\t\t// update animation may be shorter, it's set in the CSS rules\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (self.__state != 'closed') {\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tself._$tooltip.removeClass('tooltipster-update-'+ animation);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tself._$tooltip.fadeTo(200, 0.5, function() {\n\t\t\t\t\t\t\t\t\tif (self.__state != 'closed') {\n\t\t\t\t\t\t\t\t\t\tself._$tooltip.fadeTo(200, 1);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tself._close();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tself.__destroyError();\n\t\t\t}\n\t\t\t\n\t\t\treturn self;\n\t\t}\n\t},\n\t\n\t/**\n\t * Destroys the tooltip\n\t * \n\t * @returns {self}\n\t * @public\n\t */\n\tdestroy: function() {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\tif (!self.__destroyed) {\n\t\t\t\n\t\t\tif (!self.__destroying) {\n\t\t\t\t\n\t\t\t\tself.__destroying = true;\n\t\t\t\t\n\t\t\t\tself._close(null, function() {\n\t\t\t\t\t\n\t\t\t\t\tself._trigger('destroy');\n\t\t\t\t\t\n\t\t\t\t\tself.__destroying = false;\n\t\t\t\t\tself.__destroyed = true;\n\t\t\t\t\t\n\t\t\t\t\tself._$origin\n\t\t\t\t\t\t.removeData(self.__namespace)\n\t\t\t\t\t\t// remove the open trigger listeners\n\t\t\t\t\t\t.off('.'+ self.__namespace +'-triggerOpen');\n\t\t\t\t\t\n\t\t\t\t\t// remove the touch listener\n\t\t\t\t\t$('body').off('.' + self.__namespace +'-triggerOpen');\n\t\t\t\t\t\n\t\t\t\t\tvar ns = self._$origin.data('tooltipster-ns');\n\t\t\t\t\t\n\t\t\t\t\t// if the origin has been removed from DOM, its data may\n\t\t\t\t\t// well have been destroyed in the process and there would\n\t\t\t\t\t// be nothing to clean up or restore\n\t\t\t\t\tif (ns) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// if there are no more tooltips on this element\n\t\t\t\t\t\tif (ns.length === 1) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// optional restoration of a title attribute\n\t\t\t\t\t\t\tvar title = null;\n\t\t\t\t\t\t\tif (self.__options.restoration == 'previous') {\n\t\t\t\t\t\t\t\ttitle = self._$origin.data('tooltipster-initialTitle');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (self.__options.restoration == 'current') {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// old school technique to stringify when outerHTML is not supported\n\t\t\t\t\t\t\t\ttitle = (typeof self.__Content == 'string') ?\n\t\t\t\t\t\t\t\t\tself.__Content :\n\t\t\t\t\t\t\t\t\t$('<div></div>').append(self.__Content).html();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (title) {\n\t\t\t\t\t\t\t\tself._$origin.attr('title', title);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// final cleaning\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself._$origin.removeClass('tooltipstered');\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself._$origin\n\t\t\t\t\t\t\t\t.removeData('tooltipster-ns')\n\t\t\t\t\t\t\t\t.removeData('tooltipster-initialTitle');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// remove the instance namespace from the list of namespaces of\n\t\t\t\t\t\t\t// tooltips present on the element\n\t\t\t\t\t\t\tns = $.grep(ns, function(el, i) {\n\t\t\t\t\t\t\t\treturn el !== self.__namespace;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tself._$origin.data('tooltipster-ns', ns);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// last event\n\t\t\t\t\tself._trigger('destroyed');\n\t\t\t\t\t\n\t\t\t\t\t// unbind private and public event listeners\n\t\t\t\t\tself._off();\n\t\t\t\t\tself.off();\n\t\t\t\t\t\n\t\t\t\t\t// remove external references, just in case\n\t\t\t\t\tself.__Content = null;\n\t\t\t\t\tself.__$emitterPrivate = null;\n\t\t\t\t\tself.__$emitterPublic = null;\n\t\t\t\t\tself.__options.parent = null;\n\t\t\t\t\tself._$origin = null;\n\t\t\t\t\tself._$tooltip = null;\n\t\t\t\t\t\n\t\t\t\t\t// make sure the object is no longer referenced in there to prevent\n\t\t\t\t\t// memory leaks\n\t\t\t\t\t$.tooltipster.__instancesLatestArr = $.grep($.tooltipster.__instancesLatestArr, function(el, i) {\n\t\t\t\t\t\treturn self !== el;\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tclearInterval(self.__garbageCollector);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tself.__destroyError();\n\t\t}\n\t\t\n\t\t// we return the scope rather than true so that the call to\n\t\t// .tooltipster('destroy') actually returns the matched elements\n\t\t// and applies to all of them\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Disables the tooltip\n\t * \n\t * @returns {self}\n\t * @public\n\t */\n\tdisable: function() {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\t\n\t\t\t// close first, in case the tooltip would not disappear on\n\t\t\t// its own (no close trigger)\n\t\t\tthis._close();\n\t\t\tthis.__enabled = false;\n\t\t\t\n\t\t\treturn this;\n\t\t}\n\t\telse {\n\t\t\tthis.__destroyError();\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Returns the HTML element of the origin\n\t *\n\t * @returns {self}\n\t * @public\n\t */\n\telementOrigin: function() {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\treturn this._$origin[0];\n\t\t}\n\t\telse {\n\t\t\tthis.__destroyError();\n\t\t}\n\t},\n\t\n\t/**\n\t * Returns the HTML element of the tooltip\n\t *\n\t * @returns {self}\n\t * @public\n\t */\n\telementTooltip: function() {\n\t\treturn this._$tooltip ? this._$tooltip[0] : null;\n\t},\n\t\n\t/**\n\t * Enables the tooltip\n\t * \n\t * @returns {self}\n\t * @public\n\t */\n\tenable: function() {\n\t\tthis.__enabled = true;\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Alias, deprecated in 4.0.0\n\t * \n\t * @param {function} callback\n\t * @returns {self}\n\t * @public\n\t */\n\thide: function(callback) {\n\t\treturn this.close(callback);\n\t},\n\t\n\t/**\n\t * Returns the instance\n\t * \n\t * @returns {self}\n\t * @public\n\t */\n\tinstance: function() {\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For public use only, not to be used by plugins (use ::_off() instead)\n\t * \n\t * @returns {self}\n\t * @public\n\t */\n\toff: function() {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\tthis.__$emitterPublic.off.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For public use only, not to be used by plugins (use ::_on() instead)\n\t *\n\t * @returns {self}\n\t * @public\n\t */\n\ton: function() {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\tthis.__$emitterPublic.on.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\t}\n\t\telse {\n\t\t\tthis.__destroyError();\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For public use only, not to be used by plugins\n\t *\n\t * @returns {self}\n\t * @public\n\t */\n\tone: function() {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\tthis.__$emitterPublic.one.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\t}\n\t\telse {\n\t\t\tthis.__destroyError();\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * @see self::_open\n\t * @returns {self}\n\t * @public\n\t */\n\topen: function(callback) {\n\t\t\n\t\tif (!this.__destroyed && !this.__destroying) {\n\t\t\tthis._open(null, callback);\n\t\t}\n\t\telse {\n\t\t\tthis.__destroyError();\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Get or set options. For internal use and advanced users only.\n\t * \n\t * @param {string} o Option name\n\t * @param {mixed} val optional A new value for the option\n\t * @return {mixed|self} If val is omitted, the value of the option\n\t * is returned, otherwise the instance itself is returned\n\t * @public\n\t */ \n\toption: function(o, val) {\n\t\t\n\t\t// getter\n\t\tif (val === undefined) {\n\t\t\treturn this.__options[o];\n\t\t}\n\t\t// setter\n\t\telse {\n\t\t\t\n\t\t\tif (!this.__destroyed) {\n\t\t\t\t\n\t\t\t\t// change value\n\t\t\t\tthis.__options[o] = val;\n\t\t\t\t\n\t\t\t\t// format\n\t\t\t\tthis.__optionsFormat();\n\t\t\t\t\n\t\t\t\t// re-prepare the triggers if needed\n\t\t\t\tif ($.inArray(o, ['trigger', 'triggerClose', 'triggerOpen']) >= 0) {\n\t\t\t\t\tthis.__prepareOrigin();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (o === 'selfDestruction') {\n\t\t\t\t\tthis.__prepareGC();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.__destroyError();\n\t\t\t}\n\t\t\t\n\t\t\treturn this;\n\t\t}\n\t},\n\t\n\t/**\n\t * This method is in charge of setting the position and size properties of the tooltip.\n\t * All the hard work is delegated to the display plugin.\n\t * Note: The tooltip may be detached from the DOM at the moment the method is called \n\t * but must be attached by the end of the method call.\n\t * \n\t * @param {object} event For internal use only. Defined if an event such as\n\t * window resizing triggered the repositioning\n\t * @param {boolean} tooltipIsDetached For internal use only. Set this to true if you\n\t * know that the tooltip not being in the DOM is not an issue (typically when the\n\t * tooltip element has just been created but has not been added to the DOM yet).\n\t * @returns {self}\n\t * @public\n\t */\n\treposition: function(event, tooltipIsDetached) {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\tif (!self.__destroyed) {\n\t\t\t\n\t\t\t// if the tooltip is still open and the origin is still in the DOM\n\t\t\tif (self.__state != 'closed' && bodyContains(self._$origin)) {\n\t\t\t\t\n\t\t\t\t// if the tooltip has not been removed from DOM manually (or if it\n\t\t\t\t// has been detached on purpose)\n\t\t\t\tif (tooltipIsDetached || bodyContains(self._$tooltip)) {\n\t\t\t\t\t\n\t\t\t\t\tif (!tooltipIsDetached) {\n\t\t\t\t\t\t// detach in case the tooltip overflows the window and adds\n\t\t\t\t\t\t// scrollbars to it, so __geometry can be accurate\n\t\t\t\t\t\tself._$tooltip.detach();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// refresh the geometry object before passing it as a helper\n\t\t\t\t\tself.__Geometry = self.__geometry();\n\t\t\t\t\t\n\t\t\t\t\t// let a plugin fo the rest\n\t\t\t\t\tself._trigger({\n\t\t\t\t\t\ttype: 'reposition',\n\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\thelper: {\n\t\t\t\t\t\t\tgeo: self.__Geometry\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\telse {\n\t\t\tself.__destroyError();\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Alias, deprecated in 4.0.0\n\t *\n\t * @param callback\n\t * @returns {self}\n\t * @public\n\t */\n\tshow: function(callback) {\n\t\treturn this.open(callback);\n\t},\n\t\n\t/**\n\t * Returns some properties about the instance\n\t * \n\t * @returns {object}\n\t * @public\n\t */\n\tstatus: function() {\n\t\t\n\t\treturn {\n\t\t\tdestroyed: this.__destroyed,\n\t\t\tdestroying: this.__destroying,\n\t\t\tenabled: this.__enabled,\n\t\t\topen: this.__state !== 'closed',\n\t\t\tstate: this.__state\n\t\t};\n\t},\n\t\n\t/**\n\t * For public use only, not to be used by plugins\n\t *\n\t * @returns {self}\n\t * @public\n\t */\n\ttriggerHandler: function() {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\tthis.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\t}\n\t\telse {\n\t\t\tthis.__destroyError();\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n};\n\n$.fn.tooltipster = function() {\n\t\n\t// for using in closures\n\tvar args = Array.prototype.slice.apply(arguments),\n\t\t// common mistake: an HTML element can't be in several tooltips at the same time\n\t\tcontentCloningWarning = 'You are using a single HTML element as content for several tooltips. You probably want to set the contentCloning option to TRUE.';\n\t\n\t// this happens with $(sel).tooltipster(...) when $(sel) does not match anything\n\tif (this.length === 0) {\n\t\t\n\t\t// still chainable\n\t\treturn this;\n\t}\n\t// this happens when calling $(sel).tooltipster('methodName or options')\n\t// where $(sel) matches one or more elements\n\telse {\n\t\t\n\t\t// method calls\n\t\tif (typeof args[0] === 'string') {\n\t\t\t\n\t\t\tvar v = '#*$~&';\n\t\t\t\n\t\t\tthis.each(function() {\n\t\t\t\t\n\t\t\t\t// retrieve the namepaces of the tooltip(s) that exist on that element.\n\t\t\t\t// We will interact with the first tooltip only.\n\t\t\t\tvar ns = $(this).data('tooltipster-ns'),\n\t\t\t\t\t// self represents the instance of the first tooltipster plugin\n\t\t\t\t\t// associated to the current HTML object of the loop\n\t\t\t\t\tself = ns ? $(this).data(ns[0]) : null;\n\t\t\t\t\n\t\t\t\t// if the current element holds a tooltipster instance\n\t\t\t\tif (self) {\n\t\t\t\t\t\n\t\t\t\t\tif (typeof self[args[0]] === 'function') {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (\tthis.length > 1\n\t\t\t\t\t\t\t&&\targs[0] == 'content'\n\t\t\t\t\t\t\t&&\t(\targs[1] instanceof $\n\t\t\t\t\t\t\t\t|| (typeof args[1] == 'object' && args[1] != null && args[1].tagName)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t&&\t!self.__options.contentCloning\n\t\t\t\t\t\t\t&&\tself.__options.debug\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconsole.log(contentCloningWarning);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// note : args[1] and args[2] may not be defined\n\t\t\t\t\t\tvar resp = self[args[0]](args[1], args[2]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Unknown method \"'+ args[0] +'\"');\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// if the function returned anything other than the instance\n\t\t\t\t\t// itself (which implies chaining, except for the `instance` method)\n\t\t\t\t\tif (resp !== self || args[0] === 'instance') {\n\t\t\t\t\t\t\n\t\t\t\t\t\tv = resp;\n\t\t\t\t\t\t\n\t\t\t\t\t\t// return false to stop .each iteration on the first element\n\t\t\t\t\t\t// matched by the selector\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error('You called Tooltipster\\'s \"'+ args[0] +'\" method on an uninitialized element');\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\treturn (v !== '#*$~&') ? v : this;\n\t\t}\n\t\t// first argument is undefined or an object: the tooltip is initializing\n\t\telse {\n\t\t\t\n\t\t\t// reset the array of last initialized objects\n\t\t\t$.tooltipster.__instancesLatestArr = [];\n\t\t\t\n\t\t\t// is there a defined value for the multiple option in the options object ?\n\t\t\tvar\tmultipleIsSet = args[0] && args[0].multiple !== undefined,\n\t\t\t\t// if the multiple option is set to true, or if it's not defined but\n\t\t\t\t// set to true in the defaults\n\t\t\t\tmultiple = (multipleIsSet && args[0].multiple) || (!multipleIsSet && defaults.multiple),\n\t\t\t\t// same for content\n\t\t\t\tcontentIsSet = args[0] && args[0].content !== undefined,\n\t\t\t\tcontent = (contentIsSet && args[0].content) || (!contentIsSet && defaults.content),\n\t\t\t\t// same for contentCloning\n\t\t\t\tcontentCloningIsSet = args[0] && args[0].contentCloning !== undefined,\n\t\t\t\tcontentCloning =\n\t\t\t\t\t\t(contentCloningIsSet && args[0].contentCloning)\n\t\t\t\t\t||\t(!contentCloningIsSet && defaults.contentCloning),\n\t\t\t\t// same for debug\n\t\t\t\tdebugIsSet = args[0] && args[0].debug !== undefined,\n\t\t\t\tdebug = (debugIsSet && args[0].debug) || (!debugIsSet && defaults.debug);\n\t\t\t\n\t\t\tif (\tthis.length > 1\n\t\t\t\t&&\t(\tcontent instanceof $\n\t\t\t\t\t|| (typeof content == 'object' && content != null && content.tagName)\n\t\t\t\t)\n\t\t\t\t&&\t!contentCloning\n\t\t\t\t&&\tdebug\n\t\t\t) {\n\t\t\t\tconsole.log(contentCloningWarning);\n\t\t\t}\n\t\t\t\n\t\t\t// create a tooltipster instance for each element if it doesn't\n\t\t\t// already have one or if the multiple option is set, and attach the\n\t\t\t// object to it\n\t\t\tthis.each(function() {\n\t\t\t\t\n\t\t\t\tvar go = false,\n\t\t\t\t\t$this = $(this),\n\t\t\t\t\tns = $this.data('tooltipster-ns'),\n\t\t\t\t\tobj = null;\n\t\t\t\t\n\t\t\t\tif (!ns) {\n\t\t\t\t\tgo = true;\n\t\t\t\t}\n\t\t\t\telse if (multiple) {\n\t\t\t\t\tgo = true;\n\t\t\t\t}\n\t\t\t\telse if (debug) {\n\t\t\t\t\tconsole.log('Tooltipster: one or more tooltips are already attached to the element below. Ignoring.');\n\t\t\t\t\tconsole.log(this);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (go) {\n\t\t\t\t\tobj = new $.Tooltipster(this, args[0]);\n\t\t\t\t\t\n\t\t\t\t\t// save the reference of the new instance\n\t\t\t\t\tif (!ns) ns = [];\n\t\t\t\t\tns.push(obj.__namespace);\n\t\t\t\t\t$this.data('tooltipster-ns', ns);\n\t\t\t\t\t\n\t\t\t\t\t// save the instance itself\n\t\t\t\t\t$this.data(obj.__namespace, obj);\n\t\t\t\t\t\n\t\t\t\t\t// call our constructor custom function.\n\t\t\t\t\t// we do this here and not in ::init() because we wanted\n\t\t\t\t\t// the object to be saved in $this.data before triggering\n\t\t\t\t\t// it\n\t\t\t\t\tif (obj.__options.functionInit) {\n\t\t\t\t\t\tobj.__options.functionInit.call(obj, obj, {\n\t\t\t\t\t\t\torigin: this\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// and now the event, for the plugins and core emitter\n\t\t\t\t\tobj._trigger('init');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t$.tooltipster.__instancesLatestArr.push(obj);\n\t\t\t});\n\t\t\t\n\t\t\treturn this;\n\t\t}\n\t}\n};\n\n// Utilities\n\n/**\n * A class to check if a tooltip can fit in given dimensions\n * \n * @param {object} $tooltip The jQuery wrapped tooltip element, or a clone of it\n */\nfunction Ruler($tooltip) {\n\t\n\t// list of instance variables\n\t\n\tthis.$container;\n\tthis.constraints = null;\n\tthis.__$tooltip;\n\t\n\tthis.__init($tooltip);\n}\n\nRuler.prototype = {\n\t\n\t/**\n\t * Move the tooltip into an invisible div that does not allow overflow to make\n\t * size tests. Note: the tooltip may or may not be attached to the DOM at the\n\t * moment this method is called, it does not matter.\n\t * \n\t * @param {object} $tooltip The object to test. May be just a clone of the\n\t * actual tooltip.\n\t * @private\n\t */\n\t__init: function($tooltip) {\n\t\t\n\t\tthis.__$tooltip = $tooltip;\n\t\t\n\t\tthis.__$tooltip\n\t\t\t.css({\n\t\t\t\t// for some reason we have to specify top and left 0\n\t\t\t\tleft: 0,\n\t\t\t\t// any overflow will be ignored while measuring\n\t\t\t\toverflow: 'hidden',\n\t\t\t\t// positions at (0,0) without the div using 100% of the available width\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0\n\t\t\t})\n\t\t\t// overflow must be auto during the test. We re-set this in case\n\t\t\t// it were modified by the user\n\t\t\t.find('.tooltipster-content')\n\t\t\t\t.css('overflow', 'auto');\n\t\t\n\t\tthis.$container = $('<div class=\"tooltipster-ruler\"></div>')\n\t\t\t.append(this.__$tooltip)\n\t\t\t.appendTo('body');\n\t},\n\t\n\t/**\n\t * Force the browser to redraw (re-render) the tooltip immediately. This is required\n\t * when you changed some CSS properties and need to make something with it\n\t * immediately, without waiting for the browser to redraw at the end of instructions.\n\t *\n\t * @see http://stackoverflow.com/questions/3485365/how-can-i-force-webkit-to-redraw-repaint-to-propagate-style-changes\n\t * @private\n\t */\n\t__forceRedraw: function() {\n\t\t\n\t\t// note: this would work but for Webkit only\n\t\t//this.__$tooltip.close();\n\t\t//this.__$tooltip[0].offsetHeight;\n\t\t//this.__$tooltip.open();\n\t\t\n\t\t// works in FF too\n\t\tvar $p = this.__$tooltip.parent();\n\t\tthis.__$tooltip.detach();\n\t\tthis.__$tooltip.appendTo($p);\n\t},\n\t\n\t/**\n\t * Set maximum dimensions for the tooltip. A call to ::measure afterwards\n\t * will tell us if the content overflows or if it's ok\n\t *\n\t * @param {int} width\n\t * @param {int} height\n\t * @return {Ruler}\n\t * @public\n\t */\n\tconstrain: function(width, height) {\n\t\t\n\t\tthis.constraints = {\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\t\t\n\t\tthis.__$tooltip.css({\n\t\t\t// we disable display:flex, otherwise the content would overflow without\n\t\t\t// creating horizontal scrolling (which we need to detect).\n\t\t\tdisplay: 'block',\n\t\t\t// reset any previous height\n\t\t\theight: '',\n\t\t\t// we'll check if horizontal scrolling occurs\n\t\t\toverflow: 'auto',\n\t\t\t// we'll set the width and see what height is generated and if there\n\t\t\t// is horizontal overflow\n\t\t\twidth: width\n\t\t});\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Reset the tooltip content overflow and remove the test container\n\t * \n\t * @returns {Ruler}\n\t * @public\n\t */\n\tdestroy: function() {\n\t\t\n\t\t// in case the element was not a clone\n\t\tthis.__$tooltip\n\t\t\t.detach()\n\t\t\t.find('.tooltipster-content')\n\t\t\t\t.css({\n\t\t\t\t\t// reset to CSS value\n\t\t\t\t\tdisplay: '',\n\t\t\t\t\toverflow: ''\n\t\t\t\t});\n\t\t\n\t\tthis.$container.remove();\n\t},\n\t\n\t/**\n\t * Removes any constraints\n\t * \n\t * @returns {Ruler}\n\t * @public\n\t */\n\tfree: function() {\n\t\t\n\t\tthis.constraints = null;\n\t\t\n\t\t// reset to natural size\n\t\tthis.__$tooltip.css({\n\t\t\tdisplay: '',\n\t\t\theight: '',\n\t\t\toverflow: 'visible',\n\t\t\twidth: ''\n\t\t});\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Returns the size of the tooltip. When constraints are applied, also returns\n\t * whether the tooltip fits in the provided dimensions.\n\t * The idea is to see if the new height is small enough and if the content does\n\t * not overflow horizontally.\n\t *\n\t * @param {int} width\n\t * @param {int} height\n\t * @returns {object} An object with a bool `fits` property and a `size` property\n\t * @public\n\t */\n\tmeasure: function() {\n\t\t\n\t\tthis.__forceRedraw();\n\t\t\n\t\tvar tooltipBcr = this.__$tooltip[0].getBoundingClientRect(),\n\t\t\tresult = { size: {\n\t\t\t\t// bcr.width/height are not defined in IE8- but in this\n\t\t\t\t// case, bcr.right/bottom will have the same value\n\t\t\t\t// except in iOS 8+ where tooltipBcr.bottom/right are wrong\n\t\t\t\t// after scrolling for reasons yet to be determined\n\t\t\t\theight: tooltipBcr.height || tooltipBcr.bottom,\n\t\t\t\twidth: tooltipBcr.width || tooltipBcr.right\n\t\t\t}};\n\t\t\n\t\tif (this.constraints) {\n\t\t\t\n\t\t\t// note: we used to use offsetWidth instead of boundingRectClient but\n\t\t\t// it returned rounded values, causing issues with sub-pixel layouts.\n\t\t\t\n\t\t\t// note2: noticed that the bcrWidth of text content of a div was once\n\t\t\t// greater than the bcrWidth of its container by 1px, causing the final\n\t\t\t// tooltip box to be too small for its content. However, evaluating\n\t\t\t// their widths one against the other (below) surprisingly returned\n\t\t\t// equality. Happened only once in Chrome 48, was not able to reproduce\n\t\t\t// => just having fun with float position values...\n\t\t\t\n\t\t\tvar $content = this.__$tooltip.find('.tooltipster-content'),\n\t\t\t\theight = this.__$tooltip.outerHeight(),\n\t\t\t\tcontentBcr = $content[0].getBoundingClientRect(),\n\t\t\t\tfits = {\n\t\t\t\t\theight: height <= this.constraints.height,\n\t\t\t\t\twidth: (\n\t\t\t\t\t\t// this condition accounts for min-width property that\n\t\t\t\t\t\t// may apply\n\t\t\t\t\t\ttooltipBcr.width <= this.constraints.width\n\t\t\t\t\t\t\t// the -1 is here because scrollWidth actually returns\n\t\t\t\t\t\t\t// a rounded value, and may be greater than bcr.width if\n\t\t\t\t\t\t\t// it was rounded up. This may cause an issue for contents\n\t\t\t\t\t\t\t// which actually really overflow by 1px or so, but that\n\t\t\t\t\t\t\t// should be rare. Not sure how to solve this efficiently.\n\t\t\t\t\t\t\t// See http://blogs.msdn.com/b/ie/archive/2012/02/17/sub-pixel-rendering-and-the-css-object-model.aspx\n\t\t\t\t\t\t&&\tcontentBcr.width >= $content[0].scrollWidth - 1\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t\n\t\t\tresult.fits = fits.height && fits.width;\n\t\t}\n\t\t\n\t\t// old versions of IE get the width wrong for some reason and it causes\n\t\t// the text to be broken to a new line, so we round it up. If the width\n\t\t// is the width of the screen though, we can assume it is accurate.\n\t\tif (\tenv.IE\n\t\t\t&&\tenv.IE <= 11\n\t\t\t&&\tresult.size.width !== env.window.document.documentElement.clientWidth\n\t\t) {\n\t\t\tresult.size.width = Math.ceil(result.size.width) + 1;\n\t\t}\n\t\t\n\t\treturn result;\n\t}\n};\n\n// quick & dirty compare function, not bijective nor multidimensional\nfunction areEqual(a,b) {\n\tvar same = true;\n\t$.each(a, function(i, _) {\n\t\tif (b[i] === undefined || a[i] !== b[i]) {\n\t\t\tsame = false;\n\t\t\treturn false;\n\t\t}\n\t});\n\treturn same;\n}\n\n/**\n * A fast function to check if an element is still in the DOM. It\n * tries to use an id as ids are indexed by the browser, or falls\n * back to jQuery's `contains` method. May fail if two elements\n * have the same id, but so be it\n *\n * @param {object} $obj A jQuery-wrapped HTML element\n * @return {boolean}\n */\nfunction bodyContains($obj) {\n\tvar id = $obj.attr('id'),\n\t\tel = id ? env.window.document.getElementById(id) : null;\n\t// must also check that the element with the id is the one we want\n\treturn el ? el === $obj[0] : $.contains(env.window.document.body, $obj[0]);\n}\n\n// detect IE versions for dirty fixes\nvar uA = navigator.userAgent.toLowerCase();\nif (uA.indexOf('msie') != -1) env.IE = parseInt(uA.split('msie')[1]);\nelse if (uA.toLowerCase().indexOf('trident') !== -1 && uA.indexOf(' rv:11') !== -1) env.IE = 11;\nelse if (uA.toLowerCase().indexOf('edge/') != -1) env.IE = parseInt(uA.toLowerCase().split('edge/')[1]);\n\n// detecting support for CSS transitions\nfunction transitionSupport() {\n\t\n\t// env.window is not defined yet when this is called\n\tif (!win) return false;\n\t\n\tvar b = win.document.body || win.document.documentElement,\n\t\ts = b.style,\n\t\tp = 'transition',\n\t\tv = ['Moz', 'Webkit', 'Khtml', 'O', 'ms'];\n\t\n\tif (typeof s[p] == 'string') { return true; }\n\t\n\tp = p.charAt(0).toUpperCase() + p.substr(1);\n\tfor (var i=0; i<v.length; i++) {\n\t\tif (typeof s[v[i] + p] == 'string') { return true; }\n\t}\n\treturn false;\n}\n\n// we'll return jQuery for plugins not to have to declare it as a dependency,\n// but it's done by a build task since it should be included only once at the\n// end when we concatenate the core file with a plugin\r\n// sideTip is Tooltipster's default plugin.\n// This file will be UMDified by a build task.\n\nvar pluginName = 'tooltipster.sideTip';\n\n$.tooltipster._plugin({\n\tname: pluginName,\n\tinstance: {\n\t\t/**\n\t\t * Defaults are provided as a function for an easy override by inheritance\n\t\t *\n\t\t * @return {object} An object with the defaults options\n\t\t * @private\n\t\t */\n\t\t__defaults: function() {\n\t\t\t\n\t\t\treturn {\n\t\t\t\t// if the tooltip should display an arrow that points to the origin\n\t\t\t\tarrow: true,\n\t\t\t\t// the distance in pixels between the tooltip and the origin\n\t\t\t\tdistance: 6,\n\t\t\t\t// allows to easily change the position of the tooltip\n\t\t\t\tfunctionPosition: null,\n\t\t\t\tmaxWidth: null,\n\t\t\t\t// used to accomodate the arrow of tooltip if there is one.\n\t\t\t\t// First to make sure that the arrow target is not too close\n\t\t\t\t// to the edge of the tooltip, so the arrow does not overflow\n\t\t\t\t// the tooltip. Secondly when we reposition the tooltip to\n\t\t\t\t// make sure that it's positioned in such a way that the arrow is\n\t\t\t\t// still pointing at the target (and not a few pixels beyond it).\n\t\t\t\t// It should be equal to or greater than half the width of\n\t\t\t\t// the arrow (by width we mean the size of the side which touches\n\t\t\t\t// the side of the tooltip).\n\t\t\t\tminIntersection: 16,\n\t\t\t\tminWidth: 0,\n\t\t\t\t// deprecated in 4.0.0. Listed for _optionsExtract to pick it up\n\t\t\t\tposition: null,\n\t\t\t\tside: 'top',\n\t\t\t\t// set to false to position the tooltip relatively to the document rather\n\t\t\t\t// than the window when we open it\n\t\t\t\tviewportAware: true\n\t\t\t};\n\t\t},\n\t\t\n\t\t/**\n\t\t * Run once: at instantiation of the plugin\n\t\t *\n\t\t * @param {object} instance The tooltipster object that instantiated this plugin\n\t\t * @private\n\t\t */\n\t\t__init: function(instance) {\n\t\t\t\n\t\t\tvar self = this;\n\t\t\t\n\t\t\t// list of instance variables\n\t\t\t\n\t\t\tself.__instance = instance;\n\t\t\tself.__namespace = 'tooltipster-sideTip-'+ Math.round(Math.random()*1000000);\n\t\t\tself.__previousState = 'closed';\n\t\t\tself.__options;\n\t\t\t\n\t\t\t// initial formatting\n\t\t\tself.__optionsFormat();\n\t\t\t\n\t\t\tself.__instance._on('state.'+ self.__namespace, function(event) {\n\t\t\t\t\n\t\t\t\tif (event.state == 'closed') {\n\t\t\t\t\tself.__close();\n\t\t\t\t}\n\t\t\t\telse if (event.state == 'appearing' && self.__previousState == 'closed') {\n\t\t\t\t\tself.__create();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tself.__previousState = event.state;\n\t\t\t});\n\t\t\t\n\t\t\t// reformat every time the options are changed\n\t\t\tself.__instance._on('options.'+ self.__namespace, function() {\n\t\t\t\tself.__optionsFormat();\n\t\t\t});\n\t\t\t\n\t\t\tself.__instance._on('reposition.'+ self.__namespace, function(e) {\n\t\t\t\tself.__reposition(e.event, e.helper);\n\t\t\t});\n\t\t},\n\t\t\n\t\t/**\n\t\t * Called when the tooltip has closed\n\t\t * \n\t\t * @private\n\t\t */\n\t\t__close: function() {\n\t\t\t\n\t\t\t// detach our content object first, so the next jQuery's remove()\n\t\t\t// call does not unbind its event handlers\n\t\t\tif (this.__instance.content() instanceof $) {\n\t\t\t\tthis.__instance.content().detach();\n\t\t\t}\n\t\t\t\n\t\t\t// remove the tooltip from the DOM\n\t\t\tthis.__instance._$tooltip.remove();\n\t\t\tthis.__instance._$tooltip = null;\n\t\t},\n\t\t\n\t\t/**\n\t\t * Creates the HTML element of the tooltip.\n\t\t * \n\t\t * @private\n\t\t */\n\t\t__create: function() {\n\t\t\t\n\t\t\t// note: we wrap with a .tooltipster-box div to be able to set a margin on it\n\t\t\t// (.tooltipster-base must not have one)\n\t\t\tvar $html = $(\n\t\t\t\t'<div class=\"tooltipster-base tooltipster-sidetip\">' +\n\t\t\t\t\t'<div class=\"tooltipster-box\">' +\n\t\t\t\t\t\t'<div class=\"tooltipster-content\"></div>' +\n\t\t\t\t\t'</div>' +\n\t\t\t\t\t'<div class=\"tooltipster-arrow\">' +\n\t\t\t\t\t\t'<div class=\"tooltipster-arrow-uncropped\">' +\n\t\t\t\t\t\t\t'<div class=\"tooltipster-arrow-border\"></div>' +\n\t\t\t\t\t\t\t'<div class=\"tooltipster-arrow-background\"></div>' +\n\t\t\t\t\t\t'</div>' +\n\t\t\t\t\t'</div>' +\n\t\t\t\t'</div>'\n\t\t\t);\n\t\t\t\n\t\t\t// hide arrow if asked\n\t\t\tif (!this.__options.arrow) {\n\t\t\t\t$html\n\t\t\t\t\t.find('.tooltipster-box')\n\t\t\t\t\t\t.css('margin', 0)\n\t\t\t\t\t\t.end()\n\t\t\t\t\t.find('.tooltipster-arrow')\n\t\t\t\t\t\t.hide();\n\t\t\t}\n\t\t\t\n\t\t\t// apply min/max width if asked\n\t\t\tif (this.__options.minWidth) {\n\t\t\t\t$html.css('min-width', this.__options.minWidth + 'px');\n\t\t\t}\n\t\t\tif (this.__options.maxWidth) {\n\t\t\t\t$html.css('max-width', this.__options.maxWidth + 'px');\n\t\t\t}\n\t\t\t\n\t\t\tthis.__instance._$tooltip = $html;\n\t\t\t\n\t\t\t// tell the instance that the tooltip element has been created\n\t\t\tthis.__instance._trigger('created');\n\t\t},\n\t\t\n\t\t/**\n\t\t * Used when the plugin is to be unplugged\n\t\t *\n\t\t * @private\n\t\t */\n\t\t__destroy: function() {\n\t\t\tthis.__instance._off('.'+ self.__namespace);\n\t\t},\n\t\t\n\t\t/**\n\t\t * (Re)compute this.__options from the options declared to the instance\n\t\t *\n\t\t * @private\n\t\t */\n\t\t__optionsFormat: function() {\n\t\t\t\n\t\t\tvar self = this;\n\t\t\t\n\t\t\t// get the options\n\t\t\tself.__options = self.__instance._optionsExtract(pluginName, self.__defaults());\n\t\t\t\n\t\t\t// for backward compatibility, deprecated in v4.0.0\n\t\t\tif (self.__options.position) {\n\t\t\t\tself.__options.side = self.__options.position;\n\t\t\t}\n\t\t\t\n\t\t\t// options formatting\n\t\t\t\n\t\t\t// format distance as a four-cell array if it ain't one yet and then make\n\t\t\t// it an object with top/bottom/left/right properties\n\t\t\tif (typeof self.__options.distance != 'object') {\n\t\t\t\tself.__options.distance = [self.__options.distance];\n\t\t\t}\n\t\t\tif (self.__options.distance.length < 4) {\n\t\t\t\t\n\t\t\t\tif (self.__options.distance[1] === undefined) self.__options.distance[1] = self.__options.distance[0];\n\t\t\t\tif (self.__options.distance[2] === undefined) self.__options.distance[2] = self.__options.distance[0];\n\t\t\t\tif (self.__options.distance[3] === undefined) self.__options.distance[3] = self.__options.distance[1];\n\t\t\t\t\n\t\t\t\tself.__options.distance = {\n\t\t\t\t\ttop: self.__options.distance[0],\n\t\t\t\t\tright: self.__options.distance[1],\n\t\t\t\t\tbottom: self.__options.distance[2],\n\t\t\t\t\tleft: self.__options.distance[3]\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\t// let's transform:\n\t\t\t// 'top' into ['top', 'bottom', 'right', 'left']\n\t\t\t// 'right' into ['right', 'left', 'top', 'bottom']\n\t\t\t// 'bottom' into ['bottom', 'top', 'right', 'left']\n\t\t\t// 'left' into ['left', 'right', 'top', 'bottom']\n\t\t\tif (typeof self.__options.side == 'string') {\n\t\t\t\t\n\t\t\t\tvar opposites = {\n\t\t\t\t\t'top': 'bottom',\n\t\t\t\t\t'right': 'left',\n\t\t\t\t\t'bottom': 'top',\n\t\t\t\t\t'left': 'right'\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tself.__options.side = [self.__options.side, opposites[self.__options.side]];\n\t\t\t\t\n\t\t\t\tif (self.__options.side[0] == 'left' || self.__options.side[0] == 'right') {\n\t\t\t\t\tself.__options.side.push('top', 'bottom');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tself.__options.side.push('right', 'left');\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// misc\n\t\t\t// disable the arrow in IE6 unless the arrow option was explicitly set to true\n\t\t\tif (\t$.tooltipster._env.IE === 6\n\t\t\t\t&&\tself.__options.arrow !== true\n\t\t\t) {\n\t\t\t\tself.__options.arrow = false;\n\t\t\t}\n\t\t},\n\t\t\n\t\t/**\n\t\t * This method must compute and set the positioning properties of the\n\t\t * tooltip (left, top, width, height, etc.). It must also make sure the\n\t\t * tooltip is eventually appended to its parent (since the element may be\n\t\t * detached from the DOM at the moment the method is called).\n\t\t *\n\t\t * We'll evaluate positioning scenarios to find which side can contain the\n\t\t * tooltip in the best way. We'll consider things relatively to the window\n\t\t * (unless the user asks not to), then to the document (if need be, or if the\n\t\t * user explicitly requires the tests to run on the document). For each\n\t\t * scenario, measures are taken, allowing us to know how well the tooltip\n\t\t * is going to fit. After that, a sorting function will let us know what\n\t\t * the best scenario is (we also allow the user to choose his favorite\n\t\t * scenario by using an event).\n\t\t * \n\t\t * @param {object} helper An object that contains variables that plugin\n\t\t * creators may find useful (see below)\n\t\t * @param {object} helper.geo An object with many layout properties\n\t\t * about objects of interest (window, document, origin). This should help\n\t\t * plugin users compute the optimal position of the tooltip\n\t\t * @private\n\t\t */\n\t\t__reposition: function(event, helper) {\n\t\t\t\n\t\t\tvar self = this,\n\t\t\t\tfinalResult,\n\t\t\t\t// to know where to put the tooltip, we need to know on which point\n\t\t\t\t// of the x or y axis we should center it. That coordinate is the target\n\t\t\t\ttargets = self.__targetFind(helper),\n\t\t\t\ttestResults = [];\n\t\t\t\n\t\t\t// make sure the tooltip is detached while we make tests on a clone\n\t\t\tself.__instance._$tooltip.detach();\n\t\t\t\n\t\t\t// we could actually provide the original element to the Ruler and\n\t\t\t// not a clone, but it just feels right to keep it out of the\n\t\t\t// machinery.\n\t\t\tvar $clone = self.__instance._$tooltip.clone(),\n\t\t\t\t// start position tests session\n\t\t\t\truler = $.tooltipster._getRuler($clone),\n\t\t\t\tsatisfied = false,\n\t\t\t\tanimation = self.__instance.option('animation');\n\t\t\t\n\t\t\t// an animation class could contain properties that distort the size\n\t\t\tif (animation) {\n\t\t\t\t$clone.removeClass('tooltipster-'+ animation);\n\t\t\t}\n\t\t\t\n\t\t\t// start evaluating scenarios\n\t\t\t$.each(['window', 'document'], function(i, container) {\n\t\t\t\t\n\t\t\t\tvar takeTest = null;\n\t\t\t\t\n\t\t\t\t// let the user decide to keep on testing or not\n\t\t\t\tself.__instance._trigger({\n\t\t\t\t\tcontainer: container,\n\t\t\t\t\thelper: helper,\n\t\t\t\t\tsatisfied: satisfied,\n\t\t\t\t\ttakeTest: function(bool) {\n\t\t\t\t\t\ttakeTest = bool;\n\t\t\t\t\t},\n\t\t\t\t\tresults: testResults,\n\t\t\t\t\ttype: 'positionTest'\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif (\ttakeTest == true\n\t\t\t\t\t||\t(\ttakeTest != false\n\t\t\t\t\t\t&&\tsatisfied == false\n\t\t\t\t\t\t\t// skip the window scenarios if asked. If they are reintegrated by\n\t\t\t\t\t\t\t// the callback of the positionTest event, they will have to be\n\t\t\t\t\t\t\t// excluded using the callback of positionTested\n\t\t\t\t\t\t&&\t(container != 'window' || self.__options.viewportAware)\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\t\n\t\t\t\t\t// for each allowed side\n\t\t\t\t\tfor (var i=0; i < self.__options.side.length; i++) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar distance = {\n\t\t\t\t\t\t\t\thorizontal: 0,\n\t\t\t\t\t\t\t\tvertical: 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tside = self.__options.side[i];\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (side == 'top' || side == 'bottom') {\n\t\t\t\t\t\t\tdistance.vertical = self.__options.distance[side];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tdistance.horizontal = self.__options.distance[side];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// this may have an effect on the size of the tooltip if there are css\n\t\t\t\t\t\t// rules for the arrow or something else\n\t\t\t\t\t\tself.__sideChange($clone, side);\n\t\t\t\t\t\t\n\t\t\t\t\t\t$.each(['natural', 'constrained'], function(i, mode) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttakeTest = null;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// emit an event on the instance\n\t\t\t\t\t\t\tself.__instance._trigger({\n\t\t\t\t\t\t\t\tcontainer: container,\n\t\t\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\t\t\thelper: helper,\n\t\t\t\t\t\t\t\tmode: mode,\n\t\t\t\t\t\t\t\tresults: testResults,\n\t\t\t\t\t\t\t\tsatisfied: satisfied,\n\t\t\t\t\t\t\t\tside: side,\n\t\t\t\t\t\t\t\ttakeTest: function(bool) {\n\t\t\t\t\t\t\t\t\ttakeTest = bool;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttype: 'positionTest'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (\ttakeTest == true\n\t\t\t\t\t\t\t\t||\t(\ttakeTest != false\n\t\t\t\t\t\t\t\t\t&&\tsatisfied == false\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tvar testResult = {\n\t\t\t\t\t\t\t\t\tcontainer: container,\n\t\t\t\t\t\t\t\t\t// we let the distance as an object here, it can make things a little easier\n\t\t\t\t\t\t\t\t\t// during the user's calculations at positionTest/positionTested\n\t\t\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t\t\t// whether the tooltip can fit in the size of the viewport (does not mean\n\t\t\t\t\t\t\t\t\t// that we'll be able to make it initially entirely visible, see 'whole')\n\t\t\t\t\t\t\t\t\tfits: null,\n\t\t\t\t\t\t\t\t\tmode: mode,\n\t\t\t\t\t\t\t\t\touterSize: null,\n\t\t\t\t\t\t\t\t\tside: side,\n\t\t\t\t\t\t\t\t\tsize: null,\n\t\t\t\t\t\t\t\t\ttarget: targets[side],\n\t\t\t\t\t\t\t\t\t// check if the origin has enough surface on screen for the tooltip to\n\t\t\t\t\t\t\t\t\t// aim at it without overflowing the viewport (this is due to the thickness\n\t\t\t\t\t\t\t\t\t// of the arrow represented by the minIntersection length).\n\t\t\t\t\t\t\t\t\t// If not, the tooltip will have to be partly or entirely off screen in\n\t\t\t\t\t\t\t\t\t// order to stay docked to the origin. This value will stay null when the\n\t\t\t\t\t\t\t\t\t// container is the document, as it is not relevant\n\t\t\t\t\t\t\t\t\twhole: null\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// get the size of the tooltip with or without size constraints\n\t\t\t\t\t\t\t\tvar rulerConfigured = (mode == 'natural') ?\n\t\t\t\t\t\t\t\t\t\truler.free() :\n\t\t\t\t\t\t\t\t\t\truler.constrain(\n\t\t\t\t\t\t\t\t\t\t\thelper.geo.available[container][side].width - distance.horizontal,\n\t\t\t\t\t\t\t\t\t\t\thelper.geo.available[container][side].height - distance.vertical\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\trulerResults = rulerConfigured.measure();\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\ttestResult.size = rulerResults.size;\n\t\t\t\t\t\t\t\ttestResult.outerSize = {\n\t\t\t\t\t\t\t\t\theight: rulerResults.size.height + distance.vertical,\n\t\t\t\t\t\t\t\t\twidth: rulerResults.size.width + distance.horizontal\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (mode == 'natural') {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif(\t\thelper.geo.available[container][side].width >= testResult.outerSize.width\n\t\t\t\t\t\t\t\t\t\t&&\thelper.geo.available[container][side].height >= testResult.outerSize.height\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\ttestResult.fits = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\ttestResult.fits = 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\telse {\n\t\t\t\t\t\t\t\t\ttestResult.fits = rulerResults.fits;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (container == 'window') {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (!testResult.fits) {\n\t\t\t\t\t\t\t\t\t\ttestResult.whole = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tif (side == 'top' || side == 'bottom') {\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\ttestResult.whole = (\n\t\t\t\t\t\t\t\t\t\t\t\t\thelper.geo.origin.windowOffset.right >= self.__options.minIntersection\n\t\t\t\t\t\t\t\t\t\t\t\t&&\thelper.geo.window.size.width - helper.geo.origin.windowOffset.left >= self.__options.minIntersection\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\ttestResult.whole = (\n\t\t\t\t\t\t\t\t\t\t\t\t\thelper.geo.origin.windowOffset.bottom >= self.__options.minIntersection\n\t\t\t\t\t\t\t\t\t\t\t\t&&\thelper.geo.window.size.height - helper.geo.origin.windowOffset.top >= self.__options.minIntersection\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\ttestResults.push(testResult);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// we don't need to compute more positions if we have one fully on screen\n\t\t\t\t\t\t\t\tif (testResult.whole) {\n\t\t\t\t\t\t\t\t\tsatisfied = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t// don't run the constrained test unless the natural width was greater\n\t\t\t\t\t\t\t\t\t// than the available width, otherwise it's pointless as we know it\n\t\t\t\t\t\t\t\t\t// wouldn't fit either\n\t\t\t\t\t\t\t\t\tif (\ttestResult.mode == 'natural'\n\t\t\t\t\t\t\t\t\t\t&&\t(\ttestResult.fits\n\t\t\t\t\t\t\t\t\t\t\t||\ttestResult.size.width <= helper.geo.available[container][side].width\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\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}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t// the user may eliminate the unwanted scenarios from testResults, but he's\n\t\t\t// not supposed to alter them at this point. functionPosition and the\n\t\t\t// position event serve that purpose.\n\t\t\tself.__instance._trigger({\n\t\t\t\tedit: function(r) {\n\t\t\t\t\ttestResults = r;\n\t\t\t\t},\n\t\t\t\tevent: event,\n\t\t\t\thelper: helper,\n\t\t\t\tresults: testResults,\n\t\t\t\ttype: 'positionTested'\n\t\t\t});\n\t\t\t\n\t\t\t/**\n\t\t\t * Sort the scenarios to find the favorite one.\n\t\t\t * \n\t\t\t * The favorite scenario is when we can fully display the tooltip on screen,\n\t\t\t * even if it means that the middle of the tooltip is no longer centered on\n\t\t\t * the middle of the origin (when the origin is near the edge of the screen\n\t\t\t * or even partly off screen). We want the tooltip on the preferred side,\n\t\t\t * even if it means that we have to use a constrained size rather than a\n\t\t\t * natural one (as long as it fits). When the origin is off screen at the top\n\t\t\t * the tooltip will be positioned at the bottom (if allowed), if the origin\n\t\t\t * is off screen on the right, it will be positioned on the left, etc.\n\t\t\t * If there are no scenarios where the tooltip can fit on screen, or if the\n\t\t\t * user does not want the tooltip to fit on screen (viewportAware == false),\n\t\t\t * we fall back to the scenarios relative to the document.\n\t\t\t * \n\t\t\t * When the tooltip is bigger than the viewport in either dimension, we stop\n\t\t\t * looking at the window scenarios and consider the document scenarios only,\n\t\t\t * with the same logic to find on which side it would fit best.\n\t\t\t * \n\t\t\t * If the tooltip cannot fit the document on any side, we force it at the\n\t\t\t * bottom, so at least the user can scroll to see it.\n \t\t\t */\n\t\t\ttestResults.sort(function(a, b) {\n\t\t\t\t\n\t\t\t\t// best if it's whole (the tooltip fits and adapts to the viewport)\n\t\t\t\tif (a.whole && !b.whole) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\telse if (!a.whole && b.whole) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\telse if (a.whole && b.whole) {\n\t\t\t\t\t\n\t\t\t\t\tvar ai = self.__options.side.indexOf(a.side),\n\t\t\t\t\t\tbi = self.__options.side.indexOf(b.side);\n\t\t\t\t\t\n\t\t\t\t\t// use the user's sides fallback array\n\t\t\t\t\tif (ai < bi) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\telse if (ai > bi) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// will be used if the user forced the tests to continue\n\t\t\t\t\t\treturn a.mode == 'natural' ? -1 : 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t\n\t\t\t\t\t// better if it fits\n\t\t\t\t\tif (a.fits && !b.fits) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!a.fits && b.fits) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\telse if (a.fits && b.fits) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar ai = self.__options.side.indexOf(a.side),\n\t\t\t\t\t\t\tbi = self.__options.side.indexOf(b.side);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// use the user's sides fallback array\n\t\t\t\t\t\tif (ai < bi) {\n\t\t\t\t\t\t\treturn -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (ai > bi) {\n\t\t\t\t\t\t\treturn 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// will be used if the user forced the tests to continue\n\t\t\t\t\t\t\treturn a.mode == 'natural' ? -1 : 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// if everything failed, this will give a preference to the case where\n\t\t\t\t\t\t// the tooltip overflows the document at the bottom\n\t\t\t\t\t\tif (\ta.container == 'document'\n\t\t\t\t\t\t\t&&\ta.side == 'bottom'\n\t\t\t\t\t\t\t&&\ta.mode == 'natural'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treturn 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tfinalResult = testResults[0];\n\t\t\t\n\t\t\t\n\t\t\t// now let's find the coordinates of the tooltip relatively to the window\n\t\t\tfinalResult.coord = {};\n\t\t\t\n\t\t\tswitch (finalResult.side) {\n\t\t\t\t\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'right':\n\t\t\t\t\tfinalResult.coord.top = Math.floor(finalResult.target - finalResult.size.height / 2);\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'bottom':\n\t\t\t\tcase 'top':\n\t\t\t\t\tfinalResult.coord.left = Math.floor(finalResult.target - finalResult.size.width / 2);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tswitch (finalResult.side) {\n\t\t\t\t\n\t\t\t\tcase 'left':\n\t\t\t\t\tfinalResult.coord.left = helper.geo.origin.windowOffset.left - finalResult.outerSize.width;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'right':\n\t\t\t\t\tfinalResult.coord.left = helper.geo.origin.windowOffset.right + finalResult.distance.horizontal;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'top':\n\t\t\t\t\tfinalResult.coord.top = helper.geo.origin.windowOffset.top - finalResult.outerSize.height;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'bottom':\n\t\t\t\t\tfinalResult.coord.top = helper.geo.origin.windowOffset.bottom + finalResult.distance.vertical;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\t// if the tooltip can potentially be contained within the viewport dimensions\n\t\t\t// and that we are asked to make it fit on screen\n\t\t\tif (finalResult.container == 'window') {\n\t\t\t\t\n\t\t\t\t// if the tooltip overflows the viewport, we'll move it accordingly (then it will\n\t\t\t\t// not be centered on the middle of the origin anymore). We only move horizontally\n\t\t\t\t// for top and bottom tooltips and vice versa.\n\t\t\t\tif (finalResult.side == 'top' || finalResult.side == 'bottom') {\n\t\t\t\t\t\n\t\t\t\t\t// if there is an overflow on the left\n\t\t\t\t\tif (finalResult.coord.left < 0) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// prevent the overflow unless the origin itself gets off screen (minus the\n\t\t\t\t\t\t// margin needed to keep the arrow pointing at the target)\n\t\t\t\t\t\tif (helper.geo.origin.windowOffset.right - this.__options.minIntersection >= 0) {\n\t\t\t\t\t\t\tfinalResult.coord.left = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tfinalResult.coord.left = helper.geo.origin.windowOffset.right - this.__options.minIntersection - 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// or an overflow on the right\n\t\t\t\t\telse if (finalResult.coord.left > helper.geo.window.size.width - finalResult.size.width) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (helper.geo.origin.windowOffset.left + this.__options.minIntersection <= helper.geo.window.size.width) {\n\t\t\t\t\t\t\tfinalResult.coord.left = helper.geo.window.size.width - finalResult.size.width;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tfinalResult.coord.left = helper.geo.origin.windowOffset.left + this.__options.minIntersection + 1 - finalResult.size.width;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t\n\t\t\t\t\t// overflow at the top\n\t\t\t\t\tif (finalResult.coord.top < 0) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (helper.geo.origin.windowOffset.bottom - this.__options.minIntersection >= 0) {\n\t\t\t\t\t\t\tfinalResult.coord.top = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tfinalResult.coord.top = helper.geo.origin.windowOffset.bottom - this.__options.minIntersection - 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// or at the bottom\n\t\t\t\t\telse if (finalResult.coord.top > helper.geo.window.size.height - finalResult.size.height) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (helper.geo.origin.windowOffset.top + this.__options.minIntersection <= helper.geo.window.size.height) {\n\t\t\t\t\t\t\tfinalResult.coord.top = helper.geo.window.size.height - finalResult.size.height;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tfinalResult.coord.top = helper.geo.origin.windowOffset.top + this.__options.minIntersection + 1 - finalResult.size.height;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t\n\t\t\t\t// there might be overflow here too but it's easier to handle. If there has\n\t\t\t\t// to be an overflow, we'll make sure it's on the right side of the screen\n\t\t\t\t// (because the browser will extend the document size if there is an overflow\n\t\t\t\t// on the right, but not on the left). The sort function above has already\n\t\t\t\t// made sure that a bottom document overflow is preferred to a top overflow,\n\t\t\t\t// so we don't have to care about it.\n\t\t\t\t\n\t\t\t\t// if there is an overflow on the right\n\t\t\t\tif (finalResult.coord.left > helper.geo.window.size.width - finalResult.size.width) {\n\t\t\t\t\t\n\t\t\t\t\t// this may actually create on overflow on the left but we'll fix it in a sec\n\t\t\t\t\tfinalResult.coord.left = helper.geo.window.size.width - finalResult.size.width;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// if there is an overflow on the left\n\t\t\t\tif (finalResult.coord.left < 0) {\n\t\t\t\t\t\n\t\t\t\t\t// don't care if it overflows the right after that, we made our best\n\t\t\t\t\tfinalResult.coord.left = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t// submit the positioning proposal to the user function which may choose to change\n\t\t\t// the side, size and/or the coordinates\n\t\t\t\n\t\t\t// first, set the rules that corresponds to the proposed side: it may change\n\t\t\t// the size of the tooltip, and the custom functionPosition may want to detect the\n\t\t\t// size of something before making a decision. So let's make things easier for the\n\t\t\t// implementor\n\t\t\tself.__sideChange($clone, finalResult.side);\n\t\t\t\n\t\t\t// add some variables to the helper\n\t\t\thelper.tooltipClone = $clone[0];\n\t\t\thelper.tooltipParent = self.__instance.option('parent').parent[0];\n\t\t\t// move informative values to the helper\n\t\t\thelper.mode = finalResult.mode;\n\t\t\thelper.whole = finalResult.whole;\n\t\t\t// add some variables to the helper for the functionPosition callback (these\n\t\t\t// will also be added to the event fired by self.__instance._trigger but that's\n\t\t\t// ok, we're just being consistent)\n\t\t\thelper.origin = self.__instance._$origin[0];\n\t\t\thelper.tooltip = self.__instance._$tooltip[0];\n\t\t\t\n\t\t\t// leave only the actionable values in there for functionPosition\n\t\t\tdelete finalResult.container;\n\t\t\tdelete finalResult.fits;\n\t\t\tdelete finalResult.mode;\n\t\t\tdelete finalResult.outerSize;\n\t\t\tdelete finalResult.whole;\n\t\t\t\n\t\t\t// keep only the distance on the relevant side, for clarity\n\t\t\tfinalResult.distance = finalResult.distance.horizontal || finalResult.distance.vertical;\n\t\t\t\n\t\t\t// beginners may not be comfortable with the concept of editing the object\n\t\t\t// passed by reference, so we provide an edit function and pass a clone\n\t\t\tvar finalResultClone = $.extend(true, {}, finalResult);\n\t\t\t\n\t\t\t// emit an event on the instance\n\t\t\tself.__instance._trigger({\n\t\t\t\tedit: function(result) {\n\t\t\t\t\tfinalResult = result;\n\t\t\t\t},\n\t\t\t\tevent: event,\n\t\t\t\thelper: helper,\n\t\t\t\tposition: finalResultClone,\n\t\t\t\ttype: 'position'\n\t\t\t});\n\t\t\t\n\t\t\tif (self.__options.functionPosition) {\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tvar result = self.__options.functionPosition.call(self, self.__instance, helper, finalResultClone);\n\t\t\t\t\n\t\t\t\tif (result) finalResult = result;\n\t\t\t}\n\t\t\t\n\t\t\t// end the positioning tests session (the user might have had a\n\t\t\t// use for it during the position event, now it's over)\n\t\t\truler.destroy();\n\t\t\t\n\t\t\t\n\t\t\t// compute the position of the target relatively to the tooltip root\n\t\t\t// element so we can place the arrow and make the needed adjustments\n\t\t\tvar arrowCoord,\n\t\t\t\tmaxVal;\n\t\t\t\n\t\t\tif (finalResult.side == 'top' || finalResult.side == 'bottom') {\n\t\t\t\t\n\t\t\t\tarrowCoord = {\n\t\t\t\t\tprop: 'left',\n\t\t\t\t\tval: finalResult.target - finalResult.coord.left\n\t\t\t\t};\n\t\t\t\tmaxVal = finalResult.size.width - this.__options.minIntersection;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t\n\t\t\t\tarrowCoord = {\n\t\t\t\t\tprop: 'top',\n\t\t\t\t\tval: finalResult.target - finalResult.coord.top\n\t\t\t\t};\n\t\t\t\tmaxVal = finalResult.size.height - this.__options.minIntersection;\n\t\t\t}\n\t\t\t\n\t\t\t// cannot lie beyond the boundaries of the tooltip, minus the\n\t\t\t// arrow margin\n\t\t\tif (arrowCoord.val < this.__options.minIntersection) {\n\t\t\t\tarrowCoord.val = this.__options.minIntersection;\n\t\t\t}\n\t\t\telse if (arrowCoord.val > maxVal) {\n\t\t\t\tarrowCoord.val = maxVal;\n\t\t\t}\n\t\t\t\n\t\t\tvar originParentOffset;\n\t\t\t\n\t\t\t// let's convert the window-relative coordinates into coordinates relative to the\n\t\t\t// future positioned parent that the tooltip will be appended to\n\t\t\tif (helper.geo.origin.fixedLineage) {\n\t\t\t\t\n\t\t\t\t// same as windowOffset when the position is fixed\n\t\t\t\toriginParentOffset = helper.geo.origin.windowOffset;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t\n\t\t\t\t// this assumes that the parent of the tooltip is located at\n\t\t\t\t// (0, 0) in the document, typically like when the parent is\n\t\t\t\t// <body>.\n\t\t\t\t// If we ever allow other types of parent, .tooltipster-ruler\n\t\t\t\t// will have to be appended to the parent to inherit css style\n\t\t\t\t// values that affect the display of the text and such.\n\t\t\t\toriginParentOffset = {\n\t\t\t\t\tleft: helper.geo.origin.windowOffset.left + helper.geo.window.scroll.left,\n\t\t\t\t\ttop: helper.geo.origin.windowOffset.top + helper.geo.window.scroll.top\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tfinalResult.coord = {\n\t\t\t\tleft: originParentOffset.left + (finalResult.coord.left - helper.geo.origin.windowOffset.left),\n\t\t\t\ttop: originParentOffset.top + (finalResult.coord.top - helper.geo.origin.windowOffset.top)\n\t\t\t};\n\t\t\t\n\t\t\t// set position values on the original tooltip element\n\t\t\t\n\t\t\tself.__sideChange(self.__instance._$tooltip, finalResult.side);\n\t\t\t\n\t\t\tif (helper.geo.origin.fixedLineage) {\n\t\t\t\tself.__instance._$tooltip\n\t\t\t\t\t.css('position', 'fixed');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// CSS default\n\t\t\t\tself.__instance._$tooltip\n\t\t\t\t\t.css('position', '');\n\t\t\t}\n\t\t\t\n\t\t\tself.__instance._$tooltip\n\t\t\t\t.css({\n\t\t\t\t\tleft: finalResult.coord.left,\n\t\t\t\t\ttop: finalResult.coord.top,\n\t\t\t\t\t// we need to set a size even if the tooltip is in its natural size\n\t\t\t\t\t// because when the tooltip is positioned beyond the width of the body\n\t\t\t\t\t// (which is by default the width of the window; it will happen when\n\t\t\t\t\t// you scroll the window horizontally to get to the origin), its text\n\t\t\t\t\t// content will otherwise break lines at each word to keep up with the\n\t\t\t\t\t// body overflow strategy.\n\t\t\t\t\theight: finalResult.size.height,\n\t\t\t\t\twidth: finalResult.size.width\n\t\t\t\t})\n\t\t\t\t.find('.tooltipster-arrow')\n\t\t\t\t\t.css({\n\t\t\t\t\t\t'left': '',\n\t\t\t\t\t\t'top': ''\n\t\t\t\t\t})\n\t\t\t\t\t.css(arrowCoord.prop, arrowCoord.val);\n\t\t\t\n\t\t\t// append the tooltip HTML element to its parent\n\t\t\tself.__instance._$tooltip.appendTo(self.__instance.option('parent'));\n\t\t\t\n\t\t\tself.__instance._trigger({\n\t\t\t\ttype: 'repositioned',\n\t\t\t\tevent: event,\n\t\t\t\tposition: finalResult\n\t\t\t});\n\t\t},\n\t\t\n\t\t/**\n\t\t * Make whatever modifications are needed when the side is changed. This has\n\t\t * been made an independant method for easy inheritance in custom plugins based\n\t\t * on this default plugin.\n\t\t *\n\t\t * @param {object} $obj\n\t\t * @param {string} side\n\t\t * @private\n\t\t */\n\t\t__sideChange: function($obj, side) {\n\t\t\t\n\t\t\t$obj\n\t\t\t\t.removeClass('tooltipster-bottom')\n\t\t\t\t.removeClass('tooltipster-left')\n\t\t\t\t.removeClass('tooltipster-right')\n\t\t\t\t.removeClass('tooltipster-top')\n\t\t\t\t.addClass('tooltipster-'+ side);\n\t\t},\n\t\t\n\t\t/**\n\t\t * Returns the target that the tooltip should aim at for a given side.\n\t\t * The calculated value is a distance from the edge of the window\n\t\t * (left edge for top/bottom sides, top edge for left/right side). The\n\t\t * tooltip will be centered on that position and the arrow will be\n\t\t * positioned there (as much as possible).\n\t\t *\n\t\t * @param {object} helper\n\t\t * @return {integer}\n\t\t * @private\n\t\t */\n\t\t__targetFind: function(helper) {\n\t\t\t\n\t\t\tvar target = {},\n\t\t\t\trects = this.__instance._$origin[0].getClientRects();\n\t\t\t\n\t\t\t// these lines fix a Chrome bug (issue #491)\n\t\t\tif (rects.length > 1) {\n\t\t\t\tvar opacity = this.__instance._$origin.css('opacity');\n\t\t\t\tif(opacity == 1) {\n\t\t\t\t\tthis.__instance._$origin.css('opacity', 0.99);\n\t\t\t\t\trects = this.__instance._$origin[0].getClientRects();\n\t\t\t\t\tthis.__instance._$origin.css('opacity', 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// by default, the target will be the middle of the origin\n\t\t\tif (rects.length < 2) {\n\t\t\t\t\n\t\t\t\ttarget.top = Math.floor(helper.geo.origin.windowOffset.left + (helper.geo.origin.size.width / 2));\n\t\t\t\ttarget.bottom = target.top;\n\t\t\t\t\n\t\t\t\ttarget.left = Math.floor(helper.geo.origin.windowOffset.top + (helper.geo.origin.size.height / 2));\n\t\t\t\ttarget.right = target.left;\n\t\t\t}\n\t\t\t// if multiple client rects exist, the element may be text split\n\t\t\t// up into multiple lines and the middle of the origin may not be\n\t\t\t// best option anymore. We need to choose the best target client rect\n\t\t\telse {\n\t\t\t\t\n\t\t\t\t// top: the first\n\t\t\t\tvar targetRect = rects[0];\n\t\t\t\ttarget.top = Math.floor(targetRect.left + (targetRect.right - targetRect.left) / 2);\n\t\t\n\t\t\t\t// right: the middle line, rounded down in case there is an even\n\t\t\t\t// number of lines (looks more centered => check out the\n\t\t\t\t// demo with 4 split lines)\n\t\t\t\tif (rects.length > 2) {\n\t\t\t\t\ttargetRect = rects[Math.ceil(rects.length / 2) - 1];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttargetRect = rects[0];\n\t\t\t\t}\n\t\t\t\ttarget.right = Math.floor(targetRect.top + (targetRect.bottom - targetRect.top) / 2);\n\t\t\n\t\t\t\t// bottom: the last\n\t\t\t\ttargetRect = rects[rects.length - 1];\n\t\t\t\ttarget.bottom = Math.floor(targetRect.left + (targetRect.right - targetRect.left) / 2);\n\t\t\n\t\t\t\t// left: the middle line, rounded up\n\t\t\t\tif (rects.length > 2) {\n\t\t\t\t\ttargetRect = rects[Math.ceil((rects.length + 1) / 2) - 1];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttargetRect = rects[rects.length - 1];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttarget.left = Math.floor(targetRect.top + (targetRect.bottom - targetRect.top) / 2);\n\t\t\t}\n\t\t\t\n\t\t\treturn target;\n\t\t}\n\t}\n});\n\n/* a build task will add \"return $;\" here */\nreturn $;\n\n}));\n\n/*!\r\n* jquery.inputmask.bundle.js\r\n* https://github.com/RobinHerbots/jquery.inputmask\r\n* Copyright (c) 2010 - 2017 Robin Herbots\r\n* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\r\n* Version: 3.3.5-34\r\n*/\r\n!function($) {\r\n function Inputmask(alias, options, internal) {\r\n return this instanceof Inputmask ? (this.el = void 0, this.events = {}, this.maskset = void 0, \r\n this.refreshValue = !1, void (internal !== !0 && ($.isPlainObject(alias) ? options = alias : (options = options || {}, \r\n options.alias = alias), this.opts = $.extend(!0, {}, this.defaults, options), this.noMasksCache = options && void 0 !== options.definitions, \r\n this.userOptions = options || {}, this.isRTL = this.opts.numericInput, resolveAlias(this.opts.alias, options, this.opts)))) : new Inputmask(alias, options, internal);\r\n }\r\n function resolveAlias(aliasStr, options, opts) {\r\n var aliasDefinition = Inputmask.prototype.aliases[aliasStr];\r\n return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, void 0, opts), \r\n $.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr), \r\n !1);\r\n }\r\n function generateMaskSet(opts, nocache) {\r\n function generateMask(mask, metadata, opts) {\r\n if (null !== mask && \"\" !== mask) {\r\n if (1 === mask.length && opts.greedy === !1 && 0 !== opts.repeat && (opts.placeholder = \"\"), \r\n opts.repeat > 0 || \"*\" === opts.repeat || \"+\" === opts.repeat) {\r\n var repeatStart = \"*\" === opts.repeat ? 0 : \"+\" === opts.repeat ? 1 : opts.repeat;\r\n mask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + \",\" + opts.repeat + opts.quantifiermarker.end;\r\n }\r\n var masksetDefinition;\r\n return void 0 === Inputmask.prototype.masksCache[mask] || nocache === !0 ? (masksetDefinition = {\r\n mask: mask,\r\n maskToken: Inputmask.prototype.analyseMask(mask, opts),\r\n validPositions: {},\r\n _buffer: void 0,\r\n buffer: void 0,\r\n tests: {},\r\n metadata: metadata,\r\n maskLength: void 0\r\n }, nocache !== !0 && (Inputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask] = masksetDefinition, \r\n masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask]), \r\n masksetDefinition;\r\n }\r\n }\r\n var ms;\r\n if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) {\r\n if (opts.mask.length > 1) {\r\n opts.keepStatic = null === opts.keepStatic || opts.keepStatic;\r\n var altMask = opts.groupmarker.start;\r\n return $.each(opts.numericInput ? opts.mask.reverse() : opts.mask, function(ndx, msk) {\r\n altMask.length > 1 && (altMask += opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start), \r\n altMask += void 0 === msk.mask || $.isFunction(msk.mask) ? msk : msk.mask;\r\n }), altMask += opts.groupmarker.end, generateMask(altMask, opts.mask, opts);\r\n }\r\n opts.mask = opts.mask.pop();\r\n }\r\n return opts.mask && (ms = void 0 === opts.mask.mask || $.isFunction(opts.mask.mask) ? generateMask(opts.mask, opts.mask, opts) : generateMask(opts.mask.mask, opts.mask, opts)), \r\n ms;\r\n }\r\n function maskScope(actionObj, maskset, opts) {\r\n function getMaskTemplate(baseOnInput, minimalPos, includeMode) {\r\n minimalPos = minimalPos || 0;\r\n var ndxIntlzr, test, testPos, maskTemplate = [], pos = 0, lvp = getLastValidPosition();\r\n maxLength = void 0 !== el ? el.maxLength : void 0, maxLength === -1 && (maxLength = void 0);\r\n do baseOnInput === !0 && getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos], \r\n test = testPos.match, ndxIntlzr = testPos.locator.slice(), maskTemplate.push(includeMode === !0 ? testPos.input : includeMode === !1 ? test.nativeDef : getPlaceholder(pos, test))) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), \r\n test = testPos.match, ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || pos < lvp || \"number\" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && maskTemplate.push(includeMode === !1 ? test.nativeDef : getPlaceholder(pos, test))), \r\n pos++; while ((void 0 === maxLength || pos < maxLength) && (null !== test.fn || \"\" !== test.def) || minimalPos > pos);\r\n return \"\" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), getMaskSet().maskLength = pos + 1, \r\n maskTemplate;\r\n }\r\n function getMaskSet() {\r\n return maskset;\r\n }\r\n function resetMaskSet(soft) {\r\n var maskset = getMaskSet();\r\n maskset.buffer = void 0, soft !== !0 && (maskset._buffer = void 0, maskset.validPositions = {}, \r\n maskset.p = 0);\r\n }\r\n function getLastValidPosition(closestTo, strict, validPositions) {\r\n var before = -1, after = -1, valids = validPositions || getMaskSet().validPositions;\r\n void 0 === closestTo && (closestTo = -1);\r\n for (var posNdx in valids) {\r\n var psNdx = parseInt(posNdx);\r\n valids[psNdx] && (strict || valids[psNdx].generatedInput !== !0) && (psNdx <= closestTo && (before = psNdx), \r\n psNdx >= closestTo && (after = psNdx));\r\n }\r\n return before !== -1 && closestTo - before > 1 || after < closestTo ? before : after;\r\n }\r\n function stripValidPositions(start, end, nocheck, strict) {\r\n function IsEnclosedStatic(pos) {\r\n var posMatch = getMaskSet().validPositions[pos];\r\n if (void 0 !== posMatch && null === posMatch.match.fn) {\r\n var prevMatch = getMaskSet().validPositions[pos - 1], nextMatch = getMaskSet().validPositions[pos + 1];\r\n return void 0 !== prevMatch && void 0 !== nextMatch;\r\n }\r\n return !1;\r\n }\r\n var i, startPos = start, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), needsValidation = !1;\r\n for (getMaskSet().p = start, i = end - 1; i >= startPos; i--) void 0 !== getMaskSet().validPositions[i] && (nocheck !== !0 && (!getMaskSet().validPositions[i].match.optionality && IsEnclosedStatic(i) || opts.canClearPosition(getMaskSet(), i, getLastValidPosition(), strict, opts) === !1) || delete getMaskSet().validPositions[i]);\r\n for (resetMaskSet(!0), i = startPos + 1; i <= getLastValidPosition(); ) {\r\n for (;void 0 !== getMaskSet().validPositions[startPos]; ) startPos++;\r\n if (i < startPos && (i = startPos + 1), void 0 === getMaskSet().validPositions[i] && isMask(i)) i++; else {\r\n var t = getTestTemplate(i);\r\n needsValidation === !1 && positionsClone[startPos] && positionsClone[startPos].match.def === t.match.def ? (getMaskSet().validPositions[startPos] = $.extend(!0, {}, positionsClone[startPos]), \r\n getMaskSet().validPositions[startPos].input = t.input, delete getMaskSet().validPositions[i], \r\n i++) : positionCanMatchDefinition(startPos, t.match.def) ? isValid(startPos, t.input || getPlaceholder(i), !0) !== !1 && (delete getMaskSet().validPositions[i], \r\n i++, needsValidation = !0) : isMask(i) || (i++, startPos--), startPos++;\r\n }\r\n }\r\n resetMaskSet(!0);\r\n }\r\n function determineTestTemplate(tests, guessNextBest) {\r\n for (var testPos, testPositions = tests, lvp = getLastValidPosition(), lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0], lvTestAltArr = void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation].toString().split(\",\") : [], ndx = 0; ndx < testPositions.length && (testPos = testPositions[ndx], \r\n !(testPos.match && (opts.greedy && testPos.match.optionalQuantifier !== !0 || (testPos.match.optionality === !1 || testPos.match.newBlockMarker === !1) && testPos.match.optionalQuantifier !== !0) && (void 0 === lvTest.alternation || lvTest.alternation !== testPos.alternation || void 0 !== testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(\",\"), lvTestAltArr))) || guessNextBest === !0 && (null !== testPos.match.fn || /[0-9a-bA-Z]/.test(testPos.match.def))); ndx++) ;\r\n return testPos;\r\n }\r\n function getTestTemplate(pos, ndxIntlzr, tstPs) {\r\n return getMaskSet().validPositions[pos] || determineTestTemplate(getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs));\r\n }\r\n function getTest(pos) {\r\n return getMaskSet().validPositions[pos] ? getMaskSet().validPositions[pos] : getTests(pos)[0];\r\n }\r\n function positionCanMatchDefinition(pos, def) {\r\n for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) if (tests[tndx].match && tests[tndx].match.def === def) {\r\n valid = !0;\r\n break;\r\n }\r\n return valid;\r\n }\r\n function getTests(pos, ndxIntlzr, tstPs) {\r\n function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {\r\n function handleMatch(match, loopNdx, quantifierRecurse) {\r\n function isFirstMatch(latestMatch, tokenGroup) {\r\n var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches);\r\n return firstMatch || $.each(tokenGroup.matches, function(ndx, match) {\r\n if (match.isQuantifier === !0 && (firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1]))) return !1;\r\n }), firstMatch;\r\n }\r\n function resolveNdxInitializer(pos, alternateNdx, targetAlternation) {\r\n var bestMatch, indexPos;\r\n return (getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) && $.each(getMaskSet().tests[pos] || [ getMaskSet().validPositions[pos] ], function(ndx, lmnt) {\r\n var alternation = void 0 !== targetAlternation ? targetAlternation : lmnt.alternation, ndxPos = void 0 !== lmnt.locator[alternation] ? lmnt.locator[alternation].toString().indexOf(alternateNdx) : -1;\r\n (void 0 === indexPos || ndxPos < indexPos) && ndxPos !== -1 && (bestMatch = lmnt, \r\n indexPos = ndxPos);\r\n }), bestMatch ? bestMatch.locator.slice((void 0 !== targetAlternation ? targetAlternation : bestMatch.alternation) + 1) : void 0 !== targetAlternation ? resolveNdxInitializer(pos, alternateNdx) : void 0;\r\n }\r\n function staticCanMatchDefinition(source, target) {\r\n return null === source.match.fn && null !== target.match.fn && target.match.fn.test(source.match.def, getMaskSet(), pos, !1, opts, !1);\r\n }\r\n if (testPos > 1e4) throw \"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. \" + getMaskSet().mask;\r\n if (testPos === pos && void 0 === match.matches) return matches.push({\r\n match: match,\r\n locator: loopNdx.reverse(),\r\n cd: cacheDependency\r\n }), !0;\r\n if (void 0 !== match.matches) {\r\n if (match.isGroup && quantifierRecurse !== match) {\r\n if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx)) return !0;\r\n } else if (match.isOptional) {\r\n var optionalToken = match;\r\n if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) {\r\n if (latestMatch = matches[matches.length - 1].match, !isFirstMatch(latestMatch, optionalToken)) return !0;\r\n insertStop = !0, testPos = pos;\r\n }\r\n } else if (match.isAlternator) {\r\n var maltMatches, alternateToken = match, malternateMatches = [], currentMatches = matches.slice(), loopNdxCnt = loopNdx.length, altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;\r\n if (altIndex === -1 || \"string\" == typeof altIndex) {\r\n var amndx, currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = [];\r\n if (\"string\" == typeof altIndex) altIndexArr = altIndex.split(\",\"); else for (amndx = 0; amndx < alternateToken.matches.length; amndx++) altIndexArr.push(amndx);\r\n for (var ndx = 0; ndx < altIndexArr.length; ndx++) {\r\n if (amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = resolveNdxInitializer(testPos, amndx, loopNdxCnt) || ndxInitializerClone.slice(), \r\n match = handleMatch(alternateToken.matches[amndx] || maskToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse) || match, \r\n match !== !0 && void 0 !== match && altIndexArr[altIndexArr.length - 1] < alternateToken.matches.length) {\r\n var ntndx = $.inArray(match, maskToken.matches) + 1;\r\n maskToken.matches.length > ntndx && (match = handleMatch(maskToken.matches[ntndx], [ ntndx ].concat(loopNdx.slice(1, loopNdx.length)), quantifierRecurse), \r\n match && (altIndexArr.push(ntndx.toString()), $.each(matches, function(ndx, lmnt) {\r\n lmnt.alternation = loopNdx.length - 1;\r\n })));\r\n }\r\n maltMatches = matches.slice(), testPos = currentPos, matches = [];\r\n for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {\r\n var altMatch = maltMatches[ndx1], hasMatch = !1;\r\n altMatch.alternation = altMatch.alternation || loopNdxCnt;\r\n for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {\r\n var altMatch2 = malternateMatches[ndx2];\r\n if ((\"string\" != typeof altIndex || $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr) !== -1) && (altMatch.match.def === altMatch2.match.def || staticCanMatchDefinition(altMatch, altMatch2))) {\r\n hasMatch = altMatch.match.nativeDef === altMatch2.match.nativeDef, altMatch.alternation == altMatch2.alternation && altMatch2.locator[altMatch2.alternation].toString().indexOf(altMatch.locator[altMatch.alternation]) === -1 && (altMatch2.locator[altMatch2.alternation] = altMatch2.locator[altMatch2.alternation] + \",\" + altMatch.locator[altMatch.alternation], \r\n altMatch2.alternation = altMatch.alternation, null == altMatch.match.fn && (altMatch2.na = altMatch2.na || altMatch.locator[altMatch.alternation].toString(), \r\n altMatch2.na.indexOf(altMatch.locator[altMatch.alternation]) === -1 && (altMatch2.na = altMatch2.na + \",\" + altMatch.locator[altMatch.alternation])));\r\n break;\r\n }\r\n }\r\n hasMatch || malternateMatches.push(altMatch);\r\n }\r\n }\r\n \"string\" == typeof altIndex && (malternateMatches = $.map(malternateMatches, function(lmnt, ndx) {\r\n if (isFinite(ndx)) {\r\n var mamatch, alternation = lmnt.alternation, altLocArr = lmnt.locator[alternation].toString().split(\",\");\r\n lmnt.locator[alternation] = void 0, lmnt.alternation = void 0;\r\n for (var alndx = 0; alndx < altLocArr.length; alndx++) mamatch = $.inArray(altLocArr[alndx], altIndexArr) !== -1, \r\n mamatch && (void 0 !== lmnt.locator[alternation] ? (lmnt.locator[alternation] += \",\", \r\n lmnt.locator[alternation] += altLocArr[alndx]) : lmnt.locator[alternation] = parseInt(altLocArr[alndx]), \r\n lmnt.alternation = alternation);\r\n if (void 0 !== lmnt.locator[alternation]) return lmnt;\r\n }\r\n })), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0, \r\n ndxInitializer = ndxInitializerClone.slice();\r\n } else match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse);\r\n if (match) return !0;\r\n } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) for (var qt = match, qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && testPos <= pos; qndx++) {\r\n var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];\r\n if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) {\r\n if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1, \r\n isFirstMatch(latestMatch, tokenGroup)) {\r\n if (qndx > qt.quantifier.min - 1) {\r\n insertStop = !0, testPos = pos;\r\n break;\r\n }\r\n return !0;\r\n }\r\n return !0;\r\n }\r\n } else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) return !0;\r\n } else testPos++;\r\n }\r\n for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) if (maskToken.matches[tndx].isQuantifier !== !0) {\r\n var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse);\r\n if (match && testPos === pos) return match;\r\n if (testPos > pos) break;\r\n }\r\n }\r\n function mergeLocators(tests) {\r\n var locator = [];\r\n return $.isArray(tests) || (tests = [ tests ]), tests.length > 0 && (void 0 === tests[0].alternation ? (locator = determineTestTemplate(tests.slice()).locator.slice(), \r\n 0 === locator.length && (locator = tests[0].locator.slice())) : $.each(tests, function(ndx, tst) {\r\n if (\"\" !== tst.def) if (0 === locator.length) locator = tst.locator.slice(); else for (var i = 0; i < locator.length; i++) tst.locator[i] && locator[i].toString().indexOf(tst.locator[i]) === -1 && (locator[i] += \",\" + tst.locator[i]);\r\n })), locator;\r\n }\r\n function filterTests(tests) {\r\n return opts.keepStatic && pos > 0 && tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0) && tests[0].match.optionality !== !0 && tests[0].match.optionalQuantifier !== !0 && null === tests[0].match.fn && !/[0-9a-bA-Z]/.test(tests[0].match.def) ? [ determineTestTemplate(tests) ] : tests;\r\n }\r\n var latestMatch, maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [ 0 ], matches = [], insertStop = !1, cacheDependency = ndxIntlzr ? ndxIntlzr.join(\"\") : \"\";\r\n if (pos > -1) {\r\n if (void 0 === ndxIntlzr) {\r\n for (var test, previousPos = pos - 1; void 0 === (test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) && previousPos > -1; ) previousPos--;\r\n void 0 !== test && previousPos > -1 && (ndxInitializer = mergeLocators(test), cacheDependency = ndxInitializer.join(\"\"), \r\n testPos = previousPos);\r\n }\r\n if (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) return filterTests(getMaskSet().tests[pos]);\r\n for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) {\r\n var match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [ mtndx ]);\r\n if (match && testPos === pos || testPos > pos) break;\r\n }\r\n }\r\n return (0 === matches.length || insertStop) && matches.push({\r\n match: {\r\n fn: null,\r\n cardinality: 0,\r\n optionality: !0,\r\n casing: null,\r\n def: \"\",\r\n placeholder: \"\"\r\n },\r\n locator: [],\r\n cd: cacheDependency\r\n }), void 0 !== ndxIntlzr && getMaskSet().tests[pos] ? filterTests($.extend(!0, [], matches)) : (getMaskSet().tests[pos] = $.extend(!0, [], matches), \r\n filterTests(getMaskSet().tests[pos]));\r\n }\r\n function getBufferTemplate() {\r\n return void 0 === getMaskSet()._buffer && (getMaskSet()._buffer = getMaskTemplate(!1, 1), \r\n void 0 === getMaskSet().buffer && getMaskSet()._buffer.slice()), getMaskSet()._buffer;\r\n }\r\n function getBuffer(noCache) {\r\n return void 0 !== getMaskSet().buffer && noCache !== !0 || (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)), \r\n getMaskSet().buffer;\r\n }\r\n function refreshFromBuffer(start, end, buffer) {\r\n var i;\r\n if (start === !0) resetMaskSet(), start = 0, end = buffer.length; else for (i = start; i < end; i++) delete getMaskSet().validPositions[i];\r\n for (i = start; i < end; i++) resetMaskSet(!0), buffer[i] !== opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0);\r\n }\r\n function casing(elem, test, pos) {\r\n switch (opts.casing || test.casing) {\r\n case \"upper\":\r\n elem = elem.toUpperCase();\r\n break;\r\n\r\n case \"lower\":\r\n elem = elem.toLowerCase();\r\n break;\r\n\r\n case \"title\":\r\n var posBefore = getMaskSet().validPositions[pos - 1];\r\n elem = 0 === pos || posBefore && posBefore.input === String.fromCharCode(Inputmask.keyCode.SPACE) ? elem.toUpperCase() : elem.toLowerCase();\r\n }\r\n return elem;\r\n }\r\n function checkAlternationMatch(altArr1, altArr2, na) {\r\n for (var naNdx, altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, naArr = void 0 !== na ? na.split(\",\") : [], i = 0; i < naArr.length; i++) (naNdx = altArr1.indexOf(naArr[i])) !== -1 && altArr1.splice(naNdx, 1);\r\n for (var alndx = 0; alndx < altArr1.length; alndx++) if ($.inArray(altArr1[alndx], altArrC) !== -1) {\r\n isMatch = !0;\r\n break;\r\n }\r\n return isMatch;\r\n }\r\n function isValid(pos, c, strict, fromSetValid, fromAlternate) {\r\n function isSelection(posObj) {\r\n var selection = isRTL ? posObj.begin - posObj.end > 1 || posObj.begin - posObj.end === 1 && opts.insertMode : posObj.end - posObj.begin > 1 || posObj.end - posObj.begin === 1 && opts.insertMode;\r\n return selection && 0 === posObj.begin && posObj.end === getMaskSet().maskLength ? \"full\" : selection;\r\n }\r\n function _isValid(position, c, strict) {\r\n var rslt = !1;\r\n return $.each(getTests(position), function(ndx, tst) {\r\n for (var test = tst.match, loopend = c ? 1 : 0, chrs = \"\", i = test.cardinality; i > loopend; i--) chrs += getBufferElement(position - (i - 1));\r\n if (c && (chrs += c), getBuffer(!0), rslt = null != test.fn ? test.fn.test(chrs, getMaskSet(), position, strict, opts, isSelection(pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && \"\" !== test.def && {\r\n c: getPlaceholder(position, test, !0) || test.def,\r\n pos: position\r\n }, rslt !== !1) {\r\n var elem = void 0 !== rslt.c ? rslt.c : c;\r\n elem = elem === opts.skipOptionalPartCharacter && null === test.fn ? getPlaceholder(position, test, !0) || test.def : elem;\r\n var validatedPos = position, possibleModifiedBuffer = getBuffer();\r\n if (void 0 !== rslt.remove && ($.isArray(rslt.remove) || (rslt.remove = [ rslt.remove ]), \r\n $.each(rslt.remove.sort(function(a, b) {\r\n return b - a;\r\n }), function(ndx, lmnt) {\r\n stripValidPositions(lmnt, lmnt + 1, !0);\r\n })), void 0 !== rslt.insert && ($.isArray(rslt.insert) || (rslt.insert = [ rslt.insert ]), \r\n $.each(rslt.insert.sort(function(a, b) {\r\n return a - b;\r\n }), function(ndx, lmnt) {\r\n isValid(lmnt.pos, lmnt.c, !0, fromSetValid);\r\n })), rslt.refreshFromBuffer) {\r\n var refresh = rslt.refreshFromBuffer;\r\n if (strict = !0, refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, possibleModifiedBuffer), \r\n void 0 === rslt.pos && void 0 === rslt.c) return rslt.pos = getLastValidPosition(), \r\n !1;\r\n if (validatedPos = void 0 !== rslt.pos ? rslt.pos : position, validatedPos !== position) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0, fromSetValid)), \r\n !1;\r\n } else if (rslt !== !0 && void 0 !== rslt.pos && rslt.pos !== position && (validatedPos = rslt.pos, \r\n refreshFromBuffer(position, validatedPos, getBuffer().slice()), validatedPos !== position)) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0)), \r\n !1;\r\n return (rslt === !0 || void 0 !== rslt.pos || void 0 !== rslt.c) && (ndx > 0 && resetMaskSet(!0), \r\n setValidPosition(validatedPos, $.extend({}, tst, {\r\n input: casing(elem, test, validatedPos)\r\n }), fromSetValid, isSelection(pos)) || (rslt = !1), !1);\r\n }\r\n }), rslt;\r\n }\r\n function alternate(pos, c, strict) {\r\n var lastAlt, alternation, altPos, prevAltPos, i, validPos, altNdxs, decisionPos, validPsClone = $.extend(!0, {}, getMaskSet().validPositions), isValidRslt = !1, lAltPos = getLastValidPosition();\r\n for (prevAltPos = getMaskSet().validPositions[lAltPos]; lAltPos >= 0; lAltPos--) if (altPos = getMaskSet().validPositions[lAltPos], \r\n altPos && void 0 !== altPos.alternation) {\r\n if (lastAlt = lAltPos, alternation = getMaskSet().validPositions[lastAlt].alternation, \r\n prevAltPos.locator[altPos.alternation] !== altPos.locator[altPos.alternation]) break;\r\n prevAltPos = altPos;\r\n }\r\n if (void 0 !== alternation) {\r\n decisionPos = parseInt(lastAlt);\r\n var decisionTaker = void 0 !== prevAltPos.locator[prevAltPos.alternation || alternation] ? prevAltPos.locator[prevAltPos.alternation || alternation] : altNdxs[0];\r\n decisionTaker.length > 0 && (decisionTaker = decisionTaker.split(\",\")[0]);\r\n var possibilityPos = getMaskSet().validPositions[decisionPos], prevPos = getMaskSet().validPositions[decisionPos - 1];\r\n $.each(getTests(decisionPos, prevPos ? prevPos.locator : void 0, decisionPos - 1), function(ndx, test) {\r\n altNdxs = test.locator[alternation] ? test.locator[alternation].toString().split(\",\") : [];\r\n for (var mndx = 0; mndx < altNdxs.length; mndx++) {\r\n var validInputs = [], staticInputsBeforePos = 0, staticInputsBeforePosAlternate = 0, verifyValidInput = !1;\r\n if (decisionTaker < altNdxs[mndx] && (void 0 === test.na || $.inArray(altNdxs[mndx], test.na.split(\",\")) === -1)) {\r\n getMaskSet().validPositions[decisionPos] = $.extend(!0, {}, test);\r\n var possibilities = getMaskSet().validPositions[decisionPos].locator;\r\n for (getMaskSet().validPositions[decisionPos].locator[alternation] = parseInt(altNdxs[mndx]), \r\n null == test.match.fn ? (possibilityPos.input !== test.match.def && (verifyValidInput = !0, \r\n possibilityPos.generatedInput !== !0 && validInputs.push(possibilityPos.input)), \r\n staticInputsBeforePosAlternate++, getMaskSet().validPositions[decisionPos].generatedInput = !/[0-9a-bA-Z]/.test(test.match.def), \r\n getMaskSet().validPositions[decisionPos].input = test.match.def) : getMaskSet().validPositions[decisionPos].input = possibilityPos.input, \r\n i = decisionPos + 1; i < getLastValidPosition(void 0, !0) + 1; i++) validPos = getMaskSet().validPositions[i], \r\n validPos && validPos.generatedInput !== !0 && /[0-9a-bA-Z]/.test(validPos.input) ? validInputs.push(validPos.input) : i < pos && staticInputsBeforePos++, \r\n delete getMaskSet().validPositions[i];\r\n for (verifyValidInput && validInputs[0] === test.match.def && validInputs.shift(), \r\n resetMaskSet(!0), isValidRslt = !0; validInputs.length > 0; ) {\r\n var input = validInputs.shift();\r\n if (input !== opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition(void 0, !0) + 1, input, !1, fromSetValid, !0))) break;\r\n }\r\n if (isValidRslt) {\r\n getMaskSet().validPositions[decisionPos].locator = possibilities;\r\n var targetLvp = getLastValidPosition(pos) + 1;\r\n for (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) validPos = getMaskSet().validPositions[i], \r\n (void 0 === validPos || null == validPos.match.fn) && i < pos + (staticInputsBeforePosAlternate - staticInputsBeforePos) && staticInputsBeforePosAlternate++;\r\n pos += staticInputsBeforePosAlternate - staticInputsBeforePos, isValidRslt = isValid(pos > targetLvp ? targetLvp : pos, c, strict, fromSetValid, !0);\r\n }\r\n if (isValidRslt) return !1;\r\n resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone);\r\n }\r\n }\r\n });\r\n }\r\n return isValidRslt;\r\n }\r\n function trackbackAlternations(originalPos, newPos) {\r\n var vp = getMaskSet().validPositions[newPos];\r\n if (vp) for (var targetLocator = vp.locator, tll = targetLocator.length, ps = originalPos; ps < newPos; ps++) if (void 0 === getMaskSet().validPositions[ps] && !isMask(ps, !0)) {\r\n var tests = getTests(ps).slice(), bestMatch = determineTestTemplate(tests, !0), equality = -1;\r\n \"\" === tests[tests.length - 1].match.def && tests.pop(), $.each(tests, function(ndx, tst) {\r\n for (var i = 0; i < tll; i++) {\r\n if (void 0 === tst.locator[i] || !checkAlternationMatch(tst.locator[i].toString().split(\",\"), targetLocator[i].toString().split(\",\"), tst.na)) {\r\n var targetAI = targetLocator[i], bestMatchAI = bestMatch.locator[i], tstAI = tst.locator[i];\r\n targetAI - bestMatchAI > Math.abs(targetAI - tstAI) && (bestMatch = tst);\r\n break;\r\n }\r\n equality < i && (equality = i, bestMatch = tst);\r\n }\r\n }), bestMatch = $.extend({}, bestMatch, {\r\n input: getPlaceholder(ps, bestMatch.match, !0) || bestMatch.match.def\r\n }), bestMatch.generatedInput = !0, setValidPosition(ps, bestMatch, !0), getMaskSet().validPositions[newPos] = void 0, \r\n _isValid(newPos, vp.input, !0);\r\n }\r\n }\r\n function setValidPosition(pos, validTest, fromSetValid, isSelection) {\r\n if (isSelection || opts.insertMode && void 0 !== getMaskSet().validPositions[pos] && void 0 === fromSetValid) {\r\n var i, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), lvp = getLastValidPosition(void 0, !0);\r\n for (i = pos; i <= lvp; i++) delete getMaskSet().validPositions[i];\r\n getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest);\r\n var j, valid = !0, vps = getMaskSet().validPositions, needsValidation = !1, initialLength = getMaskSet().maskLength;\r\n for (i = j = pos; i <= lvp; i++) {\r\n var t = positionsClone[i];\r\n if (void 0 !== t) for (var posMatch = j; posMatch < getMaskSet().maskLength && (null === t.match.fn && vps[i] && (vps[i].match.optionalQuantifier === !0 || vps[i].match.optionality === !0) || null != t.match.fn); ) {\r\n if (posMatch++, needsValidation === !1 && positionsClone[posMatch] && positionsClone[posMatch].match.def === t.match.def) getMaskSet().validPositions[posMatch] = $.extend(!0, {}, positionsClone[posMatch]), \r\n getMaskSet().validPositions[posMatch].input = t.input, fillMissingNonMask(posMatch), \r\n j = posMatch, valid = !0; else if (positionCanMatchDefinition(posMatch, t.match.def)) {\r\n var result = isValid(posMatch, t.input, !0, !0);\r\n valid = result !== !1, j = result.caret || result.insert ? getLastValidPosition() : posMatch, \r\n needsValidation = !0;\r\n } else if (valid = t.generatedInput === !0, !valid && posMatch >= getMaskSet().maskLength - 1) break;\r\n if (getMaskSet().maskLength < initialLength && (getMaskSet().maskLength = initialLength), \r\n valid) break;\r\n }\r\n if (!valid) break;\r\n }\r\n if (!valid) return getMaskSet().validPositions = $.extend(!0, {}, positionsClone), \r\n resetMaskSet(!0), !1;\r\n } else getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest);\r\n return resetMaskSet(!0), !0;\r\n }\r\n function fillMissingNonMask(maskPos) {\r\n for (var pndx = maskPos - 1; pndx > -1 && !getMaskSet().validPositions[pndx]; pndx--) ;\r\n var testTemplate, testsFromPos;\r\n for (pndx++; pndx < maskPos; pndx++) void 0 === getMaskSet().validPositions[pndx] && (opts.jitMasking === !1 || opts.jitMasking > pndx) && (testsFromPos = getTests(pndx, getTestTemplate(pndx - 1).locator, pndx - 1).slice(), \r\n \"\" === testsFromPos[testsFromPos.length - 1].match.def && testsFromPos.pop(), testTemplate = determineTestTemplate(testsFromPos), \r\n testTemplate && (testTemplate.match.def === opts.radixPointDefinitionSymbol || !isMask(pndx, !0) || $.inArray(opts.radixPoint, getBuffer()) < pndx && testTemplate.match.fn && testTemplate.match.fn.test(getPlaceholder(pndx), getMaskSet(), pndx, !1, opts)) && (result = _isValid(pndx, getPlaceholder(pndx, testTemplate.match, !0) || (null == testTemplate.match.fn ? testTemplate.match.def : \"\" !== getPlaceholder(pndx) ? getPlaceholder(pndx) : getBuffer()[pndx]), !0), \r\n result !== !1 && (getMaskSet().validPositions[result.pos || pndx].generatedInput = !0)));\r\n }\r\n strict = strict === !0;\r\n var maskPos = pos;\r\n void 0 !== pos.begin && (maskPos = isRTL && !isSelection(pos) ? pos.end : pos.begin);\r\n var result = !1, positionsClone = $.extend(!0, {}, getMaskSet().validPositions);\r\n if (fillMissingNonMask(maskPos), isSelection(pos) && (handleRemove(void 0, Inputmask.keyCode.DELETE, pos), \r\n maskPos = getMaskSet().p), maskPos < getMaskSet().maskLength && (result = _isValid(maskPos, c, strict), \r\n (!strict || fromSetValid === !0) && result === !1)) {\r\n var currentPosValid = getMaskSet().validPositions[maskPos];\r\n if (!currentPosValid || null !== currentPosValid.match.fn || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) {\r\n if ((opts.insertMode || void 0 === getMaskSet().validPositions[seekNext(maskPos)]) && !isMask(maskPos, !0)) for (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) if (result = _isValid(nPos, c, strict), \r\n result !== !1) {\r\n trackbackAlternations(maskPos, void 0 !== result.pos ? result.pos : nPos), maskPos = nPos;\r\n break;\r\n }\r\n } else result = {\r\n caret: seekNext(maskPos)\r\n };\r\n }\r\n return result === !1 && opts.keepStatic && !strict && fromAlternate !== !0 && (result = alternate(maskPos, c, strict)), \r\n result === !0 && (result = {\r\n pos: maskPos\r\n }), $.isFunction(opts.postValidation) && result !== !1 && !strict && fromSetValid !== !0 && (result = !!opts.postValidation(getBuffer(!0), result, opts) && result), \r\n void 0 === result.pos && (result.pos = maskPos), result === !1 && (resetMaskSet(!0), \r\n getMaskSet().validPositions = $.extend(!0, {}, positionsClone)), result;\r\n }\r\n function isMask(pos, strict) {\r\n var test;\r\n if (strict ? (test = getTestTemplate(pos).match, \"\" === test.def && (test = getTest(pos).match)) : test = getTest(pos).match, \r\n null != test.fn) return test.fn;\r\n if (strict !== !0 && pos > -1) {\r\n var tests = getTests(pos);\r\n return tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0);\r\n }\r\n return !1;\r\n }\r\n function seekNext(pos, newBlock) {\r\n var maskL = getMaskSet().maskLength;\r\n if (pos >= maskL) return maskL;\r\n for (var position = pos; ++position < maskL && (newBlock === !0 && (getTest(position).match.newBlockMarker !== !0 || !isMask(position)) || newBlock !== !0 && !isMask(position)); ) ;\r\n return position;\r\n }\r\n function seekPrevious(pos, newBlock) {\r\n var tests, position = pos;\r\n if (position <= 0) return 0;\r\n for (;--position > 0 && (newBlock === !0 && getTest(position).match.newBlockMarker !== !0 || newBlock !== !0 && !isMask(position) && (tests = getTests(position), \r\n tests.length < 2 || 2 === tests.length && \"\" === tests[1].match.def)); ) ;\r\n return position;\r\n }\r\n function getBufferElement(position) {\r\n return void 0 === getMaskSet().validPositions[position] ? getPlaceholder(position) : getMaskSet().validPositions[position].input;\r\n }\r\n function writeBuffer(input, buffer, caretPos, event, triggerInputEvent) {\r\n if (event && $.isFunction(opts.onBeforeWrite)) {\r\n var result = opts.onBeforeWrite(event, buffer, caretPos, opts);\r\n if (result) {\r\n if (result.refreshFromBuffer) {\r\n var refresh = result.refreshFromBuffer;\r\n refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer || buffer), \r\n buffer = getBuffer(!0);\r\n }\r\n void 0 !== caretPos && (caretPos = void 0 !== result.caret ? result.caret : caretPos);\r\n }\r\n }\r\n input.inputmask._valueSet(buffer.join(\"\")), void 0 === caretPos || void 0 !== event && \"blur\" === event.type ? renderColorMask(input, buffer, caretPos) : caret(input, caretPos), \r\n triggerInputEvent === !0 && (skipInputEvent = !0, $(input).trigger(\"input\"));\r\n }\r\n function getPlaceholder(pos, test, returnPL) {\r\n if (test = test || getTest(pos).match, void 0 !== test.placeholder || returnPL === !0) return $.isFunction(test.placeholder) ? test.placeholder(opts) : test.placeholder;\r\n if (null === test.fn) {\r\n if (pos > -1 && void 0 === getMaskSet().validPositions[pos]) {\r\n var prevTest, tests = getTests(pos), staticAlternations = [];\r\n if (tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0)) for (var i = 0; i < tests.length; i++) if (tests[i].match.optionality !== !0 && tests[i].match.optionalQuantifier !== !0 && (null === tests[i].match.fn || void 0 === prevTest || tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, !0, opts) !== !1) && (staticAlternations.push(tests[i]), \r\n null === tests[i].match.fn && (prevTest = tests[i]), staticAlternations.length > 1 && /[0-9a-bA-Z]/.test(staticAlternations[0].match.def))) return opts.placeholder.charAt(pos % opts.placeholder.length);\r\n }\r\n return test.def;\r\n }\r\n return opts.placeholder.charAt(pos % opts.placeholder.length);\r\n }\r\n function checkVal(input, writeOut, strict, nptvl, initiatingEvent, stickyCaret) {\r\n function isTemplateMatch() {\r\n var isMatch = !1, charCodeNdx = getBufferTemplate().slice(initialNdx, seekNext(initialNdx)).join(\"\").indexOf(charCodes);\r\n if (charCodeNdx !== -1 && !isMask(initialNdx)) {\r\n isMatch = !0;\r\n for (var bufferTemplateArr = getBufferTemplate().slice(initialNdx, initialNdx + charCodeNdx), i = 0; i < bufferTemplateArr.length; i++) if (\" \" !== bufferTemplateArr[i]) {\r\n isMatch = !1;\r\n break;\r\n }\r\n }\r\n return isMatch;\r\n }\r\n var inputValue = nptvl.slice(), charCodes = \"\", initialNdx = 0, result = void 0;\r\n if (resetMaskSet(), getMaskSet().p = seekNext(-1), !strict) if (opts.autoUnmask !== !0) {\r\n var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(\"\"), matches = inputValue.join(\"\").match(new RegExp(\"^\" + Inputmask.escapeRegex(staticInput), \"g\"));\r\n matches && matches.length > 0 && (inputValue.splice(0, matches.length * staticInput.length), \r\n initialNdx = seekNext(initialNdx));\r\n } else initialNdx = seekNext(initialNdx);\r\n if ($.each(inputValue, function(ndx, charCode) {\r\n if (void 0 !== charCode) {\r\n var keypress = new $.Event(\"keypress\");\r\n keypress.which = charCode.charCodeAt(0), charCodes += charCode;\r\n var lvp = getLastValidPosition(void 0, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : void 0, lvp);\r\n if (!isTemplateMatch() || strict || opts.autoUnmask) {\r\n var pos = strict ? ndx : null == nextTest.match.fn && nextTest.match.optionality && lvp + 1 < getMaskSet().p ? lvp + 1 : getMaskSet().p;\r\n result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, pos), \r\n initialNdx = pos + 1, charCodes = \"\";\r\n } else result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1);\r\n if (!strict && $.isFunction(opts.onBeforeWrite) && (result = opts.onBeforeWrite(keypress, getBuffer(), result.forwardPosition, opts), \r\n result && result.refreshFromBuffer)) {\r\n var refresh = result.refreshFromBuffer;\r\n refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer), \r\n resetMaskSet(!0), result.caret && (getMaskSet().p = result.caret);\r\n }\r\n }\r\n }), writeOut) {\r\n var caretPos = void 0, lvp = getLastValidPosition();\r\n document.activeElement === input && (initiatingEvent || result) && (caretPos = caret(input).begin, \r\n initiatingEvent && result === !1 && (caretPos = seekNext(getLastValidPosition(caretPos))), \r\n result && stickyCaret !== !0 && (caretPos < lvp + 1 || lvp === -1) && (caretPos = opts.numericInput && void 0 === result.caret ? seekPrevious(result.forwardPosition) : result.forwardPosition)), \r\n writeBuffer(input, getBuffer(), caretPos, initiatingEvent || new $.Event(\"checkval\"));\r\n }\r\n }\r\n function unmaskedvalue(input) {\r\n if (input) {\r\n if (void 0 === input.inputmask) return input.value;\r\n input.inputmask && input.inputmask.refreshValue && EventHandlers.setValueEvent.call(input);\r\n }\r\n var umValue = [], vps = getMaskSet().validPositions;\r\n for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input);\r\n var unmaskedValue = 0 === umValue.length ? \"\" : (isRTL ? umValue.reverse() : umValue).join(\"\");\r\n if ($.isFunction(opts.onUnMask)) {\r\n var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join(\"\");\r\n unmaskedValue = opts.onUnMask(bufferValue, unmaskedValue, opts) || unmaskedValue;\r\n }\r\n return unmaskedValue;\r\n }\r\n function caret(input, begin, end, notranslate) {\r\n function translatePosition(pos) {\r\n if (notranslate !== !0 && isRTL && \"number\" == typeof pos && (!opts.greedy || \"\" !== opts.placeholder)) {\r\n var bffrLght = getBuffer().join(\"\").length;\r\n pos = bffrLght - pos;\r\n }\r\n return pos;\r\n }\r\n var range;\r\n if (\"number\" != typeof begin) return input.setSelectionRange ? (begin = input.selectionStart, \r\n end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0), \r\n range.commonAncestorContainer.parentNode !== input && range.commonAncestorContainer !== input || (begin = range.startOffset, \r\n end = range.endOffset)) : document.selection && document.selection.createRange && (range = document.selection.createRange(), \r\n begin = 0 - range.duplicate().moveStart(\"character\", -input.inputmask._valueGet().length), \r\n end = begin + range.text.length), {\r\n begin: translatePosition(begin),\r\n end: translatePosition(end)\r\n };\r\n begin = translatePosition(begin), end = translatePosition(end), end = \"number\" == typeof end ? end : begin;\r\n var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;\r\n if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, mobile || opts.insertMode !== !1 || begin !== end || end++, \r\n input.setSelectionRange) input.selectionStart = begin, input.selectionEnd = end; else if (window.getSelection) {\r\n if (range = document.createRange(), void 0 === input.firstChild || null === input.firstChild) {\r\n var textNode = document.createTextNode(\"\");\r\n input.appendChild(textNode);\r\n }\r\n range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length), \r\n range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length), \r\n range.collapse(!0);\r\n var sel = window.getSelection();\r\n sel.removeAllRanges(), sel.addRange(range);\r\n } else input.createTextRange && (range = input.createTextRange(), range.collapse(!0), \r\n range.moveEnd(\"character\", end), range.moveStart(\"character\", begin), range.select());\r\n renderColorMask(input, void 0, {\r\n begin: begin,\r\n end: end\r\n });\r\n }\r\n function determineLastRequiredPosition(returnDefinition) {\r\n var pos, testPos, buffer = getBuffer(), bl = buffer.length, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== lvTest ? lvTest.locator.slice() : void 0;\r\n for (pos = lvp + 1; pos < buffer.length; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), \r\n ndxIntlzr = testPos.locator.slice(), positions[pos] = $.extend(!0, {}, testPos);\r\n var lvTestAlt = lvTest && void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation] : void 0;\r\n for (pos = bl - 1; pos > lvp && (testPos = positions[pos], (testPos.match.optionality || testPos.match.optionalQuantifier || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && null != testPos.match.fn || null === testPos.match.fn && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(\",\"), lvTestAlt.toString().split(\",\")) && \"\" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) bl--;\r\n return returnDefinition ? {\r\n l: bl,\r\n def: positions[bl] ? positions[bl].match : void 0\r\n } : bl;\r\n }\r\n function clearOptionalTail(buffer) {\r\n for (var validPos, rl = determineLastRequiredPosition(), bl = buffer.length; rl < bl && !isMask(rl + 1) && (validPos = getTest(rl + 1)) && validPos.match.optionality !== !0 && validPos.match.optionalQuantifier !== !0; ) rl++;\r\n for (;(validPos = getTest(rl - 1)) && validPos.match.optionality && validPos.input === opts.skipOptionalPartCharacter; ) rl--;\r\n return buffer.splice(rl), buffer;\r\n }\r\n function isComplete(buffer) {\r\n if ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts);\r\n if (\"*\" !== opts.repeat) {\r\n var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);\r\n if (void 0 === lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {\r\n complete = !0;\r\n for (var i = 0; i <= aml; i++) {\r\n var test = getTestTemplate(i).match;\r\n if (null !== test.fn && void 0 === getMaskSet().validPositions[i] && test.optionality !== !0 && test.optionalQuantifier !== !0 || null === test.fn && buffer[i] !== getPlaceholder(i, test)) {\r\n complete = !1;\r\n break;\r\n }\r\n }\r\n }\r\n return complete;\r\n }\r\n }\r\n function handleRemove(input, k, pos, strict) {\r\n function generalize() {\r\n if (opts.keepStatic) {\r\n for (var validInputs = [], lastAlt = getLastValidPosition(-1, !0), positionsClone = $.extend(!0, {}, getMaskSet().validPositions), prevAltPos = getMaskSet().validPositions[lastAlt]; lastAlt >= 0; lastAlt--) {\r\n var altPos = getMaskSet().validPositions[lastAlt];\r\n if (altPos) {\r\n if (altPos.generatedInput !== !0 && /[0-9a-bA-Z]/.test(altPos.input) && validInputs.push(altPos.input), \r\n delete getMaskSet().validPositions[lastAlt], void 0 !== altPos.alternation && altPos.locator[altPos.alternation] !== prevAltPos.locator[altPos.alternation]) break;\r\n prevAltPos = altPos;\r\n }\r\n }\r\n if (lastAlt > -1) for (getMaskSet().p = seekNext(getLastValidPosition(-1, !0)); validInputs.length > 0; ) {\r\n var keypress = new $.Event(\"keypress\");\r\n keypress.which = validInputs.pop().charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);\r\n } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);\r\n }\r\n }\r\n if ((opts.numericInput || isRTL) && (k === Inputmask.keyCode.BACKSPACE ? k = Inputmask.keyCode.DELETE : k === Inputmask.keyCode.DELETE && (k = Inputmask.keyCode.BACKSPACE), \r\n isRTL)) {\r\n var pend = pos.end;\r\n pos.end = pos.begin, pos.begin = pend;\r\n }\r\n k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || opts.insertMode === !1) ? (pos.begin = seekPrevious(pos.begin), \r\n void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.begin--) : k === Inputmask.keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end, !0) ? pos.end + 1 : seekNext(pos.end) + 1, \r\n void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.end++), \r\n stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0 && generalize();\r\n var lvp = getLastValidPosition(pos.begin, !0);\r\n lvp < pos.begin ? getMaskSet().p = seekNext(lvp) : strict !== !0 && (getMaskSet().p = pos.begin);\r\n }\r\n function initializeColorMask(input) {\r\n function findCaretPos(clientx) {\r\n var caretPos, e = document.createElement(\"span\");\r\n for (var style in computedStyle) isNaN(style) && style.indexOf(\"font\") !== -1 && (e.style[style] = computedStyle[style]);\r\n e.style.textTransform = computedStyle.textTransform, e.style.letterSpacing = computedStyle.letterSpacing, \r\n e.style.position = \"absolute\", e.style.height = \"auto\", e.style.width = \"auto\", \r\n e.style.visibility = \"hidden\", e.style.whiteSpace = \"nowrap\", document.body.appendChild(e);\r\n var itl, inputText = input.inputmask._valueGet(), previousWidth = 0;\r\n for (caretPos = 0, itl = inputText.length; caretPos <= itl; caretPos++) {\r\n if (e.innerHTML += inputText.charAt(caretPos) || \"_\", e.offsetWidth >= clientx) {\r\n var offset1 = clientx - previousWidth, offset2 = e.offsetWidth - clientx;\r\n e.innerHTML = inputText.charAt(caretPos), offset1 -= e.offsetWidth / 3, caretPos = offset1 < offset2 ? caretPos - 1 : caretPos;\r\n break;\r\n }\r\n previousWidth = e.offsetWidth;\r\n }\r\n return document.body.removeChild(e), caretPos;\r\n }\r\n function position() {\r\n colorMask.style.position = \"absolute\", colorMask.style.top = offset.top + \"px\", \r\n colorMask.style.left = offset.left + \"px\", colorMask.style.width = parseInt(input.offsetWidth) - parseInt(computedStyle.paddingLeft) - parseInt(computedStyle.paddingRight) - parseInt(computedStyle.borderLeftWidth) - parseInt(computedStyle.borderRightWidth) + \"px\", \r\n colorMask.style.height = parseInt(input.offsetHeight) - parseInt(computedStyle.paddingTop) - parseInt(computedStyle.paddingBottom) - parseInt(computedStyle.borderTopWidth) - parseInt(computedStyle.borderBottomWidth) + \"px\", \r\n colorMask.style.lineHeight = colorMask.style.height, colorMask.style.zIndex = isNaN(computedStyle.zIndex) ? -1 : computedStyle.zIndex - 1, \r\n colorMask.style.webkitAppearance = \"textfield\", colorMask.style.mozAppearance = \"textfield\", \r\n colorMask.style.Appearance = \"textfield\";\r\n }\r\n var offset = $(input).position(), computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null);\r\n input.parentNode;\r\n colorMask = document.createElement(\"div\"), document.body.appendChild(colorMask);\r\n for (var style in computedStyle) isNaN(style) && \"cssText\" !== style && style.indexOf(\"webkit\") == -1 && (colorMask.style[style] = computedStyle[style]);\r\n input.style.backgroundColor = \"transparent\", input.style.color = \"transparent\", \r\n input.style.webkitAppearance = \"caret\", input.style.mozAppearance = \"caret\", input.style.Appearance = \"caret\", \r\n position(), $(window).on(\"resize\", function(e) {\r\n offset = $(input).position(), computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null), \r\n position();\r\n }), $(input).on(\"click\", function(e) {\r\n return caret(input, findCaretPos(e.clientX)), EventHandlers.clickEvent.call(this, [ e ]);\r\n }), $(input).on(\"keydown\", function(e) {\r\n e.shiftKey || opts.insertMode === !1 || setTimeout(function() {\r\n renderColorMask(input);\r\n }, 0);\r\n });\r\n }\r\n function renderColorMask(input, buffer, caretPos) {\r\n function handleStatic() {\r\n isStatic || null !== test.fn && void 0 !== testPos.input ? isStatic && null !== test.fn && void 0 !== testPos.input && (isStatic = !1, \r\n maskTemplate += \"</span>\") : (isStatic = !0, maskTemplate += \"<span class='im-static''>\");\r\n }\r\n if (void 0 !== colorMask) {\r\n buffer = buffer || getBuffer(), void 0 === caretPos ? caretPos = caret(input) : void 0 === caretPos.begin && (caretPos = {\r\n begin: caretPos,\r\n end: caretPos\r\n });\r\n var maskTemplate = \"\", isStatic = !1;\r\n if (\"\" != buffer) {\r\n var ndxIntlzr, test, testPos, pos = 0, lvp = getLastValidPosition();\r\n do pos === caretPos.begin && document.activeElement === input && (maskTemplate += \"<span class='im-caret' style='border-right-width: 1px;border-right-style: solid;'></span>\"), \r\n getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos], \r\n test = testPos.match, ndxIntlzr = testPos.locator.slice(), handleStatic(), maskTemplate += testPos.input) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), \r\n test = testPos.match, ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || pos < lvp || \"number\" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && (handleStatic(), \r\n maskTemplate += getPlaceholder(pos, test))), pos++; while ((void 0 === maxLength || pos < maxLength) && (null !== test.fn || \"\" !== test.def) || lvp > pos);\r\n }\r\n colorMask.innerHTML = maskTemplate;\r\n }\r\n }\r\n function mask(elem) {\r\n function isElementTypeSupported(input, opts) {\r\n function patchValueProperty(npt) {\r\n function patchValhook(type) {\r\n if ($.valHooks && (void 0 === $.valHooks[type] || $.valHooks[type].inputmaskpatch !== !0)) {\r\n var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {\r\n return elem.value;\r\n }, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {\r\n return elem.value = value, elem;\r\n };\r\n $.valHooks[type] = {\r\n get: function(elem) {\r\n if (elem.inputmask) {\r\n if (elem.inputmask.opts.autoUnmask) return elem.inputmask.unmaskedvalue();\r\n var result = valhookGet(elem);\r\n return getLastValidPosition(void 0, void 0, elem.inputmask.maskset.validPositions) !== -1 || opts.nullable !== !0 ? result : \"\";\r\n }\r\n return valhookGet(elem);\r\n },\r\n set: function(elem, value) {\r\n var result, $elem = $(elem);\r\n return result = valhookSet(elem, value), elem.inputmask && $elem.trigger(\"setvalue\"), \r\n result;\r\n },\r\n inputmaskpatch: !0\r\n };\r\n }\r\n }\r\n function getter() {\r\n return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : getLastValidPosition() !== -1 || opts.nullable !== !0 ? document.activeElement === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join(\"\") : valueGet.call(this) : \"\" : valueGet.call(this);\r\n }\r\n function setter(value) {\r\n valueSet.call(this, value), this.inputmask && $(this).trigger(\"setvalue\");\r\n }\r\n function installNativeValueSetFallback(npt) {\r\n EventRuler.on(npt, \"mouseenter\", function(event) {\r\n var $input = $(this), input = this, value = input.inputmask._valueGet();\r\n value !== getBuffer().join(\"\") && $input.trigger(\"setvalue\");\r\n });\r\n }\r\n var valueGet, valueSet;\r\n if (!npt.inputmask.__valueGet) {\r\n if (opts.noValuePatching !== !0) {\r\n if (Object.getOwnPropertyDescriptor) {\r\n \"function\" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = \"object\" == typeof \"test\".__proto__ ? function(object) {\r\n return object.__proto__;\r\n } : function(object) {\r\n return object.constructor.prototype;\r\n });\r\n var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), \"value\") : void 0;\r\n valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get, \r\n valueSet = valueProperty.set, Object.defineProperty(npt, \"value\", {\r\n get: getter,\r\n set: setter,\r\n configurable: !0\r\n })) : \"INPUT\" !== npt.tagName && (valueGet = function() {\r\n return this.textContent;\r\n }, valueSet = function(value) {\r\n this.textContent = value;\r\n }, Object.defineProperty(npt, \"value\", {\r\n get: getter,\r\n set: setter,\r\n configurable: !0\r\n }));\r\n } else document.__lookupGetter__ && npt.__lookupGetter__(\"value\") && (valueGet = npt.__lookupGetter__(\"value\"), \r\n valueSet = npt.__lookupSetter__(\"value\"), npt.__defineGetter__(\"value\", getter), \r\n npt.__defineSetter__(\"value\", setter));\r\n npt.inputmask.__valueGet = valueGet, npt.inputmask.__valueSet = valueSet;\r\n }\r\n npt.inputmask._valueGet = function(overruleRTL) {\r\n return isRTL && overruleRTL !== !0 ? valueGet.call(this.el).split(\"\").reverse().join(\"\") : valueGet.call(this.el);\r\n }, npt.inputmask._valueSet = function(value, overruleRTL) {\r\n valueSet.call(this.el, null === value || void 0 === value ? \"\" : overruleRTL !== !0 && isRTL ? value.split(\"\").reverse().join(\"\") : value);\r\n }, void 0 === valueGet && (valueGet = function() {\r\n return this.value;\r\n }, valueSet = function(value) {\r\n this.value = value;\r\n }, patchValhook(npt.type), installNativeValueSetFallback(npt));\r\n }\r\n }\r\n var elementType = input.getAttribute(\"type\"), isSupported = \"INPUT\" === input.tagName && $.inArray(elementType, opts.supportsInputType) !== -1 || input.isContentEditable || \"TEXTAREA\" === input.tagName;\r\n if (!isSupported) if (\"INPUT\" === input.tagName) {\r\n var el = document.createElement(\"input\");\r\n el.setAttribute(\"type\", elementType), isSupported = \"text\" === el.type, el = null;\r\n } else isSupported = \"partial\";\r\n return isSupported !== !1 && patchValueProperty(input), isSupported;\r\n }\r\n EventRuler.off(el);\r\n var isSupported = isElementTypeSupported(elem, opts);\r\n if (isSupported !== !1 && (el = elem, $el = $(el), (\"rtl\" === el.dir || opts.rightAlign) && (el.style.textAlign = \"right\"), \r\n (\"rtl\" === el.dir || opts.numericInput) && (el.dir = \"ltr\", el.removeAttribute(\"dir\"), \r\n el.inputmask.isRTL = !0, isRTL = !0), opts.colorMask === !0 && initializeColorMask(el), \r\n android && (el.hasOwnProperty(\"inputmode\") && (el.inputmode = opts.inputmode, el.setAttribute(\"inputmode\", opts.inputmode)), \r\n \"rtfm\" === opts.androidHack && (opts.colorMask !== !0 && initializeColorMask(el), \r\n el.type = \"password\")), isSupported === !0 && (EventRuler.on(el, \"submit\", EventHandlers.submitEvent), \r\n EventRuler.on(el, \"reset\", EventHandlers.resetEvent), EventRuler.on(el, \"mouseenter\", EventHandlers.mouseenterEvent), \r\n EventRuler.on(el, \"blur\", EventHandlers.blurEvent), EventRuler.on(el, \"focus\", EventHandlers.focusEvent), \r\n EventRuler.on(el, \"mouseleave\", EventHandlers.mouseleaveEvent), opts.colorMask !== !0 && EventRuler.on(el, \"click\", EventHandlers.clickEvent), \r\n EventRuler.on(el, \"dblclick\", EventHandlers.dblclickEvent), EventRuler.on(el, \"paste\", EventHandlers.pasteEvent), \r\n EventRuler.on(el, \"dragdrop\", EventHandlers.pasteEvent), EventRuler.on(el, \"drop\", EventHandlers.pasteEvent), \r\n EventRuler.on(el, \"cut\", EventHandlers.cutEvent), EventRuler.on(el, \"complete\", opts.oncomplete), \r\n EventRuler.on(el, \"incomplete\", opts.onincomplete), EventRuler.on(el, \"cleared\", opts.oncleared), \r\n android && opts.inputEventOnly === !0 || (EventRuler.on(el, \"keydown\", EventHandlers.keydownEvent), \r\n EventRuler.on(el, \"keypress\", EventHandlers.keypressEvent)), EventRuler.on(el, \"compositionstart\", $.noop), \r\n EventRuler.on(el, \"compositionupdate\", $.noop), EventRuler.on(el, \"compositionend\", $.noop), \r\n EventRuler.on(el, \"keyup\", $.noop), EventRuler.on(el, \"input\", EventHandlers.inputFallBackEvent), \r\n EventRuler.on(el, \"beforeinput\", $.noop)), EventRuler.on(el, \"setvalue\", EventHandlers.setValueEvent), \r\n getBufferTemplate(), \"\" !== el.inputmask._valueGet() || opts.clearMaskOnLostFocus === !1 || document.activeElement === el)) {\r\n var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(el.inputmask._valueGet(), opts) || el.inputmask._valueGet() : el.inputmask._valueGet();\r\n checkVal(el, !0, !1, initialValue.split(\"\"));\r\n var buffer = getBuffer().slice();\r\n undoValue = buffer.join(\"\"), isComplete(buffer) === !1 && opts.clearIncomplete && resetMaskSet(), \r\n opts.clearMaskOnLostFocus && document.activeElement !== el && (getLastValidPosition() === -1 ? buffer = [] : clearOptionalTail(buffer)), \r\n writeBuffer(el, buffer), document.activeElement === el && caret(el, seekNext(getLastValidPosition()));\r\n }\r\n }\r\n maskset = maskset || this.maskset, opts = opts || this.opts;\r\n var undoValue, $el, maxLength, colorMask, valueBuffer, el = this.el, isRTL = this.isRTL, skipKeyPressEvent = !1, skipInputEvent = !1, ignorable = !1, mouseEnter = !1, EventRuler = {\r\n on: function(input, eventName, eventHandler) {\r\n var ev = function(e) {\r\n if (void 0 === this.inputmask && \"FORM\" !== this.nodeName) {\r\n var imOpts = $.data(this, \"_inputmask_opts\");\r\n imOpts ? new Inputmask(imOpts).mask(this) : EventRuler.off(this);\r\n } else {\r\n if (\"setvalue\" === e.type || \"FORM\" === this.nodeName || !(this.disabled || this.readOnly && !(\"keydown\" === e.type && e.ctrlKey && 67 === e.keyCode || opts.tabThrough === !1 && e.keyCode === Inputmask.keyCode.TAB))) {\r\n switch (e.type) {\r\n case \"input\":\r\n if (skipInputEvent === !0) return skipInputEvent = !1, e.preventDefault();\r\n break;\r\n\r\n case \"keydown\":\r\n skipKeyPressEvent = !1, skipInputEvent = !1;\r\n break;\r\n\r\n case \"keypress\":\r\n if (skipKeyPressEvent === !0) return e.preventDefault();\r\n skipKeyPressEvent = !0;\r\n break;\r\n\r\n case \"click\":\r\n if (iemobile || iphone) {\r\n var that = this, args = arguments;\r\n return setTimeout(function() {\r\n eventHandler.apply(that, args);\r\n }, 0), !1;\r\n }\r\n }\r\n var returnVal = eventHandler.apply(this, arguments);\r\n return returnVal === !1 && (e.preventDefault(), e.stopPropagation()), returnVal;\r\n }\r\n e.preventDefault();\r\n }\r\n };\r\n input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev), \r\n $.inArray(eventName, [ \"submit\", \"reset\" ]) !== -1 ? null != input.form && $(input.form).on(eventName, ev) : $(input).on(eventName, ev);\r\n },\r\n off: function(input, event) {\r\n if (input.inputmask && input.inputmask.events) {\r\n var events;\r\n event ? (events = [], events[event] = input.inputmask.events[event]) : events = input.inputmask.events, \r\n $.each(events, function(eventName, evArr) {\r\n for (;evArr.length > 0; ) {\r\n var ev = evArr.pop();\r\n $.inArray(eventName, [ \"submit\", \"reset\" ]) !== -1 ? null != input.form && $(input.form).off(eventName, ev) : $(input).off(eventName, ev);\r\n }\r\n delete input.inputmask.events[eventName];\r\n });\r\n }\r\n }\r\n }, EventHandlers = {\r\n keydownEvent: function(e) {\r\n function isInputEventSupported(eventName) {\r\n var el = document.createElement(\"input\"), evName = \"on\" + eventName, isSupported = evName in el;\r\n return isSupported || (el.setAttribute(evName, \"return;\"), isSupported = \"function\" == typeof el[evName]), \r\n el = null, isSupported;\r\n }\r\n var input = this, $input = $(input), k = e.keyCode, pos = caret(input);\r\n if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === Inputmask.keyCode.X && !isInputEventSupported(\"cut\")) e.preventDefault(), \r\n handleRemove(input, k, pos), writeBuffer(input, getBuffer(!0), getMaskSet().p, e, input.inputmask._valueGet() !== getBuffer().join(\"\")), \r\n input.inputmask._valueGet() === getBufferTemplate().join(\"\") ? $input.trigger(\"cleared\") : isComplete(getBuffer()) === !0 && $input.trigger(\"complete\"); else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) {\r\n e.preventDefault();\r\n var caretPos = seekNext(getLastValidPosition());\r\n opts.insertMode || caretPos !== getMaskSet().maskLength || e.shiftKey || caretPos--, \r\n caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0);\r\n } else k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP ? (e.preventDefault(), \r\n caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || 90 === k && e.ctrlKey) && e.altKey !== !0 ? (checkVal(input, !0, !1, undoValue.split(\"\")), \r\n $input.trigger(\"click\")) : k !== Inputmask.keyCode.INSERT || e.shiftKey || e.ctrlKey ? opts.tabThrough === !0 && k === Inputmask.keyCode.TAB ? (e.shiftKey === !0 ? (null === getTest(pos.begin).match.fn && (pos.begin = seekNext(pos.begin)), \r\n pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0), \r\n pos.end = seekNext(pos.begin, !0), pos.end < getMaskSet().maskLength && pos.end--), \r\n pos.begin < getMaskSet().maskLength && (e.preventDefault(), caret(input, pos.begin, pos.end))) : e.shiftKey || opts.insertMode === !1 && (k === Inputmask.keyCode.RIGHT ? setTimeout(function() {\r\n var caretPos = caret(input);\r\n caret(input, caretPos.begin);\r\n }, 0) : k === Inputmask.keyCode.LEFT && setTimeout(function() {\r\n var caretPos = caret(input);\r\n caret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1);\r\n }, 0)) : (opts.insertMode = !opts.insertMode, caret(input, opts.insertMode || pos.begin !== getMaskSet().maskLength ? pos.begin : pos.begin - 1));\r\n opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts), ignorable = $.inArray(k, opts.ignorables) !== -1;\r\n },\r\n keypressEvent: function(e, checkval, writeOut, strict, ndx) {\r\n var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode;\r\n if (!(checkval === !0 || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) return k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join(\"\") && (undoValue = getBuffer().join(\"\"), \r\n setTimeout(function() {\r\n $input.trigger(\"change\");\r\n }, 0)), !0;\r\n if (k) {\r\n 46 === k && e.shiftKey === !1 && \"\" !== opts.radixPoint && (k = opts.radixPoint.charCodeAt(0));\r\n var forwardPosition, pos = checkval ? {\r\n begin: ndx,\r\n end: ndx\r\n } : caret(input), c = String.fromCharCode(k);\r\n getMaskSet().writeOutBuffer = !0;\r\n var valResult = isValid(pos, c, strict);\r\n if (valResult !== !1 && (resetMaskSet(!0), forwardPosition = void 0 !== valResult.caret ? valResult.caret : checkval ? valResult.pos + 1 : seekNext(valResult.pos), \r\n getMaskSet().p = forwardPosition), writeOut !== !1) {\r\n var self = this;\r\n if (setTimeout(function() {\r\n opts.onKeyValidation.call(self, k, valResult, opts);\r\n }, 0), getMaskSet().writeOutBuffer && valResult !== !1) {\r\n var buffer = getBuffer();\r\n writeBuffer(input, buffer, opts.numericInput && void 0 === valResult.caret ? seekPrevious(forwardPosition) : forwardPosition, e, checkval !== !0), \r\n checkval !== !0 && setTimeout(function() {\r\n isComplete(buffer) === !0 && $input.trigger(\"complete\");\r\n }, 0);\r\n }\r\n }\r\n if (e.preventDefault(), checkval) return valResult.forwardPosition = forwardPosition, \r\n valResult;\r\n }\r\n },\r\n pasteEvent: function(e) {\r\n var tempValue, input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input);\r\n isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);\r\n var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);\r\n if (valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join(\"\") && (valueBeforeCaret = \"\"), \r\n valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join(\"\") && (valueAfterCaret = \"\"), \r\n isRTL && (tempValue = valueBeforeCaret, valueBeforeCaret = valueAfterCaret, valueAfterCaret = tempValue), \r\n window.clipboardData && window.clipboardData.getData) inputValue = valueBeforeCaret + window.clipboardData.getData(\"Text\") + valueAfterCaret; else {\r\n if (!ev.clipboardData || !ev.clipboardData.getData) return !0;\r\n inputValue = valueBeforeCaret + ev.clipboardData.getData(\"text/plain\") + valueAfterCaret;\r\n }\r\n var pasteValue = inputValue;\r\n if ($.isFunction(opts.onBeforePaste)) {\r\n if (pasteValue = opts.onBeforePaste(inputValue, opts), pasteValue === !1) return e.preventDefault();\r\n pasteValue || (pasteValue = inputValue);\r\n }\r\n return checkVal(input, !1, !1, isRTL ? pasteValue.split(\"\").reverse() : pasteValue.toString().split(\"\")), \r\n writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, undoValue !== getBuffer().join(\"\")), \r\n isComplete(getBuffer()) === !0 && $input.trigger(\"complete\"), e.preventDefault();\r\n },\r\n inputFallBackEvent: function(e) {\r\n var input = this, inputValue = input.inputmask._valueGet();\r\n if (getBuffer().join(\"\") !== inputValue) {\r\n var caretPos = caret(input);\r\n if (inputValue = inputValue.replace(new RegExp(\"(\" + Inputmask.escapeRegex(getBufferTemplate().join(\"\")) + \")*\"), \"\"), \r\n iemobile) {\r\n var inputChar = inputValue.replace(getBuffer().join(\"\"), \"\");\r\n if (1 === inputChar.length) {\r\n var keypress = new $.Event(\"keypress\");\r\n return keypress.which = inputChar.charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !0, !1, getMaskSet().validPositions[caretPos.begin - 1] ? caretPos.begin : caretPos.begin - 1), \r\n !1;\r\n }\r\n }\r\n if (caretPos.begin > inputValue.length && (caret(input, inputValue.length), caretPos = caret(input)), \r\n getBuffer().length - inputValue.length !== 1 || inputValue.charAt(caretPos.begin) === getBuffer()[caretPos.begin] || inputValue.charAt(caretPos.begin + 1) === getBuffer()[caretPos.begin] || isMask(caretPos.begin)) {\r\n for (var lvp = getLastValidPosition() + 1, bufferTemplate = getBufferTemplate().join(\"\"); null === inputValue.match(Inputmask.escapeRegex(bufferTemplate) + \"$\"); ) bufferTemplate = bufferTemplate.slice(1);\r\n inputValue = inputValue.replace(bufferTemplate, \"\"), inputValue = inputValue.split(\"\"), \r\n checkVal(input, !0, !1, inputValue, e, caretPos.begin < lvp), isComplete(getBuffer()) === !0 && $(input).trigger(\"complete\");\r\n } else e.keyCode = Inputmask.keyCode.BACKSPACE, EventHandlers.keydownEvent.call(input, e);\r\n e.preventDefault();\r\n }\r\n },\r\n setValueEvent: function(e) {\r\n this.inputmask.refreshValue = !1;\r\n var input = this, value = input.inputmask._valueGet();\r\n checkVal(input, !0, !1, ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(value, opts) || value : value).split(\"\")), \r\n undoValue = getBuffer().join(\"\"), (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join(\"\") && input.inputmask._valueSet(\"\");\r\n },\r\n focusEvent: function(e) {\r\n var input = this, nptValue = input.inputmask._valueGet();\r\n opts.showMaskOnFocus && (!opts.showMaskOnHover || opts.showMaskOnHover && \"\" === nptValue) && (input.inputmask._valueGet() !== getBuffer().join(\"\") ? writeBuffer(input, getBuffer(), seekNext(getLastValidPosition())) : mouseEnter === !1 && caret(input, seekNext(getLastValidPosition()))), \r\n opts.positionCaretOnTab === !0 && EventHandlers.clickEvent.apply(input, [ e, !0 ]), \r\n undoValue = getBuffer().join(\"\");\r\n },\r\n mouseleaveEvent: function(e) {\r\n var input = this;\r\n if (mouseEnter = !1, opts.clearMaskOnLostFocus && document.activeElement !== input) {\r\n var buffer = getBuffer().slice(), nptValue = input.inputmask._valueGet();\r\n nptValue !== input.getAttribute(\"placeholder\") && \"\" !== nptValue && (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join(\"\") ? buffer = [] : clearOptionalTail(buffer), \r\n writeBuffer(input, buffer));\r\n }\r\n },\r\n clickEvent: function(e, tabbed) {\r\n function doRadixFocus(clickPos) {\r\n if (\"\" !== opts.radixPoint) {\r\n var vps = getMaskSet().validPositions;\r\n if (void 0 === vps[clickPos] || vps[clickPos].input === getPlaceholder(clickPos)) {\r\n if (clickPos < seekNext(-1)) return !0;\r\n var radixPos = $.inArray(opts.radixPoint, getBuffer());\r\n if (radixPos !== -1) {\r\n for (var vp in vps) if (radixPos < vp && vps[vp].input !== getPlaceholder(vp)) return !1;\r\n return !0;\r\n }\r\n }\r\n }\r\n return !1;\r\n }\r\n var input = this;\r\n setTimeout(function() {\r\n if (document.activeElement === input) {\r\n var selectedCaret = caret(input);\r\n if (tabbed && (selectedCaret.begin = selectedCaret.end), selectedCaret.begin === selectedCaret.end) switch (opts.positionCaretOnClick) {\r\n case \"none\":\r\n break;\r\n\r\n case \"radixFocus\":\r\n if (doRadixFocus(selectedCaret.begin)) {\r\n var radixPos = $.inArray(opts.radixPoint, getBuffer().join(\"\"));\r\n caret(input, opts.numericInput ? seekNext(radixPos) : radixPos);\r\n break;\r\n }\r\n\r\n default:\r\n var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition, !0), lastPosition = seekNext(lvclickPosition);\r\n if (clickPosition < lastPosition) caret(input, isMask(clickPosition) || isMask(clickPosition - 1) ? clickPosition : seekNext(clickPosition)); else {\r\n var placeholder = getPlaceholder(lastPosition);\r\n (\"\" !== placeholder && getBuffer()[lastPosition] !== placeholder && getTest(lastPosition).match.optionalQuantifier !== !0 || !isMask(lastPosition) && getTest(lastPosition).match.def === placeholder) && (lastPosition = seekNext(lastPosition)), \r\n caret(input, lastPosition);\r\n }\r\n }\r\n }\r\n }, 0);\r\n },\r\n dblclickEvent: function(e) {\r\n var input = this;\r\n setTimeout(function() {\r\n caret(input, 0, seekNext(getLastValidPosition()));\r\n }, 0);\r\n },\r\n cutEvent: function(e) {\r\n var input = this, $input = $(input), pos = caret(input), ev = e.originalEvent || e, clipboardData = window.clipboardData || ev.clipboardData, clipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end);\r\n clipboardData.setData(\"text\", isRTL ? clipData.reverse().join(\"\") : clipData.join(\"\")), \r\n document.execCommand && document.execCommand(\"copy\"), handleRemove(input, Inputmask.keyCode.DELETE, pos), \r\n writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join(\"\")), \r\n input.inputmask._valueGet() === getBufferTemplate().join(\"\") && $input.trigger(\"cleared\");\r\n },\r\n blurEvent: function(e) {\r\n var $input = $(this), input = this;\r\n if (input.inputmask) {\r\n var nptValue = input.inputmask._valueGet(), buffer = getBuffer().slice();\r\n undoValue !== buffer.join(\"\") && setTimeout(function() {\r\n $input.trigger(\"change\"), undoValue = buffer.join(\"\");\r\n }, 0), \"\" !== nptValue && (opts.clearMaskOnLostFocus && (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join(\"\") ? buffer = [] : clearOptionalTail(buffer)), \r\n isComplete(buffer) === !1 && (setTimeout(function() {\r\n $input.trigger(\"incomplete\");\r\n }, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())), \r\n writeBuffer(input, buffer, void 0, e));\r\n }\r\n },\r\n mouseenterEvent: function(e) {\r\n var input = this;\r\n mouseEnter = !0, document.activeElement !== input && opts.showMaskOnHover && input.inputmask._valueGet() !== getBuffer().join(\"\") && writeBuffer(input, getBuffer());\r\n },\r\n submitEvent: function(e) {\r\n undoValue !== getBuffer().join(\"\") && $el.trigger(\"change\"), opts.clearMaskOnLostFocus && getLastValidPosition() === -1 && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join(\"\") && el.inputmask._valueSet(\"\"), \r\n opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0), \r\n setTimeout(function() {\r\n writeBuffer(el, getBuffer());\r\n }, 0));\r\n },\r\n resetEvent: function(e) {\r\n el.inputmask.refreshValue = !0, setTimeout(function() {\r\n $el.trigger(\"setvalue\");\r\n }, 0);\r\n }\r\n };\r\n if (void 0 !== actionObj) switch (actionObj.action) {\r\n case \"isComplete\":\r\n return el = actionObj.el, isComplete(getBuffer());\r\n\r\n case \"unmaskedvalue\":\r\n return void 0 !== el && void 0 === actionObj.value || (valueBuffer = actionObj.value, \r\n valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(valueBuffer, opts) || valueBuffer : valueBuffer).split(\"\"), \r\n checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts)), \r\n unmaskedvalue(el);\r\n\r\n case \"mask\":\r\n mask(el);\r\n break;\r\n\r\n case \"format\":\r\n return valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(actionObj.value, opts) || actionObj.value : actionObj.value).split(\"\"), \r\n checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts), \r\n actionObj.metadata ? {\r\n value: isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\"),\r\n metadata: maskScope.call(this, {\r\n action: \"getmetadata\"\r\n }, maskset, opts)\r\n } : isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\");\r\n\r\n case \"isValid\":\r\n actionObj.value ? (valueBuffer = actionObj.value.split(\"\"), checkVal(void 0, !1, !0, isRTL ? valueBuffer.reverse() : valueBuffer)) : actionObj.value = getBuffer().join(\"\");\r\n for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;\r\n return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join(\"\");\r\n\r\n case \"getemptymask\":\r\n return getBufferTemplate().join(\"\");\r\n\r\n case \"remove\":\r\n if (el) {\r\n $el = $(el), el.inputmask._valueSet(unmaskedvalue(el)), EventRuler.off(el);\r\n var valueProperty;\r\n Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? (valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), \"value\"), \r\n valueProperty && el.inputmask.__valueGet && Object.defineProperty(el, \"value\", {\r\n get: el.inputmask.__valueGet,\r\n set: el.inputmask.__valueSet,\r\n configurable: !0\r\n })) : document.__lookupGetter__ && el.__lookupGetter__(\"value\") && el.inputmask.__valueGet && (el.__defineGetter__(\"value\", el.inputmask.__valueGet), \r\n el.__defineSetter__(\"value\", el.inputmask.__valueSet)), el.inputmask = void 0;\r\n }\r\n return el;\r\n\r\n case \"getmetadata\":\r\n if ($.isArray(maskset.metadata)) {\r\n var maskTarget = getMaskTemplate(!0, 0, !1).join(\"\");\r\n return $.each(maskset.metadata, function(ndx, mtdt) {\r\n if (mtdt.mask === maskTarget) return maskTarget = mtdt, !1;\r\n }), maskTarget;\r\n }\r\n return maskset.metadata;\r\n }\r\n }\r\n var ua = navigator.userAgent, mobile = /mobile/i.test(ua), iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile, android = /android/i.test(ua) && !iemobile;\r\n return Inputmask.prototype = {\r\n dataAttribute: \"data-inputmask\",\r\n defaults: {\r\n placeholder: \"_\",\r\n optionalmarker: {\r\n start: \"[\",\r\n end: \"]\"\r\n },\r\n quantifiermarker: {\r\n start: \"{\",\r\n end: \"}\"\r\n },\r\n groupmarker: {\r\n start: \"(\",\r\n end: \")\"\r\n },\r\n alternatormarker: \"|\",\r\n escapeChar: \"\\\\\",\r\n mask: null,\r\n oncomplete: $.noop,\r\n onincomplete: $.noop,\r\n oncleared: $.noop,\r\n repeat: 0,\r\n greedy: !0,\r\n autoUnmask: !1,\r\n removeMaskOnSubmit: !1,\r\n clearMaskOnLostFocus: !0,\r\n insertMode: !0,\r\n clearIncomplete: !1,\r\n alias: null,\r\n onKeyDown: $.noop,\r\n onBeforeMask: null,\r\n onBeforePaste: function(pastedValue, opts) {\r\n return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(pastedValue, opts) : pastedValue;\r\n },\r\n onBeforeWrite: null,\r\n onUnMask: null,\r\n showMaskOnFocus: !0,\r\n showMaskOnHover: !0,\r\n onKeyValidation: $.noop,\r\n skipOptionalPartCharacter: \" \",\r\n numericInput: !1,\r\n rightAlign: !1,\r\n undoOnEscape: !0,\r\n radixPoint: \"\",\r\n radixPointDefinitionSymbol: void 0,\r\n groupSeparator: \"\",\r\n keepStatic: null,\r\n positionCaretOnTab: !0,\r\n tabThrough: !1,\r\n supportsInputType: [ \"text\", \"tel\", \"password\" ],\r\n ignorables: [ 8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 0, 229 ],\r\n isComplete: null,\r\n canClearPosition: $.noop,\r\n postValidation: null,\r\n staticDefinitionSymbol: void 0,\r\n jitMasking: !1,\r\n nullable: !0,\r\n inputEventOnly: !1,\r\n noValuePatching: !1,\r\n positionCaretOnClick: \"lvp\",\r\n casing: null,\r\n inputmode: \"verbatim\",\r\n colorMask: !1,\r\n androidHack: !1\r\n },\r\n definitions: {\r\n \"9\": {\r\n validator: \"[0-9]\",\r\n cardinality: 1,\r\n definitionSymbol: \"*\"\r\n },\r\n a: {\r\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\r\n cardinality: 1,\r\n definitionSymbol: \"*\"\r\n },\r\n \"*\": {\r\n validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\r\n cardinality: 1\r\n }\r\n },\r\n aliases: {},\r\n masksCache: {},\r\n mask: function(elems) {\r\n function importAttributeOptions(npt, opts, userOptions, dataAttribute) {\r\n function importOption(option, optionData) {\r\n optionData = void 0 !== optionData ? optionData : npt.getAttribute(dataAttribute + \"-\" + option), \r\n null !== optionData && (\"string\" == typeof optionData && (0 === option.indexOf(\"on\") ? optionData = window[optionData] : \"false\" === optionData ? optionData = !1 : \"true\" === optionData && (optionData = !0)), \r\n userOptions[option] = optionData);\r\n }\r\n var option, dataoptions, optionData, p, attrOptions = npt.getAttribute(dataAttribute);\r\n if (attrOptions && \"\" !== attrOptions && (attrOptions = attrOptions.replace(new RegExp(\"'\", \"g\"), '\"'), \r\n dataoptions = JSON.parse(\"{\" + attrOptions + \"}\")), dataoptions) {\r\n optionData = void 0;\r\n for (p in dataoptions) if (\"alias\" === p.toLowerCase()) {\r\n optionData = dataoptions[p];\r\n break;\r\n }\r\n }\r\n importOption(\"alias\", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts);\r\n for (option in opts) {\r\n if (dataoptions) {\r\n optionData = void 0;\r\n for (p in dataoptions) if (p.toLowerCase() === option.toLowerCase()) {\r\n optionData = dataoptions[p];\r\n break;\r\n }\r\n }\r\n importOption(option, optionData);\r\n }\r\n return $.extend(!0, opts, userOptions), opts;\r\n }\r\n var that = this;\r\n return \"string\" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)), \r\n elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) {\r\n var scopedOpts = $.extend(!0, {}, that.opts);\r\n importAttributeOptions(el, scopedOpts, $.extend(!0, {}, that.userOptions), that.dataAttribute);\r\n var maskset = generateMaskSet(scopedOpts, that.noMasksCache);\r\n void 0 !== maskset && (void 0 !== el.inputmask && el.inputmask.remove(), el.inputmask = new Inputmask((void 0), (void 0), (!0)), \r\n el.inputmask.opts = scopedOpts, el.inputmask.noMasksCache = that.noMasksCache, el.inputmask.userOptions = $.extend(!0, {}, that.userOptions), \r\n el.inputmask.isRTL = that.isRTL, el.inputmask.el = el, el.inputmask.maskset = maskset, \r\n $.data(el, \"_inputmask_opts\", scopedOpts), maskScope.call(el.inputmask, {\r\n action: \"mask\"\r\n }));\r\n }), elems && elems[0] ? elems[0].inputmask || this : this;\r\n },\r\n option: function(options, noremask) {\r\n return \"string\" == typeof options ? this.opts[options] : \"object\" == typeof options ? ($.extend(this.userOptions, options), \r\n this.el && noremask !== !0 && this.mask(this.el), this) : void 0;\r\n },\r\n unmaskedvalue: function(value) {\r\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \r\n maskScope.call(this, {\r\n action: \"unmaskedvalue\",\r\n value: value\r\n });\r\n },\r\n remove: function() {\r\n return maskScope.call(this, {\r\n action: \"remove\"\r\n });\r\n },\r\n getemptymask: function() {\r\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \r\n maskScope.call(this, {\r\n action: \"getemptymask\"\r\n });\r\n },\r\n hasMaskedValue: function() {\r\n return !this.opts.autoUnmask;\r\n },\r\n isComplete: function() {\r\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \r\n maskScope.call(this, {\r\n action: \"isComplete\"\r\n });\r\n },\r\n getmetadata: function() {\r\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \r\n maskScope.call(this, {\r\n action: \"getmetadata\"\r\n });\r\n },\r\n isValid: function(value) {\r\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \r\n maskScope.call(this, {\r\n action: \"isValid\",\r\n value: value\r\n });\r\n },\r\n format: function(value, metadata) {\r\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \r\n maskScope.call(this, {\r\n action: \"format\",\r\n value: value,\r\n metadata: metadata\r\n });\r\n },\r\n analyseMask: function(mask, opts) {\r\n function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {\r\n this.matches = [], this.openGroup = isGroup || !1, this.isGroup = isGroup || !1, \r\n this.isOptional = isOptional || !1, this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1, \r\n this.quantifier = {\r\n min: 1,\r\n max: 1\r\n };\r\n }\r\n function insertTestDefinition(mtoken, element, position) {\r\n var maskdef = (opts.definitions ? opts.definitions[element] : void 0) || Inputmask.prototype.definitions[element];\r\n position = void 0 !== position ? position : mtoken.matches.length;\r\n var prevMatch = mtoken.matches[position - 1];\r\n if (maskdef && !escaped) {\r\n for (var prevalidators = maskdef.prevalidator, prevalidatorsL = prevalidators ? prevalidators.length : 0, i = 1; i < maskdef.cardinality; i++) {\r\n var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator.validator, cardinality = prevalidator.cardinality;\r\n mtoken.matches.splice(position++, 0, {\r\n fn: validator ? \"string\" == typeof validator ? new RegExp(validator) : new function() {\r\n this.test = validator;\r\n }() : new RegExp(\".\"),\r\n cardinality: cardinality ? cardinality : 1,\r\n optionality: mtoken.isOptional,\r\n newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),\r\n casing: maskdef.casing,\r\n def: maskdef.definitionSymbol || element,\r\n placeholder: maskdef.placeholder,\r\n nativeDef: element\r\n }), prevMatch = mtoken.matches[position - 1];\r\n }\r\n mtoken.matches.splice(position++, 0, {\r\n fn: maskdef.validator ? \"string\" == typeof maskdef.validator ? new RegExp(maskdef.validator) : new function() {\r\n this.test = maskdef.validator;\r\n }() : new RegExp(\".\"),\r\n cardinality: maskdef.cardinality,\r\n optionality: mtoken.isOptional,\r\n newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),\r\n casing: maskdef.casing,\r\n def: maskdef.definitionSymbol || element,\r\n placeholder: maskdef.placeholder,\r\n nativeDef: element\r\n });\r\n } else mtoken.matches.splice(position++, 0, {\r\n fn: null,\r\n cardinality: 0,\r\n optionality: mtoken.isOptional,\r\n newBlockMarker: void 0 === prevMatch || prevMatch.def !== element,\r\n casing: null,\r\n def: opts.staticDefinitionSymbol || element,\r\n placeholder: void 0 !== opts.staticDefinitionSymbol ? element : void 0,\r\n nativeDef: element\r\n }), escaped = !1;\r\n }\r\n function verifyGroupMarker(maskToken) {\r\n maskToken && maskToken.matches && $.each(maskToken.matches, function(ndx, token) {\r\n var nextToken = maskToken.matches[ndx + 1];\r\n (void 0 === nextToken || void 0 === nextToken.matches || nextToken.isQuantifier === !1) && token && token.isGroup && (token.isGroup = !1, \r\n insertTestDefinition(token, opts.groupmarker.start, 0), token.openGroup !== !0 && insertTestDefinition(token, opts.groupmarker.end)), \r\n verifyGroupMarker(token);\r\n });\r\n }\r\n function defaultCase() {\r\n if (openenings.length > 0) {\r\n if (currentOpeningToken = openenings[openenings.length - 1], insertTestDefinition(currentOpeningToken, m), \r\n currentOpeningToken.isAlternator) {\r\n alternator = openenings.pop();\r\n for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;\r\n openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], \r\n currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);\r\n }\r\n } else insertTestDefinition(currentToken, m);\r\n }\r\n function reverseTokens(maskToken) {\r\n function reverseStatic(st) {\r\n return st === opts.optionalmarker.start ? st = opts.optionalmarker.end : st === opts.optionalmarker.end ? st = opts.optionalmarker.start : st === opts.groupmarker.start ? st = opts.groupmarker.end : st === opts.groupmarker.end && (st = opts.groupmarker.start), \r\n st;\r\n }\r\n maskToken.matches = maskToken.matches.reverse();\r\n for (var match in maskToken.matches) if (maskToken.matches.hasOwnProperty(match)) {\r\n var intMatch = parseInt(match);\r\n if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) {\r\n var qt = maskToken.matches[match];\r\n maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt);\r\n }\r\n void 0 !== maskToken.matches[match].matches ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = reverseStatic(maskToken.matches[match]);\r\n }\r\n return maskToken;\r\n }\r\n for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, groupToken, tokenizer = /(?:[?*+]|\\{[0-9\\+\\*]+(?:,[0-9\\+\\*]*)?\\})|[^.?*+^${[]()|\\\\]+|./g, escaped = !1, currentToken = new MaskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0], \r\n escaped) defaultCase(); else switch (m.charAt(0)) {\r\n case opts.escapeChar:\r\n escaped = !0;\r\n break;\r\n\r\n case opts.optionalmarker.end:\r\n case opts.groupmarker.end:\r\n if (openingToken = openenings.pop(), openingToken.openGroup = !1, void 0 !== openingToken) if (openenings.length > 0) {\r\n if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.push(openingToken), \r\n currentOpeningToken.isAlternator) {\r\n alternator = openenings.pop();\r\n for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;\r\n openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], \r\n currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);\r\n }\r\n } else currentToken.matches.push(openingToken); else defaultCase();\r\n break;\r\n\r\n case opts.optionalmarker.start:\r\n openenings.push(new MaskToken((!1), (!0)));\r\n break;\r\n\r\n case opts.groupmarker.start:\r\n openenings.push(new MaskToken((!0)));\r\n break;\r\n\r\n case opts.quantifiermarker.start:\r\n var quantifier = new MaskToken((!1), (!1), (!0));\r\n m = m.replace(/[{}]/g, \"\");\r\n var mq = m.split(\",\"), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);\r\n if (\"*\" !== mq1 && \"+\" !== mq1 || (mq0 = \"*\" === mq1 ? 0 : 1), quantifier.quantifier = {\r\n min: mq0,\r\n max: mq1\r\n }, openenings.length > 0) {\r\n var matches = openenings[openenings.length - 1].matches;\r\n match = matches.pop(), match.isGroup || (groupToken = new MaskToken((!0)), groupToken.matches.push(match), \r\n match = groupToken), matches.push(match), matches.push(quantifier);\r\n } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new MaskToken((!0)), \r\n groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), \r\n currentToken.matches.push(quantifier);\r\n break;\r\n\r\n case opts.alternatormarker:\r\n openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], \r\n lastMatch = currentOpeningToken.matches.pop()) : lastMatch = currentToken.matches.pop(), \r\n lastMatch.isAlternator ? openenings.push(lastMatch) : (alternator = new MaskToken((!1), (!1), (!1), (!0)), \r\n alternator.matches.push(lastMatch), openenings.push(alternator));\r\n break;\r\n\r\n default:\r\n defaultCase();\r\n }\r\n for (;openenings.length > 0; ) openingToken = openenings.pop(), currentToken.matches.push(openingToken);\r\n return currentToken.matches.length > 0 && (verifyGroupMarker(currentToken), maskTokens.push(currentToken)), \r\n opts.numericInput && reverseTokens(maskTokens[0]), maskTokens;\r\n }\r\n }, Inputmask.extendDefaults = function(options) {\r\n $.extend(!0, Inputmask.prototype.defaults, options);\r\n }, Inputmask.extendDefinitions = function(definition) {\r\n $.extend(!0, Inputmask.prototype.definitions, definition);\r\n }, Inputmask.extendAliases = function(alias) {\r\n $.extend(!0, Inputmask.prototype.aliases, alias);\r\n }, Inputmask.format = function(value, options, metadata) {\r\n return Inputmask(options).format(value, metadata);\r\n }, Inputmask.unmask = function(value, options) {\r\n return Inputmask(options).unmaskedvalue(value);\r\n }, Inputmask.isValid = function(value, options) {\r\n return Inputmask(options).isValid(value);\r\n }, Inputmask.remove = function(elems) {\r\n $.each(elems, function(ndx, el) {\r\n el.inputmask && el.inputmask.remove();\r\n });\r\n }, Inputmask.escapeRegex = function(str) {\r\n var specials = [ \"/\", \".\", \"*\", \"+\", \"?\", \"|\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"$\", \"^\" ];\r\n return str.replace(new RegExp(\"(\\\\\" + specials.join(\"|\\\\\") + \")\", \"gim\"), \"\\\\$1\");\r\n }, Inputmask.keyCode = {\r\n ALT: 18,\r\n BACKSPACE: 8,\r\n BACKSPACE_SAFARI: 127,\r\n CAPS_LOCK: 20,\r\n COMMA: 188,\r\n COMMAND: 91,\r\n COMMAND_LEFT: 91,\r\n COMMAND_RIGHT: 93,\r\n CONTROL: 17,\r\n DELETE: 46,\r\n DOWN: 40,\r\n END: 35,\r\n ENTER: 13,\r\n ESCAPE: 27,\r\n HOME: 36,\r\n INSERT: 45,\r\n LEFT: 37,\r\n MENU: 93,\r\n NUMPAD_ADD: 107,\r\n NUMPAD_DECIMAL: 110,\r\n NUMPAD_DIVIDE: 111,\r\n NUMPAD_ENTER: 108,\r\n NUMPAD_MULTIPLY: 106,\r\n NUMPAD_SUBTRACT: 109,\r\n PAGE_DOWN: 34,\r\n PAGE_UP: 33,\r\n PERIOD: 190,\r\n RIGHT: 39,\r\n SHIFT: 16,\r\n SPACE: 32,\r\n TAB: 9,\r\n UP: 38,\r\n WINDOWS: 91,\r\n X: 88\r\n }, window.Inputmask = Inputmask, Inputmask;\r\n}(jQuery), function($, Inputmask) {\r\n return void 0 === $.fn.inputmask && ($.fn.inputmask = function(fn, options) {\r\n var nptmask, input = this[0];\r\n if (void 0 === options && (options = {}), \"string\" == typeof fn) switch (fn) {\r\n case \"unmaskedvalue\":\r\n return input && input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val();\r\n\r\n case \"remove\":\r\n return this.each(function() {\r\n this.inputmask && this.inputmask.remove();\r\n });\r\n\r\n case \"getemptymask\":\r\n return input && input.inputmask ? input.inputmask.getemptymask() : \"\";\r\n\r\n case \"hasMaskedValue\":\r\n return !(!input || !input.inputmask) && input.inputmask.hasMaskedValue();\r\n\r\n case \"isComplete\":\r\n return !input || !input.inputmask || input.inputmask.isComplete();\r\n\r\n case \"getmetadata\":\r\n return input && input.inputmask ? input.inputmask.getmetadata() : void 0;\r\n\r\n case \"setvalue\":\r\n $(input).val(options), input && void 0 === input.inputmask && $(input).triggerHandler(\"setvalue\");\r\n break;\r\n\r\n case \"option\":\r\n if (\"string\" != typeof options) return this.each(function() {\r\n if (void 0 !== this.inputmask) return this.inputmask.option(options);\r\n });\r\n if (input && void 0 !== input.inputmask) return input.inputmask.option(options);\r\n break;\r\n\r\n default:\r\n return options.alias = fn, nptmask = new Inputmask(options), this.each(function() {\r\n nptmask.mask(this);\r\n });\r\n } else {\r\n if (\"object\" == typeof fn) return nptmask = new Inputmask(fn), void 0 === fn.mask && void 0 === fn.alias ? this.each(function() {\r\n return void 0 !== this.inputmask ? this.inputmask.option(fn) : void nptmask.mask(this);\r\n }) : this.each(function() {\r\n nptmask.mask(this);\r\n });\r\n if (void 0 === fn) return this.each(function() {\r\n nptmask = new Inputmask(options), nptmask.mask(this);\r\n });\r\n }\r\n }), $.fn.inputmask;\r\n}(jQuery, Inputmask), function($, Inputmask) {\r\n function isLeapYear(year) {\r\n return isNaN(year) || 29 === new Date(year, 2, 0).getDate();\r\n }\r\n return Inputmask.extendAliases({\r\n \"dd/mm/yyyy\": {\r\n mask: \"1/2/y\",\r\n placeholder: \"dd/mm/yyyy\",\r\n regex: {\r\n val1pre: new RegExp(\"[0-3]\"),\r\n val1: new RegExp(\"0[1-9]|[12][0-9]|3[01]\"),\r\n val2pre: function(separator) {\r\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\r\n return new RegExp(\"((0[1-9]|[12][0-9]|3[01])\" + escapedSeparator + \"[01])\");\r\n },\r\n val2: function(separator) {\r\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\r\n return new RegExp(\"((0[1-9]|[12][0-9])\" + escapedSeparator + \"(0[1-9]|1[012]))|(30\" + escapedSeparator + \"(0[13-9]|1[012]))|(31\" + escapedSeparator + \"(0[13578]|1[02]))\");\r\n }\r\n },\r\n leapday: \"29/02/\",\r\n separator: \"/\",\r\n yearrange: {\r\n minyear: 1900,\r\n maxyear: 2099\r\n },\r\n isInYearRange: function(chrs, minyear, maxyear) {\r\n if (isNaN(chrs)) return !1;\r\n var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))), enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));\r\n return !isNaN(enteredyear) && (minyear <= enteredyear && enteredyear <= maxyear) || !isNaN(enteredyear2) && (minyear <= enteredyear2 && enteredyear2 <= maxyear);\r\n },\r\n determinebaseyear: function(minyear, maxyear, hint) {\r\n var currentyear = new Date().getFullYear();\r\n if (minyear > currentyear) return minyear;\r\n if (maxyear < currentyear) {\r\n for (var maxYearPrefix = maxyear.toString().slice(0, 2), maxYearPostfix = maxyear.toString().slice(2, 4); maxyear < maxYearPrefix + hint; ) maxYearPrefix--;\r\n var maxxYear = maxYearPrefix + maxYearPostfix;\r\n return minyear > maxxYear ? minyear : maxxYear;\r\n }\r\n if (minyear <= currentyear && currentyear <= maxyear) {\r\n for (var currentYearPrefix = currentyear.toString().slice(0, 2); maxyear < currentYearPrefix + hint; ) currentYearPrefix--;\r\n var currentYearAndHint = currentYearPrefix + hint;\r\n return currentYearAndHint < minyear ? minyear : currentYearAndHint;\r\n }\r\n return currentyear;\r\n },\r\n onKeyDown: function(e, buffer, caretPos, opts) {\r\n var $input = $(this);\r\n if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\r\n var today = new Date();\r\n $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()), \r\n $input.trigger(\"setvalue\");\r\n }\r\n },\r\n getFrontValue: function(mask, buffer, opts) {\r\n for (var start = 0, length = 0, i = 0; i < mask.length && \"2\" !== mask.charAt(i); i++) {\r\n var definition = opts.definitions[mask.charAt(i)];\r\n definition ? (start += length, length = definition.cardinality) : length++;\r\n }\r\n return buffer.join(\"\").substr(start, length);\r\n },\r\n postValidation: function(buffer, currentResult, opts) {\r\n var dayMonthValue, year, bufferStr = buffer.join(\"\");\r\n return 0 === opts.mask.indexOf(\"y\") ? (year = bufferStr.substr(0, 4), dayMonthValue = bufferStr.substr(4, 11)) : (year = bufferStr.substr(6, 11), \r\n dayMonthValue = bufferStr.substr(0, 6)), currentResult && (dayMonthValue !== opts.leapday || isLeapYear(year));\r\n },\r\n definitions: {\r\n \"1\": {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n var isValid = opts.regex.val1.test(chrs);\r\n return strict || isValid || chrs.charAt(1) !== opts.separator && \"-./\".indexOf(chrs.charAt(1)) === -1 || !(isValid = opts.regex.val1.test(\"0\" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = \"0\", \r\n {\r\n refreshFromBuffer: {\r\n start: pos - 1,\r\n end: pos\r\n },\r\n pos: pos,\r\n c: chrs.charAt(0)\r\n });\r\n },\r\n cardinality: 2,\r\n prevalidator: [ {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n var pchrs = chrs;\r\n isNaN(maskset.buffer[pos + 1]) || (pchrs += maskset.buffer[pos + 1]);\r\n var isValid = 1 === pchrs.length ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs);\r\n if (!strict && !isValid) {\r\n if (isValid = opts.regex.val1.test(chrs + \"0\")) return maskset.buffer[pos] = chrs, \r\n maskset.buffer[++pos] = \"0\", {\r\n pos: pos,\r\n c: \"0\"\r\n };\r\n if (isValid = opts.regex.val1.test(\"0\" + chrs)) return maskset.buffer[pos] = \"0\", \r\n pos++, {\r\n pos: pos\r\n };\r\n }\r\n return isValid;\r\n },\r\n cardinality: 1\r\n } ]\r\n },\r\n \"2\": {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);\r\n frontValue.indexOf(opts.placeholder[0]) !== -1 && (frontValue = \"01\" + opts.separator);\r\n var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);\r\n return strict || isValid || chrs.charAt(1) !== opts.separator && \"-./\".indexOf(chrs.charAt(1)) === -1 || !(isValid = opts.regex.val2(opts.separator).test(frontValue + \"0\" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = \"0\", \r\n {\r\n refreshFromBuffer: {\r\n start: pos - 1,\r\n end: pos\r\n },\r\n pos: pos,\r\n c: chrs.charAt(0)\r\n });\r\n },\r\n cardinality: 2,\r\n prevalidator: [ {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]);\r\n var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);\r\n frontValue.indexOf(opts.placeholder[0]) !== -1 && (frontValue = \"01\" + opts.separator);\r\n var isValid = 1 === chrs.length ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);\r\n return strict || isValid || !(isValid = opts.regex.val2(opts.separator).test(frontValue + \"0\" + chrs)) ? isValid : (maskset.buffer[pos] = \"0\", \r\n pos++, {\r\n pos: pos\r\n });\r\n },\r\n cardinality: 1\r\n } ]\r\n },\r\n y: {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\r\n },\r\n cardinality: 4,\r\n prevalidator: [ {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\r\n if (!strict && !isValid) {\r\n var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + \"0\").toString().slice(0, 1);\r\n if (isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), \r\n {\r\n pos: pos\r\n };\r\n if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + \"0\").toString().slice(0, 2), \r\n isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), \r\n maskset.buffer[pos++] = yearPrefix.charAt(1), {\r\n pos: pos\r\n };\r\n }\r\n return isValid;\r\n },\r\n cardinality: 1\r\n }, {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\r\n if (!strict && !isValid) {\r\n var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);\r\n if (isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(1), \r\n {\r\n pos: pos\r\n };\r\n if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2), \r\n isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos - 1] = yearPrefix.charAt(0), \r\n maskset.buffer[pos++] = yearPrefix.charAt(1), maskset.buffer[pos++] = chrs.charAt(0), \r\n {\r\n refreshFromBuffer: {\r\n start: pos - 3,\r\n end: pos\r\n },\r\n pos: pos\r\n };\r\n }\r\n return isValid;\r\n },\r\n cardinality: 2\r\n }, {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\r\n },\r\n cardinality: 3\r\n } ]\r\n }\r\n },\r\n insertMode: !1,\r\n autoUnmask: !1\r\n },\r\n \"mm/dd/yyyy\": {\r\n placeholder: \"mm/dd/yyyy\",\r\n alias: \"dd/mm/yyyy\",\r\n regex: {\r\n val2pre: function(separator) {\r\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\r\n return new RegExp(\"((0[13-9]|1[012])\" + escapedSeparator + \"[0-3])|(02\" + escapedSeparator + \"[0-2])\");\r\n },\r\n val2: function(separator) {\r\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\r\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\" + escapedSeparator + \"30)|((0[13578]|1[02])\" + escapedSeparator + \"31)\");\r\n },\r\n val1pre: new RegExp(\"[01]\"),\r\n val1: new RegExp(\"0[1-9]|1[012]\")\r\n },\r\n leapday: \"02/29/\",\r\n onKeyDown: function(e, buffer, caretPos, opts) {\r\n var $input = $(this);\r\n if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\r\n var today = new Date();\r\n $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), \r\n $input.trigger(\"setvalue\");\r\n }\r\n }\r\n },\r\n \"yyyy/mm/dd\": {\r\n mask: \"y/1/2\",\r\n placeholder: \"yyyy/mm/dd\",\r\n alias: \"mm/dd/yyyy\",\r\n leapday: \"/02/29\",\r\n onKeyDown: function(e, buffer, caretPos, opts) {\r\n var $input = $(this);\r\n if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\r\n var today = new Date();\r\n $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()), \r\n $input.trigger(\"setvalue\");\r\n }\r\n }\r\n },\r\n \"dd.mm.yyyy\": {\r\n mask: \"1.2.y\",\r\n placeholder: \"dd.mm.yyyy\",\r\n leapday: \"29.02.\",\r\n separator: \".\",\r\n alias: \"dd/mm/yyyy\"\r\n },\r\n \"dd-mm-yyyy\": {\r\n mask: \"1-2-y\",\r\n placeholder: \"dd-mm-yyyy\",\r\n leapday: \"29-02-\",\r\n separator: \"-\",\r\n alias: \"dd/mm/yyyy\"\r\n },\r\n \"mm.dd.yyyy\": {\r\n mask: \"1.2.y\",\r\n placeholder: \"mm.dd.yyyy\",\r\n leapday: \"02.29.\",\r\n separator: \".\",\r\n alias: \"mm/dd/yyyy\"\r\n },\r\n \"mm-dd-yyyy\": {\r\n mask: \"1-2-y\",\r\n placeholder: \"mm-dd-yyyy\",\r\n leapday: \"02-29-\",\r\n separator: \"-\",\r\n alias: \"mm/dd/yyyy\"\r\n },\r\n \"yyyy.mm.dd\": {\r\n mask: \"y.1.2\",\r\n placeholder: \"yyyy.mm.dd\",\r\n leapday: \".02.29\",\r\n separator: \".\",\r\n alias: \"yyyy/mm/dd\"\r\n },\r\n \"yyyy-mm-dd\": {\r\n mask: \"y-1-2\",\r\n placeholder: \"yyyy-mm-dd\",\r\n leapday: \"-02-29\",\r\n separator: \"-\",\r\n alias: \"yyyy/mm/dd\"\r\n },\r\n datetime: {\r\n mask: \"1/2/y h:s\",\r\n placeholder: \"dd/mm/yyyy hh:mm\",\r\n alias: \"dd/mm/yyyy\",\r\n regex: {\r\n hrspre: new RegExp(\"[012]\"),\r\n hrs24: new RegExp(\"2[0-4]|1[3-9]\"),\r\n hrs: new RegExp(\"[01][0-9]|2[0-4]\"),\r\n ampm: new RegExp(\"^[a|p|A|P][m|M]\"),\r\n mspre: new RegExp(\"[0-5]\"),\r\n ms: new RegExp(\"[0-5][0-9]\")\r\n },\r\n timeseparator: \":\",\r\n hourFormat: \"24\",\r\n definitions: {\r\n h: {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n if (\"24\" === opts.hourFormat && 24 === parseInt(chrs, 10)) return maskset.buffer[pos - 1] = \"0\", \r\n maskset.buffer[pos] = \"0\", {\r\n refreshFromBuffer: {\r\n start: pos - 1,\r\n end: pos\r\n },\r\n c: \"0\"\r\n };\r\n var isValid = opts.regex.hrs.test(chrs);\r\n if (!strict && !isValid && (chrs.charAt(1) === opts.timeseparator || \"-.:\".indexOf(chrs.charAt(1)) !== -1) && (isValid = opts.regex.hrs.test(\"0\" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = \"0\", \r\n maskset.buffer[pos] = chrs.charAt(0), pos++, {\r\n refreshFromBuffer: {\r\n start: pos - 2,\r\n end: pos\r\n },\r\n pos: pos,\r\n c: opts.timeseparator\r\n };\r\n if (isValid && \"24\" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) {\r\n var tmp = parseInt(chrs, 10);\r\n return 24 === tmp ? (maskset.buffer[pos + 5] = \"a\", maskset.buffer[pos + 6] = \"m\") : (maskset.buffer[pos + 5] = \"p\", \r\n maskset.buffer[pos + 6] = \"m\"), tmp -= 12, tmp < 10 ? (maskset.buffer[pos] = tmp.toString(), \r\n maskset.buffer[pos - 1] = \"0\") : (maskset.buffer[pos] = tmp.toString().charAt(1), \r\n maskset.buffer[pos - 1] = tmp.toString().charAt(0)), {\r\n refreshFromBuffer: {\r\n start: pos - 1,\r\n end: pos + 6\r\n },\r\n c: maskset.buffer[pos]\r\n };\r\n }\r\n return isValid;\r\n },\r\n cardinality: 2,\r\n prevalidator: [ {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n var isValid = opts.regex.hrspre.test(chrs);\r\n return strict || isValid || !(isValid = opts.regex.hrs.test(\"0\" + chrs)) ? isValid : (maskset.buffer[pos] = \"0\", \r\n pos++, {\r\n pos: pos\r\n });\r\n },\r\n cardinality: 1\r\n } ]\r\n },\r\n s: {\r\n validator: \"[0-5][0-9]\",\r\n cardinality: 2,\r\n prevalidator: [ {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n var isValid = opts.regex.mspre.test(chrs);\r\n return strict || isValid || !(isValid = opts.regex.ms.test(\"0\" + chrs)) ? isValid : (maskset.buffer[pos] = \"0\", \r\n pos++, {\r\n pos: pos\r\n });\r\n },\r\n cardinality: 1\r\n } ]\r\n },\r\n t: {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n return opts.regex.ampm.test(chrs + \"m\");\r\n },\r\n casing: \"lower\",\r\n cardinality: 1\r\n }\r\n },\r\n insertMode: !1,\r\n autoUnmask: !1\r\n },\r\n datetime12: {\r\n mask: \"1/2/y h:s t\\\\m\",\r\n placeholder: \"dd/mm/yyyy hh:mm xm\",\r\n alias: \"datetime\",\r\n hourFormat: \"12\"\r\n },\r\n \"mm/dd/yyyy hh:mm xm\": {\r\n mask: \"1/2/y h:s t\\\\m\",\r\n placeholder: \"mm/dd/yyyy hh:mm xm\",\r\n alias: \"datetime12\",\r\n regex: {\r\n val2pre: function(separator) {\r\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\r\n return new RegExp(\"((0[13-9]|1[012])\" + escapedSeparator + \"[0-3])|(02\" + escapedSeparator + \"[0-2])\");\r\n },\r\n val2: function(separator) {\r\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\r\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\" + escapedSeparator + \"30)|((0[13578]|1[02])\" + escapedSeparator + \"31)\");\r\n },\r\n val1pre: new RegExp(\"[01]\"),\r\n val1: new RegExp(\"0[1-9]|1[012]\")\r\n },\r\n leapday: \"02/29/\",\r\n onKeyDown: function(e, buffer, caretPos, opts) {\r\n var $input = $(this);\r\n if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\r\n var today = new Date();\r\n $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), \r\n $input.trigger(\"setvalue\");\r\n }\r\n }\r\n },\r\n \"hh:mm t\": {\r\n mask: \"h:s t\\\\m\",\r\n placeholder: \"hh:mm xm\",\r\n alias: \"datetime\",\r\n hourFormat: \"12\"\r\n },\r\n \"h:s t\": {\r\n mask: \"h:s t\\\\m\",\r\n placeholder: \"hh:mm xm\",\r\n alias: \"datetime\",\r\n hourFormat: \"12\"\r\n },\r\n \"hh:mm:ss\": {\r\n mask: \"h:s:s\",\r\n placeholder: \"hh:mm:ss\",\r\n alias: \"datetime\",\r\n autoUnmask: !1\r\n },\r\n \"hh:mm\": {\r\n mask: \"h:s\",\r\n placeholder: \"hh:mm\",\r\n alias: \"datetime\",\r\n autoUnmask: !1\r\n },\r\n date: {\r\n alias: \"dd/mm/yyyy\"\r\n },\r\n \"mm/yyyy\": {\r\n mask: \"1/y\",\r\n placeholder: \"mm/yyyy\",\r\n leapday: \"donotuse\",\r\n separator: \"/\",\r\n alias: \"mm/dd/yyyy\"\r\n },\r\n shamsi: {\r\n regex: {\r\n val2pre: function(separator) {\r\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\r\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"[0-3])\");\r\n },\r\n val2: function(separator) {\r\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\r\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[1-9]|1[012])\" + escapedSeparator + \"30)|((0[1-6])\" + escapedSeparator + \"31)\");\r\n },\r\n val1pre: new RegExp(\"[01]\"),\r\n val1: new RegExp(\"0[1-9]|1[012]\")\r\n },\r\n yearrange: {\r\n minyear: 1300,\r\n maxyear: 1499\r\n },\r\n mask: \"y/1/2\",\r\n leapday: \"/12/30\",\r\n placeholder: \"yyyy/mm/dd\",\r\n alias: \"mm/dd/yyyy\",\r\n clearIncomplete: !0\r\n },\r\n \"yyyy-mm-dd hh:mm:ss\": {\r\n mask: \"y-1-2 h:s:s\",\r\n placeholder: \"yyyy-mm-dd hh:mm:ss\",\r\n alias: \"datetime\",\r\n separator: \"-\",\r\n leapday: \"-02-29\",\r\n regex: {\r\n val2pre: function(separator) {\r\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\r\n return new RegExp(\"((0[13-9]|1[012])\" + escapedSeparator + \"[0-3])|(02\" + escapedSeparator + \"[0-2])\");\r\n },\r\n val2: function(separator) {\r\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\r\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\" + escapedSeparator + \"30)|((0[13578]|1[02])\" + escapedSeparator + \"31)\");\r\n },\r\n val1pre: new RegExp(\"[01]\"),\r\n val1: new RegExp(\"0[1-9]|1[012]\")\r\n },\r\n onKeyDown: function(e, buffer, caretPos, opts) {}\r\n }\r\n }), Inputmask;\r\n}(jQuery, Inputmask), function($, Inputmask) {\r\n return Inputmask.extendDefinitions({\r\n A: {\r\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\r\n cardinality: 1,\r\n casing: \"upper\"\r\n },\r\n \"&\": {\r\n validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\r\n cardinality: 1,\r\n casing: \"upper\"\r\n },\r\n \"#\": {\r\n validator: \"[0-9A-Fa-f]\",\r\n cardinality: 1,\r\n casing: \"upper\"\r\n }\r\n }), Inputmask.extendAliases({\r\n url: {\r\n definitions: {\r\n i: {\r\n validator: \".\",\r\n cardinality: 1\r\n }\r\n },\r\n mask: \"(\\\\http://)|(\\\\http\\\\s://)|(ftp://)|(ftp\\\\s://)i{+}\",\r\n insertMode: !1,\r\n autoUnmask: !1,\r\n inputmode: \"url\"\r\n },\r\n ip: {\r\n mask: \"i[i[i]].i[i[i]].i[i[i]].i[i[i]]\",\r\n definitions: {\r\n i: {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n return pos - 1 > -1 && \".\" !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs, \r\n chrs = pos - 2 > -1 && \".\" !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : \"0\" + chrs) : chrs = \"00\" + chrs, \r\n new RegExp(\"25[0-5]|2[0-4][0-9]|[01][0-9][0-9]\").test(chrs);\r\n },\r\n cardinality: 1\r\n }\r\n },\r\n onUnMask: function(maskedValue, unmaskedValue, opts) {\r\n return maskedValue;\r\n },\r\n inputmode: \"numeric\"\r\n },\r\n email: {\r\n mask: \"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]\",\r\n greedy: !1,\r\n onBeforePaste: function(pastedValue, opts) {\r\n return pastedValue = pastedValue.toLowerCase(), pastedValue.replace(\"mailto:\", \"\");\r\n },\r\n definitions: {\r\n \"*\": {\r\n validator: \"[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]\",\r\n cardinality: 1,\r\n casing: \"lower\"\r\n },\r\n \"-\": {\r\n validator: \"[0-9A-Za-z-]\",\r\n cardinality: 1,\r\n casing: \"lower\"\r\n }\r\n },\r\n onUnMask: function(maskedValue, unmaskedValue, opts) {\r\n return maskedValue;\r\n },\r\n inputmode: \"email\"\r\n },\r\n mac: {\r\n mask: \"##:##:##:##:##:##\"\r\n },\r\n vin: {\r\n mask: \"V{13}9{4}\",\r\n definitions: {\r\n V: {\r\n validator: \"[A-HJ-NPR-Za-hj-npr-z\\\\d]\",\r\n cardinality: 1,\r\n casing: \"upper\"\r\n }\r\n },\r\n clearIncomplete: !0,\r\n autoUnmask: !0\r\n }\r\n }), Inputmask;\r\n}(jQuery, Inputmask), function($, Inputmask) {\r\n return Inputmask.extendAliases({\r\n numeric: {\r\n mask: function(opts) {\r\n function autoEscape(txt) {\r\n for (var escapedTxt = \"\", i = 0; i < txt.length; i++) escapedTxt += opts.definitions[txt.charAt(i)] || opts.optionalmarker.start === txt.charAt(i) || opts.optionalmarker.end === txt.charAt(i) || opts.quantifiermarker.start === txt.charAt(i) || opts.quantifiermarker.end === txt.charAt(i) || opts.groupmarker.start === txt.charAt(i) || opts.groupmarker.end === txt.charAt(i) || opts.alternatormarker === txt.charAt(i) ? \"\\\\\" + txt.charAt(i) : txt.charAt(i);\r\n return escapedTxt;\r\n }\r\n if (0 !== opts.repeat && isNaN(opts.integerDigits) && (opts.integerDigits = opts.repeat), \r\n opts.repeat = 0, opts.groupSeparator === opts.radixPoint && (\".\" === opts.radixPoint ? opts.groupSeparator = \",\" : \",\" === opts.radixPoint ? opts.groupSeparator = \".\" : opts.groupSeparator = \"\"), \r\n \" \" === opts.groupSeparator && (opts.skipOptionalPartCharacter = void 0), opts.autoGroup = opts.autoGroup && \"\" !== opts.groupSeparator, \r\n opts.autoGroup && (\"string\" == typeof opts.groupSize && isFinite(opts.groupSize) && (opts.groupSize = parseInt(opts.groupSize)), \r\n isFinite(opts.integerDigits))) {\r\n var seps = Math.floor(opts.integerDigits / opts.groupSize), mod = opts.integerDigits % opts.groupSize;\r\n opts.integerDigits = parseInt(opts.integerDigits) + (0 === mod ? seps - 1 : seps), \r\n opts.integerDigits < 1 && (opts.integerDigits = \"*\");\r\n }\r\n opts.placeholder.length > 1 && (opts.placeholder = opts.placeholder.charAt(0)), \r\n \"radixFocus\" === opts.positionCaretOnClick && \"\" === opts.placeholder && opts.integerOptional === !1 && (opts.positionCaretOnClick = \"lvp\"), \r\n opts.definitions[\";\"] = opts.definitions[\"~\"], opts.definitions[\";\"].definitionSymbol = \"~\", \r\n opts.numericInput === !0 && (opts.positionCaretOnClick = \"radixFocus\" === opts.positionCaretOnClick ? \"lvp\" : opts.positionCaretOnClick, \r\n opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), opts.decimalProtect = !1);\r\n var mask = \"[+]\";\r\n if (mask += autoEscape(opts.prefix), mask += opts.integerOptional === !0 ? \"~{1,\" + opts.integerDigits + \"}\" : \"~{\" + opts.integerDigits + \"}\", \r\n void 0 !== opts.digits) {\r\n opts.radixPointDefinitionSymbol = opts.decimalProtect ? \":\" : opts.radixPoint;\r\n var dq = opts.digits.toString().split(\",\");\r\n isFinite(dq[0] && dq[1] && isFinite(dq[1])) ? mask += opts.radixPointDefinitionSymbol + \";{\" + opts.digits + \"}\" : (isNaN(opts.digits) || parseInt(opts.digits) > 0) && (mask += opts.digitsOptional ? \"[\" + opts.radixPointDefinitionSymbol + \";{1,\" + opts.digits + \"}]\" : opts.radixPointDefinitionSymbol + \";{\" + opts.digits + \"}\");\r\n }\r\n return mask += autoEscape(opts.suffix), mask += \"[-]\", opts.greedy = !1, null !== opts.min && (opts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \r\n \",\" === opts.radixPoint && (opts.min = opts.min.replace(opts.radixPoint, \".\"))), \r\n null !== opts.max && (opts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \r\n \",\" === opts.radixPoint && (opts.max = opts.max.replace(opts.radixPoint, \".\"))), \r\n mask;\r\n },\r\n placeholder: \"\",\r\n greedy: !1,\r\n digits: \"*\",\r\n digitsOptional: !0,\r\n radixPoint: \".\",\r\n positionCaretOnClick: \"radixFocus\",\r\n groupSize: 3,\r\n groupSeparator: \"\",\r\n autoGroup: !1,\r\n allowPlus: !0,\r\n allowMinus: !0,\r\n negationSymbol: {\r\n front: \"-\",\r\n back: \"\"\r\n },\r\n integerDigits: \"+\",\r\n integerOptional: !0,\r\n prefix: \"\",\r\n suffix: \"\",\r\n rightAlign: !0,\r\n decimalProtect: !0,\r\n min: null,\r\n max: null,\r\n step: 1,\r\n insertMode: !0,\r\n autoUnmask: !1,\r\n unmaskAsNumber: !1,\r\n inputmode: \"numeric\",\r\n postFormat: function(buffer, pos, opts) {\r\n opts.numericInput === !0 && (buffer = buffer.reverse(), isFinite(pos) && (pos = buffer.join(\"\").length - pos - 1));\r\n var i, l;\r\n pos = pos >= buffer.length ? buffer.length - 1 : pos < 0 ? 0 : pos;\r\n var charAtPos = buffer[pos], cbuf = buffer.slice();\r\n charAtPos === opts.groupSeparator && pos > opts.prefix.length && pos < buffer.length - opts.suffix.length && (cbuf.splice(pos--, 1), \r\n charAtPos = cbuf[pos]);\r\n var isNegative = cbuf.join(\"\").match(new RegExp(\"^\" + Inputmask.escapeRegex(opts.negationSymbol.front)));\r\n isNegative = null !== isNegative && 1 === isNegative.length, pos > (isNegative ? opts.negationSymbol.front.length : 0) + opts.prefix.length && pos < cbuf.length - opts.suffix.length && (cbuf[pos] = \"!\");\r\n var bufVal = cbuf.join(\"\"), bufValOrigin = cbuf.join();\r\n if (isNegative && (bufVal = bufVal.replace(new RegExp(\"^\" + Inputmask.escapeRegex(opts.negationSymbol.front)), \"\"), \r\n bufVal = bufVal.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\")), \r\n bufVal = bufVal.replace(new RegExp(Inputmask.escapeRegex(opts.suffix) + \"$\"), \"\"), \r\n bufVal = bufVal.replace(new RegExp(\"^\" + Inputmask.escapeRegex(opts.prefix)), \"\"), \r\n bufVal.length > 0 && opts.autoGroup || bufVal.indexOf(opts.groupSeparator) !== -1) {\r\n var escapedGroupSeparator = Inputmask.escapeRegex(opts.groupSeparator);\r\n bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, \"g\"), \"\");\r\n var radixSplit = bufVal.split(charAtPos === opts.radixPoint ? \"!\" : opts.radixPoint);\r\n if (bufVal = \"\" === opts.radixPoint ? bufVal : radixSplit[0], charAtPos !== opts.negationSymbol.front && (bufVal = bufVal.replace(\"!\", \"?\")), \r\n bufVal.length > opts.groupSize) for (var reg = new RegExp(\"([-+]?[\\\\d?]+)([\\\\d?]{\" + opts.groupSize + \"})\"); reg.test(bufVal) && \"\" !== opts.groupSeparator; ) bufVal = bufVal.replace(reg, \"$1\" + opts.groupSeparator + \"$2\"), \r\n bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator);\r\n bufVal = bufVal.replace(\"?\", \"!\"), \"\" !== opts.radixPoint && radixSplit.length > 1 && (bufVal += (charAtPos === opts.radixPoint ? \"!\" : opts.radixPoint) + radixSplit[1]);\r\n }\r\n bufVal = opts.prefix + bufVal + opts.suffix, isNegative && (bufVal = opts.negationSymbol.front + bufVal + opts.negationSymbol.back);\r\n var needsRefresh = bufValOrigin !== bufVal.split(\"\").join(), newPos = $.inArray(\"!\", bufVal);\r\n if (newPos === -1 && (newPos = pos), needsRefresh) {\r\n for (buffer.length = bufVal.length, i = 0, l = bufVal.length; i < l; i++) buffer[i] = bufVal.charAt(i);\r\n buffer[newPos] = charAtPos;\r\n }\r\n return newPos = opts.numericInput && isFinite(pos) ? buffer.join(\"\").length - newPos - 1 : newPos, \r\n opts.numericInput && (buffer = buffer.reverse(), $.inArray(opts.radixPoint, buffer) < newPos && buffer.join(\"\").length - opts.suffix.length !== newPos && (newPos -= 1)), \r\n {\r\n pos: newPos,\r\n refreshFromBuffer: needsRefresh,\r\n buffer: buffer,\r\n isNegative: isNegative\r\n };\r\n },\r\n onBeforeWrite: function(e, buffer, caretPos, opts) {\r\n var rslt;\r\n if (e && (\"blur\" === e.type || \"checkval\" === e.type || \"keydown\" === e.type)) {\r\n var maskedValue = opts.numericInput ? buffer.slice().reverse().join(\"\") : buffer.join(\"\"), processValue = maskedValue.replace(opts.prefix, \"\");\r\n processValue = processValue.replace(opts.suffix, \"\"), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \r\n \",\" === opts.radixPoint && (processValue = processValue.replace(opts.radixPoint, \".\"));\r\n var isNegative = processValue.match(new RegExp(\"[-\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"]\", \"g\"));\r\n if (isNegative = null !== isNegative && 1 === isNegative.length, processValue = processValue.replace(new RegExp(\"[-\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"]\", \"g\"), \"\"), \r\n processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\"), \r\n isNaN(opts.placeholder) && (processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.placeholder), \"g\"), \"\")), \r\n processValue = processValue === opts.negationSymbol.front ? processValue + \"0\" : processValue, \r\n \"\" !== processValue && isFinite(processValue)) {\r\n var floatValue = parseFloat(processValue), signedFloatValue = isNegative ? floatValue * -1 : floatValue;\r\n if (\"blur\" === e.type && (null !== opts.min && isFinite(opts.min) && signedFloatValue < parseFloat(opts.min) ? (floatValue = Math.abs(opts.min), \r\n isNegative = opts.min < 0, maskedValue = void 0) : null !== opts.max && isFinite(opts.max) && signedFloatValue > parseFloat(opts.max) && (floatValue = Math.abs(opts.max), \r\n isNegative = opts.max < 0, maskedValue = void 0)), processValue = floatValue.toString().replace(\".\", opts.radixPoint).split(\"\"), \r\n isFinite(opts.digits)) {\r\n var radixPosition = $.inArray(opts.radixPoint, processValue), rpb = $.inArray(opts.radixPoint, maskedValue);\r\n radixPosition === -1 && (processValue.push(opts.radixPoint), radixPosition = processValue.length - 1);\r\n for (var i = 1; i <= opts.digits; i++) opts.digitsOptional || void 0 !== processValue[radixPosition + i] && processValue[radixPosition + i] !== opts.placeholder.charAt(0) ? rpb !== -1 && void 0 !== maskedValue[rpb + i] && (processValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i]) : processValue[radixPosition + i] = \"0\";\r\n processValue[processValue.length - 1] === opts.radixPoint && delete processValue[processValue.length - 1];\r\n }\r\n if (floatValue.toString() !== processValue && floatValue.toString() + \".\" !== processValue || isNegative) return processValue = (opts.prefix + processValue.join(\"\")).split(\"\"), \r\n !isNegative || 0 === floatValue && \"blur\" === e.type || (processValue.unshift(opts.negationSymbol.front), \r\n processValue.push(opts.negationSymbol.back)), opts.numericInput && (processValue = processValue.reverse()), \r\n rslt = opts.postFormat(processValue, opts.numericInput ? caretPos : caretPos - 1, opts), \r\n rslt.buffer && (rslt.refreshFromBuffer = rslt.buffer.join(\"\") !== buffer.join(\"\")), \r\n rslt;\r\n }\r\n }\r\n if (opts.autoGroup) return rslt = opts.postFormat(buffer, opts.numericInput ? caretPos : caretPos - 1, opts), \r\n rslt.caret = caretPos < (rslt.isNegative ? opts.negationSymbol.front.length : 0) + opts.prefix.length || caretPos > rslt.buffer.length - (rslt.isNegative ? opts.negationSymbol.back.length : 0) ? rslt.pos : rslt.pos + 1, \r\n rslt;\r\n },\r\n regex: {\r\n integerPart: function(opts) {\r\n return new RegExp(\"[\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"+]?\\\\d+\");\r\n },\r\n integerNPart: function(opts) {\r\n return new RegExp(\"[\\\\d\" + Inputmask.escapeRegex(opts.groupSeparator) + Inputmask.escapeRegex(opts.placeholder.charAt(0)) + \"]+\");\r\n }\r\n },\r\n signHandler: function(chrs, maskset, pos, strict, opts) {\r\n if (!strict && opts.allowMinus && \"-\" === chrs || opts.allowPlus && \"+\" === chrs) {\r\n var matchRslt = maskset.buffer.join(\"\").match(opts.regex.integerPart(opts));\r\n if (matchRslt && matchRslt[0].length > 0) return maskset.buffer[matchRslt.index] === (\"-\" === chrs ? \"+\" : opts.negationSymbol.front) ? \"-\" === chrs ? \"\" !== opts.negationSymbol.back ? {\r\n pos: 0,\r\n c: opts.negationSymbol.front,\r\n remove: 0,\r\n caret: pos,\r\n insert: {\r\n pos: maskset.buffer.length - 1,\r\n c: opts.negationSymbol.back\r\n }\r\n } : {\r\n pos: 0,\r\n c: opts.negationSymbol.front,\r\n remove: 0,\r\n caret: pos\r\n } : \"\" !== opts.negationSymbol.back ? {\r\n pos: 0,\r\n c: \"+\",\r\n remove: [ 0, maskset.buffer.length - 1 ],\r\n caret: pos\r\n } : {\r\n pos: 0,\r\n c: \"+\",\r\n remove: 0,\r\n caret: pos\r\n } : maskset.buffer[0] === (\"-\" === chrs ? opts.negationSymbol.front : \"+\") ? \"-\" === chrs && \"\" !== opts.negationSymbol.back ? {\r\n remove: [ 0, maskset.buffer.length - 1 ],\r\n caret: pos - 1\r\n } : {\r\n remove: 0,\r\n caret: pos - 1\r\n } : \"-\" === chrs ? \"\" !== opts.negationSymbol.back ? {\r\n pos: 0,\r\n c: opts.negationSymbol.front,\r\n caret: pos + 1,\r\n insert: {\r\n pos: maskset.buffer.length,\r\n c: opts.negationSymbol.back\r\n }\r\n } : {\r\n pos: 0,\r\n c: opts.negationSymbol.front,\r\n caret: pos + 1\r\n } : {\r\n pos: 0,\r\n c: chrs,\r\n caret: pos + 1\r\n };\r\n }\r\n return !1;\r\n },\r\n radixHandler: function(chrs, maskset, pos, strict, opts) {\r\n if (!strict && opts.numericInput !== !0 && chrs === opts.radixPoint && void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) {\r\n var radixPos = $.inArray(opts.radixPoint, maskset.buffer), integerValue = maskset.buffer.join(\"\").match(opts.regex.integerPart(opts));\r\n if (radixPos !== -1 && maskset.validPositions[radixPos]) return maskset.validPositions[radixPos - 1] ? {\r\n caret: radixPos + 1\r\n } : {\r\n pos: integerValue.index,\r\n c: integerValue[0],\r\n caret: radixPos + 1\r\n };\r\n if (!integerValue || \"0\" === integerValue[0] && integerValue.index + 1 !== pos) return maskset.buffer[integerValue ? integerValue.index : pos] = \"0\", \r\n {\r\n pos: (integerValue ? integerValue.index : pos) + 1,\r\n c: opts.radixPoint\r\n };\r\n }\r\n return !1;\r\n },\r\n leadingZeroHandler: function(chrs, maskset, pos, strict, opts, isSelection) {\r\n if (!strict) {\r\n var initialPos = pos, buffer = opts.numericInput === !0 ? maskset.buffer.slice(\"\").reverse() : maskset.buffer.slice(\"\");\r\n opts.numericInput && (pos = buffer.join(\"\").length - pos - 1), buffer.splice(0, opts.prefix.length), \r\n buffer.splice(buffer.length - opts.suffix.length, opts.suffix.length), pos -= opts.prefix.length;\r\n var radixPosition = $.inArray(opts.radixPoint, buffer), matchRslt = buffer.slice(0, radixPosition !== -1 ? radixPosition : void 0).join(\"\").match(opts.regex.integerNPart(opts));\r\n if (matchRslt && (radixPosition === -1 || pos <= radixPosition || opts.numericInput)) {\r\n var decimalPart = radixPosition === -1 ? 0 : parseInt(buffer.slice(radixPosition + 1).join(\"\")), leadingZero = 0 === matchRslt[0].indexOf(\"\" !== opts.placeholder ? opts.placeholder.charAt(0) : \"0\");\r\n if (opts.numericInput) {\r\n if (leadingZero && 0 !== decimalPart && isSelection !== !0) return maskset.buffer.splice(buffer.length - matchRslt.index - 1 + opts.suffix.length, 1), \r\n {\r\n pos: initialPos,\r\n remove: buffer.length - matchRslt.index - 1 + opts.suffix.length\r\n };\r\n } else {\r\n if (leadingZero && (matchRslt.index + 1 === pos || isSelection !== !0 && 0 === decimalPart)) return maskset.buffer.splice(matchRslt.index + opts.prefix.length, 1), \r\n {\r\n pos: matchRslt.index + opts.prefix.length,\r\n remove: matchRslt.index + opts.prefix.length\r\n };\r\n if (\"0\" === chrs && pos <= matchRslt.index && matchRslt[0] !== opts.groupSeparator) return !1;\r\n }\r\n }\r\n }\r\n return !0;\r\n },\r\n definitions: {\r\n \"~\": {\r\n validator: function(chrs, maskset, pos, strict, opts, isSelection) {\r\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\r\n if (!isValid && (isValid = opts.radixHandler(chrs, maskset, pos, strict, opts), \r\n !isValid && (isValid = strict ? new RegExp(\"[0-9\" + Inputmask.escapeRegex(opts.groupSeparator) + \"]\").test(chrs) : new RegExp(\"[0-9]\").test(chrs), \r\n isValid === !0 && (isValid = opts.leadingZeroHandler(chrs, maskset, pos, strict, opts, isSelection), \r\n isValid === !0 && opts.numericInput !== !0)))) {\r\n var radixPosition = $.inArray(opts.radixPoint, maskset.buffer);\r\n isValid = radixPosition !== -1 && (opts.digitsOptional === !1 || maskset.validPositions[pos]) && opts.numericInput !== !0 && pos > radixPosition && !strict ? {\r\n pos: pos,\r\n remove: pos\r\n } : {\r\n pos: pos\r\n };\r\n }\r\n return isValid;\r\n },\r\n cardinality: 1\r\n },\r\n \"+\": {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\r\n return !isValid && (strict && opts.allowMinus && chrs === opts.negationSymbol.front || opts.allowMinus && \"-\" === chrs || opts.allowPlus && \"+\" === chrs) && (isValid = !(!strict && \"-\" === chrs) || (\"\" !== opts.negationSymbol.back ? {\r\n pos: pos,\r\n c: \"-\" === chrs ? opts.negationSymbol.front : \"+\",\r\n caret: pos + 1,\r\n insert: {\r\n pos: maskset.buffer.length,\r\n c: opts.negationSymbol.back\r\n }\r\n } : {\r\n pos: pos,\r\n c: \"-\" === chrs ? opts.negationSymbol.front : \"+\",\r\n caret: pos + 1\r\n })), isValid;\r\n },\r\n cardinality: 1,\r\n placeholder: \"\"\r\n },\r\n \"-\": {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\r\n return !isValid && strict && opts.allowMinus && chrs === opts.negationSymbol.back && (isValid = !0), \r\n isValid;\r\n },\r\n cardinality: 1,\r\n placeholder: \"\"\r\n },\r\n \":\": {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\r\n if (!isValid) {\r\n var radix = \"[\" + Inputmask.escapeRegex(opts.radixPoint) + \"]\";\r\n isValid = new RegExp(radix).test(chrs), isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint && (isValid = {\r\n caret: pos + 1\r\n });\r\n }\r\n return isValid;\r\n },\r\n cardinality: 1,\r\n placeholder: function(opts) {\r\n return opts.radixPoint;\r\n }\r\n }\r\n },\r\n onUnMask: function(maskedValue, unmaskedValue, opts) {\r\n if (\"\" === unmaskedValue && opts.nullable === !0) return unmaskedValue;\r\n var processValue = maskedValue.replace(opts.prefix, \"\");\r\n return processValue = processValue.replace(opts.suffix, \"\"), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \r\n opts.unmaskAsNumber ? (\"\" !== opts.radixPoint && processValue.indexOf(opts.radixPoint) !== -1 && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), \".\")), \r\n Number(processValue)) : processValue;\r\n },\r\n isComplete: function(buffer, opts) {\r\n var maskedValue = buffer.join(\"\"), bufClone = buffer.slice();\r\n if (opts.postFormat(bufClone, 0, opts), bufClone.join(\"\") !== maskedValue) return !1;\r\n var processValue = maskedValue.replace(opts.prefix, \"\");\r\n return processValue = processValue.replace(opts.suffix, \"\"), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \r\n \",\" === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), \".\")), \r\n isFinite(processValue);\r\n },\r\n onBeforeMask: function(initialValue, opts) {\r\n if (initialValue = initialValue.toString(), opts.numericInput === !0 && (initialValue = initialValue.split(\"\").reverse().join(\"\")), \r\n \"\" !== opts.radixPoint && isFinite(initialValue)) {\r\n var vs = initialValue.split(\".\"), groupSize = \"\" !== opts.groupSeparator ? parseInt(opts.groupSize) : 0;\r\n 2 === vs.length && (vs[0].length > groupSize || vs[1].length > groupSize) && (initialValue = initialValue.replace(\".\", opts.radixPoint));\r\n }\r\n var kommaMatches = initialValue.match(/,/g), dotMatches = initialValue.match(/\\./g);\r\n if (dotMatches && kommaMatches ? dotMatches.length > kommaMatches.length ? (initialValue = initialValue.replace(/\\./g, \"\"), \r\n initialValue = initialValue.replace(\",\", opts.radixPoint)) : kommaMatches.length > dotMatches.length ? (initialValue = initialValue.replace(/,/g, \"\"), \r\n initialValue = initialValue.replace(\".\", opts.radixPoint)) : initialValue = initialValue.indexOf(\".\") < initialValue.indexOf(\",\") ? initialValue.replace(/\\./g, \"\") : initialValue = initialValue.replace(/,/g, \"\") : initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \r\n 0 === opts.digits && (initialValue.indexOf(\".\") !== -1 ? initialValue = initialValue.substring(0, initialValue.indexOf(\".\")) : initialValue.indexOf(\",\") !== -1 && (initialValue = initialValue.substring(0, initialValue.indexOf(\",\")))), \r\n \"\" !== opts.radixPoint && isFinite(opts.digits) && initialValue.indexOf(opts.radixPoint) !== -1) {\r\n var valueParts = initialValue.split(opts.radixPoint), decPart = valueParts[1].match(new RegExp(\"\\\\d*\"))[0];\r\n if (parseInt(opts.digits) < decPart.toString().length) {\r\n var digitsFactor = Math.pow(10, parseInt(opts.digits));\r\n initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), \".\"), \r\n initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor, \r\n initialValue = initialValue.toString().replace(\".\", opts.radixPoint);\r\n }\r\n }\r\n return opts.numericInput === !0 && (initialValue = initialValue.split(\"\").reverse().join(\"\")), \r\n initialValue;\r\n },\r\n canClearPosition: function(maskset, position, lvp, strict, opts) {\r\n var positionInput = maskset.validPositions[position].input, canClear = positionInput !== opts.radixPoint || null !== maskset.validPositions[position].match.fn && opts.decimalProtect === !1 || isFinite(positionInput) || position === lvp || positionInput === opts.groupSeparator || positionInput === opts.negationSymbol.front || positionInput === opts.negationSymbol.back;\r\n return canClear;\r\n },\r\n onKeyDown: function(e, buffer, caretPos, opts) {\r\n var $input = $(this);\r\n if (e.ctrlKey) switch (e.keyCode) {\r\n case Inputmask.keyCode.UP:\r\n $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger(\"setvalue\");\r\n break;\r\n\r\n case Inputmask.keyCode.DOWN:\r\n $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger(\"setvalue\");\r\n }\r\n }\r\n },\r\n currency: {\r\n prefix: \"$ \",\r\n groupSeparator: \",\",\r\n alias: \"numeric\",\r\n placeholder: \"0\",\r\n autoGroup: !0,\r\n digits: 2,\r\n digitsOptional: !1,\r\n clearMaskOnLostFocus: !1\r\n },\r\n decimal: {\r\n alias: \"numeric\"\r\n },\r\n integer: {\r\n alias: \"numeric\",\r\n digits: 0,\r\n radixPoint: \"\"\r\n },\r\n percentage: {\r\n alias: \"numeric\",\r\n digits: 2,\r\n radixPoint: \".\",\r\n placeholder: \"0\",\r\n autoGroup: !1,\r\n min: 0,\r\n max: 100,\r\n suffix: \" %\",\r\n allowPlus: !1,\r\n allowMinus: !1\r\n }\r\n }), Inputmask;\r\n}(jQuery, Inputmask), function($, Inputmask) {\r\n function maskSort(a, b) {\r\n var maska = (a.mask || a).replace(/#/g, \"9\").replace(/\\)/, \"9\").replace(/[+()#-]/g, \"\"), maskb = (b.mask || b).replace(/#/g, \"9\").replace(/\\)/, \"9\").replace(/[+()#-]/g, \"\"), maskas = (a.mask || a).split(\"#\")[0], maskbs = (b.mask || b).split(\"#\")[0];\r\n return 0 === maskbs.indexOf(maskas) ? -1 : 0 === maskas.indexOf(maskbs) ? 1 : maska.localeCompare(maskb);\r\n }\r\n var analyseMaskBase = Inputmask.prototype.analyseMask;\r\n return Inputmask.prototype.analyseMask = function(mask, opts) {\r\n function reduceVariations(masks, previousVariation, previousmaskGroup) {\r\n previousVariation = previousVariation || \"\", previousmaskGroup = previousmaskGroup || maskGroups, \r\n \"\" !== previousVariation && (previousmaskGroup[previousVariation] = {});\r\n for (var variation = \"\", maskGroup = previousmaskGroup[previousVariation] || previousmaskGroup, i = masks.length - 1; i >= 0; i--) mask = masks[i].mask || masks[i], \r\n variation = mask.substr(0, 1), maskGroup[variation] = maskGroup[variation] || [], \r\n maskGroup[variation].unshift(mask.substr(1)), masks.splice(i, 1);\r\n for (var ndx in maskGroup) maskGroup[ndx].length > 500 && reduceVariations(maskGroup[ndx].slice(), ndx, maskGroup);\r\n }\r\n function rebuild(maskGroup) {\r\n var mask = \"\", submasks = [];\r\n for (var ndx in maskGroup) $.isArray(maskGroup[ndx]) ? 1 === maskGroup[ndx].length ? submasks.push(ndx + maskGroup[ndx]) : submasks.push(ndx + opts.groupmarker.start + maskGroup[ndx].join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end) : submasks.push(ndx + rebuild(maskGroup[ndx]));\r\n return mask += 1 === submasks.length ? submasks[0] : opts.groupmarker.start + submasks.join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end;\r\n }\r\n var maskGroups = {};\r\n opts.phoneCodes && (opts.phoneCodes && opts.phoneCodes.length > 1e3 && (mask = mask.substr(1, mask.length - 2), \r\n reduceVariations(mask.split(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start)), \r\n mask = rebuild(maskGroups)), mask = mask.replace(/9/g, \"\\\\9\"));\r\n var mt = analyseMaskBase.call(this, mask, opts);\r\n return mt;\r\n }, Inputmask.extendAliases({\r\n abstractphone: {\r\n groupmarker: {\r\n start: \"<\",\r\n end: \">\"\r\n },\r\n countrycode: \"\",\r\n phoneCodes: [],\r\n mask: function(opts) {\r\n return opts.definitions = {\r\n \"#\": Inputmask.prototype.definitions[9]\r\n }, opts.phoneCodes.sort(maskSort);\r\n },\r\n keepStatic: !0,\r\n onBeforeMask: function(value, opts) {\r\n var processedValue = value.replace(/^0{1,2}/, \"\").replace(/[\\s]/g, \"\");\r\n return (processedValue.indexOf(opts.countrycode) > 1 || processedValue.indexOf(opts.countrycode) === -1) && (processedValue = \"+\" + opts.countrycode + processedValue), \r\n processedValue;\r\n },\r\n onUnMask: function(maskedValue, unmaskedValue, opts) {\r\n return unmaskedValue;\r\n },\r\n inputmode: \"tel\"\r\n }\r\n }), Inputmask;\r\n}(jQuery, Inputmask), function($, Inputmask) {\r\n return Inputmask.extendAliases({\r\n Regex: {\r\n mask: \"r\",\r\n greedy: !1,\r\n repeat: \"*\",\r\n regex: null,\r\n regexTokens: null,\r\n tokenizer: /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\S\\s]?)*]?|\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\\S\\s]?)|\\((?:\\?[:=!]?)?|(?:[?*+]|\\{[0-9]+(?:,[0-9]*)?\\})\\??|[^.?*+^${[()|\\\\]+|./g,\r\n quantifierFilter: /[0-9]+[^,]/,\r\n isComplete: function(buffer, opts) {\r\n return new RegExp(opts.regex, opts.casing ? \"i\" : \"\").test(buffer.join(\"\"));\r\n },\r\n definitions: {\r\n r: {\r\n validator: function(chrs, maskset, pos, strict, opts) {\r\n function RegexToken(isGroup, isQuantifier) {\r\n this.matches = [], this.isGroup = isGroup || !1, this.isQuantifier = isQuantifier || !1, \r\n this.quantifier = {\r\n min: 1,\r\n max: 1\r\n }, this.repeaterPart = void 0;\r\n }\r\n function analyseRegex() {\r\n var match, m, currentToken = new RegexToken(), opengroups = [];\r\n for (opts.regexTokens = []; match = opts.tokenizer.exec(opts.regex); ) switch (m = match[0], \r\n m.charAt(0)) {\r\n case \"(\":\r\n opengroups.push(new RegexToken((!0)));\r\n break;\r\n\r\n case \")\":\r\n groupToken = opengroups.pop(), opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(groupToken) : currentToken.matches.push(groupToken);\r\n break;\r\n\r\n case \"{\":\r\n case \"+\":\r\n case \"*\":\r\n var quantifierToken = new RegexToken((!1), (!0));\r\n m = m.replace(/[{}]/g, \"\");\r\n var mq = m.split(\",\"), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);\r\n if (quantifierToken.quantifier = {\r\n min: mq0,\r\n max: mq1\r\n }, opengroups.length > 0) {\r\n var matches = opengroups[opengroups.length - 1].matches;\r\n match = matches.pop(), match.isGroup || (groupToken = new RegexToken((!0)), groupToken.matches.push(match), \r\n match = groupToken), matches.push(match), matches.push(quantifierToken);\r\n } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new RegexToken((!0)), \r\n groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), \r\n currentToken.matches.push(quantifierToken);\r\n break;\r\n\r\n default:\r\n opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(m) : currentToken.matches.push(m);\r\n }\r\n currentToken.matches.length > 0 && opts.regexTokens.push(currentToken);\r\n }\r\n function validateRegexToken(token, fromGroup) {\r\n var isvalid = !1;\r\n fromGroup && (regexPart += \"(\", openGroupCount++);\r\n for (var mndx = 0; mndx < token.matches.length; mndx++) {\r\n var matchToken = token.matches[mndx];\r\n if (matchToken.isGroup === !0) isvalid = validateRegexToken(matchToken, !0); else if (matchToken.isQuantifier === !0) {\r\n var crrntndx = $.inArray(matchToken, token.matches), matchGroup = token.matches[crrntndx - 1], regexPartBak = regexPart;\r\n if (isNaN(matchToken.quantifier.max)) {\r\n for (;matchToken.repeaterPart && matchToken.repeaterPart !== regexPart && matchToken.repeaterPart.length > regexPart.length && !(isvalid = validateRegexToken(matchGroup, !0)); ) ;\r\n isvalid = isvalid || validateRegexToken(matchGroup, !0), isvalid && (matchToken.repeaterPart = regexPart), \r\n regexPart = regexPartBak + matchToken.quantifier.max;\r\n } else {\r\n for (var i = 0, qm = matchToken.quantifier.max - 1; i < qm && !(isvalid = validateRegexToken(matchGroup, !0)); i++) ;\r\n regexPart = regexPartBak + \"{\" + matchToken.quantifier.min + \",\" + matchToken.quantifier.max + \"}\";\r\n }\r\n } else if (void 0 !== matchToken.matches) for (var k = 0; k < matchToken.length && !(isvalid = validateRegexToken(matchToken[k], fromGroup)); k++) ; else {\r\n var testExp;\r\n if (\"[\" == matchToken.charAt(0)) {\r\n testExp = regexPart, testExp += matchToken;\r\n for (var j = 0; j < openGroupCount; j++) testExp += \")\";\r\n var exp = new RegExp(\"^(\" + testExp + \")$\", opts.casing ? \"i\" : \"\");\r\n isvalid = exp.test(bufferStr);\r\n } else for (var l = 0, tl = matchToken.length; l < tl; l++) if (\"\\\\\" !== matchToken.charAt(l)) {\r\n testExp = regexPart, testExp += matchToken.substr(0, l + 1), testExp = testExp.replace(/\\|$/, \"\");\r\n for (var j = 0; j < openGroupCount; j++) testExp += \")\";\r\n var exp = new RegExp(\"^(\" + testExp + \")$\", opts.casing ? \"i\" : \"\");\r\n if (isvalid = exp.test(bufferStr)) break;\r\n }\r\n regexPart += matchToken;\r\n }\r\n if (isvalid) break;\r\n }\r\n return fromGroup && (regexPart += \")\", openGroupCount--), isvalid;\r\n }\r\n var bufferStr, groupToken, cbuffer = maskset.buffer.slice(), regexPart = \"\", isValid = !1, openGroupCount = 0;\r\n null === opts.regexTokens && analyseRegex(), cbuffer.splice(pos, 0, chrs), bufferStr = cbuffer.join(\"\");\r\n for (var i = 0; i < opts.regexTokens.length; i++) {\r\n var regexToken = opts.regexTokens[i];\r\n if (isValid = validateRegexToken(regexToken, regexToken.isGroup)) break;\r\n }\r\n return isValid;\r\n },\r\n cardinality: 1\r\n }\r\n }\r\n }\r\n }), Inputmask;\r\n}(jQuery, Inputmask);"]}